ETH Price: $2,341.77 (-4.29%)

Token

Aimless Fish Dynasty (AFD)
 

Overview

Max Total Supply

260 AFD

Holders

224

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 AFD
0x3addafcb4a9bcaaa3af7837f41f758863ade2938
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AimlessFishDynasty

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 13 : AFD.sol
// SPDX-License-Identifier: MIT

/**
                                  :. .                                                    
                                -==*#%*+=-.                                               
                                +=+#@*++*##%%#+=:.        .:-.                            
                                 .%*%%**+++++++*@@= .+=:  *.+%                            
                                 ++++#%#*******#=#==*+*#%#%%+-                            
                                :*=+++*%%#*#***%#@#*****###%#+...                         
                    .-+=       :#-=+++++*%@%*##-=@#**%#+-+@*++##-                         
                    .=##=     .+-===++++++*#%#--=+@#*-::=*@***+=+#+.                      
          .:+=        -+-++=.-*-====+++++++++*#*+=++----+#%*****+==##-                    
          .-*%         #..:-+*+======+++++++++++====---=+%##*******%@##-                  
            .:*%++====-*=.:::-=======+++++++++++=====--++%@#******#**==##.                
               .*+:--:--: .:::-=======+++++++++++====--++#%###********+=+@*:..            
                 -*::::::...::-=======+++++++++++====+*##%@%%##**###****+=%%=:.           
                  .**@*-:: .:::-======++++++++=++*##%%#**##*%%%%%#*******+=%#             
                    +@@@=::..::-=======+**%@@%###*++++#+#*#*#**%%##*******+=%#            
                  .  +*#@=:.::-=******#@@%#**===%====+++*===+#*#%@%##******++@+           
                  *:.#+=+@#***++====+##*+===++**#*======+===+***#*#@%%###***=#@.          
                  #=**+=-+*=========++===+**+===**======+==+++*+####@##****#**@+          
                  *+=-*##+=============**++*%=-=#*=========+*+*+*##*#@##***#*+:           
                  .%+ *@+##+=========***#@= %:==%+============++=****%%#*****+%#          
                  =**+:@++%#=======+#+- %@*=@.*#+=============++=+*#%#@%#*****@*          
                  *=:+==@@+=*=====**:   #@@@*+*+==========++=====+*##*@#*****%@.          
                  *-:-===+:.=====++:....:*#*++=++++++====*+#===+#++***@#****#@=           
                  +=:-========================+*+###*+=+**##====+++*#%@#***#@-            
                  :#:===========================#@@#**+++*%+====*****%%*#*%%=-            
                   *-=========================*%@@@#++++**+====+%####%#*%@+               
                   -*=====================+*%@@@@@#+==+++=====+*######*#%.                
                  *+=================+*#%@@@@@@@@#+==========++***%####**:                
                  ++=========++**##%@@@@@@@@@@@%*+==========+***#@%%##**+#                
   .::         .:--++-=*#%%%@@@@@@@@@@*=---=#%#++========++***#%%%@%*##**+-               
  =+-      .:+=::-#***:::-+#%@%@@*-:=-:::-+**+=========++***#%%%%+-#****++-               
 =+=     ++==#+:::#**%***###%@=:=*****##**+==========++**#%%%%#=  ******=#                
 :*+    -*+++#====###%***####%+-===================++*#%%%%%+=:   ******+                 
  :+*--=**=  -**+*%%%%%%%%#+::*-=================+*#%@@%*=.     ...=++=:                  
     .::.      .-=++: ..      %:==============++##*+=::  ..==++++++*+++=:.                
                              +=-===========+*%*:=--=.*+++#=++****#****@%+                
                               #:=========+*%*.  #==+#+++******###*****#-                 
                               -*-=======+*%:   .#*****%*****#%#*****#+                   
                                ++-======+%-     -#***#%*#**%%###**#*.                    
                                 ++-=====+%:       :=+**%##%#%%%#*=.                      
                                  =*-====+*%.         :=**@%*=-:                          
                                   .#+=====+#*-:.:-=+*++*=.                               
                                     -#*======+***++=+*#.                                 
                                       :+##*+====++*#*:                                   
                                           :-=====-:     

 * Date: March 17th, 2022
 * 
 * ☘️Happy Saint Patrick's Day!
 *
 * The Aimless Fish Dynasty is dedicated to my ever beautiful Wife, Stephanie, and our three amazing children. Hi Steph! I love you with all my heart.
 * ❤️ LHK FOREVER
 *
 * As I move on from a family business which I personally experienced as toxic to my mental health (ultimately affecting my wife and kids), I want to make all who
 * may see this aware, that Stephanie has helped me climb out of the darkness with her energy, resilience, motivation, and get-it-done attitude.
 * She has shown me strength in all areas of life, and taught me to see beyond the darkness that had surrounded me in my professional life.
 * I am forever grateful to her for this and can't express it enough. I believe everyone needs a Stephanie!
 *
 * Life is mainly about creating yourself. Who are you going to be? How will others think of you? Have you perhaps lost the plot?
 * Surround yourself with inspiring, joyful people, like my Wife, and learn from them. I think this is how you live your best life.
 *
 * Finally, within this contract I have tried to share and be as open as possible with where we are going with the Aimless Fish Dynasty project.
 * I hard coded as much as my current knowledge allowed. Where my knowledge was lacking, I tried to leave fingerprints so you could make sure things occur as they should.
 * I hope you join on me and my family on this exciting new journey!
 * This is just the beginning.
 *
 * Founded, developed, and art by: @kenleybrowne
 * 
 * AFD Dynasty  DAO: 0x4c5260637C9D39919347C961fAb0fE4CEB79bCdf
 * AFD Genesis Fund: 0x23d5041C65151E80E13380f9266EA65FA6E37a8f
 * AFD Charity Fund: 0xE88d4a2c86094197036B3D7B7e22275a3A7C0b28
 * 
 */

pragma solidity ^0.8.7;

import './ERC721Enumerable.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

