ETH Price: $2,528.38 (-0.17%)

 

Overview

TokenID

1

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
RAW

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 2000 runs

Other Settings:
default evmVersion, MIT license
File 1 of 7 : Raw.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./ERC1155.sol";
import "./interfaces/IRAW.sol";
import "./interfaces/IEON.sol";

contract RAW is IRAW, ERC1155, Pausable {
    using Strings for uint256;

    // struct to store each trait's data for metadata and rendering
    struct Image {
        string name;
        string png;
    }

    struct TypeInfo {
        uint256 mints;
        uint256 burns;
        uint256 maxSupply;
        uint256 eonExchangeAmt;
    }

    mapping(uint256 => TypeInfo) private typeInfo;
    // storage of each image data
    mapping(uint256 => Image) public traitData;

    // address => allowedToCallFunctions
    mapping(address => bool) private admins;

    event UpdateMintBurns(uint256 typeId, uint256 mintQty, uint256 burnQty);

    // reference to the $EON contract for exchange rate if accepted
    IEON public eon;

    address public auth;

    constructor() {
        auth = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == auth);
        _;
    }

    /** CRITICAL TO SETUP */

    modifier requireContractsSet() {
        require(address(eon) != address(0), "Contracts not set");
        _;
    }

    function setContracts(address _eon) external onlyOwner {
        eon = IEON(_eon);
    }

    /**
     * Mint a token - any payment / game logic should be handled in the game contract.
     */
    function mint(
        uint256 typeId,
        uint256 qty,
        address recipient
    ) external override whenNotPaused {
        require(admins[msg.sender], "Only admins");
        require((typeInfo[typeId].mints + qty) <= typeInfo[typeId].maxSupply, "MaxSupply Minted");
        typeInfo[typeId].mints += qty;
        _mint(recipient, typeId, qty, "");
    }

    /**
     * Burn a token - any payment / game logic should be handled in the game contract.
     */
    function burn(
        uint256 typeId,
        uint256 qty,
        address burnFrom
    ) external override whenNotPaused {
        require(admins[msg.sender], "Only admins");
        typeInfo[typeId].burns += qty;
        _burn(burnFrom, typeId, qty);
    }

    function setType(uint256 typeId, uint256 maxSupply) external onlyOwner {
        require(typeId != 0, "TypeId cannot be 0");
        require(typeInfo[typeId].mints <= maxSupply, "max supply too low");
        typeInfo[typeId].maxSupply = maxSupply;
    }

    // a function to update the mint and burn amounts
    // to save gas costs of doing both a mint and then
    // burn when cost is paid from an amount owed
    function updateMintBurns(
        uint256 typeId,
        uint256 mintQty,
        uint256 burnQty
    ) external {
        require(admins[msg.sender], "Only Admins");
        typeInfo[typeId].mints += mintQty;
        typeInfo[typeId].burns += burnQty;
    
    emit UpdateMintBurns(typeId, mintQty, burnQty);
    }

    function setExchangeAmt(uint256 typeId, uint256 exchangeAmt)
        external
        onlyOwner
    {
        require(
            typeInfo[typeId].maxSupply > 0,
            "this type has not been set up"
        );
        typeInfo[typeId].eonExchangeAmt = exchangeAmt;
    }

    /**
     * enables an address to mint / burn
     * @param addr the address to enable
     */
    function addAdmin(address addr) external onlyOwner {
        admins[addr] = true;
    }

    /**
     * disables an address from minting / burning
     * @param addr the address to disbale
     */
    function removeAdmin(address addr) external onlyOwner {
        admins[addr] = false;
    }

    function setPaused(bool _paused) external onlyOwner requireContractsSet {
        if (_paused) _pause();
        else _unpause();
    }

    function transferOwnership(address newOwner) external onlyOwner {
        auth = newOwner;
    }

    function getInfoForType(uint256 typeId)
        external
        view
        returns (TypeInfo memory)
    {
        require(typeInfo[typeId].maxSupply > 0, "invalid type");
        return typeInfo[typeId];
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        require(typeInfo[typeId].maxSupply > 0, "invalid type");
        Image memory img = traitData[typeId];
        string memory metadata = string(
            abi.encodePacked(
                '{"name": "',
                img.name,
                '", "description": "Raw Pytheas resources - All the metadata and images are generated and stored 100% on-chain. No IPFS. NO API. Just the Ethereum blockchain.", "image": "data:image/svg+xml;base64,',
                base64(bytes(drawSVG(typeId))),
                '", "attributes": []',
                "}"
            )
        );
        return
            string(
                abi.encodePacked(
                    "data:application/json;base64,",
                    base64(bytes(metadata))
                )
            );
    }

    function uploadImage(uint256 typeId, Image calldata image)
        external
        onlyOwner
    {
        traitData[typeId] = Image(image.name, image.png);
    }

    function drawImage(Image memory image)
        internal
        pure
        returns (string memory)
    {
        return
            string(
                abi.encodePacked(
                    '<image x="0" y="0" width="64" height="64" image-rendering="pixelated" preserveAspectRatio="xMidYMid" xlink:href="data:image/png;base64,',
                    image.png,
                    '"/>'
                )
            );
    }

    function drawSVG(uint256 typeId) internal view returns (string memory) {
        string memory svgString = string(
            abi.encodePacked(drawImage(traitData[typeId]))
        );

        return
            string(
                abi.encodePacked(
                    '<svg id="alter" width="100%" height="100%" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">',
                    svgString,
                    "</svg>"
                )
            );
    }

     function getBalance( 
        address account,
        uint256 id
    ) public view returns(uint256) {
         return ERC1155(address(this)).balanceOf(account, id);
    }


    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override(ERC1155, IRAW) {
        // allow admin contracts to send without approval
        if (!admins[msg.sender]) {
            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[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override(ERC1155, IRAW) {
        // allow admin contracts to send without approval
            uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");
        
        // allow admin contracts to send without approval
        if (!admins[msg.sender]) {
        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");
        }

        for (uint256 i = 0; i < idsLength; ) {
            uint256 id = ids[i];
            uint256 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"
        );
    }

    /** BASE 64 - Written by Brech Devos */

    string internal constant TABLE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    function base64(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return "";

        // load the table into memory
        string memory table = TABLE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {

            } lt(dataPtr, endPtr) {

            } {
                dataPtr := add(dataPtr, 3)

                // read 3 bytes
                let input := mload(dataPtr)

                // write 4 characters
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(input, 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
        }

        return result;
    }

// For OpenSeas
function owner() public view virtual returns (address) {
return auth;
}
}

File 2 of 7 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 7 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 7 : Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

File 5 of 7 : 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/Rari-Capital/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 isApproved(address account, address operator)
        public
        view
        virtual
        returns (bool)
    {
        return isApprovedForAll[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory 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[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

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

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

        for (uint256 i = 0; i < idsLength; ) {
            uint256 id = ids[i];
            uint256 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[] memory owners, uint256[] memory ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        uint256 ownersLength = owners.length; // Saves MLOADs.

        require(ownersLength == 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 < ownersLength; i++) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

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

    function supportsInterface(bytes4 interfaceId)
        public
        pure
        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 {
        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 {
        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 {
        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 {
        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/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
interface ERC1155TokenReceiver {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external returns (bytes4);
}

File 6 of 7 : IEON.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IEON {
    function mint(address to, uint256 amount) external;

    function burn(address from, uint256 amount) external;

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

File 7 of 7 : IRAW.sol
// SPDX-License-Identifier: MIT LICENSE
pragma solidity ^0.8.0;

interface IRAW {

    function getBalance(
        address account,
        uint256 id
    ) external returns(uint256);

    function mint(
        uint256 typeId,
        uint256 qty,
        address recipient
    ) external;

    function burn(
        uint256 typeId,
        uint256 qty,
        address burnFrom
    ) external;

    function updateMintBurns(
        uint256 typeId,
        uint256 mintQty,
        uint256 burnQty
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) external;

}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "details": {
      "constantOptimizer": true,
      "cse": true,
      "deduplicate": true,
      "inliner": true,
      "jumpdestRemover": true,
      "orderLiterals": true,
      "peephole": true,
      "yul": true,
      "yulDetails": {
        "optimizerSteps": "dhfoDgvulfnTUtnIf",
        "stackAllocation": true
      }
    },
    "runs": 2000
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"typeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnQty","type":"uint256"}],"name":"UpdateMintBurns","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auth","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"burnFrom","type":"address"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eon","outputs":[{"internalType":"contract IEON","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"getInfoForType","outputs":[{"components":[{"internalType":"uint256","name":"mints","type":"uint256"},{"internalType":"uint256","name":"burns","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"eonExchangeAmt","type":"uint256"}],"internalType":"struct RAW.TypeInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"typeId","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","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":"_eon","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"exchangeAmt","type":"uint256"}],"name":"setExchangeAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"traitData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"mintQty","type":"uint256"},{"internalType":"uint256","name":"burnQty","type":"uint256"}],"name":"updateMintBurns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"internalType":"struct RAW.Image","name":"image","type":"tuple"}],"name":"uploadImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506002805460ff19169055600780546001600160a01b03191633179055612e168061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101b85760003560e01c8063749388c4116100f9578063de9375f211610097578063e985e9c511610071578063e985e9c514610408578063f242432a14610436578063f2fde38b14610449578063f6bb451f1461045c57600080fd5b8063de9375f2146103c2578063e79df0d1146103d5578063e7d3fe6b146103f557600080fd5b80639ca0f29b116100d35780639ca0f29b14610340578063a22cb46514610360578063a389783e14610373578063c4994180146103af57600080fd5b8063749388c4146103005780637d26c78c146103135780638da5cb5b1461032657600080fd5b80632eb2c2d6116101665780634ee6dc99116101405780634ee6dc99146102bc5780635a2e2f47146102cf5780635c975abb146102e257806370480275146102ed57600080fd5b80632eb2c2d6146102765780633ac70266146102895780634e1273f41461029c57600080fd5b806316c38b3c1161019757806316c38b3c1461023b5780631785f53c146102505780632b04e8401461026357600080fd5b8062fdd58e146101bd57806301ffc9a7146101fb5780630e89341c1461021b575b600080fd5b6101e56101cb366004611bb5565b600060208181529281526040808220909352908152205481565b6040516101f29190611bfa565b60405180910390f35b61020e610209366004611c23565b61047d565b6040516101f29190611c54565b61022e610229366004611c62565b61051a565b6040516101f29190611ce1565b61024e610249366004611d05565b6106fb565b005b61024e61025e366004611d26565b610753565b6101e5610271366004611bb5565b61078b565b61024e610284366004611ee3565b610812565b61024e610297366004611fac565b610ab1565b6102af6102aa366004612041565b610b28565b6040516101f29190612107565b61024e6102ca366004612118565b610c34565b61024e6102dd366004611d26565b610ced565b60025460ff1661020e565b61024e6102fb366004611d26565b610d3e565b61024e61030e366004612168565b610d79565b61024e6103213660046121c9565b610e02565b6007546001600160a01b03165b6040516101f29190612220565b61035361034e366004611c62565b610ef1565b6040516101f29190612273565b61024e61036e366004612281565b610f8c565b61020e6103813660046122b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61024e6103bd366004611fac565b610ffb565b600754610333906001600160a01b031681565b6006546103e8906001600160a01b031681565b6040516101f29190612306565b61024e610403366004612168565b611057565b61020e6104163660046122b4565b600160209081526000928352604080842090915290825290205460ff1681565b61024e610444366004612314565b611127565b61024e610457366004611d26565b611334565b61046f61046a366004611c62565b611385565b6040516101f292919061236e565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806104e057507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061051457507f0e89341c000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6000818152600360205260409020600201546060906105545760405162461bcd60e51b815260040161054b906123c5565b60405180910390fd5b600082815260046020526040808220815180830190925280548290829061057a906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546105a6906123eb565b80156105f35780601f106105c8576101008083540402835291602001916105f3565b820191906000526020600020905b8154815290600101906020018083116105d657829003601f168201915b5050505050815260200160018201805461060c906123eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610638906123eb565b80156106855780601f1061065a57610100808354040283529160200191610685565b820191906000526020600020905b81548152906001019060200180831161066857829003601f168201915b5050505050815250509050600081600001516106a86106a3866114b1565b611648565b6040516020016106b9929190612434565b60405160208183030381529060405290506106d381611648565b6040516020016106e391906125cf565b60405160208183030381529060405292505050919050565b6007546001600160a01b0316331461071257600080fd5b6006546001600160a01b031661073a5760405162461bcd60e51b815260040161054b90612631565b801561074b57610748611805565b50565b610748611874565b6007546001600160a01b0316331461076a57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6040517efdd58e000000000000000000000000000000000000000000000000000000008152600090309062fdd58e906107ca9086908690600401612641565b602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190612667565b9392505050565b8251825181146108345760405162461bcd60e51b815260040161054b906126ba565b3360009081526005602052604090205460ff166108a157336001600160a01b038716148061088557506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6108a15760405162461bcd60e51b815260040161054b906126fc565b60005b818110156109765760008582815181106108c0576108c061270c565b6020026020010151905060008583815181106108de576108de61270c565b60200260200101519050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020600082825461092d9190612738565b90915550506001600160a01b0388166000908152602081815260408083208584529091528120805483929061096390849061274f565b9091555050600190920191506108a49050565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516109c6929190612767565b60405180910390a46001600160a01b0385163b15610a80576040517fbc197c8100000000000000000000000000000000000000000000000000000000808252906001600160a01b0387169063bc197c8190610a2d9033908b908a908a908a9060040161278c565b6020604051808303816000875af1158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7091906127f7565b6001600160e01b03191614610a8d565b6001600160a01b03851615155b610aa95760405162461bcd60e51b815260040161054b9061284a565b505050505050565b6007546001600160a01b03163314610ac857600080fd5b81610ae55760405162461bcd60e51b815260040161054b9061288c565b600082815260036020526040902054811015610b135760405162461bcd60e51b815260040161054b906128ce565b60009182526003602052604090912060020155565b81518151606091908114610b4e5760405162461bcd60e51b815260040161054b906126ba565b835167ffffffffffffffff811115610b6857610b68611d47565b604051908082528060200260200182016040528015610b91578160200160208202803683370190505b50915060005b81811015610c2c57600080868381518110610bb457610bb461270c565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610bf057610bf061270c565b6020026020010151815260200190815260200160002054838281518110610c1957610c1961270c565b6020908102919091010152600101610b97565b505092915050565b3360009081526005602052604090205460ff16610c635760405162461bcd60e51b815260040161054b90612910565b60008381526003602052604081208054849290610c8190849061274f565b909155505060008381526003602052604081206001018054839290610ca790849061274f565b90915550506040517f069c51469578032eacdf4c08d21e7515ba36f52e0456901cce8073899c3934ed90610ce090859085908590612920565b60405180910390a1505050565b6007546001600160a01b03163314610d0457600080fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6007546001600160a01b03163314610d5557600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60025460ff1615610d9c5760405162461bcd60e51b815260040161054b9061297a565b3360009081526005602052604090205460ff16610dcb5760405162461bcd60e51b815260040161054b906129bc565b60008381526003602052604081206001018054849290610dec90849061274f565b90915550610dfd90508184846118c7565b505050565b6007546001600160a01b03163314610e1957600080fd5b6040805180820190915280610e2e83806129cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602090810190610e77908401846129cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505084815260046020908152604090912083518051919350610ed1928492910190611adb565b506020828101518051610eea9260018501920190611adb565b5050505050565b610f1c6040518060800160405280600081526020016000815260200160008152602001600081525090565b600082815260036020526040902060020154610f4a5760405162461bcd60e51b815260040161054b906123c5565b50600090815260036020818152604092839020835160808101855281548152600182015492810192909252600281015493820193909352910154606082015290565b3360008181526001602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610fef908590611c54565b60405180910390a35050565b6007546001600160a01b0316331461101257600080fd5b6000828152600360205260409020600201546110405760405162461bcd60e51b815260040161054b90612a78565b600091825260036020819052604090922090910155565b60025460ff161561107a5760405162461bcd60e51b815260040161054b9061297a565b3360009081526005602052604090205460ff166110a95760405162461bcd60e51b815260040161054b906129bc565b6000838152600360205260409020600281015490546110c990849061274f565b11156110e75760405162461bcd60e51b815260040161054b90612aba565b6000838152600360205260408120805484929061110590849061274f565b92505081905550610dfd8184846040518060200160405280600081525061194c565b3360009081526005602052604090205460ff1661119457336001600160a01b038616148061117857506001600160a01b038516600090815260016020908152604080832033845290915290205460ff165b6111945760405162461bcd60e51b815260040161054b906126fc565b6001600160a01b038516600090815260208181526040808320868452909152812080548492906111c5908490612738565b90915550506001600160a01b038416600090815260208181526040808320868452909152812080548492906111fb90849061274f565b92505081905550836001600160a01b0316856001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611251929190612aca565b60405180910390a46001600160a01b0384163b1561130b576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e61906112b89033908a90899089908990600401612ad8565b6020604051808303816000875af11580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb91906127f7565b6001600160e01b03191614611318565b6001600160a01b03841615155b610eea5760405162461bcd60e51b815260040161054b9061284a565b6007546001600160a01b0316331461134b57600080fd5b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004602052600090815260409020805481906113a0906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546113cc906123eb565b80156114195780601f106113ee57610100808354040283529160200191611419565b820191906000526020600020905b8154815290600101906020018083116113fc57829003601f168201915b50505050509080600101805461142e906123eb565b80601f016020809104026020016040519081016040528092919081815260200182805461145a906123eb565b80156114a75780601f1061147c576101008083540402835291602001916114a7565b820191906000526020600020905b81548152906001019060200180831161148a57829003601f168201915b5050505050905082565b606060006115ff600460008581526020019081526020016000206040518060400160405290816000820180546114e6906123eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611512906123eb565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b50505050508152602001600182018054611578906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546115a4906123eb565b80156115f15780601f106115c6576101008083540402835291602001916115f1565b820191906000526020600020905b8154815290600101906020018083116115d457829003601f168201915b505050505081525050611aae565b60405160200161160f9190612b1f565b6040516020818303038152906040529050806040516020016116319190612b29565b604051602081830303815290604052915050919050565b606081516000141561166857505060408051602081019091526000815290565b6000604051806060016040528060408152602001612da16040913990506000600384516002611697919061274f565b6116a19190612c35565b6116ac906004612c49565b905060006116bb82602061274f565b67ffffffffffffffff8111156116d3576116d3611d47565b6040519080825280601f01601f1916602001820160405280156116fd576020820181803683370190505b509050818152600183018586518101602084015b8183101561176b5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611711565b60038951066001811461178557600281146117cf576117f7565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8301526117f7565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b60025460ff16156118285760405162461bcd60e51b815260040161054b9061297a565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861185d3390565b60405161186a9190612220565b60405180910390a1565b60025460ff166118965760405162461bcd60e51b815260040161054b90612c9a565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361185d565b6001600160a01b038316600090815260208181526040808320858452909152812080548392906118f8908490612738565b90915550506040516000906001600160a01b0385169033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629061193f9087908790612aca565b60405180910390a4505050565b6001600160a01b0384166000908152602081815260408083208684529091528120805484929061197d90849061274f565b90915550506040516001600160a01b0385169060009033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906119c49088908890612aca565b60405180910390a46001600160a01b0384163b15611a7f576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e6190611a2c903390600090899089908990600401612ad8565b6020604051808303816000875af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906127f7565b6001600160e01b03191614611a8c565b6001600160a01b03841615155b611aa85760405162461bcd60e51b815260040161054b9061284a565b50505050565b60608160200151604051602001611ac59190612caa565b6040516020818303038152906040529050919050565b828054611ae7906123eb565b90600052602060002090601f016020900481019282611b095760008555611b4f565b82601f10611b2257805160ff1916838001178555611b4f565b82800160010185558215611b4f579182015b82811115611b4f578251825591602001919060010190611b34565b50611b5b929150611b5f565b5090565b5b80821115611b5b5760008155600101611b60565b60006001600160a01b038216610514565b611b8e81611b74565b811461074857600080fd5b803561051481611b85565b80611b8e565b803561051481611ba4565b60008060408385031215611bcb57611bcb600080fd5b6000611bd78585611b99565b9250506020611be885828601611baa565b9150509250929050565b805b82525050565b602081016105148284611bf2565b6001600160e01b03198116611b8e565b803561051481611c08565b600060208284031215611c3857611c38600080fd5b6000611c448484611c18565b949350505050565b801515611bf4565b602081016105148284611c4c565b600060208284031215611c7757611c77600080fd5b6000611c448484611baa565b60005b83811015611c9e578181015183820152602001611c86565b83811115611aa85750506000910152565b6000611cb9825190565b808452602084019350611cd0818560208601611c83565b601f01601f19169290920192915050565b6020808252810161080b8184611caf565b801515611b8e565b803561051481611cf2565b600060208284031215611d1a57611d1a600080fd5b6000611c448484611cfa565b600060208284031215611d3b57611d3b600080fd5b6000611c448484611b99565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611d8357611d83611d47565b6040525050565b6000611d9560405190565b9050611da18282611d5d565b919050565b600067ffffffffffffffff821115611dc057611dc0611d47565b5060209081020190565b6000611ddd611dd884611da6565b611d8a565b83815290506020808201908402830185811115611dfc57611dfc600080fd5b835b81811015611e1e57611e108782611baa565b835260209283019201611dfe565b5050509392505050565b600082601f830112611e3c57611e3c600080fd5b8135611c44848260208601611dca565b600067ffffffffffffffff821115611e6657611e66611d47565b601f19601f83011660200192915050565b82818337506000910152565b6000611e91611dd884611e4c565b905082815260208101848484011115611eac57611eac600080fd5b611eb7848285611e77565b509392505050565b600082601f830112611ed357611ed3600080fd5b8135611c44848260208601611e83565b600080600080600060a08688031215611efe57611efe600080fd5b6000611f0a8888611b99565b9550506020611f1b88828901611b99565b945050604086013567ffffffffffffffff811115611f3b57611f3b600080fd5b611f4788828901611e28565b935050606086013567ffffffffffffffff811115611f6757611f67600080fd5b611f7388828901611e28565b925050608086013567ffffffffffffffff811115611f9357611f93600080fd5b611f9f88828901611ebf565b9150509295509295909350565b60008060408385031215611fc257611fc2600080fd5b6000611bd78585611baa565b6000611fdc611dd884611da6565b83815290506020808201908402830185811115611ffb57611ffb600080fd5b835b81811015611e1e5761200f8782611b99565b835260209283019201611ffd565b600082601f83011261203157612031600080fd5b8135611c44848260208601611fce565b6000806040838503121561205757612057600080fd5b823567ffffffffffffffff81111561207157612071600080fd5b61207d8582860161201d565b925050602083013567ffffffffffffffff81111561209d5761209d600080fd5b611be885828601611e28565b6120b38282611bf2565b5060200190565b60200190565b60006120ca825190565b808452602093840193830160005b828110156120fd5781516120ec87826120a9565b9650506020820191506001016120d8565b5093949350505050565b6020808252810161080b81846120c0565b60008060006060848603121561213057612130600080fd5b600061213c8686611baa565b935050602061214d86828701611baa565b925050604061215e86828701611baa565b9150509250925092565b60008060006060848603121561218057612180600080fd5b600061218c8686611baa565b935050602061219d86828701611baa565b925050604061215e86828701611b99565b6000604082840312156121c3576121c3600080fd5b50919050565b600080604083850312156121df576121df600080fd5b60006121eb8585611baa565b925050602083013567ffffffffffffffff81111561220b5761220b600080fd5b611be8858286016121ae565b611bf481611b74565b602081016105148284612217565b805161223a8382611bf2565b50602081015161224d6020840182611bf2565b5060408101516122606040840182611bf2565b506060810151610dfd6060840182611bf2565b60808101610514828461222e565b6000806040838503121561229757612297600080fd5b60006122a38585611b99565b9250506020611be885828601611cfa565b600080604083850312156122ca576122ca600080fd5b60006122d68585611b99565b9250506020611be885828601611b99565b600061051482611b74565b6000610514826122e7565b611bf4816122f2565b6020810161051482846122fd565b600080600080600060a0868803121561232f5761232f600080fd5b600061233b8888611b99565b955050602061234c88828901611b99565b945050604061235d88828901611baa565b9350506060611f7388828901611baa565b6040808252810161237f8185611caf565b90508181036020830152611c448184611caf565b600c8152602081017f696e76616c696420747970650000000000000000000000000000000000000000815290506120ba565b6020808252810161051481612393565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806123ff57607f821691505b602082108114156121c3576121c36123d5565b600061241c825190565b61242a818560208601611c83565b9290920192915050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600a016124648184612412565b7f222c20226465736372697074696f6e223a20225261772050797468656173207281527f65736f7572636573202d20416c6c20746865206d6574616461746120616e642060208201527f696d61676573206172652067656e65726174656420616e642073746f7265642060408201527f31303025206f6e2d636861696e2e204e6f20495046532e204e4f204150492e2060608201527f4a7573742074686520457468657265756d20626c6f636b636861696e2e222c2060808201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360a08201527f6536342c0000000000000000000000000000000000000000000000000000000060c082015260c401905061257a8183612412565b7f222c202261747472696275746573223a205b5d0000000000000000000000000081527f7d0000000000000000000000000000000000000000000000000000000000000060138201908152915060140161080b565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152601d016105148183612412565b60118152602081017f436f6e747261637473206e6f7420736574000000000000000000000000000000815290506120ba565b60208082528101610514816125ff565b6040810161264f8285612217565b61080b6020830184611bf2565b805161051481611ba4565b60006020828403121561267c5761267c600080fd5b6000611c44848461265c565b600f8152602081017f4c454e4754485f4d49534d415443480000000000000000000000000000000000815290506120ba565b6020808252810161051481612688565b600e8152602081017f4e4f545f415554484f52495a4544000000000000000000000000000000000000815290506120ba565b60208082528101610514816126ca565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561274a5761274a612722565b500390565b6000821982111561276257612762612722565b500190565b6040808252810161277881856120c0565b90508181036020830152611c4481846120c0565b60a0810161279a8288612217565b6127a76020830187612217565b81810360408301526127b981866120c0565b905081810360608301526127cd81856120c0565b905081810360808301526127e18184611caf565b979650505050505050565b805161051481611c08565b60006020828403121561280c5761280c600080fd5b6000611c4484846127ec565b60108152602081017f554e534146455f524543495049454e5400000000000000000000000000000000815290506120ba565b6020808252810161051481612818565b60128152602081017f5479706549642063616e6e6f7420626520300000000000000000000000000000815290506120ba565b602080825281016105148161285a565b60128152602081017f6d617820737570706c7920746f6f206c6f770000000000000000000000000000815290506120ba565b602080825281016105148161289c565b600b8152602081017f4f6e6c792041646d696e73000000000000000000000000000000000000000000815290506120ba565b60208082528101610514816128de565b6060810161292e8286611bf2565b61293b6020830185611bf2565b611c446040830184611bf2565b60108152602081017f5061757361626c653a2070617573656400000000000000000000000000000000815290506120ba565b6020808252810161051481612948565b600b8152602081017f4f6e6c792061646d696e73000000000000000000000000000000000000000000815290506120ba565b602080825281016105148161298a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112612a0557612a05600080fd5b8301915050803567ffffffffffffffff811115612a2457612a24600080fd5b602082019150600181023603821315612a3f57612a3f600080fd5b9250929050565b601d8152602081017f74686973207479706520686173206e6f74206265656e20736574207570000000815290506120ba565b6020808252810161051481612a46565b60108152602081017f4d6178537570706c79204d696e74656400000000000000000000000000000000815290506120ba565b6020808252810161051481612a88565b6040810161264f8285611bf2565b60a08101612ae68288612217565b612af36020830187612217565b612b006040830186611bf2565b612b0d6060830185611bf2565b81810360808301526127e18184611caf565b6105148183612412565b7f3c7376672069643d22616c746572222077696474683d2231303025222068656981527f6768743d2231303025222076657273696f6e3d22312e31222076696577426f7860208201527f3d223020302036342036342220786d6c6e733d22687474703a2f2f7777772e7760408201527f332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d2268747460608201527f703a2f2f7777772e77332e6f72672f313939392f786c696e6b223e00000000006080820152609b01612bf18183612412565b7f3c2f7376673e00000000000000000000000000000000000000000000000000008152905060068101610514565b634e487b7160e01b600052601260045260246000fd5b600082612c4457612c44612c1f565b500490565b6000816000190483118215151615612c6357612c63612722565b500290565b60148152602081017f5061757361626c653a206e6f7420706175736564000000000000000000000000815290506120ba565b6020808252810161051481612c68565b7f3c696d61676520783d22302220793d2230222077696474683d2236342220686581527f696768743d2236342220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201527f6261736536342c000000000000000000000000000000000000000000000000006080820152608701612d728183612412565b7f222f3e0000000000000000000000000000000000000000000000000000000000815290506003810161051456fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122019f459051ebde7b2b9a66737a65c0230a6a2cb43ff550a507ebd545b063e7f3664736f6c634300080b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101b85760003560e01c8063749388c4116100f9578063de9375f211610097578063e985e9c511610071578063e985e9c514610408578063f242432a14610436578063f2fde38b14610449578063f6bb451f1461045c57600080fd5b8063de9375f2146103c2578063e79df0d1146103d5578063e7d3fe6b146103f557600080fd5b80639ca0f29b116100d35780639ca0f29b14610340578063a22cb46514610360578063a389783e14610373578063c4994180146103af57600080fd5b8063749388c4146103005780637d26c78c146103135780638da5cb5b1461032657600080fd5b80632eb2c2d6116101665780634ee6dc99116101405780634ee6dc99146102bc5780635a2e2f47146102cf5780635c975abb146102e257806370480275146102ed57600080fd5b80632eb2c2d6146102765780633ac70266146102895780634e1273f41461029c57600080fd5b806316c38b3c1161019757806316c38b3c1461023b5780631785f53c146102505780632b04e8401461026357600080fd5b8062fdd58e146101bd57806301ffc9a7146101fb5780630e89341c1461021b575b600080fd5b6101e56101cb366004611bb5565b600060208181529281526040808220909352908152205481565b6040516101f29190611bfa565b60405180910390f35b61020e610209366004611c23565b61047d565b6040516101f29190611c54565b61022e610229366004611c62565b61051a565b6040516101f29190611ce1565b61024e610249366004611d05565b6106fb565b005b61024e61025e366004611d26565b610753565b6101e5610271366004611bb5565b61078b565b61024e610284366004611ee3565b610812565b61024e610297366004611fac565b610ab1565b6102af6102aa366004612041565b610b28565b6040516101f29190612107565b61024e6102ca366004612118565b610c34565b61024e6102dd366004611d26565b610ced565b60025460ff1661020e565b61024e6102fb366004611d26565b610d3e565b61024e61030e366004612168565b610d79565b61024e6103213660046121c9565b610e02565b6007546001600160a01b03165b6040516101f29190612220565b61035361034e366004611c62565b610ef1565b6040516101f29190612273565b61024e61036e366004612281565b610f8c565b61020e6103813660046122b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61024e6103bd366004611fac565b610ffb565b600754610333906001600160a01b031681565b6006546103e8906001600160a01b031681565b6040516101f29190612306565b61024e610403366004612168565b611057565b61020e6104163660046122b4565b600160209081526000928352604080842090915290825290205460ff1681565b61024e610444366004612314565b611127565b61024e610457366004611d26565b611334565b61046f61046a366004611c62565b611385565b6040516101f292919061236e565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806104e057507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061051457507f0e89341c000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6000818152600360205260409020600201546060906105545760405162461bcd60e51b815260040161054b906123c5565b60405180910390fd5b600082815260046020526040808220815180830190925280548290829061057a906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546105a6906123eb565b80156105f35780601f106105c8576101008083540402835291602001916105f3565b820191906000526020600020905b8154815290600101906020018083116105d657829003601f168201915b5050505050815260200160018201805461060c906123eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610638906123eb565b80156106855780601f1061065a57610100808354040283529160200191610685565b820191906000526020600020905b81548152906001019060200180831161066857829003601f168201915b5050505050815250509050600081600001516106a86106a3866114b1565b611648565b6040516020016106b9929190612434565b60405160208183030381529060405290506106d381611648565b6040516020016106e391906125cf565b60405160208183030381529060405292505050919050565b6007546001600160a01b0316331461071257600080fd5b6006546001600160a01b031661073a5760405162461bcd60e51b815260040161054b90612631565b801561074b57610748611805565b50565b610748611874565b6007546001600160a01b0316331461076a57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6040517efdd58e000000000000000000000000000000000000000000000000000000008152600090309062fdd58e906107ca9086908690600401612641565b602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190612667565b9392505050565b8251825181146108345760405162461bcd60e51b815260040161054b906126ba565b3360009081526005602052604090205460ff166108a157336001600160a01b038716148061088557506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6108a15760405162461bcd60e51b815260040161054b906126fc565b60005b818110156109765760008582815181106108c0576108c061270c565b6020026020010151905060008583815181106108de576108de61270c565b60200260200101519050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020600082825461092d9190612738565b90915550506001600160a01b0388166000908152602081815260408083208584529091528120805483929061096390849061274f565b9091555050600190920191506108a49050565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516109c6929190612767565b60405180910390a46001600160a01b0385163b15610a80576040517fbc197c8100000000000000000000000000000000000000000000000000000000808252906001600160a01b0387169063bc197c8190610a2d9033908b908a908a908a9060040161278c565b6020604051808303816000875af1158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7091906127f7565b6001600160e01b03191614610a8d565b6001600160a01b03851615155b610aa95760405162461bcd60e51b815260040161054b9061284a565b505050505050565b6007546001600160a01b03163314610ac857600080fd5b81610ae55760405162461bcd60e51b815260040161054b9061288c565b600082815260036020526040902054811015610b135760405162461bcd60e51b815260040161054b906128ce565b60009182526003602052604090912060020155565b81518151606091908114610b4e5760405162461bcd60e51b815260040161054b906126ba565b835167ffffffffffffffff811115610b6857610b68611d47565b604051908082528060200260200182016040528015610b91578160200160208202803683370190505b50915060005b81811015610c2c57600080868381518110610bb457610bb461270c565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610bf057610bf061270c565b6020026020010151815260200190815260200160002054838281518110610c1957610c1961270c565b6020908102919091010152600101610b97565b505092915050565b3360009081526005602052604090205460ff16610c635760405162461bcd60e51b815260040161054b90612910565b60008381526003602052604081208054849290610c8190849061274f565b909155505060008381526003602052604081206001018054839290610ca790849061274f565b90915550506040517f069c51469578032eacdf4c08d21e7515ba36f52e0456901cce8073899c3934ed90610ce090859085908590612920565b60405180910390a1505050565b6007546001600160a01b03163314610d0457600080fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6007546001600160a01b03163314610d5557600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60025460ff1615610d9c5760405162461bcd60e51b815260040161054b9061297a565b3360009081526005602052604090205460ff16610dcb5760405162461bcd60e51b815260040161054b906129bc565b60008381526003602052604081206001018054849290610dec90849061274f565b90915550610dfd90508184846118c7565b505050565b6007546001600160a01b03163314610e1957600080fd5b6040805180820190915280610e2e83806129cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602090810190610e77908401846129cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505084815260046020908152604090912083518051919350610ed1928492910190611adb565b506020828101518051610eea9260018501920190611adb565b5050505050565b610f1c6040518060800160405280600081526020016000815260200160008152602001600081525090565b600082815260036020526040902060020154610f4a5760405162461bcd60e51b815260040161054b906123c5565b50600090815260036020818152604092839020835160808101855281548152600182015492810192909252600281015493820193909352910154606082015290565b3360008181526001602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610fef908590611c54565b60405180910390a35050565b6007546001600160a01b0316331461101257600080fd5b6000828152600360205260409020600201546110405760405162461bcd60e51b815260040161054b90612a78565b600091825260036020819052604090922090910155565b60025460ff161561107a5760405162461bcd60e51b815260040161054b9061297a565b3360009081526005602052604090205460ff166110a95760405162461bcd60e51b815260040161054b906129bc565b6000838152600360205260409020600281015490546110c990849061274f565b11156110e75760405162461bcd60e51b815260040161054b90612aba565b6000838152600360205260408120805484929061110590849061274f565b92505081905550610dfd8184846040518060200160405280600081525061194c565b3360009081526005602052604090205460ff1661119457336001600160a01b038616148061117857506001600160a01b038516600090815260016020908152604080832033845290915290205460ff165b6111945760405162461bcd60e51b815260040161054b906126fc565b6001600160a01b038516600090815260208181526040808320868452909152812080548492906111c5908490612738565b90915550506001600160a01b038416600090815260208181526040808320868452909152812080548492906111fb90849061274f565b92505081905550836001600160a01b0316856001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611251929190612aca565b60405180910390a46001600160a01b0384163b1561130b576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e61906112b89033908a90899089908990600401612ad8565b6020604051808303816000875af11580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb91906127f7565b6001600160e01b03191614611318565b6001600160a01b03841615155b610eea5760405162461bcd60e51b815260040161054b9061284a565b6007546001600160a01b0316331461134b57600080fd5b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004602052600090815260409020805481906113a0906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546113cc906123eb565b80156114195780601f106113ee57610100808354040283529160200191611419565b820191906000526020600020905b8154815290600101906020018083116113fc57829003601f168201915b50505050509080600101805461142e906123eb565b80601f016020809104026020016040519081016040528092919081815260200182805461145a906123eb565b80156114a75780601f1061147c576101008083540402835291602001916114a7565b820191906000526020600020905b81548152906001019060200180831161148a57829003601f168201915b5050505050905082565b606060006115ff600460008581526020019081526020016000206040518060400160405290816000820180546114e6906123eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611512906123eb565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b50505050508152602001600182018054611578906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546115a4906123eb565b80156115f15780601f106115c6576101008083540402835291602001916115f1565b820191906000526020600020905b8154815290600101906020018083116115d457829003601f168201915b505050505081525050611aae565b60405160200161160f9190612b1f565b6040516020818303038152906040529050806040516020016116319190612b29565b604051602081830303815290604052915050919050565b606081516000141561166857505060408051602081019091526000815290565b6000604051806060016040528060408152602001612da16040913990506000600384516002611697919061274f565b6116a19190612c35565b6116ac906004612c49565b905060006116bb82602061274f565b67ffffffffffffffff8111156116d3576116d3611d47565b6040519080825280601f01601f1916602001820160405280156116fd576020820181803683370190505b509050818152600183018586518101602084015b8183101561176b5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611711565b60038951066001811461178557600281146117cf576117f7565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8301526117f7565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b60025460ff16156118285760405162461bcd60e51b815260040161054b9061297a565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861185d3390565b60405161186a9190612220565b60405180910390a1565b60025460ff166118965760405162461bcd60e51b815260040161054b90612c9a565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361185d565b6001600160a01b038316600090815260208181526040808320858452909152812080548392906118f8908490612738565b90915550506040516000906001600160a01b0385169033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629061193f9087908790612aca565b60405180910390a4505050565b6001600160a01b0384166000908152602081815260408083208684529091528120805484929061197d90849061274f565b90915550506040516001600160a01b0385169060009033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906119c49088908890612aca565b60405180910390a46001600160a01b0384163b15611a7f576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e6190611a2c903390600090899089908990600401612ad8565b6020604051808303816000875af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906127f7565b6001600160e01b03191614611a8c565b6001600160a01b03841615155b611aa85760405162461bcd60e51b815260040161054b9061284a565b50505050565b60608160200151604051602001611ac59190612caa565b6040516020818303038152906040529050919050565b828054611ae7906123eb565b90600052602060002090601f016020900481019282611b095760008555611b4f565b82601f10611b2257805160ff1916838001178555611b4f565b82800160010185558215611b4f579182015b82811115611b4f578251825591602001919060010190611b34565b50611b5b929150611b5f565b5090565b5b80821115611b5b5760008155600101611b60565b60006001600160a01b038216610514565b611b8e81611b74565b811461074857600080fd5b803561051481611b85565b80611b8e565b803561051481611ba4565b60008060408385031215611bcb57611bcb600080fd5b6000611bd78585611b99565b9250506020611be885828601611baa565b9150509250929050565b805b82525050565b602081016105148284611bf2565b6001600160e01b03198116611b8e565b803561051481611c08565b600060208284031215611c3857611c38600080fd5b6000611c448484611c18565b949350505050565b801515611bf4565b602081016105148284611c4c565b600060208284031215611c7757611c77600080fd5b6000611c448484611baa565b60005b83811015611c9e578181015183820152602001611c86565b83811115611aa85750506000910152565b6000611cb9825190565b808452602084019350611cd0818560208601611c83565b601f01601f19169290920192915050565b6020808252810161080b8184611caf565b801515611b8e565b803561051481611cf2565b600060208284031215611d1a57611d1a600080fd5b6000611c448484611cfa565b600060208284031215611d3b57611d3b600080fd5b6000611c448484611b99565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611d8357611d83611d47565b6040525050565b6000611d9560405190565b9050611da18282611d5d565b919050565b600067ffffffffffffffff821115611dc057611dc0611d47565b5060209081020190565b6000611ddd611dd884611da6565b611d8a565b83815290506020808201908402830185811115611dfc57611dfc600080fd5b835b81811015611e1e57611e108782611baa565b835260209283019201611dfe565b5050509392505050565b600082601f830112611e3c57611e3c600080fd5b8135611c44848260208601611dca565b600067ffffffffffffffff821115611e6657611e66611d47565b601f19601f83011660200192915050565b82818337506000910152565b6000611e91611dd884611e4c565b905082815260208101848484011115611eac57611eac600080fd5b611eb7848285611e77565b509392505050565b600082601f830112611ed357611ed3600080fd5b8135611c44848260208601611e83565b600080600080600060a08688031215611efe57611efe600080fd5b6000611f0a8888611b99565b9550506020611f1b88828901611b99565b945050604086013567ffffffffffffffff811115611f3b57611f3b600080fd5b611f4788828901611e28565b935050606086013567ffffffffffffffff811115611f6757611f67600080fd5b611f7388828901611e28565b925050608086013567ffffffffffffffff811115611f9357611f93600080fd5b611f9f88828901611ebf565b9150509295509295909350565b60008060408385031215611fc257611fc2600080fd5b6000611bd78585611baa565b6000611fdc611dd884611da6565b83815290506020808201908402830185811115611ffb57611ffb600080fd5b835b81811015611e1e5761200f8782611b99565b835260209283019201611ffd565b600082601f83011261203157612031600080fd5b8135611c44848260208601611fce565b6000806040838503121561205757612057600080fd5b823567ffffffffffffffff81111561207157612071600080fd5b61207d8582860161201d565b925050602083013567ffffffffffffffff81111561209d5761209d600080fd5b611be885828601611e28565b6120b38282611bf2565b5060200190565b60200190565b60006120ca825190565b808452602093840193830160005b828110156120fd5781516120ec87826120a9565b9650506020820191506001016120d8565b5093949350505050565b6020808252810161080b81846120c0565b60008060006060848603121561213057612130600080fd5b600061213c8686611baa565b935050602061214d86828701611baa565b925050604061215e86828701611baa565b9150509250925092565b60008060006060848603121561218057612180600080fd5b600061218c8686611baa565b935050602061219d86828701611baa565b925050604061215e86828701611b99565b6000604082840312156121c3576121c3600080fd5b50919050565b600080604083850312156121df576121df600080fd5b60006121eb8585611baa565b925050602083013567ffffffffffffffff81111561220b5761220b600080fd5b611be8858286016121ae565b611bf481611b74565b602081016105148284612217565b805161223a8382611bf2565b50602081015161224d6020840182611bf2565b5060408101516122606040840182611bf2565b506060810151610dfd6060840182611bf2565b60808101610514828461222e565b6000806040838503121561229757612297600080fd5b60006122a38585611b99565b9250506020611be885828601611cfa565b600080604083850312156122ca576122ca600080fd5b60006122d68585611b99565b9250506020611be885828601611b99565b600061051482611b74565b6000610514826122e7565b611bf4816122f2565b6020810161051482846122fd565b600080600080600060a0868803121561232f5761232f600080fd5b600061233b8888611b99565b955050602061234c88828901611b99565b945050604061235d88828901611baa565b9350506060611f7388828901611baa565b6040808252810161237f8185611caf565b90508181036020830152611c448184611caf565b600c8152602081017f696e76616c696420747970650000000000000000000000000000000000000000815290506120ba565b6020808252810161051481612393565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806123ff57607f821691505b602082108114156121c3576121c36123d5565b600061241c825190565b61242a818560208601611c83565b9290920192915050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600a016124648184612412565b7f222c20226465736372697074696f6e223a20225261772050797468656173207281527f65736f7572636573202d20416c6c20746865206d6574616461746120616e642060208201527f696d61676573206172652067656e65726174656420616e642073746f7265642060408201527f31303025206f6e2d636861696e2e204e6f20495046532e204e4f204150492e2060608201527f4a7573742074686520457468657265756d20626c6f636b636861696e2e222c2060808201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360a08201527f6536342c0000000000000000000000000000000000000000000000000000000060c082015260c401905061257a8183612412565b7f222c202261747472696275746573223a205b5d0000000000000000000000000081527f7d0000000000000000000000000000000000000000000000000000000000000060138201908152915060140161080b565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152601d016105148183612412565b60118152602081017f436f6e747261637473206e6f7420736574000000000000000000000000000000815290506120ba565b60208082528101610514816125ff565b6040810161264f8285612217565b61080b6020830184611bf2565b805161051481611ba4565b60006020828403121561267c5761267c600080fd5b6000611c44848461265c565b600f8152602081017f4c454e4754485f4d49534d415443480000000000000000000000000000000000815290506120ba565b6020808252810161051481612688565b600e8152602081017f4e4f545f415554484f52495a4544000000000000000000000000000000000000815290506120ba565b60208082528101610514816126ca565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561274a5761274a612722565b500390565b6000821982111561276257612762612722565b500190565b6040808252810161277881856120c0565b90508181036020830152611c4481846120c0565b60a0810161279a8288612217565b6127a76020830187612217565b81810360408301526127b981866120c0565b905081810360608301526127cd81856120c0565b905081810360808301526127e18184611caf565b979650505050505050565b805161051481611c08565b60006020828403121561280c5761280c600080fd5b6000611c4484846127ec565b60108152602081017f554e534146455f524543495049454e5400000000000000000000000000000000815290506120ba565b6020808252810161051481612818565b60128152602081017f5479706549642063616e6e6f7420626520300000000000000000000000000000815290506120ba565b602080825281016105148161285a565b60128152602081017f6d617820737570706c7920746f6f206c6f770000000000000000000000000000815290506120ba565b602080825281016105148161289c565b600b8152602081017f4f6e6c792041646d696e73000000000000000000000000000000000000000000815290506120ba565b60208082528101610514816128de565b6060810161292e8286611bf2565b61293b6020830185611bf2565b611c446040830184611bf2565b60108152602081017f5061757361626c653a2070617573656400000000000000000000000000000000815290506120ba565b6020808252810161051481612948565b600b8152602081017f4f6e6c792061646d696e73000000000000000000000000000000000000000000815290506120ba565b602080825281016105148161298a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112612a0557612a05600080fd5b8301915050803567ffffffffffffffff811115612a2457612a24600080fd5b602082019150600181023603821315612a3f57612a3f600080fd5b9250929050565b601d8152602081017f74686973207479706520686173206e6f74206265656e20736574207570000000815290506120ba565b6020808252810161051481612a46565b60108152602081017f4d6178537570706c79204d696e74656400000000000000000000000000000000815290506120ba565b6020808252810161051481612a88565b6040810161264f8285611bf2565b60a08101612ae68288612217565b612af36020830187612217565b612b006040830186611bf2565b612b0d6060830185611bf2565b81810360808301526127e18184611caf565b6105148183612412565b7f3c7376672069643d22616c746572222077696474683d2231303025222068656981527f6768743d2231303025222076657273696f6e3d22312e31222076696577426f7860208201527f3d223020302036342036342220786d6c6e733d22687474703a2f2f7777772e7760408201527f332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d2268747460608201527f703a2f2f7777772e77332e6f72672f313939392f786c696e6b223e00000000006080820152609b01612bf18183612412565b7f3c2f7376673e00000000000000000000000000000000000000000000000000008152905060068101610514565b634e487b7160e01b600052601260045260246000fd5b600082612c4457612c44612c1f565b500490565b6000816000190483118215151615612c6357612c63612722565b500290565b60148152602081017f5061757361626c653a206e6f7420706175736564000000000000000000000000815290506120ba565b6020808252810161051481612c68565b7f3c696d61676520783d22302220793d2230222077696474683d2236342220686581527f696768743d2236342220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201527f6261736536342c000000000000000000000000000000000000000000000000006080820152608701612d728183612412565b7f222f3e0000000000000000000000000000000000000000000000000000000000815290506003810161051456fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122019f459051ebde7b2b9a66737a65c0230a6a2cb43ff550a507ebd545b063e7f3664736f6c634300080b0033

Loading...
Loading
Loading...
Loading
[ 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.