ETH Price: $3,951.11 (+2.11%)

Token

ERC-20: Space Pop Troopers (SPT)
 

Overview

Max Total Supply

1,741 SPT

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0.00000001 SPT

Value
$0.00
0xf5d868be658c0fe56d3f3c10f6e65976f94cbc11
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:
SPT

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : SPT.sol
// A public demonstration in single-contract dual-token implementations
// with zero-conflict events, and function overloading.

// Website : https://spacepoptroopers.io/
// X : https://x.com/spt_erc741
// TG : https://t.me/SPT_ERC741

// A big thank you to Serec Thunderson for your awesome code contribution.
// Your work is greatly appreciated.
// Thank you for your valuable input.

// Find his work on the following link:
// https://github.com/SJ741/sj741-token

// WARNING - Fungible NFT specs are universally new, and inherently DANGEROUS
// no systems have been built with these use-cases in mind, and there are a number of
// ways that experimental, complex contracts can lead to unforeseen consequences.
// INTERACT WITH EXPERIMENTAL SMART CONTRACTS AT YOUR OWN RISK

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// libraries to separate ERC20 and ERC721 events, and certain signature-specific functions
// ERC20 events
library libSPT20 {
    event Transfer(address indexed from, address indexed to, uint amount);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function emitTransfer(address _from, address _to, uint _amount) internal {
        emit Transfer(_from, _to, _amount);
    }

    function emitApproval(
        address _owner,
        address _spender,
        uint _value
    ) internal {
        emit Approval(_owner, _spender, _value);
    }
}

// ERC721 events
library libSPT721 {
    event Transfer(
        address indexed _from,
        address indexed _to,
        uint indexed _tokenId
    );
    event Approval(
        address indexed _owner,
        address indexed _approved,
        uint indexed _tokenId
    );
    event ApprovalForAll(
        address indexed _owner,
        address indexed _operator,
        bool _approved
    );

    function emitTransfer(address _from, address _to, uint _tokenId) internal {
        emit Transfer(_from, _to, _tokenId);
    }

    function emitApproval(
        address _owner,
        address _approve,
        uint _tokenId
    ) internal {
        emit Approval(_owner, _approve, _tokenId);
    }

    function emitApprovalForAll(
        address _owner,
        address _operator,
        bool _approved
    ) internal {
        emit ApprovalForAll(_owner, _operator, _approved);
    }
}

// ERC165 https://eips.ethereum.org/EIPS/eip-721
interface IERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

// ERC20 https://eips.ethereum.org/EIPS/eip-20
interface IERC20 {
    function balanceOf(address account) external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

// ERC721 https://eips.ethereum.org/EIPS/eip-721
interface IERC721 is IERC165 {
    function balanceOf(address account) external view returns (uint256);

    function ownerOf(uint256 _tokenId) external view returns (address);

    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes memory data
    ) external payable;

    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    ) external payable;

    function setApprovalForAll(address _operator, bool _approved) external;

    function getApproved(uint256 _tokenId) external view returns (address);

    function isApprovedForAll(
        address _owner,
        address _operator
    ) external view returns (bool);

    // payable removed for erc20 etherscan compatibility
    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

interface ISPT741 is IERC20, IERC721 {
    // library transfers can not be included in the interface
    // incorporate them directly with library
    // libSPT20.Transfer
    // libSPT20.Approval
    // libSPT721.Transfer
    // libSPT721.Approval
    // libSPT721.ApprovalForAll
    function balanceOf(
        address account
    ) external view override(IERC20, IERC721) returns (uint256);

    function approve(
        address spender,
        uint256 value
    ) external override(IERC20, IERC721) returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override(IERC20, IERC721) returns (bool);
}

// ERC721 Token Receiver https://eips.ethereum.org/EIPS/eip-721
interface IERC721TokenReceiver {
    function onERC721Received(
        address _operator,
        address _from,
        uint256 _tokenId,
        bytes memory _data
    ) external returns (bytes4);
}

