ETH Price: $3,888.13 (+0.14%)

Token

DANKBOTS Art Drops (DBAD)
 

Overview

Max Total Supply

508 DBAD

Holders

145

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
krenskiy.eth
0x0e8Caf9eca5E45df0E6f50f58A5bF664db1740c1
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:
DankbotsArtDrops

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-20
*/

// SPDX-License-Identifier: MIT

/**
 ____              _    _           _          _         _   ____                      
|  _ \  __ _ _ __ | | _| |__   ___ | |_ ___   / \   _ __| |_|  _ \ _ __ ___  _ __  ___ 
| | | |/ _` | '_ \| |/ / '_ \ / _ \| __/ __| / _ \ | '__| __| | | | '__/ _ \| '_ \/ __|
| |_| | (_| | | | |   <| |_) | (_) | |_\__ \/ ___ \| |  | |_| |_| | | | (_) | |_) \__ \
|____/ \__,_|_| |_|_|\_\_.__/ \___/ \__|___/_/   \_\_|   \__|____/|_|  \___/| .__/|___/
                                                                            |_|        
*/


pragma solidity ^0.8.0;
/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` fo
r some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */

library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}


pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol



pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol



pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


/**
 * @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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol



pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol



pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol



pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}


pragma solidity ^0.8.0;

/**
 * @dev Interface of for other contracts 
 */
interface IBalance {
    function balanceOf( address holderWallet ) external view returns (uint);
    function balanceOf( address holderWallet, uint id ) external view returns (uint);
}


pragma solidity ^0.8.0;

contract DankbotsArtDrops is ERC1155, Ownable {
    
	event maxSupplyEvent( uint _id, uint256 _value );
	event pausedEvent( uint _id, bool _value );
	event merkleRootEvent( uint _id, bytes32 _value );
	event costEvent( uint _id, uint256 _value );
	event whitelistCostEvent( uint _id, uint256 _value );
	event discountEvent( uint _id, uint256 _value );

	address public withdrawal_address = 0x405874F1Ce5778d5FFDf66f7aba14DA446564B6a;
	address public dankbots_address = 0x1821D56D2f3BC5a5ABA6420676A4bbCBCCb2F7fd;
	address public founders_pass_address = 0xc62f536B47CE58DBb97D36B1BfDD814093392414;

	string public name = "DANKBOTS Art Drops";
	string public symbol = "DBAD";

	mapping( uint => string ) public tokenURI;				// token uri by art drop id
	mapping( uint => uint ) public maxSupply;				// max supply by art drop id
	mapping( uint => uint ) public totalSupply;				// total suppy by art drop id
	mapping( uint => bool ) public paused;					// paused by art drop id
	mapping( uint => bytes32 ) public merkleRoot;				// merkle root by art drop id
	mapping( uint => uint256 ) public cost;					// cost by art drop id
	mapping( uint => uint256 ) public whitelistCost;			// whitelist cost by art drop id
	mapping( uint => uint256 ) public dankbotCost;				// Dankbot cost by art drop id
	mapping( uint => uint256 ) public discount;				// discount by founders pass id
	mapping( address => mapping ( uint => bool ) ) public claimed;		// claimed by address and art drop id 


	constructor() ERC1155("") {
	}

	function setDankbotsAddress( address _newAddress ) 
	public 
	onlyOwner {
		dankbots_address = _newAddress;
	}

	function setFoundersPassAddress( address _newAddress ) 
	public 
	onlyOwner {
		founders_pass_address = _newAddress;
	}

	function setTokenURI( uint _id, string memory _uri ) 
	external 
	onlyOwner {
		tokenURI[_id] = _uri;
		emit URI( _uri, _id );
	}

	function uri( uint _id ) 
	public 
	override
	view 
	returns ( string memory ) {
		return tokenURI[ _id ];
	}

	function hasFoundersPass( address _wallet, uint _foundersPassId ) 
	public 
	view 
	returns ( bool ) {
		return IBalance( founders_pass_address ).balanceOf( _wallet, _foundersPassId ) > 0;
	}

	function hasDankbot( address _wallet ) 
	public 
	view 
	returns ( bool ) {
		return IBalance( dankbots_address ).balanceOf( _wallet ) > 0;
	}

	function setMaxSupply( uint _id, uint256 _maxSupply ) 
	external 
	onlyOwner {
		maxSupply[ _id ] = _maxSupply;
		emit maxSupplyEvent( _id, _maxSupply );
	}

	function setPaused( uint _id, bool _paused ) 
	external 
	onlyOwner {
		paused[ _id ] = _paused;
		emit pausedEvent( _id, _paused );
	}

	function setMerkleRoot( uint _id, bytes32 _root ) 
	external 
	onlyOwner {
		merkleRoot[ _id ] = _root;
		emit merkleRootEvent( _id, _root );
	}

	function setCost( uint _id, uint256 _cost ) 
	external 
	onlyOwner {
		cost[ _id ] = _cost;
		emit costEvent( _id, _cost );
	}

	function getCost( uint _id, uint _foundersPassId )
	public
	view
	returns ( uint256 ) {
		return ( ( cost[ _id ] * discount[ _foundersPassId ] ) / 100 );
	}

	function setWhitelistCost( uint _id, uint256 _whitelistCost ) 
	external 
	onlyOwner {
		whitelistCost[ _id ] = _whitelistCost;
		emit whitelistCostEvent( _id, _whitelistCost );
	}

	function setDankbotCost( uint _id, uint256 _dankbotCost ) 
	external 
	onlyOwner {
		dankbotCost[ _id ] = _dankbotCost;
		emit whitelistCostEvent( _id, _dankbotCost );
	}

	function setDiscount( uint _foundersPassId, uint256 _discount ) 
	external 
	onlyOwner {
		discount[ _foundersPassId ] = _discount;
		emit discountEvent( _foundersPassId, _discount );
	}

	function mint(address _to, uint _id, uint _amount) 
	external 
	onlyOwner {
		require( _id >= 0, "Invalid token id" );
		require( totalSupply[ _id ] + _amount <= maxSupply[ _id ], "Max mint limit reached!" );
		_mint( _to, _id, _amount, "" );
		totalSupply[ _id ] += _amount;
	}

	function mintWhitelist( bytes32[] calldata _merkleProof, uint _id ) 
	public 
	payable {
		require( _id >= 0, "Invalid token id" );
		require( ! paused[ _id ], "Cannot mint while paused" );
		require( totalSupply[ _id ] + 1 <= maxSupply[ _id ], "Max mint limit reached!" );

		// determine if user is on whitelist
		if ( msg.sender != owner() ) {
			require( ! claimed[ msg.sender ][ _id ], "Address has already claimed!" );
			bytes32 leaf = keccak256( abi.encodePacked( msg.sender ) );
			require( MerkleProof.verify( _merkleProof, merkleRoot[ _id ], leaf ), "Invalid proof" );
			require( msg.value >= whitelistCost[ _id ], "Insufficient funds to mint" );
		}

		_mint( msg.sender, _id, 1, "" );
		totalSupply[ _id ] += 1;
		claimed[ msg.sender ][ _id ] = true;
	}

	function mintDankbot( uint _id ) 
	public 
	payable {
		require( _id >= 0, "Invalid token id" );
		require( ! paused[ _id ], "Cannot mint while paused" );
		require( totalSupply[ _id ] + 1 <= maxSupply[ _id ], "Max mint limit reached!" );

		// determine if user has a dankbot and a founders pass 
		if ( msg.sender != owner() ) {
			require( ! claimed[ msg.sender ][ _id ], "Address has already claimed!" );
			require( IBalance( dankbots_address ).balanceOf( msg.sender ) > 0, "Must have a DANKBOT!" );
			require( msg.value >= dankbotCost[ _id ], "Insufficient funds to mint" );
		}

		_mint( msg.sender, _id, 1, "" );
		totalSupply[ _id ] += 1;
		claimed[ msg.sender ][ _id ] = true;
	}

	function mintFoundersPass( uint _id, uint _foundersPassId  ) 
	public 
	payable {
		require( _id >= 0, "Invalid token id" );
		require( ! paused[ _id ], "Cannot mint while paused" );
		require( totalSupply[ _id ] + 1 <= maxSupply[ _id ], "Max mint limit reached!" );

		// determine if user has a dankbot and a founders pass 
		if ( msg.sender != owner() ) {
			require( ! claimed[ msg.sender ][ _id ], "Address has already claimed!" );
			require( IBalance( founders_pass_address ).balanceOf( msg.sender, _foundersPassId ) > 0, "Must have a DANKBOTS Founders Pass!" );
			require( msg.value >= ( ( cost[ _id ] * discount[ _foundersPassId ] ) / 100 ), "Insufficient funds to mint" );
		}

		_mint( msg.sender, _id, 1, "" );
		totalSupply[ _id ] += 1;
		claimed[ msg.sender ][ _id ] = true;
	}

	function setWithdrawalAddress( address _newAddress ) 
	public 
	onlyOwner {
		withdrawal_address = _newAddress;
	}

	function withdraw() 
	public 
	payable 
	onlyOwner {
		(bool os, ) = payable( withdrawal_address ).call{value: address(this).balance}("");
		require(os);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"costEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"discountEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"maxSupplyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_value","type":"bytes32"}],"name":"merkleRootEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"pausedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"whitelistCostEvent","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dankbotCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dankbots_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"discount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"founders_pass_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_foundersPassId","type":"uint256"}],"name":"getCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"hasDankbot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_foundersPassId","type":"uint256"}],"name":"hasFoundersPass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mintDankbot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_foundersPassId","type":"uint256"}],"name":"mintFoundersPass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mintWhitelist","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":"","type":"uint256"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_dankbotCost","type":"uint256"}],"name":"setDankbotCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setDankbotsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_foundersPassId","type":"uint256"},{"internalType":"uint256","name":"_discount","type":"uint256"}],"name":"setDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setFoundersPassAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_whitelistCost","type":"uint256"}],"name":"setWhitelistCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setWithdrawalAddress","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":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawal_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

600480546001600160a01b031990811673405874f1ce5778d5ffdf66f7aba14da446564b6a17909155600580548216731821d56d2f3bc5a5aba6420676a4bbcbccb2f7fd1790556006805490911673c62f536b47ce58dbb97d36b1bfdd81409339241417905560c0604052601260808190527144414e4b424f5453204172742044726f707360701b60a09081526200009b91600791906200016f565b50604080518082019091526004808252631110905160e21b6020909201918252620000c9916008916200016f565b50348015620000d757600080fd5b50604080516020810190915260008152620000f28162000104565b50620000fe336200011d565b62000252565b8051620001199060029060208401906200016f565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200017d9062000215565b90600052602060002090601f016020900481019282620001a15760008555620001ec565b82601f10620001bc57805160ff1916838001178555620001ec565b82800160010185558215620001ec579182015b82811115620001ec578251825591602001919060010190620001cf565b50620001fa929150620001fe565b5090565b5b80821115620001fa5760008155600101620001ff565b600181811c908216806200022a57607f821691505b602082108114156200024c57634e487b7160e01b600052602260045260246000fd5b50919050565b612fb380620002626000396000f3fe6080604052600436106102705760003560e01c80637696e0881161014f578063b9334a1b116100c1578063eb864df31161007a578063eb864df3146107ec578063f043e502146107ff578063f242432a1461082c578063f2fde38b1461084c578063f6d40da11461086c578063f918faf11461089957600080fd5b8063b9334a1b146106f6578063bd85b03914610716578063c72c293a14610743578063c87b56dd14610763578063daff97b514610783578063e985e9c5146107a357600080fd5b80639e13f349116101135780639e13f34914610650578063a22cb46514610670578063a2efdd9614610690578063a6d612f9146106b0578063a7c18c14146106c3578063a7f3735e146106e357600080fd5b80637696e088146105a3578063869f7594146105c35780638da5cb5b146105f05780639097548d1461060e57806395d89b411461063b57600080fd5b8063364e3c84116101e8578063488caa73116101ac578063488caa73146104ae5780634dd6c8de146104e65780634e1273f4146105215780635b393d701461054e5780635d008f8c1461056e578063715018a61461058e57600080fd5b8063364e3c841461041957806337da577c146104395780633c70b357146104595780633ccfd60b1461048657806343dbc1961461048e57600080fd5b80630e89341c1161023a5780630e89341c14610357578063156e29f614610377578063162094c41461039957806318712c21146103b957806321b8092e146103d95780632eb2c2d6146103f957600080fd5b8062dde10e14610275578062fdd58e146102ba57806301ffc9a7146102e857806306fdde03146103085780630b1d07de1461032a575b600080fd5b34801561028157600080fd5b506102a5610290366004612976565b600c6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156102c657600080fd5b506102da6102d53660046127a2565b6108b9565b6040519081526020016102b1565b3480156102f457600080fd5b506102a561030336600461293e565b610950565b34801561031457600080fd5b5061031d6109a2565b6040516102b19190612ba0565b34801561033657600080fd5b506102da610345366004612976565b60116020526000908152604090205481565b34801561036357600080fd5b5061031d610372366004612976565b610a30565b34801561038357600080fd5b506103976103923660046127cb565b610ad2565b005b3480156103a557600080fd5b506103976103b43660046129e9565b610b83565b3480156103c557600080fd5b506103976103d43660046129c8565b610c09565b3480156103e557600080fd5b506103976103f4366004612624565b610c82565b34801561040557600080fd5b50610397610414366004612670565b610cce565b34801561042557600080fd5b506102a5610434366004612624565b610d65565b34801561044557600080fd5b506103976104543660046129c8565b610ded565b34801561046557600080fd5b506102da610474366004612976565b600d6020526000908152604090205481565b610397610e5f565b34801561049a57600080fd5b506103976104a9366004612624565b610eec565b3480156104ba57600080fd5b506004546104ce906001600160a01b031681565b6040516001600160a01b0390911681526020016102b1565b3480156104f257600080fd5b506102a56105013660046127a2565b601260209081526000928352604080842090915290825290205460ff1681565b34801561052d57600080fd5b5061054161053c3660046127fd565b610f38565b6040516102b19190612b5f565b34801561055a57600080fd5b506103976105693660046129c8565b61109a565b34801561057a57600080fd5b50610397610589366004612624565b61110b565b34801561059a57600080fd5b50610397611157565b3480156105af57600080fd5b506103976105be3660046129c8565b61118d565b3480156105cf57600080fd5b506102da6105de366004612976565b600a6020526000908152604090205481565b3480156105fc57600080fd5b506003546001600160a01b03166104ce565b34801561061a57600080fd5b506102da610629366004612976565b600e6020526000908152604090205481565b34801561064757600080fd5b5061031d6111ff565b34801561065c57600080fd5b5061039761066b3660046129c8565b61120c565b34801561067c57600080fd5b5061039761068b366004612779565b61127d565b34801561069c57600080fd5b506006546104ce906001600160a01b031681565b6103976106be3660046128c8565b61128c565b3480156106cf57600080fd5b506102da6106de3660046129c8565b6114a4565b6103976106f1366004612976565b6114de565b34801561070257600080fd5b506103976107113660046129c8565b6116f2565b34801561072257600080fd5b506102da610731366004612976565b600b6020526000908152604090205481565b34801561074f57600080fd5b506102a561075e3660046127a2565b611764565b34801561076f57600080fd5b5061031d61077e366004612976565b6117f2565b34801561078f57600080fd5b5061039761079e3660046129a6565b61180b565b3480156107af57600080fd5b506102a56107be36600461263e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6103976107fa3660046129c8565b611887565b34801561080b57600080fd5b506102da61081a366004612976565b60106020526000908152604090205481565b34801561083857600080fd5b50610397610847366004612716565b611ade565b34801561085857600080fd5b50610397610867366004612624565b611b65565b34801561087857600080fd5b506102da610887366004612976565b600f6020526000908152604090205481565b3480156108a557600080fd5b506005546104ce906001600160a01b031681565b60006001600160a01b03831661092a5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061098157506001600160e01b031982166303a24d0760e21b145b8061099c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600780546109af90612e16565b80601f01602080910402602001604051908101604052809291908181526020018280546109db90612e16565b8015610a285780601f106109fd57610100808354040283529160200191610a28565b820191906000526020600020905b815481529060010190602001808311610a0b57829003601f168201915b505050505081565b6000818152600960205260409020805460609190610a4d90612e16565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7990612e16565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b50505050509050919050565b6003546001600160a01b03163314610afc5760405162461bcd60e51b815260040161092190612cf8565b6000828152600a6020908152604080832054600b90925290912054610b22908390612dbf565b1115610b405760405162461bcd60e51b815260040161092190612bfb565b610b5b83838360405180602001604052806000815250611bfd565b6000828152600b602052604081208054839290610b79908490612dbf565b9091555050505050565b6003546001600160a01b03163314610bad5760405162461bcd60e51b815260040161092190612cf8565b60008281526009602090815260409091208251610bcc9284019061246e565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610bfd9190612ba0565b60405180910390a25050565b6003546001600160a01b03163314610c335760405162461bcd60e51b815260040161092190612cf8565b6000828152600d602090815260409182902083905581518481529081018390527e4b963d71d9fa49ebeda334c3f8bef15c84f94077c51a86a84351aef12a103b91015b60405180910390a15050565b6003546001600160a01b03163314610cac5760405162461bcd60e51b815260040161092190612cf8565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038516331480610cea5750610cea85336107be565b610d515760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610921565b610d5e8585858585611d07565b5050505050565b6005546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b158015610dae57600080fd5b505afa158015610dc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de6919061298e565b1192915050565b6003546001600160a01b03163314610e175760405162461bcd60e51b815260040161092190612cf8565b6000828152600a602090815260409182902083905581518481529081018390527f1bd0dea5ca07eda6cf50f09870264b6d7ed3f4dca349f076ef4cba5fca28f0909101610c76565b6003546001600160a01b03163314610e895760405162461bcd60e51b815260040161092190612cf8565b6004546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610ed6576040519150601f19603f3d011682016040523d82523d6000602084013e610edb565b606091505b5050905080610ee957600080fd5b50565b6003546001600160a01b03163314610f165760405162461bcd60e51b815260040161092190612cf8565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60608151835114610f9d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610921565b6000835167ffffffffffffffff811115610fc757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ff0578160200160208202803683370190505b50905060005b84518110156110925761105785828151811061102257634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061104a57634e487b7160e01b600052603260045260246000fd5b60200260200101516108b9565b82828151811061107757634e487b7160e01b600052603260045260246000fd5b602090810291909101015261108b81612e7e565b9050610ff6565b509392505050565b6003546001600160a01b031633146110c45760405162461bcd60e51b815260040161092190612cf8565b6000828152600f602090815260409182902083905581518481529081018390527ecb984c960474db8d59265ba6a3bad100ed5eb7048f0cabb40b4d21195146849101610c76565b6003546001600160a01b031633146111355760405162461bcd60e51b815260040161092190612cf8565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146111815760405162461bcd60e51b815260040161092190612cf8565b61118b6000611f00565b565b6003546001600160a01b031633146111b75760405162461bcd60e51b815260040161092190612cf8565b6000828152600e602090815260409182902083905581518481529081018390527fb78c60ae6f242b85e7d0d0be6c71f44f13c36f5ff4c8f0b89a74c474d3126b289101610c76565b600880546109af90612e16565b6003546001600160a01b031633146112365760405162461bcd60e51b815260040161092190612cf8565b60008281526010602090815260409182902083905581518481529081018390527ecb984c960474db8d59265ba6a3bad100ed5eb7048f0cabb40b4d21195146849101610c76565b611288338383611f52565b5050565b6000818152600c602052604090205460ff16156112bb5760405162461bcd60e51b815260040161092190612c32565b6000818152600a6020908152604080832054600b909252909120546112e1906001612dbf565b11156112ff5760405162461bcd60e51b815260040161092190612bfb565b6003546001600160a01b0316331461143c5733600090815260126020908152604080832084845290915290205460ff161561134c5760405162461bcd60e51b815260040161092190612d64565b6040516bffffffffffffffffffffffff193360601b1660208201526000906034016040516020818303038152906040528051906020012090506113d08484808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250878152600d602052604090205492508591506120339050565b61140c5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610921565b6000828152600f602052604090205434101561143a5760405162461bcd60e51b815260040161092190612d2d565b505b6114583382600160405180602001604052806000815250611bfd565b6000818152600b60205260408120805460019290611477908490612dbf565b909155505033600090815260126020908152604080832093835292905220805460ff191660011790555050565b600081815260116020908152604080832054858452600e9092528220546064916114cd91612df7565b6114d79190612dd7565b9392505050565b6000818152600c602052604090205460ff161561150d5760405162461bcd60e51b815260040161092190612c32565b6000818152600a6020908152604080832054600b90925290912054611533906001612dbf565b11156115515760405162461bcd60e51b815260040161092190612bfb565b6003546001600160a01b0316331461168c5733600090815260126020908152604080832084845290915290205460ff161561159e5760405162461bcd60e51b815260040161092190612d64565b6005546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a919061298e565b1161165e5760405162461bcd60e51b81526020600482015260146024820152734d757374206861766520612044414e4b424f542160601b6044820152606401610921565b60008181526010602052604090205434101561168c5760405162461bcd60e51b815260040161092190612d2d565b6116a83382600160405180602001604052806000815250611bfd565b6000818152600b602052604081208054600192906116c7908490612dbf565b909155505033600090815260126020908152604080832093835292905220805460ff19166001179055565b6003546001600160a01b0316331461171c5760405162461bcd60e51b815260040161092190612cf8565b60008281526011602090815260409182902083905581518481529081018390527f054a4b6ace105c6eba783997f60dd457ad86598c0d3ab2bd2aafb4880a12f6059101610c76565b600654604051627eeac760e11b81526001600160a01b03848116600483015260248201849052600092839291169062fdd58e9060440160206040518083038186803b1580156117b257600080fd5b505afa1580156117c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ea919061298e565b119392505050565b600960205260009081526040902080546109af90612e16565b6003546001600160a01b031633146118355760405162461bcd60e51b815260040161092190612cf8565b6000828152600c6020908152604091829020805460ff19168415159081179091558251858152918201527f5e22cd363ada3caaae7279ada0eb5ebad302fe4cb40bf794982509143cae161a9101610c76565b6000828152600c602052604090205460ff16156118b65760405162461bcd60e51b815260040161092190612c32565b6000828152600a6020908152604080832054600b909252909120546118dc906001612dbf565b11156118fa5760405162461bcd60e51b815260040161092190612bfb565b6003546001600160a01b03163314611a745733600090815260126020908152604080832085845290915290205460ff16156119475760405162461bcd60e51b815260040161092190612d64565b600654604051627eeac760e11b8152336004820152602481018390526000916001600160a01b03169062fdd58e9060440160206040518083038186803b15801561199057600080fd5b505afa1580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c8919061298e565b11611a215760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520612044414e4b424f545320466f756e6465727320506160448201526273732160e81b6064820152608401610921565b600081815260116020908152604080832054858452600e90925290912054606491611a4b91612df7565b611a559190612dd7565b341015611a745760405162461bcd60e51b815260040161092190612d2d565b611a903383600160405180602001604052806000815250611bfd565b6000828152600b60205260408120805460019290611aaf908490612dbf565b909155505033600090815260126020908152604080832094835293905291909120805460ff1916600117905550565b6001600160a01b038516331480611afa5750611afa85336107be565b611b585760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610921565b610d5e8585858585612049565b6003546001600160a01b03163314611b8f5760405162461bcd60e51b815260040161092190612cf8565b6001600160a01b038116611bf45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610921565b610ee981611f00565b6001600160a01b038416611c5d5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610921565b33611c7781600087611c6e88612166565b610d5e88612166565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611ca7908490612dbf565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d5e816000878787876121bf565b8151835114611d695760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610921565b6001600160a01b038416611d8f5760405162461bcd60e51b815260040161092190612c69565b3360005b8451811015611e92576000858281518110611dbe57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110611dea57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015611e3a5760405162461bcd60e51b815260040161092190612cae565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611e77908490612dbf565b9250508190555050505080611e8b90612e7e565b9050611d93565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ee2929190612b72565b60405180910390a4611ef881878787878761232a565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611fc65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610921565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60008261204085846123f4565b14949350505050565b6001600160a01b03841661206f5760405162461bcd60e51b815260040161092190612c69565b3361207f818787611c6e88612166565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156120c05760405162461bcd60e51b815260040161092190612cae565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906120fd908490612dbf565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461215d8288888888886121bf565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106121ae57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b15611ef85760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906122039089908990889088908890600401612b1a565b602060405180830381600087803b15801561221d57600080fd5b505af192505050801561224d575060408051601f3d908101601f1916820190925261224a9181019061295a565b60015b6122fa57612259612ec5565b806308c379a01415612293575061226e612edd565b806122795750612295565b8060405162461bcd60e51b81526004016109219190612ba0565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610921565b6001600160e01b0319811663f23a6e6160e01b1461215d5760405162461bcd60e51b815260040161092190612bb3565b6001600160a01b0384163b15611ef85760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061236e9089908990889088908890600401612abc565b602060405180830381600087803b15801561238857600080fd5b505af19250505080156123b8575060408051601f3d908101601f191682019092526123b59181019061295a565b60015b6123c457612259612ec5565b6001600160e01b0319811663bc197c8160e01b1461215d5760405162461bcd60e51b815260040161092190612bb3565b600081815b845181101561109257600085828151811061242457634e487b7160e01b600052603260045260246000fd5b6020026020010151905080831161244a576000838152602082905260409020925061245b565b600081815260208490526040902092505b508061246681612e7e565b9150506123f9565b82805461247a90612e16565b90600052602060002090601f01602090048101928261249c57600085556124e2565b82601f106124b557805160ff19168380011785556124e2565b828001600101855582156124e2579182015b828111156124e25782518255916020019190600101906124c7565b506124ee9291506124f2565b5090565b5b808211156124ee57600081556001016124f3565b600067ffffffffffffffff83111561252157612521612eaf565b604051612538601f8501601f191660200182612e51565b80915083815284848401111561254d57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461257c57600080fd5b919050565b600082601f830112612591578081fd5b8135602061259e82612d9b565b6040516125ab8282612e51565b8381528281019150858301600585901b870184018810156125ca578586fd5b855b858110156125e8578135845292840192908401906001016125cc565b5090979650505050505050565b8035801515811461257c57600080fd5b600082601f830112612615578081fd5b6114d783833560208501612507565b600060208284031215612635578081fd5b6114d782612565565b60008060408385031215612650578081fd5b61265983612565565b915061266760208401612565565b90509250929050565b600080600080600060a08688031215612687578081fd5b61269086612565565b945061269e60208701612565565b9350604086013567ffffffffffffffff808211156126ba578283fd5b6126c689838a01612581565b945060608801359150808211156126db578283fd5b6126e789838a01612581565b935060808801359150808211156126fc578283fd5b5061270988828901612605565b9150509295509295909350565b600080600080600060a0868803121561272d578081fd5b61273686612565565b945061274460208701612565565b93506040860135925060608601359150608086013567ffffffffffffffff81111561276d578182fd5b61270988828901612605565b6000806040838503121561278b578182fd5b61279483612565565b9150612667602084016125f5565b600080604083850312156127b4578182fd5b6127bd83612565565b946020939093013593505050565b6000806000606084860312156127df578081fd5b6127e884612565565b95602085013595506040909401359392505050565b6000806040838503121561280f578182fd5b823567ffffffffffffffff80821115612826578384fd5b818501915085601f830112612839578384fd5b8135602061284682612d9b565b6040516128538282612e51565b8381528281019150858301600585901b870184018b1015612872578889fd5b8896505b8487101561289b5761288781612565565b835260019690960195918301918301612876565b50965050860135925050808211156128b1578283fd5b506128be85828601612581565b9150509250929050565b6000806000604084860312156128dc578081fd5b833567ffffffffffffffff808211156128f3578283fd5b818601915086601f830112612906578283fd5b813581811115612914578384fd5b8760208260051b8501011115612928578384fd5b6020928301989097509590910135949350505050565b60006020828403121561294f578081fd5b81356114d781612f67565b60006020828403121561296b578081fd5b81516114d781612f67565b600060208284031215612987578081fd5b5035919050565b60006020828403121561299f578081fd5b5051919050565b600080604083850312156129b8578182fd5b82359150612667602084016125f5565b600080604083850312156129da578182fd5b50508035926020909101359150565b600080604083850312156129fb578182fd5b82359150602083013567ffffffffffffffff811115612a18578182fd5b8301601f81018513612a28578182fd5b6128be85823560208401612507565b6000815180845260208085019450808401835b83811015612a6657815187529582019590820190600101612a4a565b509495945050505050565b60008151808452815b81811015612a9657602081850181015186830182015201612a7a565b81811115612aa75782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090612ae890830186612a37565b8281036060840152612afa8186612a37565b90508281036080840152612b0e8185612a71565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612b5490830184612a71565b979650505050505050565b6020815260006114d76020830184612a37565b604081526000612b856040830185612a37565b8281036020840152612b978185612a37565b95945050505050565b6020815260006114d76020830184612a71565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526017908201527f4d6178206d696e74206c696d6974207265616368656421000000000000000000604082015260600190565b60208082526018908201527f43616e6e6f74206d696e74207768696c65207061757365640000000000000000604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f496e73756666696369656e742066756e647320746f206d696e74000000000000604082015260600190565b6020808252601c908201527f416464726573732068617320616c726561647920636c61696d65642100000000604082015260600190565b600067ffffffffffffffff821115612db557612db5612eaf565b5060051b60200190565b60008219821115612dd257612dd2612e99565b500190565b600082612df257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612e1157612e11612e99565b500290565b600181811c90821680612e2a57607f821691505b60208210811415612e4b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715612e7757612e77612eaf565b6040525050565b6000600019821415612e9257612e92612e99565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612eda57600481823e5160e01c5b90565b600060443d1015612eeb5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715612f1b57505050505090565b8285019150815181811115612f335750505050505090565b843d8701016020828501011115612f4d5750505050505090565b612f5c60208286010187612e51565b509095945050505050565b6001600160e01b031981168114610ee957600080fdfea26469706673582212205e6ba0bcb7ce8f36c5dfacca55dcd7751ef26f9e49e63a12e7a33a54d2ebc69664736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102705760003560e01c80637696e0881161014f578063b9334a1b116100c1578063eb864df31161007a578063eb864df3146107ec578063f043e502146107ff578063f242432a1461082c578063f2fde38b1461084c578063f6d40da11461086c578063f918faf11461089957600080fd5b8063b9334a1b146106f6578063bd85b03914610716578063c72c293a14610743578063c87b56dd14610763578063daff97b514610783578063e985e9c5146107a357600080fd5b80639e13f349116101135780639e13f34914610650578063a22cb46514610670578063a2efdd9614610690578063a6d612f9146106b0578063a7c18c14146106c3578063a7f3735e146106e357600080fd5b80637696e088146105a3578063869f7594146105c35780638da5cb5b146105f05780639097548d1461060e57806395d89b411461063b57600080fd5b8063364e3c84116101e8578063488caa73116101ac578063488caa73146104ae5780634dd6c8de146104e65780634e1273f4146105215780635b393d701461054e5780635d008f8c1461056e578063715018a61461058e57600080fd5b8063364e3c841461041957806337da577c146104395780633c70b357146104595780633ccfd60b1461048657806343dbc1961461048e57600080fd5b80630e89341c1161023a5780630e89341c14610357578063156e29f614610377578063162094c41461039957806318712c21146103b957806321b8092e146103d95780632eb2c2d6146103f957600080fd5b8062dde10e14610275578062fdd58e146102ba57806301ffc9a7146102e857806306fdde03146103085780630b1d07de1461032a575b600080fd5b34801561028157600080fd5b506102a5610290366004612976565b600c6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156102c657600080fd5b506102da6102d53660046127a2565b6108b9565b6040519081526020016102b1565b3480156102f457600080fd5b506102a561030336600461293e565b610950565b34801561031457600080fd5b5061031d6109a2565b6040516102b19190612ba0565b34801561033657600080fd5b506102da610345366004612976565b60116020526000908152604090205481565b34801561036357600080fd5b5061031d610372366004612976565b610a30565b34801561038357600080fd5b506103976103923660046127cb565b610ad2565b005b3480156103a557600080fd5b506103976103b43660046129e9565b610b83565b3480156103c557600080fd5b506103976103d43660046129c8565b610c09565b3480156103e557600080fd5b506103976103f4366004612624565b610c82565b34801561040557600080fd5b50610397610414366004612670565b610cce565b34801561042557600080fd5b506102a5610434366004612624565b610d65565b34801561044557600080fd5b506103976104543660046129c8565b610ded565b34801561046557600080fd5b506102da610474366004612976565b600d6020526000908152604090205481565b610397610e5f565b34801561049a57600080fd5b506103976104a9366004612624565b610eec565b3480156104ba57600080fd5b506004546104ce906001600160a01b031681565b6040516001600160a01b0390911681526020016102b1565b3480156104f257600080fd5b506102a56105013660046127a2565b601260209081526000928352604080842090915290825290205460ff1681565b34801561052d57600080fd5b5061054161053c3660046127fd565b610f38565b6040516102b19190612b5f565b34801561055a57600080fd5b506103976105693660046129c8565b61109a565b34801561057a57600080fd5b50610397610589366004612624565b61110b565b34801561059a57600080fd5b50610397611157565b3480156105af57600080fd5b506103976105be3660046129c8565b61118d565b3480156105cf57600080fd5b506102da6105de366004612976565b600a6020526000908152604090205481565b3480156105fc57600080fd5b506003546001600160a01b03166104ce565b34801561061a57600080fd5b506102da610629366004612976565b600e6020526000908152604090205481565b34801561064757600080fd5b5061031d6111ff565b34801561065c57600080fd5b5061039761066b3660046129c8565b61120c565b34801561067c57600080fd5b5061039761068b366004612779565b61127d565b34801561069c57600080fd5b506006546104ce906001600160a01b031681565b6103976106be3660046128c8565b61128c565b3480156106cf57600080fd5b506102da6106de3660046129c8565b6114a4565b6103976106f1366004612976565b6114de565b34801561070257600080fd5b506103976107113660046129c8565b6116f2565b34801561072257600080fd5b506102da610731366004612976565b600b6020526000908152604090205481565b34801561074f57600080fd5b506102a561075e3660046127a2565b611764565b34801561076f57600080fd5b5061031d61077e366004612976565b6117f2565b34801561078f57600080fd5b5061039761079e3660046129a6565b61180b565b3480156107af57600080fd5b506102a56107be36600461263e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6103976107fa3660046129c8565b611887565b34801561080b57600080fd5b506102da61081a366004612976565b60106020526000908152604090205481565b34801561083857600080fd5b50610397610847366004612716565b611ade565b34801561085857600080fd5b50610397610867366004612624565b611b65565b34801561087857600080fd5b506102da610887366004612976565b600f6020526000908152604090205481565b3480156108a557600080fd5b506005546104ce906001600160a01b031681565b60006001600160a01b03831661092a5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061098157506001600160e01b031982166303a24d0760e21b145b8061099c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600780546109af90612e16565b80601f01602080910402602001604051908101604052809291908181526020018280546109db90612e16565b8015610a285780601f106109fd57610100808354040283529160200191610a28565b820191906000526020600020905b815481529060010190602001808311610a0b57829003601f168201915b505050505081565b6000818152600960205260409020805460609190610a4d90612e16565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7990612e16565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b50505050509050919050565b6003546001600160a01b03163314610afc5760405162461bcd60e51b815260040161092190612cf8565b6000828152600a6020908152604080832054600b90925290912054610b22908390612dbf565b1115610b405760405162461bcd60e51b815260040161092190612bfb565b610b5b83838360405180602001604052806000815250611bfd565b6000828152600b602052604081208054839290610b79908490612dbf565b9091555050505050565b6003546001600160a01b03163314610bad5760405162461bcd60e51b815260040161092190612cf8565b60008281526009602090815260409091208251610bcc9284019061246e565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610bfd9190612ba0565b60405180910390a25050565b6003546001600160a01b03163314610c335760405162461bcd60e51b815260040161092190612cf8565b6000828152600d602090815260409182902083905581518481529081018390527e4b963d71d9fa49ebeda334c3f8bef15c84f94077c51a86a84351aef12a103b91015b60405180910390a15050565b6003546001600160a01b03163314610cac5760405162461bcd60e51b815260040161092190612cf8565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038516331480610cea5750610cea85336107be565b610d515760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610921565b610d5e8585858585611d07565b5050505050565b6005546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b158015610dae57600080fd5b505afa158015610dc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de6919061298e565b1192915050565b6003546001600160a01b03163314610e175760405162461bcd60e51b815260040161092190612cf8565b6000828152600a602090815260409182902083905581518481529081018390527f1bd0dea5ca07eda6cf50f09870264b6d7ed3f4dca349f076ef4cba5fca28f0909101610c76565b6003546001600160a01b03163314610e895760405162461bcd60e51b815260040161092190612cf8565b6004546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610ed6576040519150601f19603f3d011682016040523d82523d6000602084013e610edb565b606091505b5050905080610ee957600080fd5b50565b6003546001600160a01b03163314610f165760405162461bcd60e51b815260040161092190612cf8565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60608151835114610f9d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610921565b6000835167ffffffffffffffff811115610fc757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ff0578160200160208202803683370190505b50905060005b84518110156110925761105785828151811061102257634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061104a57634e487b7160e01b600052603260045260246000fd5b60200260200101516108b9565b82828151811061107757634e487b7160e01b600052603260045260246000fd5b602090810291909101015261108b81612e7e565b9050610ff6565b509392505050565b6003546001600160a01b031633146110c45760405162461bcd60e51b815260040161092190612cf8565b6000828152600f602090815260409182902083905581518481529081018390527ecb984c960474db8d59265ba6a3bad100ed5eb7048f0cabb40b4d21195146849101610c76565b6003546001600160a01b031633146111355760405162461bcd60e51b815260040161092190612cf8565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146111815760405162461bcd60e51b815260040161092190612cf8565b61118b6000611f00565b565b6003546001600160a01b031633146111b75760405162461bcd60e51b815260040161092190612cf8565b6000828152600e602090815260409182902083905581518481529081018390527fb78c60ae6f242b85e7d0d0be6c71f44f13c36f5ff4c8f0b89a74c474d3126b289101610c76565b600880546109af90612e16565b6003546001600160a01b031633146112365760405162461bcd60e51b815260040161092190612cf8565b60008281526010602090815260409182902083905581518481529081018390527ecb984c960474db8d59265ba6a3bad100ed5eb7048f0cabb40b4d21195146849101610c76565b611288338383611f52565b5050565b6000818152600c602052604090205460ff16156112bb5760405162461bcd60e51b815260040161092190612c32565b6000818152600a6020908152604080832054600b909252909120546112e1906001612dbf565b11156112ff5760405162461bcd60e51b815260040161092190612bfb565b6003546001600160a01b0316331461143c5733600090815260126020908152604080832084845290915290205460ff161561134c5760405162461bcd60e51b815260040161092190612d64565b6040516bffffffffffffffffffffffff193360601b1660208201526000906034016040516020818303038152906040528051906020012090506113d08484808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250878152600d602052604090205492508591506120339050565b61140c5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610921565b6000828152600f602052604090205434101561143a5760405162461bcd60e51b815260040161092190612d2d565b505b6114583382600160405180602001604052806000815250611bfd565b6000818152600b60205260408120805460019290611477908490612dbf565b909155505033600090815260126020908152604080832093835292905220805460ff191660011790555050565b600081815260116020908152604080832054858452600e9092528220546064916114cd91612df7565b6114d79190612dd7565b9392505050565b6000818152600c602052604090205460ff161561150d5760405162461bcd60e51b815260040161092190612c32565b6000818152600a6020908152604080832054600b90925290912054611533906001612dbf565b11156115515760405162461bcd60e51b815260040161092190612bfb565b6003546001600160a01b0316331461168c5733600090815260126020908152604080832084845290915290205460ff161561159e5760405162461bcd60e51b815260040161092190612d64565b6005546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a919061298e565b1161165e5760405162461bcd60e51b81526020600482015260146024820152734d757374206861766520612044414e4b424f542160601b6044820152606401610921565b60008181526010602052604090205434101561168c5760405162461bcd60e51b815260040161092190612d2d565b6116a83382600160405180602001604052806000815250611bfd565b6000818152600b602052604081208054600192906116c7908490612dbf565b909155505033600090815260126020908152604080832093835292905220805460ff19166001179055565b6003546001600160a01b0316331461171c5760405162461bcd60e51b815260040161092190612cf8565b60008281526011602090815260409182902083905581518481529081018390527f054a4b6ace105c6eba783997f60dd457ad86598c0d3ab2bd2aafb4880a12f6059101610c76565b600654604051627eeac760e11b81526001600160a01b03848116600483015260248201849052600092839291169062fdd58e9060440160206040518083038186803b1580156117b257600080fd5b505afa1580156117c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ea919061298e565b119392505050565b600960205260009081526040902080546109af90612e16565b6003546001600160a01b031633146118355760405162461bcd60e51b815260040161092190612cf8565b6000828152600c6020908152604091829020805460ff19168415159081179091558251858152918201527f5e22cd363ada3caaae7279ada0eb5ebad302fe4cb40bf794982509143cae161a9101610c76565b6000828152600c602052604090205460ff16156118b65760405162461bcd60e51b815260040161092190612c32565b6000828152600a6020908152604080832054600b909252909120546118dc906001612dbf565b11156118fa5760405162461bcd60e51b815260040161092190612bfb565b6003546001600160a01b03163314611a745733600090815260126020908152604080832085845290915290205460ff16156119475760405162461bcd60e51b815260040161092190612d64565b600654604051627eeac760e11b8152336004820152602481018390526000916001600160a01b03169062fdd58e9060440160206040518083038186803b15801561199057600080fd5b505afa1580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c8919061298e565b11611a215760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520612044414e4b424f545320466f756e6465727320506160448201526273732160e81b6064820152608401610921565b600081815260116020908152604080832054858452600e90925290912054606491611a4b91612df7565b611a559190612dd7565b341015611a745760405162461bcd60e51b815260040161092190612d2d565b611a903383600160405180602001604052806000815250611bfd565b6000828152600b60205260408120805460019290611aaf908490612dbf565b909155505033600090815260126020908152604080832094835293905291909120805460ff1916600117905550565b6001600160a01b038516331480611afa5750611afa85336107be565b611b585760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610921565b610d5e8585858585612049565b6003546001600160a01b03163314611b8f5760405162461bcd60e51b815260040161092190612cf8565b6001600160a01b038116611bf45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610921565b610ee981611f00565b6001600160a01b038416611c5d5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610921565b33611c7781600087611c6e88612166565b610d5e88612166565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611ca7908490612dbf565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d5e816000878787876121bf565b8151835114611d695760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610921565b6001600160a01b038416611d8f5760405162461bcd60e51b815260040161092190612c69565b3360005b8451811015611e92576000858281518110611dbe57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110611dea57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015611e3a5760405162461bcd60e51b815260040161092190612cae565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611e77908490612dbf565b9250508190555050505080611e8b90612e7e565b9050611d93565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ee2929190612b72565b60405180910390a4611ef881878787878761232a565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611fc65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610921565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60008261204085846123f4565b14949350505050565b6001600160a01b03841661206f5760405162461bcd60e51b815260040161092190612c69565b3361207f818787611c6e88612166565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156120c05760405162461bcd60e51b815260040161092190612cae565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906120fd908490612dbf565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461215d8288888888886121bf565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106121ae57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b15611ef85760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906122039089908990889088908890600401612b1a565b602060405180830381600087803b15801561221d57600080fd5b505af192505050801561224d575060408051601f3d908101601f1916820190925261224a9181019061295a565b60015b6122fa57612259612ec5565b806308c379a01415612293575061226e612edd565b806122795750612295565b8060405162461bcd60e51b81526004016109219190612ba0565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610921565b6001600160e01b0319811663f23a6e6160e01b1461215d5760405162461bcd60e51b815260040161092190612bb3565b6001600160a01b0384163b15611ef85760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061236e9089908990889088908890600401612abc565b602060405180830381600087803b15801561238857600080fd5b505af19250505080156123b8575060408051601f3d908101601f191682019092526123b59181019061295a565b60015b6123c457612259612ec5565b6001600160e01b0319811663bc197c8160e01b1461215d5760405162461bcd60e51b815260040161092190612bb3565b600081815b845181101561109257600085828151811061242457634e487b7160e01b600052603260045260246000fd5b6020026020010151905080831161244a576000838152602082905260409020925061245b565b600081815260208490526040902092505b508061246681612e7e565b9150506123f9565b82805461247a90612e16565b90600052602060002090601f01602090048101928261249c57600085556124e2565b82601f106124b557805160ff19168380011785556124e2565b828001600101855582156124e2579182015b828111156124e25782518255916020019190600101906124c7565b506124ee9291506124f2565b5090565b5b808211156124ee57600081556001016124f3565b600067ffffffffffffffff83111561252157612521612eaf565b604051612538601f8501601f191660200182612e51565b80915083815284848401111561254d57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461257c57600080fd5b919050565b600082601f830112612591578081fd5b8135602061259e82612d9b565b6040516125ab8282612e51565b8381528281019150858301600585901b870184018810156125ca578586fd5b855b858110156125e8578135845292840192908401906001016125cc565b5090979650505050505050565b8035801515811461257c57600080fd5b600082601f830112612615578081fd5b6114d783833560208501612507565b600060208284031215612635578081fd5b6114d782612565565b60008060408385031215612650578081fd5b61265983612565565b915061266760208401612565565b90509250929050565b600080600080600060a08688031215612687578081fd5b61269086612565565b945061269e60208701612565565b9350604086013567ffffffffffffffff808211156126ba578283fd5b6126c689838a01612581565b945060608801359150808211156126db578283fd5b6126e789838a01612581565b935060808801359150808211156126fc578283fd5b5061270988828901612605565b9150509295509295909350565b600080600080600060a0868803121561272d578081fd5b61273686612565565b945061274460208701612565565b93506040860135925060608601359150608086013567ffffffffffffffff81111561276d578182fd5b61270988828901612605565b6000806040838503121561278b578182fd5b61279483612565565b9150612667602084016125f5565b600080604083850312156127b4578182fd5b6127bd83612565565b946020939093013593505050565b6000806000606084860312156127df578081fd5b6127e884612565565b95602085013595506040909401359392505050565b6000806040838503121561280f578182fd5b823567ffffffffffffffff80821115612826578384fd5b818501915085601f830112612839578384fd5b8135602061284682612d9b565b6040516128538282612e51565b8381528281019150858301600585901b870184018b1015612872578889fd5b8896505b8487101561289b5761288781612565565b835260019690960195918301918301612876565b50965050860135925050808211156128b1578283fd5b506128be85828601612581565b9150509250929050565b6000806000604084860312156128dc578081fd5b833567ffffffffffffffff808211156128f3578283fd5b818601915086601f830112612906578283fd5b813581811115612914578384fd5b8760208260051b8501011115612928578384fd5b6020928301989097509590910135949350505050565b60006020828403121561294f578081fd5b81356114d781612f67565b60006020828403121561296b578081fd5b81516114d781612f67565b600060208284031215612987578081fd5b5035919050565b60006020828403121561299f578081fd5b5051919050565b600080604083850312156129b8578182fd5b82359150612667602084016125f5565b600080604083850312156129da578182fd5b50508035926020909101359150565b600080604083850312156129fb578182fd5b82359150602083013567ffffffffffffffff811115612a18578182fd5b8301601f81018513612a28578182fd5b6128be85823560208401612507565b6000815180845260208085019450808401835b83811015612a6657815187529582019590820190600101612a4a565b509495945050505050565b60008151808452815b81811015612a9657602081850181015186830182015201612a7a565b81811115612aa75782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090612ae890830186612a37565b8281036060840152612afa8186612a37565b90508281036080840152612b0e8185612a71565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612b5490830184612a71565b979650505050505050565b6020815260006114d76020830184612a37565b604081526000612b856040830185612a37565b8281036020840152612b978185612a37565b95945050505050565b6020815260006114d76020830184612a71565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526017908201527f4d6178206d696e74206c696d6974207265616368656421000000000000000000604082015260600190565b60208082526018908201527f43616e6e6f74206d696e74207768696c65207061757365640000000000000000604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f496e73756666696369656e742066756e647320746f206d696e74000000000000604082015260600190565b6020808252601c908201527f416464726573732068617320616c726561647920636c61696d65642100000000604082015260600190565b600067ffffffffffffffff821115612db557612db5612eaf565b5060051b60200190565b60008219821115612dd257612dd2612e99565b500190565b600082612df257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612e1157612e11612e99565b500290565b600181811c90821680612e2a57607f821691505b60208210811415612e4b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715612e7757612e77612eaf565b6040525050565b6000600019821415612e9257612e92612e99565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612eda57600481823e5160e01c5b90565b600060443d1015612eeb5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715612f1b57505050505090565b8285019150815181811115612f335750505050505090565b843d8701016020828501011115612f4d5750505050505090565b612f5c60208286010187612e51565b509095945050505050565b6001600160e01b031981168114610ee957600080fdfea26469706673582212205e6ba0bcb7ce8f36c5dfacca55dcd7751ef26f9e49e63a12e7a33a54d2ebc69664736f6c63430008040033

Deployed Bytecode Sourcemap

39681:6624:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40604:37;;;;;;;;;;-1:-1:-1;40604:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13226:14:1;;13219:22;13201:41;;13189:2;13174:18;40604:37:0;;;;;;;;25875:231;;;;;;;;;;-1:-1:-1;25875:231:0;;;;;:::i;:::-;;:::i;:::-;;;13399:25:1;;;13387:2;13372:18;25875:231:0;13354:76:1;24898:310:0;;;;;;;;;;-1:-1:-1;24898:310:0;;;;;:::i;:::-;;:::i;40293:41::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40993:42::-;;;;;;;;;;-1:-1:-1;40993:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;41605:115;;;;;;;;;;-1:-1:-1;41605:115:0;;;;;:::i;:::-;;:::i;43411:285::-;;;;;;;;;;-1:-1:-1;43411:285:0;;;;;:::i;:::-;;:::i;:::-;;41466:134;;;;;;;;;;-1:-1:-1;41466:134:0;;;;;:::i;:::-;;:::i;42389:149::-;;;;;;;;;;-1:-1:-1;42389:149:0;;;;;:::i;:::-;;:::i;46017:118::-;;;;;;;;;;-1:-1:-1;46017:118:0;;;;;:::i;:::-;;:::i;27814:442::-;;;;;;;;;;-1:-1:-1;27814:442:0;;;;;:::i;:::-;;:::i;41926:147::-;;;;;;;;;;-1:-1:-1;41926:147:0;;;;;:::i;:::-;;:::i;42078:161::-;;;;;;;;;;-1:-1:-1;42078:161:0;;;;;:::i;:::-;;:::i;40674:44::-;;;;;;;;;;-1:-1:-1;40674:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;46140:162;;;:::i;41219:114::-;;;;;;;;;;-1:-1:-1;41219:114:0;;;;;:::i;:::-;;:::i;40044:78::-;;;;;;;;;;-1:-1:-1;40044:78:0;;;;-1:-1:-1;;;;;40044:78:0;;;;;;-1:-1:-1;;;;;10606:32:1;;;10588:51;;10576:2;10561:18;40044:78:0;10543:102:1;41074:61:0;;;;;;;;;;-1:-1:-1;41074:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;26272:524;;;;;;;;;;-1:-1:-1;26272:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42845:185::-;;;;;;;;;;-1:-1:-1;42845:185:0;;;;;:::i;:::-;;:::i;41338:123::-;;;;;;;;;;-1:-1:-1;41338:123:0;;;;;:::i;:::-;;:::i;5602:103::-;;;;;;;;;;;;;:::i;42543:131::-;;;;;;;;;;-1:-1:-1;42543:131:0;;;;;:::i;:::-;;:::i;40449:40::-;;;;;;;;;;-1:-1:-1;40449:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;4951:87;;;;;;;;;;-1:-1:-1;5024:6:0;;-1:-1:-1;;;;;5024:6:0;4951:87;;40755:38;;;;;;;;;;-1:-1:-1;40755:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;40338:29;;;;;;;;;;;;;:::i;43035:175::-;;;;;;;;;;-1:-1:-1;43035:175:0;;;;;:::i;:::-;;:::i;26869:155::-;;;;;;;;;;-1:-1:-1;26869:155:0;;;;;:::i;:::-;;:::i;40206:81::-;;;;;;;;;;-1:-1:-1;40206:81:0;;;;-1:-1:-1;;;;;40206:81:0;;;43701:785;;;;;;:::i;:::-;;:::i;42679:161::-;;;;;;;;;;-1:-1:-1;42679:161:0;;;;;:::i;:::-;;:::i;44491:707::-;;;;;;:::i;:::-;;:::i;43215:191::-;;;;;;;;;;-1:-1:-1;43215:191:0;;;;;:::i;:::-;;:::i;40525:42::-;;;;;;;;;;-1:-1:-1;40525:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;41725:196;;;;;;;;;;-1:-1:-1;41725:196:0;;;;;:::i;:::-;;:::i;40373:41::-;;;;;;;;;;-1:-1:-1;40373:41:0;;;;;:::i;:::-;;:::i;42244:140::-;;;;;;;;;;-1:-1:-1;42244:140:0;;;;;:::i;:::-;;:::i;27096:168::-;;;;;;;;;;-1:-1:-1;27096:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;27219:27:0;;;27195:4;27219:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;27096:168;45203:809;;;;;;:::i;:::-;;:::i;40910:45::-;;;;;;;;;;-1:-1:-1;40910:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;27336:401;;;;;;;;;;-1:-1:-1;27336:401:0;;;;;:::i;:::-;;:::i;5860:201::-;;;;;;;;;;-1:-1:-1;5860:201:0;;;;;:::i;:::-;;:::i;40824:47::-;;;;;;;;;;-1:-1:-1;40824:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;40126:76;;;;;;;;;;-1:-1:-1;40126:76:0;;;;-1:-1:-1;;;;;40126:76:0;;;25875:231;25961:7;-1:-1:-1;;;;;25989:21:0;;25981:77;;;;-1:-1:-1;;;25981:77:0;;15447:2:1;25981:77:0;;;15429:21:1;15486:2;15466:18;;;15459:30;15525:34;15505:18;;;15498:62;-1:-1:-1;;;15576:18:1;;;15569:41;15627:19;;25981:77:0;;;;;;;;;-1:-1:-1;26076:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;26076:22:0;;;;;;;;;;;;25875:231::o;24898:310::-;25000:4;-1:-1:-1;;;;;;25037:41:0;;-1:-1:-1;;;25037:41:0;;:110;;-1:-1:-1;;;;;;;25095:52:0;;-1:-1:-1;;;25095:52:0;25037:110;:163;;;-1:-1:-1;;;;;;;;;;16431:40:0;;;25164:36;25017:183;24898:310;-1:-1:-1;;24898:310:0:o;40293:41::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41605:115::-;41700:15;;;;:8;:15;;;;;41693:22;;41672:13;;41700:15;41693:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41605:115;;;:::o;43411:285::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;43577:16:::1;::::0;;;:9:::1;:16;::::0;;;;;;;;43545:11:::1;:18:::0;;;;;;;:28:::1;::::0;43566:7;;43545:28:::1;:::i;:::-;:48;;43536:86;;;;-1:-1:-1::0;;;43536:86:0::1;;;;;;;:::i;:::-;43627:30;43634:3;43639;43644:7;43627:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;43662:18;::::0;;;:11:::1;:18;::::0;;;;:29;;43684:7;;43662:18;:29:::1;::::0;43684:7;;43662:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;43411:285:0:o;41466:134::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;41549:13:::1;::::0;;;:8:::1;:13;::::0;;;;;;;:20;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;41590:3;41579:16;41584:4;41579:16;;;;;;:::i;:::-;;;;;;;;41466:134:::0;;:::o;42389:149::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;42469:17:::1;::::0;;;:10:::1;:17;::::0;;;;;;;;:25;;;42504:29;;22422:25:1;;;22463:18;;;22456:34;;;42504:29:0::1;::::0;22395:18:1;42504:29:0::1;;;;;;;;42389:149:::0;;:::o;46017:118::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;46098:18:::1;:32:::0;;-1:-1:-1;;;;;;46098:32:0::1;-1:-1:-1::0;;;;;46098:32:0;;;::::1;::::0;;;::::1;::::0;;46017:118::o;27814:442::-;-1:-1:-1;;;;;28047:20:0;;3757:10;28047:20;;:60;;-1:-1:-1;28071:36:0;28088:4;3757:10;27096:168;:::i;28071:36::-;28025:160;;;;-1:-1:-1;;;28025:160:0;;18129:2:1;28025:160:0;;;18111:21:1;18168:2;18148:18;;;18141:30;18207:34;18187:18;;;18180:62;-1:-1:-1;;;18258:18:1;;;18251:48;18316:19;;28025:160:0;18101:240:1;28025:160:0;28196:52;28219:4;28225:2;28229:3;28234:7;28243:4;28196:22;:52::i;:::-;27814:442;;;;;:::o;41926:147::-;42025:16;;42015:49;;-1:-1:-1;;;42015:49:0;;-1:-1:-1;;;;;10606:32:1;;;42015:49:0;;;10588:51:1;41996:4:0;;;;42025:16;;;42015:38;;10561:18:1;;42015:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;41926:147;-1:-1:-1;;41926:147:0:o;42078:161::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;42162:16:::1;::::0;;;:9:::1;:16;::::0;;;;;;;;:29;;;42201:33;;22422:25:1;;;22463:18;;;22456:34;;;42201:33:0::1;::::0;22395:18:1;42201:33:0::1;22377:119:1::0;46140:162:0;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;46222:18:::1;::::0;46213:68:::1;::::0;46200:7:::1;::::0;-1:-1:-1;;;;;46222:18:0::1;::::0;46255:21:::1;::::0;46200:7;46213:68;46200:7;46213:68;46255:21;46222:18;46213:68:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46199:82;;;46294:2;46286:11;;;::::0;::::1;;5242:1;46140:162::o:0;41219:114::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;41298:16:::1;:30:::0;;-1:-1:-1;;;;;;41298:30:0::1;-1:-1:-1::0;;;;;41298:30:0;;;::::1;::::0;;;::::1;::::0;;41219:114::o;26272:524::-;26428:16;26489:3;:10;26470:8;:15;:29;26462:83;;;;-1:-1:-1;;;26462:83:0;;20784:2:1;26462:83:0;;;20766:21:1;20823:2;20803:18;;;20796:30;20862:34;20842:18;;;20835:62;-1:-1:-1;;;20913:18:1;;;20906:39;20962:19;;26462:83:0;20756:231:1;26462:83:0;26558:30;26605:8;:15;26591:30;;;;;;-1:-1:-1;;;26591:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26591:30:0;;26558:63;;26639:9;26634:122;26658:8;:15;26654:1;:19;26634:122;;;26714:30;26724:8;26733:1;26724:11;;;;;;-1:-1:-1;;;26724:11:0;;;;;;;;;;;;;;;26737:3;26741:1;26737:6;;;;;;-1:-1:-1;;;26737:6:0;;;;;;;;;;;;;;;26714:9;:30::i;:::-;26695:13;26709:1;26695:16;;;;;;-1:-1:-1;;;26695:16:0;;;;;;;;;;;;;;;;;;:49;26675:3;;;:::i;:::-;;;26634:122;;;-1:-1:-1;26775:13:0;26272:524;-1:-1:-1;;;26272:524:0:o;42845:185::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;42937:20:::1;::::0;;;:13:::1;:20;::::0;;;;;;;;:37;;;42984:41;;22422:25:1;;;22463:18;;;22456:34;;;42984:41:0::1;::::0;22395:18:1;42984:41:0::1;22377:119:1::0;41338:123:0;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;41421:21:::1;:35:::0;;-1:-1:-1;;;;;;41421:35:0::1;-1:-1:-1::0;;;;;41421:35:0;;;::::1;::::0;;;::::1;::::0;;41338:123::o;5602:103::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;5667:30:::1;5694:1;5667:18;:30::i;:::-;5602:103::o:0;42543:131::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;42617:11:::1;::::0;;;:4:::1;:11;::::0;;;;;;;;:19;;;42646:23;;22422:25:1;;;22463:18;;;22456:34;;;42646:23:0::1;::::0;22395:18:1;42646:23:0::1;22377:119:1::0;40338:29:0;;;;;;;:::i;43035:175::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;43123:18:::1;::::0;;;:11:::1;:18;::::0;;;;;;;;:33;;;43166:39;;22422:25:1;;;22463:18;;;22456:34;;;43166:39:0::1;::::0;22395:18:1;43166:39:0::1;22377:119:1::0;26869:155:0;26964:52;3757:10;26997:8;27007;26964:18;:52::i;:::-;26869:155;;:::o;43701:785::-;43850:13;;;;:6;:13;;;;;;;;43848:15;43839:54;;;;-1:-1:-1;;;43839:54:0;;;;;;;:::i;:::-;43933:16;;;;:9;:16;;;;;;;;;43907:11;:18;;;;;;;:22;;43928:1;43907:22;:::i;:::-;:42;;43898:80;;;;-1:-1:-1;;;43898:80:0;;;;;;;:::i;:::-;5024:6;;-1:-1:-1;;;;;5024:6:0;44030:10;:21;44025:351;;44080:10;44071:21;;;;:7;:21;;;;;;;;:28;;;;;;;;;;;44069:30;44060:73;;;;-1:-1:-1;;;44060:73:0;;;;;;;:::i;:::-;44165:30;;-1:-1:-1;;44183:10:0;10147:2:1;10143:15;10139:53;44165:30:0;;;10127:66:1;44139:12:0;;10209::1;;44165:30:0;;;;;;;;;;;;44154:43;;;;;;44139:58;;44212:59;44232:12;;44212:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44246:17:0;;;:10;:17;;;;;;;-1:-1:-1;44265:4:0;;-1:-1:-1;44212:18:0;;-1:-1:-1;44212:59:0:i;:::-;44203:87;;;;-1:-1:-1;;;44203:87:0;;20032:2:1;44203:87:0;;;20014:21:1;20071:2;20051:18;;;20044:30;-1:-1:-1;;;20090:18:1;;;20083:43;20143:18;;44203:87:0;20004:163:1;44203:87:0;44318:20;;;;:13;:20;;;;;;44305:9;:33;;44296:74;;;;-1:-1:-1;;;44296:74:0;;;;;;;:::i;:::-;44025:351;;44382:31;44389:10;44401:3;44406:1;44382:31;;;;;;;;;;;;:5;:31::i;:::-;44418:18;;;;:11;:18;;;;;:23;;44440:1;;44418:18;:23;;44440:1;;44418:23;:::i;:::-;;;;-1:-1:-1;;44455:10:0;44446:21;;;;:7;:21;;;;;;;;:28;;;;;;;:35;;-1:-1:-1;;44446:35:0;44477:4;44446:35;;;-1:-1:-1;;43701:785:0:o;42679:161::-;42758:7;42798:27;;;:8;:27;;;;;;;;;42784:11;;;:4;:11;;;;;;42830:3;;42784:41;;;:::i;:::-;42782:51;;;;:::i;:::-;42773:62;42679:161;-1:-1:-1;;;42679:161:0:o;44491:707::-;44605:13;;;;:6;:13;;;;;;;;44603:15;44594:54;;;;-1:-1:-1;;;44594:54:0;;;;;;;:::i;:::-;44688:16;;;;:9;:16;;;;;;;;;44662:11;:18;;;;;;;:22;;44683:1;44662:22;:::i;:::-;:42;;44653:80;;;;-1:-1:-1;;;44653:80:0;;;;;;;:::i;:::-;5024:6;;-1:-1:-1;;;;;5024:6:0;44804:10;:21;44799:289;;44854:10;44845:21;;;;:7;:21;;;;;;;;:28;;;;;;;;;;;44843:30;44834:73;;;;-1:-1:-1;;;44834:73:0;;;;;;;:::i;:::-;44932:16;;44922:52;;-1:-1:-1;;;44922:52:0;;44962:10;44922:52;;;10588:51:1;44977:1:0;;-1:-1:-1;;;;;44932:16:0;;44922:38;;10561:18:1;;44922:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;44913:91;;;;-1:-1:-1;;;44913:91:0;;17029:2:1;44913:91:0;;;17011:21:1;17068:2;17048:18;;;17041:30;-1:-1:-1;;;17087:18:1;;;17080:50;17147:18;;44913:91:0;17001:170:1;44913:91:0;45032:18;;;;:11;:18;;;;;;45019:9;:31;;45010:72;;;;-1:-1:-1;;;45010:72:0;;;;;;;:::i;:::-;45094:31;45101:10;45113:3;45118:1;45094:31;;;;;;;;;;;;:5;:31::i;:::-;45130:18;;;;:11;:18;;;;;:23;;45152:1;;45130:18;:23;;45152:1;;45130:23;:::i;:::-;;;;-1:-1:-1;;45167:10:0;45158:21;;;;:7;:21;;;;;;;;:28;;;;;;;:35;;-1:-1:-1;;45158:35:0;45189:4;45158:35;;;44491:707::o;43215:191::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;43309:27:::1;::::0;;;:8:::1;:27;::::0;;;;;;;;:39;;;43358:43;;22422:25:1;;;22463:18;;;22456:34;;;43358:43:0::1;::::0;22395:18:1;43358:43:0::1;22377:119:1::0;41725:196:0;41851:21;;41841:71;;-1:-1:-1;;;41841:71:0;;-1:-1:-1;;;;;12238:32:1;;;41841:71:0;;;12220:51:1;12287:18;;;12280:34;;;41822:4:0;;;;41851:21;;;41841:43;;12193:18:1;;41841:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;41725:196;-1:-1:-1;;;41725:196:0:o;40373:41::-;;;;;;;;;;;;;;;;:::i;42244:140::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;42319:13:::1;::::0;;;:6:::1;:13;::::0;;;;;;;;:23;;-1:-1:-1;;42319:23:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42352:27;;22153:25:1;;;22194:18;;;22187:50;42352:27:0::1;::::0;22126:18:1;42352:27:0::1;22108:135:1::0;45203:809:0;45345:13;;;;:6;:13;;;;;;;;45343:15;45334:54;;;;-1:-1:-1;;;45334:54:0;;;;;;;:::i;:::-;45428:16;;;;:9;:16;;;;;;;;;45402:11;:18;;;;;;;:22;;45423:1;45402:22;:::i;:::-;:42;;45393:80;;;;-1:-1:-1;;;45393:80:0;;;;;;;:::i;:::-;5024:6;;-1:-1:-1;;;;;5024:6:0;45544:10;:21;45539:363;;45594:10;45585:21;;;;:7;:21;;;;;;;;:28;;;;;;;;;;;45583:30;45574:73;;;;-1:-1:-1;;;45574:73:0;;;;;;;:::i;:::-;45672:21;;45662:74;;-1:-1:-1;;;45662:74:0;;45707:10;45662:74;;;12220:51:1;12287:18;;;12280:34;;;45739:1:0;;-1:-1:-1;;;;;45672:21:0;;45662:43;;12193:18:1;;45662:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:78;45653:128;;;;-1:-1:-1;;;45653:128:0;;15043:2:1;45653:128:0;;;15025:21:1;15082:2;15062:18;;;15055:30;15121:34;15101:18;;;15094:62;-1:-1:-1;;;15172:18:1;;;15165:33;15215:19;;45653:128:0;15015:225:1;45653:128:0;45827:27;;;;:8;:27;;;;;;;;;45813:11;;;:4;:11;;;;;;;45859:3;;45813:41;;;:::i;:::-;45811:51;;;;:::i;:::-;45796:9;:68;;45787:109;;;;-1:-1:-1;;;45787:109:0;;;;;;;:::i;:::-;45908:31;45915:10;45927:3;45932:1;45908:31;;;;;;;;;;;;:5;:31::i;:::-;45944:18;;;;:11;:18;;;;;:23;;45966:1;;45944:18;:23;;45966:1;;45944:23;:::i;:::-;;;;-1:-1:-1;;45981:10:0;45972:21;;;;:7;:21;;;;;;;;:28;;;;;;;;;;:35;;-1:-1:-1;;45972:35:0;46003:4;45972:35;;;-1:-1:-1;45203:809:0:o;27336:401::-;-1:-1:-1;;;;;27544:20:0;;3757:10;27544:20;;:60;;-1:-1:-1;27568:36:0;27585:4;3757:10;27096:168;:::i;27568:36::-;27522:151;;;;-1:-1:-1;;;27522:151:0;;16619:2:1;27522:151:0;;;16601:21:1;16658:2;16638:18;;;16631:30;16697:34;16677:18;;;16670:62;-1:-1:-1;;;16748:18:1;;;16741:39;16797:19;;27522:151:0;16591:231:1;27522:151:0;27684:45;27702:4;27708:2;27712;27716:6;27724:4;27684:17;:45::i;5860:201::-;5024:6;;-1:-1:-1;;;;;5024:6:0;3757:10;5171:23;5163:68;;;;-1:-1:-1;;;5163:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5949:22:0;::::1;5941:73;;;::::0;-1:-1:-1;;;5941:73:0;;15859:2:1;5941:73:0::1;::::0;::::1;15841:21:1::0;15898:2;15878:18;;;15871:30;15937:34;15917:18;;;15910:62;-1:-1:-1;;;15988:18:1;;;15981:36;16034:19;;5941:73:0::1;15831:228:1::0;5941:73:0::1;6025:28;6044:8;6025:18;:28::i;32290:569::-:0;-1:-1:-1;;;;;32443:16:0;;32435:62;;;;-1:-1:-1;;;32435:62:0;;21603:2:1;32435:62:0;;;21585:21:1;21642:2;21622:18;;;21615:30;21681:34;21661:18;;;21654:62;-1:-1:-1;;;21732:18:1;;;21725:31;21773:19;;32435:62:0;21575:223:1;32435:62:0;3757:10;32554:102;3757:10;32510:16;32597:2;32601:21;32619:2;32601:17;:21::i;:::-;32624:25;32642:6;32624:17;:25::i;32554:102::-;32669:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32669:17:0;;;;;;;;;:27;;32690:6;;32669:9;:27;;32690:6;;32669:27;:::i;:::-;;;;-1:-1:-1;;32712:52:0;;;22422:25:1;;;22478:2;22463:18;;22456:34;;;-1:-1:-1;;;;;32712:52:0;;;;32745:1;;32712:52;;;;;;22395:18:1;32712:52:0;;;;;;;32777:74;32808:8;32826:1;32830:2;32834;32838:6;32846:4;32777:30;:74::i;29898:1074::-;30125:7;:14;30111:3;:10;:28;30103:81;;;;-1:-1:-1;;;30103:81:0;;21194:2:1;30103:81:0;;;21176:21:1;21233:2;21213:18;;;21206:30;21272:34;21252:18;;;21245:62;-1:-1:-1;;;21323:18:1;;;21316:38;21371:19;;30103:81:0;21166:230:1;30103:81:0;-1:-1:-1;;;;;30203:16:0;;30195:66;;;;-1:-1:-1;;;30195:66:0;;;;;;;:::i;:::-;3757:10;30274:16;30391:421;30415:3;:10;30411:1;:14;30391:421;;;30447:10;30460:3;30464:1;30460:6;;;;;;-1:-1:-1;;;30460:6:0;;;;;;;;;;;;;;;30447:19;;30481:14;30498:7;30506:1;30498:10;;;;;;-1:-1:-1;;;30498:10:0;;;;;;;;;;;;;;;;;;;;30525:19;30547:13;;;;;;;;;;-1:-1:-1;;;;;30547:19:0;;;;;;;;;;;;30498:10;;-1:-1:-1;30589:21:0;;;;30581:76;;;;-1:-1:-1;;;30581:76:0;;;;;;;:::i;:::-;30701:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30701:19:0;;;;;;;;;;30723:20;;;30701:42;;30773:17;;;;;;;:27;;30723:20;;30701:9;30773:27;;30723:20;;30773:27;:::i;:::-;;;;;;;;30391:421;;;30427:3;;;;:::i;:::-;;;30391:421;;;;30859:2;-1:-1:-1;;;;;30829:47:0;30853:4;-1:-1:-1;;;;;30829:47:0;30843:8;-1:-1:-1;;;;;30829:47:0;;30863:3;30868:7;30829:47;;;;;;;:::i;:::-;;;;;;;;30889:75;30925:8;30935:4;30941:2;30945:3;30950:7;30959:4;30889:35;:75::i;:::-;29898:1074;;;;;;:::o;6221:191::-;6314:6;;;-1:-1:-1;;;;;6331:17:0;;;-1:-1:-1;;;;;;6331:17:0;;;;;;;6364:40;;6314:6;;;6331:17;6314:6;;6364:40;;6295:16;;6364:40;6221:191;;:::o;36084:331::-;36239:8;-1:-1:-1;;;;;36230:17:0;:5;-1:-1:-1;;;;;36230:17:0;;;36222:71;;;;-1:-1:-1;;;36222:71:0;;20374:2:1;36222:71:0;;;20356:21:1;20413:2;20393:18;;;20386:30;20452:34;20432:18;;;20425:62;-1:-1:-1;;;20503:18:1;;;20496:39;20552:19;;36222:71:0;20346:231:1;36222:71:0;-1:-1:-1;;;;;36304:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36304:46:0;;;;;;;;;;36366:41;;13201::1;;;36366::0;;13174:18:1;36366:41:0;;;;;;;36084:331;;;:::o;1643:190::-;1768:4;1821;1792:25;1805:5;1812:4;1792:12;:25::i;:::-;:33;;1643:190;-1:-1:-1;;;;1643:190:0:o;28720:820::-;-1:-1:-1;;;;;28908:16:0;;28900:66;;;;-1:-1:-1;;;28900:66:0;;;;;;;:::i;:::-;3757:10;29023:96;3757:10;29054:4;29060:2;29064:21;29082:2;29064:17;:21::i;29023:96::-;29132:19;29154:13;;;;;;;;;;;-1:-1:-1;;;;;29154:19:0;;;;;;;;;;29192:21;;;;29184:76;;;;-1:-1:-1;;;29184:76:0;;;;;;;:::i;:::-;29296:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29296:19:0;;;;;;;;;;29318:20;;;29296:42;;29360:17;;;;;;;:27;;29318:20;;29296:9;29360:27;;29318:20;;29360:27;:::i;:::-;;;;-1:-1:-1;;29405:46:0;;;22422:25:1;;;22478:2;22463:18;;22456:34;;;-1:-1:-1;;;;;29405:46:0;;;;;;;;;;;;;;22395:18:1;29405:46:0;;;;;;;29464:68;29495:8;29505:4;29511:2;29515;29519:6;29527:4;29464:30;:68::i;:::-;28720:820;;;;;;;:::o;39173:198::-;39293:16;;;39307:1;39293:16;;;;;;;;;39239;;39268:22;;39293:16;;;;;;;;;;;;-1:-1:-1;39293:16:0;39268:41;;39331:7;39320:5;39326:1;39320:8;;;;;;-1:-1:-1;;;39320:8:0;;;;;;;;;;;;;;;;;;:18;39358:5;39173:198;-1:-1:-1;;39173:198:0:o;37600:744::-;-1:-1:-1;;;;;37815:13:0;;7561:20;7609:8;37811:526;;37851:72;;-1:-1:-1;;;37851:72:0;;-1:-1:-1;;;;;37851:38:0;;;;;:72;;37890:8;;37900:4;;37906:2;;37910:6;;37918:4;;37851:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37851:72:0;;;;;;;;-1:-1:-1;;37851:72:0;;;;;;;;;;;;:::i;:::-;;;37847:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38199:6;38192:14;;-1:-1:-1;;;38192:14:0;;;;;;;;:::i;37847:479::-;;;38248:62;;-1:-1:-1;;;38248:62:0;;13861:2:1;38248:62:0;;;13843:21:1;13900:2;13880:18;;;13873:30;13939:34;13919:18;;;13912:62;-1:-1:-1;;;13990:18:1;;;13983:50;14050:19;;38248:62:0;13833:242:1;37847:479:0;-1:-1:-1;;;;;;37973:55:0;;-1:-1:-1;;;37973:55:0;37969:154;;38053:50;;-1:-1:-1;;;38053:50:0;;;;;;;:::i;38352:813::-;-1:-1:-1;;;;;38592:13:0;;7561:20;7609:8;38588:570;;38628:79;;-1:-1:-1;;;38628:79:0;;-1:-1:-1;;;;;38628:43:0;;;;;:79;;38672:8;;38682:4;;38688:3;;38693:7;;38702:4;;38628:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38628:79:0;;;;;;;;-1:-1:-1;;38628:79:0;;;;;;;;;;;;:::i;:::-;;;38624:523;;;;:::i;:::-;-1:-1:-1;;;;;;38789:60:0;;-1:-1:-1;;;38789:60:0;38785:159;;38874:50;;-1:-1:-1;;;38874:50:0;;;;;;;:::i;2194:675::-;2277:7;2320:4;2277:7;2335:497;2359:5;:12;2355:1;:16;2335:497;;;2393:20;2416:5;2422:1;2416:8;;;;;;-1:-1:-1;;;2416:8:0;;;;;;;;;;;;;;;2393:31;;2459:12;2443;:28;2439:382;;2945:13;2995:15;;;3031:4;3024:15;;;3078:4;3062:21;;2571:57;;2439:382;;;2945:13;2995:15;;;3031:4;3024:15;;;3078:4;3062:21;;2748:57;;2439:382;-1:-1:-1;2373:3:0;;;;:::i;:::-;;;;2335:497;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:2;;;369:1;366;359:12;328:2;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;88:394;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:2;;650:1;647;640:12;584:2;536:124;;;:::o;665:755::-;719:5;772:3;765:4;757:6;753:17;749:27;739:2;;794:5;787;780:20;739:2;834:6;821:20;860:4;883:43;923:2;883:43;:::i;:::-;955:2;949:9;967:31;995:2;987:6;967:31;:::i;:::-;1033:18;;;1067:15;;;;-1:-1:-1;1102:15:1;;;1152:1;1148:10;;;1136:23;;1132:32;;1129:41;-1:-1:-1;1126:2:1;;;1187:5;1180;1173:20;1126:2;1213:5;1227:163;1241:2;1238:1;1235:9;1227:163;;;1298:17;;1286:30;;1336:12;;;;1368;;;;1259:1;1252:9;1227:163;;;-1:-1:-1;1408:6:1;;729:691;-1:-1:-1;;;;;;;729:691:1:o;1425:160::-;1490:20;;1546:13;;1539:21;1529:32;;1519:2;;1575:1;1572;1565:12;1590:228;1632:5;1685:3;1678:4;1670:6;1666:17;1662:27;1652:2;;1707:5;1700;1693:20;1652:2;1733:79;1808:3;1799:6;1786:20;1779:4;1771:6;1767:17;1733:79;:::i;1823:196::-;1882:6;1935:2;1923:9;1914:7;1910:23;1906:32;1903:2;;;1956:6;1948;1941:22;1903:2;1984:29;2003:9;1984:29;:::i;2024:270::-;2092:6;2100;2153:2;2141:9;2132:7;2128:23;2124:32;2121:2;;;2174:6;2166;2159:22;2121:2;2202:29;2221:9;2202:29;:::i;:::-;2192:39;;2250:38;2284:2;2273:9;2269:18;2250:38;:::i;:::-;2240:48;;2111:183;;;;;:::o;2299:983::-;2453:6;2461;2469;2477;2485;2538:3;2526:9;2517:7;2513:23;2509:33;2506:2;;;2560:6;2552;2545:22;2506:2;2588:29;2607:9;2588:29;:::i;:::-;2578:39;;2636:38;2670:2;2659:9;2655:18;2636:38;:::i;:::-;2626:48;;2725:2;2714:9;2710:18;2697:32;2748:18;2789:2;2781:6;2778:14;2775:2;;;2810:6;2802;2795:22;2775:2;2838:61;2891:7;2882:6;2871:9;2867:22;2838:61;:::i;:::-;2828:71;;2952:2;2941:9;2937:18;2924:32;2908:48;;2981:2;2971:8;2968:16;2965:2;;;3002:6;2994;2987:22;2965:2;3030:63;3085:7;3074:8;3063:9;3059:24;3030:63;:::i;:::-;3020:73;;3146:3;3135:9;3131:19;3118:33;3102:49;;3176:2;3166:8;3163:16;3160:2;;;3197:6;3189;3182:22;3160:2;;3225:51;3268:7;3257:8;3246:9;3242:24;3225:51;:::i;:::-;3215:61;;;2496:786;;;;;;;;:::o;3287:626::-;3391:6;3399;3407;3415;3423;3476:3;3464:9;3455:7;3451:23;3447:33;3444:2;;;3498:6;3490;3483:22;3444:2;3526:29;3545:9;3526:29;:::i;:::-;3516:39;;3574:38;3608:2;3597:9;3593:18;3574:38;:::i;:::-;3564:48;;3659:2;3648:9;3644:18;3631:32;3621:42;;3710:2;3699:9;3695:18;3682:32;3672:42;;3765:3;3754:9;3750:19;3737:33;3793:18;3785:6;3782:30;3779:2;;;3830:6;3822;3815:22;3779:2;3858:49;3899:7;3890:6;3879:9;3875:22;3858:49;:::i;3918:264::-;3983:6;3991;4044:2;4032:9;4023:7;4019:23;4015:32;4012:2;;;4065:6;4057;4050:22;4012:2;4093:29;4112:9;4093:29;:::i;:::-;4083:39;;4141:35;4172:2;4161:9;4157:18;4141:35;:::i;4187:264::-;4255:6;4263;4316:2;4304:9;4295:7;4291:23;4287:32;4284:2;;;4337:6;4329;4322:22;4284:2;4365:29;4384:9;4365:29;:::i;:::-;4355:39;4441:2;4426:18;;;;4413:32;;-1:-1:-1;;;4274:177:1:o;4456:332::-;4533:6;4541;4549;4602:2;4590:9;4581:7;4577:23;4573:32;4570:2;;;4623:6;4615;4608:22;4570:2;4651:29;4670:9;4651:29;:::i;:::-;4641:39;4727:2;4712:18;;4699:32;;-1:-1:-1;4778:2:1;4763:18;;;4750:32;;4560:228;-1:-1:-1;;;4560:228:1:o;4793:1274::-;4911:6;4919;4972:2;4960:9;4951:7;4947:23;4943:32;4940:2;;;4993:6;4985;4978:22;4940:2;5038:9;5025:23;5067:18;5108:2;5100:6;5097:14;5094:2;;;5129:6;5121;5114:22;5094:2;5172:6;5161:9;5157:22;5147:32;;5217:7;5210:4;5206:2;5202:13;5198:27;5188:2;;5244:6;5236;5229:22;5188:2;5285;5272:16;5307:4;5330:43;5370:2;5330:43;:::i;:::-;5402:2;5396:9;5414:31;5442:2;5434:6;5414:31;:::i;:::-;5480:18;;;5514:15;;;;-1:-1:-1;5549:11:1;;;5591:1;5587:10;;;5579:19;;5575:28;;5572:41;-1:-1:-1;5569:2:1;;;5631:6;5623;5616:22;5569:2;5658:6;5649:15;;5673:169;5687:2;5684:1;5681:9;5673:169;;;5744:23;5763:3;5744:23;:::i;:::-;5732:36;;5705:1;5698:9;;;;;5788:12;;;;5820;;5673:169;;;-1:-1:-1;5861:6:1;-1:-1:-1;;5905:18:1;;5892:32;;-1:-1:-1;;5936:16:1;;;5933:2;;;5970:6;5962;5955:22;5933:2;;5998:63;6053:7;6042:8;6031:9;6027:24;5998:63;:::i;:::-;5988:73;;;4930:1137;;;;;:::o;6072:739::-;6167:6;6175;6183;6236:2;6224:9;6215:7;6211:23;6207:32;6204:2;;;6257:6;6249;6242:22;6204:2;6302:9;6289:23;6331:18;6372:2;6364:6;6361:14;6358:2;;;6393:6;6385;6378:22;6358:2;6436:6;6425:9;6421:22;6411:32;;6481:7;6474:4;6470:2;6466:13;6462:27;6452:2;;6508:6;6500;6493:22;6452:2;6553;6540:16;6579:2;6571:6;6568:14;6565:2;;;6600:6;6592;6585:22;6565:2;6660:7;6653:4;6643:6;6640:1;6636:14;6632:2;6628:23;6624:34;6621:47;6618:2;;;6686:6;6678;6671:22;6618:2;6722:4;6714:13;;;;6746:6;;-1:-1:-1;6784:20:1;;;;6771:34;;6194:617;-1:-1:-1;;;;6194:617:1:o;6816:255::-;6874:6;6927:2;6915:9;6906:7;6902:23;6898:32;6895:2;;;6948:6;6940;6933:22;6895:2;6992:9;6979:23;7011:30;7035:5;7011:30;:::i;7076:259::-;7145:6;7198:2;7186:9;7177:7;7173:23;7169:32;7166:2;;;7219:6;7211;7204:22;7166:2;7256:9;7250:16;7275:30;7299:5;7275:30;:::i;7340:190::-;7399:6;7452:2;7440:9;7431:7;7427:23;7423:32;7420:2;;;7473:6;7465;7458:22;7420:2;-1:-1:-1;7501:23:1;;7410:120;-1:-1:-1;7410:120:1:o;7535:194::-;7605:6;7658:2;7646:9;7637:7;7633:23;7629:32;7626:2;;;7679:6;7671;7664:22;7626:2;-1:-1:-1;7707:16:1;;7616:113;-1:-1:-1;7616:113:1:o;7734:258::-;7799:6;7807;7860:2;7848:9;7839:7;7835:23;7831:32;7828:2;;;7881:6;7873;7866:22;7828:2;7922:9;7909:23;7899:33;;7951:35;7982:2;7971:9;7967:18;7951:35;:::i;7997:258::-;8065:6;8073;8126:2;8114:9;8105:7;8101:23;8097:32;8094:2;;;8147:6;8139;8132:22;8094:2;-1:-1:-1;;8175:23:1;;;8245:2;8230:18;;;8217:32;;-1:-1:-1;8084:171:1:o;8260:548::-;8338:6;8346;8399:2;8387:9;8378:7;8374:23;8370:32;8367:2;;;8420:6;8412;8405:22;8367:2;8461:9;8448:23;8438:33;;8522:2;8511:9;8507:18;8494:32;8549:18;8541:6;8538:30;8535:2;;;8586:6;8578;8571:22;8535:2;8614:22;;8667:4;8659:13;;8655:27;-1:-1:-1;8645:2:1;;8701:6;8693;8686:22;8645:2;8729:73;8794:7;8789:2;8776:16;8771:2;8767;8763:11;8729:73;:::i;9076:437::-;9129:3;9167:5;9161:12;9194:6;9189:3;9182:19;9220:4;9249:2;9244:3;9240:12;9233:19;;9286:2;9279:5;9275:14;9307:3;9319:169;9333:6;9330:1;9327:13;9319:169;;;9394:13;;9382:26;;9428:12;;;;9463:15;;;;9355:1;9348:9;9319:169;;;-1:-1:-1;9504:3:1;;9137:376;-1:-1:-1;;;;;9137:376:1:o;9518:475::-;9559:3;9597:5;9591:12;9624:6;9619:3;9612:19;9649:3;9661:162;9675:6;9672:1;9669:13;9661:162;;;9737:4;9793:13;;;9789:22;;9783:29;9765:11;;;9761:20;;9754:59;9690:12;9661:162;;;9841:6;9838:1;9835:13;9832:2;;;9907:3;9900:4;9891:6;9886:3;9882:16;9878:27;9871:40;9832:2;-1:-1:-1;9975:2:1;9954:15;-1:-1:-1;;9950:29:1;9941:39;;;;9982:4;9937:50;;9567:426;-1:-1:-1;;9567:426:1:o;10650:826::-;-1:-1:-1;;;;;11047:15:1;;;11029:34;;11099:15;;11094:2;11079:18;;11072:43;11009:3;11146:2;11131:18;;11124:31;;;10972:4;;11178:57;;11215:19;;11207:6;11178:57;:::i;:::-;11283:9;11275:6;11271:22;11266:2;11255:9;11251:18;11244:50;11317:44;11354:6;11346;11317:44;:::i;:::-;11303:58;;11410:9;11402:6;11398:22;11392:3;11381:9;11377:19;11370:51;11438:32;11463:6;11455;11438:32;:::i;:::-;11430:40;10981:495;-1:-1:-1;;;;;;;;10981:495:1:o;11481:560::-;-1:-1:-1;;;;;11778:15:1;;;11760:34;;11830:15;;11825:2;11810:18;;11803:43;11877:2;11862:18;;11855:34;;;11920:2;11905:18;;11898:34;;;11740:3;11963;11948:19;;11941:32;;;11703:4;;11990:45;;12015:19;;12007:6;11990:45;:::i;:::-;11982:53;11712:329;-1:-1:-1;;;;;;;11712:329:1:o;12325:261::-;12504:2;12493:9;12486:21;12467:4;12524:56;12576:2;12565:9;12561:18;12553:6;12524:56;:::i;12591:465::-;12848:2;12837:9;12830:21;12811:4;12874:56;12926:2;12915:9;12911:18;12903:6;12874:56;:::i;:::-;12978:9;12970:6;12966:22;12961:2;12950:9;12946:18;12939:50;13006:44;13043:6;13035;13006:44;:::i;:::-;12998:52;12820:236;-1:-1:-1;;;;;12820:236:1:o;13435:219::-;13584:2;13573:9;13566:21;13547:4;13604:44;13644:2;13633:9;13629:18;13621:6;13604:44;:::i;14080:404::-;14282:2;14264:21;;;14321:2;14301:18;;;14294:30;14360:34;14355:2;14340:18;;14333:62;-1:-1:-1;;;14426:2:1;14411:18;;14404:38;14474:3;14459:19;;14254:230::o;14489:347::-;14691:2;14673:21;;;14730:2;14710:18;;;14703:30;14769:25;14764:2;14749:18;;14742:53;14827:2;14812:18;;14663:173::o;16064:348::-;16266:2;16248:21;;;16305:2;16285:18;;;16278:30;16344:26;16339:2;16324:18;;16317:54;16403:2;16388:18;;16238:174::o;17521:401::-;17723:2;17705:21;;;17762:2;17742:18;;;17735:30;17801:34;17796:2;17781:18;;17774:62;-1:-1:-1;;;17867:2:1;17852:18;;17845:35;17912:3;17897:19;;17695:227::o;18346:406::-;18548:2;18530:21;;;18587:2;18567:18;;;18560:30;18626:34;18621:2;18606:18;;18599:62;-1:-1:-1;;;18692:2:1;18677:18;;18670:40;18742:3;18727:19;;18520:232::o;18757:356::-;18959:2;18941:21;;;18978:18;;;18971:30;19037:34;19032:2;19017:18;;19010:62;19104:2;19089:18;;18931:182::o;19118:350::-;19320:2;19302:21;;;19359:2;19339:18;;;19332:30;19398:28;19393:2;19378:18;;19371:56;19459:2;19444:18;;19292:176::o;19473:352::-;19675:2;19657:21;;;19714:2;19694:18;;;19687:30;19753;19748:2;19733:18;;19726:58;19816:2;19801:18;;19647:178::o;22754:183::-;22814:4;22847:18;22839:6;22836:30;22833:2;;;22869:18;;:::i;:::-;-1:-1:-1;22914:1:1;22910:14;22926:4;22906:25;;22823:114::o;22942:128::-;22982:3;23013:1;23009:6;23006:1;23003:13;23000:2;;;23019:18;;:::i;:::-;-1:-1:-1;23055:9:1;;22990:80::o;23075:217::-;23115:1;23141;23131:2;;-1:-1:-1;;;23166:31:1;;23220:4;23217:1;23210:15;23248:4;23173:1;23238:15;23131:2;-1:-1:-1;23277:9:1;;23121:171::o;23297:168::-;23337:7;23403:1;23399;23395:6;23391:14;23388:1;23385:21;23380:1;23373:9;23366:17;23362:45;23359:2;;;23410:18;;:::i;:::-;-1:-1:-1;23450:9:1;;23349:116::o;23470:380::-;23549:1;23545:12;;;;23592;;;23613:2;;23667:4;23659:6;23655:17;23645:27;;23613:2;23720;23712:6;23709:14;23689:18;23686:38;23683:2;;;23766:10;23761:3;23757:20;23754:1;23747:31;23801:4;23798:1;23791:15;23829:4;23826:1;23819:15;23683:2;;23525:325;;;:::o;23855:249::-;23965:2;23946:13;;-1:-1:-1;;23942:27:1;23930:40;;24000:18;23985:34;;24021:22;;;23982:62;23979:2;;;24047:18;;:::i;:::-;24083:2;24076:22;-1:-1:-1;;23902:202:1:o;24109:135::-;24148:3;-1:-1:-1;;24169:17:1;;24166:2;;;24189:18;;:::i;:::-;-1:-1:-1;24236:1:1;24225:13;;24156:88::o;24249:127::-;24310:10;24305:3;24301:20;24298:1;24291:31;24341:4;24338:1;24331:15;24365:4;24362:1;24355:15;24381:127;24442:10;24437:3;24433:20;24430:1;24423:31;24473:4;24470:1;24463:15;24497:4;24494:1;24487:15;24513:185;24548:3;24590:1;24572:16;24569:23;24566:2;;;24640:1;24635:3;24630;24615:27;24671:10;24666:3;24662:20;24566:2;24556:142;:::o;24703:671::-;24742:3;24784:4;24766:16;24763:26;24760:2;;;24750:624;:::o;24760:2::-;24826;24820:9;-1:-1:-1;;24891:16:1;24887:25;;24884:1;24820:9;24863:50;24942:4;24936:11;24966:16;25001:18;25072:2;25065:4;25057:6;25053:17;25050:25;25045:2;25037:6;25034:14;25031:45;25028:2;;;25079:5;;;;;24750:624;:::o;25028:2::-;25116:6;25110:4;25106:17;25095:28;;25152:3;25146:10;25179:2;25171:6;25168:14;25165:2;;;25185:5;;;;;;24750:624;:::o;25165:2::-;25269;25250:16;25244:4;25240:27;25236:36;25229:4;25220:6;25215:3;25211:16;25207:27;25204:69;25201:2;;;25276:5;;;;;;24750:624;:::o;25201:2::-;25292:57;25343:4;25334:6;25326;25322:19;25318:30;25312:4;25292:57;:::i;:::-;-1:-1:-1;25365:3:1;;24750:624;-1:-1:-1;;;;;24750:624:1:o;25379:131::-;-1:-1:-1;;;;;;25453:32:1;;25443:43;;25433:2;;25500:1;25497;25490:12

Swarm Source

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