ETH Price: $3,188.87 (+2.77%)

Token

RedPanda (RPanda)
 

Overview

Max Total Supply

10,000 RPanda

Holders

1,535

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 RPanda
0x69df7d09b3fb1c1423556b027b5f9b90eff50ce5
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Artist: Tony Sart (character concept artist for TotalWar: Warhammer II and III) Total supply: 10 000 Red Pandas. The first 200 Red Pandas will be minted by the team with 100% of these sales going to charity! 50% of all other OS royalty payouts will also go to charity. Here ...

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RedPanda

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Address {
  
    function isContract(address account) internal view returns (bool) {
       
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

}
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a);
        return c;
    }
}


interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

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

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

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    event Mint(uint indexed index, address indexed minter);
    event Withdraw(address indexed account, uint indexed amount);
    event SaleIsStarted();

    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

}

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

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping (address => bool) members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

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

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

contract ERC721 is  Context, ERC165,Ownable, AccessControl, IERC721, IERC721Metadata {
    using Address for address;
    using SafeMath for uint256;

    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");

    string private _name;
    string private _symbol;
    string internal baseURI;
    uint256 internal tokensSold = 0;
    bool public _startSale = false;

    uint256 constant MAX_SUPPLY = 10000;


    mapping (uint256 => address) private _owners;
    mapping (address => uint256) private _balances;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    mapping (uint256 => string) private _tokenURIs;
    mapping (address => uint256[]) public tokensPerOwner;
    mapping(address => uint256[]) internal ownerToIds;
    mapping(uint256 => uint256) internal idToOwnerIndex;
   

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

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

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

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

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

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


    function totalSupply() public view returns (uint256) {
        return tokensSold;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return string(abi.encodePacked(_baseURI(), toString(tokenId)));
    }

    function _baseURI() internal view virtual returns (string memory) {
        return baseURI;
    }


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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

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

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

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

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


    function _addNFToken(address _to, uint256 _tokenId) internal {
        require(_owners[_tokenId] == address(0), "Cannot add, already owned.");
        _owners[_tokenId] = _to;

        ownerToIds[_to].push(_tokenId);
        idToOwnerIndex[_tokenId] = ownerToIds[_to].length.sub(1);
    }

    function _removeNFToken(address _from, uint256 _tokenId) internal {
        require(_owners[_tokenId] == _from, "Incorrect owner.");
        delete _owners[_tokenId];
        uint256 tokenToRemoveIndex = idToOwnerIndex[_tokenId];
        uint256 lastTokenIndex = ownerToIds[_from].length.sub(1);

        if (lastTokenIndex != tokenToRemoveIndex) {
            uint256 lastToken = ownerToIds[_from][lastTokenIndex];
            ownerToIds[_from][tokenToRemoveIndex] = lastToken;
            idToOwnerIndex[lastToken] = tokenToRemoveIndex;
        }

        ownerToIds[_from].pop();
    }

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

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        tokensSold += 1;
        tokensPerOwner[to].push(tokenId);
        _addNFToken(to, tokenId);
        emit Mint(tokenId, to);
        emit Transfer(address(0), to, tokenId);
    }

    function devMint(uint count, address recipient) external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(tokensSold+count <=10000, "The tokens limit has reached.");
        for (uint i = 0; i < count; i++) {
            uint256 _tokenId = tokensSold + 1;
            _mint(recipient, _tokenId);
        }
    }


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

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];
        tokensPerOwner[owner].push(tokenId);
        emit Transfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);
        
        _removeNFToken(from, tokenId);
        _addNFToken(to, tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        
        emit Transfer(from, to, tokenId);
    }

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

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

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