contract AimlessFishDynasty is ERC721Enumerable, Ownable {  
    string public AFD_PROVENANCE;    
    using Address for address;

    // This will help the starting and stopping of the sale and presale.
    bool public saleActive = false;
    bool public presaleActive = false;

    // This is the amount of tokens reserved for Free-minting, the team, giveaways, collabs and so forth.
    uint256 public reserved = 225;
    uint256 public tgcReserved = 30;

    // This is the price of each Aimless Fish Dynasty token.
    // Up to 28 Aimless Fish Dynasty tokens or 1% of all tokens may be minted at a time.
    uint256 public price = 0.035 ether;
    uint256 public freePrice = 0.0 ether;    

    // Max Supply limits the maximum supply of Aimless Fish Dynasty tokens that can exist.
    // Free Max Supply allows up to 220 free mints to the community & public.
    uint256 constant max_SUPPLY = 2750;
    uint256 constant freeMAX_SUPPLY = 255; // Up to 220 for Free Mint + 30 Reserved + 5 tokens for the Founder, his wife, and their three little kiddos.

    // This is the base link that leads to the images of the Aimless Fish tokens.
    // This will be transitioned to IPFS after minting is complete. 
    string public baseURI;
 
    // Allows us to set the provenance for the entire collection.
    function setProvenance(string memory provenance) public onlyOwner {
        AFD_PROVENANCE = provenance;
    }

    // This allows for gasless Opensea Listing.
    address public proxyRegistryAddress;  

    // The following are the addresses for withdrawals.
    address public a1_DAO = 0x4c5260637C9D39919347C961fAb0fE4CEB79bCdf; // Aimless Fish Dynasty DAO
    address public a2_OMM = 0x3097617CbA85A26AdC214A1F87B680bE4b275cD0; // OMM&S Consulting and Marketing Team
    address public a3_DTC = 0xE88d4a2c86094197036B3D7B7e22275a3A7C0b28; // The AFD Charity Fund to Be Donated
    address public a4_ADT = 0xf770C9AC6bE46FF9D02e59945Ae54030A8A92d3F; // Founder @kenleybrowne
        // Additionally, the AFD Genesis Fund:0x23d5041C65151E80E13380f9266EA65FA6E37a8f will be set to receive secondary sales royalities on OS & LR.
        // 60% of the Genesis Fund will be forwarded to the DAO, while the final 40% will be used to further the project’s growth and development.

    // This is for reserved presale tokens.
    mapping (address => uint256) public presaleReserved;

    // This makes sure if someone already did a FREE mint, then they can no longer do so. We would love if you purchased one as well :)
    mapping(address => uint256) private _claimed;

    // This allows for gasless Opensea Listing.
    mapping(address => bool) public projectProxy;

    // This allows for gas(less) future collection approval for cross-collection interaction.
    mapping(address => bool) public proxyToApproved;

    // This initializes The Aimless Fish Dynasty contract and designates the name and symbol.
    constructor (string memory _baseURI, address _proxyRegistryAddress) ERC721("Aimless Fish Dynasty", "AFD") {
        baseURI = _baseURI;
        proxyRegistryAddress = _proxyRegistryAddress;

        // Kenley, the founder is gifting his Wife & three young kiddos the first four fish, plus retaining one for his continued access to the Dynasty.
        // These will be held in the his wallet and transfered to them in the future so they may access the Dynasty.
        _safeMint( a4_ADT, 0);
        _safeMint( a4_ADT, 1);
        _safeMint( a4_ADT, 2);
        _safeMint( a4_ADT, 3);
        _safeMint( a4_ADT, 4);
    }

    // To update the tokenURI.
    // All metadata & images will be on IPFS once mint is complete.
    function setBaseURI(string memory _baseURI) public onlyOwner {
        baseURI = _baseURI;
    }

    // 
    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return string(abi.encodePacked(baseURI, Strings.toString(_tokenId)));
    }

    // This helps see which address owns which tokens.
    function tokensOfOwner(address addr) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(addr);
        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(addr, i);
        }
        return tokensId;
    }

    // This allows for gasless Opensea Listing.
    function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner {
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    // This allows for gas(less) future collection approval for cross-collection interaction.
    function flipProxyState(address proxyAddress) public onlyOwner {
        projectProxy[proxyAddress] = !projectProxy[proxyAddress];
    }

    // This is for the exclusive FREE-sale/Reserved presale minting ability.
    function mintPresale(uint256 _amount) public payable {
        uint256 supply = totalSupply();
        uint256 reservedAmt = presaleReserved[msg.sender];
        require( presaleActive,                      "The AFD presale isn't active yet." );
        require( reservedAmt > 0,                    "There are no tokens reserved for your address." );
        require( _amount <= reservedAmt,             "You are not able to mint more than what is reserved to you." );
        require( supply + _amount <= freeMAX_SUPPLY, "You are not able to mint more than the max supply of FREE Aimless Fish." );
        require( msg.value == freePrice * _amount,   "Opps! You sent the wrong amount of ETH." );
        presaleReserved[msg.sender] = reservedAmt - _amount;
        for(uint256 i; i < _amount; i++){
            _safeMint( msg.sender, supply + i );
        }
    }

    // This is for the Public minting ability.
    function mintToken(uint256 _amount) public payable {
        uint256 supply = totalSupply();
        require( saleActive,                     "The AFD public sale isn't active." );
        require( supply + _amount <= max_SUPPLY, "You are not able to mint more than max supply of total Aimless Fish." );
        require( _amount > 0 && _amount < 29,    "You are able to mint between 1-28 AFD tokens at the same time." );
        require( supply + _amount <= max_SUPPLY, "You are not able to mint more than max supply of total Aimless Fish." );
        require( msg.value == price * _amount,   "Opps! You sent the wrong amount of ETH." );
        for(uint256 i; i < _amount; i++){
            _safeMint( msg.sender, supply + i );
        }
    }

    // This is for the FREE minting ability during public sale.
    // Important: The fish will no longer be free when the total fish minted, including paid mints, passes 255. Don't try or you risk losing your gas!
    function mintFREEToken(uint256 _amount) public payable {
        uint256 supply = totalSupply();
        require( saleActive,                         "The AFD public sale isn't active." );
        require( _claimed[msg.sender] == 0,          "Your Free token is already claimed.");
        require( _amount > 0 && _amount < 2,         "You are able to mint one (1) Free AFD token." );
        require( supply + _amount <= freeMAX_SUPPLY, "You are not able to mint more than max supply of FREE Aimless Fish." );
        require( msg.value == freePrice * _amount,   "Opps! You sent the wrong amount of ETH." );
        for(uint256 i; i < _amount; i++){
            _claimed[msg.sender] += 1;
            _safeMint( msg.sender, supply + i );
        }
    }

    // Admin minting function to reserve tokens for the team, collabs, customs and giveaways.
    function mintReserved(uint256 _amount) public onlyOwner {
        // Limited to a publicly set amount as shown above.
        require( _amount <= tgcReserved, "You are not able to reserve more than the set amount." );
        tgcReserved -= _amount;
        uint256 supply = totalSupply();
        for(uint256 i; i < _amount; i++){
            _safeMint( msg.sender, supply + i );
        }
    }
    
    // This lets us add to and edit reserved presale spots.
    function editPresaleReserved(address[] memory _a, uint256[] memory _amount) public onlyOwner {
        for(uint256 i; i < _a.length; i++){
            presaleReserved[_a[i]] = _amount[i];
        }
    }

    // This allows us to start and stop the AFD presale.
    function setPresaleActive(bool val) public onlyOwner {
        presaleActive = val;
    }

    // This allows us to start and stop the AFD Public sale.
    function setSaleActive(bool val) public onlyOwner {
        saleActive = val;
    }

    // This allows us to set a different selling price in case ETH changes drastically.
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    // Withdraw funds from inital sales for the team, DAO, Charity and founder.
    function withdrawTeam(uint256 amount) public payable onlyOwner {
        uint256 percent = amount / 100;
        require(payable(a1_DAO).send(percent * 33)); // 33% for the community-lead Aimless Fish Dynasty DAO.
        require(payable(a2_OMM).send(percent * 25)); // 25% for the OMM&S Consulting and Marketing Team.
        require(payable(a3_DTC).send(percent * 5));  // 5% to be Distributed to Charities that support Earth and Ocean conservation.
        require(payable(a4_ADT).send(percent * 38)); // 38% to further the project’s growth & development plus initial founders dev & marketing expenses.
    }

    // Allows gasless listing on Opensea and LooksRare.
    // Sumitted during Deployment of contract OS Mainnet: 0xa5409ec958c83c3f309868babaca7c86dcb077c1
    // NOT CODED (added after contract is deployed) LooksRare Mainnet: 0xf42aa99F011A1fA7CDA90E5E98b277E306BcA83e
    // Also allows gas(less) future collection approval for cross-collection interaction including LooksRare.
    function isApprovedForAll(address _owner, address operator) public view override returns (bool) {
        OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(_owner)) == operator || projectProxy[operator]) return true;
        return super.isApprovedForAll(_owner, operator);
    }

}

