ETH Price: $2,381.79 (-1.15%)

Token

THREETHREETHREE (333)
 

Overview

Max Total Supply

21 333

Holders

16

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
cptdarling.eth
0xF2A46A77C5aa00c0946d4E8FE34158783437Cd09
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:
THREETHREETHREE

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : THREETHREETHREE.sol
// SPDX-License-Identifier: UNLICENSED

/// @title THREETHREETHREE
/// @author M1LL1P3D3
/// @notice MAKE THE MAGIC YOU WANT TO SEE IN THE WORLD! ✦✦✦
/// @dev This contract is constructed for use with the FIRSTTHREAD receipt contract.

pragma solidity ^0.8.17;

import "solmate/tokens/ERC1155.sol";
import "solmate/auth/Owned.sol";
import "solmate/utils/ReentrancyGuard.sol";

contract THREETHREETHREE is ERC1155, Owned, ReentrancyGuard {

    string public name = "THREETHREETHREE";
    string public symbol = "333";
    string private _uri;
    /// @dev Global per token supply cap, dualy a mint cap as once the supply decreases more tokens can't be minted.
    uint public constant MAX_SUPPLY_PER_TOKEN = 111;
    /// @dev The address of the receipt contract which may call burn functions in order to issue receipts.
    address public receiptContract;

    /// @dev Struct to hold the definition of a token.
    struct Token {
        /// @dev Name of token consumed by receipt contract for onchain receipt generation.
        string name;
        /// @dev The current supply of the token, initialized to 0 and incremented by mint functions.
        uint currentSupply;
        /// @dev The price of a single token represented in wei.
        uint etherPrice;
        /// @dev Whether the token is active or not, initialized to false and set to true by an admin function.
        bool mintActive;
    }

    /// @dev Mapping of uint token IDs to token definitions.
    mapping(uint => Token) public tokens;

    /// @dev Initializes token definitions with names, and ether prices.
    constructor() Owned(msg.sender) {       
        tokens[0].name = "FRANKINCENSE";
        tokens[1].name = "MYRRH";
        tokens[2].name = "GOLD";
        tokens[0].etherPrice = 0.777 ether;
        tokens[1].etherPrice = 0.888 ether;
        tokens[2].etherPrice = 1.111 ether;
    }

    /// @notice Modifier restricting burn function access to the receipt contract.
    /// @dev Checks that the address calling the burn function is a contract and not a user wallet by comparing the msg.sender to the tx.origin.
    modifier onlyReceiptContract() {
        require(msg.sender == receiptContract, "THREETHREETHREE: Only receipt contract can call this function");
        _;
    }

    /// @notice Mint an amount of up to the remaing supply of a single token.
    /// @param id The ID of the token to mint.
    /// @param amount The amount of tokens to mint.
    function mintSingle(
        uint id,
        uint amount
    ) public payable nonReentrant {
        require(tokens[id].mintActive, "THREETHREETHREE: Minting is not active");
        require(msg.value == amount * tokens[id].etherPrice, "THREETHREETHREE: msg.value is incorrect for the tokens being minted");
        require(tokens[id].currentSupply + amount <= MAX_SUPPLY_PER_TOKEN, "THREETHREETHREE: Max supply reached of the token being minted");
        _mint(msg.sender, id, amount, "");
        tokens[id].currentSupply += amount;
    }

    /// @notice Mint an amount of up to the remaining supply of multiple tokens.
    /// @param ids The IDs of the tokens to mint.
    /// @param amounts The amounts of tokens to mint.
    function mintBatch(
        uint[] memory ids,
        uint[] memory amounts
    ) external payable nonReentrant {
        require(ids.length == amounts.length, "THREETHREETHREE: IDs and amounts arrays must be the same length");
        uint totalEtherPrice;
        for (uint i = 0; i < ids.length; i++) {
            require(tokens[ids[i]].mintActive, "THREETHREETHREE: Minting is not active");
            require(tokens[ids[i]].currentSupply + amounts[i] <= MAX_SUPPLY_PER_TOKEN, "THREETHREETHREE: Max supply reached of the token being minted");
            totalEtherPrice += amounts[i] * tokens[ids[i]].etherPrice;
        }
        require(msg.value == totalEtherPrice, "THREETHREETHREE: msg.value is incorrect for the tokens being minted");
        _batchMint(msg.sender, ids, amounts, "");
        for (uint i = 0; i < ids.length; i++) {
            tokens[ids[i]].currentSupply += amounts[i];
        }
    }

    /// @notice Burn an amount of a single token as receipt contract.
    /// @param from The address to burn tokens from.
    /// @param id The ID of the token to burn.
    /// @param amount The amount of tokens to burn.
    function burnSingle(
        address from,
        uint id,
        uint amount
    ) external onlyReceiptContract {
        require(balanceOf[from][id] >= amount, "THREETHREETHREE: The owner of the tokens being burned does not have the amount of tokens being burned");
        _burn(from, id, amount);
    }

    /// @notice Burn multiple amounts of multiple tokens as receipt contract.
    /// @param from The address to burn tokens from.
    /// @param ids The IDs of the tokens to burn.
    /// @param amounts The amounts of tokens to burn.
    function burnBatch(
        address from,
        uint[] memory ids,
        uint[] memory amounts
    ) external onlyReceiptContract {
        require(ids.length == amounts.length, "THREETHREETHREE: IDs and amounts arrays must be the same length");
        for (uint i = 0; i < ids.length; i++) {
            require(balanceOf[from][ids[i]] >= amounts[i], "THREETHREETHREE: The owner of the tokens being burned does not have the amount of tokens being burned");
        }
        _batchBurn(from, ids, amounts);
    }

    /// @notice Get the URI of a token.
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /// @notice Owner can flip the minting status of a token.
    /// @param id The ID of the token to flip the minting status of.
    function flipTokenMintActive(
        uint id
    ) external onlyOwner {
        require(id < 3, "THREETHREETHREE: NONEXISTENT_TOKEN");
        tokens[id].mintActive = !tokens[id].mintActive;
    }

    /// @notice Owner can set the name of a token.
    /// @param id The ID of the token to set the name of.
    /// @param _name The name to set the token to.
    function setTokenName(
        uint id,
        string calldata _name
    ) external onlyOwner {
        require(id < 3, "THREETHREETHREE: NONEXISTENT_TOKEN");
        tokens[id].name = _name;
    }
    
    
    /// @notice Owner can set the URI of a token.
    /// @param newuri The URI to set for the contract.
    function setURI(
        string memory newuri
    ) external onlyOwner {
        _uri = newuri;
    }
    
    /// @notice Owner can set the receipt contract address.
    /// @param _receiptContract The address of the receipt contract.
    function setReceiptContract(
        address _receiptContract
    ) external onlyOwner {
        receiptContract = _receiptContract;
    }

    /// @notice Owner can withdraw all ether from contract
    function withdrawEther() external onlyOwner {
        payable(owner).transfer(address(this).balance);
    }

}

