ETH Price: $3,372.69 (-3.26%)
Gas: 6.36 Gwei

Token

CosmicCritters (CRITTER)
 

Overview

Max Total Supply

0 CRITTER

Holders

239

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
vanader.eth
Balance
1 CRITTER
0xdC83c95f7090e2a643F5FdBC3120B91eD90c3755
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:
CosmicCritters

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 3 of 11: CosmicCritters.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./Ownable.sol";

contract CosmicCritters is ERC721, Ownable {
    using Address for address;
    using Strings for uint256;
    
    // metadata
    bool public metadataLocked = false;
    string public baseURI = "";

    // supply and phases
    mapping(uint256 => uint256) public supplyForPhase;
    mapping(uint256 => uint256) public reserveForPhase;
    mapping(uint256 => uint256) public mintIndexForPhase;
    bool public presaleEnded = true;
    bool public publicSaleEnded = false;
    bool public mintPaused = false;
    uint256 public currentPhase = 0;

    // presale whitelist
    mapping(address => bool) public isWhitelisted;
    mapping(uint256 => mapping(address => uint256)) public mintedDuringPresaleAtPhase;
    event SetWhitelist(address[] added, address[] removed);
    
    // price
    uint256 public price12 = 0.07 ether;
    uint256 public price34 = 0.065 ether;
    uint256 public price56 = 0.06 ether;

    // limits
    uint256 public maxPerTxDuringSale = 6;
    uint256 public maxPerWalletDuringPresale = 2;
    
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection, and by setting supply caps, mint indexes, and reserves
     */
    constructor()
        ERC721("CosmicCritters", "CRITTER")
    {
        supplyForPhase[1] = 2222;
        supplyForPhase[2] = 2222;
        supplyForPhase[3] = 2222;
        supplyForPhase[4] = 1111;

        reserveForPhase[1] = 55 + 110;
        reserveForPhase[2] = 55;
        reserveForPhase[3] = 55;
        reserveForPhase[4] = 35;

        mintIndexForPhase[1] = 0;
        mintIndexForPhase[2] = 2222;
        mintIndexForPhase[3] = 4444;
        mintIndexForPhase[4] = 6666;
    }
    
    /**
     * ------------ METADATA ------------ 
     */

    /**
     * @dev Gets base metadata URI
     */
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
    /**
     * @dev Sets base metadata URI, callable by owner
     */
    function setBaseUri(string memory _uri) external onlyOwner {
        require(metadataLocked == false);
        baseURI = _uri;
    }
    
    /**
     * @dev Lock metadata URI forever, callable by owner
     */
    function lockMetadata() external onlyOwner {
        require(metadataLocked == false);
        metadataLocked = true;
    }
    
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
        
        string memory base = _baseURI();
        return string(abi.encodePacked(base, tokenId.toString()));
    }
    
    /**
     * ------------ SALE AND PRESALE ------------ 
     */
     
    /**
     * @dev Ends public sale forever, callable by owner
     */
    function endSaleForever() external onlyOwner {
        publicSaleEnded = true;
    }
    
    /**
     * @dev Ends the presale, callable by owner
     */
    function endPresaleForCurrentPhase() external onlyOwner {
        presaleEnded = true;
    }

    /**
     * @dev Advance sale phase
     */
    function advanceToPresaleOfNextPhase() external onlyOwner {
        require(presaleEnded);
        require(currentPhase < 4);
        currentPhase++;
        presaleEnded = false;
    }

    /**
     * @dev Pause/unpause sale or presale
     */
    function togglePauseMinting() external onlyOwner {
        mintPaused = !mintPaused;
    }

    /**
     * ------------ CONFIGURATION ------------ 
     */

    /**
     * @dev Edit whitelist
     */
    function editWhitelist(address[] calldata walletsToAdd, address[] calldata walletsToRemove) external onlyOwner {
        for (uint256 i = 0; i < walletsToAdd.length; i++) {
            isWhitelisted[walletsToAdd[i]] = true;
        }
        for (uint256 i = 0; i < walletsToRemove.length; i++) {
            isWhitelisted[walletsToRemove[i]] = false;
        }

        emit SetWhitelist(walletsToAdd, walletsToRemove);
    }

    /**
     * @dev Edit sale parameters: price points and count limits
     */
    function editParameters(uint256 _price12, uint256 _price34, uint256 _price56, uint256 _maxPerTxDuringSale, uint256 _maxPerWalletDuringPresale) external onlyOwner {
        price12 = _price12;
        price34 = _price34;
        price56 = _price56;
        maxPerTxDuringSale = _maxPerTxDuringSale;
        maxPerWalletDuringPresale = _maxPerWalletDuringPresale;
    }
     
    /**
     * ------------ MINTING ------------ 
     */
    
    /**
     * @dev Mints `count` tokens to `to` address in `phase` phase of sale; phase can be one of [1,2,3,4]; internal
     */
    function mintInternal(address to, uint256 count, uint256 phase) internal {
        for (uint256 i = 0; i < count; i++) {
            _mint(to, mintIndexForPhase[phase]);
            mintIndexForPhase[phase]++;
        }
    }
    
    /**
     * @dev Manual minting by owner, callable by owner; phase can be one of [1,2,3,4]
     */
    function mintOwner(address[] calldata owners, uint256[] calldata counts, uint256 phase) external onlyOwner {
        require(owners.length == counts.length, "Bad length");
         
        for (uint256 i = 0; i < counts.length; i++) {
            require(reserveForPhase[phase] >= counts[i], "Reserve exceeded");
            
            mintInternal(owners[i], counts[i], phase);
            reserveForPhase[phase] -= counts[i];
            supplyForPhase[phase] -= counts[i];
        }
    }
    
    /**
     * @dev Gets the price tier from token count
     */
    function getPrice(uint256 count) public view returns (uint256) {
        if (count <= 2) {
            return price12;
        } else if (count <= 4) {
            return price34;
        } else {
            return price56;
        }
    }
    
    /**
     * @dev Public minting during public sale or presale
     */
    function mint(uint256 count) public payable{
        require(!mintPaused, "Minting is currently paused");
        require(currentPhase > 0, "Sale not started");
        require(publicSaleEnded == false, "Sale ended");

        require(msg.value == count * getPrice(count), "Ether value incorrect");
        require(supplyForPhase[currentPhase] - reserveForPhase[currentPhase] >= count, "Supply exceeded");
        
        if (presaleEnded) {
            // public sale checks
            require(count <= maxPerTxDuringSale, "Too many tokens");
        } else {
            // presale checks
            require(isWhitelisted[msg.sender], "You are not whitelisted");
            require(mintedDuringPresaleAtPhase[currentPhase][msg.sender] + count <= maxPerWalletDuringPresale, "Count exceeded during presale");
            mintedDuringPresaleAtPhase[currentPhase][msg.sender] += count;
        }
        
        supplyForPhase[currentPhase] -= count;
        mintInternal(msg.sender, count, currentPhase);
    }

    /**
     * @dev Withdraw ether from this contract, callable by owner
     */
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

File 1 of 11: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 11: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 4 of 11: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 5 of 11: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    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 (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @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 {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @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 {
        _setApprovalForAll(_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 _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);

        _balances[to] += 1;
        _owners[tokenId] = 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);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        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);

        _balances[from] -= 1;
        _balances[to] += 1;
        _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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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 11: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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);
}

