Contract 0xd2894Bb48Ad2B274dfA23d375a409CCd009905DE 1

 
 
Txn Hash
Method
Block
From
To
Value
0x22bf44c62340fb6b41b3c8fba5f0d038c7689eec0da4f63d9347110dbdd4319eSet Approval For...153101882022-08-09 20:44:311 day 18 hrs agoENS Name 0xhcx.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00063392 26.‍10350457
0x8da90334f9d113ce7dbb1af82b1ae6bff0870f707694439b8ec3f548de6a89d8Set Approval For...149528132022-06-12 23:19:5559 days 16 hrs ago0xefd387fc2c15ba81ad6d7038ae914eecc0f01582 IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00081663 17.‍67733456
0x5b0332ff499edd5be4da32cadef6f9902fbe87ca6ff8c5e51fd0aff143373fcdSet Approval For...149283102022-06-08 18:56:4263 days 20 hrs ago0xaed2eed48adb0498fcb7547a75e9b9e6f3f48cef IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00408313 88.‍3853407
0xbb272753e6ccb7c7c293bd3123eccfd84563b12b5a9efed818fe4fce44a4708dSet Approval For...147494072022-05-10 15:38:1292 days 23 hrs agoENS Name unencrypted.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍0034589 74.‍8729187
0xd05522da5cc0619e77ff154a7f1086cb1bdec1334f66c7c90041274e1e4edfb5Set Approval For...147493332022-05-10 15:20:5593 days 16 mins ago0xb273b47a788aa305c5c65fa6b56159a4d306d788 IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00251343 54.‍40695678
0xd954d45d14451e810608259b0682fe7f3dd6feb4f7d40bda663015ff2dc22ae0Set Approval For...147474082022-05-10 7:56:3893 days 7 hrs agoENS Name maliaroff.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00300068 64.‍95401466
0x2fecbc2123003d8dd46e19b99e773580ff870a1610215a65cb05ae58fd3ca47bSet Approval For...144897782022-03-30 20:49:40133 days 18 hrs ago0x85047527b7184033d5b7717db659344717e404b6 IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00209292 45.‍30430128
0x2db4cc827098eb871039a88f3b687a362030d93d4c2b7a1422db3d873fa9d47cSet Approval For...144079622022-03-18 3:27:09146 days 12 hrs agoENS Name castorinho.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00317213 130.‍62098953
0xd106e0d8423ccf305d3e779530254e2fefe8a6955a1cd3691d4b62567ce674b1Set Approval For...142891472022-02-27 15:53:24164 days 23 hrs agoENS Name cryptoph03n1x.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00122675 26.‍55489756
0x5dd60d7249fd522724d0875d1cc392904eee6f098096c1d7331a80b7dc5c03d1Birth142795922022-02-26 4:36:15166 days 11 hrs ago0xd6a611b0a167299165384ccc41b0b6426fcc7fe9 IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00347389 20.‍27449771
0x31a607cdf9c8bb83a0d24576cfecf886135b3aba0d5af90b09f76056150a7e84Set Approval For...142505242022-02-21 16:32:33170 days 23 hrs agoENS Name taxil.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00180518 74.‍33332425
0xc342ff517a3ed383705aa42f0422f64bead50b4c7b5738558992a39301063530Set Approval For...142457722022-02-20 22:52:10171 days 16 hrs ago0xccdbe8126e7dee6e929b1b2b89df0b1594997f71 IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00073945 30.‍44885233
0x10f44b072ca69b0cfa820e2a3693d4edf3d10589762fd5bfc31c82b8a8d0b741Set Approval For...142436952022-02-20 15:27:57172 days 9 mins agoENS Name nevercatchme.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00245706 101.‍17637725
0xcf9603f04a4510d055b886ab0ef2d4fb14119102751ccf1f3f8cd4c12b1144fdSet Approval For...142375952022-02-19 16:45:02172 days 22 hrs agoENS Name mostlystable.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00331477 71.‍75307063
0x2a00223313849d844237ee6913b9af46a3a6bba23d89042e731f12392eb76112Set Approval For...142362392022-02-19 11:27:28173 days 4 hrs agoENS Name maliaroff.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00207448 44.‍90508286
0x609fd73e03da5d025f0697fa0aebb1e26d46282a1840114310c60f4d2e12ff4dSet Approval For...142334382022-02-19 1:02:06173 days 14 hrs agoENS Name taxil.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍0028186 61.‍01270001
0xeb9daf3707fc0035ce15370284b2dfa594a9b9a6aa2e4ec4fa7686ead701ddf6Set Approval For...142225372022-02-17 8:18:09175 days 7 hrs ago0xb81b6371376418d0e48b042323d2baf4396c8e81 IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00241816 52.‍34464495
0xb7816b56cc898b5342ec173fa4d8efb70a447744a1786ef55dffda18413c416aSet Approval For...142181472022-02-16 16:11:07175 days 23 hrs ago0xefd387fc2c15ba81ad6d7038ae914eecc0f01582 IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00202247 43.‍77939753
0x1ac971836bf46c185cc3bd154ac684e040cb8c58c136a63b3a410e27658d4682Set Approval For...142167232022-02-16 10:59:59176 days 4 hrs agoENS Name hmstokkenes.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00271189 58.‍70288195
0x8f3c49110ec2366248e16f7b94df9220474460d2830b2a7eb03e291818269cd0Set Approval For...142155812022-02-16 6:31:07176 days 9 hrs ago0x7478bf358f55bf9709754105180f079035bc8180 IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00259946 56.‍2691979
0x225730bb64b56a13fe409b4268dd318d9e42e3a0fa76e388c999e476ae9ac643Set Approval For...142144022022-02-16 2:06:59176 days 13 hrs agoENS Name ethpoor.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00371391 80.‍39288313
0x7bad0396010a8ccaac2da941b6f4a19537be900cc50ec61e4c4ddd326a5cc846Set Approval For...141261882022-02-02 10:52:36190 days 4 hrs agoENS Name maliaroff.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00336143 72.‍76307884
0x26982f71c433bdf64fa7e0265d14dc421ee2d278975b87479b0ac9f0c66b43d9Set Approval For...140160342022-01-16 10:43:26207 days 4 hrs agoENS Name eylon.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00593237 128.‍41480233
0xa52ea6a574cdccbffdbef2f22fb662500dd9899b6985892e5b74c358acdb28b6Set Approval For...139884412022-01-12 3:58:24211 days 11 hrs agoENS Name jinu.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍00776451 168.‍0740687
0x2d005ed33d68f5e8f37aa522a5eb13fca25bbf1699915ae55ed42ab6e5fe20bcSet Approval For...139868192022-01-11 22:00:39211 days 17 hrs agoENS Name kongdickbutt.eth IN  0xd2894bb48ad2b274dfa23d375a409ccd009905de0 Ether0.‍0096624 209.‍15664032
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Characters

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-05
*/