File 2 of 4 : Owned.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event OwnershipTransferred(address indexed user, address indexed newOwner);

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner) {
        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function transferOwnership(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

File 3 of 4 : ERC1155.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Minimalist and gas efficient standard ERC1155 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    /*//////////////////////////////////////////////////////////////
                             ERC1155 STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => mapping(uint256 => uint256)) public balanceOf;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*//////////////////////////////////////////////////////////////
                             METADATA LOGIC
    //////////////////////////////////////////////////////////////*/

    function uri(uint256 id) public view virtual returns (string memory);

    /*//////////////////////////////////////////////////////////////
                              ERC1155 LOGIC
    //////////////////////////////////////////////////////////////*/

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) public virtual {
        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        balanceOf[from][id] -= amount;
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public virtual {
        require(ids.length == amounts.length, "LENGTH_MISMATCH");

        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i = 0; i < ids.length; ) {
            id = ids[i];
            amount = amounts[i];

            balanceOf[from][id] -= amount;
            balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function balanceOfBatch(address[] calldata owners, uint256[] calldata ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        require(owners.length == ids.length, "LENGTH_MISMATCH");

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i = 0; i < owners.length; ++i) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, address(0), to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchMint(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[to][ids[i]] += amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, address(0), to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, address(0), ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchBurn(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[from][ids[i]] -= amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, address(0), ids, amounts);
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        balanceOf[from][id] -= amount;

        emit TransferSingle(msg.sender, from, address(0), id, amount);
    }
}

/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155TokenReceiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;
    }
}