File 7 of 11: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./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 8 of 11: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 9 of 11: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./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 11 of 11: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"added","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"removed","type":"address[]"}],"name":"SetWhitelist","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":"advanceToPresaleOfNextPhase","outputs":[],"stateMutability":"nonpayable","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":[],"name":"currentPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price12","type":"uint256"},{"internalType":"uint256","name":"_price34","type":"uint256"},{"internalType":"uint256","name":"_price56","type":"uint256"},{"internalType":"uint256","name":"_maxPerTxDuringSale","type":"uint256"},{"internalType":"uint256","name":"_maxPerWalletDuringPresale","type":"uint256"}],"name":"editParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"walletsToAdd","type":"address[]"},{"internalType":"address[]","name":"walletsToRemove","type":"address[]"}],"name":"editWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresaleForCurrentPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSaleForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxPerTxDuringSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWalletDuringPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintIndexForPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"counts","type":"uint256[]"},{"internalType":"uint256","name":"phase","type":"uint256"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"mintedDuringPresaleAtPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price12","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price34","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price56","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveForPhase","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyForPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"togglePauseMinting","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6006805460ff60a01b1916905560a060408190526000608081905262000028916007916200031c565b50600b805462ffffff191660011790556000600c5566f8b0a10e470000600f5566e6ed27d666800060105566d529ae9e860000601155600660125560026013553480156200007557600080fd5b50604080518082018252600e81526d436f736d6963437269747465727360901b60208083019182528351808501909452600784526621a924aa2a22a960c91b908401528151919291620000cb916000916200031c565b508051620000e19060019060208401906200031c565b505050620000fe620000f8620002c660201b60201c565b620002ca565b6108ae7fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f8190557f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea90418190557f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d264558190556104577f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b85560a57f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365560377f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38190557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e75560237f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb55600a60205260007fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc78190557fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba89190915561115c7fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa397595560049052611a0a7fe1eb2b2161a492c07c5a334e48012567cba93ec021043f53c1955516a3c5a84155620003ff565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200032a90620003c2565b90600052602060002090601f0160209004810192826200034e576000855562000399565b82601f106200036957805160ff191683800117855562000399565b8280016001018555821562000399579182015b82811115620003995782518255916020019190600101906200037c565b50620003a7929150620003ab565b5090565b5b80821115620003a75760008155600101620003ac565b600181811c90821680620003d757607f821691505b60208210811415620003f957634e487b7160e01b600052602260045260246000fd5b50919050565b61278e806200040f6000396000f3fe6080604052600436106102655760003560e01c8063715018a611610144578063b88d4fde116100b6578063f1489ecd1161007a578063f1489ecd14610735578063f2bb4f5214610755578063f2fde38b14610775578063f61cab9c14610795578063f61d231b146107c2578063f89ef1df146107d857600080fd5b8063b88d4fde14610672578063c87b56dd14610692578063e580b2b0146106b2578063e7572230146106cc578063e985e9c5146106ec57600080fd5b806395d89b411161010857806395d89b41146105bd578063989bdbb6146105d2578063a04ceec5146105e7578063a0712d681461061f578063a0bcfc7f14610632578063a22cb4651461065257600080fd5b8063715018a61461053f57806378279e96146105545780637e4831d31461056a57806382c6ee9f1461058a5780638da5cb5b1461059f57600080fd5b806323b872dd116101dd5780635689d1a9116101a15780635689d1a9146104875780635b33dea31461049c5780636352211e146104c957806369d2ceb1146104e95780636c0360eb1461050a57806370a082311461051f57600080fd5b806323b872dd146103ed5780633af32abf1461040d5780633ccfd60b1461043d5780633e53afc31461045257806342842e0e1461046757600080fd5b80630793f1da1161022f5780630793f1da1461031d578063081812fc14610333578063095ea7b31461036b57806309b24a581461038b578063125e0af0146103b857806320205a2d146103d757600080fd5b8062ab70841461026a578062fdceda1461028c57806301ffc9a7146102b5578063055ad42e146102e557806306fdde03146102fb575b600080fd5b34801561027657600080fd5b5061028a6102853660046123bb565b6107ed565b005b34801561029857600080fd5b506102a260125481565b6040519081526020015b60405180910390f35b3480156102c157600080fd5b506102d56102d03660046122fc565b610837565b60405190151581526020016102ac565b3480156102f157600080fd5b506102a2600c5481565b34801561030757600080fd5b50610310610889565b6040516102ac9190612507565b34801561032957600080fd5b506102a260135481565b34801561033f57600080fd5b5061035361034e36600461237f565b61091b565b6040516001600160a01b0390911681526020016102ac565b34801561037757600080fd5b5061028a6103863660046121f2565b6109b0565b34801561039757600080fd5b506102a26103a636600461237f565b600a6020526000908152604090205481565b3480156103c457600080fd5b50600b546102d590610100900460ff1681565b3480156103e357600080fd5b506102a260105481565b3480156103f957600080fd5b5061028a6104083660046120fe565b610ac6565b34801561041957600080fd5b506102d56104283660046120a9565b600d6020526000908152604090205460ff1681565b34801561044957600080fd5b5061028a610af7565b34801561045e57600080fd5b5061028a610b54565b34801561047357600080fd5b5061028a6104823660046120fe565b610b9d565b34801561049357600080fd5b5061028a610bb8565b3480156104a857600080fd5b506102a26104b736600461237f565b60086020526000908152604090205481565b3480156104d557600080fd5b506103536104e436600461237f565b610bf1565b3480156104f557600080fd5b506006546102d590600160a01b900460ff1681565b34801561051657600080fd5b50610310610c68565b34801561052b57600080fd5b506102a261053a3660046120a9565b610cf6565b34801561054b57600080fd5b5061028a610d7d565b34801561056057600080fd5b506102a260115481565b34801561057657600080fd5b50600b546102d59062010000900460ff1681565b34801561059657600080fd5b5061028a610db3565b3480156105ab57600080fd5b506006546001600160a01b0316610353565b3480156105c957600080fd5b50610310610dee565b3480156105de57600080fd5b5061028a610dfd565b3480156105f357600080fd5b506102a2610602366004612398565b600e60209081526000928352604080842090915290825290205481565b61028a61062d36600461237f565b610e53565b34801561063e57600080fd5b5061028a61064d366004612336565b61118e565b34801561065e57600080fd5b5061028a61066d3660046121b6565b6111e2565b34801561067e57600080fd5b5061028a61068d36600461213a565b6111ed565b34801561069e57600080fd5b506103106106ad36600461237f565b611225565b3480156106be57600080fd5b50600b546102d59060ff1681565b3480156106d857600080fd5b506102a26106e736600461237f565b6112e4565b3480156106f857600080fd5b506102d56107073660046120cb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074157600080fd5b5061028a61075036600461221c565b611313565b34801561076157600080fd5b5061028a610770366004612288565b611466565b34801561078157600080fd5b5061028a6107903660046120a9565b61162a565b3480156107a157600080fd5b506102a26107b036600461237f565b60096020526000908152604090205481565b3480156107ce57600080fd5b506102a2600f5481565b3480156107e457600080fd5b5061028a6116c2565b6006546001600160a01b031633146108205760405162461bcd60e51b81526004016108179061256c565b60405180910390fd5b600f94909455601092909255601155601255601355565b60006001600160e01b031982166380ac58cd60e01b148061086857506001600160e01b03198216635b5e139f60e01b145b8061088357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461089890612680565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490612680565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109945760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610817565b506000908152600460205260409020546001600160a01b031690565b60006109bb82610bf1565b9050806001600160a01b0316836001600160a01b03161415610a295760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610817565b336001600160a01b0382161480610a455750610a458133610707565b610ab75760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610817565b610ac1838361172b565b505050565b610ad03382611799565b610aec5760405162461bcd60e51b8152600401610817906125a1565b610ac1838383611890565b6006546001600160a01b03163314610b215760405162461bcd60e51b81526004016108179061256c565b6040514790339082156108fc029083906000818181858888f19350505050158015610b50573d6000803e3d6000fd5b5050565b6006546001600160a01b03163314610b7e5760405162461bcd60e51b81526004016108179061256c565b600b805462ff0000198116620100009182900460ff1615909102179055565b610ac1838383604051806020016040528060008152506111ed565b6006546001600160a01b03163314610be25760405162461bcd60e51b81526004016108179061256c565b600b805460ff19166001179055565b6000818152600260205260408120546001600160a01b0316806108835760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610817565b60078054610c7590612680565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca190612680565b8015610cee5780601f10610cc357610100808354040283529160200191610cee565b820191906000526020600020905b815481529060010190602001808311610cd157829003601f168201915b505050505081565b60006001600160a01b038216610d615760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610817565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610da75760405162461bcd60e51b81526004016108179061256c565b610db16000611a30565b565b6006546001600160a01b03163314610ddd5760405162461bcd60e51b81526004016108179061256c565b600b805461ff001916610100179055565b60606001805461089890612680565b6006546001600160a01b03163314610e275760405162461bcd60e51b81526004016108179061256c565b600654600160a01b900460ff1615610e3e57600080fd5b6006805460ff60a01b1916600160a01b179055565b600b5462010000900460ff1615610eac5760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e672069732063757272656e746c792070617573656400000000006044820152606401610817565b6000600c5411610ef15760405162461bcd60e51b815260206004820152601060248201526f14d85b19481b9bdd081cdd185c9d195960821b6044820152606401610817565b600b54610100900460ff1615610f365760405162461bcd60e51b815260206004820152600a60248201526914d85b1948195b99195960b21b6044820152606401610817565b610f3f816112e4565b610f49908261261e565b3414610f8f5760405162461bcd60e51b8152602060048201526015602482015274115d1a195c881d985b1d59481a5b98dbdc9c9958dd605a1b6044820152606401610817565b600c546000908152600960209081526040808320546008909252909120548291610fb89161263d565b1015610ff85760405162461bcd60e51b815260206004820152600f60248201526e14dd5c1c1b1e48195e18d959591959608a1b6044820152606401610817565b600b5460ff161561104c576012548111156110475760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920746f6b656e7360881b6044820152606401610817565b611156565b336000908152600d602052604090205460ff166110ab5760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f742077686974656c69737465640000000000000000006044820152606401610817565b601354600c546000908152600e602090815260408083203384529091529020546110d69083906125f2565b11156111245760405162461bcd60e51b815260206004820152601d60248201527f436f756e7420657863656564656420647572696e672070726573616c650000006044820152606401610817565b600c546000908152600e60209081526040808320338452909152812080548392906111509084906125f2565b90915550505b600c546000908152600860205260408120805483929061117790849061263d565b9250508190555061118b3382600c54611a82565b50565b6006546001600160a01b031633146111b85760405162461bcd60e51b81526004016108179061256c565b600654600160a01b900460ff16156111cf57600080fd5b8051610b50906007906020840190611f37565b610b50338383611ad9565b6111f73383611799565b6112135760405162461bcd60e51b8152600401610817906125a1565b61121f84848484611ba8565b50505050565b6000818152600260205260409020546060906001600160a01b03166112a65760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610817565b60006112b0611bdb565b9050806112bc84611bea565b6040516020016112cd929190612469565b604051602081830303815290604052915050919050565b6000600282116112f6575050600f5490565b6004821161130657505060105490565b505060115490565b919050565b6006546001600160a01b0316331461133d5760405162461bcd60e51b81526004016108179061256c565b60005b838110156113af576001600d600087878581811061136057611360612716565b905060200201602081019061137591906120a9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113a7816126bb565b915050611340565b5060005b81811015611422576000600d60008585858181106113d3576113d3612716565b90506020020160208101906113e891906120a9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061141a816126bb565b9150506113b3565b507f9664270f0974d24d8c43232d9cd144776a2681af2d10368a8d1f694ce0d704418484848460405161145894939291906124d5565b60405180910390a150505050565b6006546001600160a01b031633146114905760405162461bcd60e51b81526004016108179061256c565b8382146114cc5760405162461bcd60e51b815260206004820152600a602482015269084c2c840d8cadccee8d60b31b6044820152606401610817565b60005b82811015611622578383828181106114e9576114e9612716565b90506020020135600960008481526020019081526020016000205410156115455760405162461bcd60e51b815260206004820152601060248201526f14995cd95c9d9948195e18d95959195960821b6044820152606401610817565b61158e86868381811061155a5761155a612716565b905060200201602081019061156f91906120a9565b85858481811061158157611581612716565b9050602002013584611a82565b8383828181106115a0576115a0612716565b905060200201356009600084815260200190815260200160002060008282546115c9919061263d565b9091555084905083828181106115e1576115e1612716565b9050602002013560086000848152602001908152602001600020600082825461160a919061263d565b9091555081905061161a816126bb565b9150506114cf565b505050505050565b6006546001600160a01b031633146116545760405162461bcd60e51b81526004016108179061256c565b6001600160a01b0381166116b95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610817565b61118b81611a30565b6006546001600160a01b031633146116ec5760405162461bcd60e51b81526004016108179061256c565b600b5460ff166116fb57600080fd5b6004600c541061170a57600080fd5b600c805490600061171a836126bb565b9091555050600b805460ff19169055565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061176082610bf1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118125760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610817565b600061181d83610bf1565b9050806001600160a01b0316846001600160a01b031614806118585750836001600160a01b031661184d8461091b565b6001600160a01b0316145b8061188857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166118a382610bf1565b6001600160a01b03161461190b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610817565b6001600160a01b03821661196d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610817565b61197860008261172b565b6001600160a01b03831660009081526003602052604081208054600192906119a190849061263d565b90915550506001600160a01b03821660009081526003602052604081208054600192906119cf9084906125f2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b8281101561121f576000828152600a6020526040902054611aa7908590611ce8565b6000828152600a60205260408120805491611ac1836126bb565b91905055508080611ad1906126bb565b915050611a85565b816001600160a01b0316836001600160a01b03161415611b3b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610817565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611bb3848484611890565b611bbf84848484611e2a565b61121f5760405162461bcd60e51b81526004016108179061251a565b60606007805461089890612680565b606081611c0e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c385780611c22816126bb565b9150611c319050600a8361260a565b9150611c12565b60008167ffffffffffffffff811115611c5357611c5361272c565b6040519080825280601f01601f191660200182016040528015611c7d576020820181803683370190505b5090505b841561188857611c9260018361263d565b9150611c9f600a866126d6565b611caa9060306125f2565b60f81b818381518110611cbf57611cbf612716565b60200101906001600160f81b031916908160001a905350611ce1600a8661260a565b9450611c81565b6001600160a01b038216611d3e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610817565b6000818152600260205260409020546001600160a01b031615611da35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610817565b6001600160a01b0382166000908152600360205260408120805460019290611dcc9084906125f2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15611f2c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e6e903390899088908890600401612498565b602060405180830381600087803b158015611e8857600080fd5b505af1925050508015611eb8575060408051601f3d908101601f19168201909252611eb591810190612319565b60015b611f12573d808015611ee6576040519150601f19603f3d011682016040523d82523d6000602084013e611eeb565b606091505b508051611f0a5760405162461bcd60e51b81526004016108179061251a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611888565b506001949350505050565b828054611f4390612680565b90600052602060002090601f016020900481019282611f655760008555611fab565b82601f10611f7e57805160ff1916838001178555611fab565b82800160010185558215611fab579182015b82811115611fab578251825591602001919060010190611f90565b50611fb7929150611fbb565b5090565b5b80821115611fb75760008155600101611fbc565b600067ffffffffffffffff80841115611feb57611feb61272c565b604051601f8501601f19908116603f011681019082821181831017156120135761201361272c565b8160405280935085815286868601111561202c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461130e57600080fd5b60008083601f84011261206f57600080fd5b50813567ffffffffffffffff81111561208757600080fd5b6020830191508360208260051b85010111156120a257600080fd5b9250929050565b6000602082840312156120bb57600080fd5b6120c482612046565b9392505050565b600080604083850312156120de57600080fd5b6120e783612046565b91506120f560208401612046565b90509250929050565b60008060006060848603121561211357600080fd5b61211c84612046565b925061212a60208501612046565b9150604084013590509250925092565b6000806000806080858703121561215057600080fd5b61215985612046565b935061216760208601612046565b925060408501359150606085013567ffffffffffffffff81111561218a57600080fd5b8501601f8101871361219b57600080fd5b6121aa87823560208401611fd0565b91505092959194509250565b600080604083850312156121c957600080fd5b6121d283612046565b9150602083013580151581146121e757600080fd5b809150509250929050565b6000806040838503121561220557600080fd5b61220e83612046565b946020939093013593505050565b6000806000806040858703121561223257600080fd5b843567ffffffffffffffff8082111561224a57600080fd5b6122568883890161205d565b9096509450602087013591508082111561226f57600080fd5b5061227c8782880161205d565b95989497509550505050565b6000806000806000606086880312156122a057600080fd5b853567ffffffffffffffff808211156122b857600080fd5b6122c489838a0161205d565b909750955060208801359150808211156122dd57600080fd5b506122ea8882890161205d565b96999598509660400135949350505050565b60006020828403121561230e57600080fd5b81356120c481612742565b60006020828403121561232b57600080fd5b81516120c481612742565b60006020828403121561234857600080fd5b813567ffffffffffffffff81111561235f57600080fd5b8201601f8101841361237057600080fd5b61188884823560208401611fd0565b60006020828403121561239157600080fd5b5035919050565b600080604083850312156123ab57600080fd5b823591506120f560208401612046565b600080600080600060a086880312156123d357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b8183526000602080850194508260005b85811015612432576001600160a01b0361241f83612046565b1687529582019590820190600101612406565b509495945050505050565b60008151808452612455816020860160208601612654565b601f01601f19169290920160200192915050565b6000835161247b818460208801612654565b83519083019061248f818360208801612654565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124cb9083018461243d565b9695505050505050565b6040815260006124e96040830186886123f6565b82810360208401526124fc8185876123f6565b979650505050505050565b6020815260006120c4602083018461243d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612605576126056126ea565b500190565b60008261261957612619612700565b500490565b6000816000190483118215151615612638576126386126ea565b500290565b60008282101561264f5761264f6126ea565b500390565b60005b8381101561266f578181015183820152602001612657565b8381111561121f5750506000910152565b600181811c9082168061269457607f821691505b602082108114156126b557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126cf576126cf6126ea565b5060010190565b6000826126e5576126e5612700565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461118b57600080fdfea264697066735822122086f9e06def56bee0b3d0ee0f3a8f0e21c330d47502fa769cb6055117dc65ce7364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102655760003560e01c8063715018a611610144578063b88d4fde116100b6578063f1489ecd1161007a578063f1489ecd14610735578063f2bb4f5214610755578063f2fde38b14610775578063f61cab9c14610795578063f61d231b146107c2578063f89ef1df146107d857600080fd5b8063b88d4fde14610672578063c87b56dd14610692578063e580b2b0146106b2578063e7572230146106cc578063e985e9c5146106ec57600080fd5b806395d89b411161010857806395d89b41146105bd578063989bdbb6146105d2578063a04ceec5146105e7578063a0712d681461061f578063a0bcfc7f14610632578063a22cb4651461065257600080fd5b8063715018a61461053f57806378279e96146105545780637e4831d31461056a57806382c6ee9f1461058a5780638da5cb5b1461059f57600080fd5b806323b872dd116101dd5780635689d1a9116101a15780635689d1a9146104875780635b33dea31461049c5780636352211e146104c957806369d2ceb1146104e95780636c0360eb1461050a57806370a082311461051f57600080fd5b806323b872dd146103ed5780633af32abf1461040d5780633ccfd60b1461043d5780633e53afc31461045257806342842e0e1461046757600080fd5b80630793f1da1161022f5780630793f1da1461031d578063081812fc14610333578063095ea7b31461036b57806309b24a581461038b578063125e0af0146103b857806320205a2d146103d757600080fd5b8062ab70841461026a578062fdceda1461028c57806301ffc9a7146102b5578063055ad42e146102e557806306fdde03146102fb575b600080fd5b34801561027657600080fd5b5061028a6102853660046123bb565b6107ed565b005b34801561029857600080fd5b506102a260125481565b6040519081526020015b60405180910390f35b3480156102c157600080fd5b506102d56102d03660046122fc565b610837565b60405190151581526020016102ac565b3480156102f157600080fd5b506102a2600c5481565b34801561030757600080fd5b50610310610889565b6040516102ac9190612507565b34801561032957600080fd5b506102a260135481565b34801561033f57600080fd5b5061035361034e36600461237f565b61091b565b6040516001600160a01b0390911681526020016102ac565b34801561037757600080fd5b5061028a6103863660046121f2565b6109b0565b34801561039757600080fd5b506102a26103a636600461237f565b600a6020526000908152604090205481565b3480156103c457600080fd5b50600b546102d590610100900460ff1681565b3480156103e357600080fd5b506102a260105481565b3480156103f957600080fd5b5061028a6104083660046120fe565b610ac6565b34801561041957600080fd5b506102d56104283660046120a9565b600d6020526000908152604090205460ff1681565b34801561044957600080fd5b5061028a610af7565b34801561045e57600080fd5b5061028a610b54565b34801561047357600080fd5b5061028a6104823660046120fe565b610b9d565b34801561049357600080fd5b5061028a610bb8565b3480156104a857600080fd5b506102a26104b736600461237f565b60086020526000908152604090205481565b3480156104d557600080fd5b506103536104e436600461237f565b610bf1565b3480156104f557600080fd5b506006546102d590600160a01b900460ff1681565b34801561051657600080fd5b50610310610c68565b34801561052b57600080fd5b506102a261053a3660046120a9565b610cf6565b34801561054b57600080fd5b5061028a610d7d565b34801561056057600080fd5b506102a260115481565b34801561057657600080fd5b50600b546102d59062010000900460ff1681565b34801561059657600080fd5b5061028a610db3565b3480156105ab57600080fd5b506006546001600160a01b0316610353565b3480156105c957600080fd5b50610310610dee565b3480156105de57600080fd5b5061028a610dfd565b3480156105f357600080fd5b506102a2610602366004612398565b600e60209081526000928352604080842090915290825290205481565b61028a61062d36600461237f565b610e53565b34801561063e57600080fd5b5061028a61064d366004612336565b61118e565b34801561065e57600080fd5b5061028a61066d3660046121b6565b6111e2565b34801561067e57600080fd5b5061028a61068d36600461213a565b6111ed565b34801561069e57600080fd5b506103106106ad36600461237f565b611225565b3480156106be57600080fd5b50600b546102d59060ff1681565b3480156106d857600080fd5b506102a26106e736600461237f565b6112e4565b3480156106f857600080fd5b506102d56107073660046120cb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074157600080fd5b5061028a61075036600461221c565b611313565b34801561076157600080fd5b5061028a610770366004612288565b611466565b34801561078157600080fd5b5061028a6107903660046120a9565b61162a565b3480156107a157600080fd5b506102a26107b036600461237f565b60096020526000908152604090205481565b3480156107ce57600080fd5b506102a2600f5481565b3480156107e457600080fd5b5061028a6116c2565b6006546001600160a01b031633146108205760405162461bcd60e51b81526004016108179061256c565b60405180910390fd5b600f94909455601092909255601155601255601355565b60006001600160e01b031982166380ac58cd60e01b148061086857506001600160e01b03198216635b5e139f60e01b145b8061088357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461089890612680565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490612680565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109945760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610817565b506000908152600460205260409020546001600160a01b031690565b60006109bb82610bf1565b9050806001600160a01b0316836001600160a01b03161415610a295760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610817565b336001600160a01b0382161480610a455750610a458133610707565b610ab75760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610817565b610ac1838361172b565b505050565b610ad03382611799565b610aec5760405162461bcd60e51b8152600401610817906125a1565b610ac1838383611890565b6006546001600160a01b03163314610b215760405162461bcd60e51b81526004016108179061256c565b6040514790339082156108fc029083906000818181858888f19350505050158015610b50573d6000803e3d6000fd5b5050565b6006546001600160a01b03163314610b7e5760405162461bcd60e51b81526004016108179061256c565b600b805462ff0000198116620100009182900460ff1615909102179055565b610ac1838383604051806020016040528060008152506111ed565b6006546001600160a01b03163314610be25760405162461bcd60e51b81526004016108179061256c565b600b805460ff19166001179055565b6000818152600260205260408120546001600160a01b0316806108835760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610817565b60078054610c7590612680565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca190612680565b8015610cee5780601f10610cc357610100808354040283529160200191610cee565b820191906000526020600020905b815481529060010190602001808311610cd157829003601f168201915b505050505081565b60006001600160a01b038216610d615760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610817565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610da75760405162461bcd60e51b81526004016108179061256c565b610db16000611a30565b565b6006546001600160a01b03163314610ddd5760405162461bcd60e51b81526004016108179061256c565b600b805461ff001916610100179055565b60606001805461089890612680565b6006546001600160a01b03163314610e275760405162461bcd60e51b81526004016108179061256c565b600654600160a01b900460ff1615610e3e57600080fd5b6006805460ff60a01b1916600160a01b179055565b600b5462010000900460ff1615610eac5760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e672069732063757272656e746c792070617573656400000000006044820152606401610817565b6000600c5411610ef15760405162461bcd60e51b815260206004820152601060248201526f14d85b19481b9bdd081cdd185c9d195960821b6044820152606401610817565b600b54610100900460ff1615610f365760405162461bcd60e51b815260206004820152600a60248201526914d85b1948195b99195960b21b6044820152606401610817565b610f3f816112e4565b610f49908261261e565b3414610f8f5760405162461bcd60e51b8152602060048201526015602482015274115d1a195c881d985b1d59481a5b98dbdc9c9958dd605a1b6044820152606401610817565b600c546000908152600960209081526040808320546008909252909120548291610fb89161263d565b1015610ff85760405162461bcd60e51b815260206004820152600f60248201526e14dd5c1c1b1e48195e18d959591959608a1b6044820152606401610817565b600b5460ff161561104c576012548111156110475760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920746f6b656e7360881b6044820152606401610817565b611156565b336000908152600d602052604090205460ff166110ab5760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f742077686974656c69737465640000000000000000006044820152606401610817565b601354600c546000908152600e602090815260408083203384529091529020546110d69083906125f2565b11156111245760405162461bcd60e51b815260206004820152601d60248201527f436f756e7420657863656564656420647572696e672070726573616c650000006044820152606401610817565b600c546000908152600e60209081526040808320338452909152812080548392906111509084906125f2565b90915550505b600c546000908152600860205260408120805483929061117790849061263d565b9250508190555061118b3382600c54611a82565b50565b6006546001600160a01b031633146111b85760405162461bcd60e51b81526004016108179061256c565b600654600160a01b900460ff16156111cf57600080fd5b8051610b50906007906020840190611f37565b610b50338383611ad9565b6111f73383611799565b6112135760405162461bcd60e51b8152600401610817906125a1565b61121f84848484611ba8565b50505050565b6000818152600260205260409020546060906001600160a01b03166112a65760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610817565b60006112b0611bdb565b9050806112bc84611bea565b6040516020016112cd929190612469565b604051602081830303815290604052915050919050565b6000600282116112f6575050600f5490565b6004821161130657505060105490565b505060115490565b919050565b6006546001600160a01b0316331461133d5760405162461bcd60e51b81526004016108179061256c565b60005b838110156113af576001600d600087878581811061136057611360612716565b905060200201602081019061137591906120a9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113a7816126bb565b915050611340565b5060005b81811015611422576000600d60008585858181106113d3576113d3612716565b90506020020160208101906113e891906120a9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061141a816126bb565b9150506113b3565b507f9664270f0974d24d8c43232d9cd144776a2681af2d10368a8d1f694ce0d704418484848460405161145894939291906124d5565b60405180910390a150505050565b6006546001600160a01b031633146114905760405162461bcd60e51b81526004016108179061256c565b8382146114cc5760405162461bcd60e51b815260206004820152600a602482015269084c2c840d8cadccee8d60b31b6044820152606401610817565b60005b82811015611622578383828181106114e9576114e9612716565b90506020020135600960008481526020019081526020016000205410156115455760405162461bcd60e51b815260206004820152601060248201526f14995cd95c9d9948195e18d95959195960821b6044820152606401610817565b61158e86868381811061155a5761155a612716565b905060200201602081019061156f91906120a9565b85858481811061158157611581612716565b9050602002013584611a82565b8383828181106115a0576115a0612716565b905060200201356009600084815260200190815260200160002060008282546115c9919061263d565b9091555084905083828181106115e1576115e1612716565b9050602002013560086000848152602001908152602001600020600082825461160a919061263d565b9091555081905061161a816126bb565b9150506114cf565b505050505050565b6006546001600160a01b031633146116545760405162461bcd60e51b81526004016108179061256c565b6001600160a01b0381166116b95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610817565b61118b81611a30565b6006546001600160a01b031633146116ec5760405162461bcd60e51b81526004016108179061256c565b600b5460ff166116fb57600080fd5b6004600c541061170a57600080fd5b600c805490600061171a836126bb565b9091555050600b805460ff19169055565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061176082610bf1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118125760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610817565b600061181d83610bf1565b9050806001600160a01b0316846001600160a01b031614806118585750836001600160a01b031661184d8461091b565b6001600160a01b0316145b8061188857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166118a382610bf1565b6001600160a01b03161461190b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610817565b6001600160a01b03821661196d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610817565b61197860008261172b565b6001600160a01b03831660009081526003602052604081208054600192906119a190849061263d565b90915550506001600160a01b03821660009081526003602052604081208054600192906119cf9084906125f2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b8281101561121f576000828152600a6020526040902054611aa7908590611ce8565b6000828152600a60205260408120805491611ac1836126bb565b91905055508080611ad1906126bb565b915050611a85565b816001600160a01b0316836001600160a01b03161415611b3b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610817565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611bb3848484611890565b611bbf84848484611e2a565b61121f5760405162461bcd60e51b81526004016108179061251a565b60606007805461089890612680565b606081611c0e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c385780611c22816126bb565b9150611c319050600a8361260a565b9150611c12565b60008167ffffffffffffffff811115611c5357611c5361272c565b6040519080825280601f01601f191660200182016040528015611c7d576020820181803683370190505b5090505b841561188857611c9260018361263d565b9150611c9f600a866126d6565b611caa9060306125f2565b60f81b818381518110611cbf57611cbf612716565b60200101906001600160f81b031916908160001a905350611ce1600a8661260a565b9450611c81565b6001600160a01b038216611d3e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610817565b6000818152600260205260409020546001600160a01b031615611da35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610817565b6001600160a01b0382166000908152600360205260408120805460019290611dcc9084906125f2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15611f2c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e6e903390899088908890600401612498565b602060405180830381600087803b158015611e8857600080fd5b505af1925050508015611eb8575060408051601f3d908101601f19168201909252611eb591810190612319565b60015b611f12573d808015611ee6576040519150601f19603f3d011682016040523d82523d6000602084013e611eeb565b606091505b508051611f0a5760405162461bcd60e51b81526004016108179061251a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611888565b506001949350505050565b828054611f4390612680565b90600052602060002090601f016020900481019282611f655760008555611fab565b82601f10611f7e57805160ff1916838001178555611fab565b82800160010185558215611fab579182015b82811115611fab578251825591602001919060010190611f90565b50611fb7929150611fbb565b5090565b5b80821115611fb75760008155600101611fbc565b600067ffffffffffffffff80841115611feb57611feb61272c565b604051601f8501601f19908116603f011681019082821181831017156120135761201361272c565b8160405280935085815286868601111561202c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461130e57600080fd5b60008083601f84011261206f57600080fd5b50813567ffffffffffffffff81111561208757600080fd5b6020830191508360208260051b85010111156120a257600080fd5b9250929050565b6000602082840312156120bb57600080fd5b6120c482612046565b9392505050565b600080604083850312156120de57600080fd5b6120e783612046565b91506120f560208401612046565b90509250929050565b60008060006060848603121561211357600080fd5b61211c84612046565b925061212a60208501612046565b9150604084013590509250925092565b6000806000806080858703121561215057600080fd5b61215985612046565b935061216760208601612046565b925060408501359150606085013567ffffffffffffffff81111561218a57600080fd5b8501601f8101871361219b57600080fd5b6121aa87823560208401611fd0565b91505092959194509250565b600080604083850312156121c957600080fd5b6121d283612046565b9150602083013580151581146121e757600080fd5b809150509250929050565b6000806040838503121561220557600080fd5b61220e83612046565b946020939093013593505050565b6000806000806040858703121561223257600080fd5b843567ffffffffffffffff8082111561224a57600080fd5b6122568883890161205d565b9096509450602087013591508082111561226f57600080fd5b5061227c8782880161205d565b95989497509550505050565b6000806000806000606086880312156122a057600080fd5b853567ffffffffffffffff808211156122b857600080fd5b6122c489838a0161205d565b909750955060208801359150808211156122dd57600080fd5b506122ea8882890161205d565b96999598509660400135949350505050565b60006020828403121561230e57600080fd5b81356120c481612742565b60006020828403121561232b57600080fd5b81516120c481612742565b60006020828403121561234857600080fd5b813567ffffffffffffffff81111561235f57600080fd5b8201601f8101841361237057600080fd5b61188884823560208401611fd0565b60006020828403121561239157600080fd5b5035919050565b600080604083850312156123ab57600080fd5b823591506120f560208401612046565b600080600080600060a086880312156123d357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b8183526000602080850194508260005b85811015612432576001600160a01b0361241f83612046565b1687529582019590820190600101612406565b509495945050505050565b60008151808452612455816020860160208601612654565b601f01601f19169290920160200192915050565b6000835161247b818460208801612654565b83519083019061248f818360208801612654565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124cb9083018461243d565b9695505050505050565b6040815260006124e96040830186886123f6565b82810360208401526124fc8185876123f6565b979650505050505050565b6020815260006120c4602083018461243d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612605576126056126ea565b500190565b60008261261957612619612700565b500490565b6000816000190483118215151615612638576126386126ea565b500290565b60008282101561264f5761264f6126ea565b500390565b60005b8381101561266f578181015183820152602001612657565b8381111561121f5750506000910152565b600181811c9082168061269457607f821691505b602082108114156126b557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126cf576126cf6126ea565b5060010190565b6000826126e5576126e5612700565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461118b57600080fdfea264697066735822122086f9e06def56bee0b3d0ee0f3a8f0e21c330d47502fa769cb6055117dc65ce7364736f6c63430008070033