// 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 Characters is ERC721  {
    using SafeMath for uint256;

    bool private lock = false;
    bool public contractPaused;
   
    constructor() ERC721("Characters", "CHFTG", " https://character-generator.xyz/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 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":[],"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"}]

608060405260006005556006805460ff19908116909155600f805490911690553480156200002c57600080fd5b506040518060400160405280600a8152602001694368617261637465727360b01b81525060405180604001604052806005815260200164434846544760d81b8152506040518060600160405280602681526020016200268a60269139620000933362000146565b8251620000a89060029060208601906200022e565b508151620000be9060039060208501906200022e565b508051620000d49060049060208401906200022e565b50620000e892506000915033905062000196565b620001147fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753362000196565b620001407f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000196565b62000311565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001a28282620001a6565b5050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620001a25760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b8280546200023c90620002d4565b90600052602060002090601f016020900481019282620002605760008555620002ab565b82601f106200027b57805160ff1916838001178555620002ab565b82800160010185558215620002ab579182015b82811115620002ab5782518255916020019190600101906200028e565b50620002b9929150620002bd565b5090565b5b80821115620002b95760008155600101620002be565b600181811c90821680620002e957607f821691505b602082108114156200030b57634e487b7160e01b600052602260045260246000fd5b50919050565b61236980620003216000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638a67456a1161011a578063b88d4fde116100ad578063d547741f1161007c578063d547741f1461046d578063e272b89214610480578063e985e9c514610493578063ef5793ce146104cf578063f2fde38b146104e257600080fd5b8063b88d4fde14610413578063c81ba8f014610426578063c87b56dd14610445578063d53913931461045857600080fd5b8063a217fddf116100e9578063a217fddf146103e3578063a22cb465146103eb578063b2918503146103fe578063b66a0e5d1461040b57600080fd5b80638a67456a146103a55780638da5cb5b146103b757806391d14854146103c857806395d89b41146103db57600080fd5b80632f2ff15d1161019d57806355f804b31161016c57806355f804b31461033d5780636352211e1461035057806370a0823114610363578063715018a61461037657806375b238fc1461037e57600080fd5b80632f2ff15d146102e457806336568abe146102f757806340398d671461030a57806342842e0e1461032a57600080fd5b806318160ddd116101d957806318160ddd1461028857806323b872dd1461029a578063248a9ca3146102ad5780632d1a12f6146102d157600080fd5b806301ffc9a71461020b57806306fdde0314610233578063081812fc14610248578063095ea7b314610273575b600080fd5b61021e610219366004611f87565b6104f5565b60405190151581526020015b60405180910390f35b61023b610506565b60405161022a91906120e1565b61025b610256366004611f4d565b610598565b6040516001600160a01b03909116815260200161022a565b610286610281366004611f0a565b610632565b005b6005545b60405190815260200161022a565b6102866102a8366004611e2d565b610748565b61028c6102bb366004611f4d565b6000908152600160208190526040909120015490565b6102866102df366004611f65565b610779565b6102866102f2366004611f65565b610847565b610286610305366004611f65565b6108d7565b61031d610318366004611de1565b610951565b60405161022a919061209d565b610286610338366004611e2d565b6109bd565b61021e61034b366004611fbf565b6109d8565b61025b61035e366004611f4d565b610a2a565b61028c610371366004611de1565b610aa1565b610286610b28565b61028c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b600f5461021e90610100900460ff1681565b6000546001600160a01b031661025b565b61021e6103d6366004611f65565b610b8e565b61023b610bb9565b61028c600081565b6102866103f9366004611ee1565b610bc8565b60065461021e9060ff1681565b610286610c8d565b610286610421366004611e68565b610d09565b61042e610d41565b60408051921515835260208301919091520161022a565b61023b610453366004611f4d565b610e9d565b61028c60008051602061231483398151915281565b61028661047b366004611f65565b610f54565b61028661048e366004611f33565b610fd5565b61021e6104a1366004611dfb565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b61028c6104dd366004611f0a565b61106b565b6102866104f0366004611de1565b61109c565b600061050082611167565b92915050565b60606002805461051590612251565b80601f016020809104026020016040519081016040528092919081815260200182805461054190612251565b801561058e5780601f106105635761010080835404028352916020019161058e565b820191906000526020600020905b81548152906001019060200180831161057157829003601f168201915b5050505050905090565b6000818152600760205260408120546001600160a01b03166106165760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600960205260409020546001600160a01b031690565b600061063d82610a2a565b9050806001600160a01b0316836001600160a01b031614156106ab5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161060d565b336001600160a01b03821614806106c757506106c781336104a1565b6107395760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161060d565b61074383836111a7565b505050565b6107523382611215565b61076e5760405162461bcd60e51b815260040161060d90612191565b61074383838361130c565b61079160008051602061231483398151915233610b8e565b6107ad5760405162461bcd60e51b815260040161060d90612146565b612710826005546107be91906121e2565b111561080c5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161060d565b60005b82811015610743576000600554600161082891906121e2565b905061083483826114a4565b508061083f8161228c565b91505061080f565b60008281526001602081905260409091200154610865905b33610b8e565b6108c95760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161060d565b6108d3828261164e565b5050565b6001600160a01b03811633146109475760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161060d565b6108d382826116b9565b6001600160a01b0381166000908152600d60209081526040918290208054835181840281018401909452808452606093928301828280156109b157602002820191906000526020600020905b81548152602001906001019080831161099d575b50505050509050919050565b61074383838360405180602001604052806000815250610d09565b60006109f260008051602061231483398151915233610b8e565b610a0e5760405162461bcd60e51b815260040161060d90612146565b8151610a21906004906020850190611ca6565b50600192915050565b6000818152600760205260408120546001600160a01b0316806105005760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161060d565b60006001600160a01b038216610b0c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161060d565b506001600160a01b031660009081526008602052604090205490565b6000546001600160a01b03163314610b825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b610b8c6000611720565b565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606003805461051590612251565b6001600160a01b038216331415610c215760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161060d565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ca560008051602061231483398151915233610b8e565b610cc15760405162461bcd60e51b815260040161060d90612146565b60065460ff1615610cd157600080fd5b6006805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b610d133383611215565b610d2f5760405162461bcd60e51b815260040161060d90612191565b610d3b84848484611770565b50505050565b600f54600090819060ff1615610d995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b600f805460ff191660011790819055610100900460ff1615610dba57600080fd5b60065460ff16610e0c5760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e0000000000000000604482015260640161060d565b6127106005546001610e1e91906121e2565b1115610e6c5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161060d565b60006005546001610e7d91906121e2565b9050610e8933826114a4565b600192509050600f805460ff191690559091565b6000818152600760205260409020546060906001600160a01b0316610f1c5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161060d565b610f246117a3565b610f2d836117b2565b604051602001610f3e929190612031565b6040516020818303038152906040529050919050565b60008281526001602081905260409091200154610f709061085f565b6109475760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161060d565b610fed60008051602061231483398151915233610b8e565b6110515760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b606482015260840161060d565b600f80549115156101000261ff0019909216919091179055565b600c602052816000526040600020818154811061108757600080fd5b90600052602060002001600091509150505481565b6000546001600160a01b031633146110f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060d565b6001600160a01b03811661115b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060d565b61116481611720565b50565b60006001600160e01b031982166380ac58cd60e01b148061119857506001600160e01b03198216635b5e139f60e01b145b806105005750610500826118cc565b600081815260096020526040902080546001600160a01b0319166001600160a01b03841690811790915581906111dc82610a2a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600760205260408120546001600160a01b031661128e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161060d565b600061129983610a2a565b9050806001600160a01b0316846001600160a01b031614806112d45750836001600160a01b03166112c984610598565b6001600160a01b0316145b8061130457506001600160a01b038082166000908152600a602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661131f82610a2a565b6001600160a01b0316146113875760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161060d565b6001600160a01b0382166113e95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161060d565b6113f46000826111a7565b6113fe8382611901565b6114088282611aaa565b6001600160a01b038316600090815260086020526040812080546001929061143190849061220e565b90915550506001600160a01b038216600090815260086020526040812080546001929061145f9084906121e2565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166114fa5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161060d565b6000818152600760205260409020546001600160a01b03161561155f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161060d565b6001600160a01b03821660009081526008602052604081208054600192906115889084906121e2565b925050819055506001600560008282546115a291906121e2565b90915550506001600160a01b0382166000908152600c60209081526040822080546001810182559083529120018190556115dc8282611aaa565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6116588282610b8e565b6108d35760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6116c38282610b8e565b156108d35760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61177b84848461130c565b61178784848484611b79565b610d3b5760405162461bcd60e51b815260040161060d906120f4565b60606004805461051590612251565b6060816117d65750506040805180820190915260018152600360fc1b602082015290565b8160005b811561180057806117ea8161228c565b91506117f99050600a836121fa565b91506117da565b60008167ffffffffffffffff81111561182957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611853576020820181803683370190505b5090505b84156113045761186860018361220e565b9150611875600a866122a7565b6118809060306121e2565b60f81b8183815181106118a357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506118c5600a866121fa565b9450611857565b60006001600160e01b03198216637965db0b60e01b148061050057506301ffc9a760e01b6001600160e01b0319831614610500565b6000818152600760205260409020546001600160a01b0383811691161461195d5760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b604482015260640161060d565b600081815260076020908152604080832080546001600160a01b0319169055600e8252808320546001600160a01b0386168452600d9092528220549091906119a6906001611c86565b9050818114611a59576001600160a01b0384166000908152600d602052604081208054839081106119e757634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600d6000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110611a3957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600e9052604090208290555b6001600160a01b0384166000908152600d60205260409020805480611a8e57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000818152600760205260409020546001600160a01b031615611b0f5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e000000000000604482015260640161060d565b600081815260076020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600d83529083208054600181810183558286529385200185905592529054611b6691611c86565b6000918252600e60205260409091205550565b60006001600160a01b0384163b15611c7b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bbd903390899088908890600401612060565b602060405180830381600087803b158015611bd757600080fd5b505af1925050508015611c07575060408051601f3d908101601f19168201909252611c0491810190611fa3565b60015b611c61573d808015611c35576040519150601f19603f3d011682016040523d82523d6000602084013e611c3a565b606091505b508051611c595760405162461bcd60e51b815260040161060d906120f4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611304565b506001949350505050565b600082821115611c9557600080fd5b611c9f828461220e565b9392505050565b828054611cb290612251565b90600052602060002090601f016020900481019282611cd45760008555611d1a565b82601f10611ced57805160ff1916838001178555611d1a565b82800160010185558215611d1a579182015b82811115611d1a578251825591602001919060010190611cff565b50611d26929150611d2a565b5090565b5b80821115611d265760008155600101611d2b565b600067ffffffffffffffff80841115611d5a57611d5a6122e7565b604051601f8501601f19908116603f01168101908282118183101715611d8257611d826122e7565b81604052809350858152868686011115611d9b57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611dcc57600080fd5b919050565b80358015158114611dcc57600080fd5b600060208284031215611df2578081fd5b611c9f82611db5565b60008060408385031215611e0d578081fd5b611e1683611db5565b9150611e2460208401611db5565b90509250929050565b600080600060608486031215611e41578081fd5b611e4a84611db5565b9250611e5860208501611db5565b9150604084013590509250925092565b60008060008060808587031215611e7d578081fd5b611e8685611db5565b9350611e9460208601611db5565b925060408501359150606085013567ffffffffffffffff811115611eb6578182fd5b8501601f81018713611ec6578182fd5b611ed587823560208401611d3f565b91505092959194509250565b60008060408385031215611ef3578182fd5b611efc83611db5565b9150611e2460208401611dd1565b60008060408385031215611f1c578182fd5b611f2583611db5565b946020939093013593505050565b600060208284031215611f44578081fd5b611c9f82611dd1565b600060208284031215611f5e578081fd5b5035919050565b60008060408385031215611f77578182fd5b82359150611e2460208401611db5565b600060208284031215611f98578081fd5b8135611c9f816122fd565b600060208284031215611fb4578081fd5b8151611c9f816122fd565b600060208284031215611fd0578081fd5b813567ffffffffffffffff811115611fe6578182fd5b8201601f81018413611ff6578182fd5b61130484823560208401611d3f565b6000815180845261201d816020860160208601612225565b601f01601f19169290920160200192915050565b60008351612043818460208801612225565b835190830190612057818360208801612225565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061209390830184612005565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156120d5578351835292840192918401916001016120b9565b50909695505050505050565b602081526000611c9f6020830184612005565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156121f5576121f56122bb565b500190565b600082612209576122096122d1565b500490565b600082821015612220576122206122bb565b500390565b60005b83811015612240578181015183820152602001612228565b83811115610d3b5750506000910152565b600181811c9082168061226557607f821691505b6020821081141561228657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122a0576122a06122bb565b5060010190565b6000826122b6576122b66122d1565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461116457600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220c1d76cae4b38fe16abe88f8521d246c16b48abf3fab1839c3c54789874b310e964736f6c634300080400332068747470733a2f2f6368617261637465722d67656e657261746f722e78797a2f6a736f6e2f