contract SPT is ISPT741 {
    string public baseURI =
        "ipfs://bafybeidskgytes3zn4ge2yoejahnl7gmlsuwirg2czsujhxbzcwrthuuti/";
    string internal constant _name = "Space Pop Troopers";
    string internal constant _symbol = "SPT";

    uint internal constant _decimals = 8;
    uint internal constant _totalIds = 1741;
    uint internal constant _totalSupply = _totalIds * 10 ** _decimals;
    uint internal constant ONE = 10 ** _decimals; // 1.0 token(s)
    uint internal constant MAXID = ONE + _totalIds; // 1.00000001 : 1.00007777 is the range for NFT IDs

    uint32 public minted; // number of unique ID mints
    uint32[] private broken; // broken NFTs stored in limbo list

    address public dev;
    bool public supportsNFTinterface;
    bool public skipMintingGlobal = false;

    mapping(address => mapping(address => bool)) private _operatorApprovals;
    mapping(address => mapping(address => uint)) internal _allowance;
    mapping(uint256 => address) public ownerOf;
    mapping(uint256 => address) private _nftApprovals;
    mapping(address => uint) internal _balanceOf;
    mapping(address => uint32[]) public ownedNFTs;
    mapping(uint32 => uint256) private idToIndex;
    mapping(address => bool) internal skipMintingUser;

    function setSkipMintingGlobal(bool newSkipMintingGlobal) public onlyDev {
        skipMintingGlobal = newSkipMintingGlobal;
    }

    function setSkipMinting(bool newSkipMinting) public {
        skipMintingUser[msg.sender] = newSkipMinting;
    }

    error UnsupportedReceiver();

    modifier onlyDev() {
        require(msg.sender == dev, "Not the developer");
        _;
    }

    constructor() {
        //set minted at ONE to ensure correct operation within range of IDs
        minted = uint32(ONE);

        //the message sender receives the entire supply
        _balanceOf[msg.sender] = _totalSupply;

        //the message sender is set as "dev" role
        dev = msg.sender;
    }

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

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

    function decimals() public view virtual returns (uint) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint) {
        return _balanceOf[account];
    }

    function allowance(
        address owner,
        address spender
    ) public view override returns (uint) {
        return _allowance[owner][spender];
    }

    function setBaseURI(string memory newBaseURI) public onlyDev {
        baseURI = newBaseURI;
    }

    function changeDev(address newDev) public onlyDev {
        dev = newDev;
    } //simple function to change developer address, or revoke ownership (with address(0))

    // @DEV toggleNFTinterface is for the small possibility of frontend system changes leading the contract to favor enabling the disabled supportsNFTinterface flag
    // don't waste it, as frontends don't typically change classification of contracts
    // probably never to be used.
    function toggelNFTinterface() public onlyDev {
        supportsNFTinterface = !supportsNFTinterface;
    }

    function approve(
        address spender,
        uint amount
    ) public override returns (bool) {
        // if the amount is greater than one token, and within range of IDs for NFTs
        // then set NFT approval for the given ID
        if (amount > ONE && amount <= MAXID) {
            address owner = ownerOf[amount]; // getting the owner of token ID via the `amount` input
            if (msg.sender != owner && !isApprovedForAll(owner, msg.sender))
                revert("SPT741: You are not approved");
            _nftApprovals[amount] = spender; // calling nft approval for the token and spender
            libSPT721.emitApproval(owner, spender, amount);
            return true;
        }

        // else set the ERC20 allowance
        // the NFT ID range being set within a limited subset of ONE token(s)
        // allows for non-clashing interactions
        _allowance[msg.sender][spender] = amount;
        libSPT20.emitApproval(msg.sender, spender, amount);
        return true;
    }

    function _transfer741(
        address from,
        address to,
        uint amount
    ) internal virtual {
        require(
            _balanceOf[from] >= amount,
            "SPT741: transfer amount exceeds balance"
        );

        // checking the decimal amount of tokens owned before transaction for both participants
        uint256 fromDecimalsPre = _balanceOf[from] % ONE;
        uint256 toDecimalsPre = _balanceOf[to] % ONE;

        // simple erc20 balance operations
        _transfer20(from, to, amount);

        // checking the decimal amount of tokens after transaction for both partcipants
        uint256 fromDecimalsPost = _balanceOf[from] % ONE;
        uint256 toDecimalsPost = _balanceOf[to] % ONE;

        // stores the NFT IDs owned by `from`, enabling NFT management for that address.
        uint32[] storage ownedNFTsArray = ownedNFTs[from];

        // references NFTs marked as "broken", tracking these special state NFTs.
        uint32[] storage brokenIDsArray = broken;

        // if sender has higher decimal count after transaction, then they "roll under" and break an NFT
        if (fromDecimalsPre < fromDecimalsPost) {
            if (ownedNFTsArray.length > 0) {
                // if the sender has an nft to send

                uint32 tokenId = ownedNFTsArray[0]; //selects the user's first NFT from the list

                brokenIDsArray.push(tokenId); //pushes the nft into the "broken list" for limbo NFTs
                _transfer721(from, address(0), tokenId); //transfers the NFT ID ownership to (0) address for stewardship
            }
        }

        // if receiver has lower decimal count after transaction then they "roll over" and will "remake" an nft
        if (toDecimalsPre > toDecimalsPost) {
            if (brokenIDsArray.length > 0) {
                // recover an id from broken list

                _transfer721(
                    address(0),
                    to,
                    brokenIDsArray[brokenIDsArray.length - 1]
                );
                brokenIDsArray.pop();
            } else {
                // mint new id
                _mint(to);
            }
        }

        // amount of tokens - amount of whole tokens being processed in int
        uint amountInTokens = amount / ONE;

        // ignore minting nfts from dev when they call -- this allows for gas-efficient team operations
        // @DEV if dev gathers NFTs, use the ERC721 transferFrom method to extract
        // @DEV be careful, don't let the wallet fall to some convoluted transferFrom scam to do something unexpected
        if (
            from == dev ||
            skipMintingGlobal ||
            skipMintingUser[to] ||
            skipMintingUser[from]
        ) return;

        if (amountInTokens > 0) {
            uint len = ownedNFTsArray.length; //len is the length, or number of NFTs in the addresses's owned array
            len = amountInTokens < len ? amountInTokens : len;
            // transfers owned NFTs from `from` to `to` until either all are transferred or the desired amount is reached
            // Subtracts transferred NFT count from `amountInTokens` to update remaining transfers
            for (uint i = 0; i < len; i++) {
                _transfer721(from, to, ownedNFTsArray[0]);
            }
            amountInTokens -= len;
            len = brokenIDsArray.length;
            len = amountInTokens < len ? amountInTokens : len;

            // recovers NFTs from the broken state to `to`, or mints new ones if not enough broken NFTs are available
            // if any tokens remain to be allocated, it mints new NFTs to `to` for the remaining balance
            for (uint i = 0; i < len; i++) {
                _transfer721(
                    address(0),
                    to,
                    brokenIDsArray[brokenIDsArray.length - 1]
                );
                brokenIDsArray.pop();
            }

            _mintBatch(to, amountInTokens - len);
        }
    }

    function _mintBatch(address to, uint256 amount) internal {
        if (amount == 0) return; // Exit if no NFTs to mint

        if (amount == 1) {
            // Optimize single mint process
            _mint(to);
            return;
        }
        uint32 id = minted; // Start ID from last minted value
        uint256 ownedLen = ownedNFTs[to].length; // Current number of NFTs owned by 'to'
        for (uint i = 0; i < amount; ) {
            unchecked {
                id++; // Increment ID for each new NFT
            }
            ownerOf[id] = to; // Assign new NFT to owner.
            idToIndex[id] = ownedLen; // Map NFT ID to its index in owner's array
            ownedNFTs[to].push(id); // Add new NFT ID to owner's list

            libSPT721.emitTransfer(address(0), to, id); // Emit NFT transfer event

            unchecked {
                ownedLen++; // Increment count of owned NFTs
                i++; // Move to next NFT
            }
        }
        unchecked {
            minted += uint32(amount); // Update total minted count
        }
    }

    function _mint(address to) internal returns (uint32 tokenId) {
        unchecked {
            minted++; // Increment the total number of minted tokens
        }
        tokenId = minted; // Assign the newly minted token ID

        ownerOf[tokenId] = to; // Set ownership of the new token to 'to'
        idToIndex[tokenId] = ownedNFTs[to].length; // Map the new token ID to its index in the owner's list
        ownedNFTs[to].push(tokenId); // Add the new token ID to the owner's list of owned tokens

        libSPT721.emitTransfer(address(0), to, tokenId); // Emit an event for the token transfer
    }

    // Updates the mappings and arrays managing ownership and index of NFTs after a transfer
    function _updateOwnedNFTs(
        address from,
        address to,
        uint32 tokenId
    ) internal {
        uint256 index = idToIndex[tokenId]; // Get current index of the token in the owner's list
        uint32[] storage nftArray = ownedNFTs[from]; // Reference to the list of NFTs owned by 'from'
        uint256 len = nftArray.length; // Current number of NFTs owned by 'from'
        uint32 lastTokenId = nftArray[len - 1]; // Last token in the 'from' array to swap with transferred token

        nftArray[index] = lastTokenId; // Replace the transferred token with the last token in the array
        nftArray.pop(); // Remove the last element, effectively deleting the transferred token from 'from'

        if (len - 1 != 0) {
            idToIndex[lastTokenId] = index; // Update the index of the swapped token
        }

        ownedNFTs[to].push(tokenId); // Add the transferred token to the 'to' array
        idToIndex[tokenId] = ownedNFTs[to].length - 1; // Update the index mapping for the transferred token
    }

    // Executes a simple ERC20 token transfer.
    function _transfer20(address from, address to, uint256 amount) internal {
        _balanceOf[from] -= amount; // Deduct the amount from the sender's balance
        unchecked {
            _balanceOf[to] += amount; // Add the amount to the recipient's balance
        }
        libSPT20.emitTransfer(from, to, amount); // Emit an ERC20 transfer event
    }

    // Handles the transfer of an ERC721 token, ensuring proper ownership and event emission
    function _transfer721(
        address from,
        address to,
        uint32 tokenId
    ) internal virtual {
        require(from == ownerOf[tokenId], "SPT741: Incorrect owner"); // Ensure 'from' is the current owner

        delete _nftApprovals[tokenId]; // Clear any approvals for this token
        ownerOf[tokenId] = to; // Transfer ownership of the token to 'to'
        _updateOwnedNFTs(from, to, tokenId); // Update ownership tracking structures
        libSPT721.emitTransfer(from, to, tokenId); // Emit an ERC721 transfer event
    }

    // only erc20 calls this
    // if amount is a token id owned by the caller send as an NFT
    // else transfer741
    function transfer(address to, uint amount) public override returns (bool) {
        if (ownerOf[amount] == msg.sender) {
            _transfer721(msg.sender, to, uint32(amount));
            _transfer20(msg.sender, to, ONE);
            return true;
        }
        _transfer741(msg.sender, to, amount);
        return true;
    }

    // erc20 and erc721 call this
    function transferFrom(
        address from,
        address to,
        uint amount
    ) public override returns (bool) {
        //if amount is within the NFT id range, then a simple NFT transfer + token amount (ONE)
        if (amount > ONE && amount <= MAXID) {
            require(
                //require from is the msg caller, or that caller is approved for that specific NFT, or all NFTs
                msg.sender == from ||
                    msg.sender == getApproved(amount) ||
                    isApprovedForAll(from, msg.sender),
                "SPT741: You don't have the right"
            );

            _transfer721(from, to, uint32(amount));
            _transfer20(from, to, ONE);
            return true;
        }

        _spendAllowance(from, msg.sender, amount);
        _transfer741(from, to, amount);
        return true;
    }

    // erc721
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable override {
        require(
            msg.sender == from ||
                msg.sender == getApproved(tokenId) ||
                isApprovedForAll(from, msg.sender),
            "SPT741: You don't have the right"
        );
        _transfer721(from, to, uint32(tokenId));
        _transfer20(from, to, ONE);

        if (
            to.code.length != 0 &&
            IERC721TokenReceiver(to).onERC721Received(
                msg.sender,
                from,
                tokenId,
                ""
            ) !=
            IERC721TokenReceiver.onERC721Received.selector
        ) {
            revert UnsupportedReceiver();
        }
    }

    // erc721
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public payable override {
        require(
            msg.sender == from ||
                msg.sender == getApproved(tokenId) ||
                isApprovedForAll(from, msg.sender),
            "SPT741: You don't have the right"
        );
        _transfer721(from, to, uint32(tokenId));
        _transfer20(from, to, ONE);

        if (
            to.code.length != 0 &&
            IERC721TokenReceiver(to).onERC721Received(
                msg.sender,
                from,
                tokenId,
                data
            ) !=
            IERC721TokenReceiver.onERC721Received.selector
        ) {
            revert UnsupportedReceiver();
        }
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint amount
    ) internal virtual {
        require(
            _allowance[owner][spender] >= amount,
            "SPT741: insufficient allowance"
        );
        _allowance[owner][spender] -= amount;
    }

    function getApproved(
        uint256 tokenId
    ) public view override returns (address) {
        if (ownerOf[tokenId] == address(0)) revert();
        return _nftApprovals[tokenId];
    }

    function setApprovalForAll(
        address operator,
        bool approved
    ) public override {
        _operatorApprovals[msg.sender][operator] = approved;
        libSPT721.emitApprovalForAll(msg.sender, operator, approved);
    }

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

    function tokenURI(
        uint256 tokenId
    ) public view virtual returns (string memory) {
        require(tokenId <= MAXID, "SPT741: invalid id");
        if (bytes(baseURI).length == 0) {
            return "";
        }
        return
            string(abi.encodePacked(baseURI, toString(tokenId - ONE), ".json"));
    }

    function toString(uint256 value) internal pure returns (string memory) {
        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(value % 10) + 48);
            value /= 10;
        }
        return string(buffer);
    }

    function withdraw() external onlyDev {
        payable(dev).transfer(address(this).balance);
    }

    function supportsInterface(
        bytes4 interfaceId
    ) public view override returns (bool) {
        return
            // Even though we support ERC721 and should return true, etherscan wants to treat us as ERC721 instead of ERC20
            // @DEV ERC165 for ERC721 can be toggled on for reasons of frontend/dapp/script implementations, but is very specific
            (supportsNFTinterface && interfaceId == 0x80ac58cd) || // ERC165 interface ID for ERC721
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165
            interfaceId == 0x36372b07; // ERC165 interface ID for ERC20
    }

    function getOwnedNFTs(
        address _owner
    ) external view returns (uint32[] memory) {
        return ownedNFTs[_owner];
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"UnsupportedReceiver","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDev","type":"address"}],"name":"changeDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"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"}],"name":"getOwnedNFTs","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"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":"minted","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownedNFTs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","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":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newSkipMinting","type":"bool"}],"name":"setSkipMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newSkipMintingGlobal","type":"bool"}],"name":"setSkipMintingGlobal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skipMintingGlobal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportsNFTinterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggelNFTinterface","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61010060405260436080818152906200276260a03960009062000023908262000154565b506003805460ff60a81b191690553480156200003e57600080fd5b506200004d6008600a62000335565b6001805463ffffffff191663ffffffff92909216919091179055620000756008600a62000335565b62000083906106cd6200034a565b33600081815260086020526040902091909155600380546001600160a01b031916909117905562000364565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000da57607f821691505b602082108103620000fb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200014f57600081815260208120601f850160051c810160208610156200012a5750805b601f850160051c820191505b818110156200014b5782815560010162000136565b5050505b505050565b81516001600160401b03811115620001705762000170620000af565b6200018881620001818454620000c5565b8462000101565b602080601f831160018114620001c05760008415620001a75750858301515b600019600386901b1c1916600185901b1785556200014b565b600085815260208120601f198616915b82811015620001f157888601518255948401946001909101908401620001d0565b5085821015620002105787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002775781600019048211156200025b576200025b62000220565b808516156200026957918102915b93841c93908002906200023b565b509250929050565b60008262000290575060016200032f565b816200029f575060006200032f565b8160018114620002b85760028114620002c357620002e3565b60019150506200032f565b60ff841115620002d757620002d762000220565b50506001821b6200032f565b5060208310610133831016604e8410600b841016171562000308575081810a6200032f565b62000314838362000236565b80600019048211156200032b576200032b62000220565b0290505b92915050565b60006200034383836200027f565b9392505050565b80820281158282048414176200032f576200032f62000220565b6123ee80620003746000396000f3fe6080604052600436106101cd5760003560e01c80636bcef9a6116100f7578063a563833b11610095578063c87b56dd11610064578063c87b56dd1461057a578063dd62ed3e1461059a578063e985e9c5146105e0578063f835ab001461060057600080fd5b8063a563833b14610505578063a9059cbb14610526578063b3720c3414610546578063b88d4fde1461056757600080fd5b806388a8c95c116100d157806388a8c95c1461047957806391cca3db1461049957806395d89b41146104b9578063a22cb465146104e557600080fd5b80636bcef9a6146104195780636c0360eb1461042e57806370a082311461044357600080fd5b806323b872dd1161016f5780634f02c4201161013e5780634f02c4201461038657806355f804b3146103a35780636352211e146103c35780636a21f8e1146103f957600080fd5b806323b872dd14610328578063313ce567146103485780633ccfd60b1461035c57806342842e0e1461037357600080fd5b8063095ea7b3116101ab578063095ea7b31461028357806318148f1b146102a357806318160ddd146102d05780631a72b87d146102f357600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc1461024b575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611bfb565b61063b565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b50604080518082019091526012815271537061636520506f702054726f6f7065727360701b60208201525b6040516101fe9190611c68565b34801561025757600080fd5b5061026b610266366004611c7b565b6106a3565b6040516001600160a01b0390911681526020016101fe565b34801561028f57600080fd5b506101f261029e366004611cab565b6106e0565b3480156102af57600080fd5b506102c36102be366004611cd5565b610810565b6040516101fe9190611cf0565b3480156102dc57600080fd5b506102e56108a8565b6040519081526020016101fe565b3480156102ff57600080fd5b5061031361030e366004611cab565b6108c7565b60405163ffffffff90911681526020016101fe565b34801561033457600080fd5b506101f2610343366004611d3a565b610910565b34801561035457600080fd5b5060086102e5565b34801561036857600080fd5b506103716109ef565b005b610371610381366004611d3a565b610a55565b34801561039257600080fd5b506001546103139063ffffffff1681565b3480156103af57600080fd5b506103716103be366004611e02565b610b9c565b3480156103cf57600080fd5b5061026b6103de366004611c7b565b6006602052600090815260409020546001600160a01b031681565b34801561040557600080fd5b50610371610414366004611e5b565b610bd6565b34801561042557600080fd5b50610371610c1e565b34801561043a57600080fd5b5061023e610c69565b34801561044f57600080fd5b506102e561045e366004611cd5565b6001600160a01b031660009081526008602052604090205490565b34801561048557600080fd5b50610371610494366004611cd5565b610cf7565b3480156104a557600080fd5b5060035461026b906001600160a01b031681565b3480156104c557600080fd5b5060408051808201909152600381526214d41560ea1b602082015261023e565b3480156104f157600080fd5b50610371610500366004611e76565b610d43565b34801561051157600080fd5b506003546101f290600160a01b900460ff1681565b34801561053257600080fd5b506101f2610541366004611cab565b610d7d565b34801561055257600080fd5b506003546101f290600160a81b900460ff1681565b610371610575366004611ea9565b610dcc565b34801561058657600080fd5b5061023e610595366004611c7b565b610f00565b3480156105a657600080fd5b506102e56105b5366004611f25565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156105ec57600080fd5b506101f26105fb366004611f25565b610fd0565b34801561060c57600080fd5b5061037161061b366004611e5b565b336000908152600b60205260409020805460ff1916911515919091179055565b600354600090600160a01b900460ff16801561066757506380ac58cd60e01b6001600160e01b03198316145b8061068257506301ffc9a760e01b6001600160e01b03198316145b8061069d57506336372b0760e01b6001600160e01b03198316145b92915050565b6000818152600660205260408120546001600160a01b03166106c457600080fd5b506000908152600760205260409020546001600160a01b031690565b60006106ee6008600a61203a565b8211801561071457506106cd6107066008600a61203a565b6107109190612046565b8211155b156107d6576000828152600660205260409020546001600160a01b031633811480159061074857506107468133610fd0565b155b1561079a5760405162461bcd60e51b815260206004820152601c60248201527f5350543734313a20596f7520617265206e6f7420617070726f7665640000000060448201526064015b60405180910390fd5b600083815260076020526040902080546001600160a01b0319166001600160a01b0386161790556107cc818585610ffe565b600191505061069d565b3360008181526005602090815260408083206001600160a01b03881684529091529020839055610807908484611044565b50600192915050565b6001600160a01b03811660009081526009602090815260409182902080548351818402810184019094528084526060939283018282801561089c57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161085f5790505b50505050509050919050565b60006108b66008600a61203a565b6108c2906106cd612059565b905090565b600960205281600052604060002081815481106108e357600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b600061091e6008600a61203a565b8211801561094457506106cd6109366008600a61203a565b6109409190612046565b8211155b156109ce57336001600160a01b03851614806109795750610964826106a3565b6001600160a01b0316336001600160a01b0316145b8061098957506109898433610fd0565b6109a55760405162461bcd60e51b815260040161079190612070565b6109b0848484611096565b6109c684846109c16008600a61203a565b611165565b5060016109e8565b6109d98433846111bb565b6109e4848484611271565b5060015b9392505050565b6003546001600160a01b03163314610a195760405162461bcd60e51b8152600401610791906120a5565b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610a52573d6000803e3d6000fd5b50565b336001600160a01b0384161480610a855750610a70816106a3565b6001600160a01b0316336001600160a01b0316145b80610a955750610a958333610fd0565b610ab15760405162461bcd60e51b815260040161079190612070565b610abc838383611096565b610acd83836109c16008600a61203a565b6001600160a01b0382163b15801590610b795750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c91906120d0565b6001600160e01b03191614155b15610b97576040516301d6c93560e61b815260040160405180910390fd5b505050565b6003546001600160a01b03163314610bc65760405162461bcd60e51b8152600401610791906120a5565b6000610bd28282612175565b5050565b6003546001600160a01b03163314610c005760405162461bcd60e51b8152600401610791906120a5565b60038054911515600160a81b0260ff60a81b19909216919091179055565b6003546001600160a01b03163314610c485760405162461bcd60e51b8152600401610791906120a5565b6003805460ff60a01b198116600160a01b9182900460ff1615909102179055565b60008054610c76906120ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca2906120ed565b8015610cef5780601f10610cc457610100808354040283529160200191610cef565b820191906000526020600020905b815481529060010190602001808311610cd257829003601f168201915b505050505081565b6003546001600160a01b03163314610d215760405162461bcd60e51b8152600401610791906120a5565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091529020805460ff1916831515179055610bd29083836116b7565b600081815260066020526040812054336001600160a01b0390911603610dc157610da8338484611096565b610db933846109c16008600a61203a565b50600161069d565b610807338484611271565b336001600160a01b0385161480610dfc5750610de7826106a3565b6001600160a01b0316336001600160a01b0316145b80610e0c5750610e0c8433610fd0565b610e285760405162461bcd60e51b815260040161079190612070565b610e33848484611096565b610e4484846109c16008600a61203a565b6001600160a01b0383163b15801590610edc5750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a0290610e8c903390899088908890600401612235565b6020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf91906120d0565b6001600160e01b03191614155b15610efa576040516301d6c93560e61b815260040160405180910390fd5b50505050565b60606106cd610f116008600a61203a565b610f1b9190612046565b821115610f5f5760405162461bcd60e51b815260206004820152601260248201527114d4150dcd0c4e881a5b9d985b1a59081a5960721b6044820152606401610791565b60008054610f6c906120ed565b9050600003610f8957505060408051602081019091526000815290565b6000610fa9610f9a6008600a61203a565b610fa49085612272565b6116fe565b604051602001610fba929190612285565b6040516020818303038152906040529050919050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b80826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161108991815260200190565b60405180910390a3505050565b63ffffffff81166000908152600660205260409020546001600160a01b038481169116146111065760405162461bcd60e51b815260206004820152601760248201527f5350543734313a20496e636f7272656374206f776e65720000000000000000006044820152606401610791565b63ffffffff8116600090815260076020908152604080832080546001600160a01b0319908116909155600690925290912080549091166001600160a01b038416179055611154838383611807565b610b9783838363ffffffff166119af565b6001600160a01b0383166000908152600860205260408120805483929061118d908490612272565b90915550506001600160a01b0382166000908152600860205260409020805482019055610b978383836119f5565b6001600160a01b038084166000908152600560209081526040808320938616835292905220548111156112305760405162461bcd60e51b815260206004820152601e60248201527f5350543734313a20696e73756666696369656e7420616c6c6f77616e636500006044820152606401610791565b6001600160a01b03808416600090815260056020908152604080832093861683529290529081208054839290611267908490612272565b9091555050505050565b6001600160a01b0383166000908152600860205260409020548111156112e95760405162461bcd60e51b815260206004820152602760248201527f5350543734313a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610791565b60006112f76008600a61203a565b6001600160a01b03851660009081526008602052604090205461131a9190612332565b9050600061132a6008600a61203a565b6001600160a01b03851660009081526008602052604090205461134d9190612332565b905061135a858585611165565b60006113686008600a61203a565b6001600160a01b03871660009081526008602052604090205461138b9190612332565b9050600061139b6008600a61203a565b6001600160a01b0387166000908152600860205260409020546113be9190612332565b6001600160a01b038816600090815260096020526040902090915060028386101561146a5781541561146a576000826000815481106113ff576113ff612346565b60009182526020808320600880840490910154865460018101885587865292852091830490910180546007948516600490810261010090810a90940463ffffffff908116969095160290920a8481029302199091169190911790559150611468908b9083611096565b505b8285111561151a5780541561150f576114cc60008983600185805490506114919190612272565b815481106114a1576114a1612346565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16611096565b808054806114dc576114dc61235c565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a0219169055905561151a565b61151888611a3a565b505b60006115286008600a61203a565b6115329089612372565b6003549091506001600160a01b038b81169116148061155a5750600354600160a81b900460ff165b8061157d57506001600160a01b0389166000908152600b602052604090205460ff165b806115a057506001600160a01b038a166000908152600b602052604090205460ff165b156115b15750505050505050505050565b80156116ab5782548082106115c657806115c8565b815b905060005b818110156115ff576115ed8c8c876000815481106114a1576114a1612346565b806115f781612386565b9150506115cd565b5061160a8183612272565b8354909250905080821061161e5780611620565b815b905060005b818110156116955761164560008c86600188805490506114919190612272565b838054806116555761165561235c565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a021916905590558061168d81612386565b915050611625565b506116a98a6116a48385612272565b611ade565b505b50505050505050505050565b816001600160a01b0316836001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611089911515815260200190565b6060816000036117255750506040805180820190915260018152600360fc1b602082015290565b8160005b811561174f578061173981612386565b91506117489050600a83612372565b9150611729565b60008167ffffffffffffffff81111561176a5761176a611d76565b6040519080825280601f01601f191660200182016040528015611794576020820181803683370190505b5090505b84156117ff576117a9600183612272565b91506117b6600a86612332565b6117c190603061239f565b60f81b8183815181106117d6576117d6612346565b60200101906001600160f81b031916908160001a9053506117f8600a86612372565b9450611798565b949350505050565b63ffffffff81166000908152600a60209081526040808320546001600160a01b0387168452600990925282208054919290919082611846600184612272565b8154811061185657611856612346565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1690508083858154811061189157611891612346565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550828054806118d4576118d461235c565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a0219169055905561190d600183612272565b1561192b5763ffffffff81166000908152600a602052604090208490555b6001600160a01b038616600081815260096020908152604082208054600180820183558285529284206008820401805460079092166004026101000a63ffffffff81810219909316928c160291909117905592909152905461198d9190612272565b63ffffffff9095166000908152600a6020526040902094909455505050505050565b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161108991815260200190565b6001805463ffffffff19811663ffffffff918216830182169081178355600081815260066020908152604080832080546001600160a01b0319166001600160a01b038916908117909155835260098083528184208054868652600a8552928520839055908352958101865594825281206008850401805460079095166004026101000a9384021990941692820292909217909255611ad99083836119af565b919050565b80600003611aea575050565b80600103611afb57610b9782611a3a565b6001546001600160a01b03831660009081526009602052604081205463ffffffff90921691905b83811015611bbf57600192830163ffffffff818116600081815260066020908152604080832080546001600160a01b0319166001600160a01b038d16908117909155600a8352818420899055835260098252822080549889018155825281206008880401805460079098166004026101000a93840219909716928202929092179095559093611bb3919087906119af565b60019182019101611b22565b50506001805463ffffffff19811663ffffffff9182169490940116929092179091555050565b6001600160e01b031981168114610a5257600080fd5b600060208284031215611c0d57600080fd5b81356109e881611be5565b60005b83811015611c33578181015183820152602001611c1b565b50506000910152565b60008151808452611c54816020860160208601611c18565b601f01601f19169290920160200192915050565b6020815260006109e86020830184611c3c565b600060208284031215611c8d57600080fd5b5035919050565b80356001600160a01b0381168114611ad957600080fd5b60008060408385031215611cbe57600080fd5b611cc783611c94565b946020939093013593505050565b600060208284031215611ce757600080fd5b6109e882611c94565b6020808252825182820181905260009190848201906040850190845b81811015611d2e57835163ffffffff1683529284019291840191600101611d0c565b50909695505050505050565b600080600060608486031215611d4f57600080fd5b611d5884611c94565b9250611d6660208501611c94565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611da757611da7611d76565b604051601f8501601f19908116603f01168101908282118183101715611dcf57611dcf611d76565b81604052809350858152868686011115611de857600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611e1457600080fd5b813567ffffffffffffffff811115611e2b57600080fd5b8201601f81018413611e3c57600080fd5b6117ff84823560208401611d8c565b80358015158114611ad957600080fd5b600060208284031215611e6d57600080fd5b6109e882611e4b565b60008060408385031215611e8957600080fd5b611e9283611c94565b9150611ea060208401611e4b565b90509250929050565b60008060008060808587031215611ebf57600080fd5b611ec885611c94565b9350611ed660208601611c94565b925060408501359150606085013567ffffffffffffffff811115611ef957600080fd5b8501601f81018713611f0a57600080fd5b611f1987823560208401611d8c565b91505092959194509250565b60008060408385031215611f3857600080fd5b611f4183611c94565b9150611ea060208401611c94565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611fa0578160001904821115611f8657611f86611f4f565b80851615611f9357918102915b93841c9390800290611f6a565b509250929050565b600082611fb75750600161069d565b81611fc45750600061069d565b81600181146107cc5760028103611ff15760ff841115611fe657611fe6611f4f565b50506001821b61069d565b5060208310610133831016604e8410600b8410161715612014575081810a61069d565b61201e8383611f65565b806000190482111561203257612032611f4f565b029392505050565b60006109e88383611fa8565b8082018082111561069d5761069d611f4f565b808202811582820484141761069d5761069d611f4f565b6020808252818101527f5350543734313a20596f7520646f6e2774206861766520746865207269676874604082015260600190565b6020808252601190820152702737ba103a3432903232bb32b637b832b960791b604082015260600190565b6000602082840312156120e257600080fd5b81516109e881611be5565b600181811c9082168061210157607f821691505b60208210810361212157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b9757600081815260208120601f850160051c8101602086101561214e5750805b601f850160051c820191505b8181101561216d5782815560010161215a565b505050505050565b815167ffffffffffffffff81111561218f5761218f611d76565b6121a38161219d84546120ed565b84612127565b602080601f8311600181146121d857600084156121c05750858301515b600019600386901b1c1916600185901b17855561216d565b600085815260208120601f198616915b82811015612207578886015182559484019460019091019084016121e8565b50858210156122255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061226890830184611c3c565b9695505050505050565b8181038181111561069d5761069d611f4f565b6000808454612293816120ed565b600182811680156122ab57600181146122c0576122ef565b60ff19841687528215158302870194506122ef565b8860005260208060002060005b858110156122e65781548a8201529084019082016122cd565b50505082870194505b505050508351612303818360208801611c18565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826123415761234161231c565b500690565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000826123815761238161231c565b500490565b60006001820161239857612398611f4f565b5060010190565b60ff818116838216019081111561069d5761069d611f4f56fea26469706673582212202cea7637dff09723a98309e2dfec4c7e35963cdc338db8c0c78b2d61a40d95da64736f6c63430008140033697066733a2f2f6261667962656964736b6779746573337a6e34676532796f656a61686e6c37676d6c73757769726732637a73756a6878627a6377727468757574692f

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80636bcef9a6116100f7578063a563833b11610095578063c87b56dd11610064578063c87b56dd1461057a578063dd62ed3e1461059a578063e985e9c5146105e0578063f835ab001461060057600080fd5b8063a563833b14610505578063a9059cbb14610526578063b3720c3414610546578063b88d4fde1461056757600080fd5b806388a8c95c116100d157806388a8c95c1461047957806391cca3db1461049957806395d89b41146104b9578063a22cb465146104e557600080fd5b80636bcef9a6146104195780636c0360eb1461042e57806370a082311461044357600080fd5b806323b872dd1161016f5780634f02c4201161013e5780634f02c4201461038657806355f804b3146103a35780636352211e146103c35780636a21f8e1146103f957600080fd5b806323b872dd14610328578063313ce567146103485780633ccfd60b1461035c57806342842e0e1461037357600080fd5b8063095ea7b3116101ab578063095ea7b31461028357806318148f1b146102a357806318160ddd146102d05780631a72b87d146102f357600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc1461024b575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611bfb565b61063b565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b50604080518082019091526012815271537061636520506f702054726f6f7065727360701b60208201525b6040516101fe9190611c68565b34801561025757600080fd5b5061026b610266366004611c7b565b6106a3565b6040516001600160a01b0390911681526020016101fe565b34801561028f57600080fd5b506101f261029e366004611cab565b6106e0565b3480156102af57600080fd5b506102c36102be366004611cd5565b610810565b6040516101fe9190611cf0565b3480156102dc57600080fd5b506102e56108a8565b6040519081526020016101fe565b3480156102ff57600080fd5b5061031361030e366004611cab565b6108c7565b60405163ffffffff90911681526020016101fe565b34801561033457600080fd5b506101f2610343366004611d3a565b610910565b34801561035457600080fd5b5060086102e5565b34801561036857600080fd5b506103716109ef565b005b610371610381366004611d3a565b610a55565b34801561039257600080fd5b506001546103139063ffffffff1681565b3480156103af57600080fd5b506103716103be366004611e02565b610b9c565b3480156103cf57600080fd5b5061026b6103de366004611c7b565b6006602052600090815260409020546001600160a01b031681565b34801561040557600080fd5b50610371610414366004611e5b565b610bd6565b34801561042557600080fd5b50610371610c1e565b34801561043a57600080fd5b5061023e610c69565b34801561044f57600080fd5b506102e561045e366004611cd5565b6001600160a01b031660009081526008602052604090205490565b34801561048557600080fd5b50610371610494366004611cd5565b610cf7565b3480156104a557600080fd5b5060035461026b906001600160a01b031681565b3480156104c557600080fd5b5060408051808201909152600381526214d41560ea1b602082015261023e565b3480156104f157600080fd5b50610371610500366004611e76565b610d43565b34801561051157600080fd5b506003546101f290600160a01b900460ff1681565b34801561053257600080fd5b506101f2610541366004611cab565b610d7d565b34801561055257600080fd5b506003546101f290600160a81b900460ff1681565b610371610575366004611ea9565b610dcc565b34801561058657600080fd5b5061023e610595366004611c7b565b610f00565b3480156105a657600080fd5b506102e56105b5366004611f25565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156105ec57600080fd5b506101f26105fb366004611f25565b610fd0565b34801561060c57600080fd5b5061037161061b366004611e5b565b336000908152600b60205260409020805460ff1916911515919091179055565b600354600090600160a01b900460ff16801561066757506380ac58cd60e01b6001600160e01b03198316145b8061068257506301ffc9a760e01b6001600160e01b03198316145b8061069d57506336372b0760e01b6001600160e01b03198316145b92915050565b6000818152600660205260408120546001600160a01b03166106c457600080fd5b506000908152600760205260409020546001600160a01b031690565b60006106ee6008600a61203a565b8211801561071457506106cd6107066008600a61203a565b6107109190612046565b8211155b156107d6576000828152600660205260409020546001600160a01b031633811480159061074857506107468133610fd0565b155b1561079a5760405162461bcd60e51b815260206004820152601c60248201527f5350543734313a20596f7520617265206e6f7420617070726f7665640000000060448201526064015b60405180910390fd5b600083815260076020526040902080546001600160a01b0319166001600160a01b0386161790556107cc818585610ffe565b600191505061069d565b3360008181526005602090815260408083206001600160a01b03881684529091529020839055610807908484611044565b50600192915050565b6001600160a01b03811660009081526009602090815260409182902080548351818402810184019094528084526060939283018282801561089c57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161085f5790505b50505050509050919050565b60006108b66008600a61203a565b6108c2906106cd612059565b905090565b600960205281600052604060002081815481106108e357600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b600061091e6008600a61203a565b8211801561094457506106cd6109366008600a61203a565b6109409190612046565b8211155b156109ce57336001600160a01b03851614806109795750610964826106a3565b6001600160a01b0316336001600160a01b0316145b8061098957506109898433610fd0565b6109a55760405162461bcd60e51b815260040161079190612070565b6109b0848484611096565b6109c684846109c16008600a61203a565b611165565b5060016109e8565b6109d98433846111bb565b6109e4848484611271565b5060015b9392505050565b6003546001600160a01b03163314610a195760405162461bcd60e51b8152600401610791906120a5565b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610a52573d6000803e3d6000fd5b50565b336001600160a01b0384161480610a855750610a70816106a3565b6001600160a01b0316336001600160a01b0316145b80610a955750610a958333610fd0565b610ab15760405162461bcd60e51b815260040161079190612070565b610abc838383611096565b610acd83836109c16008600a61203a565b6001600160a01b0382163b15801590610b795750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c91906120d0565b6001600160e01b03191614155b15610b97576040516301d6c93560e61b815260040160405180910390fd5b505050565b6003546001600160a01b03163314610bc65760405162461bcd60e51b8152600401610791906120a5565b6000610bd28282612175565b5050565b6003546001600160a01b03163314610c005760405162461bcd60e51b8152600401610791906120a5565b60038054911515600160a81b0260ff60a81b19909216919091179055565b6003546001600160a01b03163314610c485760405162461bcd60e51b8152600401610791906120a5565b6003805460ff60a01b198116600160a01b9182900460ff1615909102179055565b60008054610c76906120ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca2906120ed565b8015610cef5780601f10610cc457610100808354040283529160200191610cef565b820191906000526020600020905b815481529060010190602001808311610cd257829003601f168201915b505050505081565b6003546001600160a01b03163314610d215760405162461bcd60e51b8152600401610791906120a5565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091529020805460ff1916831515179055610bd29083836116b7565b600081815260066020526040812054336001600160a01b0390911603610dc157610da8338484611096565b610db933846109c16008600a61203a565b50600161069d565b610807338484611271565b336001600160a01b0385161480610dfc5750610de7826106a3565b6001600160a01b0316336001600160a01b0316145b80610e0c5750610e0c8433610fd0565b610e285760405162461bcd60e51b815260040161079190612070565b610e33848484611096565b610e4484846109c16008600a61203a565b6001600160a01b0383163b15801590610edc5750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a0290610e8c903390899088908890600401612235565b6020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf91906120d0565b6001600160e01b03191614155b15610efa576040516301d6c93560e61b815260040160405180910390fd5b50505050565b60606106cd610f116008600a61203a565b610f1b9190612046565b821115610f5f5760405162461bcd60e51b815260206004820152601260248201527114d4150dcd0c4e881a5b9d985b1a59081a5960721b6044820152606401610791565b60008054610f6c906120ed565b9050600003610f8957505060408051602081019091526000815290565b6000610fa9610f9a6008600a61203a565b610fa49085612272565b6116fe565b604051602001610fba929190612285565b6040516020818303038152906040529050919050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b80826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161108991815260200190565b60405180910390a3505050565b63ffffffff81166000908152600660205260409020546001600160a01b038481169116146111065760405162461bcd60e51b815260206004820152601760248201527f5350543734313a20496e636f7272656374206f776e65720000000000000000006044820152606401610791565b63ffffffff8116600090815260076020908152604080832080546001600160a01b0319908116909155600690925290912080549091166001600160a01b038416179055611154838383611807565b610b9783838363ffffffff166119af565b6001600160a01b0383166000908152600860205260408120805483929061118d908490612272565b90915550506001600160a01b0382166000908152600860205260409020805482019055610b978383836119f5565b6001600160a01b038084166000908152600560209081526040808320938616835292905220548111156112305760405162461bcd60e51b815260206004820152601e60248201527f5350543734313a20696e73756666696369656e7420616c6c6f77616e636500006044820152606401610791565b6001600160a01b03808416600090815260056020908152604080832093861683529290529081208054839290611267908490612272565b9091555050505050565b6001600160a01b0383166000908152600860205260409020548111156112e95760405162461bcd60e51b815260206004820152602760248201527f5350543734313a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610791565b60006112f76008600a61203a565b6001600160a01b03851660009081526008602052604090205461131a9190612332565b9050600061132a6008600a61203a565b6001600160a01b03851660009081526008602052604090205461134d9190612332565b905061135a858585611165565b60006113686008600a61203a565b6001600160a01b03871660009081526008602052604090205461138b9190612332565b9050600061139b6008600a61203a565b6001600160a01b0387166000908152600860205260409020546113be9190612332565b6001600160a01b038816600090815260096020526040902090915060028386101561146a5781541561146a576000826000815481106113ff576113ff612346565b60009182526020808320600880840490910154865460018101885587865292852091830490910180546007948516600490810261010090810a90940463ffffffff908116969095160290920a8481029302199091169190911790559150611468908b9083611096565b505b8285111561151a5780541561150f576114cc60008983600185805490506114919190612272565b815481106114a1576114a1612346565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16611096565b808054806114dc576114dc61235c565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a0219169055905561151a565b61151888611a3a565b505b60006115286008600a61203a565b6115329089612372565b6003549091506001600160a01b038b81169116148061155a5750600354600160a81b900460ff165b8061157d57506001600160a01b0389166000908152600b602052604090205460ff165b806115a057506001600160a01b038a166000908152600b602052604090205460ff165b156115b15750505050505050505050565b80156116ab5782548082106115c657806115c8565b815b905060005b818110156115ff576115ed8c8c876000815481106114a1576114a1612346565b806115f781612386565b9150506115cd565b5061160a8183612272565b8354909250905080821061161e5780611620565b815b905060005b818110156116955761164560008c86600188805490506114919190612272565b838054806116555761165561235c565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a021916905590558061168d81612386565b915050611625565b506116a98a6116a48385612272565b611ade565b505b50505050505050505050565b816001600160a01b0316836001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611089911515815260200190565b6060816000036117255750506040805180820190915260018152600360fc1b602082015290565b8160005b811561174f578061173981612386565b91506117489050600a83612372565b9150611729565b60008167ffffffffffffffff81111561176a5761176a611d76565b6040519080825280601f01601f191660200182016040528015611794576020820181803683370190505b5090505b84156117ff576117a9600183612272565b91506117b6600a86612332565b6117c190603061239f565b60f81b8183815181106117d6576117d6612346565b60200101906001600160f81b031916908160001a9053506117f8600a86612372565b9450611798565b949350505050565b63ffffffff81166000908152600a60209081526040808320546001600160a01b0387168452600990925282208054919290919082611846600184612272565b8154811061185657611856612346565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1690508083858154811061189157611891612346565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550828054806118d4576118d461235c565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a0219169055905561190d600183612272565b1561192b5763ffffffff81166000908152600a602052604090208490555b6001600160a01b038616600081815260096020908152604082208054600180820183558285529284206008820401805460079092166004026101000a63ffffffff81810219909316928c160291909117905592909152905461198d9190612272565b63ffffffff9095166000908152600a6020526040902094909455505050505050565b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161108991815260200190565b6001805463ffffffff19811663ffffffff918216830182169081178355600081815260066020908152604080832080546001600160a01b0319166001600160a01b038916908117909155835260098083528184208054868652600a8552928520839055908352958101865594825281206008850401805460079095166004026101000a9384021990941692820292909217909255611ad99083836119af565b919050565b80600003611aea575050565b80600103611afb57610b9782611a3a565b6001546001600160a01b03831660009081526009602052604081205463ffffffff90921691905b83811015611bbf57600192830163ffffffff818116600081815260066020908152604080832080546001600160a01b0319166001600160a01b038d16908117909155600a8352818420899055835260098252822080549889018155825281206008880401805460079098166004026101000a93840219909716928202929092179095559093611bb3919087906119af565b60019182019101611b22565b50506001805463ffffffff19811663ffffffff9182169490940116929092179091555050565b6001600160e01b031981168114610a5257600080fd5b600060208284031215611c0d57600080fd5b81356109e881611be5565b60005b83811015611c33578181015183820152602001611c1b565b50506000910152565b60008151808452611c54816020860160208601611c18565b601f01601f19169290920160200192915050565b6020815260006109e86020830184611c3c565b600060208284031215611c8d57600080fd5b5035919050565b80356001600160a01b0381168114611ad957600080fd5b60008060408385031215611cbe57600080fd5b611cc783611c94565b946020939093013593505050565b600060208284031215611ce757600080fd5b6109e882611c94565b6020808252825182820181905260009190848201906040850190845b81811015611d2e57835163ffffffff1683529284019291840191600101611d0c565b50909695505050505050565b600080600060608486031215611d4f57600080fd5b611d5884611c94565b9250611d6660208501611c94565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611da757611da7611d76565b604051601f8501601f19908116603f01168101908282118183101715611dcf57611dcf611d76565b81604052809350858152868686011115611de857600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611e1457600080fd5b813567ffffffffffffffff811115611e2b57600080fd5b8201601f81018413611e3c57600080fd5b6117ff84823560208401611d8c565b80358015158114611ad957600080fd5b600060208284031215611e6d57600080fd5b6109e882611e4b565b60008060408385031215611e8957600080fd5b611e9283611c94565b9150611ea060208401611e4b565b90509250929050565b60008060008060808587031215611ebf57600080fd5b611ec885611c94565b9350611ed660208601611c94565b925060408501359150606085013567ffffffffffffffff811115611ef957600080fd5b8501601f81018713611f0a57600080fd5b611f1987823560208401611d8c565b91505092959194509250565b60008060408385031215611f3857600080fd5b611f4183611c94565b9150611ea060208401611c94565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611fa0578160001904821115611f8657611f86611f4f565b80851615611f9357918102915b93841c9390800290611f6a565b509250929050565b600082611fb75750600161069d565b81611fc45750600061069d565b81600181146107cc5760028103611ff15760ff841115611fe657611fe6611f4f565b50506001821b61069d565b5060208310610133831016604e8410600b8410161715612014575081810a61069d565b61201e8383611f65565b806000190482111561203257612032611f4f565b029392505050565b60006109e88383611fa8565b8082018082111561069d5761069d611f4f565b808202811582820484141761069d5761069d611f4f565b6020808252818101527f5350543734313a20596f7520646f6e2774206861766520746865207269676874604082015260600190565b6020808252601190820152702737ba103a3432903232bb32b637b832b960791b604082015260600190565b6000602082840312156120e257600080fd5b81516109e881611be5565b600181811c9082168061210157607f821691505b60208210810361212157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b9757600081815260208120601f850160051c8101602086101561214e5750805b601f850160051c820191505b8181101561216d5782815560010161215a565b505050505050565b815167ffffffffffffffff81111561218f5761218f611d76565b6121a38161219d84546120ed565b84612127565b602080601f8311600181146121d857600084156121c05750858301515b600019600386901b1c1916600185901b17855561216d565b600085815260208120601f198616915b82811015612207578886015182559484019460019091019084016121e8565b50858210156122255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061226890830184611c3c565b9695505050505050565b8181038181111561069d5761069d611f4f565b6000808454612293816120ed565b600182811680156122ab57600181146122c0576122ef565b60ff19841687528215158302870194506122ef565b8860005260208060002060005b858110156122e65781548a8201529084019082016122cd565b50505082870194505b505050508351612303818360208801611c18565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826123415761234161231c565b500690565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000826123815761238161231c565b500490565b60006001820161239857612398611f4f565b5060010190565b60ff818116838216019081111561069d5761069d611f4f56fea26469706673582212202cea7637dff09723a98309e2dfec4c7e35963cdc338db8c0c78b2d61a40d95da64736f6c63430008140033

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.