Deployed Bytecode Sourcemap

113:7391:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4376:373;;;;;;;;;;-1:-1:-1;4376:373:2;;;;;:::i;:::-;;:::i;:::-;;1072:37;;;;;;;;;;;;;;;;;;;19589:25:11;;;19577:2;19562:18;1072:37:2;;;;;;;;1490:300:4;;;;;;;;;;-1:-1:-1;1490:300:4;;;;;:::i;:::-;;:::i;:::-;;;9336:14:11;;9329:22;9311:41;;9299:2;9284:18;1490:300:4;9171:187:11;641:31:2;;;;;;;;;;;;;;;;2408:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1116:44:2:-;;;;;;;;;;;;;;;;3919:217:4;;;;;;;;;;-1:-1:-1;3919:217:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8110:32:11;;;8092:51;;8080:2;8065:18;3919:217:4;7946:203:11;3457:401:4;;;;;;;;;;-1:-1:-1;3457:401:4;;;;;:::i;:::-;;:::i;465:52:2:-;;;;;;;;;;-1:-1:-1;465:52:2;;;;;:::i;:::-;;;;;;;;;;;;;;562:35;;;;;;;;;;-1:-1:-1;562:35:2;;;;;;;;;;;970:36;;;;;;;;;;;;;;;;4646:330:4;;;;;;;;;;-1:-1:-1;4646:330:4;;;;;:::i;:::-;;:::i;707:45:2:-;;;;;;;;;;-1:-1:-1;707:45:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;7356:145;;;;;;;;;;;;;:::i;3635:92::-;;;;;;;;;;;;;:::i;5042:179:4:-;;;;;;;;;;-1:-1:-1;5042:179:4;;;;;:::i;:::-;;:::i;3224:94:2:-;;;;;;;;;;;;;:::i;352:49::-;;;;;;;;;;-1:-1:-1;352:49:2;;;;;:::i;:::-;;;;;;;;;;;;;;2111:235:4;;;;;;;;;;-1:-1:-1;2111:235:4;;;;;:::i;:::-;;:::i;250:34:2:-;;;;;;;;;;-1:-1:-1;250:34:2;;;;-1:-1:-1;;;250:34:2;;;;;;291:26;;;;;;;;;;;;;:::i;1849:205:4:-;;;;;;;;;;-1:-1:-1;1849:205:4;;;;;:::i;:::-;;:::i;1661:101:9:-;;;;;;;;;;;;;:::i;1013:35:2:-;;;;;;;;;;;;;;;;604:30;;;;;;;;;;-1:-1:-1;604:30:2;;;;;;;;;;;3059:86;;;;;;;;;;;;;:::i;1029:85:9:-;;;;;;;;;;-1:-1:-1;1101:6:9;;-1:-1:-1;;;;;1101:6:9;1029:85;;2570:102:4;;;;;;;;;;;;;:::i;2389:126:2:-;;;;;;;;;;;;;:::i;759:81::-;;;;;;;;;;-1:-1:-1;759:81:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6230:1034;;;;;;:::i;:::-;;:::i;2166:135::-;;;;;;;;;;-1:-1:-1;2166:135:2;;;;;:::i;:::-;;:::i;4203:153:4:-;;;;;;;;;;-1:-1:-1;4203:153:4;;;;;:::i;:::-;;:::i;5287:320::-;;;;;;;;;;-1:-1:-1;5287:320:4;;;;;:::i;:::-;;:::i;2590:305:2:-;;;;;;;;;;-1:-1:-1;2590:305:2;;;;;:::i;:::-;;:::i;524:31::-;;;;;;;;;;-1:-1:-1;524:31:2;;;;;;;;5894:248;;;;;;;;;;-1:-1:-1;5894:248:2;;;;;:::i;:::-;;:::i;4422:162:4:-;;;;;;;;;;-1:-1:-1;4422:162:4;;;;;:::i;:::-;-1:-1:-1;;;;;4542:25:4;;;4519:4;4542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4422:162;3850:435:2;;;;;;;;;;-1:-1:-1;3850:435:2;;;;;:::i;:::-;;:::i;5310:504::-;;;;;;;;;;-1:-1:-1;5310:504:2;;;;;:::i;:::-;;:::i;1911:198:9:-;;;;;;;;;;-1:-1:-1;1911:198:9;;;;;:::i;:::-;;:::i;408:50:2:-;;;;;;;;;;-1:-1:-1;408:50:2;;;;;:::i;:::-;;;;;;;;;;;;;;928:35;;;;;;;;;;;;;;;;3376:190;;;;;;;;;;;;;:::i;4376:373::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;;;;;;;;;4549:7:2::1;:18:::0;;;;4578:7:::1;:18:::0;;;;4607:7:::1;:18:::0;4636::::1;:40:::0;4687:25:::1;:54:::0;4376:373::o;1490:300:4:-;1592:4;-1:-1:-1;;;;;;1627:40:4;;-1:-1:-1;;;1627:40:4;;:104;;-1:-1:-1;;;;;;;1683:48:4;;-1:-1:-1;;;1683:48:4;1627:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:3;;;1747:36:4;1608:175;1490:300;-1:-1:-1;;1490:300:4:o;2408:98::-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;4014:73;;;;-1:-1:-1;;;4014:73:4;;16257:2:11;4014:73:4;;;16239:21:11;16296:2;16276:18;;;16269:30;16335:34;16315:18;;;16308:62;-1:-1:-1;;;16386:18:11;;;16379:42;16438:19;;4014:73:4;16055:408:11;4014:73:4;-1:-1:-1;4105:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4105:24:4;;3919:217::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;-1:-1:-1;;;;;3594:11:4;:2;-1:-1:-1;;;;;3594:11:4;;;3586:57;;;;-1:-1:-1;;;3586:57:4;;18119:2:11;3586:57:4;;;18101:21:11;18158:2;18138:18;;;18131:30;18197:34;18177:18;;;18170:62;-1:-1:-1;;;18248:18:11;;;18241:31;18289:19;;3586:57:4;17917:397:11;3586:57:4;719:10:1;-1:-1:-1;;;;;3675:21:4;;;;:62;;-1:-1:-1;3700:37:4;3717:5;719:10:1;4422:162:4;:::i;3700:37::-;3654:165;;;;-1:-1:-1;;;3654:165:4;;13880:2:11;3654:165:4;;;13862:21:11;13919:2;13899:18;;;13892:30;13958:34;13938:18;;;13931:62;14029:26;14009:18;;;14002:54;14073:19;;3654:165:4;13678:420:11;3654:165:4;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;4646:330::-;4835:41;719:10:1;4868:7:4;4835:18;:41::i;:::-;4827:103;;;;-1:-1:-1;;;4827:103:4;;;;;;;:::i;:::-;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;7356:145:2:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;7456:37:2::1;::::0;7424:21:::1;::::0;7464:10:::1;::::0;7456:37;::::1;;;::::0;7424:21;;7406:15:::1;7456:37:::0;7406:15;7456:37;7424:21;7464:10;7456:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;7395:106;7356:145::o:0;3635:92::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;3709:10:2::1;::::0;;-1:-1:-1;;3695:24:2;::::1;3709:10:::0;;;;::::1;;;3708:11;3695:24:::0;;::::1;;::::0;;3635:92::o;5042:179:4:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;3224:94:2:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;3291:12:2::1;:19:::0;;-1:-1:-1;;3291:19:2::1;3306:4;3291:19;::::0;;3224:94::o;2111:235:4:-;2183:7;2218:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2218:16:4;2252:19;2244:73;;;;-1:-1:-1;;;2244:73:4;;14716:2:11;2244:73:4;;;14698:21:11;14755:2;14735:18;;;14728:30;14794:34;14774:18;;;14767:62;-1:-1:-1;;;14845:18:11;;;14838:39;14894:19;;2244:73:4;14514:405:11;291:26:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1849:205:4:-;1921:7;-1:-1:-1;;;;;1948:19:4;;1940:74;;;;-1:-1:-1;;;1940:74:4;;14305:2:11;1940:74:4;;;14287:21:11;14344:2;14324:18;;;14317:30;14383:34;14363:18;;;14356:62;-1:-1:-1;;;14434:18:11;;;14427:40;14484:19;;1940:74:4;14103:406:11;1940:74:4;-1:-1:-1;;;;;;2031:16:4;;;;;:9;:16;;;;;;;1849:205::o;1661:101:9:-;1101:6;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3059:86:2:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;3115:15:2::1;:22:::0;;-1:-1:-1;;3115:22:2::1;;;::::0;;3059:86::o;2570:102:4:-;2626:13;2658:7;2651:14;;;;;:::i;2389:126:2:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2451:14:2::1;::::0;-1:-1:-1;;;2451:14:2;::::1;;;:23;2443:32;;;::::0;::::1;;2486:14;:21:::0;;-1:-1:-1;;;;2486:21:2::1;-1:-1:-1::0;;;2486:21:2::1;::::0;;2389:126::o;6230:1034::-;6293:10;;;;;;;6292:11;6284:51;;;;-1:-1:-1;;;6284:51:2;;18521:2:11;6284:51:2;;;18503:21:11;18560:2;18540:18;;;18533:30;18599:29;18579:18;;;18572:57;18646:18;;6284:51:2;18319:351:11;6284:51:2;6369:1;6354:12;;:16;6346:45;;;;-1:-1:-1;;;6346:45:2;;13535:2:11;6346:45:2;;;13517:21:11;13574:2;13554:18;;;13547:30;-1:-1:-1;;;13593:18:11;;;13586:46;13649:18;;6346:45:2;13333:340:11;6346:45:2;6410:15;;;;;;;:24;6402:47;;;;-1:-1:-1;;;6402:47:2;;17780:2:11;6402:47:2;;;17762:21:11;17819:2;17799:18;;;17792:30;-1:-1:-1;;;17838:18:11;;;17831:40;17888:18;;6402:47:2;17578:334:11;6402:47:2;6491:15;6500:5;6491:8;:15::i;:::-;6483:23;;:5;:23;:::i;:::-;6470:9;:36;6462:70;;;;-1:-1:-1;;;6462:70:2;;19295:2:11;6462:70:2;;;19277:21:11;19334:2;19314:18;;;19307:30;-1:-1:-1;;;19353:18:11;;;19346:51;19414:18;;6462:70:2;19093:345:11;6462:70:2;6598:12;;6582:29;;;;:15;:29;;;;;;;;;6551:14;:28;;;;;;;6615:5;;6551:60;;;:::i;:::-;:69;;6543:97;;;;-1:-1:-1;;;6543:97:2;;13191:2:11;6543:97:2;;;13173:21:11;13230:2;13210:18;;;13203:30;-1:-1:-1;;;13249:18:11;;;13242:45;13304:18;;6543:97:2;12989:339:11;6543:97:2;6665:12;;;;6661:482;;;6746:18;;6737:5;:27;;6729:55;;;;-1:-1:-1;;;6729:55:2;;11318:2:11;6729:55:2;;;11300:21:11;11357:2;11337:18;;;11330:30;-1:-1:-1;;;11376:18:11;;;11369:45;11431:18;;6729:55:2;11116:339:11;6729:55:2;6661:482;;;6870:10;6856:25;;;;:13;:25;;;;;;;;6848:61;;;;-1:-1:-1;;;6848:61:2;;15487:2:11;6848:61:2;;;15469:21:11;15526:2;15506:18;;;15499:30;15565:25;15545:18;;;15538:53;15608:18;;6848:61:2;15285:347:11;6848:61:2;6996:25;;6959:12;;6932:40;;;;:26;:40;;;;;;;;6973:10;6932:52;;;;;;;;:60;;6987:5;;6932:60;:::i;:::-;:89;;6924:131;;;;-1:-1:-1;;;6924:131:2;;10134:2:11;6924:131:2;;;10116:21:11;10173:2;10153:18;;;10146:30;10212:31;10192:18;;;10185:59;10261:18;;6924:131:2;9932:353:11;6924:131:2;7097:12;;7070:40;;;;:26;:40;;;;;;;;7111:10;7070:52;;;;;;;:61;;7126:5;;7070:40;:61;;7126:5;;7070:61;:::i;:::-;;;;-1:-1:-1;;6661:482:2;7178:12;;7163:28;;;;:14;:28;;;;;:37;;7195:5;;7163:28;:37;;7195:5;;7163:37;:::i;:::-;;;;;;;;7211:45;7224:10;7236:5;7243:12;;7211;:45::i;:::-;6230:1034;:::o;2166:135::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2244:14:2::1;::::0;-1:-1:-1;;;2244:14:2;::::1;;;:23;2236:32;;;::::0;::::1;;2279:14:::0;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;4203:153:4:-:0;4297:52;719:10:1;4330:8:4;4340;4297:18;:52::i;5287:320::-;5456:41;719:10:1;5489:7:4;5456:18;:41::i;:::-;5448:103;;;;-1:-1:-1;;;5448:103:4;;;;;;;:::i;:::-;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;:::-;5287:320;;;;:::o;2590:305:2:-;7144:4:4;7167:16;;;:7;:16;;;;;;2663:13:2;;-1:-1:-1;;;;;7167:16:4;2689:78:2;;;;-1:-1:-1;;;2689:78:2;;15839:2:11;2689:78:2;;;15821:21:11;15878:2;15858:18;;;15851:30;15917:34;15897:18;;;15890:62;-1:-1:-1;;;15968:18:11;;;15961:47;16025:19;;2689:78:2;15637:413:11;2689:78:2;2788:18;2809:10;:8;:10::i;:::-;2788:31;;2861:4;2867:18;:7;:16;:18::i;:::-;2844:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2830:57;;;2590:305;;;:::o;5894:248::-;5948:7;5981:1;5972:5;:10;5968:167;;-1:-1:-1;;6006:7:2;;;5894:248::o;5968:167::-;6044:1;6035:5;:10;6031:104;;-1:-1:-1;;6069:7:2;;;5894:248::o;6031:104::-;-1:-1:-1;;6116:7:2;;;5894:248::o;6031:104::-;5894:248;;;:::o;3850:435::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;3977:9:2::1;3972:114;3992:23:::0;;::::1;3972:114;;;4070:4;4037:13;:30;4051:12;;4064:1;4051:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4037:30:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;4037:30:2;:37;;-1:-1:-1;;4037:37:2::1;::::0;::::1;;::::0;;;::::1;::::0;;4017:3;::::1;::::0;::::1;:::i;:::-;;;;3972:114;;;;4101:9;4096:121;4116:26:::0;;::::1;4096:121;;;4200:5;4164:13;:33;4178:15;;4194:1;4178:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4164:33:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;4164:33:2;:41;;-1:-1:-1;;4164:41:2::1;::::0;::::1;;::::0;;;::::1;::::0;;4144:3;::::1;::::0;::::1;:::i;:::-;;;;4096:121;;;;4234:43;4247:12;;4261:15;;4234:43;;;;;;;;;:::i;:::-;;;;;;;;3850:435:::0;;;;:::o;5310:504::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;5436:30:2;;::::1;5428:53;;;::::0;-1:-1:-1;;;5428:53:2;;16670:2:11;5428:53:2::1;::::0;::::1;16652:21:11::0;16709:2;16689:18;;;16682:30;-1:-1:-1;;;16728:18:11;;;16721:40;16778:18;;5428:53:2::1;16468:334:11::0;5428:53:2::1;5508:9;5503:304;5523:17:::0;;::::1;5503:304;;;5596:6;;5603:1;5596:9;;;;;;;:::i;:::-;;;;;;;5570:15;:22;5586:5;5570:22;;;;;;;;;;;;:35;;5562:64;;;::::0;-1:-1:-1;;;5562:64:2;;9789:2:11;5562:64:2::1;::::0;::::1;9771:21:11::0;9828:2;9808:18;;;9801:30;-1:-1:-1;;;9847:18:11;;;9840:46;9903:18;;5562:64:2::1;9587:340:11::0;5562:64:2::1;5655:41;5668:6;;5675:1;5668:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5679:6;;5686:1;5679:9;;;;;;;:::i;:::-;;;;;;;5690:5;5655:12;:41::i;:::-;5737:6;;5744:1;5737:9;;;;;;;:::i;:::-;;;;;;;5711:15;:22;5727:5;5711:22;;;;;;;;;;;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5786:6:2;;-1:-1:-1;5786:6:2;5793:1;5786:9;;::::1;;;;;:::i;:::-;;;;;;;5761:14;:21;5776:5;5761:21;;;;;;;;;;;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5542:3:2;;-1:-1:-1;5542:3:2::1;::::0;::::1;:::i;:::-;;;;5503:304;;;;5310:504:::0;;;;;:::o;1911:198:9:-;1101:6;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:9;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:9;;10911:2:11;1991:73:9::1;::::0;::::1;10893:21:11::0;10950:2;10930:18;;;10923:30;10989:34;10969:18;;;10962:62;-1:-1:-1;;;11040:18:11;;;11033:36;11086:19;;1991:73:9::1;10709:402:11::0;1991:73:9::1;2074:28;2093:8;2074:18;:28::i;3376:190:2:-:0;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;3453:12:2::1;::::0;::::1;;3445:21;;;::::0;::::1;;3500:1;3485:12;;:16;3477:25;;;::::0;::::1;;3513:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;3538:12:2::1;:20:::0;;-1:-1:-1;;3538:20:2::1;::::0;;3376:190::o;10930:171:4:-;11004:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11004:29:4;-1:-1:-1;;;;;11004:29:4;;;;;;;;:24;;11057:23;11004:24;11057:14;:23::i;:::-;-1:-1:-1;;;;;11048:46:4;;;;;;;;;;;10930:171;;:::o;7362:344::-;7455:4;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;7471:73;;;;-1:-1:-1;;;7471:73:4;;12778:2:11;7471:73:4;;;12760:21:11;12817:2;12797:18;;;12790:30;12856:34;12836:18;;;12829:62;-1:-1:-1;;;12907:18:11;;;12900:42;12959:19;;7471:73:4;12576:408:11;7471:73:4;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;-1:-1:-1;;;;;7611:16:4;:7;-1:-1:-1;;;;;7611:16:4;;:51;;;;7655:7;-1:-1:-1;;;;;7631:31:4;:20;7643:7;7631:11;:20::i;:::-;-1:-1:-1;;;;;7631:31:4;;7611:51;:87;;;-1:-1:-1;;;;;;4542:25:4;;;4519:4;4542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7666:32;7603:96;7362:344;-1:-1:-1;;;;7362:344:4:o;10259:560::-;10413:4;-1:-1:-1;;;;;10386:31:4;:23;10401:7;10386:14;:23::i;:::-;-1:-1:-1;;;;;10386:31:4;;10378:85;;;;-1:-1:-1;;;10378:85:4;;17370:2:11;10378:85:4;;;17352:21:11;17409:2;17389:18;;;17382:30;17448:34;17428:18;;;17421:62;-1:-1:-1;;;17499:18:11;;;17492:39;17548:19;;10378:85:4;17168:405:11;10378:85:4;-1:-1:-1;;;;;10481:16:4;;10473:65;;;;-1:-1:-1;;;10473:65:4;;12019:2:11;10473:65:4;;;12001:21:11;12058:2;12038:18;;;12031:30;12097:34;12077:18;;;12070:62;-1:-1:-1;;;12148:18:11;;;12141:34;12192:19;;10473:65:4;11817:400:11;10473:65:4;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;-1:-1:-1;;;;;10690:15:4;;;;;;:9;:15;;;;;:20;;10709:1;;10690:15;:20;;10709:1;;10690:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10720:13:4;;;;;;:9;:13;;;;;:18;;10737:1;;10720:13;:18;;10737:1;;10720:18;:::i;:::-;;;;-1:-1:-1;;10748:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10748:21:4;-1:-1:-1;;;;;10748:21:4;;;;;;;;;10785:27;;10748:16;;10785:27;;;;;;;10259:560;;;:::o;2263:187:9:-;2355:6;;;-1:-1:-1;;;;;2371:17:9;;;-1:-1:-1;;;;;;2371:17:9;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;4963:230:2:-;5052:9;5047:139;5071:5;5067:1;:9;5047:139;;;5108:24;;;;:17;:24;;;;;;5098:35;;5104:2;;5098:5;:35::i;:::-;5148:24;;;;:17;:24;;;;;:26;;;;;;:::i;:::-;;;;;;5078:3;;;;;:::i;:::-;;;;5047:139;;11236:307:4;11386:8;-1:-1:-1;;;;;11377:17:4;:5;-1:-1:-1;;;;;11377:17:4;;;11369:55;;;;-1:-1:-1;;;11369:55:4;;12424:2:11;11369:55:4;;;12406:21:11;12463:2;12443:18;;;12436:30;12502:27;12482:18;;;12475:55;12547:18;;11369:55:4;12222:349:11;11369:55:4;-1:-1:-1;;;;;11434:25:4;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11434:46:4;;;;;;;;;;11495:41;;9311::11;;;11495::4;;9284:18:11;11495:41:4;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;-1:-1:-1;;;6658:111:4;;;;;;;:::i;1981:100:2:-;2033:13;2066:7;2059:14;;;;;:::i;328:703:10:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:10;;;;;;;;;;;;-1:-1:-1;;;627:10:10;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:10;;-1:-1:-1;773:2:10;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:10;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:10;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;902:56:10;;;;;;;;-1:-1:-1;972:11:10;981:2;972:11;;:::i;:::-;;;844:150;;8998:372:4;-1:-1:-1;;;;;9077:16:4;;9069:61;;;;-1:-1:-1;;;9069:61:4;;15126:2:11;9069:61:4;;;15108:21:11;;;15145:18;;;15138:30;15204:34;15184:18;;;15177:62;15256:18;;9069:61:4;14924:356:11;9069:61:4;7144:4;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;:30;9140:58;;;;-1:-1:-1;;;9140:58:4;;11662:2:11;9140:58:4;;;11644:21:11;11701:2;11681:18;;;11674:30;11740;11720:18;;;11713:58;11788:18;;9140:58:4;11460:352:11;9140:58:4;-1:-1:-1;;;;;9265:13:4;;;;;;:9;:13;;;;;:18;;9282:1;;9265:13;:18;;9282:1;;9265:18;:::i;:::-;;;;-1:-1:-1;;9293:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9293:21:4;-1:-1:-1;;;;;9293:21:4;;;;;;;;9330:33;;9293:16;;;9330:33;;9293:16;;9330:33;8998:372;;:::o;12096:778::-;12246:4;-1:-1:-1;;;;;12266:13:4;;1087:20:0;1133:8;12262:606:4;;12301:72;;-1:-1:-1;;;12301:72:4;;-1:-1:-1;;;;;12301:36:4;;;;;:72;;719:10:1;;12352:4:4;;12358:7;;12367:5;;12301:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12301:72:4;;;;;;;;-1:-1:-1;;12301:72:4;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12540:13:4;;12536:266;;12582:60;;-1:-1:-1;;;12582:60:4;;;;;;;:::i;12536:266::-;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;-1:-1:-1;;;;;;12423:51:4;-1:-1:-1;;;12423:51:4;;-1:-1:-1;12416:58:4;;12262:606;-1:-1:-1;12853:4:4;12096:778;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:11;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:11;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:11;;757:42;;747:70;;813:1;810;803:12;828:367;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:55;;973:1;970;963:12;922:55;-1:-1:-1;996:20:11;;1039:18;1028:30;;1025:50;;;1071:1;1068;1061:12;1025:50;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:67;;;1185:1;1182;1175:12;1122:67;828:367;;;;;:::o;1200:186::-;1259:6;1312:2;1300:9;1291:7;1287:23;1283:32;1280:52;;;1328:1;1325;1318:12;1280:52;1351:29;1370:9;1351:29;:::i;:::-;1341:39;1200:186;-1:-1:-1;;;1200:186:11:o;1391:260::-;1459:6;1467;1520:2;1508:9;1499:7;1495:23;1491:32;1488:52;;;1536:1;1533;1526:12;1488:52;1559:29;1578:9;1559:29;:::i;:::-;1549:39;;1607:38;1641:2;1630:9;1626:18;1607:38;:::i;:::-;1597:48;;1391:260;;;;;:::o;1656:328::-;1733:6;1741;1749;1802:2;1790:9;1781:7;1777:23;1773:32;1770:52;;;1818:1;1815;1808:12;1770:52;1841:29;1860:9;1841:29;:::i;:::-;1831:39;;1889:38;1923:2;1912:9;1908:18;1889:38;:::i;:::-;1879:48;;1974:2;1963:9;1959:18;1946:32;1936:42;;1656:328;;;;;:::o;1989:666::-;2084:6;2092;2100;2108;2161:3;2149:9;2140:7;2136:23;2132:33;2129:53;;;2178:1;2175;2168:12;2129:53;2201:29;2220:9;2201:29;:::i;:::-;2191:39;;2249:38;2283:2;2272:9;2268:18;2249:38;:::i;:::-;2239:48;;2334:2;2323:9;2319:18;2306:32;2296:42;;2389:2;2378:9;2374:18;2361:32;2416:18;2408:6;2405:30;2402:50;;;2448:1;2445;2438:12;2402:50;2471:22;;2524:4;2516:13;;2512:27;-1:-1:-1;2502:55:11;;2553:1;2550;2543:12;2502:55;2576:73;2641:7;2636:2;2623:16;2618:2;2614;2610:11;2576:73;:::i;:::-;2566:83;;;1989:666;;;;;;;:::o;2660:347::-;2725:6;2733;2786:2;2774:9;2765:7;2761:23;2757:32;2754:52;;;2802:1;2799;2792:12;2754:52;2825:29;2844:9;2825:29;:::i;:::-;2815:39;;2904:2;2893:9;2889:18;2876:32;2951:5;2944:13;2937:21;2930:5;2927:32;2917:60;;2973:1;2970;2963:12;2917:60;2996:5;2986:15;;;2660:347;;;;;:::o;3012:254::-;3080:6;3088;3141:2;3129:9;3120:7;3116:23;3112:32;3109:52;;;3157:1;3154;3147:12;3109:52;3180:29;3199:9;3180:29;:::i;:::-;3170:39;3256:2;3241:18;;;;3228:32;;-1:-1:-1;;;3012:254:11:o;3271:773::-;3393:6;3401;3409;3417;3470:2;3458:9;3449:7;3445:23;3441:32;3438:52;;;3486:1;3483;3476:12;3438:52;3526:9;3513:23;3555:18;3596:2;3588:6;3585:14;3582:34;;;3612:1;3609;3602:12;3582:34;3651:70;3713:7;3704:6;3693:9;3689:22;3651:70;:::i;:::-;3740:8;;-1:-1:-1;3625:96:11;-1:-1:-1;3828:2:11;3813:18;;3800:32;;-1:-1:-1;3844:16:11;;;3841:36;;;3873:1;3870;3863:12;3841:36;;3912:72;3976:7;3965:8;3954:9;3950:24;3912:72;:::i;:::-;3271:773;;;;-1:-1:-1;4003:8:11;-1:-1:-1;;;;3271:773:11:o;4049:841::-;4180:6;4188;4196;4204;4212;4265:2;4253:9;4244:7;4240:23;4236:32;4233:52;;;4281:1;4278;4271:12;4233:52;4321:9;4308:23;4350:18;4391:2;4383:6;4380:14;4377:34;;;4407:1;4404;4397:12;4377:34;4446:70;4508:7;4499:6;4488:9;4484:22;4446:70;:::i;:::-;4535:8;;-1:-1:-1;4420:96:11;-1:-1:-1;4623:2:11;4608:18;;4595:32;;-1:-1:-1;4639:16:11;;;4636:36;;;4668:1;4665;4658:12;4636:36;;4707:72;4771:7;4760:8;4749:9;4745:24;4707:72;:::i;:::-;4049:841;;;;-1:-1:-1;4798:8:11;4880:2;4865:18;4852:32;;4049:841;-1:-1:-1;;;;4049:841:11:o;4895:245::-;4953:6;5006:2;4994:9;4985:7;4981:23;4977:32;4974:52;;;5022:1;5019;5012:12;4974:52;5061:9;5048:23;5080:30;5104:5;5080:30;:::i;5145:249::-;5214:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:52;;;5283:1;5280;5273:12;5235:52;5315:9;5309:16;5334:30;5358:5;5334:30;:::i;5399:450::-;5468:6;5521:2;5509:9;5500:7;5496:23;5492:32;5489:52;;;5537:1;5534;5527:12;5489:52;5577:9;5564:23;5610:18;5602:6;5599:30;5596:50;;;5642:1;5639;5632:12;5596:50;5665:22;;5718:4;5710:13;;5706:27;-1:-1:-1;5696:55:11;;5747:1;5744;5737:12;5696:55;5770:73;5835:7;5830:2;5817:16;5812:2;5808;5804:11;5770:73;:::i;5854:180::-;5913:6;5966:2;5954:9;5945:7;5941:23;5937:32;5934:52;;;5982:1;5979;5972:12;5934:52;-1:-1:-1;6005:23:11;;5854:180;-1:-1:-1;5854:180:11:o;6039:254::-;6107:6;6115;6168:2;6156:9;6147:7;6143:23;6139:32;6136:52;;;6184:1;6181;6174:12;6136:52;6220:9;6207:23;6197:33;;6249:38;6283:2;6272:9;6268:18;6249:38;:::i;6298:454::-;6393:6;6401;6409;6417;6425;6478:3;6466:9;6457:7;6453:23;6449:33;6446:53;;;6495:1;6492;6485:12;6446:53;-1:-1:-1;;6518:23:11;;;6588:2;6573:18;;6560:32;;-1:-1:-1;6639:2:11;6624:18;;6611:32;;6690:2;6675:18;;6662:32;;-1:-1:-1;6741:3:11;6726:19;6713:33;;-1:-1:-1;6298:454:11;-1:-1:-1;6298:454:11:o;6757:447::-;6857:6;6852:3;6845:19;6827:3;6883:4;6912:2;6907:3;6903:12;6896:19;;6938:5;6961:1;6971:208;6985:6;6982:1;6979:13;6971:208;;;-1:-1:-1;;;;;7050:26:11;7069:6;7050:26;:::i;:::-;7046:52;7034:65;;7119:12;;;;7154:15;;;;7007:1;7000:9;6971:208;;;-1:-1:-1;7195:3:11;;6757:447;-1:-1:-1;;;;;6757:447:11:o;7209:257::-;7250:3;7288:5;7282:12;7315:6;7310:3;7303:19;7331:63;7387:6;7380:4;7375:3;7371:14;7364:4;7357:5;7353:16;7331:63;:::i;:::-;7448:2;7427:15;-1:-1:-1;;7423:29:11;7414:39;;;;7455:4;7410:50;;7209:257;-1:-1:-1;;7209:257:11:o;7471:470::-;7650:3;7688:6;7682:13;7704:53;7750:6;7745:3;7738:4;7730:6;7726:17;7704:53;:::i;:::-;7820:13;;7779:16;;;;7842:57;7820:13;7779:16;7876:4;7864:17;;7842:57;:::i;:::-;7915:20;;7471:470;-1:-1:-1;;;;7471:470:11:o;8154:488::-;-1:-1:-1;;;;;8423:15:11;;;8405:34;;8475:15;;8470:2;8455:18;;8448:43;8522:2;8507:18;;8500:34;;;8570:3;8565:2;8550:18;;8543:31;;;8348:4;;8591:45;;8616:19;;8608:6;8591:45;:::i;:::-;8583:53;8154:488;-1:-1:-1;;;;;;8154:488:11:o;8647:519::-;8924:2;8913:9;8906:21;8887:4;8950:73;9019:2;9008:9;9004:18;8996:6;8988;8950:73;:::i;:::-;9071:9;9063:6;9059:22;9054:2;9043:9;9039:18;9032:50;9099:61;9153:6;9145;9137;9099:61;:::i;:::-;9091:69;8647:519;-1:-1:-1;;;;;;;8647:519:11:o;9363:219::-;9512:2;9501:9;9494:21;9475:4;9532:44;9572:2;9561:9;9557:18;9549:6;9532:44;:::i;10290:414::-;10492:2;10474:21;;;10531:2;10511:18;;;10504:30;10570:34;10565:2;10550:18;;10543:62;-1:-1:-1;;;10636:2:11;10621:18;;10614:48;10694:3;10679:19;;10290:414::o;16807:356::-;17009:2;16991:21;;;17028:18;;;17021:30;17087:34;17082:2;17067:18;;17060:62;17154:2;17139:18;;16807:356::o;18675:413::-;18877:2;18859:21;;;18916:2;18896:18;;;18889:30;18955:34;18950:2;18935:18;;18928:62;-1:-1:-1;;;19021:2:11;19006:18;;18999:47;19078:3;19063:19;;18675:413::o;19625:128::-;19665:3;19696:1;19692:6;19689:1;19686:13;19683:39;;;19702:18;;:::i;:::-;-1:-1:-1;19738:9:11;;19625:128::o;19758:120::-;19798:1;19824;19814:35;;19829:18;;:::i;:::-;-1:-1:-1;19863:9:11;;19758:120::o;19883:168::-;19923:7;19989:1;19985;19981:6;19977:14;19974:1;19971:21;19966:1;19959:9;19952:17;19948:45;19945:71;;;19996:18;;:::i;:::-;-1:-1:-1;20036:9:11;;19883:168::o;20056:125::-;20096:4;20124:1;20121;20118:8;20115:34;;;20129:18;;:::i;:::-;-1:-1:-1;20166:9:11;;20056:125::o;20186:258::-;20258:1;20268:113;20282:6;20279:1;20276:13;20268:113;;;20358:11;;;20352:18;20339:11;;;20332:39;20304:2;20297:10;20268:113;;;20399:6;20396:1;20393:13;20390:48;;;-1:-1:-1;;20434:1:11;20416:16;;20409:27;20186:258::o;20449:380::-;20528:1;20524:12;;;;20571;;;20592:61;;20646:4;20638:6;20634:17;20624:27;;20592:61;20699:2;20691:6;20688:14;20668:18;20665:38;20662:161;;;20745:10;20740:3;20736:20;20733:1;20726:31;20780:4;20777:1;20770:15;20808:4;20805:1;20798:15;20662:161;;20449:380;;;:::o;20834:135::-;20873:3;-1:-1:-1;;20894:17:11;;20891:43;;;20914:18;;:::i;:::-;-1:-1:-1;20961:1:11;20950:13;;20834:135::o;20974:112::-;21006:1;21032;21022:35;;21037:18;;:::i;:::-;-1:-1:-1;21071:9:11;;20974:112::o;21091:127::-;21152:10;21147:3;21143:20;21140:1;21133:31;21183:4;21180:1;21173:15;21207:4;21204:1;21197:15;21223:127;21284:10;21279:3;21275:20;21272:1;21265:31;21315:4;21312:1;21305:15;21339:4;21336:1;21329:15;21355:127;21416:10;21411:3;21407:20;21404:1;21397:31;21447:4;21444:1;21437:15;21471:4;21468:1;21461:15;21487:127;21548:10;21543:3;21539:20;21536:1;21529:31;21579:4;21576:1;21569:15;21603:4;21600:1;21593:15;21619:131;-1:-1:-1;;;;;;21693:32:11;;21683:43;;21673:71;;21740:1;21737;21730:12

Swarm Source

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