Deployed ByteCode Sourcemap

18248:1884:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18796:161;;;;;;:::i;:::-;;:::i;:::-;;;7426:14:1;;7419:22;7401:41;;7389:2;7374:18;18796:161:0;;;;;;;;10148:100;;;:::i;:::-;;;;;;;:::i;11245:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6084:32:1;;;6066:51;;6054:2;6039:18;11245:221:0;6021:102:1;10840:397:0;;;;;;:::i;:::-;;:::i;:::-;;10370:89;10441:10;;10370:89;;;7862:25:1;;;7850:2;7835:18;10370:89:0;7817:76:1;11949:252:0;;;;;;:::i;:::-;;:::i;6563:123::-;;;;;;:::i;:::-;6629:7;6656:12;;;:6;:12;;;;;;;;:22;;;6563:123;15767:387;;;;;;:::i;:::-;;:::i;6694:232::-;;;;;;:::i;:::-;;:::i;7177:218::-;;;;;;:::i;:::-;;:::i;19400:124::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12209:151::-;;;;;;:::i;:::-;;:::i;19168:224::-;;;;;;:::i;:::-;;:::i;9901:239::-;;;;;;:::i;:::-;;:::i;9685:208::-;;;;;;:::i;:::-;;:::i;4967:94::-;;;:::i;8428:60::-;;8465:23;8428:60;;18353:26;;;;;;;;;;;;4316:87;4362:7;4389:6;-1:-1:-1;;;;;4389:6:0;4316:87;;6416:139;;;;;;:::i;:::-;;:::i;10256:104::-;;;:::i;5825:49::-;;5870:4;5825:49;;11474:295;;;;;;:::i;:::-;;:::i;8621:30::-;;;;;;;;;19537:229;;;:::i;12368:285::-;;;;;;:::i;:::-;;:::i;19774:353::-;;;:::i;:::-;;;;7646:14:1;;7639:22;7621:41;;7693:2;7678:18;;7671:34;;;;7594:18;19774:353:0;7576:135:1;10467:256:0;;;;;;:::i;:::-;;:::i;8359:62::-;;-1:-1:-1;;;;;;;;;;;8359:62:0;;6934:235;;;;;;:::i;:::-;;:::i;18965:195::-;;;;;;:::i;:::-;;:::i;11777:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;11898:25:0;;;11874:4;11898:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;11777:164;9002:52;;;;;;:::i;:::-;;:::i;5216:192::-;;;;;;:::i;:::-;;:::i;18796:161::-;18889:4;18913:36;18937:11;18913:23;:36::i;:::-;18906:43;18796:161;-1:-1:-1;;18796: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;;14655:2:1;11341:73:0;;;14637:21:1;14694:2;14674:18;;;14667:30;14733:34;14713:18;;;14706:62;-1:-1:-1;;;14784:18:1;;;14777:42;14836: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;;16600:2:1;10971:57:0;;;16582:21:1;16639:2;16619:18;;;16612:30;16678:34;16658:18;;;16651:62;-1:-1:-1;;;16729:18:1;;;16722:31;16770:19;;10971:57:0;16572: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;;13048:2:1;11041:154:0;;;13030:21:1;13087:2;13067:18;;;13060:30;13126:34;13106:18;;;13099:62;13197:26;13177:18;;;13170:54;13241:19;;11041:154:0;13020: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;;17420:2:1;15936:66:0;;;17402:21:1;17459:2;17439:18;;;17432:30;17498:31;17478:18;;;17471:59;17547:18;;15936:66:0;17392:179:1;15936:66:0;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;;18138:2:1;7265:83:0;;;18120:21:1;18177:2;18157:18;;;18150:30;18216:34;18196:18;;;18189:62;-1:-1:-1;;;18267:18:1;;;18260:45;18322:19;;7265:83:0;18110:237:1;7265:83:0;7361:26;7373:4;7379:7;7361:11;:26::i;19400:124::-;-1:-1:-1;;;;;19498:18:0;;;;;;:10;:18;;;;;;;;;19491:25;;;;;;;;;;;;;;;;;19463:16;;19491:25;;;19498:18;19491:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19400:124;;;:::o;12209:151::-;12313:39;12330:4;12336:2;12340:7;12313:39;;;;;;;;;;;;:16;:39::i;19168:224::-;19226:4;19251:34;-1:-1:-1;;;;;;;;;;;3676:10:0;6416:139;:::i;19251:34::-;19243:90;;;;-1:-1:-1;;;19243:90:0;;;;;;;:::i;:::-;19344:16;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;19378:4:0;;19168:224;-1:-1:-1;;19168: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;;13884:2:1;10036:73:0;;;13866:21:1;13923:2;13903:18;;;13896:30;13962:34;13942:18;;;13935:62;-1:-1:-1;;;14013:18:1;;;14006:39;14062:19;;10036:73:0;13856:231:1;9685:208:0;9757:7;-1:-1:-1;;;;;9785:19:0;;9777:74;;;;-1:-1:-1;;;9777:74:0;;13473:2:1;9777:74:0;;;13455:21:1;13512:2;13492:18;;;13485:30;13551:34;13531:18;;;13524:62;-1:-1:-1;;;13602:18:1;;;13595:40;13652:19;;9777:74:0;13445: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;;15068:2:1;4528:68:0;;;15050:21:1;;;15087:18;;;15080:30;15146:34;15126:18;;;15119:62;15198:18;;4528:68:0;15040: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;;11093:2:1;11569:62:0;;;11075:21:1;11132:2;11112:18;;;11105:30;11171:27;11151:18;;;11144:55;11216:18;;11569:62:0;11065: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;19537:229::-;19586:34;-1:-1:-1;;;;;;;;;;;3676:10:0;6416:139;:::i;19586:34::-;19578:90;;;;-1:-1:-1;;;19578:90:0;;;;;;;:::i;:::-;19688:10;;;;19687:11;19679:20;;;;;;19710:10;:17;;-1:-1:-1;;19710:17:0;19723:4;19710:17;;;19743:15;;;;19710:10;;19743:15;19537: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;19774:353::-;18685:4;;19820;;;;18685;;18684:5;18676:49;;;;-1:-1:-1;;;18676:49:0;;17778:2:1;18676:49:0;;;17760:21:1;17817:2;17797:18;;;17790:30;17856:33;17836:18;;;17829:61;17907:18;;18676:49:0;17750:181:1;18676:49:0;18736:4;:11;;-1:-1:-1;;18736:11:0;18743:4;18736:11;;;;;;19851:14;::::1;18736:11:::0;19851:14:::1;19850:15;19842:24;;;::::0;::::1;;19885:10;::::0;::::1;;19877:47;;;::::0;-1:-1:-1;;;19877:47:0;;9923:2:1;19877:47:0::1;::::0;::::1;9905:21:1::0;9962:2;9942:18;;;9935:30;10001:26;9981:18;;;9974:54;10045:18;;19877:47:0::1;9895:174:1::0;19877:47:0::1;19958:5;19943:10;;19954:1;19943:12;;;;:::i;:::-;:20;;19935:62;;;::::0;-1:-1:-1;;;19935:62:0;;17420:2:1;19935:62:0::1;::::0;::::1;17402:21:1::0;17459:2;17439:18;;;17432:30;17498:31;17478:18;;;17471:59;17547:18;;19935:62:0::1;17392:179:1::0;19935:62:0::1;20008:13;20024:10;;20037:1;20024:14;;;;:::i;:::-;20008:30:::0;-1:-1:-1;20049:29:0::1;3676:10:::0;20069:8:::1;20049:5;:29::i;:::-;20105:4;::::0;-1:-1:-1;20110:8:0;-1:-1:-1;18770:4:0;:12;;-1:-1:-1;;18770:12:0;;;19774: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;;15839:2:1;10566:76:0;;;15821:21:1;15878:2;15858:18;;;15851:30;15917:34;15897:18;;;15890:62;-1:-1:-1;;;15968:18:1;;;15961:45;16023:19;;10566:76:0;15811: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;;12631:2:1;7020:102:0;;;12613:21:1;12670:2;12650:18;;;12643:30;12709:34;12689:18;;;12682:62;-1:-1:-1;;;12760:18:1;;;12753:46;12816:19;;7020:102:0;12603:238:1;18965:195:0;19031:34;-1:-1:-1;;;;;;;;;;;3676:10:0;6416:139;:::i;19031:34::-;19023:94;;;;-1:-1:-1;;;19023:94:0;;12215:2:1;19023:94:0;;;12197:21:1;12254:2;12234:18;;;12227:30;12293:34;12273:18;;;12266:62;-1:-1:-1;;;12344:18:1;;;12337:45;12399:19;;19023:94:0;12187:237:1;19023:94:0;19128:14;:24;;;;;;;-1:-1:-1;;19128:24:0;;;;;;;;;18965: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;;15068:2:1;4528:68:0;;;15050:21:1;;;15087:18;;;15080:30;15146:34;15126:18;;;15119:62;15198:18;;4528:68:0;15040: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;;11802:2:1;13186:73:0;;;11784:21:1;11841:2;11821:18;;;11814:30;11880:34;11860:18;;;11853:62;-1:-1:-1;;;11931:18:1;;;11924:42;11983:19;;13186:73:0;11774: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;;15429:2:1;16644:85:0;;;15411:21:1;15468:2;15448:18;;;15441:30;15507:34;15487:18;;;15480:62;-1:-1:-1;;;15558:18:1;;;15551:39;15607:19;;16644:85:0;15401:231:1;16644:85:0;-1:-1:-1;;;;;16748:16:0;;16740:65;;;;-1:-1:-1;;;16740:65:0;;10688:2:1;16740:65:0;;;10670:21:1;10727:2;10707:18;;;10700:30;10766:34;10746:18;;;10739:62;-1:-1:-1;;;10817:18:1;;;10810:34;10861:19;;16740:65:0;10660: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;;14294:2:1;15346:61:0;;;14276:21:1;;;14313:18;;;14306:30;14372:34;14352:18;;;14345:62;14424:18;;15346:61:0;14266: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;;9566:2:1;15418:58:0;;;9548:21:1;9605:2;9585:18;;;9578:30;9644;9624:18;;;9617:58;9692:18;;15418:58:0;9538: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;;16255:2:1;14742:55:0;;;16237:21:1;16294:2;16274:18;;;16267:30;-1:-1:-1;;;16313:18:1;;;16306:46;16369:18;;14742:55:0;16227: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;;11447:2:1;14435:70:0;;;11429:21:1;11486:2;11466:18;;;11459:30;11525:28;11505:18;;;11498:56;11571:18;;14435:70:0;11419: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;10074:407::-;10276:2;10258:21;;;10315:2;10295:18;;;10288:30;10354:34;10349:2;10334:18;;10327:62;-1:-1:-1;;;10420:2:1;10405:18;;10398:41;10471:3;10456:19;;10248:233::o;16800:413::-;17002:2;16984:21;;;17041:2;17021:18;;;17014:30;17080:34;17075:2;17060:18;;17053:62;-1:-1:-1;;;17146:2:1;17131:18;;17124:47;17203:3;17188:19;;16974:239::o;18534:128::-;18574:3;18605:1;18601:6;18598:1;18595:13;18592:2;;;18611:18;;:::i;:::-;-1:-1:-1;18647:9:1;;18582:80::o;18667:120::-;18707:1;18733;18723:2;;18738:18;;:::i;:::-;-1:-1:-1;18772:9:1;;18713:74::o;18792:125::-;18832:4;18860:1;18857;18854:8;18851:2;;;18865:18;;:::i;:::-;-1:-1:-1;18902:9:1;;18841:76::o;18922:258::-;18994:1;19004:113;19018:6;19015:1;19012:13;19004:113;;;19094:11;;;19088:18;19075:11;;;19068:39;19040:2;19033:10;19004:113;;;19135:6;19132:1;19129:13;19126:2;;;-1:-1:-1;;19170:1:1;19152:16;;19145:27;18975:205::o;19185:380::-;19264:1;19260:12;;;;19307;;;19328:2;;19382:4;19374:6;19370:17;19360:27;;19328:2;19435;19427:6;19424:14;19404:18;19401:38;19398:2;;;19481:10;19476:3;19472:20;19469:1;19462:31;19516:4;19513:1;19506:15;19544:4;19541:1;19534:15;19398:2;;19240:325;;;:::o;19570:135::-;19609:3;-1:-1:-1;;19630:17:1;;19627:2;;;19650:18;;:::i;:::-;-1:-1:-1;19697:1:1;19686:13;;19617:88::o;19710:112::-;19742:1;19768;19758:2;;19773:18;;:::i;:::-;-1:-1:-1;19807:9:1;;19748:74::o;19827:127::-;19888:10;19883:3;19879:20;19876:1;19869:31;19919:4;19916:1;19909:15;19943:4;19940:1;19933:15;19959:127;20020:10;20015:3;20011:20;20008:1;20001:31;20051:4;20048:1;20041:15;20075:4;20072:1;20065:15;20091:127;20152:10;20147:3;20143:20;20140:1;20133:31;20183:4;20180:1;20173:15;20207:4;20204:1;20197:15;20223:131;-1:-1:-1;;;;;;20297:32:1;;20287:43;;20277:2;;20344:1;20341;20334:12

Swarm Source

ipfs://c1d76cae4b38fe16abe88f8521d246c16b48abf3fab1839c3c54789874b310e9
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.