contract OwnableDelegateProxy { }
contract OpenSeaProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}
/**
*
* Wherever you happen to be in the world, together, greater collective enlightenment is what we must strive for.
* Thank you for joining me and my family on this journey.
* Let's raise each other up.
*
* Cheers,
* Kenley
* 
*/

File 2 of 13 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 13 : ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account but rips out the core of the gas-wasting processing that comes from OpenZeppelin.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < _owners.length, "ERC721Enumerable: global index out of bounds");
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");

        uint count;
        for(uint i; i < _owners.length; i++){
            if(owner == _owners[i]){
                if(count == index) return i;
                else count++;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }
}

File 4 of 13 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 5 of 13 : ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165.sol";
import "./Address.sol";

abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    
    string private _name;
    string private _symbol;

    // Mapping from token ID to owner address
    address[] internal _owners;

    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) 
        public 
        view 
        virtual 
        override 
        returns (uint) 
    {
        require(owner != address(0), "ERC721: balance query for the zero address");

        uint count;
        for( uint i; i < _owners.length; ++i ){
          if( owner == _owners[i] )
            ++count;
        }
        return count;
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    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;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721-approve}.
     */
    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);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    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);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    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);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    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"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    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));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    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"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    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);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    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);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 6 of 13 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 7 of 13 : Address.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;

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

File 8 of 13 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 9 of 13 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

