ETH Price: $3,461.17 (+1.56%)
Gas: 7 Gwei

Token

AtomicAntzNFTCollection (ANTZ)
 

Overview

Max Total Supply

1,353 ANTZ

Holders

468

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
atomiccoffeebro.eth
Balance
2 ANTZ
0x022dfc5e6e5f61a50b95e3c2911045bee2fb7240
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:
AtomicAntzNFTCollection

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 12: ANTZ.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC721.sol";

abstract contract AAZ {
	function totalSupply( ) public virtual view returns ( uint256 );
    function ownerOf( uint256 tokenId ) public virtual view returns ( address );
}

contract AtomicAntzNFTCollection is ERC721 {
    event Mint(address indexed from, uint256 indexed tokenId, uint256 indexed availableAntz);

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    modifier onlyCollaborator() {
        bool isCollaborator = false;
        for (uint256 i; i < collaborators.length; i++) {
            if (collaborators[i].addr == msg.sender) {
                isCollaborator = true;
                break;
            }
        }

        require(
            owner() == _msgSender() || isCollaborator,
            "Ownable: caller is not the owner nor a collaborator"
        );

        _;
    }

    modifier claimStarted() {
        require(
            startClaimDate != 0 && startClaimDate <= block.timestamp,
            "You are too early"
        );

        _;
    }

    struct Collaborators {
        address addr;
        uint256 cut;
    }

    uint256 private startClaimDate = 1631120400;
    uint256 private mintPrice = 80000000000000000;
    uint256 private totalTokens = 11000;
    uint256 private totalMintedTokens = 0;
    uint256 private maxAntzPerWallet = 200;
    uint256 private maxAntzPerTransaction = 20;
    uint128 private basisPoints = 10000;
    string private baseURI =
        "https://atomicantz.com/api/metadata.php?TokenID=";
    bool public premintingComplete = false;
    uint256 public giveawayCount = 715;
    AAZ _aaz = AAZ(address(0xA62A7b7175BCa02ecDC4fA0b2Cab520C33C0228E));

    mapping(address => uint256) private claimedAntzPerWallet;
    
    mapping( address => uint256 ) private _airdrops;

    uint16[] availableAntz;
    Collaborators[] private collaborators;

    // ONLY OWNER

    /**
     * Sets the collaborators of the project with their cuts
     */
    function addCollaborators(Collaborators[] memory _collaborators)
        external
        onlyOwner
    {
        require(collaborators.length == 0, "Collaborators were already set");

        uint128 totalCut;
        for (uint256 i; i < _collaborators.length; i++) {
            collaborators.push(_collaborators[i]);
            totalCut += uint128(_collaborators[i].cut);
        }

        require(totalCut == basisPoints, "Total cut does not add to 100%");
    }

    // ONLY COLLABORATORS

    /**
     * @dev Allows to withdraw the Ether in the contract and split it among the collaborators
     */
    function withdraw() external onlyCollaborator {
        uint256 totalBalance = address(this).balance;

        for (uint256 i; i < collaborators.length; i++) {
            payable(collaborators[i].addr).transfer(
                mulScale(totalBalance, collaborators[i].cut, basisPoints)
            );
        }
    }

    /**
     * @dev Sets the base URI for the API that provides the NFT data.
     */
    function setBaseTokenURI(string memory _uri) external onlyCollaborator {
        baseURI = _uri;
    }

    /**
     * @dev Sets the claim price for each ant
     */
    function setMintPrice(uint256 _mintPrice) external onlyCollaborator {
        mintPrice = _mintPrice;
    }

    /**
     * @dev Populates the available antz
     */
    function addAvailableAntz(uint16 from, uint16 to)
        internal
        onlyCollaborator
    {
        for (uint16 i = from; i <= to; i++) {
            availableAntz.push(i);
        }
    }

    /**
     * @dev Removes a chosen ant from the available list
     */
    function removeAntzFromAvailableAntz(uint16 tokenId)
        external
        onlyCollaborator
    {
        for (uint16 i; i <= availableAntz.length; i++) {
            if (availableAntz[i] != tokenId) {
                continue;
            }

            availableAntz[i] = availableAntz[availableAntz.length - 1];
            availableAntz.pop();

            break;
        }
    }

    /**
     * @dev Allow devs to hand pick some antz before the available antz list is created
     */
    function allocateTokens(uint256[] memory tokenIds)
        external
        onlyCollaborator
    {
        require(availableAntz.length == 0, "Available antz are already set");

        _batchMint(msg.sender, tokenIds);

        totalMintedTokens += tokenIds.length;
    }

    /**
     * @dev Sets the date that users can start claiming antz
     */
    function setStartClaimDate(uint256 _startClaimDate)
        external
        onlyCollaborator
    {
        startClaimDate = _startClaimDate;
    }
    
    /**
     * Dropping Tokens to owners from previous contract
     */
    function airdropTokens () public onlyOwner {
        uint aazSupply = _aaz.totalSupply( ) - 2;
		uint airdropCount = 0;
		for ( uint i = 0; i < aazSupply; i ++ ) {
			address recipient = _aaz.ownerOf( i );
			// Airdrop token due.
			_mint(recipient, getAntToBeClaimed());
			claimedAntzPerWallet[recipient]++;
			// Airdrop an additional token.
			if ( _airdrops[recipient] != 1 ) {
				_mint( recipient, getAntToBeClaimed() );
				_airdrops[recipient] = 1;
				claimedAntzPerWallet[recipient]++;
				airdropCount += 1;
			}
    }
    totalMintedTokens += aazSupply;
    }

    /**
     * @dev Checks if an ant is in the available list
     */
    function isAntAvailable(uint16 tokenId)
        external
        view
        onlyCollaborator
        returns (bool)
    {
        for (uint16 i; i < availableAntz.length; i++) {
            if (availableAntz[i] == tokenId) {
                return true;
            }
        }

        return false;
    }


    /**
     * @dev Give random antz to the provided address
     */
    function reserveAntz(address _address)
        external
        onlyCollaborator
    {
        require(availableAntz.length >= giveawayCount, "No antz left to be claimed");
        require(!premintingComplete,"Antz were already reserved for giveaways!");
        totalMintedTokens += giveawayCount;

        uint256[] memory tokenIds = new uint256[](giveawayCount);

        for (uint256 i; i < giveawayCount; i++) {
            tokenIds[i] = getAntToBeClaimed();
        }

        _batchMint(_address, tokenIds);
        premintingComplete = true;
    }

    // END ONLY COLLABORATORS

    /**
     * @dev Claim a single ant
     */
    function claimAnt() internal {
        
        claimedAntzPerWallet[msg.sender]++;
        totalMintedTokens++;
        uint256 tokenId = getAntToBeClaimed();
        _mint(msg.sender, tokenId);
        emit Mint(msg.sender, tokenId, availableAntz.length);
    }

    /**
     * @dev Claim up to 20 antz at once
     */
    function mintAntz(uint256 amount)
        external
        payable
        callerIsUser
        claimStarted
    {
        require(
            msg.value == mintPrice * amount,
            "Not enough Ether to claim the antz"
        );
        
        require(amount <= maxAntzPerTransaction, "You can only claim 20 Antz per transactions");

        require(
            claimedAntzPerWallet[msg.sender] + amount <= maxAntzPerWallet,
            "You cannot claim more antz"
        );
    
        require(availableAntz.length >= amount, "No antz left to be claimed");
        
        if(amount == 1) {
            claimAnt();
        }
        
        uint256[] memory tokenIds = new uint256[](amount);

        claimedAntzPerWallet[msg.sender] += amount;
        totalMintedTokens += amount;

        for (uint256 i; i < amount; i++) {
            tokenIds[i] = getAntToBeClaimed();
            emit Mint(msg.sender, tokenIds[i] ,availableAntz.length);
        }

        _batchMint(msg.sender, tokenIds);
        
    }


    /**
     * @dev Returns the tokenId by index
     */
    function tokenByIndex(uint256 tokenId) external view returns (uint256) {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );

        return tokenId;
    }

    /**
     * @dev Returns how many antz are still available to be claimed
     */
    function getAvailableAntz() external view returns (uint256) {
        return availableAntz.length;
    }

    /**
     * @dev Returns the claim price
     */
    function getmintPrice() external view returns (uint256) {
        return mintPrice;
    }

    /**
     * @dev Returns the total supply
     */
    function totalSupply() external view virtual returns (uint256) {
        return totalMintedTokens;
    }

    // Private and Internal functions

    /**
     * @dev Returns a random available ant to be claimed
     */
    function getAntToBeClaimed() private returns (uint256) {
        uint256 random = _getRandomNumber(availableAntz.length);
        uint256 tokenId = uint256(availableAntz[random]);

        availableAntz[random] = availableAntz[availableAntz.length - 1];
        availableAntz.pop();

        return tokenId;
    }

    /**
     * @dev Generates a pseudo-random number.
     */
    function _getRandomNumber(uint256 _upper) private view returns (uint256) {
        uint256 random = uint256(
            keccak256(
                abi.encodePacked(
                    availableAntz.length,
                    blockhash(block.number - 1),
                    block.coinbase,
                    block.difficulty,
                    msg.sender
                )
            )
        );

        return random % _upper;
    }

    /**
     * @dev See {ERC721}.
     */
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function mulScale(
        uint256 x,
        uint256 y,
        uint128 scale
    ) internal pure returns (uint256) {
        uint256 a = x / scale;
        uint256 b = x % scale;
        uint256 c = y / scale;
        uint256 d = y % scale;

        return a * c * scale + a * d + b * c + (b * d) / scale;
    }
    
    constructor() ERC721("AtomicAntzNFTCollection", "ANTZ") {
        addAvailableAntz(0,10999);
    }
    
}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT

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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 4 of 12: ERC165.sol
// SPDX-License-Identifier: MIT

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 12: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./IERC721Enumerable.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";
import "./Ownable.sol";
import "./Ownable.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, Ownable {
    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) internal _owners;

    // Mapping owner address to token count
    mapping(address => uint256) internal _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}. 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 ||
                ERC721.isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _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 ||
            ERC721.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);
    }

    function _batchMint(address to, uint256[] memory tokenIds)
        internal
        virtual
    {
        require(to != address(0), "ERC721: mint to the zero address");
        _balances[to] += tokenIds.length;

        for (uint256 i; i < tokenIds.length; i++) {
            require(!_exists(tokenIds[i]), "ERC721: token already minted");

            _beforeTokenTransfer(address(0), to, tokenIds[i]);

            _owners[tokenIds[i]] = to;

            emit Transfer(address(0), to, tokenIds[i]);
        }
    }

    /**
     * @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 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 12: IERC165.sol
// SPDX-License-Identifier: MIT

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 12: IERC721.sol
// SPDX-License-Identifier: MIT

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 12: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

File 9 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

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 10 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

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 11 of 12: Ownable.sol
// SPDX-License-Identifier: MIT

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[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":"from","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"availableAntz","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"cut","type":"uint256"}],"internalType":"struct AtomicAntzNFTCollection.Collaborators[]","name":"_collaborators","type":"tuple[]"}],"name":"addCollaborators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"allocateTokens","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableAntz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getmintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"isAntAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintAntz","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premintingComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"removeAntzFromAvailableAntz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"reserveAntz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startClaimDate","type":"uint256"}],"name":"setStartClaimDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

636138ec1060075567011c37937e080000600855612af86009556000600a5560c8600b556014600c55600d80546001600160801b03191661271017905560e06040526030608081815290620037f560a03980516200006691600e9160209091019062000336565b50600f805460ff191690556102cb601055601180546001600160a01b03191673a62a7b7175bca02ecdc4fa0b2cab520c33c0228e179055348015620000aa57600080fd5b506040518060400160405280601781526020017f41746f6d6963416e747a4e4654436f6c6c656374696f6e0000000000000000008152506040518060400160405280600481526020016320a72a2d60e11b815250600062000110620001a360201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200016f90600190602085019062000336565b5080516200018590600290602084019062000336565b5050506200019d6000612af7620001a760201b60201c565b62000472565b3390565b6000805b6015548110156200022257336001600160a01b031660158281548110620001e257634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156200020d576001915062000222565b8062000219816200043e565b915050620001ab565b506000546001600160a01b03163314806200023a5750805b620002b15760405162461bcd60e51b815260206004820152603360248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201527f206e6f72206120636f6c6c61626f7261746f7200000000000000000000000000606482015260840160405180910390fd5b825b8261ffff168161ffff16116200033057601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec60108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580620003278162000419565b915050620002b3565b50505050565b8280546200034490620003dc565b90600052602060002090601f016020900481019282620003685760008555620003b3565b82601f106200038357805160ff1916838001178555620003b3565b82800160010185558215620003b3579182015b82811115620003b357825182559160200191906001019062000396565b50620003c1929150620003c5565b5090565b5b80821115620003c15760008155600101620003c6565b600181811c90821680620003f157607f821691505b602082108114156200041357634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff808316818114156200043457620004346200045c565b6001019392505050565b60006000198214156200045557620004556200045c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b61337380620004826000396000f3fe6080604052600436106101ee5760003560e01c80636352211e1161010d57806395d89b41116100a0578063e985e9c51161006f578063e985e9c51461054c578063e9be0f3f14610595578063f2fde38b146105ab578063f4a0a528146105cb578063fc14ba49146105eb57600080fd5b806395d89b41146104d7578063a22cb465146104ec578063b88d4fde1461050c578063c87b56dd1461052c57600080fd5b806376633271116100dc578063766332711461047a5780638d4823541461048f5780638da5cb5b146104a457806391152c5c146104c257600080fd5b80636352211e146104055780636b571f761461042557806370a0823114610445578063715018a61461046557600080fd5b806323ab18f1116101855780633ccfd60b116101545780633ccfd60b1461039057806342842e0e146103a55780634f6ccce7146103c5578063604402df146103e557600080fd5b806323ab18f11461031d57806323b872dd1461033d57806330176e131461035d57806330f3366d1461037d57600080fd5b8063095ea7b3116101c1578063095ea7b3146102a457806309ab5954146102c457806318160ddd146102e45780632344e9181461030357600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a5780630955f63c14610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612e27565b61060b565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d61065d565b60405161021f9190612f8f565b34801561025657600080fd5b5061026a610265366004612ec7565b6106ef565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d366004612cde565b61077c565b005b3480156102b057600080fd5b506102a26102bf366004612cb3565b61091d565b3480156102d057600080fd5b506102a26102df366004612ea5565b610a33565b3480156102f057600080fd5b50600a545b60405190815260200161021f565b34801561030f57600080fd5b50600f546102139060ff1681565b34801561032957600080fd5b506102a2610338366004612ec7565b610c48565b34801561034957600080fd5b506102a2610358366004612bc5565b610cf5565b34801561036957600080fd5b506102a2610378366004612e5f565b610d26565b6102a261038b366004612ec7565b610de0565b34801561039c57600080fd5b506102a2611172565b3480156103b157600080fd5b506102a26103c0366004612bc5565b6112fe565b3480156103d157600080fd5b506102f56103e0366004612ec7565b611319565b3480156103f157600080fd5b506102a2610400366004612b55565b611344565b34801561041157600080fd5b5061026a610420366004612ec7565b611584565b34801561043157600080fd5b50610213610440366004612ea5565b6115fb565b34801561045157600080fd5b506102f5610460366004612b55565b61172e565b34801561047157600080fd5b506102a26117b5565b34801561048657600080fd5b506014546102f5565b34801561049b57600080fd5b506008546102f5565b3480156104b057600080fd5b506000546001600160a01b031661026a565b3480156104ce57600080fd5b506102a2611829565b3480156104e357600080fd5b5061023d611a4f565b3480156104f857600080fd5b506102a2610507366004612c82565b611a5e565b34801561051857600080fd5b506102a2610527366004612c05565b611b23565b34801561053857600080fd5b5061023d610547366004612ec7565b611b5b565b34801561055857600080fd5b50610213610567366004612b8d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105a157600080fd5b506102f560105481565b3480156105b757600080fd5b506102a26105c6366004612b55565b611c26565b3480156105d757600080fd5b506102a26105e6366004612ec7565b611d10565b3480156105f757600080fd5b506102a2610606366004612da0565b611dbd565b60006001600160e01b031982166380ac58cd60e01b148061063c57506001600160e01b03198216635b5e139f60e01b145b8061065757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461066c90613247565b80601f016020809104026020016040519081016040528092919081815260200182805461069890613247565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b60006106fa82611ed1565b6107605760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000546001600160a01b031633146107a65760405162461bcd60e51b815260040161075790613040565b601554156107f65760405162461bcd60e51b815260206004820152601e60248201527f436f6c6c61626f7261746f7273207765726520616c72656164792073657400006044820152606401610757565b6000805b82518110156108bb57601583828151811061082557634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b03909216919091178155910151910155825183908290811061089057634e487b7160e01b600052603260045260246000fd5b602002602001015160200151826108a79190613197565b9150806108b38161329e565b9150506107fa565b50600d546001600160801b038281169116146109195760405162461bcd60e51b815260206004820152601e60248201527f546f74616c2063757420646f6573206e6f742061646420746f203130302500006044820152606401610757565b5050565b600061092882611584565b9050806001600160a01b0316836001600160a01b031614156109965760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610757565b336001600160a01b03821614806109b257506109b28133610567565b610a245760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610757565b610a2e8383611eee565b505050565b6000805b601554811015610aa757336001600160a01b031660158281548110610a6c57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610a955760019150610aa7565b80610a9f8161329e565b915050610a37565b506000546001600160a01b0316331480610abe5750805b610ada5760405162461bcd60e51b815260040161075790613075565b60005b60145461ffff821611610a2e578261ffff1660148261ffff1681548110610b1457634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff1614610b4057610c36565b60148054610b5090600190613204565b81548110610b6e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660148261ffff1681548110610bb757634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506014805480610c0557634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a02191690559055505050565b80610c408161327c565b915050610add565b6000805b601554811015610cbc57336001600160a01b031660158281548110610c8157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610caa5760019150610cbc565b80610cb48161329e565b915050610c4c565b506000546001600160a01b0316331480610cd35750805b610cef5760405162461bcd60e51b815260040161075790613075565b50600755565b610cff3382611f5c565b610d1b5760405162461bcd60e51b8152600401610757906130c8565b610a2e838383612001565b6000805b601554811015610d9a57336001600160a01b031660158281548110610d5f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610d885760019150610d9a565b80610d928161329e565b915050610d2a565b506000546001600160a01b0316331480610db15750805b610dcd5760405162461bcd60e51b815260040161075790613075565b8151610a2e90600e906020850190612a6d565b323314610e2f5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610757565b60075415801590610e4257504260075411155b610e825760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610757565b80600854610e9091906131e5565b3414610ee95760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520616e6044820152613a3d60f11b6064820152608401610757565b600c54811115610f4f5760405162461bcd60e51b815260206004820152602b60248201527f596f752063616e206f6e6c7920636c61696d20323020416e747a20706572207460448201526a72616e73616374696f6e7360a81b6064820152608401610757565b600b5433600090815260126020526040902054610f6d9083906131b9565b1115610fbb5760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f726520616e747a0000000000006044820152606401610757565b60145481111561100d5760405162461bcd60e51b815260206004820152601a60248201527f4e6f20616e747a206c65667420746f20626520636c61696d65640000000000006044820152606401610757565b806001141561101e5761101e6121a1565b60008167ffffffffffffffff81111561104757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611070578160200160208202803683370190505b50336000908152601260205260408120805492935084929091906110959084906131b9565b9250508190555081600a60008282546110ae91906131b9565b90915550600090505b82811015611167576110c761221f565b8282815181106110e757634e487b7160e01b600052603260045260246000fd5b6020908102919091010152601454825183908390811061111757634e487b7160e01b600052603260045260246000fd5b6020026020010151336001600160a01b03167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f60405160405180910390a48061115f8161329e565b9150506110b7565b506109193382612376565b6000805b6015548110156111e657336001600160a01b0316601582815481106111ab57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156111d457600191506111e6565b806111de8161329e565b915050611176565b506000546001600160a01b03163314806111fd5750805b6112195760405162461bcd60e51b815260040161075790613075565b4760005b601554811015610a2e576015818154811061124857634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000160009054906101000a90046001600160a01b03166001600160a01b03166108fc6112c3846015858154811061129e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912060016002909202010154600d546001600160801b0316612585565b6040518115909202916000818181858888f193505050501580156112eb573d6000803e3d6000fd5b50806112f68161329e565b91505061121d565b610a2e83838360405180602001604052806000815250611b23565b600061132482611ed1565b6113405760405162461bcd60e51b815260040161075790612ff4565b5090565b6000805b6015548110156113b857336001600160a01b03166015828154811061137d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156113a657600191506113b8565b806113b08161329e565b915050611348565b506000546001600160a01b03163314806113cf5750805b6113eb5760405162461bcd60e51b815260040161075790613075565b601054601454101561143f5760405162461bcd60e51b815260206004820152601a60248201527f4e6f20616e747a206c65667420746f20626520636c61696d65640000000000006044820152606401610757565b600f5460ff16156114a45760405162461bcd60e51b815260206004820152602960248201527f416e747a207765726520616c726561647920726573657276656420666f72206760448201526869766561776179732160b81b6064820152608401610757565b601054600a60008282546114b891906131b9565b909155505060105460009067ffffffffffffffff8111156114e957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611512578160200160208202803683370190505b50905060005b6010548110156115675761152a61221f565b82828151811061154a57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061155f8161329e565b915050611518565b506115728382612376565b5050600f805460ff1916600117905550565b6000818152600360205260408120546001600160a01b0316806106575760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610757565b600080805b60155481101561167057336001600160a01b03166015828154811061163557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561165e5760019150611670565b806116688161329e565b915050611600565b506000546001600160a01b03163314806116875750805b6116a35760405162461bcd60e51b815260040161075790613075565b60005b60145461ffff82161015611722578361ffff1660148261ffff16815481106116de57634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff161415611710576001925050611728565b8061171a8161327c565b9150506116a6565b50600091505b50919050565b60006001600160a01b0382166117995760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610757565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146117df5760405162461bcd60e51b815260040161075790613040565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118535760405162461bcd60e51b815260040161075790613040565b60006002601160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118a557600080fd5b505afa1580156118b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dd9190612edf565b6118e79190613204565b90506000805b82811015611a33576011546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b15801561193a57600080fd5b505afa15801561194e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119729190612b71565b90506119858161198061221f565b61265c565b6001600160a01b03811660009081526012602052604081208054916119a98361329e565b90915550506001600160a01b038116600090815260136020526040902054600114611a20576119da8161198061221f565b6001600160a01b03811660009081526013602090815260408083206001905560129091528120805491611a0c8361329e565b90915550611a1d90506001846131b9565b92505b5080611a2b8161329e565b9150506118ed565b5081600a6000828254611a4691906131b9565b90915550505050565b60606002805461066c90613247565b6001600160a01b038216331415611ab75760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610757565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611b2d3383611f5c565b611b495760405162461bcd60e51b8152600401610757906130c8565b611b558484848461278f565b50505050565b6060611b6682611ed1565b611bca5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610757565b6000611bd46127c2565b90506000815111611bf45760405180602001604052806000815250611c1f565b80611bfe846127d1565b604051602001611c0f929190612f23565b6040516020818303038152906040525b9392505050565b6000546001600160a01b03163314611c505760405162461bcd60e51b815260040161075790613040565b6001600160a01b038116611cb55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610757565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b601554811015611d8457336001600160a01b031660158281548110611d4957634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611d725760019150611d84565b80611d7c8161329e565b915050611d14565b506000546001600160a01b0316331480611d9b5750805b611db75760405162461bcd60e51b815260040161075790613075565b50600855565b6000805b601554811015611e3157336001600160a01b031660158281548110611df657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611e1f5760019150611e31565b80611e298161329e565b915050611dc1565b506000546001600160a01b0316331480611e485750805b611e645760405162461bcd60e51b815260040161075790613075565b60145415611eb45760405162461bcd60e51b815260206004820152601e60248201527f417661696c61626c6520616e747a2061726520616c72656164792073657400006044820152606401610757565b611ebe3383612376565b8151600a6000828254611a4691906131b9565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f2382611584565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f6782611ed1565b611f835760405162461bcd60e51b815260040161075790612ff4565b6000611f8e83611584565b9050806001600160a01b0316846001600160a01b03161480611fc95750836001600160a01b0316611fbe846106ef565b6001600160a01b0316145b80611ff957506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661201482611584565b6001600160a01b03161461207c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610757565b6001600160a01b0382166120de5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610757565b6120e9600082611eee565b6001600160a01b0383166000908152600460205260408120805460019290612112908490613204565b90915550506001600160a01b03821660009081526004602052604081208054600192906121409084906131b9565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b3360009081526012602052604081208054916121bc8361329e565b9091555050600a80549060006121d18361329e565b919050555060006121e061221f565b90506121ec338261265c565b601454604051829033907f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90600090a450565b6000806122306014805490506128eb565b905060006014828154811061225557634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff169050601460016014805490506122939190613204565b815481106122b157634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff16601483815481106122f657634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550601480548061234457634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905592915050565b6001600160a01b0382166123cc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610757565b80516001600160a01b038316600090815260046020526040812080549091906123f69084906131b9565b90915550600090505b8151811015610a2e5761243882828151811061242b57634e487b7160e01b600052603260045260246000fd5b6020026020010151611ed1565b156124855760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610757565b6124ab600084848481518110611b5557634e487b7160e01b600052603260045260246000fd5b82600360008484815181106124d057634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081818151811061252a57634e487b7160e01b600052603260045260246000fd5b6020026020010151836001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48061257d8161329e565b9150506123ff565b60008061259b6001600160801b038416866131d1565b905060006125b26001600160801b038516876132b9565b905060006125c96001600160801b038616876131d1565b905060006125e06001600160801b038716886132b9565b90506001600160801b0386166125f682856131e5565b61260091906131d1565b61260a83856131e5565b61261483876131e5565b6001600160801b03891661262886896131e5565b61263291906131e5565b61263c91906131b9565b61264691906131b9565b61265091906131b9565b98975050505050505050565b6001600160a01b0382166126b25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610757565b6126bb81611ed1565b156127085760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610757565b6001600160a01b03821660009081526004602052604081208054600192906127319084906131b9565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61279a848484612001565b6127a684848484612960565b611b555760405162461bcd60e51b815260040161075790612fa2565b6060600e805461066c90613247565b6060816127f55750506040805180820190915260018152600360fc1b602082015290565b8160005b811561281f57806128098161329e565b91506128189050600a836131d1565b91506127f9565b60008167ffffffffffffffff81111561284857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612872576020820181803683370190505b5090505b8415611ff957612887600183613204565b9150612894600a866132b9565b61289f9060306131b9565b60f81b8183815181106128c257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506128e4600a866131d1565b9450612876565b60145460009081906128fe600143613204565b6040805160208101939093529040908201526bffffffffffffffffffffffff1941606090811b82168184015244607484015233901b16609482015260a80160408051601f1981840301815291905280516020909101209050611c1f83826132b9565b60006001600160a01b0384163b15612a6257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906129a4903390899088908890600401612f52565b602060405180830381600087803b1580156129be57600080fd5b505af19250505080156129ee575060408051601f3d908101601f191682019092526129eb91810190612e43565b60015b612a48573d808015612a1c576040519150601f19603f3d011682016040523d82523d6000602084013e612a21565b606091505b508051612a405760405162461bcd60e51b815260040161075790612fa2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ff9565b506001949350505050565b828054612a7990613247565b90600052602060002090601f016020900481019282612a9b5760008555612ae1565b82601f10612ab457805160ff1916838001178555612ae1565b82800160010185558215612ae1579182015b82811115612ae1578251825591602001919060010190612ac6565b506113409291505b808211156113405760008155600101612ae9565b600067ffffffffffffffff831115612b1757612b176132f9565b612b2a601f8401601f1916602001613142565b9050828152838383011115612b3e57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612b66578081fd5b8135611c1f8161330f565b600060208284031215612b82578081fd5b8151611c1f8161330f565b60008060408385031215612b9f578081fd5b8235612baa8161330f565b91506020830135612bba8161330f565b809150509250929050565b600080600060608486031215612bd9578081fd5b8335612be48161330f565b92506020840135612bf48161330f565b929592945050506040919091013590565b60008060008060808587031215612c1a578081fd5b8435612c258161330f565b93506020850135612c358161330f565b925060408501359150606085013567ffffffffffffffff811115612c57578182fd5b8501601f81018713612c67578182fd5b612c7687823560208401612afd565b91505092959194509250565b60008060408385031215612c94578182fd5b8235612c9f8161330f565b915060208301358015158114612bba578182fd5b60008060408385031215612cc5578182fd5b8235612cd08161330f565b946020939093013593505050565b60006020808385031215612cf0578182fd5b823567ffffffffffffffff811115612d06578283fd5b8301601f81018513612d16578283fd5b8035612d29612d2482613173565b613142565b80828252848201915084840188868560061b8701011115612d48578687fd5b8694505b83851015612d9457604080828b031215612d64578788fd5b612d6c613119565b8235612d778161330f565b815282880135888201528452600195909501949286019201612d4c565b50979650505050505050565b60006020808385031215612db2578182fd5b823567ffffffffffffffff811115612dc8578283fd5b8301601f81018513612dd8578283fd5b8035612de6612d2482613173565b80828252848201915084840188868560051b8701011115612e05578687fd5b8694505b83851015612d94578035835260019490940193918501918501612e09565b600060208284031215612e38578081fd5b8135611c1f81613327565b600060208284031215612e54578081fd5b8151611c1f81613327565b600060208284031215612e70578081fd5b813567ffffffffffffffff811115612e86578182fd5b8201601f81018413612e96578182fd5b611ff984823560208401612afd565b600060208284031215612eb6578081fd5b813561ffff81168114611c1f578182fd5b600060208284031215612ed8578081fd5b5035919050565b600060208284031215612ef0578081fd5b5051919050565b60008151808452612f0f81602086016020860161321b565b601f01601f19169290920160200192915050565b60008351612f3581846020880161321b565b835190830190612f4981836020880161321b565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f8590830184612ef7565b9695505050505050565b602081526000611c1f6020830184612ef7565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015272103737b910309031b7b63630b137b930ba37b960691b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6040805190810167ffffffffffffffff8111828210171561313c5761313c6132f9565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561316b5761316b6132f9565b604052919050565b600067ffffffffffffffff82111561318d5761318d6132f9565b5060051b60200190565b60006001600160801b03808316818516808303821115612f4957612f496132cd565b600082198211156131cc576131cc6132cd565b500190565b6000826131e0576131e06132e3565b500490565b60008160001904831182151516156131ff576131ff6132cd565b500290565b600082821015613216576132166132cd565b500390565b60005b8381101561323657818101518382015260200161321e565b83811115611b555750506000910152565b600181811c9082168061325b57607f821691505b6020821081141561172857634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415613294576132946132cd565b6001019392505050565b60006000198214156132b2576132b26132cd565b5060010190565b6000826132c8576132c86132e3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461332457600080fd5b50565b6001600160e01b03198116811461332457600080fdfea264697066735822122014b8e2e53b974a2d2842f984bd7a3b2aa6945385464ce0108654a4e63810a6d064736f6c6343000804003368747470733a2f2f61746f6d6963616e747a2e636f6d2f6170692f6d657461646174612e7068703f546f6b656e49443d

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c80636352211e1161010d57806395d89b41116100a0578063e985e9c51161006f578063e985e9c51461054c578063e9be0f3f14610595578063f2fde38b146105ab578063f4a0a528146105cb578063fc14ba49146105eb57600080fd5b806395d89b41146104d7578063a22cb465146104ec578063b88d4fde1461050c578063c87b56dd1461052c57600080fd5b806376633271116100dc578063766332711461047a5780638d4823541461048f5780638da5cb5b146104a457806391152c5c146104c257600080fd5b80636352211e146104055780636b571f761461042557806370a0823114610445578063715018a61461046557600080fd5b806323ab18f1116101855780633ccfd60b116101545780633ccfd60b1461039057806342842e0e146103a55780634f6ccce7146103c5578063604402df146103e557600080fd5b806323ab18f11461031d57806323b872dd1461033d57806330176e131461035d57806330f3366d1461037d57600080fd5b8063095ea7b3116101c1578063095ea7b3146102a457806309ab5954146102c457806318160ddd146102e45780632344e9181461030357600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a5780630955f63c14610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612e27565b61060b565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d61065d565b60405161021f9190612f8f565b34801561025657600080fd5b5061026a610265366004612ec7565b6106ef565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d366004612cde565b61077c565b005b3480156102b057600080fd5b506102a26102bf366004612cb3565b61091d565b3480156102d057600080fd5b506102a26102df366004612ea5565b610a33565b3480156102f057600080fd5b50600a545b60405190815260200161021f565b34801561030f57600080fd5b50600f546102139060ff1681565b34801561032957600080fd5b506102a2610338366004612ec7565b610c48565b34801561034957600080fd5b506102a2610358366004612bc5565b610cf5565b34801561036957600080fd5b506102a2610378366004612e5f565b610d26565b6102a261038b366004612ec7565b610de0565b34801561039c57600080fd5b506102a2611172565b3480156103b157600080fd5b506102a26103c0366004612bc5565b6112fe565b3480156103d157600080fd5b506102f56103e0366004612ec7565b611319565b3480156103f157600080fd5b506102a2610400366004612b55565b611344565b34801561041157600080fd5b5061026a610420366004612ec7565b611584565b34801561043157600080fd5b50610213610440366004612ea5565b6115fb565b34801561045157600080fd5b506102f5610460366004612b55565b61172e565b34801561047157600080fd5b506102a26117b5565b34801561048657600080fd5b506014546102f5565b34801561049b57600080fd5b506008546102f5565b3480156104b057600080fd5b506000546001600160a01b031661026a565b3480156104ce57600080fd5b506102a2611829565b3480156104e357600080fd5b5061023d611a4f565b3480156104f857600080fd5b506102a2610507366004612c82565b611a5e565b34801561051857600080fd5b506102a2610527366004612c05565b611b23565b34801561053857600080fd5b5061023d610547366004612ec7565b611b5b565b34801561055857600080fd5b50610213610567366004612b8d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105a157600080fd5b506102f560105481565b3480156105b757600080fd5b506102a26105c6366004612b55565b611c26565b3480156105d757600080fd5b506102a26105e6366004612ec7565b611d10565b3480156105f757600080fd5b506102a2610606366004612da0565b611dbd565b60006001600160e01b031982166380ac58cd60e01b148061063c57506001600160e01b03198216635b5e139f60e01b145b8061065757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461066c90613247565b80601f016020809104026020016040519081016040528092919081815260200182805461069890613247565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b60006106fa82611ed1565b6107605760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000546001600160a01b031633146107a65760405162461bcd60e51b815260040161075790613040565b601554156107f65760405162461bcd60e51b815260206004820152601e60248201527f436f6c6c61626f7261746f7273207765726520616c72656164792073657400006044820152606401610757565b6000805b82518110156108bb57601583828151811061082557634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b03909216919091178155910151910155825183908290811061089057634e487b7160e01b600052603260045260246000fd5b602002602001015160200151826108a79190613197565b9150806108b38161329e565b9150506107fa565b50600d546001600160801b038281169116146109195760405162461bcd60e51b815260206004820152601e60248201527f546f74616c2063757420646f6573206e6f742061646420746f203130302500006044820152606401610757565b5050565b600061092882611584565b9050806001600160a01b0316836001600160a01b031614156109965760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610757565b336001600160a01b03821614806109b257506109b28133610567565b610a245760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610757565b610a2e8383611eee565b505050565b6000805b601554811015610aa757336001600160a01b031660158281548110610a6c57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610a955760019150610aa7565b80610a9f8161329e565b915050610a37565b506000546001600160a01b0316331480610abe5750805b610ada5760405162461bcd60e51b815260040161075790613075565b60005b60145461ffff821611610a2e578261ffff1660148261ffff1681548110610b1457634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff1614610b4057610c36565b60148054610b5090600190613204565b81548110610b6e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660148261ffff1681548110610bb757634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506014805480610c0557634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a02191690559055505050565b80610c408161327c565b915050610add565b6000805b601554811015610cbc57336001600160a01b031660158281548110610c8157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610caa5760019150610cbc565b80610cb48161329e565b915050610c4c565b506000546001600160a01b0316331480610cd35750805b610cef5760405162461bcd60e51b815260040161075790613075565b50600755565b610cff3382611f5c565b610d1b5760405162461bcd60e51b8152600401610757906130c8565b610a2e838383612001565b6000805b601554811015610d9a57336001600160a01b031660158281548110610d5f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610d885760019150610d9a565b80610d928161329e565b915050610d2a565b506000546001600160a01b0316331480610db15750805b610dcd5760405162461bcd60e51b815260040161075790613075565b8151610a2e90600e906020850190612a6d565b323314610e2f5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610757565b60075415801590610e4257504260075411155b610e825760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610757565b80600854610e9091906131e5565b3414610ee95760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520616e6044820152613a3d60f11b6064820152608401610757565b600c54811115610f4f5760405162461bcd60e51b815260206004820152602b60248201527f596f752063616e206f6e6c7920636c61696d20323020416e747a20706572207460448201526a72616e73616374696f6e7360a81b6064820152608401610757565b600b5433600090815260126020526040902054610f6d9083906131b9565b1115610fbb5760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f726520616e747a0000000000006044820152606401610757565b60145481111561100d5760405162461bcd60e51b815260206004820152601a60248201527f4e6f20616e747a206c65667420746f20626520636c61696d65640000000000006044820152606401610757565b806001141561101e5761101e6121a1565b60008167ffffffffffffffff81111561104757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611070578160200160208202803683370190505b50336000908152601260205260408120805492935084929091906110959084906131b9565b9250508190555081600a60008282546110ae91906131b9565b90915550600090505b82811015611167576110c761221f565b8282815181106110e757634e487b7160e01b600052603260045260246000fd5b6020908102919091010152601454825183908390811061111757634e487b7160e01b600052603260045260246000fd5b6020026020010151336001600160a01b03167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f60405160405180910390a48061115f8161329e565b9150506110b7565b506109193382612376565b6000805b6015548110156111e657336001600160a01b0316601582815481106111ab57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156111d457600191506111e6565b806111de8161329e565b915050611176565b506000546001600160a01b03163314806111fd5750805b6112195760405162461bcd60e51b815260040161075790613075565b4760005b601554811015610a2e576015818154811061124857634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000160009054906101000a90046001600160a01b03166001600160a01b03166108fc6112c3846015858154811061129e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912060016002909202010154600d546001600160801b0316612585565b6040518115909202916000818181858888f193505050501580156112eb573d6000803e3d6000fd5b50806112f68161329e565b91505061121d565b610a2e83838360405180602001604052806000815250611b23565b600061132482611ed1565b6113405760405162461bcd60e51b815260040161075790612ff4565b5090565b6000805b6015548110156113b857336001600160a01b03166015828154811061137d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156113a657600191506113b8565b806113b08161329e565b915050611348565b506000546001600160a01b03163314806113cf5750805b6113eb5760405162461bcd60e51b815260040161075790613075565b601054601454101561143f5760405162461bcd60e51b815260206004820152601a60248201527f4e6f20616e747a206c65667420746f20626520636c61696d65640000000000006044820152606401610757565b600f5460ff16156114a45760405162461bcd60e51b815260206004820152602960248201527f416e747a207765726520616c726561647920726573657276656420666f72206760448201526869766561776179732160b81b6064820152608401610757565b601054600a60008282546114b891906131b9565b909155505060105460009067ffffffffffffffff8111156114e957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611512578160200160208202803683370190505b50905060005b6010548110156115675761152a61221f565b82828151811061154a57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061155f8161329e565b915050611518565b506115728382612376565b5050600f805460ff1916600117905550565b6000818152600360205260408120546001600160a01b0316806106575760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610757565b600080805b60155481101561167057336001600160a01b03166015828154811061163557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561165e5760019150611670565b806116688161329e565b915050611600565b506000546001600160a01b03163314806116875750805b6116a35760405162461bcd60e51b815260040161075790613075565b60005b60145461ffff82161015611722578361ffff1660148261ffff16815481106116de57634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff161415611710576001925050611728565b8061171a8161327c565b9150506116a6565b50600091505b50919050565b60006001600160a01b0382166117995760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610757565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146117df5760405162461bcd60e51b815260040161075790613040565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118535760405162461bcd60e51b815260040161075790613040565b60006002601160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118a557600080fd5b505afa1580156118b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dd9190612edf565b6118e79190613204565b90506000805b82811015611a33576011546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b15801561193a57600080fd5b505afa15801561194e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119729190612b71565b90506119858161198061221f565b61265c565b6001600160a01b03811660009081526012602052604081208054916119a98361329e565b90915550506001600160a01b038116600090815260136020526040902054600114611a20576119da8161198061221f565b6001600160a01b03811660009081526013602090815260408083206001905560129091528120805491611a0c8361329e565b90915550611a1d90506001846131b9565b92505b5080611a2b8161329e565b9150506118ed565b5081600a6000828254611a4691906131b9565b90915550505050565b60606002805461066c90613247565b6001600160a01b038216331415611ab75760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610757565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611b2d3383611f5c565b611b495760405162461bcd60e51b8152600401610757906130c8565b611b558484848461278f565b50505050565b6060611b6682611ed1565b611bca5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610757565b6000611bd46127c2565b90506000815111611bf45760405180602001604052806000815250611c1f565b80611bfe846127d1565b604051602001611c0f929190612f23565b6040516020818303038152906040525b9392505050565b6000546001600160a01b03163314611c505760405162461bcd60e51b815260040161075790613040565b6001600160a01b038116611cb55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610757565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b601554811015611d8457336001600160a01b031660158281548110611d4957634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611d725760019150611d84565b80611d7c8161329e565b915050611d14565b506000546001600160a01b0316331480611d9b5750805b611db75760405162461bcd60e51b815260040161075790613075565b50600855565b6000805b601554811015611e3157336001600160a01b031660158281548110611df657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611e1f5760019150611e31565b80611e298161329e565b915050611dc1565b506000546001600160a01b0316331480611e485750805b611e645760405162461bcd60e51b815260040161075790613075565b60145415611eb45760405162461bcd60e51b815260206004820152601e60248201527f417661696c61626c6520616e747a2061726520616c72656164792073657400006044820152606401610757565b611ebe3383612376565b8151600a6000828254611a4691906131b9565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f2382611584565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f6782611ed1565b611f835760405162461bcd60e51b815260040161075790612ff4565b6000611f8e83611584565b9050806001600160a01b0316846001600160a01b03161480611fc95750836001600160a01b0316611fbe846106ef565b6001600160a01b0316145b80611ff957506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661201482611584565b6001600160a01b03161461207c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610757565b6001600160a01b0382166120de5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610757565b6120e9600082611eee565b6001600160a01b0383166000908152600460205260408120805460019290612112908490613204565b90915550506001600160a01b03821660009081526004602052604081208054600192906121409084906131b9565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b3360009081526012602052604081208054916121bc8361329e565b9091555050600a80549060006121d18361329e565b919050555060006121e061221f565b90506121ec338261265c565b601454604051829033907f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90600090a450565b6000806122306014805490506128eb565b905060006014828154811061225557634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff169050601460016014805490506122939190613204565b815481106122b157634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff16601483815481106122f657634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550601480548061234457634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905592915050565b6001600160a01b0382166123cc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610757565b80516001600160a01b038316600090815260046020526040812080549091906123f69084906131b9565b90915550600090505b8151811015610a2e5761243882828151811061242b57634e487b7160e01b600052603260045260246000fd5b6020026020010151611ed1565b156124855760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610757565b6124ab600084848481518110611b5557634e487b7160e01b600052603260045260246000fd5b82600360008484815181106124d057634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081818151811061252a57634e487b7160e01b600052603260045260246000fd5b6020026020010151836001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48061257d8161329e565b9150506123ff565b60008061259b6001600160801b038416866131d1565b905060006125b26001600160801b038516876132b9565b905060006125c96001600160801b038616876131d1565b905060006125e06001600160801b038716886132b9565b90506001600160801b0386166125f682856131e5565b61260091906131d1565b61260a83856131e5565b61261483876131e5565b6001600160801b03891661262886896131e5565b61263291906131e5565b61263c91906131b9565b61264691906131b9565b61265091906131b9565b98975050505050505050565b6001600160a01b0382166126b25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610757565b6126bb81611ed1565b156127085760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610757565b6001600160a01b03821660009081526004602052604081208054600192906127319084906131b9565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61279a848484612001565b6127a684848484612960565b611b555760405162461bcd60e51b815260040161075790612fa2565b6060600e805461066c90613247565b6060816127f55750506040805180820190915260018152600360fc1b602082015290565b8160005b811561281f57806128098161329e565b91506128189050600a836131d1565b91506127f9565b60008167ffffffffffffffff81111561284857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612872576020820181803683370190505b5090505b8415611ff957612887600183613204565b9150612894600a866132b9565b61289f9060306131b9565b60f81b8183815181106128c257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506128e4600a866131d1565b9450612876565b60145460009081906128fe600143613204565b6040805160208101939093529040908201526bffffffffffffffffffffffff1941606090811b82168184015244607484015233901b16609482015260a80160408051601f1981840301815291905280516020909101209050611c1f83826132b9565b60006001600160a01b0384163b15612a6257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906129a4903390899088908890600401612f52565b602060405180830381600087803b1580156129be57600080fd5b505af19250505080156129ee575060408051601f3d908101601f191682019092526129eb91810190612e43565b60015b612a48573d808015612a1c576040519150601f19603f3d011682016040523d82523d6000602084013e612a21565b606091505b508051612a405760405162461bcd60e51b815260040161075790612fa2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ff9565b506001949350505050565b828054612a7990613247565b90600052602060002090601f016020900481019282612a9b5760008555612ae1565b82601f10612ab457805160ff1916838001178555612ae1565b82800160010185558215612ae1579182015b82811115612ae1578251825591602001919060010190612ac6565b506113409291505b808211156113405760008155600101612ae9565b600067ffffffffffffffff831115612b1757612b176132f9565b612b2a601f8401601f1916602001613142565b9050828152838383011115612b3e57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612b66578081fd5b8135611c1f8161330f565b600060208284031215612b82578081fd5b8151611c1f8161330f565b60008060408385031215612b9f578081fd5b8235612baa8161330f565b91506020830135612bba8161330f565b809150509250929050565b600080600060608486031215612bd9578081fd5b8335612be48161330f565b92506020840135612bf48161330f565b929592945050506040919091013590565b60008060008060808587031215612c1a578081fd5b8435612c258161330f565b93506020850135612c358161330f565b925060408501359150606085013567ffffffffffffffff811115612c57578182fd5b8501601f81018713612c67578182fd5b612c7687823560208401612afd565b91505092959194509250565b60008060408385031215612c94578182fd5b8235612c9f8161330f565b915060208301358015158114612bba578182fd5b60008060408385031215612cc5578182fd5b8235612cd08161330f565b946020939093013593505050565b60006020808385031215612cf0578182fd5b823567ffffffffffffffff811115612d06578283fd5b8301601f81018513612d16578283fd5b8035612d29612d2482613173565b613142565b80828252848201915084840188868560061b8701011115612d48578687fd5b8694505b83851015612d9457604080828b031215612d64578788fd5b612d6c613119565b8235612d778161330f565b815282880135888201528452600195909501949286019201612d4c565b50979650505050505050565b60006020808385031215612db2578182fd5b823567ffffffffffffffff811115612dc8578283fd5b8301601f81018513612dd8578283fd5b8035612de6612d2482613173565b80828252848201915084840188868560051b8701011115612e05578687fd5b8694505b83851015612d94578035835260019490940193918501918501612e09565b600060208284031215612e38578081fd5b8135611c1f81613327565b600060208284031215612e54578081fd5b8151611c1f81613327565b600060208284031215612e70578081fd5b813567ffffffffffffffff811115612e86578182fd5b8201601f81018413612e96578182fd5b611ff984823560208401612afd565b600060208284031215612eb6578081fd5b813561ffff81168114611c1f578182fd5b600060208284031215612ed8578081fd5b5035919050565b600060208284031215612ef0578081fd5b5051919050565b60008151808452612f0f81602086016020860161321b565b601f01601f19169290920160200192915050565b60008351612f3581846020880161321b565b835190830190612f4981836020880161321b565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f8590830184612ef7565b9695505050505050565b602081526000611c1f6020830184612ef7565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015272103737b910309031b7b63630b137b930ba37b960691b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6040805190810167ffffffffffffffff8111828210171561313c5761313c6132f9565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561316b5761316b6132f9565b604052919050565b600067ffffffffffffffff82111561318d5761318d6132f9565b5060051b60200190565b60006001600160801b03808316818516808303821115612f4957612f496132cd565b600082198211156131cc576131cc6132cd565b500190565b6000826131e0576131e06132e3565b500490565b60008160001904831182151516156131ff576131ff6132cd565b500290565b600082821015613216576132166132cd565b500390565b60005b8381101561323657818101518382015260200161321e565b83811115611b555750506000910152565b600181811c9082168061325b57607f821691505b6020821081141561172857634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415613294576132946132cd565b6001019392505050565b60006000198214156132b2576132b26132cd565b5060010190565b6000826132c8576132c86132e3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461332457600080fd5b50565b6001600160e01b03198116811461332457600080fdfea264697066735822122014b8e2e53b974a2d2842f984bd7a3b2aa6945385464ce0108654a4e63810a6d064736f6c63430008040033

Deployed Bytecode Sourcemap

255:9870:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1524:344:4;;;;;;;;;;-1:-1:-1;1524:344:4;;;;;:::i;:::-;;:::i;:::-;;;9562:14:12;;9555:22;9537:41;;9525:2;9510:18;1524:344:4;;;;;;;;2642:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4188:295::-;;;;;;;;;;-1:-1:-1;4188:295:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8860:32:12;;;8842:51;;8830:2;8815:18;4188:295:4;8797:102:12;2070:468:0;;;;;;;;;;-1:-1:-1;2070:468:0;;;;;:::i;:::-;;:::i;:::-;;3703:424:4;;;;;;;;;;-1:-1:-1;3703:424:4;;;;;:::i;:::-;;:::i;:386:0:-;;;;;;;;;;-1:-1:-1;3703:386:0;;;;;:::i;:::-;;:::i;8491:104::-;;;;;;;;;;-1:-1:-1;8571:17:0;;8491:104;;;20478:25:12;;;20466:2;20451:18;8491:104:0;20433:76:12;1623:38:0;;;;;;;;;;-1:-1:-1;1623:38:0;;;;;;;;4554:147;;;;;;;;;;-1:-1:-1;4554:147:0;;;;;:::i;:::-;;:::i;5202:364:4:-;;;;;;;;;;-1:-1:-1;5202:364:4;;;;;:::i;:::-;;:::i;3090:102:0:-;;;;;;;;;;-1:-1:-1;3090:102:0;;;;;:::i;:::-;;:::i;6780:1027::-;;;;;;:::i;:::-;;:::i;2681:317::-;;;;;;;;;;;;;:::i;5632:179:4:-;;;;;;;;;;-1:-1:-1;5632:179:4;;;;;:::i;:::-;;:::i;7871:220:0:-;;;;;;;;;;-1:-1:-1;7871:220:0;;;;;:::i;:::-;;:::i;5816:555::-;;;;;;;;;;-1:-1:-1;5816:555:0;;;;;:::i;:::-;;:::i;2267:313:4:-;;;;;;;;;;-1:-1:-1;2267:313:4;;;;;:::i;:::-;;:::i;5432:308:0:-;;;;;;;;;;-1:-1:-1;5432:308:0;;;;;:::i;:::-;;:::i;1927:283:4:-;;;;;;;;;;-1:-1:-1;1927:283:4;;;;;:::i;:::-;;:::i;1693:145:10:-;;;;;;;;;;;;;:::i;8181:104:0:-;;;;;;;;;;-1:-1:-1;8258:13:0;:20;8181:104;;8343:89;;;;;;;;;;-1:-1:-1;8416:9:0;;8343:89;;1061:85:10;;;;;;;;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;1061:85;;4783:573:0;;;;;;;;;;;;;:::i;2804:102:4:-;;;;;;;;;;;;;:::i;4550:318::-;;;;;;;;;;-1:-1:-1;4550:318:4;;;;;:::i;:::-;;:::i;5877:354::-;;;;;;;;;;-1:-1:-1;5877:354:4;;;;;:::i;:::-;;:::i;2972:451::-;;;;;;;;;;-1:-1:-1;2972:451:4;;;;;:::i;:::-;;:::i;4934:206::-;;;;;;;;;;-1:-1:-1;4934:206:4;;;;;:::i;:::-;-1:-1:-1;;;;;5098:25:4;;;5071:4;5098:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4934:206;1667:34:0;;;;;;;;;;;;;;;;1987:240:10;;;;;;;;;;-1:-1:-1;1987:240:10;;;;;:::i;:::-;;:::i;3260:107:0:-;;;;;;;;;;-1:-1:-1;3260:107:0;;;;;:::i;:::-;;:::i;4199:272::-;;;;;;;;;;-1:-1:-1;4199:272:0;;;;;:::i;:::-;;:::i;1524:344:4:-;1666:4;-1:-1:-1;;;;;;1705:40:4;;-1:-1:-1;;;1705:40:4;;:104;;-1:-1:-1;;;;;;;1761:48:4;;-1:-1:-1;;;1761:48:4;1705:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:3;;;1825:36:4;1686:175;1524:344;-1:-1:-1;;1524:344:4:o;2642:98::-;2696:13;2728:5;2721:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2642:98;:::o;4188:295::-;4304:7;4348:16;4356:7;4348;:16::i;:::-;4327:107;;;;-1:-1:-1;;;4327:107:4;;16879:2:12;4327:107:4;;;16861:21:12;16918:2;16898:18;;;16891:30;16957:34;16937:18;;;16930:62;-1:-1:-1;;;17008:18:12;;;17001:42;17060:19;;4327:107:4;;;;;;;;;-1:-1:-1;4452:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4452:24:4;;4188:295::o;2070:468:0:-;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;1273:23:10;1265:68;;;;-1:-1:-1;;;1265:68:10;;;;;;;:::i;:::-;2192:13:0::1;:20:::0;:25;2184:68:::1;;;::::0;-1:-1:-1;;;2184:68:0;;11553:2:12;2184:68:0::1;::::0;::::1;11535:21:12::0;11592:2;11572:18;;;11565:30;11631:32;11611:18;;;11604:60;11681:18;;2184:68:0::1;11525:180:12::0;2184:68:0::1;2263:16;2294:9:::0;2289:166:::1;2309:14;:21;2305:1;:25;2289:166;;;2351:13;2370:14;2385:1;2370:17;;;;;;-1:-1:-1::0;;;2370:17:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;2351:37;;::::1;::::0;;::::1;::::0;;-1:-1:-1;2351:37:0;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;2351:37:0::1;-1:-1:-1::0;;;;;2351:37:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;2422:17;;;;2437:1;;2422:17;::::1;;;-1:-1:-1::0;;;2422:17:0::1;;;;;;;;;;;;;;;:21;;;2402:42;;;;;:::i;:::-;::::0;-1:-1:-1;2332:3:0;::::1;::::0;::::1;:::i;:::-;;;;2289:166;;;-1:-1:-1::0;2485:11:0::1;::::0;-1:-1:-1;;;;;2473:23:0;;::::1;2485:11:::0;::::1;2473:23;2465:66;;;::::0;-1:-1:-1;;;2465:66:0;;13436:2:12;2465:66:0::1;::::0;::::1;13418:21:12::0;13475:2;13455:18;;;13448:30;13514:32;13494:18;;;13487:60;13564:18;;2465:66:0::1;13408:180:12::0;2465:66:0::1;1343:1:10;2070:468:0::0;:::o;3703:424:4:-;3783:13;3799:23;3814:7;3799:14;:23::i;:::-;3783:39;;3846:5;-1:-1:-1;;;;;3840:11:4;:2;-1:-1:-1;;;;;3840:11:4;;;3832:57;;;;-1:-1:-1;;;3832:57:4;;19714:2:12;3832:57:4;;;19696:21:12;19753:2;19733:18;;;19726:30;19792:34;19772:18;;;19765:62;-1:-1:-1;;;19843:18:12;;;19836:31;19884:19;;3832:57:4;19686:223:12;3832:57:4;665:10:2;-1:-1:-1;;;;;3921:21:4;;;;:85;;-1:-1:-1;3962:44:4;3986:5;665:10:2;4934:206:4;:::i;3962:44::-;3900:188;;;;-1:-1:-1;;;3900:188:4;;14567:2:12;3900:188:4;;;14549:21:12;14606:2;14586:18;;;14579:30;14645:34;14625:18;;;14618:62;14716:26;14696:18;;;14689:54;14760:19;;3900:188:4;14539:246:12;3900:188:4;4099:21;4108:2;4112:7;4099:8;:21::i;:::-;3703:424;;;:::o;:386:0:-;561:19;603:9;598:189;618:13;:20;614:24;;598:189;;;688:10;-1:-1:-1;;;;;663:35:0;:13;677:1;663:16;;;;;;-1:-1:-1;;;663:16:0;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;663:21:0;:35;659:118;;;735:4;718:21;;757:5;;659:118;640:3;;;;:::i;:::-;;;;598:189;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;818:23:0;;:41;;;845:14;818:41;797:139;;;;-1:-1:-1;;;797:139:0;;;;;;;:::i;:::-;3817:8:::1;3812:271;3832:13;:20:::0;3827:25:::1;::::0;::::1;;3812:271;;3897:7;3877:27;;:13;3891:1;3877:16;;;;;;;;-1:-1:-1::0;;;3877:16:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:27;3873:74;;3924:8;;3873:74;3980:13;3994:20:::0;;:24:::1;::::0;4017:1:::1;::::0;3994:24:::1;:::i;:::-;3980:39;;;;;;-1:-1:-1::0;;;3980:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3961:13;3975:1;3961:16;;;;;;;;-1:-1:-1::0;;;3961:16:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;4033:13;:19;;;;;-1:-1:-1::0;;;4033:19:0::1;;;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;4033:19:0;;;;;::::1;;::::0;;::::1;;::::0;;;::::1;;;;;;::::0;;;;3703:424:4;;;:::o;3812:271:0:-:1;3854:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3812:271;;4554:147:::0;561:19;603:9;598:189;618:13;:20;614:24;;598:189;;;688:10;-1:-1:-1;;;;;663:35:0;:13;677:1;663:16;;;;;;-1:-1:-1;;;663:16:0;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;663:21:0;:35;659:118;;;735:4;718:21;;757:5;;659:118;640:3;;;;:::i;:::-;;;;598:189;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;818:23:0;;:41;;;845:14;818:41;797:139;;;;-1:-1:-1;;;797:139:0;;;;;;;:::i;:::-;-1:-1:-1;4662:14:0::1;:32:::0;4554:147::o;5202:364:4:-;5404:41;665:10:2;5437:7:4;5404:18;:41::i;:::-;5383:137;;;;-1:-1:-1;;;5383:137:4;;;;;;;:::i;:::-;5531:28;5541:4;5547:2;5551:7;5531:9;:28::i;3090:102:0:-;561:19;603:9;598:189;618:13;:20;614:24;;598:189;;;688:10;-1:-1:-1;;;;;663:35:0;:13;677:1;663:16;;;;;;-1:-1:-1;;;663:16:0;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;663:21:0;:35;659:118;;;735:4;718:21;;757:5;;659:118;640:3;;;;:::i;:::-;;;;598:189;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;818:23:0;;:41;;;845:14;818:41;797:139;;;;-1:-1:-1;;;797:139:0;;;;;;;:::i;:::-;3171:14;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;6780:1027::-:0;441:9;454:10;441:23;433:66;;;;-1:-1:-1;;;433:66:0;;14208:2:12;433:66:0;;;14190:21:12;14247:2;14227:18;;;14220:30;14286:32;14266:18;;;14259:60;14336:18;;433:66:0;14180:180:12;433:66:0;1016:14:::1;::::0;:19;;::::1;::::0;:56:::1;;;1057:15;1039:14;;:33;;1016:56;995:120;;;::::0;-1:-1:-1;;;995:120:0;;15351:2:12;995:120:0::1;::::0;::::1;15333:21:12::0;15390:2;15370:18;;;15363:30;-1:-1:-1;;;15409:18:12;;;15402:47;15466:18;;995:120:0::1;15323:167:12::0;995:120:0::1;6949:6:::2;6937:9;;:18;;;;:::i;:::-;6924:9;:31;6903:112;;;::::0;-1:-1:-1;;;6903:112:0;;17653:2:12;6903:112:0::2;::::0;::::2;17635:21:12::0;17692:2;17672:18;;;17665:30;17731:34;17711:18;;;17704:62;-1:-1:-1;;;17782:18:12;;;17775:32;17824:19;;6903:112:0::2;17625:224:12::0;6903:112:0::2;7052:21;;7042:6;:31;;7034:87;;;::::0;-1:-1:-1;;;7034:87:0;;18882:2:12;7034:87:0::2;::::0;::::2;18864:21:12::0;18921:2;18901:18;;;18894:30;18960:34;18940:18;;;18933:62;-1:-1:-1;;;19011:18:12;;;19004:41;19062:19;;7034:87:0::2;18854:233:12::0;7034:87:0::2;7198:16;::::0;7174:10:::2;7153:32;::::0;;;:20:::2;:32;::::0;;;;;:41:::2;::::0;7188:6;;7153:41:::2;:::i;:::-;:61;;7132:134;;;::::0;-1:-1:-1;;;7132:134:0;;10015:2:12;7132:134:0::2;::::0;::::2;9997:21:12::0;10054:2;10034:18;;;10027:30;10093:28;10073:18;;;10066:56;10139:18;;7132:134:0::2;9987:176:12::0;7132:134:0::2;7289:13;:20:::0;:30;-1:-1:-1;7289:30:0::2;7281:69;;;::::0;-1:-1:-1;;;7281:69:0;;11912:2:12;7281:69:0::2;::::0;::::2;11894:21:12::0;11951:2;11931:18;;;11924:30;11990:28;11970:18;;;11963:56;12036:18;;7281:69:0::2;11884:176:12::0;7281:69:0::2;7372:6;7382:1;7372:11;7369:51;;;7399:10;:8;:10::i;:::-;7438:25;7480:6;7466:21;;;;;;-1:-1:-1::0;;;7466:21:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7466:21:0::2;-1:-1:-1::0;7519:10:0::2;7498:32;::::0;;;:20:::2;:32;::::0;;;;:42;;7438:49;;-1:-1:-1;7534:6:0;;7498:32;;;:42:::2;::::0;7534:6;;7498:42:::2;:::i;:::-;;;;;;;;7571:6;7550:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;7593:9:0::2;::::0;-1:-1:-1;7588:161:0::2;7608:6;7604:1;:10;7588:161;;;7649:19;:17;:19::i;:::-;7635:8;7644:1;7635:11;;;;;;-1:-1:-1::0;;;7635:11:0::2;;;;;;;;;;::::0;;::::2;::::0;;;;;:33;7717:13:::2;:20:::0;7704:11;;:8;;7713:1;;7704:11;::::2;;;-1:-1:-1::0;;;7704:11:0::2;;;;;;;;;;;;;;;7692:10;-1:-1:-1::0;;;;;7687:51:0::2;;;;;;;;;;;7616:3:::0;::::2;::::0;::::2;:::i;:::-;;;;7588:161;;;;7759:32;7770:10;7782:8;7759:10;:32::i;2681:317::-:0;561:19;603:9;598:189;618:13;:20;614:24;;598:189;;;688:10;-1:-1:-1;;;;;663:35:0;:13;677:1;663:16;;;;;;-1:-1:-1;;;663:16:0;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;663:21:0;:35;659:118;;;735:4;718:21;;757:5;;659:118;640:3;;;;:::i;:::-;;;;598:189;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;818:23:0;;:41;;;845:14;818:41;797:139;;;;-1:-1:-1;;;797:139:0;;;;;;;:::i;:::-;2760:21:::1;2737:20;2792:200;2812:13;:20:::0;2808:24;::::1;2792:200;;;2861:13;2875:1;2861:16;;;;;;-1:-1:-1::0;;;2861:16:0::1;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;-1:-1:-1::0;;;;;2861:21:0::1;-1:-1:-1::0;;;;;2853:39:0::1;:128;2910:57;2919:12;2933:13;2947:1;2933:16;;;;;;-1:-1:-1::0;;;2933:16:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;:20:::1;:16;::::0;;::::1;;:20;::::0;2955:11:::1;::::0;-1:-1:-1;;;;;2955:11:0::1;2910:8;:57::i;:::-;2853:128;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;2834:3:0;::::1;::::0;::::1;:::i;:::-;;;;2792:200;;5632:179:4::0;5765:39;5782:4;5788:2;5792:7;5765:39;;;;;;;;;;;;:16;:39::i;7871:220:0:-;7933:7;7973:16;7981:7;7973;:16::i;:::-;7952:107;;;;-1:-1:-1;;;7952:107:0;;;;;;;:::i;:::-;-1:-1:-1;8077:7:0;7871:220::o;5816:555::-;561:19;603:9;598:189;618:13;:20;614:24;;598:189;;;688:10;-1:-1:-1;;;;;663:35:0;:13;677:1;663:16;;;;;;-1:-1:-1;;;663:16:0;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;663:21:0;:35;659:118;;;735:4;718:21;;757:5;;659:118;640:3;;;;:::i;:::-;;;;598:189;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;818:23:0;;:41;;;845:14;818:41;797:139;;;;-1:-1:-1;;;797:139:0;;;;;;;:::i;:::-;5943:13:::1;::::0;5919::::1;:20:::0;:37:::1;;5911:76;;;::::0;-1:-1:-1;;;5911:76:0;;11912:2:12;5911:76:0::1;::::0;::::1;11894:21:12::0;11951:2;11931:18;;;11924:30;11990:28;11970:18;;;11963:56;12036:18;;5911:76:0::1;11884:176:12::0;5911:76:0::1;6006:18;::::0;::::1;;6005:19;5997:72;;;::::0;-1:-1:-1;;;5997:72:0;;13026:2:12;5997:72:0::1;::::0;::::1;13008:21:12::0;13065:2;13045:18;;;13038:30;13104:34;13084:18;;;13077:62;-1:-1:-1;;;13155:18:12;;;13148:39;13204:19;;5997:72:0::1;12998:231:12::0;5997:72:0::1;6100:13;;6079:17;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;6166:13:0::1;::::0;6124:25:::1;::::0;6152:28:::1;::::0;::::1;;;;-1:-1:-1::0;;;6152:28:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;6152:28:0::1;;6124:56;;6196:9;6191:98;6211:13;;6207:1;:17;6191:98;;;6259:19;:17;:19::i;:::-;6245:8;6254:1;6245:11;;;;;;-1:-1:-1::0;;;6245:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;:33;6226:3;::::1;::::0;::::1;:::i;:::-;;;;6191:98;;;;6299:30;6310:8;6320;6299:10;:30::i;:::-;-1:-1:-1::0;;6339:18:0::1;:25:::0;;-1:-1:-1;;6339:25:0::1;6360:4;6339:25;::::0;;-1:-1:-1;5816:555:0:o;2267:313:4:-;2379:7;2418:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2418:16:4;2465:19;2444:107;;;;-1:-1:-1;;;2444:107:4;;16108:2:12;2444:107:4;;;16090:21:12;16147:2;16127:18;;;16120:30;16186:34;16166:18;;;16159:62;-1:-1:-1;;;16237:18:12;;;16230:39;16286:19;;2444:107:4;16080:231:12;5432:308:0;5544:4;;;598:189;618:13;:20;614:24;;598:189;;;688:10;-1:-1:-1;;;;;663:35:0;:13;677:1;663:16;;;;;;-1:-1:-1;;;663:16:0;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;663:21:0;:35;659:118;;;735:4;718:21;;757:5;;659:118;640:3;;;;:::i;:::-;;;;598:189;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;818:23:0;;:41;;;845:14;818:41;797:139;;;;-1:-1:-1;;;797:139:0;;;;;;;:::i;:::-;5569:8:::1;5564:147;5583:13;:20:::0;5579:24:::1;::::0;::::1;;5564:147;;;5648:7;5628:27;;:13;5642:1;5628:16;;;;;;;;-1:-1:-1::0;;;5628:16:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:27;5624:77;;;5682:4;5675:11;;;;;5624:77;5605:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5564:147;;;;5728:5;5721:12;;947:1;5432:308:::0;;;;:::o;1927:283:4:-;2039:7;-1:-1:-1;;;;;2083:19:4;;2062:108;;;;-1:-1:-1;;;2062:108:4;;15697:2:12;2062:108:4;;;15679:21:12;15736:2;15716:18;;;15709:30;15775:34;15755:18;;;15748:62;-1:-1:-1;;;15826:18:12;;;15819:40;15876:19;;2062:108:4;15669:232:12;2062:108:4;-1:-1:-1;;;;;;2187:16:4;;;;;:9;:16;;;;;;;1927:283::o;1693:145:10:-;1107:7;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;1273:23:10;1265:68;;;;-1:-1:-1;;;1265:68:10;;;;;;;:::i;:::-;1799:1:::1;1783:6:::0;;1762:40:::1;::::0;-1:-1:-1;;;;;1783:6:10;;::::1;::::0;1762:40:::1;::::0;1799:1;;1762:40:::1;1829:1;1812:19:::0;;-1:-1:-1;;;;;;1812:19:10::1;::::0;;1693:145::o;4783:573:0:-;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;1273:23:10;1265:68;;;;-1:-1:-1;;;1265:68:10;;;;;;;:::i;:::-;4836:14:0::1;4875:1;4853:4;;;;;;;;;-1:-1:-1::0;;;;;4853:4:0::1;-1:-1:-1::0;;;;;4853:16:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;;:::i;:::-;4836:40;;4880:17;4911:6:::0;4905:409:::1;4927:9;4923:1;:13;4905:409;;;4970:4;::::0;:17:::1;::::0;-1:-1:-1;;;4970:17:0;;::::1;::::0;::::1;20478:25:12::0;;;4950:17:0::1;::::0;-1:-1:-1;;;;;4970:4:0::1;::::0;:12:::1;::::0;20451:18:12;;4970:17:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4950:37;;5017;5023:9;5034:19;:17;:19::i;:::-;5017:5;:37::i;:::-;-1:-1:-1::0;;;;;5059:31:0;::::1;;::::0;;;:20:::1;:31;::::0;;;;:33;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;5137:20:0;::::1;;::::0;;;:9:::1;:20;::::0;;;;;5161:1:::1;5137:25;5132:176;;5171:39;5178:9;5189:19;:17;:19::i;5171:39::-;-1:-1:-1::0;;;;;5216:20:0;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;;5239:1:::1;5216:24:::0;;5246:20:::1;:31:::0;;;;;:33;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;5285:17:0::1;::::0;-1:-1:-1;5301:1:0::1;5285:17:::0;::::1;:::i;:::-;;;5132:176;-1:-1:-1::0;4938:4:0;::::1;::::0;::::1;:::i;:::-;;;;4905:409;;;;5340:9;5319:17;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;4783:573:0:o;2804:102:4:-;2860:13;2892:7;2885:14;;;;;:::i;4550:318::-;-1:-1:-1;;;;;4680:24:4;;665:10:2;4680:24:4;;4672:62;;;;-1:-1:-1;;;4672:62:4;;12672:2:12;4672:62:4;;;12654:21:12;12711:2;12691:18;;;12684:30;12750:27;12730:18;;;12723:55;12795:18;;4672:62:4;12644:175:12;4672:62:4;665:10:2;4745:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4745:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;4745:53:4;;;;;;;;;;4813:48;;9537:41:12;;;4745:42:4;;665:10:2;4813:48:4;;9510:18:12;4813:48:4;;;;;;;4550:318;;:::o;5877:354::-;6059:41;665:10:2;6092:7:4;6059:18;:41::i;:::-;6038:137;;;;-1:-1:-1;;;6038:137:4;;;;;;;:::i;:::-;6185:39;6199:4;6205:2;6209:7;6218:5;6185:13;:39::i;:::-;5877:354;;;;:::o;2972:451::-;3085:13;3135:16;3143:7;3135;:16::i;:::-;3114:110;;;;-1:-1:-1;;;3114:110:4;;18466:2:12;3114:110:4;;;18448:21:12;18505:2;18485:18;;;18478:30;18544:34;18524:18;;;18517:62;-1:-1:-1;;;18595:18:12;;;18588:45;18650:19;;3114:110:4;18438:237:12;3114:110:4;3235:21;3259:10;:8;:10::i;:::-;3235:34;;3322:1;3304:7;3298:21;:25;:118;;;;;;;;;;;;;;;;;3366:7;3375:18;:7;:16;:18::i;:::-;3349:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3298:118;3279:137;2972:451;-1:-1:-1;;;2972:451:4:o;1987:240:10:-;1107:7;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;1273:23:10;1265:68;;;;-1:-1:-1;;;1265:68:10;;;;;;;:::i;:::-;-1:-1:-1;;;;;2075:22:10;::::1;2067:73;;;::::0;-1:-1:-1;;;2067:73:10;;10789:2:12;2067:73:10::1;::::0;::::1;10771:21:12::0;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:12;;;10911:36;10964:19;;2067:73:10::1;10761:228:12::0;2067:73:10::1;2176:6;::::0;;2155:38:::1;::::0;-1:-1:-1;;;;;2155:38:10;;::::1;::::0;2176:6;::::1;::::0;2155:38:::1;::::0;::::1;2203:6;:17:::0;;-1:-1:-1;;;;;;2203:17:10::1;-1:-1:-1::0;;;;;2203:17:10;;;::::1;::::0;;;::::1;::::0;;1987:240::o;3260:107:0:-;561:19;603:9;598:189;618:13;:20;614:24;;598:189;;;688:10;-1:-1:-1;;;;;663:35:0;:13;677:1;663:16;;;;;;-1:-1:-1;;;663:16:0;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;663:21:0;:35;659:118;;;735:4;718:21;;757:5;;659:118;640:3;;;;:::i;:::-;;;;598:189;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;818:23:0;;:41;;;845:14;818:41;797:139;;;;-1:-1:-1;;;797:139:0;;;;;;;:::i;:::-;-1:-1:-1;3338:9:0::1;:22:::0;3260:107::o;4199:272::-;561:19;603:9;598:189;618:13;:20;614:24;;598:189;;;688:10;-1:-1:-1;;;;;663:35:0;:13;677:1;663:16;;;;;;-1:-1:-1;;;663:16:0;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;663:21:0;:35;659:118;;;735:4;718:21;;757:5;;659:118;640:3;;;;:::i;:::-;;;;598:189;;;-1:-1:-1;1107:7:10;1133:6;-1:-1:-1;;;;;1133:6:10;665:10:2;818:23:0;;:41;;;845:14;818:41;797:139;;;;-1:-1:-1;;;797:139:0;;;;;;;:::i;:::-;4314:13:::1;:20:::0;:25;4306:68:::1;;;::::0;-1:-1:-1;;;4306:68:0;;14992:2:12;4306:68:0::1;::::0;::::1;14974:21:12::0;15031:2;15011:18;;;15004:30;15070:32;15050:18;;;15043:60;15120:18;;4306:68:0::1;14964:180:12::0;4306:68:0::1;4385:32;4396:10;4408:8;4385:10;:32::i;:::-;4449:8;:15;4428:17;;:36;;;;;;;:::i;7737:125:4:-:0;7802:4;7825:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7825:16:4;:30;;;7737:125::o;12245:171::-;12319:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;12319:29:4;-1:-1:-1;;;;;12319:29:4;;;;;;;;:24;;12372:23;12319:24;12372:14;:23::i;:::-;-1:-1:-1;;;;;12363:46:4;;;;;;;;;;;12245:171;;:::o;8020:445::-;8145:4;8186:16;8194:7;8186;:16::i;:::-;8165:107;;;;-1:-1:-1;;;8165:107:4;;;;;;;:::i;:::-;8282:13;8298:23;8313:7;8298:14;:23::i;:::-;8282:39;;8350:5;-1:-1:-1;;;;;8339:16:4;:7;-1:-1:-1;;;;;8339:16:4;;:63;;;;8395:7;-1:-1:-1;;;;;8371:31:4;:20;8383:7;8371:11;:20::i;:::-;-1:-1:-1;;;;;8371:31:4;;8339:63;:118;;;-1:-1:-1;;;;;;5098:25:4;;;5071:4;5098:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;8418:39;8331:127;8020:445;-1:-1:-1;;;;8020:445:4:o;11540:594::-;11707:4;-1:-1:-1;;;;;11680:31:4;:23;11695:7;11680:14;:23::i;:::-;-1:-1:-1;;;;;11680:31:4;;11659:119;;;;-1:-1:-1;;;11659:119:4;;18056:2:12;11659:119:4;;;18038:21:12;18095:2;18075:18;;;18068:30;18134:34;18114:18;;;18107:62;-1:-1:-1;;;18185:18:12;;;18178:39;18234:19;;11659:119:4;18028:231:12;11659:119:4;-1:-1:-1;;;;;11796:16:4;;11788:65;;;;-1:-1:-1;;;11788:65:4;;12267:2:12;11788:65:4;;;12249:21:12;12306:2;12286:18;;;12279:30;12345:34;12325:18;;;12318:62;-1:-1:-1;;;12396:18:12;;;12389:34;12440:19;;11788:65:4;12239:226:12;11788:65:4;11965:29;11982:1;11986:7;11965:8;:29::i;:::-;-1:-1:-1;;;;;12005:15:4;;;;;;:9;:15;;;;;:20;;12024:1;;12005:15;:20;;12024:1;;12005:20;:::i;:::-;;;;-1:-1:-1;;;;;;;12035:13:4;;;;;;:9;:13;;;;;:18;;12052:1;;12035:13;:18;;12052:1;;12035:18;:::i;:::-;;;;-1:-1:-1;;12063:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;12063:21:4;-1:-1:-1;;;;;12063:21:4;;;;;;;;;12100:27;;12063:16;;12100:27;;;;;;;11540:594;;;:::o;6455:263:0:-;6524:10;6503:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;;6547:17:0;:19;;;:17;:19;;;:::i;:::-;;;;;;6576:15;6594:19;:17;:19::i;:::-;6576:37;;6623:26;6629:10;6641:7;6623:5;:26::i;:::-;6690:13;:20;6664:47;;6681:7;;6669:10;;6664:47;;;;;6455:263;:::o;8713:313::-;8759:7;8778:14;8795:38;8812:13;:20;;;;8795:16;:38::i;:::-;8778:55;;8843:15;8869:13;8883:6;8869:21;;;;;;-1:-1:-1;;;8869:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8861:30;;8843:48;;8926:13;8963:1;8940:13;:20;;;;:24;;;;:::i;:::-;8926:39;;;;;;-1:-1:-1;;;8926:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8902:13;8916:6;8902:21;;;;;;-1:-1:-1;;;8902:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;8975:13;:19;;;;;-1:-1:-1;;;8975:19:0;;;;;;;;;;;;;;;;;-1:-1:-1;;8975:19:0;;;;;;;;;;;;;;;;;;;;;;;;9012:7;8713:313;-1:-1:-1;;8713:313:0:o;10135:516:4:-;-1:-1:-1;;;;;10249:16:4;;10241:61;;;;-1:-1:-1;;;10241:61:4;;16518:2:12;10241:61:4;;;16500:21:12;;;16537:18;;;16530:30;16596:34;16576:18;;;16569:62;16648:18;;10241:61:4;16490:182:12;10241:61:4;10329:15;;-1:-1:-1;;;;;10312:13:4;;;;;;:9;:13;;;;;:32;;:13;;;:32;;10329:15;;10312:32;:::i;:::-;;;;-1:-1:-1;10360:9:4;;-1:-1:-1;10355:290:4;10375:8;:15;10371:1;:19;10355:290;;;10420:20;10428:8;10437:1;10428:11;;;;;;-1:-1:-1;;;10428:11:4;;;;;;;;;;;;;;;10420:7;:20::i;:::-;10419:21;10411:62;;;;-1:-1:-1;;;10411:62:4;;11196:2:12;10411:62:4;;;11178:21:12;11235:2;11215:18;;;11208:30;11274;11254:18;;;11247:58;11322:18;;10411:62:4;11168:178:12;10411:62:4;10488:49;10517:1;10521:2;10525:8;10534:1;10525:11;;;;;;-1:-1:-1;;;10525:11:4;;;;;;;;10488:49;10575:2;10552:7;:20;10560:8;10569:1;10560:11;;;;;;-1:-1:-1;;;10560:11:4;;;;;;;;;;;;;;;10552:20;;;;;;;;;;;;:25;;;;;-1:-1:-1;;;;;10552:25:4;;;;;-1:-1:-1;;;;;10552:25:4;;;;;;10622:8;10631:1;10622:11;;;;;;-1:-1:-1;;;10622:11:4;;;;;;;;;;;;;;;10618:2;-1:-1:-1;;;;;10597:37:4;10614:1;-1:-1:-1;;;;;10597:37:4;;;;;;;;;;;10392:3;;;;:::i;:::-;;;;10355:290;;9697:313:0;9805:7;;9836:9;-1:-1:-1;;;;;9836:9:0;;:1;:9;:::i;:::-;9824:21;-1:-1:-1;9855:9:0;9867;-1:-1:-1;;;;;9867:9:0;;:1;:9;:::i;:::-;9855:21;-1:-1:-1;9886:9:0;9898;-1:-1:-1;;;;;9898:9:0;;:1;:9;:::i;:::-;9886:21;-1:-1:-1;9917:9:0;9929;-1:-1:-1;;;;;9929:9:0;;:1;:9;:::i;:::-;9917:21;-1:-1:-1;;;;;;9988:15:0;;9989:5;9917:21;9989:1;:5;:::i;:::-;9988:15;;;;:::i;:::-;9980:5;9984:1;9980;:5;:::i;:::-;9972;9976:1;9972;:5;:::i;:::-;-1:-1:-1;;;;;9956:13:0;;:5;9960:1;9956;:5;:::i;:::-;:13;;;;:::i;:::-;:21;;;;:::i;:::-;:29;;;;:::i;:::-;:47;;;;:::i;:::-;9949:54;9697:313;-1:-1:-1;;;;;;;;9697:313:0:o;9757:372:4:-;-1:-1:-1;;;;;9836:16:4;;9828:61;;;;-1:-1:-1;;;9828:61:4;;16518:2:12;9828:61:4;;;16500:21:12;;;16537:18;;;16530:30;16596:34;16576:18;;;16569:62;16648:18;;9828:61:4;16490:182:12;9828:61:4;9908:16;9916:7;9908;:16::i;:::-;9907:17;9899:58;;;;-1:-1:-1;;;9899:58:4;;11196:2:12;9899:58:4;;;11178:21:12;11235:2;11215:18;;;11208:30;11274;11254:18;;;11247:58;11322:18;;9899:58:4;11168:178:12;9899:58:4;-1:-1:-1;;;;;10024:13:4;;;;;;:9;:13;;;;;:18;;10041:1;;10024:13;:18;;10041:1;;10024:18;:::i;:::-;;;;-1:-1:-1;;10052:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10052:21:4;-1:-1:-1;;;;;10052:21:4;;;;;;;;10089:33;;10052:16;;;10089:33;;10052:16;;10089:33;9757:372;;:::o;7093:341::-;7244:28;7254:4;7260:2;7264:7;7244:9;:28::i;:::-;7303:48;7326:4;7332:2;7336:7;7345:5;7303:22;:48::i;:::-;7282:145;;;;-1:-1:-1;;;7282:145:4;;;;;;;:::i;9585:106:0:-;9645:13;9677:7;9670:14;;;;;:::i;271:703:11:-;327:13;544:10;540:51;;-1:-1:-1;;570:10:11;;;;;;;;;;;;-1:-1:-1;;;570:10:11;;;;;271:703::o;540:51::-;615:5;600:12;654:75;661:9;;654:75;;686:8;;;;:::i;:::-;;-1:-1:-1;708:10:11;;-1:-1:-1;716:2:11;708:10;;:::i;:::-;;;654:75;;;738:19;770:6;760:17;;;;;;-1:-1:-1;;;760:17:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;760:17:11;;738:39;;787:150;794:10;;787:150;;820:11;830:1;820:11;;:::i;:::-;;-1:-1:-1;888:10:11;896:2;888:5;:10;:::i;:::-;875:24;;:2;:24;:::i;:::-;862:39;;845:6;852;845:14;;;;;;-1:-1:-1;;;845:14:11;;;;;;;;;;;;:56;-1:-1:-1;;;;;845:56:11;;;;;;;;-1:-1:-1;915:11:11;924:2;915:11;;:::i;:::-;;;787:150;;9094:443:0;9280:13;:20;9158:7;;;;9332:16;9347:1;9332:12;:16;:::i;:::-;9242:231;;;;;;8402:19:12;;;;9322:27:0;;8437:12:12;;;8430:28;-1:-1:-1;;9371:14:0;8546:2:12;8542:15;;;8538:24;;8524:12;;;8517:46;9407:16:0;8579:12:12;;;8572:28;9445:10:0;8635:15:12;;8631:24;8616:13;;;8609:47;8672:13;;9242:231:0;;;-1:-1:-1;;9242:231:0;;;;;;;;;9215:272;;9242:231;9215:272;;;;;-1:-1:-1;9515:15:0;9524:6;9215:272;9515:15;:::i;12969:1022:4:-;13119:4;-1:-1:-1;;;;;13139:13:4;;1078:20:1;1116:8;13135:850:4;;13190:170;;-1:-1:-1;;;13190:170:4;;-1:-1:-1;;;;;13190:36:4;;;;;:170;;665:10:2;;13282:4:4;;13308:7;;13337:5;;13190:170;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13190:170:4;;;;;;;;-1:-1:-1;;13190:170:4;;;;;;;;;;;;:::i;:::-;;;13170:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13543:13:4;;13539:380;;13585:106;;-1:-1:-1;;;13585:106:4;;;;;;;:::i;13539:380::-;13871:6;13865:13;13856:6;13852:2;13848:15;13841:38;13170:763;-1:-1:-1;;;;;;13422:55:4;-1:-1:-1;;;13422:55:4;;-1:-1:-1;13415:62:4;;13135:850;-1:-1:-1;13970:4:4;12969:1022;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:12;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:12;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:257::-;484:6;537:2;525:9;516:7;512:23;508:32;505:2;;;558:6;550;543:22;505:2;602:9;589:23;621:31;646:5;621:31;:::i;687:261::-;757:6;810:2;798:9;789:7;785:23;781:32;778:2;;;831:6;823;816:22;778:2;868:9;862:16;887:31;912:5;887:31;:::i;953:398::-;1021:6;1029;1082:2;1070:9;1061:7;1057:23;1053:32;1050:2;;;1103:6;1095;1088:22;1050:2;1147:9;1134:23;1166:31;1191:5;1166:31;:::i;:::-;1216:5;-1:-1:-1;1273:2:12;1258:18;;1245:32;1286:33;1245:32;1286:33;:::i;:::-;1338:7;1328:17;;;1040:311;;;;;:::o;1356:466::-;1433:6;1441;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:2;;;1523:6;1515;1508:22;1470:2;1567:9;1554:23;1586:31;1611:5;1586:31;:::i;:::-;1636:5;-1:-1:-1;1693:2:12;1678:18;;1665:32;1706:33;1665:32;1706:33;:::i;:::-;1460:362;;1758:7;;-1:-1:-1;;;1812:2:12;1797:18;;;;1784:32;;1460:362::o;1827:824::-;1922:6;1930;1938;1946;1999:3;1987:9;1978:7;1974:23;1970:33;1967:2;;;2021:6;2013;2006:22;1967:2;2065:9;2052:23;2084:31;2109:5;2084:31;:::i;:::-;2134:5;-1:-1:-1;2191:2:12;2176:18;;2163:32;2204:33;2163:32;2204:33;:::i;:::-;2256:7;-1:-1:-1;2310:2:12;2295:18;;2282:32;;-1:-1:-1;2365:2:12;2350:18;;2337:32;2392:18;2381:30;;2378:2;;;2429:6;2421;2414:22;2378:2;2457:22;;2510:4;2502:13;;2498:27;-1:-1:-1;2488:2:12;;2544:6;2536;2529:22;2488:2;2572:73;2637:7;2632:2;2619:16;2614:2;2610;2606:11;2572:73;:::i;:::-;2562:83;;;1957:694;;;;;;;:::o;2656:436::-;2721:6;2729;2782:2;2770:9;2761:7;2757:23;2753:32;2750:2;;;2803:6;2795;2788:22;2750:2;2847:9;2834:23;2866:31;2891:5;2866:31;:::i;:::-;2916:5;-1:-1:-1;2973:2:12;2958:18;;2945:32;3015:15;;3008:23;2996:36;;2986:2;;3051:6;3043;3036:22;3097:325;3165:6;3173;3226:2;3214:9;3205:7;3201:23;3197:32;3194:2;;;3247:6;3239;3232:22;3194:2;3291:9;3278:23;3310:31;3335:5;3310:31;:::i;:::-;3360:5;3412:2;3397:18;;;;3384:32;;-1:-1:-1;;;3184:238:12:o;3427:1311::-;3541:6;3572:2;3615;3603:9;3594:7;3590:23;3586:32;3583:2;;;3636:6;3628;3621:22;3583:2;3681:9;3668:23;3714:18;3706:6;3703:30;3700:2;;;3751:6;3743;3736:22;3700:2;3779:22;;3832:4;3824:13;;3820:27;-1:-1:-1;3810:2:12;;3866:6;3858;3851:22;3810:2;3907;3894:16;3930:73;3946:56;3999:2;3946:56;:::i;:::-;3930:73;:::i;:::-;4025:3;4049:2;4044:3;4037:15;4077:2;4072:3;4068:12;4061:19;;4108:2;4104;4100:11;4156:7;4151:2;4145;4142:1;4138:10;4134:2;4130:19;4126:28;4123:41;4120:2;;;4182:6;4174;4167:22;4120:2;4209:6;4200:15;;4224:484;4238:2;4235:1;4232:9;4224:484;;;4293:4;4336:2;4330:3;4321:7;4317:17;4313:26;4310:2;;;4357:6;4349;4342:22;4310:2;4392:22;;:::i;:::-;4455:3;4442:17;4472:33;4497:7;4472:33;:::i;:::-;4518:22;;4589:12;;;4576:26;4560:14;;;4553:50;4616:18;;4256:1;4249:9;;;;;4654:12;;;;4686;4224:484;;;-1:-1:-1;4727:5:12;3552:1186;-1:-1:-1;;;;;;;3552:1186:12:o;4743:960::-;4827:6;4858:2;4901;4889:9;4880:7;4876:23;4872:32;4869:2;;;4922:6;4914;4907:22;4869:2;4967:9;4954:23;5000:18;4992:6;4989:30;4986:2;;;5037:6;5029;5022:22;4986:2;5065:22;;5118:4;5110:13;;5106:27;-1:-1:-1;5096:2:12;;5152:6;5144;5137:22;5096:2;5193;5180:16;5216:73;5232:56;5285:2;5232:56;:::i;5216:73::-;5311:3;5335:2;5330:3;5323:15;5363:2;5358:3;5354:12;5347:19;;5394:2;5390;5386:11;5442:7;5437:2;5431;5428:1;5424:10;5420:2;5416:19;5412:28;5409:41;5406:2;;;5468:6;5460;5453:22;5406:2;5495:6;5486:15;;5510:163;5524:2;5521:1;5518:9;5510:163;;;5581:17;;5569:30;;5542:1;5535:9;;;;;5619:12;;;;5651;;5510:163;;5708:255;5766:6;5819:2;5807:9;5798:7;5794:23;5790:32;5787:2;;;5840:6;5832;5825:22;5787:2;5884:9;5871:23;5903:30;5927:5;5903:30;:::i;5968:259::-;6037:6;6090:2;6078:9;6069:7;6065:23;6061:32;6058:2;;;6111:6;6103;6096:22;6058:2;6148:9;6142:16;6167:30;6191:5;6167:30;:::i;6232:480::-;6301:6;6354:2;6342:9;6333:7;6329:23;6325:32;6322:2;;;6375:6;6367;6360:22;6322:2;6420:9;6407:23;6453:18;6445:6;6442:30;6439:2;;;6490:6;6482;6475:22;6439:2;6518:22;;6571:4;6563:13;;6559:27;-1:-1:-1;6549:2:12;;6605:6;6597;6590:22;6549:2;6633:73;6698:7;6693:2;6680:16;6675:2;6671;6667:11;6633:73;:::i;6717:292::-;6775:6;6828:2;6816:9;6807:7;6803:23;6799:32;6796:2;;;6849:6;6841;6834:22;6796:2;6893:9;6880:23;6943:6;6936:5;6932:18;6925:5;6922:29;6912:2;;6970:6;6962;6955:22;7014:190;7073:6;7126:2;7114:9;7105:7;7101:23;7097:32;7094:2;;;7147:6;7139;7132:22;7094:2;-1:-1:-1;7175:23:12;;7084:120;-1:-1:-1;7084:120:12:o;7209:194::-;7279:6;7332:2;7320:9;7311:7;7307:23;7303:32;7300:2;;;7353:6;7345;7338:22;7300:2;-1:-1:-1;7381:16:12;;7290:113;-1:-1:-1;7290:113:12:o;7408:257::-;7449:3;7487:5;7481:12;7514:6;7509:3;7502:19;7530:63;7586:6;7579:4;7574:3;7570:14;7563:4;7556:5;7552:16;7530:63;:::i;:::-;7647:2;7626:15;-1:-1:-1;;7622:29:12;7613:39;;;;7654:4;7609:50;;7457:208;-1:-1:-1;;7457:208:12:o;7670:470::-;7849:3;7887:6;7881:13;7903:53;7949:6;7944:3;7937:4;7929:6;7925:17;7903:53;:::i;:::-;8019:13;;7978:16;;;;8041:57;8019:13;7978:16;8075:4;8063:17;;8041:57;:::i;:::-;8114:20;;7857:283;-1:-1:-1;;;;7857:283:12:o;8904:488::-;-1:-1:-1;;;;;9173:15:12;;;9155:34;;9225:15;;9220:2;9205:18;;9198:43;9272:2;9257:18;;9250:34;;;9320:3;9315:2;9300:18;;9293:31;;;9098:4;;9341:45;;9366:19;;9358:6;9341:45;:::i;:::-;9333:53;9107:285;-1:-1:-1;;;;;;9107:285:12:o;9589:219::-;9738:2;9727:9;9720:21;9701:4;9758:44;9798:2;9787:9;9783:18;9775:6;9758:44;:::i;10168:414::-;10370:2;10352:21;;;10409:2;10389:18;;;10382:30;10448:34;10443:2;10428:18;;10421:62;-1:-1:-1;;;10514:2:12;10499:18;;10492:48;10572:3;10557:19;;10342:240::o;13593:408::-;13795:2;13777:21;;;13834:2;13814:18;;;13807:30;13873:34;13868:2;13853:18;;13846:62;-1:-1:-1;;;13939:2:12;13924:18;;13917:42;13991:3;13976:19;;13767:234::o;17090:356::-;17292:2;17274:21;;;17311:18;;;17304:30;17370:34;17365:2;17350:18;;17343:62;17437:2;17422:18;;17264:182::o;19092:415::-;19294:2;19276:21;;;19333:2;19313:18;;;19306:30;19372:34;19367:2;19352:18;;19345:62;-1:-1:-1;;;19438:2:12;19423:18;;19416:49;19497:3;19482:19;;19266:241::o;19914:413::-;20116:2;20098:21;;;20155:2;20135:18;;;20128:30;20194:34;20189:2;20174:18;;20167:62;-1:-1:-1;;;20260:2:12;20245:18;;20238:47;20317:3;20302:19;;20088:239::o;20514:257::-;20586:4;20580:11;;;20618:17;;20665:18;20650:34;;20686:22;;;20647:62;20644:2;;;20712:18;;:::i;:::-;20748:4;20741:24;20560:211;:::o;20776:275::-;20847:2;20841:9;20912:2;20893:13;;-1:-1:-1;;20889:27:12;20877:40;;20947:18;20932:34;;20968:22;;;20929:62;20926:2;;;20994:18;;:::i;:::-;21030:2;21023:22;20821:230;;-1:-1:-1;20821:230:12:o;21056:196::-;21129:4;21162:18;21154:6;21151:30;21148:2;;;21184:18;;:::i;:::-;-1:-1:-1;21229:1:12;21225:14;21241:4;21221:25;;21138:114::o;21257:253::-;21297:3;-1:-1:-1;;;;;21386:2:12;21383:1;21379:10;21416:2;21413:1;21409:10;21447:3;21443:2;21439:12;21434:3;21431:21;21428:2;;;21455:18;;:::i;21515:128::-;21555:3;21586:1;21582:6;21579:1;21576:13;21573:2;;;21592:18;;:::i;:::-;-1:-1:-1;21628:9:12;;21563:80::o;21648:120::-;21688:1;21714;21704:2;;21719:18;;:::i;:::-;-1:-1:-1;21753:9:12;;21694:74::o;21773:168::-;21813:7;21879:1;21875;21871:6;21867:14;21864:1;21861:21;21856:1;21849:9;21842:17;21838:45;21835:2;;;21886:18;;:::i;:::-;-1:-1:-1;21926:9:12;;21825:116::o;21946:125::-;21986:4;22014:1;22011;22008:8;22005:2;;;22019:18;;:::i;:::-;-1:-1:-1;22056:9:12;;21995:76::o;22076:258::-;22148:1;22158:113;22172:6;22169:1;22166:13;22158:113;;;22248:11;;;22242:18;22229:11;;;22222:39;22194:2;22187:10;22158:113;;;22289:6;22286:1;22283:13;22280:2;;;-1:-1:-1;;22324:1:12;22306:16;;22299:27;22129:205::o;22339:380::-;22418:1;22414:12;;;;22461;;;22482:2;;22536:4;22528:6;22524:17;22514:27;;22482:2;22589;22581:6;22578:14;22558:18;22555:38;22552:2;;;22635:10;22630:3;22626:20;22623:1;22616:31;22670:4;22667:1;22660:15;22698:4;22695:1;22688:15;22724:197;22762:3;22790:6;22831:2;22824:5;22820:14;22858:2;22849:7;22846:15;22843:2;;;22864:18;;:::i;:::-;22913:1;22900:15;;22770:151;-1:-1:-1;;;22770:151:12:o;22926:135::-;22965:3;-1:-1:-1;;22986:17:12;;22983:2;;;23006:18;;:::i;:::-;-1:-1:-1;23053:1:12;23042:13;;22973:88::o;23066:112::-;23098:1;23124;23114:2;;23129:18;;:::i;:::-;-1:-1:-1;23163:9:12;;23104:74::o;23183:127::-;23244:10;23239:3;23235:20;23232:1;23225:31;23275:4;23272:1;23265:15;23299:4;23296:1;23289:15;23315:127;23376:10;23371:3;23367:20;23364:1;23357:31;23407:4;23404:1;23397:15;23431:4;23428:1;23421:15;23447:127;23508:10;23503:3;23499:20;23496:1;23489:31;23539:4;23536:1;23529:15;23563:4;23560:1;23553:15;23579:131;-1:-1:-1;;;;;23654:31:12;;23644:42;;23634:2;;23700:1;23697;23690:12;23634:2;23624:86;:::o;23715:131::-;-1:-1:-1;;;;;;23789:32:12;;23779:43;;23769:2;;23836:1;23833;23826:12

Swarm Source

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