File 4 of 4 : ReentrancyGuard.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Gas optimized reentrancy protection for smart contracts.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ReentrancyGuard.sol)
/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol)
abstract contract ReentrancyGuard {
    uint256 private locked = 1;

    modifier nonReentrant() virtual {
        require(locked == 1, "REENTRANCY");

        locked = 2;

        _;

        locked = 1;
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
    "solady/=lib/solady/src/",
    "solmate/=lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"MAX_SUPPLY_PER_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnSingle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"flipTokenMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintSingle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiptContract","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"address","name":"_receiptContract","type":"address"}],"name":"setReceiptContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"_name","type":"string"}],"name":"setTokenName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"currentSupply","type":"uint256"},{"internalType":"uint256","name":"etherPrice","type":"uint256"},{"internalType":"bool","name":"mintActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600160035560c0604052600f60809081526e54485245455448524545544852454560881b60a052600490620000359082620002f4565b5060408051808201909152600381526233333360e81b60208201526005906200005f9082620002f4565b503480156200006d57600080fd5b50600280546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060408051808201909152600c81526b4652414e4b494e43454e534560a01b60208083019190915260008052600890527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7906200010e9082620002f4565b5060408051808201909152600581526409ab2a4a4960db1b6020808301919091526001600052600890527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f90620001669082620002f4565b5060408051808201909152600481526311d3d31160e21b6020808301919091526002600052600890527f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea904190620001bd9082620002f4565b506008602052670ac875621e7a80007f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c955670c52cf4b908c00007fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac561556002600052670f6b109d197580007f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea904355620003c0565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200027a57607f821691505b6020821081036200029b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ef57600081815260208120601f850160051c81016020861015620002ca5750805b601f850160051c820191505b81811015620002eb57828155600101620002d6565b5050505b505050565b81516001600160401b038111156200031057620003106200024f565b620003288162000321845462000265565b84620002a1565b602080601f831160018114620003605760008415620003475750858301515b600019600386901b1c1916600185901b178555620002eb565b600085815260208120601f198616915b82811015620003915788860151825594840194600190910190840162000370565b5085821015620003b05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61279380620003d06000396000f3fe60806040526004361061014a5760003560e01c80638a1dce29116100b6578063d351cfdc1161006f578063d351cfdc146103d2578063d435b3a3146103e5578063d701121014610405578063e985e9c514610425578063f242432a14610460578063f2fde38b1461048057600080fd5b80638a1dce291461031d5780638da5cb5b1461033257806395d89b411461036a578063a22cb4651461037f578063c70951851461039f578063cdb0e89e146103b257600080fd5b806319bcef6d1161010857806319bcef6d1461024b5780632eb2c2d61461026b5780634e1273f41461028b5780634f64b2be146102b85780636b20c454146102e85780637362377b1461030857600080fd5b8062fdd58e1461014f57806301ffc9a71461019757806302fe5305146101c757806306fdde03146101e95780630e89341c1461020b578063132b48161461022b575b600080fd5b34801561015b57600080fd5b5061018461016a3660046118f1565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b3480156101a357600080fd5b506101b76101b2366004611931565b6104a0565b604051901515815260200161018e565b3480156101d357600080fd5b506101e76101e236600461199b565b6104f2565b005b3480156101f557600080fd5b506101fe610535565b60405161018e9190611a75565b34801561021757600080fd5b506101fe610226366004611a88565b6105c3565b34801561023757600080fd5b506101e7610246366004611aa1565b610657565b34801561025757600080fd5b506101e7610266366004611ad4565b6106d2565b34801561027757600080fd5b506101e7610286366004611b7b565b61071e565b34801561029757600080fd5b506102ab6102a6366004611c35565b61099f565b60405161018e9190611cdb565b3480156102c457600080fd5b506102d86102d3366004611a88565b610ab1565b60405161018e9493929190611cee565b3480156102f457600080fd5b506101e7610303366004611d9e565b610b66565b34801561031457600080fd5b506101e7610c62565b34801561032957600080fd5b50610184606f81565b34801561033e57600080fd5b50600254610352906001600160a01b031681565b6040516001600160a01b03909116815260200161018e565b34801561037657600080fd5b506101fe610cc8565b34801561038b57600080fd5b506101e761039a366004611e11565b610cd5565b6101e76103ad366004611e4d565b610d41565b3480156103be57600080fd5b506101e76103cd366004611e6f565b610e78565b6101e76103e0366004611eba565b610ee1565b3480156103f157600080fd5b50600754610352906001600160a01b031681565b34801561041157600080fd5b506101e7610420366004611a88565b61114e565b34801561043157600080fd5b506101b7610440366004611f1d565b600160209081526000928352604080842090915290825290205460ff1681565b34801561046c57600080fd5b506101e761047b366004611f50565b6111bb565b34801561048c57600080fd5b506101e761049b366004611ad4565b6113b5565b60006301ffc9a760e01b6001600160e01b0319831614806104d15750636cdb3d1360e11b6001600160e01b03198316145b806104ec57506303a24d0760e21b6001600160e01b03198316145b92915050565b6002546001600160a01b031633146105255760405162461bcd60e51b815260040161051c90611fc7565b60405180910390fd5b6006610531828261206d565b5050565b6004805461054290611fed565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90611fed565b80156105bb5780601f10610590576101008083540402835291602001916105bb565b820191906000526020600020905b81548152906001019060200180831161059e57829003601f168201915b505050505081565b6060600680546105d290611fed565b80601f01602080910402602001604051908101604052809291908181526020018280546105fe90611fed565b801561064b5780601f106106205761010080835404028352916020019161064b565b820191906000526020600020905b81548152906001019060200180831161062e57829003601f168201915b50505050509050919050565b6007546001600160a01b031633146106815760405162461bcd60e51b815260040161051c9061212c565b6001600160a01b0383166000908152602081815260408083208584529091529020548111156106c25760405162461bcd60e51b815260040161051c90612189565b6106cd83838361142b565b505050565b6002546001600160a01b031633146106fc5760405162461bcd60e51b815260040161051c90611fc7565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b84831461073d5760405162461bcd60e51b815260040161051c9061221a565b336001600160a01b038916148061077757506001600160a01b038816600090815260016020908152604080832033845290915290205460ff165b6107b45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161051c565b60008060005b8781101561086f578888828181106107d4576107d4612243565b9050602002013592508686828181106107ef576107ef612243565b6001600160a01b038e166000908152602081815260408083208984528252822080549390910294909401359550859392509061082c90849061226f565b90915550506001600160a01b038a1660009081526020818152604080832086845290915281208054849290610862908490612282565b90915550506001016107ba565b50886001600160a01b03168a6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040516108c394939291906122c7565b60405180910390a46001600160a01b0389163b1561096a5760405163bc197c8160e01b808252906001600160a01b038b169063bc197c81906109179033908f908e908e908e908e908e908e90600401612317565b6020604051808303816000875af1158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a919061237b565b6001600160e01b03191614610977565b6001600160a01b03891615155b6109935760405162461bcd60e51b815260040161051c90612398565b50505050505050505050565b60608382146109c05760405162461bcd60e51b815260040161051c9061221a565b836001600160401b038111156109d8576109d8611955565b604051908082528060200260200182016040528015610a01578160200160208202803683370190505b50905060005b84811015610aa857600080878784818110610a2457610a24612243565b9050602002016020810190610a399190611ad4565b6001600160a01b03166001600160a01b031681526020019081526020016000206000858584818110610a6d57610a6d612243565b90506020020135815260200190815260200160002054828281518110610a9557610a95612243565b6020908102919091010152600101610a07565b50949350505050565b600860205260009081526040902080548190610acc90611fed565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890611fed565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b50505050600183015460028401546003909401549293909290915060ff1684565b6007546001600160a01b03163314610b905760405162461bcd60e51b815260040161051c9061212c565b8051825114610bb15760405162461bcd60e51b815260040161051c906123c2565b60005b8251811015610c5657818181518110610bcf57610bcf612243565b6020026020010151600080866001600160a01b03166001600160a01b031681526020019081526020016000206000858481518110610c0f57610c0f612243565b60200260200101518152602001908152602001600020541015610c445760405162461bcd60e51b815260040161051c90612189565b80610c4e8161241f565b915050610bb4565b506106cd8383836114af565b6002546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161051c90611fc7565b6002546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610cc5573d6000803e3d6000fd5b50565b6005805461054290611fed565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600354600114610d805760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015260640161051c565b600260039081556000838152600860205260409020015460ff16610db65760405162461bcd60e51b815260040161051c90612438565b600082815260086020526040902060020154610dd2908261247e565b3414610df05760405162461bcd60e51b815260040161051c90612495565b600082815260086020526040902060010154606f90610e10908390612282565b1115610e2e5760405162461bcd60e51b815260040161051c906124fe565b610e49338383604051806020016040528060008152506115bf565b60008281526008602052604081206001018054839290610e6a908490612282565b909155505060016003555050565b6002546001600160a01b03163314610ea25760405162461bcd60e51b815260040161051c90611fc7565b60038310610ec25760405162461bcd60e51b815260040161051c9061255b565b6000838152600860205260409020610edb82848361259d565b50505050565b600354600114610f205760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015260640161051c565b60026003558051825114610f465760405162461bcd60e51b815260040161051c906123c2565b6000805b835181101561108c5760086000858381518110610f6957610f69612243565b60209081029190910181015182528101919091526040016000206003015460ff16610fa65760405162461bcd60e51b815260040161051c90612438565b606f838281518110610fba57610fba612243565b602002602001015160086000878581518110610fd857610fd8612243565b6020026020010151815260200190815260200160002060010154610ffc9190612282565b111561101a5760405162461bcd60e51b815260040161051c906124fe565b6008600085838151811061103057611030612243565b602002602001015181526020019081526020016000206002015483828151811061105c5761105c612243565b602002602001015161106e919061247e565b6110789083612282565b9150806110848161241f565b915050610f4a565b508034146110ac5760405162461bcd60e51b815260040161051c90612495565b6110c733848460405180602001604052806000815250611701565b60005b8351811015611143578281815181106110e5576110e5612243565b60200260200101516008600086848151811061110357611103612243565b60200260200101518152602001908152602001600020600101600082825461112b9190612282565b9091555081905061113b8161241f565b9150506110ca565b505060016003555050565b6002546001600160a01b031633146111785760405162461bcd60e51b815260040161051c90611fc7565b600381106111985760405162461bcd60e51b815260040161051c9061255b565b6000908152600860205260409020600301805460ff19811660ff90911615179055565b336001600160a01b03871614806111f557506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6112325760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161051c565b6001600160a01b0386166000908152602081815260408083208784529091528120805485929061126390849061226f565b90915550506001600160a01b03851660009081526020818152604080832087845290915281208054859290611299908490612282565b909155505060408051858152602081018590526001600160a01b03808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0385163b156113845760405163f23a6e6160e01b808252906001600160a01b0387169063f23a6e61906113319033908b908a908a908a908a9060040161265c565b6020604051808303816000875af1158015611350573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611374919061237b565b6001600160e01b03191614611391565b6001600160a01b03851615155b6113ad5760405162461bcd60e51b815260040161051c90612398565b505050505050565b6002546001600160a01b031633146113df5760405162461bcd60e51b815260040161051c90611fc7565b600280546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6001600160a01b0383166000908152602081815260408083208584529091528120805483929061145c90849061226f565b909155505060408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b8151815181146114d15760405162461bcd60e51b815260040161051c9061221a565b60005b81811015611560578281815181106114ee576114ee612243565b6020026020010151600080876001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061152e5761152e612243565b602002602001015181526020019081526020016000206000828254611553919061226f565b90915550506001016114d4565b5060006001600160a01b0316846001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115b19291906126a3565b60405180910390a450505050565b6001600160a01b038416600090815260208181526040808320868452909152812080548492906115f0908490612282565b909155505060408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b156116d85760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e61906116859033906000908990899089906004016126d1565b6020604051808303816000875af11580156116a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c8919061237b565b6001600160e01b031916146116e5565b6001600160a01b03841615155b610edb5760405162461bcd60e51b815260040161051c90612398565b8251825181146117235760405162461bcd60e51b815260040161051c9061221a565b60005b818110156117b25783818151811061174057611740612243565b6020026020010151600080886001600160a01b03166001600160a01b03168152602001908152602001600020600087848151811061178057611780612243565b6020026020010151815260200190815260200160002060008282546117a59190612282565b9091555050600101611726565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118039291906126a3565b60405180910390a46001600160a01b0385163b156118a55760405163bc197c8160e01b808252906001600160a01b0387169063bc197c81906118529033906000908a908a908a9060040161270b565b6020604051808303816000875af1158015611871573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611895919061237b565b6001600160e01b031916146118b2565b6001600160a01b03851615155b6118ce5760405162461bcd60e51b815260040161051c90612398565b5050505050565b80356001600160a01b03811681146118ec57600080fd5b919050565b6000806040838503121561190457600080fd5b61190d836118d5565b946020939093013593505050565b6001600160e01b031981168114610cc557600080fd5b60006020828403121561194357600080fd5b813561194e8161191b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561199357611993611955565b604052919050565b600060208083850312156119ae57600080fd5b82356001600160401b03808211156119c557600080fd5b818501915085601f8301126119d957600080fd5b8135818111156119eb576119eb611955565b6119fd601f8201601f1916850161196b565b91508082528684828501011115611a1357600080fd5b8084840185840137600090820190930192909252509392505050565b6000815180845260005b81811015611a5557602081850181015186830182015201611a39565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061194e6020830184611a2f565b600060208284031215611a9a57600080fd5b5035919050565b600080600060608486031215611ab657600080fd5b611abf846118d5565b95602085013595506040909401359392505050565b600060208284031215611ae657600080fd5b61194e826118d5565b60008083601f840112611b0157600080fd5b5081356001600160401b03811115611b1857600080fd5b6020830191508360208260051b8501011115611b3357600080fd5b9250929050565b60008083601f840112611b4c57600080fd5b5081356001600160401b03811115611b6357600080fd5b602083019150836020828501011115611b3357600080fd5b60008060008060008060008060a0898b031215611b9757600080fd5b611ba0896118d5565b9750611bae60208a016118d5565b965060408901356001600160401b0380821115611bca57600080fd5b611bd68c838d01611aef565b909850965060608b0135915080821115611bef57600080fd5b611bfb8c838d01611aef565b909650945060808b0135915080821115611c1457600080fd5b50611c218b828c01611b3a565b999c989b5096995094979396929594505050565b60008060008060408587031215611c4b57600080fd5b84356001600160401b0380821115611c6257600080fd5b611c6e88838901611aef565b90965094506020870135915080821115611c8757600080fd5b50611c9487828801611aef565b95989497509550505050565b600081518084526020808501945080840160005b83811015611cd057815187529582019590820190600101611cb4565b509495945050505050565b60208152600061194e6020830184611ca0565b608081526000611d016080830187611a2f565b60208301959095525060408101929092521515606090910152919050565b600082601f830112611d3057600080fd5b813560206001600160401b03821115611d4b57611d4b611955565b8160051b611d5a82820161196b565b9283528481018201928281019087851115611d7457600080fd5b83870192505b84831015611d9357823582529183019190830190611d7a565b979650505050505050565b600080600060608486031215611db357600080fd5b611dbc846118d5565b925060208401356001600160401b0380821115611dd857600080fd5b611de487838801611d1f565b93506040860135915080821115611dfa57600080fd5b50611e0786828701611d1f565b9150509250925092565b60008060408385031215611e2457600080fd5b611e2d836118d5565b915060208301358015158114611e4257600080fd5b809150509250929050565b60008060408385031215611e6057600080fd5b50508035926020909101359150565b600080600060408486031215611e8457600080fd5b8335925060208401356001600160401b03811115611ea157600080fd5b611ead86828701611b3a565b9497909650939450505050565b60008060408385031215611ecd57600080fd5b82356001600160401b0380821115611ee457600080fd5b611ef086838701611d1f565b93506020850135915080821115611f0657600080fd5b50611f1385828601611d1f565b9150509250929050565b60008060408385031215611f3057600080fd5b611f39836118d5565b9150611f47602084016118d5565b90509250929050565b60008060008060008060a08789031215611f6957600080fd5b611f72876118d5565b9550611f80602088016118d5565b9450604087013593506060870135925060808701356001600160401b03811115611fa957600080fd5b611fb589828a01611b3a565b979a9699509497509295939492505050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b600181811c9082168061200157607f821691505b60208210810361202157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106cd57600081815260208120601f850160051c8101602086101561204e5750805b601f850160051c820191505b818110156113ad5782815560010161205a565b81516001600160401b0381111561208657612086611955565b61209a816120948454611fed565b84612027565b602080601f8311600181146120cf57600084156120b75750858301515b600019600386901b1c1916600185901b1785556113ad565b600085815260208120601f198616915b828110156120fe578886015182559484019460019091019084016120df565b508582101561211c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252603d908201527f5448524545544852454554485245453a204f6e6c79207265636569707420636f60408201527f6e74726163742063616e2063616c6c20746869732066756e6374696f6e000000606082015260800190565b60208082526065908201527f5448524545544852454554485245453a20546865206f776e6572206f6620746860408201527f6520746f6b656e73206265696e67206275726e656420646f6573206e6f74206860608201527f6176652074686520616d6f756e74206f6620746f6b656e73206265696e6720626080820152641d5c9b995960da1b60a082015260c00190565b6020808252600f908201526e0988a9c8ea890be9a92a69a82a8869608b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156104ec576104ec612259565b808201808211156104ec576104ec612259565b81835260006001600160fb1b038311156122ae57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006122db604083018688612295565b8281036020840152611d93818587612295565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0389811682528816602082015260a060408201819052600090612344908301888a612295565b8281036060840152612357818789612295565b9050828103608084015261236c8185876122ee565b9b9a5050505050505050505050565b60006020828403121561238d57600080fd5b815161194e8161191b565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b6020808252603f908201527f5448524545544852454554485245453a2049447320616e6420616d6f756e747360408201527f20617272617973206d757374206265207468652073616d65206c656e67746800606082015260800190565b60006001820161243157612431612259565b5060010190565b60208082526026908201527f5448524545544852454554485245453a204d696e74696e67206973206e6f742060408201526561637469766560d01b606082015260800190565b80820281158282048414176104ec576104ec612259565b60208082526043908201527f5448524545544852454554485245453a206d73672e76616c756520697320696e60408201527f636f727265637420666f722074686520746f6b656e73206265696e67206d696e6060820152621d195960ea1b608082015260a00190565b6020808252603d908201527f5448524545544852454554485245453a204d617820737570706c79207265616360408201527f686564206f662074686520746f6b656e206265696e67206d696e746564000000606082015260800190565b60208082526022908201527f5448524545544852454554485245453a204e4f4e4558495354454e545f544f4b60408201526122a760f11b606082015260800190565b6001600160401b038311156125b4576125b4611955565b6125c8836125c28354611fed565b83612027565b6000601f8411600181146125fc57600085156125e45750838201355b600019600387901b1c1916600186901b1783556118ce565b600083815260209020601f19861690835b8281101561262d578685013582556020948501946001909201910161260d565b508682101561264a5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03878116825286166020820152604081018590526060810184905260a06080820181905260009061269790830184866122ee565b98975050505050505050565b6040815260006126b66040830185611ca0565b82810360208401526126c88185611ca0565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611d9390830184611a2f565b6001600160a01b0386811682528516602082015260a06040820181905260009061273790830186611ca0565b82810360608401526127498186611ca0565b905082810360808401526126978185611a2f56fea2646970667358221220b1f9771200f5950f48fc07efcff388d7585cb60ba08e2461fb46a428ccdc594d64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061014a5760003560e01c80638a1dce29116100b6578063d351cfdc1161006f578063d351cfdc146103d2578063d435b3a3146103e5578063d701121014610405578063e985e9c514610425578063f242432a14610460578063f2fde38b1461048057600080fd5b80638a1dce291461031d5780638da5cb5b1461033257806395d89b411461036a578063a22cb4651461037f578063c70951851461039f578063cdb0e89e146103b257600080fd5b806319bcef6d1161010857806319bcef6d1461024b5780632eb2c2d61461026b5780634e1273f41461028b5780634f64b2be146102b85780636b20c454146102e85780637362377b1461030857600080fd5b8062fdd58e1461014f57806301ffc9a71461019757806302fe5305146101c757806306fdde03146101e95780630e89341c1461020b578063132b48161461022b575b600080fd5b34801561015b57600080fd5b5061018461016a3660046118f1565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b3480156101a357600080fd5b506101b76101b2366004611931565b6104a0565b604051901515815260200161018e565b3480156101d357600080fd5b506101e76101e236600461199b565b6104f2565b005b3480156101f557600080fd5b506101fe610535565b60405161018e9190611a75565b34801561021757600080fd5b506101fe610226366004611a88565b6105c3565b34801561023757600080fd5b506101e7610246366004611aa1565b610657565b34801561025757600080fd5b506101e7610266366004611ad4565b6106d2565b34801561027757600080fd5b506101e7610286366004611b7b565b61071e565b34801561029757600080fd5b506102ab6102a6366004611c35565b61099f565b60405161018e9190611cdb565b3480156102c457600080fd5b506102d86102d3366004611a88565b610ab1565b60405161018e9493929190611cee565b3480156102f457600080fd5b506101e7610303366004611d9e565b610b66565b34801561031457600080fd5b506101e7610c62565b34801561032957600080fd5b50610184606f81565b34801561033e57600080fd5b50600254610352906001600160a01b031681565b6040516001600160a01b03909116815260200161018e565b34801561037657600080fd5b506101fe610cc8565b34801561038b57600080fd5b506101e761039a366004611e11565b610cd5565b6101e76103ad366004611e4d565b610d41565b3480156103be57600080fd5b506101e76103cd366004611e6f565b610e78565b6101e76103e0366004611eba565b610ee1565b3480156103f157600080fd5b50600754610352906001600160a01b031681565b34801561041157600080fd5b506101e7610420366004611a88565b61114e565b34801561043157600080fd5b506101b7610440366004611f1d565b600160209081526000928352604080842090915290825290205460ff1681565b34801561046c57600080fd5b506101e761047b366004611f50565b6111bb565b34801561048c57600080fd5b506101e761049b366004611ad4565b6113b5565b60006301ffc9a760e01b6001600160e01b0319831614806104d15750636cdb3d1360e11b6001600160e01b03198316145b806104ec57506303a24d0760e21b6001600160e01b03198316145b92915050565b6002546001600160a01b031633146105255760405162461bcd60e51b815260040161051c90611fc7565b60405180910390fd5b6006610531828261206d565b5050565b6004805461054290611fed565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90611fed565b80156105bb5780601f10610590576101008083540402835291602001916105bb565b820191906000526020600020905b81548152906001019060200180831161059e57829003601f168201915b505050505081565b6060600680546105d290611fed565b80601f01602080910402602001604051908101604052809291908181526020018280546105fe90611fed565b801561064b5780601f106106205761010080835404028352916020019161064b565b820191906000526020600020905b81548152906001019060200180831161062e57829003601f168201915b50505050509050919050565b6007546001600160a01b031633146106815760405162461bcd60e51b815260040161051c9061212c565b6001600160a01b0383166000908152602081815260408083208584529091529020548111156106c25760405162461bcd60e51b815260040161051c90612189565b6106cd83838361142b565b505050565b6002546001600160a01b031633146106fc5760405162461bcd60e51b815260040161051c90611fc7565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b84831461073d5760405162461bcd60e51b815260040161051c9061221a565b336001600160a01b038916148061077757506001600160a01b038816600090815260016020908152604080832033845290915290205460ff165b6107b45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161051c565b60008060005b8781101561086f578888828181106107d4576107d4612243565b9050602002013592508686828181106107ef576107ef612243565b6001600160a01b038e166000908152602081815260408083208984528252822080549390910294909401359550859392509061082c90849061226f565b90915550506001600160a01b038a1660009081526020818152604080832086845290915281208054849290610862908490612282565b90915550506001016107ba565b50886001600160a01b03168a6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040516108c394939291906122c7565b60405180910390a46001600160a01b0389163b1561096a5760405163bc197c8160e01b808252906001600160a01b038b169063bc197c81906109179033908f908e908e908e908e908e908e90600401612317565b6020604051808303816000875af1158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a919061237b565b6001600160e01b03191614610977565b6001600160a01b03891615155b6109935760405162461bcd60e51b815260040161051c90612398565b50505050505050505050565b60608382146109c05760405162461bcd60e51b815260040161051c9061221a565b836001600160401b038111156109d8576109d8611955565b604051908082528060200260200182016040528015610a01578160200160208202803683370190505b50905060005b84811015610aa857600080878784818110610a2457610a24612243565b9050602002016020810190610a399190611ad4565b6001600160a01b03166001600160a01b031681526020019081526020016000206000858584818110610a6d57610a6d612243565b90506020020135815260200190815260200160002054828281518110610a9557610a95612243565b6020908102919091010152600101610a07565b50949350505050565b600860205260009081526040902080548190610acc90611fed565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890611fed565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b50505050600183015460028401546003909401549293909290915060ff1684565b6007546001600160a01b03163314610b905760405162461bcd60e51b815260040161051c9061212c565b8051825114610bb15760405162461bcd60e51b815260040161051c906123c2565b60005b8251811015610c5657818181518110610bcf57610bcf612243565b6020026020010151600080866001600160a01b03166001600160a01b031681526020019081526020016000206000858481518110610c0f57610c0f612243565b60200260200101518152602001908152602001600020541015610c445760405162461bcd60e51b815260040161051c90612189565b80610c4e8161241f565b915050610bb4565b506106cd8383836114af565b6002546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161051c90611fc7565b6002546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610cc5573d6000803e3d6000fd5b50565b6005805461054290611fed565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600354600114610d805760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015260640161051c565b600260039081556000838152600860205260409020015460ff16610db65760405162461bcd60e51b815260040161051c90612438565b600082815260086020526040902060020154610dd2908261247e565b3414610df05760405162461bcd60e51b815260040161051c90612495565b600082815260086020526040902060010154606f90610e10908390612282565b1115610e2e5760405162461bcd60e51b815260040161051c906124fe565b610e49338383604051806020016040528060008152506115bf565b60008281526008602052604081206001018054839290610e6a908490612282565b909155505060016003555050565b6002546001600160a01b03163314610ea25760405162461bcd60e51b815260040161051c90611fc7565b60038310610ec25760405162461bcd60e51b815260040161051c9061255b565b6000838152600860205260409020610edb82848361259d565b50505050565b600354600114610f205760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015260640161051c565b60026003558051825114610f465760405162461bcd60e51b815260040161051c906123c2565b6000805b835181101561108c5760086000858381518110610f6957610f69612243565b60209081029190910181015182528101919091526040016000206003015460ff16610fa65760405162461bcd60e51b815260040161051c90612438565b606f838281518110610fba57610fba612243565b602002602001015160086000878581518110610fd857610fd8612243565b6020026020010151815260200190815260200160002060010154610ffc9190612282565b111561101a5760405162461bcd60e51b815260040161051c906124fe565b6008600085838151811061103057611030612243565b602002602001015181526020019081526020016000206002015483828151811061105c5761105c612243565b602002602001015161106e919061247e565b6110789083612282565b9150806110848161241f565b915050610f4a565b508034146110ac5760405162461bcd60e51b815260040161051c90612495565b6110c733848460405180602001604052806000815250611701565b60005b8351811015611143578281815181106110e5576110e5612243565b60200260200101516008600086848151811061110357611103612243565b60200260200101518152602001908152602001600020600101600082825461112b9190612282565b9091555081905061113b8161241f565b9150506110ca565b505060016003555050565b6002546001600160a01b031633146111785760405162461bcd60e51b815260040161051c90611fc7565b600381106111985760405162461bcd60e51b815260040161051c9061255b565b6000908152600860205260409020600301805460ff19811660ff90911615179055565b336001600160a01b03871614806111f557506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6112325760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161051c565b6001600160a01b0386166000908152602081815260408083208784529091528120805485929061126390849061226f565b90915550506001600160a01b03851660009081526020818152604080832087845290915281208054859290611299908490612282565b909155505060408051858152602081018590526001600160a01b03808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0385163b156113845760405163f23a6e6160e01b808252906001600160a01b0387169063f23a6e61906113319033908b908a908a908a908a9060040161265c565b6020604051808303816000875af1158015611350573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611374919061237b565b6001600160e01b03191614611391565b6001600160a01b03851615155b6113ad5760405162461bcd60e51b815260040161051c90612398565b505050505050565b6002546001600160a01b031633146113df5760405162461bcd60e51b815260040161051c90611fc7565b600280546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6001600160a01b0383166000908152602081815260408083208584529091528120805483929061145c90849061226f565b909155505060408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b8151815181146114d15760405162461bcd60e51b815260040161051c9061221a565b60005b81811015611560578281815181106114ee576114ee612243565b6020026020010151600080876001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061152e5761152e612243565b602002602001015181526020019081526020016000206000828254611553919061226f565b90915550506001016114d4565b5060006001600160a01b0316846001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115b19291906126a3565b60405180910390a450505050565b6001600160a01b038416600090815260208181526040808320868452909152812080548492906115f0908490612282565b909155505060408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b156116d85760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e61906116859033906000908990899089906004016126d1565b6020604051808303816000875af11580156116a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c8919061237b565b6001600160e01b031916146116e5565b6001600160a01b03841615155b610edb5760405162461bcd60e51b815260040161051c90612398565b8251825181146117235760405162461bcd60e51b815260040161051c9061221a565b60005b818110156117b25783818151811061174057611740612243565b6020026020010151600080886001600160a01b03166001600160a01b03168152602001908152602001600020600087848151811061178057611780612243565b6020026020010151815260200190815260200160002060008282546117a59190612282565b9091555050600101611726565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118039291906126a3565b60405180910390a46001600160a01b0385163b156118a55760405163bc197c8160e01b808252906001600160a01b0387169063bc197c81906118529033906000908a908a908a9060040161270b565b6020604051808303816000875af1158015611871573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611895919061237b565b6001600160e01b031916146118b2565b6001600160a01b03851615155b6118ce5760405162461bcd60e51b815260040161051c90612398565b5050505050565b80356001600160a01b03811681146118ec57600080fd5b919050565b6000806040838503121561190457600080fd5b61190d836118d5565b946020939093013593505050565b6001600160e01b031981168114610cc557600080fd5b60006020828403121561194357600080fd5b813561194e8161191b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561199357611993611955565b604052919050565b600060208083850312156119ae57600080fd5b82356001600160401b03808211156119c557600080fd5b818501915085601f8301126119d957600080fd5b8135818111156119eb576119eb611955565b6119fd601f8201601f1916850161196b565b91508082528684828501011115611a1357600080fd5b8084840185840137600090820190930192909252509392505050565b6000815180845260005b81811015611a5557602081850181015186830182015201611a39565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061194e6020830184611a2f565b600060208284031215611a9a57600080fd5b5035919050565b600080600060608486031215611ab657600080fd5b611abf846118d5565b95602085013595506040909401359392505050565b600060208284031215611ae657600080fd5b61194e826118d5565b60008083601f840112611b0157600080fd5b5081356001600160401b03811115611b1857600080fd5b6020830191508360208260051b8501011115611b3357600080fd5b9250929050565b60008083601f840112611b4c57600080fd5b5081356001600160401b03811115611b6357600080fd5b602083019150836020828501011115611b3357600080fd5b60008060008060008060008060a0898b031215611b9757600080fd5b611ba0896118d5565b9750611bae60208a016118d5565b965060408901356001600160401b0380821115611bca57600080fd5b611bd68c838d01611aef565b909850965060608b0135915080821115611bef57600080fd5b611bfb8c838d01611aef565b909650945060808b0135915080821115611c1457600080fd5b50611c218b828c01611b3a565b999c989b5096995094979396929594505050565b60008060008060408587031215611c4b57600080fd5b84356001600160401b0380821115611c6257600080fd5b611c6e88838901611aef565b90965094506020870135915080821115611c8757600080fd5b50611c9487828801611aef565b95989497509550505050565b600081518084526020808501945080840160005b83811015611cd057815187529582019590820190600101611cb4565b509495945050505050565b60208152600061194e6020830184611ca0565b608081526000611d016080830187611a2f565b60208301959095525060408101929092521515606090910152919050565b600082601f830112611d3057600080fd5b813560206001600160401b03821115611d4b57611d4b611955565b8160051b611d5a82820161196b565b9283528481018201928281019087851115611d7457600080fd5b83870192505b84831015611d9357823582529183019190830190611d7a565b979650505050505050565b600080600060608486031215611db357600080fd5b611dbc846118d5565b925060208401356001600160401b0380821115611dd857600080fd5b611de487838801611d1f565b93506040860135915080821115611dfa57600080fd5b50611e0786828701611d1f565b9150509250925092565b60008060408385031215611e2457600080fd5b611e2d836118d5565b915060208301358015158114611e4257600080fd5b809150509250929050565b60008060408385031215611e6057600080fd5b50508035926020909101359150565b600080600060408486031215611e8457600080fd5b8335925060208401356001600160401b03811115611ea157600080fd5b611ead86828701611b3a565b9497909650939450505050565b60008060408385031215611ecd57600080fd5b82356001600160401b0380821115611ee457600080fd5b611ef086838701611d1f565b93506020850135915080821115611f0657600080fd5b50611f1385828601611d1f565b9150509250929050565b60008060408385031215611f3057600080fd5b611f39836118d5565b9150611f47602084016118d5565b90509250929050565b60008060008060008060a08789031215611f6957600080fd5b611f72876118d5565b9550611f80602088016118d5565b9450604087013593506060870135925060808701356001600160401b03811115611fa957600080fd5b611fb589828a01611b3a565b979a9699509497509295939492505050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b600181811c9082168061200157607f821691505b60208210810361202157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106cd57600081815260208120601f850160051c8101602086101561204e5750805b601f850160051c820191505b818110156113ad5782815560010161205a565b81516001600160401b0381111561208657612086611955565b61209a816120948454611fed565b84612027565b602080601f8311600181146120cf57600084156120b75750858301515b600019600386901b1c1916600185901b1785556113ad565b600085815260208120601f198616915b828110156120fe578886015182559484019460019091019084016120df565b508582101561211c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252603d908201527f5448524545544852454554485245453a204f6e6c79207265636569707420636f60408201527f6e74726163742063616e2063616c6c20746869732066756e6374696f6e000000606082015260800190565b60208082526065908201527f5448524545544852454554485245453a20546865206f776e6572206f6620746860408201527f6520746f6b656e73206265696e67206275726e656420646f6573206e6f74206860608201527f6176652074686520616d6f756e74206f6620746f6b656e73206265696e6720626080820152641d5c9b995960da1b60a082015260c00190565b6020808252600f908201526e0988a9c8ea890be9a92a69a82a8869608b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156104ec576104ec612259565b808201808211156104ec576104ec612259565b81835260006001600160fb1b038311156122ae57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006122db604083018688612295565b8281036020840152611d93818587612295565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0389811682528816602082015260a060408201819052600090612344908301888a612295565b8281036060840152612357818789612295565b9050828103608084015261236c8185876122ee565b9b9a5050505050505050505050565b60006020828403121561238d57600080fd5b815161194e8161191b565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b6020808252603f908201527f5448524545544852454554485245453a2049447320616e6420616d6f756e747360408201527f20617272617973206d757374206265207468652073616d65206c656e67746800606082015260800190565b60006001820161243157612431612259565b5060010190565b60208082526026908201527f5448524545544852454554485245453a204d696e74696e67206973206e6f742060408201526561637469766560d01b606082015260800190565b80820281158282048414176104ec576104ec612259565b60208082526043908201527f5448524545544852454554485245453a206d73672e76616c756520697320696e60408201527f636f727265637420666f722074686520746f6b656e73206265696e67206d696e6060820152621d195960ea1b608082015260a00190565b6020808252603d908201527f5448524545544852454554485245453a204d617820737570706c79207265616360408201527f686564206f662074686520746f6b656e206265696e67206d696e746564000000606082015260800190565b60208082526022908201527f5448524545544852454554485245453a204e4f4e4558495354454e545f544f4b60408201526122a760f11b606082015260800190565b6001600160401b038311156125b4576125b4611955565b6125c8836125c28354611fed565b83612027565b6000601f8411600181146125fc57600085156125e45750838201355b600019600387901b1c1916600186901b1783556118ce565b600083815260209020601f19861690835b8281101561262d578685013582556020948501946001909201910161260d565b508682101561264a5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03878116825286166020820152604081018590526060810184905260a06080820181905260009061269790830184866122ee565b98975050505050505050565b6040815260006126b66040830185611ca0565b82810360208401526126c88185611ca0565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611d9390830184611a2f565b6001600160a01b0386811682528516602082015260a06040820181905260009061273790830186611ca0565b82810360608401526127498186611ca0565b905082810360808401526126978185611a2f56fea2646970667358221220b1f9771200f5950f48fc07efcff388d7585cb60ba08e2461fb46a428ccdc594d64736f6c63430008120033

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.