File 10 of 13 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 11 of 13 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 13 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 13 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AFD_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a1_DAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a2_OMM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a3_DTC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a4_ADT","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"editPresaleReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"flipProxyState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintFREEToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"projectProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proxyToApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","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":"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":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setSaleActive","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":[],"name":"tgcReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"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":"addr","type":"address"}],"name":"tokensOfOwner","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"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTeam","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526007805461ffff1916905560e1600855601e600955667c585087238000600a556000600b55600e80546001600160a01b0319908116734c5260637c9d39919347c961fab0fe4ceb79bcdf17909155600f80548216733097617cba85a26adc214a1f87b680be4b275cd017905560108054821673e88d4a2c86094197036b3d7b7e22275a3a7c0b281790556011805490911673f770c9ac6be46ff9d02e59945ae54030a8a92d3f179055348015620000ba57600080fd5b50604051620036c1380380620036c1833981016040819052620000dd91620006fd565b604080518082018252601481527f41696d6c65737320466973682044796e6173747900000000000000000000000060208083019182528351808501909452600384526210519160ea1b9084015281519192916200013d9160009162000607565b5080516200015390600190602084019062000607565b505050620001706200016a6200022360201b60201c565b62000227565b81516200018590600c90602085019062000607565b50600d80546001600160a01b0319166001600160a01b0383811691909117909155601154620001b79116600062000279565b601154620001d0906001600160a01b0316600162000279565b601154620001e9906001600160a01b0316600262000279565b60115462000202906001600160a01b0316600362000279565b6011546200021b906001600160a01b0316600462000279565b5050620008bc565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200029b8282604051806020016040528060008152506200029f60201b60201c565b5050565b620002ab83836200031b565b620002ba600084848462000449565b620003165760405162461bcd60e51b81526020600482015260326024820152600080516020620036a183398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084015b60405180910390fd5b505050565b6001600160a01b038216620003735760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016200030d565b6200037e81620005b2565b15620003cd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016200030d565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006200046a846001600160a01b03166200060160201b62001c731760201c565b15620005a657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290620004a4903390899088908890600401620007ca565b602060405180830381600087803b158015620004bf57600080fd5b505af1925050508015620004f2575060408051601f3d908101601f19168201909252620004ef91810190620006ca565b60015b6200058b573d80801562000523576040519150601f19603f3d011682016040523d82523d6000602084013e62000528565b606091505b508051620005835760405162461bcd60e51b81526020600482015260326024820152600080516020620036a183398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016200030d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050620005aa565b5060015b949350505050565b60025460009082108015620005fb575060006001600160a01b031660028381548110620005e357620005e362000890565b6000918252602090912001546001600160a01b031614155b92915050565b3b151590565b828054620006159062000853565b90600052602060002090601f01602090048101928262000639576000855562000684565b82601f106200065457805160ff191683800117855562000684565b8280016001018555821562000684579182015b828111156200068457825182559160200191906001019062000667565b506200069292915062000696565b5090565b5b8082111562000692576000815560010162000697565b80516001600160a01b0381168114620006c557600080fd5b919050565b600060208284031215620006dd57600080fd5b81516001600160e01b031981168114620006f657600080fd5b9392505050565b600080604083850312156200071157600080fd5b82516001600160401b03808211156200072957600080fd5b818501915085601f8301126200073e57600080fd5b815181811115620007535762000753620008a6565b604051601f8201601f19908116603f011681019083821181831017156200077e576200077e620008a6565b816040528281528860208487010111156200079857600080fd5b620007ab83602083016020880162000820565b8096505050505050620007c160208401620006ad565b90509250929050565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620008098160a085016020870162000820565b601f01601f19169190910160a00195945050505050565b60005b838110156200083d57818101518382015260200162000823565b838111156200084d576000848401525b50505050565b600181811c908216806200086857607f821691505b602082108114156200088a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b612dd580620008cc6000396000f3fe6080604052600436106102ae5760003560e01c80638462151c11610175578063cd7c0326116100dc578063f73c814b11610095578063fc2756981161006f578063fc27569814610843578063fd2b049214610863578063fe60d12c14610876578063ffe630b51461088c57600080fd5b8063f73c814b146107fb578063f759867a1461081b578063fa5cb60c1461082e57600080fd5b8063cd7c03261461073b578063d26ea6c01461075b578063e985e9c51461077b578063eb0353901461079b578063f2fde38b146107bb578063f478da7b146107db57600080fd5b80639dc38c7d1161012e5780639dc38c7d14610682578063a035b1fe146106b2578063a22cb465146106c8578063b88d4fde146106e8578063c634d03214610708578063c87b56dd1461071b57600080fd5b80638462151c146105cc5780638da5cb5b146105f957806391b7f5ed1461061757806394bba2451461063757806395d89b411461064d5780639a5d140b1461066257600080fd5b806350da01cc116102195780636ac8bf4d116101d25780636ac8bf4d1461052f5780636b2fd865146105425780636c0360eb1461056257806370a0823114610577578063715018a614610597578063841718a6146105ac57600080fd5b806350da01cc1461047057806353135ca01461048657806355f804b3146104a55780635bab26e2146104c55780636352211e146104f557806368428a1b1461051557600080fd5b806323b872dd1161026b57806323b872dd146103a35780632f745c59146103c357806339c36fa0146103e35780633f8121a21461041057806342842e0e146104305780634f6ccce71461045057600080fd5b806301ffc9a7146102b357806306fdde03146102e8578063081812fc1461030a578063095ea7b31461034257806318160ddd146103645780631ed7dd0714610383575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004612770565b6108ac565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b506102fd6108d7565b6040516102df9190612999565b34801561031657600080fd5b5061032a610325366004612810565b610969565b6040516001600160a01b0390911681526020016102df565b34801561034e57600080fd5b5061036261035d366004612660565b6109f6565b005b34801561037057600080fd5b506002545b6040519081526020016102df565b34801561038f57600080fd5b50600f5461032a906001600160a01b031681565b3480156103af57600080fd5b506103626103be36600461256a565b610b0c565b3480156103cf57600080fd5b506103756103de366004612660565b610b3d565b3480156103ef57600080fd5b506103756103fe36600461250d565b60126020526000908152604090205481565b34801561041c57600080fd5b5061036261042b366004612755565b610bf0565b34801561043c57600080fd5b5061036261044b36600461256a565b610c34565b34801561045c57600080fd5b5061037561046b366004612810565b610c4f565b34801561047c57600080fd5b50610375600b5481565b34801561049257600080fd5b506007546102d390610100900460ff1681565b3480156104b157600080fd5b506103626104c03660046127c7565b610cbc565b3480156104d157600080fd5b506102d36104e036600461250d565b60146020526000908152604090205460ff1681565b34801561050157600080fd5b5061032a610510366004612810565b610cfd565b34801561052157600080fd5b506007546102d39060ff1681565b61036261053d366004612810565b610d89565b34801561054e57600080fd5b5061036261055d36600461268c565b610f8f565b34801561056e57600080fd5b506102fd611034565b34801561058357600080fd5b5061037561059236600461250d565b6110c2565b3480156105a357600080fd5b50610362611190565b3480156105b857600080fd5b506103626105c7366004612755565b6111c6565b3480156105d857600080fd5b506105ec6105e736600461250d565b611203565b6040516102df9190612955565b34801561060557600080fd5b506005546001600160a01b031661032a565b34801561062357600080fd5b50610362610632366004612810565b6112a5565b34801561064357600080fd5b5061037560095481565b34801561065957600080fd5b506102fd6112d4565b34801561066e57600080fd5b5061036261067d366004612810565b6112e3565b34801561068e57600080fd5b506102d361069d36600461250d565b60156020526000908152604090205460ff1681565b3480156106be57600080fd5b50610375600a5481565b3480156106d457600080fd5b506103626106e336600461262b565b6113c2565b3480156106f457600080fd5b506103626107033660046125ab565b611487565b610362610716366004612810565b6114bf565b34801561072757600080fd5b506102fd610736366004612810565b61161e565b34801561074757600080fd5b50600d5461032a906001600160a01b031681565b34801561076757600080fd5b5061036261077636600461250d565b61169f565b34801561078757600080fd5b506102d3610796366004612531565b6116eb565b3480156107a757600080fd5b5060115461032a906001600160a01b031681565b3480156107c757600080fd5b506103626107d636600461250d565b6117de565b3480156107e757600080fd5b5060105461032a906001600160a01b031681565b34801561080757600080fd5b5061036261081636600461250d565b611879565b610362610829366004612810565b6118cc565b34801561083a57600080fd5b506102fd611b07565b34801561084f57600080fd5b50600e5461032a906001600160a01b031681565b610362610871366004612810565b611b14565b34801561088257600080fd5b5061037560085481565b34801561089857600080fd5b506103626108a73660046127c7565b611c36565b60006001600160e01b0319821663780e9d6360e01b14806108d157506108d182611c79565b92915050565b6060600080546108e690612c92565b80601f016020809104026020016040519081016040528092919081815260200182805461091290612c92565b801561095f5780601f106109345761010080835404028352916020019161095f565b820191906000526020600020905b81548152906001019060200180831161094257829003601f168201915b5050505050905090565b600061097482611cc9565b6109da5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610a0182610cfd565b9050806001600160a01b0316836001600160a01b03161415610a6f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109d1565b336001600160a01b0382161480610a8b5750610a8b81336116eb565b610afd5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109d1565b610b078383611d13565b505050565b610b163382611d81565b610b325760405162461bcd60e51b81526004016109d190612b5e565b610b07838383611e43565b6000610b48836110c2565b8210610b665760405162461bcd60e51b81526004016109d1906129ac565b6000805b600254811015610bd75760028181548110610b8757610b87612d28565b6000918252602090912001546001600160a01b0386811691161415610bc55783821415610bb75791506108d19050565b81610bc181612ccd565b9250505b80610bcf81612ccd565b915050610b6a565b5060405162461bcd60e51b81526004016109d1906129ac565b6005546001600160a01b03163314610c1a5760405162461bcd60e51b81526004016109d190612a90565b600780549115156101000261ff0019909216919091179055565b610b0783838360405180602001604052806000815250611487565b6002546000908210610cb85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109d1565b5090565b6005546001600160a01b03163314610ce65760405162461bcd60e51b81526004016109d190612a90565b8051610cf990600c90602084019061239e565b5050565b60008060028381548110610d1357610d13612d28565b6000918252602090912001546001600160a01b03169050806108d15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109d1565b6000610d9460025490565b60075490915060ff16610db95760405162461bcd60e51b81526004016109d190612b1d565b3360009081526013602052604090205415610e225760405162461bcd60e51b815260206004820152602360248201527f596f7572204672656520746f6b656e20697320616c726561647920636c61696d60448201526232b21760e91b60648201526084016109d1565b600082118015610e325750600282105b610e935760405162461bcd60e51b815260206004820152602c60248201527f596f75206172652061626c6520746f206d696e74206f6e65202831292046726560448201526b329020a322103a37b5b2b71760a11b60648201526084016109d1565b60ff610e9f8383612c04565b1115610f0d5760405162461bcd60e51b81526020600482015260436024820152600080516020612d8083398151915260448201527f616e206d617820737570706c79206f6620465245452041696d6c65737320466960648201526239b41760e91b608482015260a4016109d1565b81600b54610f1b9190612c30565b3414610f395760405162461bcd60e51b81526004016109d190612a49565b60005b82811015610b0757336000908152601360205260408120805460019290610f64908490612c04565b90915550610f7d905033610f788385612c04565b611f99565b80610f8781612ccd565b915050610f3c565b6005546001600160a01b03163314610fb95760405162461bcd60e51b81526004016109d190612a90565b60005b8251811015610b0757818181518110610fd757610fd7612d28565b602002602001015160126000858481518110610ff557610ff5612d28565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061102c90612ccd565b915050610fbc565b600c805461104190612c92565b80601f016020809104026020016040519081016040528092919081815260200182805461106d90612c92565b80156110ba5780601f1061108f576101008083540402835291602001916110ba565b820191906000526020600020905b81548152906001019060200180831161109d57829003601f168201915b505050505081565b60006001600160a01b03821661112d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109d1565b6000805b600254811015611189576002818154811061114e5761114e612d28565b6000918252602090912001546001600160a01b03858116911614156111795761117682612ccd565b91505b61118281612ccd565b9050611131565b5092915050565b6005546001600160a01b031633146111ba5760405162461bcd60e51b81526004016109d190612a90565b6111c46000611fb3565b565b6005546001600160a01b031633146111f05760405162461bcd60e51b81526004016109d190612a90565b6007805460ff1916911515919091179055565b60606000611210836110c2565b905060008167ffffffffffffffff81111561122d5761122d612d3e565b604051908082528060200260200182016040528015611256578160200160208202803683370190505b50905060005b8281101561129d5761126e8582610b3d565b82828151811061128057611280612d28565b60209081029190910101528061129581612ccd565b91505061125c565b509392505050565b6005546001600160a01b031633146112cf5760405162461bcd60e51b81526004016109d190612a90565b600a55565b6060600180546108e690612c92565b6005546001600160a01b0316331461130d5760405162461bcd60e51b81526004016109d190612a90565b60095481111561137d5760405162461bcd60e51b815260206004820152603560248201527f596f7520617265206e6f742061626c6520746f2072657365727665206d6f7265604482015274103a3430b7103a34329039b2ba1030b6b7bab73a1760591b60648201526084016109d1565b806009600082825461138f9190612c4f565b909155505060025460005b82811015610b07576113b033610f788385612c04565b806113ba81612ccd565b91505061139a565b6001600160a01b03821633141561141b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109d1565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114913383611d81565b6114ad5760405162461bcd60e51b81526004016109d190612b5e565b6114b984848484612005565b50505050565b60006114ca60025490565b60075490915060ff166114ef5760405162461bcd60e51b81526004016109d190612b1d565b610abe6114fc8383612c04565b111561151a5760405162461bcd60e51b81526004016109d190612ac5565b60008211801561152a5750601d82105b61159c5760405162461bcd60e51b815260206004820152603e60248201527f596f75206172652061626c6520746f206d696e74206265747765656e20312d3260448201527f382041464420746f6b656e73206174207468652073616d652074696d652e000060648201526084016109d1565b610abe6115a98383612c04565b11156115c75760405162461bcd60e51b81526004016109d190612ac5565b81600a546115d59190612c30565b34146115f35760405162461bcd60e51b81526004016109d190612a49565b60005b82811015610b075761160c33610f788385612c04565b8061161681612ccd565b9150506115f6565b606061162982611cc9565b61166d5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109d1565b600c61167883612038565b604051602001611689929190612871565b6040516020818303038152906040529050919050565b6005546001600160a01b031633146116c95760405162461bcd60e51b81526004016109d190612a90565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177091906127aa565b6001600160a01b0316148061179d57506001600160a01b03831660009081526014602052604090205460ff165b156117ac5760019150506108d1565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b031633146118085760405162461bcd60e51b81526004016109d190612a90565b6001600160a01b03811661186d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d1565b61187681611fb3565b50565b6005546001600160a01b031633146118a35760405162461bcd60e51b81526004016109d190612a90565b6001600160a01b03166000908152601460205260409020805460ff19811660ff90911615179055565b60006118d760025490565b3360009081526012602052604090205460075491925090610100900460ff1661194c5760405162461bcd60e51b815260206004820152602160248201527f546865204146442070726573616c652069736e277420616374697665207965746044820152601760f91b60648201526084016109d1565b600081116119b35760405162461bcd60e51b815260206004820152602e60248201527f546865726520617265206e6f20746f6b656e7320726573657276656420666f7260448201526d103cb7bab91030b2323932b9b99760911b60648201526084016109d1565b80831115611a175760405162461bcd60e51b815260206004820152603b6024820152600080516020612d8083398151915260448201527f616e207768617420697320726573657276656420746f20796f752e000000000060648201526084016109d1565b60ff611a238484612c04565b1115611a955760405162461bcd60e51b81526020600482015260476024820152600080516020612d8083398151915260448201527f616e20746865206d617820737570706c79206f6620465245452041696d6c657360648201526639902334b9b41760c91b608482015260a4016109d1565b82600b54611aa39190612c30565b3414611ac15760405162461bcd60e51b81526004016109d190612a49565b611acb8382612c4f565b336000908152601260205260408120919091555b838110156114b957611af533610f788386612c04565b80611aff81612ccd565b915050611adf565b6006805461104190612c92565b6005546001600160a01b03163314611b3e5760405162461bcd60e51b81526004016109d190612a90565b6000611b4b606483612c1c565b600e549091506001600160a01b03166108fc611b68836021612c30565b6040518115909202916000818181858888f19350505050611b8857600080fd5b600f546001600160a01b03166108fc611ba2836019612c30565b6040518115909202916000818181858888f19350505050611bc257600080fd5b6010546001600160a01b03166108fc611bdc836005612c30565b6040518115909202916000818181858888f19350505050611bfc57600080fd5b6011546001600160a01b03166108fc611c16836026612c30565b6040518115909202916000818181858888f19350505050610cf957600080fd5b6005546001600160a01b03163314611c605760405162461bcd60e51b81526004016109d190612a90565b8051610cf990600690602084019061239e565b3b151590565b60006001600160e01b031982166380ac58cd60e01b1480611caa57506001600160e01b03198216635b5e139f60e01b145b806108d157506301ffc9a760e01b6001600160e01b03198316146108d1565b600254600090821080156108d1575060006001600160a01b031660028381548110611cf657611cf6612d28565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d4882610cfd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d8c82611cc9565b611ded5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109d1565b6000611df883610cfd565b9050806001600160a01b0316846001600160a01b03161480611e335750836001600160a01b0316611e2884610969565b6001600160a01b0316145b806117d657506117d681856116eb565b826001600160a01b0316611e5682610cfd565b6001600160a01b031614611ebe5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109d1565b6001600160a01b038216611f205760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d1565b611f2b600082611d13565b8160028281548110611f3f57611f3f612d28565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b610cf9828260405180602001604052806000815250612136565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612010848484611e43565b61201c84848484612169565b6114b95760405162461bcd60e51b81526004016109d1906129f7565b60608161205c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612086578061207081612ccd565b915061207f9050600a83612c1c565b9150612060565b60008167ffffffffffffffff8111156120a1576120a1612d3e565b6040519080825280601f01601f1916602001820160405280156120cb576020820181803683370190505b5090505b84156117d6576120e0600183612c4f565b91506120ed600a86612ce8565b6120f8906030612c04565b60f81b81838151811061210d5761210d612d28565b60200101906001600160f81b031916908160001a90535061212f600a86612c1c565b94506120cf565b6121408383612276565b61214d6000848484612169565b610b075760405162461bcd60e51b81526004016109d1906129f7565b60006001600160a01b0384163b1561226b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121ad903390899088908890600401612918565b602060405180830381600087803b1580156121c757600080fd5b505af19250505080156121f7575060408051601f3d908101601f191682019092526121f49181019061278d565b60015b612251573d808015612225576040519150601f19603f3d011682016040523d82523d6000602084013e61222a565b606091505b5080516122495760405162461bcd60e51b81526004016109d1906129f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117d6565b506001949350505050565b6001600160a01b0382166122cc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109d1565b6122d581611cc9565b156123225760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109d1565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546123aa90612c92565b90600052602060002090601f0160209004810192826123cc5760008555612412565b82601f106123e557805160ff1916838001178555612412565b82800160010185558215612412579182015b828111156124125782518255916020019190600101906123f7565b50610cb89291505b80821115610cb8576000815560010161241a565b600067ffffffffffffffff83111561244857612448612d3e565b61245b601f8401601f1916602001612baf565b905082815283838301111561246f57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261249757600080fd5b813560206124ac6124a783612be0565b612baf565b80838252828201915082860187848660051b89010111156124cc57600080fd5b60005b858110156124eb578135845292840192908401906001016124cf565b5090979650505050505050565b8035801515811461250857600080fd5b919050565b60006020828403121561251f57600080fd5b813561252a81612d54565b9392505050565b6000806040838503121561254457600080fd5b823561254f81612d54565b9150602083013561255f81612d54565b809150509250929050565b60008060006060848603121561257f57600080fd5b833561258a81612d54565b9250602084013561259a81612d54565b929592945050506040919091013590565b600080600080608085870312156125c157600080fd5b84356125cc81612d54565b935060208501356125dc81612d54565b925060408501359150606085013567ffffffffffffffff8111156125ff57600080fd5b8501601f8101871361261057600080fd5b61261f8782356020840161242e565b91505092959194509250565b6000806040838503121561263e57600080fd5b823561264981612d54565b9150612657602084016124f8565b90509250929050565b6000806040838503121561267357600080fd5b823561267e81612d54565b946020939093013593505050565b6000806040838503121561269f57600080fd5b823567ffffffffffffffff808211156126b757600080fd5b818501915085601f8301126126cb57600080fd5b813560206126db6124a783612be0565b8083825282820191508286018a848660051b89010111156126fb57600080fd5b600096505b8487101561272757803561271381612d54565b835260019690960195918301918301612700565b509650508601359250508082111561273e57600080fd5b5061274b85828601612486565b9150509250929050565b60006020828403121561276757600080fd5b61252a826124f8565b60006020828403121561278257600080fd5b813561252a81612d69565b60006020828403121561279f57600080fd5b815161252a81612d69565b6000602082840312156127bc57600080fd5b815161252a81612d54565b6000602082840312156127d957600080fd5b813567ffffffffffffffff8111156127f057600080fd5b8201601f8101841361280157600080fd5b6117d68482356020840161242e565b60006020828403121561282257600080fd5b5035919050565b60008151808452612841816020860160208601612c66565b601f01601f19169290920160200192915050565b60008151612867818560208601612c66565b9290920192915050565b600080845481600182811c91508083168061288d57607f831692505b60208084108214156128ad57634e487b7160e01b86526022600452602486fd5b8180156128c157600181146128d2576128ff565b60ff198616895284890196506128ff565b60008b81526020902060005b868110156128f75781548b8201529085019083016128de565b505084890196505b50505050505061290f8185612855565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061294b90830184612829565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561298d57835183529284019291840191600101612971565b50909695505050505050565b60208152600061252a6020830184612829565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526027908201527f4f7070732120596f752073656e74207468652077726f6e6720616d6f756e742060408201526637b31022aa241760c91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252604490820152600080516020612d8083398151915260408201527f616e206d617820737570706c79206f6620746f74616c2041696d6c657373204660608201526334b9b41760e11b608082015260a00190565b60208082526021908201527f54686520414644207075626c69632073616c652069736e2774206163746976656040820152601760f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bd857612bd8612d3e565b604052919050565b600067ffffffffffffffff821115612bfa57612bfa612d3e565b5060051b60200190565b60008219821115612c1757612c17612cfc565b500190565b600082612c2b57612c2b612d12565b500490565b6000816000190483118215151615612c4a57612c4a612cfc565b500290565b600082821015612c6157612c61612cfc565b500390565b60005b83811015612c81578181015183820152602001612c69565b838111156114b95750506000910152565b600181811c90821680612ca657607f821691505b60208210811415612cc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ce157612ce1612cfc565b5060010190565b600082612cf757612cf7612d12565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461187657600080fd5b6001600160e01b03198116811461187657600080fdfe596f7520617265206e6f742061626c6520746f206d696e74206d6f7265207468a2646970667358221220cf242acddbedce04a5d415457ec70deb59eb05b9f56fa56e0ff1bb2caf11390564736f6c634300080700334552433732313a207472616e7366657220746f206e6f6e2045524337323152650000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000001c687474703a2f2f6e66742e6b656e6c657962726f776e652e636f6d2f00000000

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c80638462151c11610175578063cd7c0326116100dc578063f73c814b11610095578063fc2756981161006f578063fc27569814610843578063fd2b049214610863578063fe60d12c14610876578063ffe630b51461088c57600080fd5b8063f73c814b146107fb578063f759867a1461081b578063fa5cb60c1461082e57600080fd5b8063cd7c03261461073b578063d26ea6c01461075b578063e985e9c51461077b578063eb0353901461079b578063f2fde38b146107bb578063f478da7b146107db57600080fd5b80639dc38c7d1161012e5780639dc38c7d14610682578063a035b1fe146106b2578063a22cb465146106c8578063b88d4fde146106e8578063c634d03214610708578063c87b56dd1461071b57600080fd5b80638462151c146105cc5780638da5cb5b146105f957806391b7f5ed1461061757806394bba2451461063757806395d89b411461064d5780639a5d140b1461066257600080fd5b806350da01cc116102195780636ac8bf4d116101d25780636ac8bf4d1461052f5780636b2fd865146105425780636c0360eb1461056257806370a0823114610577578063715018a614610597578063841718a6146105ac57600080fd5b806350da01cc1461047057806353135ca01461048657806355f804b3146104a55780635bab26e2146104c55780636352211e146104f557806368428a1b1461051557600080fd5b806323b872dd1161026b57806323b872dd146103a35780632f745c59146103c357806339c36fa0146103e35780633f8121a21461041057806342842e0e146104305780634f6ccce71461045057600080fd5b806301ffc9a7146102b357806306fdde03146102e8578063081812fc1461030a578063095ea7b31461034257806318160ddd146103645780631ed7dd0714610383575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004612770565b6108ac565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b506102fd6108d7565b6040516102df9190612999565b34801561031657600080fd5b5061032a610325366004612810565b610969565b6040516001600160a01b0390911681526020016102df565b34801561034e57600080fd5b5061036261035d366004612660565b6109f6565b005b34801561037057600080fd5b506002545b6040519081526020016102df565b34801561038f57600080fd5b50600f5461032a906001600160a01b031681565b3480156103af57600080fd5b506103626103be36600461256a565b610b0c565b3480156103cf57600080fd5b506103756103de366004612660565b610b3d565b3480156103ef57600080fd5b506103756103fe36600461250d565b60126020526000908152604090205481565b34801561041c57600080fd5b5061036261042b366004612755565b610bf0565b34801561043c57600080fd5b5061036261044b36600461256a565b610c34565b34801561045c57600080fd5b5061037561046b366004612810565b610c4f565b34801561047c57600080fd5b50610375600b5481565b34801561049257600080fd5b506007546102d390610100900460ff1681565b3480156104b157600080fd5b506103626104c03660046127c7565b610cbc565b3480156104d157600080fd5b506102d36104e036600461250d565b60146020526000908152604090205460ff1681565b34801561050157600080fd5b5061032a610510366004612810565b610cfd565b34801561052157600080fd5b506007546102d39060ff1681565b61036261053d366004612810565b610d89565b34801561054e57600080fd5b5061036261055d36600461268c565b610f8f565b34801561056e57600080fd5b506102fd611034565b34801561058357600080fd5b5061037561059236600461250d565b6110c2565b3480156105a357600080fd5b50610362611190565b3480156105b857600080fd5b506103626105c7366004612755565b6111c6565b3480156105d857600080fd5b506105ec6105e736600461250d565b611203565b6040516102df9190612955565b34801561060557600080fd5b506005546001600160a01b031661032a565b34801561062357600080fd5b50610362610632366004612810565b6112a5565b34801561064357600080fd5b5061037560095481565b34801561065957600080fd5b506102fd6112d4565b34801561066e57600080fd5b5061036261067d366004612810565b6112e3565b34801561068e57600080fd5b506102d361069d36600461250d565b60156020526000908152604090205460ff1681565b3480156106be57600080fd5b50610375600a5481565b3480156106d457600080fd5b506103626106e336600461262b565b6113c2565b3480156106f457600080fd5b506103626107033660046125ab565b611487565b610362610716366004612810565b6114bf565b34801561072757600080fd5b506102fd610736366004612810565b61161e565b34801561074757600080fd5b50600d5461032a906001600160a01b031681565b34801561076757600080fd5b5061036261077636600461250d565b61169f565b34801561078757600080fd5b506102d3610796366004612531565b6116eb565b3480156107a757600080fd5b5060115461032a906001600160a01b031681565b3480156107c757600080fd5b506103626107d636600461250d565b6117de565b3480156107e757600080fd5b5060105461032a906001600160a01b031681565b34801561080757600080fd5b5061036261081636600461250d565b611879565b610362610829366004612810565b6118cc565b34801561083a57600080fd5b506102fd611b07565b34801561084f57600080fd5b50600e5461032a906001600160a01b031681565b610362610871366004612810565b611b14565b34801561088257600080fd5b5061037560085481565b34801561089857600080fd5b506103626108a73660046127c7565b611c36565b60006001600160e01b0319821663780e9d6360e01b14806108d157506108d182611c79565b92915050565b6060600080546108e690612c92565b80601f016020809104026020016040519081016040528092919081815260200182805461091290612c92565b801561095f5780601f106109345761010080835404028352916020019161095f565b820191906000526020600020905b81548152906001019060200180831161094257829003601f168201915b5050505050905090565b600061097482611cc9565b6109da5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610a0182610cfd565b9050806001600160a01b0316836001600160a01b03161415610a6f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109d1565b336001600160a01b0382161480610a8b5750610a8b81336116eb565b610afd5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109d1565b610b078383611d13565b505050565b610b163382611d81565b610b325760405162461bcd60e51b81526004016109d190612b5e565b610b07838383611e43565b6000610b48836110c2565b8210610b665760405162461bcd60e51b81526004016109d1906129ac565b6000805b600254811015610bd75760028181548110610b8757610b87612d28565b6000918252602090912001546001600160a01b0386811691161415610bc55783821415610bb75791506108d19050565b81610bc181612ccd565b9250505b80610bcf81612ccd565b915050610b6a565b5060405162461bcd60e51b81526004016109d1906129ac565b6005546001600160a01b03163314610c1a5760405162461bcd60e51b81526004016109d190612a90565b600780549115156101000261ff0019909216919091179055565b610b0783838360405180602001604052806000815250611487565b6002546000908210610cb85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109d1565b5090565b6005546001600160a01b03163314610ce65760405162461bcd60e51b81526004016109d190612a90565b8051610cf990600c90602084019061239e565b5050565b60008060028381548110610d1357610d13612d28565b6000918252602090912001546001600160a01b03169050806108d15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109d1565b6000610d9460025490565b60075490915060ff16610db95760405162461bcd60e51b81526004016109d190612b1d565b3360009081526013602052604090205415610e225760405162461bcd60e51b815260206004820152602360248201527f596f7572204672656520746f6b656e20697320616c726561647920636c61696d60448201526232b21760e91b60648201526084016109d1565b600082118015610e325750600282105b610e935760405162461bcd60e51b815260206004820152602c60248201527f596f75206172652061626c6520746f206d696e74206f6e65202831292046726560448201526b329020a322103a37b5b2b71760a11b60648201526084016109d1565b60ff610e9f8383612c04565b1115610f0d5760405162461bcd60e51b81526020600482015260436024820152600080516020612d8083398151915260448201527f616e206d617820737570706c79206f6620465245452041696d6c65737320466960648201526239b41760e91b608482015260a4016109d1565b81600b54610f1b9190612c30565b3414610f395760405162461bcd60e51b81526004016109d190612a49565b60005b82811015610b0757336000908152601360205260408120805460019290610f64908490612c04565b90915550610f7d905033610f788385612c04565b611f99565b80610f8781612ccd565b915050610f3c565b6005546001600160a01b03163314610fb95760405162461bcd60e51b81526004016109d190612a90565b60005b8251811015610b0757818181518110610fd757610fd7612d28565b602002602001015160126000858481518110610ff557610ff5612d28565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061102c90612ccd565b915050610fbc565b600c805461104190612c92565b80601f016020809104026020016040519081016040528092919081815260200182805461106d90612c92565b80156110ba5780601f1061108f576101008083540402835291602001916110ba565b820191906000526020600020905b81548152906001019060200180831161109d57829003601f168201915b505050505081565b60006001600160a01b03821661112d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109d1565b6000805b600254811015611189576002818154811061114e5761114e612d28565b6000918252602090912001546001600160a01b03858116911614156111795761117682612ccd565b91505b61118281612ccd565b9050611131565b5092915050565b6005546001600160a01b031633146111ba5760405162461bcd60e51b81526004016109d190612a90565b6111c46000611fb3565b565b6005546001600160a01b031633146111f05760405162461bcd60e51b81526004016109d190612a90565b6007805460ff1916911515919091179055565b60606000611210836110c2565b905060008167ffffffffffffffff81111561122d5761122d612d3e565b604051908082528060200260200182016040528015611256578160200160208202803683370190505b50905060005b8281101561129d5761126e8582610b3d565b82828151811061128057611280612d28565b60209081029190910101528061129581612ccd565b91505061125c565b509392505050565b6005546001600160a01b031633146112cf5760405162461bcd60e51b81526004016109d190612a90565b600a55565b6060600180546108e690612c92565b6005546001600160a01b0316331461130d5760405162461bcd60e51b81526004016109d190612a90565b60095481111561137d5760405162461bcd60e51b815260206004820152603560248201527f596f7520617265206e6f742061626c6520746f2072657365727665206d6f7265604482015274103a3430b7103a34329039b2ba1030b6b7bab73a1760591b60648201526084016109d1565b806009600082825461138f9190612c4f565b909155505060025460005b82811015610b07576113b033610f788385612c04565b806113ba81612ccd565b91505061139a565b6001600160a01b03821633141561141b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109d1565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114913383611d81565b6114ad5760405162461bcd60e51b81526004016109d190612b5e565b6114b984848484612005565b50505050565b60006114ca60025490565b60075490915060ff166114ef5760405162461bcd60e51b81526004016109d190612b1d565b610abe6114fc8383612c04565b111561151a5760405162461bcd60e51b81526004016109d190612ac5565b60008211801561152a5750601d82105b61159c5760405162461bcd60e51b815260206004820152603e60248201527f596f75206172652061626c6520746f206d696e74206265747765656e20312d3260448201527f382041464420746f6b656e73206174207468652073616d652074696d652e000060648201526084016109d1565b610abe6115a98383612c04565b11156115c75760405162461bcd60e51b81526004016109d190612ac5565b81600a546115d59190612c30565b34146115f35760405162461bcd60e51b81526004016109d190612a49565b60005b82811015610b075761160c33610f788385612c04565b8061161681612ccd565b9150506115f6565b606061162982611cc9565b61166d5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109d1565b600c61167883612038565b604051602001611689929190612871565b6040516020818303038152906040529050919050565b6005546001600160a01b031633146116c95760405162461bcd60e51b81526004016109d190612a90565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177091906127aa565b6001600160a01b0316148061179d57506001600160a01b03831660009081526014602052604090205460ff165b156117ac5760019150506108d1565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b031633146118085760405162461bcd60e51b81526004016109d190612a90565b6001600160a01b03811661186d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d1565b61187681611fb3565b50565b6005546001600160a01b031633146118a35760405162461bcd60e51b81526004016109d190612a90565b6001600160a01b03166000908152601460205260409020805460ff19811660ff90911615179055565b60006118d760025490565b3360009081526012602052604090205460075491925090610100900460ff1661194c5760405162461bcd60e51b815260206004820152602160248201527f546865204146442070726573616c652069736e277420616374697665207965746044820152601760f91b60648201526084016109d1565b600081116119b35760405162461bcd60e51b815260206004820152602e60248201527f546865726520617265206e6f20746f6b656e7320726573657276656420666f7260448201526d103cb7bab91030b2323932b9b99760911b60648201526084016109d1565b80831115611a175760405162461bcd60e51b815260206004820152603b6024820152600080516020612d8083398151915260448201527f616e207768617420697320726573657276656420746f20796f752e000000000060648201526084016109d1565b60ff611a238484612c04565b1115611a955760405162461bcd60e51b81526020600482015260476024820152600080516020612d8083398151915260448201527f616e20746865206d617820737570706c79206f6620465245452041696d6c657360648201526639902334b9b41760c91b608482015260a4016109d1565b82600b54611aa39190612c30565b3414611ac15760405162461bcd60e51b81526004016109d190612a49565b611acb8382612c4f565b336000908152601260205260408120919091555b838110156114b957611af533610f788386612c04565b80611aff81612ccd565b915050611adf565b6006805461104190612c92565b6005546001600160a01b03163314611b3e5760405162461bcd60e51b81526004016109d190612a90565b6000611b4b606483612c1c565b600e549091506001600160a01b03166108fc611b68836021612c30565b6040518115909202916000818181858888f19350505050611b8857600080fd5b600f546001600160a01b03166108fc611ba2836019612c30565b6040518115909202916000818181858888f19350505050611bc257600080fd5b6010546001600160a01b03166108fc611bdc836005612c30565b6040518115909202916000818181858888f19350505050611bfc57600080fd5b6011546001600160a01b03166108fc611c16836026612c30565b6040518115909202916000818181858888f19350505050610cf957600080fd5b6005546001600160a01b03163314611c605760405162461bcd60e51b81526004016109d190612a90565b8051610cf990600690602084019061239e565b3b151590565b60006001600160e01b031982166380ac58cd60e01b1480611caa57506001600160e01b03198216635b5e139f60e01b145b806108d157506301ffc9a760e01b6001600160e01b03198316146108d1565b600254600090821080156108d1575060006001600160a01b031660028381548110611cf657611cf6612d28565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d4882610cfd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d8c82611cc9565b611ded5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109d1565b6000611df883610cfd565b9050806001600160a01b0316846001600160a01b03161480611e335750836001600160a01b0316611e2884610969565b6001600160a01b0316145b806117d657506117d681856116eb565b826001600160a01b0316611e5682610cfd565b6001600160a01b031614611ebe5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109d1565b6001600160a01b038216611f205760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d1565b611f2b600082611d13565b8160028281548110611f3f57611f3f612d28565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b610cf9828260405180602001604052806000815250612136565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612010848484611e43565b61201c84848484612169565b6114b95760405162461bcd60e51b81526004016109d1906129f7565b60608161205c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612086578061207081612ccd565b915061207f9050600a83612c1c565b9150612060565b60008167ffffffffffffffff8111156120a1576120a1612d3e565b6040519080825280601f01601f1916602001820160405280156120cb576020820181803683370190505b5090505b84156117d6576120e0600183612c4f565b91506120ed600a86612ce8565b6120f8906030612c04565b60f81b81838151811061210d5761210d612d28565b60200101906001600160f81b031916908160001a90535061212f600a86612c1c565b94506120cf565b6121408383612276565b61214d6000848484612169565b610b075760405162461bcd60e51b81526004016109d1906129f7565b60006001600160a01b0384163b1561226b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121ad903390899088908890600401612918565b602060405180830381600087803b1580156121c757600080fd5b505af19250505080156121f7575060408051601f3d908101601f191682019092526121f49181019061278d565b60015b612251573d808015612225576040519150601f19603f3d011682016040523d82523d6000602084013e61222a565b606091505b5080516122495760405162461bcd60e51b81526004016109d1906129f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117d6565b506001949350505050565b6001600160a01b0382166122cc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109d1565b6122d581611cc9565b156123225760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109d1565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546123aa90612c92565b90600052602060002090601f0160209004810192826123cc5760008555612412565b82601f106123e557805160ff1916838001178555612412565b82800160010185558215612412579182015b828111156124125782518255916020019190600101906123f7565b50610cb89291505b80821115610cb8576000815560010161241a565b600067ffffffffffffffff83111561244857612448612d3e565b61245b601f8401601f1916602001612baf565b905082815283838301111561246f57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261249757600080fd5b813560206124ac6124a783612be0565b612baf565b80838252828201915082860187848660051b89010111156124cc57600080fd5b60005b858110156124eb578135845292840192908401906001016124cf565b5090979650505050505050565b8035801515811461250857600080fd5b919050565b60006020828403121561251f57600080fd5b813561252a81612d54565b9392505050565b6000806040838503121561254457600080fd5b823561254f81612d54565b9150602083013561255f81612d54565b809150509250929050565b60008060006060848603121561257f57600080fd5b833561258a81612d54565b9250602084013561259a81612d54565b929592945050506040919091013590565b600080600080608085870312156125c157600080fd5b84356125cc81612d54565b935060208501356125dc81612d54565b925060408501359150606085013567ffffffffffffffff8111156125ff57600080fd5b8501601f8101871361261057600080fd5b61261f8782356020840161242e565b91505092959194509250565b6000806040838503121561263e57600080fd5b823561264981612d54565b9150612657602084016124f8565b90509250929050565b6000806040838503121561267357600080fd5b823561267e81612d54565b946020939093013593505050565b6000806040838503121561269f57600080fd5b823567ffffffffffffffff808211156126b757600080fd5b818501915085601f8301126126cb57600080fd5b813560206126db6124a783612be0565b8083825282820191508286018a848660051b89010111156126fb57600080fd5b600096505b8487101561272757803561271381612d54565b835260019690960195918301918301612700565b509650508601359250508082111561273e57600080fd5b5061274b85828601612486565b9150509250929050565b60006020828403121561276757600080fd5b61252a826124f8565b60006020828403121561278257600080fd5b813561252a81612d69565b60006020828403121561279f57600080fd5b815161252a81612d69565b6000602082840312156127bc57600080fd5b815161252a81612d54565b6000602082840312156127d957600080fd5b813567ffffffffffffffff8111156127f057600080fd5b8201601f8101841361280157600080fd5b6117d68482356020840161242e565b60006020828403121561282257600080fd5b5035919050565b60008151808452612841816020860160208601612c66565b601f01601f19169290920160200192915050565b60008151612867818560208601612c66565b9290920192915050565b600080845481600182811c91508083168061288d57607f831692505b60208084108214156128ad57634e487b7160e01b86526022600452602486fd5b8180156128c157600181146128d2576128ff565b60ff198616895284890196506128ff565b60008b81526020902060005b868110156128f75781548b8201529085019083016128de565b505084890196505b50505050505061290f8185612855565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061294b90830184612829565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561298d57835183529284019291840191600101612971565b50909695505050505050565b60208152600061252a6020830184612829565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526027908201527f4f7070732120596f752073656e74207468652077726f6e6720616d6f756e742060408201526637b31022aa241760c91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252604490820152600080516020612d8083398151915260408201527f616e206d617820737570706c79206f6620746f74616c2041696d6c657373204660608201526334b9b41760e11b608082015260a00190565b60208082526021908201527f54686520414644207075626c69632073616c652069736e2774206163746976656040820152601760f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bd857612bd8612d3e565b604052919050565b600067ffffffffffffffff821115612bfa57612bfa612d3e565b5060051b60200190565b60008219821115612c1757612c17612cfc565b500190565b600082612c2b57612c2b612d12565b500490565b6000816000190483118215151615612c4a57612c4a612cfc565b500290565b600082821015612c6157612c61612cfc565b500390565b60005b83811015612c81578181015183820152602001612c69565b838111156114b95750506000910152565b600181811c90821680612ca657607f821691505b60208210811415612cc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ce157612ce1612cfc565b5060010190565b600082612cf757612cf7612d12565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461187657600080fd5b6001600160e01b03198116811461187657600080fdfe596f7520617265206e6f742061626c6520746f206d696e74206d6f7265207468a2646970667358221220cf242acddbedce04a5d415457ec70deb59eb05b9f56fa56e0ff1bb2caf11390564736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000001c687474703a2f2f6e66742e6b656e6c657962726f776e652e636f6d2f00000000

-----Decoded View---------------
Arg [0] : _baseURI (string): http://nft.kenleybrowne.com/
Arg [1] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [2] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [3] : 687474703a2f2f6e66742e6b656e6c657962726f776e652e636f6d2f00000000


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.