contract RedPanda is ERC721  {
    using SafeMath for uint256;

    bool private lock = false;
    bool public contractPaused;
   
    constructor() ERC721("RedPanda", "RPanda", " https://saveredpanda.com/json/") { 
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    modifier nonReentrant {
        require(!lock, "ReentrancyGuard: reentrant call");
        lock = true;
        _;
        lock = false;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function pauseContract(bool _paused) external  {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to pause the contract");
        contractPaused = _paused;
    }

    function setBaseURI(string memory newURI) public returns (bool) {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        baseURI = newURI;
        return true;

    }

    function getTokensByOwner(address _owner) public view returns (uint256[] memory){
        return ownerToIds[_owner];
    }

   
    function startSale() external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(!_startSale);
        _startSale = true;
        emit SaleIsStarted();
    }
	function buyNFT(uint quantity)external payable nonReentrant returns(bool, uint){
        require(!contractPaused);
        require(_startSale, "The sale hasn't started.");
        require(tokensSold+quantity <=10000, "The tokens limit has reached.");
		require(quantity>0, "Quantity must be more than 0");
		require(quantity<11, "Quantity must be less than 11"); 
		uint _tokenId;
		for (uint i = 0; i < quantity; i++) {
			_tokenId = tokensSold + 1;
			_mint(_msgSender(), _tokenId);       
		}			
        return (true,_tokenId);
    }

    function birth()external nonReentrant returns(bool, uint){
        require(!contractPaused);
        require(_startSale, "The sale hasn't started.");
        require(tokensSold+1 <=10000, "The tokens limit has reached.");
        uint _tokenId = tokensSold + 1;
        _mint(_msgSender(), _tokenId);        
        return (true,_tokenId);
    }

}

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":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleIsStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"birth","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"buyNFT","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensPerOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006005556006805460ff19908116909155600f805490911690553480156200002c57600080fd5b506040518060400160405280600881526020016752656450616e646160c01b815250604051806040016040528060068152602001655250616e646160d01b8152506040518060400160405280601f81526020017f2068747470733a2f2f7361766572656470616e64612e636f6d2f6a736f6e2f00815250620000bd620000b76200017060201b60201c565b62000174565b8251620000d29060029060208601906200025c565b508151620000e89060039060208501906200025c565b508051620000fe9060049060208401906200025c565b5062000112925060009150339050620001c4565b6200013e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620001c4565b6200016a7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620001c4565b6200033f565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001d08282620001d4565b5050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620001d05760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b8280546200026a9062000302565b90600052602060002090601f0160209004810192826200028e5760008555620002d9565b82601f10620002a957805160ff1916838001178555620002d9565b82800160010185558215620002d9579182015b82811115620002d9578251825591602001919060010190620002bc565b50620002e7929150620002eb565b5090565b5b80821115620002e75760008155600101620002ec565b600181811c908216806200031757607f821691505b602082108114156200033957634e487b7160e01b600052602260045260246000fd5b50919050565b6126e9806200034f6000396000f3fe6080604052600436106102045760003560e01c806375b238fc11610118578063b88d4fde116100a0578063d547741f1161006f578063d547741f146105f7578063e272b89214610617578063e985e9c514610637578063ef5793ce14610680578063f2fde38b146106a057600080fd5b8063b88d4fde14610580578063c81ba8f0146105a0578063c87b56dd146105b5578063d5391393146105d557600080fd5b806395d89b41116100e757806395d89b4114610507578063a217fddf1461051c578063a22cb46514610531578063b291850314610551578063b66a0e5d1461056b57600080fd5b806375b238fc146104765780638a67456a146104aa5780638da5cb5b146104c957806391d14854146104e757600080fd5b80632f2ff15d1161019b57806351ed82881161016a57806351ed8288146103d757806355f804b3146104015780636352211e1461042157806370a0823114610441578063715018a61461046157600080fd5b80632f2ff15d1461034a57806336568abe1461036a57806340398d671461038a57806342842e0e146103b757600080fd5b806318160ddd116101d757806318160ddd146102ba57806323b872dd146102d9578063248a9ca3146102f95780632d1a12f61461032a57600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b314610298575b600080fd5b34801561021557600080fd5b506102296102243660046122d0565b6106c0565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b506102536106d1565b604051610235919061242a565b34801561026c57600080fd5b5061028061027b366004612296565b610763565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004612253565b6107fd565b005b3480156102c657600080fd5b506005545b604051908152602001610235565b3480156102e557600080fd5b506102b86102f4366004612176565b610913565b34801561030557600080fd5b506102cb610314366004612296565b6000908152600160208190526040909120015490565b34801561033657600080fd5b506102b86103453660046122ae565b610944565b34801561035657600080fd5b506102b86103653660046122ae565b6109e2565b34801561037657600080fd5b506102b86103853660046122ae565b610a72565b34801561039657600080fd5b506103aa6103a536600461212a565b610aec565b60405161023591906123e6565b3480156103c357600080fd5b506102b86103d2366004612176565b610b58565b6103ea6103e5366004612296565b610b73565b604080519215158352602083019190915201610235565b34801561040d57600080fd5b5061022961041c366004612308565b610d56565b34801561042d57600080fd5b5061028061043c366004612296565b610da8565b34801561044d57600080fd5b506102cb61045c36600461212a565b610e1f565b34801561046d57600080fd5b506102b8610ea6565b34801561048257600080fd5b506102cb7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156104b657600080fd5b50600f5461022990610100900460ff1681565b3480156104d557600080fd5b506000546001600160a01b0316610280565b3480156104f357600080fd5b506102296105023660046122ae565b610f0c565b34801561051357600080fd5b50610253610f37565b34801561052857600080fd5b506102cb600081565b34801561053d57600080fd5b506102b861054c36600461222a565b610f46565b34801561055d57600080fd5b506006546102299060ff1681565b34801561057757600080fd5b506102b861100b565b34801561058c57600080fd5b506102b861059b3660046121b1565b611087565b3480156105ac57600080fd5b506103ea6110bf565b3480156105c157600080fd5b506102536105d0366004612296565b6111e6565b3480156105e157600080fd5b506102cb60008051602061269483398151915281565b34801561060357600080fd5b506102b86106123660046122ae565b61129d565b34801561062357600080fd5b506102b861063236600461227c565b61131e565b34801561064357600080fd5b50610229610652366004612144565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b34801561068c57600080fd5b506102cb61069b366004612253565b6113b4565b3480156106ac57600080fd5b506102b86106bb36600461212a565b6113e5565b60006106cb826114b0565b92915050565b6060600280546106e0906125d1565b80601f016020809104026020016040519081016040528092919081815260200182805461070c906125d1565b80156107595780601f1061072e57610100808354040283529160200191610759565b820191906000526020600020905b81548152906001019060200180831161073c57829003601f168201915b5050505050905090565b6000818152600760205260408120546001600160a01b03166107e15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600960205260409020546001600160a01b031690565b600061080882610da8565b9050806001600160a01b0316836001600160a01b031614156108765760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107d8565b336001600160a01b038216148061089257506108928133610652565b6109045760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107d8565b61090e83836114f0565b505050565b61091d338261155e565b6109395760405162461bcd60e51b81526004016107d8906124da565b61090e838383611655565b61095c60008051602061269483398151915233610f0c565b6109785760405162461bcd60e51b81526004016107d89061248f565b612710826005546109899190612562565b11156109a75760405162461bcd60e51b81526004016107d89061252b565b60005b8281101561090e57600060055460016109c39190612562565b90506109cf83826117ed565b50806109da8161260c565b9150506109aa565b60008281526001602081905260409091200154610a00905b33610f0c565b610a645760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084016107d8565b610a6e8282611997565b5050565b6001600160a01b0381163314610ae25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107d8565b610a6e8282611a02565b6001600160a01b0381166000908152600d6020908152604091829020805483518184028101840190945280845260609392830182828015610b4c57602002820191906000526020600020905b815481526020019060010190808311610b38575b50505050509050919050565b61090e83838360405180602001604052806000815250611087565b600f54600090819060ff1615610bcb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107d8565b600f805460ff191660011790819055610100900460ff1615610bec57600080fd5b60065460ff16610c395760405162461bcd60e51b81526020600482015260186024820152772a34329039b0b632903430b9b713ba1039ba30b93a32b21760411b60448201526064016107d8565b61271083600554610c4a9190612562565b1115610c685760405162461bcd60e51b81526004016107d89061252b565b60008311610cb85760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e20300000000060448201526064016107d8565b600b8310610d085760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e20313100000060448201526064016107d8565b6000805b84811015610d4057600554610d22906001612562565b9150610d2e33836117ed565b80610d388161260c565b915050610d0c565b50600f805460ff19169055600194909350915050565b6000610d7060008051602061269483398151915233610f0c565b610d8c5760405162461bcd60e51b81526004016107d89061248f565b8151610d9f906004906020850190611fef565b50600192915050565b6000818152600760205260408120546001600160a01b0316806106cb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107d8565b60006001600160a01b038216610e8a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107d8565b506001600160a01b031660009081526008602052604090205490565b6000546001600160a01b03163314610f005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d8565b610f0a6000611a69565b565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600380546106e0906125d1565b6001600160a01b038216331415610f9f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107d8565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61102360008051602061269483398151915233610f0c565b61103f5760405162461bcd60e51b81526004016107d89061248f565b60065460ff161561104f57600080fd5b6006805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b611091338361155e565b6110ad5760405162461bcd60e51b81526004016107d8906124da565b6110b984848484611ab9565b50505050565b600f54600090819060ff16156111175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107d8565b600f805460ff191660011790819055610100900460ff161561113857600080fd5b60065460ff166111855760405162461bcd60e51b81526020600482015260186024820152772a34329039b0b632903430b9b713ba1039ba30b93a32b21760411b60448201526064016107d8565b61271060055460016111979190612562565b11156111b55760405162461bcd60e51b81526004016107d89061252b565b600060055460016111c69190612562565b90506111d233826117ed565b600192509050600f805460ff191690559091565b6000818152600760205260409020546060906001600160a01b03166112655760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107d8565b61126d611aec565b61127683611afb565b60405160200161128792919061237a565b6040516020818303038152906040529050919050565b600082815260016020819052604090912001546112b9906109fa565b610ae25760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b60648201526084016107d8565b61133660008051602061269483398151915233610f0c565b61139a5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b60648201526084016107d8565b600f80549115156101000261ff0019909216919091179055565b600c60205281600052604060002081815481106113d057600080fd5b90600052602060002001600091509150505481565b6000546001600160a01b0316331461143f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d8565b6001600160a01b0381166114a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d8565b6114ad81611a69565b50565b60006001600160e01b031982166380ac58cd60e01b14806114e157506001600160e01b03198216635b5e139f60e01b145b806106cb57506106cb82611c15565b600081815260096020526040902080546001600160a01b0319166001600160a01b038416908117909155819061152582610da8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600760205260408120546001600160a01b03166115d75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107d8565b60006115e283610da8565b9050806001600160a01b0316846001600160a01b0316148061161d5750836001600160a01b031661161284610763565b6001600160a01b0316145b8061164d57506001600160a01b038082166000908152600a602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661166882610da8565b6001600160a01b0316146116d05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107d8565b6001600160a01b0382166117325760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107d8565b61173d6000826114f0565b6117478382611c4a565b6117518282611df3565b6001600160a01b038316600090815260086020526040812080546001929061177a90849061258e565b90915550506001600160a01b03821660009081526008602052604081208054600192906117a8908490612562565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166118435760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107d8565b6000818152600760205260409020546001600160a01b0316156118a85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107d8565b6001600160a01b03821660009081526008602052604081208054600192906118d1908490612562565b925050819055506001600560008282546118eb9190612562565b90915550506001600160a01b0382166000908152600c60209081526040822080546001810182559083529120018190556119258282611df3565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6119a18282610f0c565b610a6e5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b611a0c8282610f0c565b15610a6e5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611ac4848484611655565b611ad084848484611ec2565b6110b95760405162461bcd60e51b81526004016107d89061243d565b6060600480546106e0906125d1565b606081611b1f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b495780611b338161260c565b9150611b429050600a8361257a565b9150611b23565b60008167ffffffffffffffff811115611b7257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b9c576020820181803683370190505b5090505b841561164d57611bb160018361258e565b9150611bbe600a86612627565b611bc9906030612562565b60f81b818381518110611bec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c0e600a8661257a565b9450611ba0565b60006001600160e01b03198216637965db0b60e01b14806106cb57506301ffc9a760e01b6001600160e01b03198316146106cb565b6000818152600760205260409020546001600160a01b03838116911614611ca65760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b60448201526064016107d8565b600081815260076020908152604080832080546001600160a01b0319169055600e8252808320546001600160a01b0386168452600d909252822054909190611cef906001611fcf565b9050818114611da2576001600160a01b0384166000908152600d60205260408120805483908110611d3057634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600d6000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110611d8257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600e9052604090208290555b6001600160a01b0384166000908152600d60205260409020805480611dd757634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000818152600760205260409020546001600160a01b031615611e585760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e00000000000060448201526064016107d8565b600081815260076020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600d83529083208054600181810183558286529385200185905592529054611eaf91611fcf565b6000918252600e60205260409091205550565b60006001600160a01b0384163b15611fc457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f069033908990889088906004016123a9565b602060405180830381600087803b158015611f2057600080fd5b505af1925050508015611f50575060408051601f3d908101601f19168201909252611f4d918101906122ec565b60015b611faa573d808015611f7e576040519150601f19603f3d011682016040523d82523d6000602084013e611f83565b606091505b508051611fa25760405162461bcd60e51b81526004016107d89061243d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061164d565b506001949350505050565b600082821115611fde57600080fd5b611fe8828461258e565b9392505050565b828054611ffb906125d1565b90600052602060002090601f01602090048101928261201d5760008555612063565b82601f1061203657805160ff1916838001178555612063565b82800160010185558215612063579182015b82811115612063578251825591602001919060010190612048565b5061206f929150612073565b5090565b5b8082111561206f5760008155600101612074565b600067ffffffffffffffff808411156120a3576120a3612667565b604051601f8501601f19908116603f011681019082821181831017156120cb576120cb612667565b816040528093508581528686860111156120e457600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461211557600080fd5b919050565b8035801515811461211557600080fd5b60006020828403121561213b578081fd5b611fe8826120fe565b60008060408385031215612156578081fd5b61215f836120fe565b915061216d602084016120fe565b90509250929050565b60008060006060848603121561218a578081fd5b612193846120fe565b92506121a1602085016120fe565b9150604084013590509250925092565b600080600080608085870312156121c6578081fd5b6121cf856120fe565b93506121dd602086016120fe565b925060408501359150606085013567ffffffffffffffff8111156121ff578182fd5b8501601f8101871361220f578182fd5b61221e87823560208401612088565b91505092959194509250565b6000806040838503121561223c578182fd5b612245836120fe565b915061216d6020840161211a565b60008060408385031215612265578182fd5b61226e836120fe565b946020939093013593505050565b60006020828403121561228d578081fd5b611fe88261211a565b6000602082840312156122a7578081fd5b5035919050565b600080604083850312156122c0578182fd5b8235915061216d602084016120fe565b6000602082840312156122e1578081fd5b8135611fe88161267d565b6000602082840312156122fd578081fd5b8151611fe88161267d565b600060208284031215612319578081fd5b813567ffffffffffffffff81111561232f578182fd5b8201601f8101841361233f578182fd5b61164d84823560208401612088565b600081518084526123668160208601602086016125a5565b601f01601f19169290920160200192915050565b6000835161238c8184602088016125a5565b8351908301906123a08183602088016125a5565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123dc9083018461234e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561241e57835183529284019291840191600101612402565b50909695505050505050565b602081526000611fe8602083018461234e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601d908201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604082015260600190565b600082198211156125755761257561263b565b500190565b60008261258957612589612651565b500490565b6000828210156125a0576125a061263b565b500390565b60005b838110156125c05781810151838201526020016125a8565b838111156110b95750506000910152565b600181811c908216806125e557607f821691505b6020821081141561260657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126205761262061263b565b5060010190565b60008261263657612636612651565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146114ad57600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220e6beba49e6794933abfdc7f6f6fa71f7f34a08d8d744d84ac9249383016bd92b64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102045760003560e01c806375b238fc11610118578063b88d4fde116100a0578063d547741f1161006f578063d547741f146105f7578063e272b89214610617578063e985e9c514610637578063ef5793ce14610680578063f2fde38b146106a057600080fd5b8063b88d4fde14610580578063c81ba8f0146105a0578063c87b56dd146105b5578063d5391393146105d557600080fd5b806395d89b41116100e757806395d89b4114610507578063a217fddf1461051c578063a22cb46514610531578063b291850314610551578063b66a0e5d1461056b57600080fd5b806375b238fc146104765780638a67456a146104aa5780638da5cb5b146104c957806391d14854146104e757600080fd5b80632f2ff15d1161019b57806351ed82881161016a57806351ed8288146103d757806355f804b3146104015780636352211e1461042157806370a0823114610441578063715018a61461046157600080fd5b80632f2ff15d1461034a57806336568abe1461036a57806340398d671461038a57806342842e0e146103b757600080fd5b806318160ddd116101d757806318160ddd146102ba57806323b872dd146102d9578063248a9ca3146102f95780632d1a12f61461032a57600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b314610298575b600080fd5b34801561021557600080fd5b506102296102243660046122d0565b6106c0565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b506102536106d1565b604051610235919061242a565b34801561026c57600080fd5b5061028061027b366004612296565b610763565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004612253565b6107fd565b005b3480156102c657600080fd5b506005545b604051908152602001610235565b3480156102e557600080fd5b506102b86102f4366004612176565b610913565b34801561030557600080fd5b506102cb610314366004612296565b6000908152600160208190526040909120015490565b34801561033657600080fd5b506102b86103453660046122ae565b610944565b34801561035657600080fd5b506102b86103653660046122ae565b6109e2565b34801561037657600080fd5b506102b86103853660046122ae565b610a72565b34801561039657600080fd5b506103aa6103a536600461212a565b610aec565b60405161023591906123e6565b3480156103c357600080fd5b506102b86103d2366004612176565b610b58565b6103ea6103e5366004612296565b610b73565b604080519215158352602083019190915201610235565b34801561040d57600080fd5b5061022961041c366004612308565b610d56565b34801561042d57600080fd5b5061028061043c366004612296565b610da8565b34801561044d57600080fd5b506102cb61045c36600461212a565b610e1f565b34801561046d57600080fd5b506102b8610ea6565b34801561048257600080fd5b506102cb7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156104b657600080fd5b50600f5461022990610100900460ff1681565b3480156104d557600080fd5b506000546001600160a01b0316610280565b3480156104f357600080fd5b506102296105023660046122ae565b610f0c565b34801561051357600080fd5b50610253610f37565b34801561052857600080fd5b506102cb600081565b34801561053d57600080fd5b506102b861054c36600461222a565b610f46565b34801561055d57600080fd5b506006546102299060ff1681565b34801561057757600080fd5b506102b861100b565b34801561058c57600080fd5b506102b861059b3660046121b1565b611087565b3480156105ac57600080fd5b506103ea6110bf565b3480156105c157600080fd5b506102536105d0366004612296565b6111e6565b3480156105e157600080fd5b506102cb60008051602061269483398151915281565b34801561060357600080fd5b506102b86106123660046122ae565b61129d565b34801561062357600080fd5b506102b861063236600461227c565b61131e565b34801561064357600080fd5b50610229610652366004612144565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b34801561068c57600080fd5b506102cb61069b366004612253565b6113b4565b3480156106ac57600080fd5b506102b86106bb36600461212a565b6113e5565b60006106cb826114b0565b92915050565b6060600280546106e0906125d1565b80601f016020809104026020016040519081016040528092919081815260200182805461070c906125d1565b80156107595780601f1061072e57610100808354040283529160200191610759565b820191906000526020600020905b81548152906001019060200180831161073c57829003601f168201915b5050505050905090565b6000818152600760205260408120546001600160a01b03166107e15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600960205260409020546001600160a01b031690565b600061080882610da8565b9050806001600160a01b0316836001600160a01b031614156108765760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107d8565b336001600160a01b038216148061089257506108928133610652565b6109045760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107d8565b61090e83836114f0565b505050565b61091d338261155e565b6109395760405162461bcd60e51b81526004016107d8906124da565b61090e838383611655565b61095c60008051602061269483398151915233610f0c565b6109785760405162461bcd60e51b81526004016107d89061248f565b612710826005546109899190612562565b11156109a75760405162461bcd60e51b81526004016107d89061252b565b60005b8281101561090e57600060055460016109c39190612562565b90506109cf83826117ed565b50806109da8161260c565b9150506109aa565b60008281526001602081905260409091200154610a00905b33610f0c565b610a645760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084016107d8565b610a6e8282611997565b5050565b6001600160a01b0381163314610ae25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107d8565b610a6e8282611a02565b6001600160a01b0381166000908152600d6020908152604091829020805483518184028101840190945280845260609392830182828015610b4c57602002820191906000526020600020905b815481526020019060010190808311610b38575b50505050509050919050565b61090e83838360405180602001604052806000815250611087565b600f54600090819060ff1615610bcb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107d8565b600f805460ff191660011790819055610100900460ff1615610bec57600080fd5b60065460ff16610c395760405162461bcd60e51b81526020600482015260186024820152772a34329039b0b632903430b9b713ba1039ba30b93a32b21760411b60448201526064016107d8565b61271083600554610c4a9190612562565b1115610c685760405162461bcd60e51b81526004016107d89061252b565b60008311610cb85760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e20300000000060448201526064016107d8565b600b8310610d085760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e20313100000060448201526064016107d8565b6000805b84811015610d4057600554610d22906001612562565b9150610d2e33836117ed565b80610d388161260c565b915050610d0c565b50600f805460ff19169055600194909350915050565b6000610d7060008051602061269483398151915233610f0c565b610d8c5760405162461bcd60e51b81526004016107d89061248f565b8151610d9f906004906020850190611fef565b50600192915050565b6000818152600760205260408120546001600160a01b0316806106cb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107d8565b60006001600160a01b038216610e8a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107d8565b506001600160a01b031660009081526008602052604090205490565b6000546001600160a01b03163314610f005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d8565b610f0a6000611a69565b565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600380546106e0906125d1565b6001600160a01b038216331415610f9f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107d8565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61102360008051602061269483398151915233610f0c565b61103f5760405162461bcd60e51b81526004016107d89061248f565b60065460ff161561104f57600080fd5b6006805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b611091338361155e565b6110ad5760405162461bcd60e51b81526004016107d8906124da565b6110b984848484611ab9565b50505050565b600f54600090819060ff16156111175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107d8565b600f805460ff191660011790819055610100900460ff161561113857600080fd5b60065460ff166111855760405162461bcd60e51b81526020600482015260186024820152772a34329039b0b632903430b9b713ba1039ba30b93a32b21760411b60448201526064016107d8565b61271060055460016111979190612562565b11156111b55760405162461bcd60e51b81526004016107d89061252b565b600060055460016111c69190612562565b90506111d233826117ed565b600192509050600f805460ff191690559091565b6000818152600760205260409020546060906001600160a01b03166112655760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107d8565b61126d611aec565b61127683611afb565b60405160200161128792919061237a565b6040516020818303038152906040529050919050565b600082815260016020819052604090912001546112b9906109fa565b610ae25760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b60648201526084016107d8565b61133660008051602061269483398151915233610f0c565b61139a5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b60648201526084016107d8565b600f80549115156101000261ff0019909216919091179055565b600c60205281600052604060002081815481106113d057600080fd5b90600052602060002001600091509150505481565b6000546001600160a01b0316331461143f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d8565b6001600160a01b0381166114a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d8565b6114ad81611a69565b50565b60006001600160e01b031982166380ac58cd60e01b14806114e157506001600160e01b03198216635b5e139f60e01b145b806106cb57506106cb82611c15565b600081815260096020526040902080546001600160a01b0319166001600160a01b038416908117909155819061152582610da8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600760205260408120546001600160a01b03166115d75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107d8565b60006115e283610da8565b9050806001600160a01b0316846001600160a01b0316148061161d5750836001600160a01b031661161284610763565b6001600160a01b0316145b8061164d57506001600160a01b038082166000908152600a602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661166882610da8565b6001600160a01b0316146116d05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107d8565b6001600160a01b0382166117325760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107d8565b61173d6000826114f0565b6117478382611c4a565b6117518282611df3565b6001600160a01b038316600090815260086020526040812080546001929061177a90849061258e565b90915550506001600160a01b03821660009081526008602052604081208054600192906117a8908490612562565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166118435760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107d8565b6000818152600760205260409020546001600160a01b0316156118a85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107d8565b6001600160a01b03821660009081526008602052604081208054600192906118d1908490612562565b925050819055506001600560008282546118eb9190612562565b90915550506001600160a01b0382166000908152600c60209081526040822080546001810182559083529120018190556119258282611df3565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6119a18282610f0c565b610a6e5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b611a0c8282610f0c565b15610a6e5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611ac4848484611655565b611ad084848484611ec2565b6110b95760405162461bcd60e51b81526004016107d89061243d565b6060600480546106e0906125d1565b606081611b1f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b495780611b338161260c565b9150611b429050600a8361257a565b9150611b23565b60008167ffffffffffffffff811115611b7257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b9c576020820181803683370190505b5090505b841561164d57611bb160018361258e565b9150611bbe600a86612627565b611bc9906030612562565b60f81b818381518110611bec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c0e600a8661257a565b9450611ba0565b60006001600160e01b03198216637965db0b60e01b14806106cb57506301ffc9a760e01b6001600160e01b03198316146106cb565b6000818152600760205260409020546001600160a01b03838116911614611ca65760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b60448201526064016107d8565b600081815260076020908152604080832080546001600160a01b0319169055600e8252808320546001600160a01b0386168452600d909252822054909190611cef906001611fcf565b9050818114611da2576001600160a01b0384166000908152600d60205260408120805483908110611d3057634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600d6000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110611d8257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600e9052604090208290555b6001600160a01b0384166000908152600d60205260409020805480611dd757634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000818152600760205260409020546001600160a01b031615611e585760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e00000000000060448201526064016107d8565b600081815260076020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600d83529083208054600181810183558286529385200185905592529054611eaf91611fcf565b6000918252600e60205260409091205550565b60006001600160a01b0384163b15611fc457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f069033908990889088906004016123a9565b602060405180830381600087803b158015611f2057600080fd5b505af1925050508015611f50575060408051601f3d908101601f19168201909252611f4d918101906122ec565b60015b611faa573d808015611f7e576040519150601f19603f3d011682016040523d82523d6000602084013e611f83565b606091505b508051611fa25760405162461bcd60e51b81526004016107d89061243d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061164d565b506001949350505050565b600082821115611fde57600080fd5b611fe8828461258e565b9392505050565b828054611ffb906125d1565b90600052602060002090601f01602090048101928261201d5760008555612063565b82601f1061203657805160ff1916838001178555612063565b82800160010185558215612063579182015b82811115612063578251825591602001919060010190612048565b5061206f929150612073565b5090565b5b8082111561206f5760008155600101612074565b600067ffffffffffffffff808411156120a3576120a3612667565b604051601f8501601f19908116603f011681019082821181831017156120cb576120cb612667565b816040528093508581528686860111156120e457600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461211557600080fd5b919050565b8035801515811461211557600080fd5b60006020828403121561213b578081fd5b611fe8826120fe565b60008060408385031215612156578081fd5b61215f836120fe565b915061216d602084016120fe565b90509250929050565b60008060006060848603121561218a578081fd5b612193846120fe565b92506121a1602085016120fe565b9150604084013590509250925092565b600080600080608085870312156121c6578081fd5b6121cf856120fe565b93506121dd602086016120fe565b925060408501359150606085013567ffffffffffffffff8111156121ff578182fd5b8501601f8101871361220f578182fd5b61221e87823560208401612088565b91505092959194509250565b6000806040838503121561223c578182fd5b612245836120fe565b915061216d6020840161211a565b60008060408385031215612265578182fd5b61226e836120fe565b946020939093013593505050565b60006020828403121561228d578081fd5b611fe88261211a565b6000602082840312156122a7578081fd5b5035919050565b600080604083850312156122c0578182fd5b8235915061216d602084016120fe565b6000602082840312156122e1578081fd5b8135611fe88161267d565b6000602082840312156122fd578081fd5b8151611fe88161267d565b600060208284031215612319578081fd5b813567ffffffffffffffff81111561232f578182fd5b8201601f8101841361233f578182fd5b61164d84823560208401612088565b600081518084526123668160208601602086016125a5565b601f01601f19169290920160200192915050565b6000835161238c8184602088016125a5565b8351908301906123a08183602088016125a5565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123dc9083018461234e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561241e57835183529284019291840191600101612402565b50909695505050505050565b602081526000611fe8602083018461234e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601d908201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604082015260600190565b600082198211156125755761257561263b565b500190565b60008261258957612589612651565b500490565b6000828210156125a0576125a061263b565b500390565b60005b838110156125c05781810151838201526020016125a8565b838111156110b95750506000910152565b600181811c908216806125e557607f821691505b6020821081141561260657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126205761262061263b565b5060010190565b60008261263657612636612651565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146114ad57600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220e6beba49e6794933abfdc7f6f6fa71f7f34a08d8d744d84ac9249383016bd92b64736f6c63430008040033

Deployed Bytecode Sourcemap

18248:2424:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18785:161;;;;;;;;;;-1:-1:-1;18785:161:0;;;;;:::i;:::-;;:::i;:::-;;;7426:14:1;;7419:22;7401:41;;7389:2;7374:18;18785:161:0;;;;;;;;10148:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11245:221::-;;;;;;;;;;-1:-1:-1;11245:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6084:32:1;;;6066:51;;6054:2;6039:18;11245:221:0;6021:102:1;10840:397:0;;;;;;;;;;-1:-1:-1;10840:397:0;;;;;:::i;:::-;;:::i;:::-;;10370:89;;;;;;;;;;-1:-1:-1;10441:10:0;;10370:89;;;7862:25:1;;;7850:2;7835:18;10370:89:0;7817:76:1;11949:252:0;;;;;;;;;;-1:-1:-1;11949:252:0;;;;;:::i;:::-;;:::i;6563:123::-;;;;;;;;;;-1:-1:-1;6563:123:0;;;;;:::i;:::-;6629:7;6656:12;;;:6;:12;;;;;;;;:22;;;6563:123;15767:387;;;;;;;;;;-1:-1:-1;15767:387:0;;;;;:::i;:::-;;:::i;6694:232::-;;;;;;;;;;-1:-1:-1;6694:232:0;;;;;:::i;:::-;;:::i;7177:218::-;;;;;;;;;;-1:-1:-1;7177:218:0;;;;;:::i;:::-;;:::i;19389:124::-;;;;;;;;;;-1:-1:-1;19389:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12209:151::-;;;;;;;;;;-1:-1:-1;12209:151:0;;;;;:::i;:::-;;:::i;19758:548::-;;;;;;:::i;:::-;;:::i;:::-;;;;7646:14:1;;7639:22;7621:41;;7693:2;7678:18;;7671:34;;;;7594:18;19758:548:0;7576:135:1;19157:224:0;;;;;;;;;;-1:-1:-1;19157:224:0;;;;;:::i;:::-;;:::i;9901:239::-;;;;;;;;;;-1:-1:-1;9901:239:0;;;;;:::i;:::-;;:::i;9685:208::-;;;;;;;;;;-1:-1:-1;9685:208:0;;;;;:::i;:::-;;:::i;4967:94::-;;;;;;;;;;;;;:::i;8428:60::-;;;;;;;;;;;;8465:23;8428:60;;18351:26;;;;;;;;;;-1:-1:-1;18351:26:0;;;;;;;;;;;4316:87;;;;;;;;;;-1:-1:-1;4362:7:0;4389:6;-1:-1:-1;;;;;4389:6:0;4316:87;;6416:139;;;;;;;;;;-1:-1:-1;6416:139:0;;;;;:::i;:::-;;:::i;10256:104::-;;;;;;;;;;;;;:::i;5825:49::-;;;;;;;;;;-1:-1:-1;5825:49:0;5870:4;5825:49;;11474:295;;;;;;;;;;-1:-1:-1;11474:295:0;;;;;:::i;:::-;;:::i;8621:30::-;;;;;;;;;;-1:-1:-1;8621:30:0;;;;;;;;19526:229;;;;;;;;;;;;;:::i;12368:285::-;;;;;;;;;;-1:-1:-1;12368:285:0;;;;;:::i;:::-;;:::i;20314:353::-;;;;;;;;;;;;;:::i;10467:256::-;;;;;;;;;;-1:-1:-1;10467:256:0;;;;;:::i;:::-;;:::i;8359:62::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8359:62:0;;6934:235;;;;;;;;;;-1:-1:-1;6934:235:0;;;;;:::i;:::-;;:::i;18954:195::-;;;;;;;;;;-1:-1:-1;18954:195:0;;;;;:::i;:::-;;:::i;11777:164::-;;;;;;;;;;-1:-1:-1;11777:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;11898:25:0;;;11874:4;11898:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;11777:164;9002:52;;;;;;;;;;-1:-1:-1;9002:52:0;;;;;:::i;:::-;;:::i;5216:192::-;;;;;;;;;;-1:-1:-1;5216:192:0;;;;;:::i;:::-;;:::i;18785:161::-;18878:4;18902:36;18926:11;18902:23;:36::i;:::-;18895:43;18785:161;-1:-1:-1;;18785:161:0:o;10148:100::-;10202:13;10235:5;10228:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10148:100;:::o;11245:221::-;11321:7;13030:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13030:16:0;11341:73;;;;-1:-1:-1;;;11341:73:0;;15370:2:1;11341:73:0;;;15352:21:1;15409:2;15389:18;;;15382:30;15448:34;15428:18;;;15421:62;-1:-1:-1;;;15499:18:1;;;15492:42;15551:19;;11341:73:0;;;;;;;;;-1:-1:-1;11434:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11434:24:0;;11245:221::o;10840:397::-;10921:13;10937:23;10952:7;10937:14;:23::i;:::-;10921:39;;10985:5;-1:-1:-1;;;;;10979:11:0;:2;-1:-1:-1;;;;;10979:11:0;;;10971:57;;;;-1:-1:-1;;;10971:57:0;;17315:2:1;10971:57:0;;;17297:21:1;17354:2;17334:18;;;17327:30;17393:34;17373:18;;;17366:62;-1:-1:-1;;;17444:18:1;;;17437:31;17485:19;;10971:57:0;17287:223:1;10971:57:0;3676:10;-1:-1:-1;;;;;11049:21:0;;;;:62;;-1:-1:-1;11074:37:0;11091:5;3676:10;11777:164;:::i;11074:37::-;11041:154;;;;-1:-1:-1;;;11041:154:0;;13763:2:1;11041:154:0;;;13745:21:1;13802:2;13782:18;;;13775:30;13841:34;13821:18;;;13814:62;13912:26;13892:18;;;13885:54;13956:19;;11041:154:0;13735:246:1;11041:154:0;11208:21;11217:2;11221:7;11208:8;:21::i;:::-;10840:397;;;:::o;11949:252::-;12057:41;3676:10;12090:7;12057:18;:41::i;:::-;12049:103;;;;-1:-1:-1;;;12049:103:0;;;;;;;:::i;:::-;12165:28;12175:4;12181:2;12185:7;12165:9;:28::i;15767:387::-;15843:34;-1:-1:-1;;;;;;;;;;;3676:10:0;6416:139;:::i;15843:34::-;15835:90;;;;-1:-1:-1;;;15835:90:0;;;;;;;:::i;:::-;15963:5;15955;15944:10;;:16;;;;:::i;:::-;:24;;15936:66;;;;-1:-1:-1;;;15936:66:0;;;;;;;:::i;:::-;16018:6;16013:134;16034:5;16030:1;:9;16013:134;;;16061:16;16080:10;;16093:1;16080:14;;;;:::i;:::-;16061:33;;16109:26;16115:9;16126:8;16109:5;:26::i;:::-;-1:-1:-1;16041:3:0;;;;:::i;:::-;;;;16013:134;;6694:232;6629:7;6656:12;;;:6;:12;;;;;;;;:22;;6787:41;;6795:18;3676:10;6416:139;:::i;6787:41::-;6779:101;;;;-1:-1:-1;;;6779:101:0;;8324:2:1;6779:101:0;;;8306:21:1;8363:2;8343:18;;;8336:30;8402:34;8382:18;;;8375:62;-1:-1:-1;;;8453:18:1;;;8446:45;8508:19;;6779:101:0;8296:237:1;6779:101:0;6893:25;6904:4;6910:7;6893:10;:25::i;:::-;6694:232;;:::o;7177:218::-;-1:-1:-1;;;;;7273:23:0;;3676:10;7273:23;7265:83;;;;-1:-1:-1;;;7265:83:0;;18853:2:1;7265:83:0;;;18835:21:1;18892:2;18872:18;;;18865:30;18931:34;18911:18;;;18904:62;-1:-1:-1;;;18982:18:1;;;18975:45;19037:19;;7265:83:0;18825:237:1;7265:83:0;7361:26;7373:4;7379:7;7361:11;:26::i;19389:124::-;-1:-1:-1;;;;;19487:18:0;;;;;;:10;:18;;;;;;;;;19480:25;;;;;;;;;;;;;;;;;19452:16;;19480:25;;;19487:18;19480:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19389:124;;;:::o;12209:151::-;12313:39;12330:4;12336:2;12340:7;12313:39;;;;;;;;;;;;:16;:39::i;19758:548::-;18674:4;;19826;;;;18674;;18673:5;18665:49;;;;-1:-1:-1;;;18665:49:0;;18493:2:1;18665:49:0;;;18475:21:1;18532:2;18512:18;;;18505:30;18571:33;18551:18;;;18544:61;18622:18;;18665:49:0;18465:181:1;18665:49:0;18725:4;:11;;-1:-1:-1;;18725:11:0;18732:4;18725:11;;;;;;19857:14;::::1;18725:11:::0;19857:14:::1;19856:15;19848:24;;;::::0;::::1;;19891:10;::::0;::::1;;19883:47;;;::::0;-1:-1:-1;;;19883:47:0;;10280:2:1;19883:47:0::1;::::0;::::1;10262:21:1::0;10319:2;10299:18;;;10292:30;-1:-1:-1;;;10338:18:1;;;10331:54;10402:18;;19883:47:0::1;10252:174:1::0;19883:47:0::1;19971:5;19960:8;19949:10;;:19;;;;:::i;:::-;:27;;19941:69;;;;-1:-1:-1::0;;;19941:69:0::1;;;;;;;:::i;:::-;20032:1;20023:8;:10;20015:51;;;::::0;-1:-1:-1;;;20015:51:0;;9566:2:1;20015:51:0::1;::::0;::::1;9548:21:1::0;9605:2;9585:18;;;9578:30;9644;9624:18;;;9617:58;9692:18;;20015:51:0::1;9538:178:1::0;20015:51:0::1;20088:2;20079:8;:11;20071:53;;;::::0;-1:-1:-1;;;20071:53:0;;12159:2:1;20071:53:0::1;::::0;::::1;12141:21:1::0;12198:2;12178:18;;;12171:30;12237:31;12217:18;;;12210:59;12286:18;;20071:53:0::1;12131:179:1::0;20071:53:0::1;20130:13;::::0;20148:115:::1;20169:8;20165:1;:12;20148:115;;;20201:10;::::0;:14:::1;::::0;20214:1:::1;20201:14;:::i;:::-;20190:25:::0;-1:-1:-1;20221:29:0::1;3676:10:::0;20241:8:::1;20221:5;:29::i;:::-;20179:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20148:115;;;-1:-1:-1::0;18759:4:0;:12;;-1:-1:-1;;18759:12:0;;;20284:4:::1;::::0;20289:8;;-1:-1:-1;19758:548:0;-1:-1:-1;;19758:548:0:o;19157:224::-;19215:4;19240:34;-1:-1:-1;;;;;;;;;;;3676:10:0;6416:139;:::i;19240:34::-;19232:90;;;;-1:-1:-1;;;19232:90:0;;;;;;;:::i;:::-;19333:16;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;19367:4:0;;19157:224;-1:-1:-1;;19157:224:0:o;9901:239::-;9973:7;10009:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10009:16:0;10044:19;10036:73;;;;-1:-1:-1;;;10036:73:0;;14599:2:1;10036:73:0;;;14581:21:1;14638:2;14618:18;;;14611:30;14677:34;14657:18;;;14650:62;-1:-1:-1;;;14728:18:1;;;14721:39;14777:19;;10036:73:0;14571:231:1;9685:208:0;9757:7;-1:-1:-1;;;;;9785:19:0;;9777:74;;;;-1:-1:-1;;;9777:74:0;;14188:2:1;9777:74:0;;;14170:21:1;14227:2;14207:18;;;14200:30;14266:34;14246:18;;;14239:62;-1:-1:-1;;;14317:18:1;;;14310:40;14367:19;;9777:74:0;14160:232:1;9777:74:0;-1:-1:-1;;;;;;9869:16:0;;;;;:9;:16;;;;;;;9685:208::o;4967:94::-;4362:7;4389:6;-1:-1:-1;;;;;4389:6:0;3676:10;4536:23;4528:68;;;;-1:-1:-1;;;4528:68:0;;15783:2:1;4528:68:0;;;15765:21:1;;;15802:18;;;15795:30;15861:34;15841:18;;;15834:62;15913:18;;4528:68:0;15755:182:1;4528:68:0;5032:21:::1;5050:1;5032:9;:21::i;:::-;4967:94::o:0;6416:139::-;6494:4;6518:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6518:29:0;;;;;;;;;;;;;;;6416:139::o;10256:104::-;10312:13;10345:7;10338:14;;;;;:::i;11474:295::-;-1:-1:-1;;;;;11577:24:0;;3676:10;11577:24;;11569:62;;;;-1:-1:-1;;;11569:62:0;;11450:2:1;11569:62:0;;;11432:21:1;11489:2;11469:18;;;11462:30;11528:27;11508:18;;;11501:55;11573:18;;11569:62:0;11422:175:1;11569:62:0;3676:10;11644:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;11644:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;11644:53:0;;;;;;;;;;11713:48;;7401:41:1;;;11644:42:0;;3676:10;11713:48;;7374:18:1;11713:48:0;;;;;;;11474:295;;:::o;19526:229::-;19575:34;-1:-1:-1;;;;;;;;;;;3676:10:0;6416:139;:::i;19575:34::-;19567:90;;;;-1:-1:-1;;;19567:90:0;;;;;;;:::i;:::-;19677:10;;;;19676:11;19668:20;;;;;;19699:10;:17;;-1:-1:-1;;19699:17:0;19712:4;19699:17;;;19732:15;;;;19699:10;;19732:15;19526:229::o;12368:285::-;12500:41;3676:10;12533:7;12500:18;:41::i;:::-;12492:103;;;;-1:-1:-1;;;12492:103:0;;;;;;;:::i;:::-;12606:39;12620:4;12626:2;12630:7;12639:5;12606:13;:39::i;:::-;12368:285;;;;:::o;20314:353::-;18674:4;;20360;;;;18674;;18673:5;18665:49;;;;-1:-1:-1;;;18665:49:0;;18493:2:1;18665:49:0;;;18475:21:1;18532:2;18512:18;;;18505:30;18571:33;18551:18;;;18544:61;18622:18;;18665:49:0;18465:181:1;18665:49:0;18725:4;:11;;-1:-1:-1;;18725:11:0;18732:4;18725:11;;;;;;20391:14;::::1;18725:11:::0;20391:14:::1;20390:15;20382:24;;;::::0;::::1;;20425:10;::::0;::::1;;20417:47;;;::::0;-1:-1:-1;;;20417:47:0;;10280:2:1;20417:47:0::1;::::0;::::1;10262:21:1::0;10319:2;10299:18;;;10292:30;-1:-1:-1;;;10338:18:1;;;10331:54;10402:18;;20417:47:0::1;10252:174:1::0;20417:47:0::1;20498:5;20483:10;;20494:1;20483:12;;;;:::i;:::-;:20;;20475:62;;;;-1:-1:-1::0;;;20475:62:0::1;;;;;;;:::i;:::-;20548:13;20564:10;;20577:1;20564:14;;;;:::i;:::-;20548:30:::0;-1:-1:-1;20589:29:0::1;3676:10:::0;20609:8:::1;20589:5;:29::i;:::-;20645:4;::::0;-1:-1:-1;20650:8:0;-1:-1:-1;18759:4:0;:12;;-1:-1:-1;;18759:12:0;;;20314:353;;:::o;10467:256::-;13006:4;13030:16;;;:7;:16;;;;;;10540:13;;-1:-1:-1;;;;;13030:16:0;10566:76;;;;-1:-1:-1;;;10566:76:0;;16554:2:1;10566:76:0;;;16536:21:1;16593:2;16573:18;;;16566:30;16632:34;16612:18;;;16605:62;-1:-1:-1;;;16683:18:1;;;16676:45;16738:19;;10566:76:0;16526:237:1;10566:76:0;10684:10;:8;:10::i;:::-;10696:17;10705:7;10696:8;:17::i;:::-;10667:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10653:62;;10467:256;;;:::o;6934:235::-;6629:7;6656:12;;;:6;:12;;;;;;;;:22;;7028:41;;7036:18;6563:123;7028:41;7020:102;;;;-1:-1:-1;;;7020:102:0;;13346:2:1;7020:102:0;;;13328:21:1;13385:2;13365:18;;;13358:30;13424:34;13404:18;;;13397:62;-1:-1:-1;;;13475:18:1;;;13468:46;13531:19;;7020:102:0;13318:238:1;18954:195:0;19020:34;-1:-1:-1;;;;;;;;;;;3676:10:0;6416:139;:::i;19020:34::-;19012:94;;;;-1:-1:-1;;;19012:94:0;;12930:2:1;19012:94:0;;;12912:21:1;12969:2;12949:18;;;12942:30;13008:34;12988:18;;;12981:62;-1:-1:-1;;;13059:18:1;;;13052:45;13114:19;;19012:94:0;12902:237:1;19012:94:0;19117:14;:24;;;;;;;-1:-1:-1;;19117:24:0;;;;;;;;;18954:195::o;9002:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5216:192::-;4362:7;4389:6;-1:-1:-1;;;;;4389:6:0;3676:10;4536:23;4528:68;;;;-1:-1:-1;;;4528:68:0;;15783:2:1;4528:68:0;;;15765:21:1;;;15802:18;;;15795:30;15861:34;15841:18;;;15834:62;15913:18;;4528:68:0;15755:182:1;4528:68:0;-1:-1:-1;;;;;5305:22:0;::::1;5297:73;;;::::0;-1:-1:-1;;;5297:73:0;;9159:2:1;5297:73:0::1;::::0;::::1;9141:21:1::0;9198:2;9178:18;;;9171:30;9237:34;9217:18;;;9210:62;-1:-1:-1;;;9288:18:1;;;9281:36;9334:19;;5297:73:0::1;9131:228:1::0;5297:73:0::1;5381:19;5391:8;5381:9;:19::i;:::-;5216:192:::0;:::o;9370:307::-;9487:4;-1:-1:-1;;;;;;9511:40:0;;-1:-1:-1;;;9511:40:0;;:105;;-1:-1:-1;;;;;;;9568:48:0;;-1:-1:-1;;;9568:48:0;9511:105;:158;;;;9633:36;9657:11;9633:23;:36::i;17115:174::-;17190:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;17190:29:0;-1:-1:-1;;;;;17190:29:0;;;;;;;;:24;;17244:23;17190:24;17244:14;:23::i;:::-;-1:-1:-1;;;;;17235:46:0;;;;;;;;;;;17115:174;;:::o;13076:348::-;13169:4;13030:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13030:16:0;13186:73;;;;-1:-1:-1;;;13186:73:0;;12517:2:1;13186:73:0;;;12499:21:1;12556:2;12536:18;;;12529:30;12595:34;12575:18;;;12568:62;-1:-1:-1;;;12646:18:1;;;12639:42;12698:19;;13186:73:0;12489:234:1;13186:73:0;13270:13;13286:23;13301:7;13286:14;:23::i;:::-;13270:39;;13339:5;-1:-1:-1;;;;;13328:16:0;:7;-1:-1:-1;;;;;13328:16:0;;:51;;;;13372:7;-1:-1:-1;;;;;13348:31:0;:20;13360:7;13348:11;:20::i;:::-;-1:-1:-1;;;;;13348:31:0;;13328:51;:87;;;-1:-1:-1;;;;;;11898:25:0;;;11874:4;11898:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;13383:32;13320:96;13076:348;-1:-1:-1;;;;13076:348:0:o;16554:553::-;16679:4;-1:-1:-1;;;;;16652:31:0;:23;16667:7;16652:14;:23::i;:::-;-1:-1:-1;;;;;16652:31:0;;16644:85;;;;-1:-1:-1;;;16644:85:0;;16144:2:1;16644:85:0;;;16126:21:1;16183:2;16163:18;;;16156:30;16222:34;16202:18;;;16195:62;-1:-1:-1;;;16273:18:1;;;16266:39;16322:19;;16644:85:0;16116:231:1;16644:85:0;-1:-1:-1;;;;;16748:16:0;;16740:65;;;;-1:-1:-1;;;16740:65:0;;11045:2:1;16740:65:0;;;11027:21:1;11084:2;11064:18;;;11057:30;11123:34;11103:18;;;11096:62;-1:-1:-1;;;11174:18:1;;;11167:34;11218:19;;16740:65:0;11017:226:1;16740:65:0;16870:29;16887:1;16891:7;16870:8;:29::i;:::-;16920;16935:4;16941:7;16920:14;:29::i;:::-;16960:24;16972:2;16976:7;16960:11;:24::i;:::-;-1:-1:-1;;;;;16997:15:0;;;;;;:9;:15;;;;;:20;;17016:1;;16997:15;:20;;17016:1;;16997:20;:::i;:::-;;;;-1:-1:-1;;;;;;;17028:13:0;;;;;;:9;:13;;;;;:18;;17045:1;;17028:13;:18;;17045:1;;17028:18;:::i;:::-;;;;-1:-1:-1;;17072:27:0;;17091:7;;-1:-1:-1;;;;;17072:27:0;;;;;;;;;;;;;16554:553;;;:::o;15274:485::-;-1:-1:-1;;;;;15354:16:0;;15346:61;;;;-1:-1:-1;;;15346:61:0;;15009:2:1;15346:61:0;;;14991:21:1;;;15028:18;;;15021:30;15087:34;15067:18;;;15060:62;15139:18;;15346:61:0;14981:182:1;15346:61:0;13006:4;13030:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13030:16:0;:30;15418:58;;;;-1:-1:-1;;;15418:58:0;;9923:2:1;15418:58:0;;;9905:21:1;9962:2;9942:18;;;9935:30;10001;9981:18;;;9974:58;10049:18;;15418:58:0;9895:178:1;15418:58:0;-1:-1:-1;;;;;15547:13:0;;;;;;:9;:13;;;;;:18;;15564:1;;15547:13;:18;;15564:1;;15547:18;:::i;:::-;;;;;;;;15590:1;15576:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15602:18:0;;;;;;:14;:18;;;;;;;:32;;;;;;;;;;;;;;;;15645:24;15617:2;15626:7;15645:11;:24::i;:::-;15685:17;;-1:-1:-1;;;;;15685:17:0;;;15690:7;;15685:17;;;;;15718:33;;15743:7;;-1:-1:-1;;;;;15718:33:0;;;15735:1;;15718:33;;15735:1;;15718:33;15274:485;;:::o;7726:229::-;7801:22;7809:4;7815:7;7801;:22::i;:::-;7796:152;;7840:12;;;;7872:4;7840:12;;;;;;;;-1:-1:-1;;;;;7840:29:0;;;;;;;;;;:36;;-1:-1:-1;;7840:36:0;;;;;;;7896:40;;3676:10;;7840:12;;7896:40;;7840:12;7896:40;7726:229;;:::o;7963:230::-;8038:22;8046:4;8052:7;8038;:22::i;:::-;8034:152;;;8109:5;8077:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;8077:29:0;;;;;;;;;;:37;;-1:-1:-1;;8077:37:0;;;8134:40;3676:10;;8077:12;;8134:40;;8109:5;8134:40;7963:230;;:::o;5416:173::-;5472:16;5491:6;;-1:-1:-1;;;;;5508:17:0;;;-1:-1:-1;;;;;;5508:17:0;;;;;;5541:40;;5491:6;;;;;;;5541:40;;5472:16;5541:40;5416:173;;:::o;12661:272::-;12775:28;12785:4;12791:2;12795:7;12775:9;:28::i;:::-;12822:48;12845:4;12851:2;12855:7;12864:5;12822:22;:48::i;:::-;12814:111;;;;-1:-1:-1;;;12814:111:0;;;;;;;:::i;10731:99::-;10782:13;10815:7;10808:14;;;;;:::i;13808:545::-;13864:13;13907:10;13903:53;;-1:-1:-1;;13934:10:0;;;;;;;;;;;;-1:-1:-1;;;13934:10:0;;;;;13808:545::o;13903:53::-;13981:5;13966:12;14022:78;14029:9;;14022:78;;14055:8;;;;:::i;:::-;;-1:-1:-1;14078:10:0;;-1:-1:-1;14086:2:0;14078:10;;:::i;:::-;;;14022:78;;;14110:19;14142:6;14132:17;;;;;;-1:-1:-1;;;14132:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14132:17:0;;14110:39;;14160:154;14167:10;;14160:154;;14194:11;14204:1;14194:11;;:::i;:::-;;-1:-1:-1;14263:10:0;14271:2;14263:5;:10;:::i;:::-;14250:24;;:2;:24;:::i;:::-;14237:39;;14220:6;14227;14220:14;;;;;;-1:-1:-1;;;14220:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;14220:56:0;;;;;;;;-1:-1:-1;14291:11:0;14300:2;14291:11;;:::i;:::-;;;14160:154;;6191:217;6276:4;-1:-1:-1;;;;;;6300:47:0;;-1:-1:-1;;;6300:47:0;;:100;;-1:-1:-1;;;;;;;;;;3858:40:0;;;6364:36;3749:157;14665:601;14750:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;14750:26:0;;;:17;;:26;14742:55;;;;-1:-1:-1;;;14742:55:0;;16970:2:1;14742:55:0;;;16952:21:1;17009:2;16989:18;;;16982:30;-1:-1:-1;;;17028:18:1;;;17021:46;17084:18;;14742:55:0;16942:166:1;14742:55:0;14815:17;;;;:7;:17;;;;;;;;14808:24;;-1:-1:-1;;;;;;14808:24:0;;;14872:14;:24;;;;;;-1:-1:-1;;;;;14932:17:0;;;;:10;:17;;;;;:24;14872;;14815:17;14932:31;;14808:24;14932:28;:31::i;:::-;14907:56;;14998:18;14980:14;:36;14976:247;;-1:-1:-1;;;;;15053:17:0;;15033;15053;;;:10;:17;;;;;:33;;15071:14;;15053:33;;;;-1:-1:-1;;;15053:33:0;;;;;;;;;;;;;;;;;15033:53;;15141:9;15101:10;:17;15112:5;-1:-1:-1;;;;;15101:17:0;-1:-1:-1;;;;;15101:17:0;;;;;;;;;;;;15119:18;15101:37;;;;;;-1:-1:-1;;;15101:37:0;;;;;;;;;;;;;;;;;;;;:49;;;;15165:25;;;:14;:25;;;;;:46;;;14976:247;-1:-1:-1;;;;;15235:17:0;;;;;;:10;:17;;;;;:23;;;;;-1:-1:-1;;;15235:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;14665:601;;;;:::o;14363:294::-;14472:1;14443:17;;;:7;:17;;;;;;-1:-1:-1;;;;;14443:17:0;:31;14435:70;;;;-1:-1:-1;;;14435:70:0;;11804:2:1;14435:70:0;;;11786:21:1;11843:2;11823:18;;;11816:30;11882:28;11862:18;;;11855:56;11928:18;;14435:70:0;11776:176:1;14435:70:0;14516:17;;;;:7;:17;;;;;;;;:23;;-1:-1:-1;;;;;;14516:23:0;-1:-1:-1;;;;;14516:23:0;;;;;;;;14552:15;;;:10;:15;;;;;:30;;-1:-1:-1;14552:30:0;;;;;;;;;;;;;;;14620:15;;:22;;:29;;:26;:29::i;:::-;14593:24;;;;:14;:24;;;;;;:56;-1:-1:-1;14363:294:0:o;17297:843::-;17418:4;-1:-1:-1;;;;;17444:13:0;;217:20;256:8;17440:693;;17480:72;;-1:-1:-1;;;17480:72:0;;-1:-1:-1;;;;;17480:36:0;;;;;:72;;3676:10;;17531:4;;17537:7;;17546:5;;17480:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17480:72:0;;;;;;;;-1:-1:-1;;17480:72:0;;;;;;;;;;;;:::i;:::-;;;17476:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17726:13:0;;17722:341;;17769:60;;-1:-1:-1;;;17769:60:0;;;;;;;:::i;17722:341::-;18013:6;18007:13;17998:6;17994:2;17990:15;17983:38;17476:602;-1:-1:-1;;;;;;17603:55:0;-1:-1:-1;;;17603:55:0;;-1:-1:-1;17596:62:0;;17440:693;-1:-1:-1;18117:4:0;17297:843;;;;;;:::o;1096:124::-;1154:7;1187:1;1182;:6;;1174:15;;;;;;1207:5;1211:1;1207;:5;:::i;:::-;1200:12;1096:124;-1:-1:-1;;;1096:124:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:196;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:2;;;1126:6;1118;1111:22;1073:2;1154:29;1173:9;1154:29;:::i;1194:270::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:29;1391:9;1372:29;:::i;:::-;1362:39;;1420:38;1454:2;1443:9;1439:18;1420:38;:::i;:::-;1410:48;;1281:183;;;;;:::o;1469:338::-;1546:6;1554;1562;1615:2;1603:9;1594:7;1590:23;1586:32;1583:2;;;1636:6;1628;1621:22;1583:2;1664:29;1683:9;1664:29;:::i;:::-;1654:39;;1712:38;1746:2;1735:9;1731:18;1712:38;:::i;:::-;1702:48;;1797:2;1786:9;1782:18;1769:32;1759:42;;1573:234;;;;;:::o;1812:696::-;1907:6;1915;1923;1931;1984:3;1972:9;1963:7;1959:23;1955:33;1952:2;;;2006:6;1998;1991:22;1952:2;2034:29;2053:9;2034:29;:::i;:::-;2024:39;;2082:38;2116:2;2105:9;2101:18;2082:38;:::i;:::-;2072:48;;2167:2;2156:9;2152:18;2139:32;2129:42;;2222:2;2211:9;2207:18;2194:32;2249:18;2241:6;2238:30;2235:2;;;2286:6;2278;2271:22;2235:2;2314:22;;2367:4;2359:13;;2355:27;-1:-1:-1;2345:2:1;;2401:6;2393;2386:22;2345:2;2429:73;2494:7;2489:2;2476:16;2471:2;2467;2463:11;2429:73;:::i;:::-;2419:83;;;1942:566;;;;;;;:::o;2513:264::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2688:29;2707:9;2688:29;:::i;:::-;2678:39;;2736:35;2767:2;2756:9;2752:18;2736:35;:::i;2782:264::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:29;2979:9;2960:29;:::i;:::-;2950:39;3036:2;3021:18;;;;3008:32;;-1:-1:-1;;;2869:177:1:o;3051:190::-;3107:6;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3209:26;3225:9;3209:26;:::i;3246:190::-;3305:6;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3379:6;3371;3364:22;3326:2;-1:-1:-1;3407:23:1;;3316:120;-1:-1:-1;3316:120:1:o;3441:264::-;3509:6;3517;3570:2;3558:9;3549:7;3545:23;3541:32;3538:2;;;3591:6;3583;3576:22;3538:2;3632:9;3619:23;3609:33;;3661:38;3695:2;3684:9;3680:18;3661:38;:::i;3710:255::-;3768:6;3821:2;3809:9;3800:7;3796:23;3792:32;3789:2;;;3842:6;3834;3827:22;3789:2;3886:9;3873:23;3905:30;3929:5;3905:30;:::i;3970:259::-;4039:6;4092:2;4080:9;4071:7;4067:23;4063:32;4060:2;;;4113:6;4105;4098:22;4060:2;4150:9;4144:16;4169:30;4193:5;4169:30;:::i;4234:480::-;4303:6;4356:2;4344:9;4335:7;4331:23;4327:32;4324:2;;;4377:6;4369;4362:22;4324:2;4422:9;4409:23;4455:18;4447:6;4444:30;4441:2;;;4492:6;4484;4477:22;4441:2;4520:22;;4573:4;4565:13;;4561:27;-1:-1:-1;4551:2:1;;4607:6;4599;4592:22;4551:2;4635:73;4700:7;4695:2;4682:16;4677:2;4673;4669:11;4635:73;:::i;5183:257::-;5224:3;5262:5;5256:12;5289:6;5284:3;5277:19;5305:63;5361:6;5354:4;5349:3;5345:14;5338:4;5331:5;5327:16;5305:63;:::i;:::-;5422:2;5401:15;-1:-1:-1;;5397:29:1;5388:39;;;;5429:4;5384:50;;5232:208;-1:-1:-1;;5232:208:1:o;5445:470::-;5624:3;5662:6;5656:13;5678:53;5724:6;5719:3;5712:4;5704:6;5700:17;5678:53;:::i;:::-;5794:13;;5753:16;;;;5816:57;5794:13;5753:16;5850:4;5838:17;;5816:57;:::i;:::-;5889:20;;5632:283;-1:-1:-1;;;;5632:283:1:o;6128:488::-;-1:-1:-1;;;;;6397:15:1;;;6379:34;;6449:15;;6444:2;6429:18;;6422:43;6496:2;6481:18;;6474:34;;;6544:3;6539:2;6524:18;;6517:31;;;6322:4;;6565:45;;6590:19;;6582:6;6565:45;:::i;:::-;6557:53;6331:285;-1:-1:-1;;;;;;6331:285:1:o;6621:635::-;6792:2;6844:21;;;6914:13;;6817:18;;;6936:22;;;6763:4;;6792:2;7015:15;;;;6989:2;6974:18;;;6763:4;7061:169;7075:6;7072:1;7069:13;7061:169;;;7136:13;;7124:26;;7205:15;;;;7170:12;;;;7097:1;7090:9;7061:169;;;-1:-1:-1;7247:3:1;;6772:484;-1:-1:-1;;;;;;6772:484:1:o;7898:219::-;8047:2;8036:9;8029:21;8010:4;8067:44;8107:2;8096:9;8092:18;8084:6;8067:44;:::i;8538:414::-;8740:2;8722:21;;;8779:2;8759:18;;;8752:30;8818:34;8813:2;8798:18;;8791:62;-1:-1:-1;;;8884:2:1;8869:18;;8862:48;8942:3;8927:19;;8712:240::o;10431:407::-;10633:2;10615:21;;;10672:2;10652:18;;;10645:30;10711:34;10706:2;10691:18;;10684:62;-1:-1:-1;;;10777:2:1;10762:18;;10755:41;10828:3;10813:19;;10605:233::o;17515:413::-;17717:2;17699:21;;;17756:2;17736:18;;;17729:30;17795:34;17790:2;17775:18;;17768:62;-1:-1:-1;;;17861:2:1;17846:18;;17839:47;17918:3;17903:19;;17689:239::o;17933:353::-;18135:2;18117:21;;;18174:2;18154:18;;;18147:30;18213:31;18208:2;18193:18;;18186:59;18277:2;18262:18;;18107:179::o;19249:128::-;19289:3;19320:1;19316:6;19313:1;19310:13;19307:2;;;19326:18;;:::i;:::-;-1:-1:-1;19362:9:1;;19297:80::o;19382:120::-;19422:1;19448;19438:2;;19453:18;;:::i;:::-;-1:-1:-1;19487:9:1;;19428:74::o;19507:125::-;19547:4;19575:1;19572;19569:8;19566:2;;;19580:18;;:::i;:::-;-1:-1:-1;19617:9:1;;19556:76::o;19637:258::-;19709:1;19719:113;19733:6;19730:1;19727:13;19719:113;;;19809:11;;;19803:18;19790:11;;;19783:39;19755:2;19748:10;19719:113;;;19850:6;19847:1;19844:13;19841:2;;;-1:-1:-1;;19885:1:1;19867:16;;19860:27;19690:205::o;19900:380::-;19979:1;19975:12;;;;20022;;;20043:2;;20097:4;20089:6;20085:17;20075:27;;20043:2;20150;20142:6;20139:14;20119:18;20116:38;20113:2;;;20196:10;20191:3;20187:20;20184:1;20177:31;20231:4;20228:1;20221:15;20259:4;20256:1;20249:15;20113:2;;19955:325;;;:::o;20285:135::-;20324:3;-1:-1:-1;;20345:17:1;;20342:2;;;20365:18;;:::i;:::-;-1:-1:-1;20412:1:1;20401:13;;20332:88::o;20425:112::-;20457:1;20483;20473:2;;20488:18;;:::i;:::-;-1:-1:-1;20522:9:1;;20463:74::o;20542:127::-;20603:10;20598:3;20594:20;20591:1;20584:31;20634:4;20631:1;20624:15;20658:4;20655:1;20648:15;20674:127;20735:10;20730:3;20726:20;20723:1;20716:31;20766:4;20763:1;20756:15;20790:4;20787:1;20780:15;20806:127;20867:10;20862:3;20858:20;20855:1;20848:31;20898:4;20895:1;20888:15;20922:4;20919:1;20912:15;20938:131;-1:-1:-1;;;;;;21012:32:1;;21002:43;;20992:2;;21059:1;21056;21049:12

Swarm Source

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