ETH Price: $3,044.13 (+2.73%)
Gas: 2 Gwei

Token

ReservaX (RSV)
 

Overview

Max Total Supply

498 RSV

Holders

329

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
mitikazu.eth
0x6BA5037aBCB9f019BC14a088043B3583FC2F487e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Meet the Pistols Birds!

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ReservaX

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (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.
     *
     * NOTE: 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.
     *
     * NOTE: 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: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts v4.4.1 (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;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

// File: contracts/reserva.sol


pragma solidity ^0.8.0;





contract ReservaX is ERC1155Supply, Ownable, ReentrancyGuard {
    using Strings for uint256;

    address public signerRole;
    address public creatorTwo;
    address public creatorOne;
    address[] private addresses;
    
    uint8[] public maxSupplyEach = [81,81,81,81,81,81,0,0,0,0,0,0];
    uint8 public maxTxPublic = 10;
    uint8 public maxTxEarly = 10;

    // [ Admission, creator, royal]
    uint8[] public levels = [0,0,0,0,0,0,0,0,0,1,1,2];
    uint64[] public mintPrice = [150000000000000000,250000000000000000,1000000000000000000];

    // Timestamp of the start and end of sales
    uint256 public preSaleWindowOpens = 1644514598;
    uint256 public preSaleWindowCloses = 1651358231;
    uint256 public publicWindowOpens = 1644514598;
    uint256 public publicWindowCloses = 1648676146;
    uint256[] public amounts = [85, 10, 5];
 
    // Supply in last withdraw for creators
    uint256 withdrawNine;
    uint256 withdrawTen;
    
    bool public paused = false;
    
    string public name = "ReservaX";
    string public symbol = "RSV";
    
    // For each address, how much was minted already in pre and public sale
    mapping(address => uint256) public purchaseTxs;
    mapping(address => uint256) public purchaseTxsEarly;

    constructor(
        string memory _uri,
        address _signerRole,
        address[] memory _addresses
    ) ERC1155(_uri) {
        signerRole = _signerRole;
        addresses = _addresses;
    }

    // Modifier to verify if contract is paused
    modifier whenNotPaused() {
        require(!paused, "Contrato esta pausado temporariamente.");
        _;
    }

    // Modifier to presale function
    modifier onlyValidAccess(uint8 _v, bytes32 _r, bytes32 _s) {
        require(isValidAccessMessage(msg.sender, _v, _r, _s), "A carteira utilizada nao esta na pre-sale.");
        _;
    }
    
    // Pre sale purchase
    function earlyPurchase( uint256 amount, uint256 index, uint8 _v, bytes32 _r, bytes32 _s )
    external payable whenNotPaused onlyValidAccess(_v, _r, _s) {
        require(block.timestamp >= preSaleWindowOpens && block.timestamp <= preSaleWindowCloses, "Janela de compra para pre-sale esta fechada.");
        require(purchaseTxsEarly[msg.sender] + amount <= maxTxEarly , "Maximo de mint por carteira na pre-sale ja foi esgotado.");
        purchaseTxsEarly[msg.sender] += amount;
        
        _purchase(amount, index);
    }

    // Public purchase
    function publicPurchase( uint256 amount, uint256 index) external payable whenNotPaused {
        require(block.timestamp >= publicWindowOpens && block.timestamp <= publicWindowCloses, "Janela de compra para public sale esta fechada.");
        require(purchaseTxs[msg.sender] + amount <= maxTxPublic , "Maximo de mint por carteira na public sale ja foi esgotado.");
        purchaseTxs[msg.sender] += amount;
        
        _purchase(amount, index);
    }

    // Both functions ( presale and public ) call this one, to mint the nft.
    function _purchase(uint256 amount, uint256 index) private {
        require(msg.sender == tx.origin, "Proibida transacoes de outros contratos!");
        uint16 level = levels[index];
        require(msg.value >= amount * mintPrice[level], "Pagamento incorreto, fundos enviados sao insuficientes para compra.");
        require(totalSupply(index) + amount <= maxSupplyEach[index], "Maximo supply para esta arte ja foi atingido.");

        _mint(msg.sender, index, amount, "");
    }

    // Modify the timestamps from the public and presale sale
    function setWindows(uint256 _preSaleWindowOpens, uint256 _preSaleWindowCloses, uint256 _publicWindowOpens, uint256 _publicWindowCloses)  
    external onlyOwner {
        preSaleWindowOpens = _preSaleWindowOpens;
        preSaleWindowCloses = _preSaleWindowCloses;
        publicWindowOpens = _publicWindowOpens;
        publicWindowCloses = _publicWindowCloses;
    }
    
    /**** Functions to change sale config ****/
    function setMaxEarly(uint8 _maxTxEarly) external onlyOwner {
        maxTxEarly = _maxTxEarly;
    }

    function setMaxPublic(uint8 _maxTxPublic) external onlyOwner {
        maxTxPublic = _maxTxPublic;
    }

    function setMaxSupply( uint8[] calldata _maxSupplyEach) external onlyOwner {
        maxSupplyEach = _maxSupplyEach;
    }

    // Pause the contract, so no one can call mint functions
    function pauseContract(bool _state) external onlyOwner {
        paused = _state;
    }

    // Change cost of the mint, array with three values, for each level (admission, creator, royal)
    function newCost(uint64[] calldata _newCost) external onlyOwner {
        mintPrice = _newCost;
    }

    function setLevels(uint8[] calldata _levels) external onlyOwner {
        levels = _levels;
    }

    // Function to recover signer of message
    function isValidAccessMessage(address _add, uint8 _v, bytes32 _r, bytes32 _s) view public returns (bool) {
        bytes32 hash = keccak256(abi.encodePacked(this, _add));
        return signerRole ==  ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), _v, _r, _s);
    }

    // Uri of each token
    function uri(uint256 _id) public view override returns (string memory) {
        require(exists(_id), "URI: nonexistent token");
        return string(abi.encodePacked(super.uri(_id), Strings.toString(_id), ".json"));
    }

    function setUri(string memory newUri) external onlyOwner {
        super._setURI(newUri);
    }

    function setAmounts(uint256[] calldata _amounts) external onlyOwner {
        amounts = _amounts;
    }

    function setAddresses(address[] calldata _addresses) external onlyOwner {
        addresses = _addresses;
    }

    function setCreators(address _creatorOne, address _creatorTwo) external onlyOwner {
        creatorOne = _creatorOne;
        creatorTwo = _creatorTwo;
    }
    
    function withdraw() external onlyOwner nonReentrant {
        uint256 amount1 = (address(this).balance /100) * amounts[0];
        uint256 amount2 = (address(this).balance /100) * amounts[1];
        uint256 amount3 = (address(this).balance /100) * amounts[2];
        uint256 amount4 = (amount1/100) * 20;
        amount1 = amount1 - amount4;
        
        if(totalSupply(9) > 0 || totalSupply(10) > 0) {
            uint256 creatorOnePart = (((totalSupply(9) - withdrawNine)* mintPrice[1])/100) * 5;
            uint256 creatorTwoPart = (((totalSupply(10) - withdrawTen)* mintPrice[1])/100) * 5;

            (bool successCreators, ) = creatorOne.call{value: creatorOnePart}("");
            require(successCreators, "Transfer failed for creators");

            (successCreators, ) = creatorTwo.call{value: creatorTwoPart}("");
            require(successCreators, "Transfer failed for creators.");

            amount1 = amount1 - (creatorOnePart + creatorTwoPart) ;

            withdrawNine = totalSupply(9);
            withdrawTen = totalSupply(10);
        }
        
        (bool success, ) = addresses[0].call{value: amount1}("");
        require(success, "Transfer 1 failed.");

        (success, ) = addresses[1].call{value: amount2}("");
        require(success, "Transfer 2 failed.");

        (success, ) = addresses[2].call{value: amount3}("");
        require(success, "Transfer 3 failed.");

        (success, ) = addresses[3].call{value: amount4}("");
        require(success, "Transfer 4 failed.");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"_signerRole","type":"address"},{"internalType":"address[]","name":"_addresses","type":"address[]"}],"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"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"amounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"name":"creatorOne","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorTwo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"earlyPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","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":"address","name":"_add","type":"address"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"isValidAccessMessage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"levels","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupplyEach","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxEarly","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxPublic","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintPrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64[]","name":"_newCost","type":"uint64[]"}],"name":"newCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleWindowCloses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleWindowOpens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"publicPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicWindowCloses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicWindowOpens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"purchaseTxs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"purchaseTxsEarly","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_addresses","type":"address[]"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"setAmounts","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":"address","name":"_creatorOne","type":"address"},{"internalType":"address","name":"_creatorTwo","type":"address"}],"name":"setCreators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_levels","type":"uint8[]"}],"name":"setLevels","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxTxEarly","type":"uint8"}],"name":"setMaxEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxTxPublic","type":"uint8"}],"name":"setMaxPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_maxSupplyEach","type":"uint8[]"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleWindowOpens","type":"uint256"},{"internalType":"uint256","name":"_preSaleWindowCloses","type":"uint256"},{"internalType":"uint256","name":"_publicWindowOpens","type":"uint256"},{"internalType":"uint256","name":"_publicWindowCloses","type":"uint256"}],"name":"setWindows","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerRole","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6102006040526051608081815260a082905260c082905260e08290526101008290526101209190915260006101408190526101608190526101808190526101a08190526101c08190526101e0526200005c90600a90600c620002c8565b50600b805461ffff1916610a0a1790556040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152600161012082018190526101408201526002610160820152620000dc90600c9081620002c8565b5060408051606081018252670214e8348c4f000081526703782dace9d900006020820152670de0b6b3a7640000918101919091526200012090600d90600362000375565b506362054d26600e81905563626dba17600f55601055636244cd326011556040805160608101825260558152600a60208201526005918101919091526200016c90601290600362000420565b506015805460ff19169055604080518082019091526008808252670a4cae6cae4ecc2b60c31b6020909201918252620001a89160169162000463565b50604080518082019091526003808252622929ab60e91b6020909201918252620001d59160179162000463565b50348015620001e357600080fd5b5060405162003f6e38038062003f6e833981016040819052620002069162000603565b8262000212816200025d565b506200021e3362000276565b6001600555600680546001600160a01b0319166001600160a01b038416179055805162000253906009906020840190620004e0565b5050505062000780565b80516200027290600290602084019062000463565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090601f01602090048101928215620003635791602002820160005b838211156200033257835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302620002f2565b8015620003615782816101000a81549060ff021916905560010160208160000104928301926001030262000332565b505b506200037192915062000538565b5090565b82805482825590600052602060002090600301600490048101928215620003635791602002820160005b83821115620003eb57835183826101000a8154816001600160401b0302191690836001600160401b0316021790555092602001926008016020816007010492830192600103026200039f565b8015620003615782816101000a8154906001600160401b030219169055600801602081600701049283019260010302620003eb565b82805482825590600052602060002090810192821562000363579160200282015b8281111562000363578251829060ff1690559160200191906001019062000441565b82805462000471906200072d565b90600052602060002090601f01602090048101928262000495576000855562000363565b82601f10620004b057805160ff191683800117855562000363565b8280016001018555821562000363579182015b8281111562000363578251825591602001919060010190620004c3565b82805482825590600052602060002090810192821562000363579160200282015b828111156200036357825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000501565b5b8082111562000371576000815560010162000539565b80516001600160a01b03811681146200056757600080fd5b919050565b600082601f8301126200057e57600080fd5b815160206001600160401b038211156200059c576200059c6200076a565b8160051b620005ad828201620006fa565b838152828101908684018388018501891015620005c957600080fd5b600093505b85841015620005f757620005e2816200054f565b835260019390930192918401918401620005ce565b50979650505050505050565b6000806000606084860312156200061957600080fd5b83516001600160401b03808211156200063157600080fd5b818601915086601f8301126200064657600080fd5b8151818111156200065b576200065b6200076a565b602062000671601f8301601f19168201620006fa565b82815289828487010111156200068657600080fd5b60005b83811015620006a657858101830151828201840152820162000689565b83811115620006b85760008385840101525b509650620006c88882016200054f565b955050506040860151915080821115620006e157600080fd5b50620006f0868287016200056c565b9150509250925092565b604051601f8201601f191681016001600160401b03811182821017156200072557620007256200076a565b604052919050565b600181811c908216806200074257607f821691505b602082108114156200076457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6137de80620007906000396000f3fe6080604052600436106102db5760003560e01c80635c975abb1161017f578063bd85b039116100e1578063e985e9c51161008a578063f6bb0c4b11610064578063f6bb0c4b146108a0578063f8685030146108c0578063fbf9e7a6146108ed57600080fd5b8063e985e9c514610817578063f242432a14610860578063f2fde38b1461088057600080fd5b8063e3b19a1b116100bb578063e3b19a1b146107b2578063e3cbf23e146107cc578063e6a72acf146107df57600080fd5b8063bd85b03914610745578063dfb60dd514610772578063e272b8921461079257600080fd5b806395d89b4111610143578063a22cb4651161011d578063a22cb465146106e5578063b2596a6714610705578063b95717211461072557600080fd5b806395d89b41146106905780639b642de1146106a55780639c3e7ef3146106c557600080fd5b80635c975abb146105f55780636c2d481f1461060f578063715018a6146106475780637b1a4b0e1461065c5780638da5cb5b1461067257600080fd5b8063326241141161024357806345f0a44f116101ec5780634e1273f4116101c65780634e1273f4146105795780634f558e79146105a65780635c0b2885146105d557600080fd5b806345f0a44f1461051957806348f971c8146105395780634d839f2a1461055957600080fd5b8063401bd5151161021d578063401bd515146104c35780634331153c146104e3578063447781b21461050357600080fd5b8063326241141461046157806333516198146104815780633ccfd60b146104ae57600080fd5b80630e89341c116102a557806327a811801161027f57806327a81180146104015780632dd18326146104215780632eb2c2d61461044157600080fd5b80630e89341c1461039d5780631022fa31146103bd57806325d12749146103ee57600080fd5b8062c1e5cf146102e0578062fdd58e1461030957806301ffc9a714610329578063062897ba1461035957806306fdde031461037b575b600080fd5b3480156102ec57600080fd5b506102f660115481565b6040519081526020015b60405180910390f35b34801561031557600080fd5b506102f6610324366004612f74565b610903565b34801561033557600080fd5b5061034961034436600461310c565b61099a565b6040519015158152602001610300565b34801561036557600080fd5b50610379610374366004613242565b6109ec565b005b34801561038757600080fd5b50610390610a2c565b60405161030091906133e5565b3480156103a957600080fd5b506103906103b836600461318e565b610aba565b3480156103c957600080fd5b50600b546103dc90610100900460ff1681565b60405160ff9091168152602001610300565b6103796103fc3660046131a7565b610b51565b34801561040d57600080fd5b5061037961041c3660046131c9565b610cb7565b34801561042d57600080fd5b5061037961043c366004612fe0565b610cf5565b34801561044d57600080fd5b5061037961045c366004612e3d565b610d30565b34801561046d57600080fd5b5061034961047c366004612f9e565b610dc7565b34801561048d57600080fd5b506102f661049c366004612def565b60196020526000908152604090205481565b3480156104ba57600080fd5b50610379610ed1565b3480156104cf57600080fd5b506103796104de366004612e0a565b61164a565b3480156104ef57600080fd5b506103796104fe366004612fe0565b6116a2565b34801561050f57600080fd5b506102f6600e5481565b34801561052557600080fd5b506102f661053436600461318e565b6116d8565b34801561054557600080fd5b50610379610554366004612fe0565b6116f9565b34801561056557600080fd5b50610379610574366004613242565b61172f565b34801561058557600080fd5b50610599610594366004613021565b611775565b60405161030091906133a4565b3480156105b257600080fd5b506103496105c136600461318e565b600090815260036020526040902054151590565b3480156105e157600080fd5b506103dc6105f036600461318e565b61189e565b34801561060157600080fd5b506015546103499060ff1681565b34801561061b57600080fd5b5060065461062f906001600160a01b031681565b6040516001600160a01b039091168152602001610300565b34801561065357600080fd5b506103796118d2565b34801561066857600080fd5b506102f660105481565b34801561067e57600080fd5b506004546001600160a01b031661062f565b34801561069c57600080fd5b50610390611908565b3480156106b157600080fd5b506103796106c0366004613146565b611915565b3480156106d157600080fd5b506103796106e0366004612fe0565b61194b565b3480156106f157600080fd5b50610379610700366004612f4a565b611981565b34801561071157600080fd5b506103dc61072036600461318e565b61198c565b34801561073157600080fd5b50610379610740366004612fe0565b61199c565b34801561075157600080fd5b506102f661076036600461318e565b60009081526003602052604090205490565b34801561077e57600080fd5b5060075461062f906001600160a01b031681565b34801561079e57600080fd5b506103796107ad3660046130f1565b6119d2565b3480156107be57600080fd5b50600b546103dc9060ff1681565b6103796107da3660046131fb565b611a0f565b3480156107eb57600080fd5b506107ff6107fa36600461318e565b611bea565b6040516001600160401b039091168152602001610300565b34801561082357600080fd5b50610349610832366004612e0a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561086c57600080fd5b5061037961087b366004612ee6565b611c27565b34801561088c57600080fd5b5061037961089b366004612def565b611cae565b3480156108ac57600080fd5b5060085461062f906001600160a01b031681565b3480156108cc57600080fd5b506102f66108db366004612def565b60186020526000908152604090205481565b3480156108f957600080fd5b506102f6600f5481565b60006001600160a01b0383166109745760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806109cb57506001600160e01b031982166303a24d0760e21b145b806109e657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6004546001600160a01b03163314610a165760405162461bcd60e51b815260040161096b906134cf565b600b805460ff191660ff92909216919091179055565b60168054610a39906135ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610a65906135ff565b8015610ab25780601f10610a8757610100808354040283529160200191610ab2565b820191906000526020600020905b815481529060010190602001808311610a9557829003601f168201915b505050505081565b600081815260036020526040902054606090610b185760405162461bcd60e51b815260206004820152601660248201527f5552493a206e6f6e6578697374656e7420746f6b656e00000000000000000000604482015260640161096b565b610b2182611d46565b610b2a83611dda565b604051602001610b3b9291906132c4565b6040516020818303038152906040529050919050565b60155460ff1615610b745760405162461bcd60e51b815260040161096b90613504565b6010544210158015610b8857506011544211155b610bec5760405162461bcd60e51b815260206004820152602f60248201527f4a616e656c6120646520636f6d7072612070617261207075626c69632073616c60448201526e329032b9ba30903332b1b430b2309760891b606482015260840161096b565b600b543360009081526018602052604090205460ff90911690610c1090849061356d565b1115610c845760405162461bcd60e51b815260206004820152603b60248201527f4d6178696d6f206465206d696e7420706f72206361727465697261206e61207060448201527f75626c69632073616c65206a6120666f69206573676f7461646f2e0000000000606482015260840161096b565b3360009081526018602052604081208054849290610ca390849061356d565b90915550610cb390508282611edf565b5050565b6004546001600160a01b03163314610ce15760405162461bcd60e51b815260040161096b906134cf565b600e93909355600f91909155601055601155565b6004546001600160a01b03163314610d1f5760405162461bcd60e51b815260040161096b906134cf565b610d2b600d83836129fd565b505050565b6001600160a01b038516331480610d4c5750610d4c8533610832565b610db35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161096b565b610dc0858585858561210a565b5050505050565b6040516bffffffffffffffffffffffff1930606090811b8216602084015286901b1660348201526000908190604801604051602081830303815290604052805190602001209050600181604051602001610e4d91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f198184030181528282528051602091820120600084529083018083525260ff881690820152606081018690526080810185905260a0016020604051602081039080840390855afa158015610eab573d6000803e3d6000fd5b5050604051601f1901516006546001600160a01b03918216911614979650505050505050565b6004546001600160a01b03163314610efb5760405162461bcd60e51b815260040161096b906134cf565b60026005541415610f4e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096b565b600260058190555060006012600081548110610f6c57610f6c6136c1565b9060005260206000200154606447610f849190613585565b610f8e9190613599565b905060006012600181548110610fa657610fa66136c1565b9060005260206000200154606447610fbe9190613585565b610fc89190613599565b905060006012600281548110610fe057610fe06136c1565b9060005260206000200154606447610ff89190613585565b6110029190613599565b90506000611011606485613585565b61101c906014613599565b905061102881856135b8565b600960005260036020527f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4585490945015158061108e5750600a60005260036020527f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d535415155b1561136a5760006064600d6001815481106110ab576110ab6136c1565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b03166001600160401b03166013546110f7600960009081526003602052604090205490565b61110191906135b8565b61110b9190613599565b6111159190613585565b611120906005613599565b905060006064600d60018154811061113a5761113a6136c1565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b03166001600160401b0316601454611186600a60009081526003602052604090205490565b61119091906135b8565b61119a9190613599565b6111a49190613585565b6111af906005613599565b6008546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114611201576040519150601f19603f3d011682016040523d82523d6000602084013e611206565b606091505b50509050806112575760405162461bcd60e51b815260206004820152601c60248201527f5472616e73666572206661696c656420666f722063726561746f727300000000604482015260640161096b565b6007546040516001600160a01b03909116908390600081818185875af1925050503d80600081146112a4576040519150601f19603f3d011682016040523d82523d6000602084013e6112a9565b606091505b505080915050806112fc5760405162461bcd60e51b815260206004820152601d60248201527f5472616e73666572206661696c656420666f722063726561746f72732e000000604482015260640161096b565b611306828461356d565b61131090886135b8565b60036020527f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45854601355600a6000527f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d535460145596505050505b60006009600081548110611380576113806136c1565b60009182526020822001546040516001600160a01b039091169187919081818185875af1925050503d80600081146113d4576040519150601f19603f3d011682016040523d82523d6000602084013e6113d9565b606091505b505090508061141f5760405162461bcd60e51b81526020600482015260126024820152712a3930b739b332b91018903330b4b632b21760711b604482015260640161096b565b6009600181548110611433576114336136c1565b60009182526020822001546040516001600160a01b039091169186919081818185875af1925050503d8060008114611487576040519150601f19603f3d011682016040523d82523d6000602084013e61148c565b606091505b505080915050806114d45760405162461bcd60e51b81526020600482015260126024820152712a3930b739b332b91019103330b4b632b21760711b604482015260640161096b565b60096002815481106114e8576114e86136c1565b60009182526020822001546040516001600160a01b039091169185919081818185875af1925050503d806000811461153c576040519150601f19603f3d011682016040523d82523d6000602084013e611541565b606091505b505080915050806115895760405162461bcd60e51b81526020600482015260126024820152712a3930b739b332b91019903330b4b632b21760711b604482015260640161096b565b600960038154811061159d5761159d6136c1565b60009182526020822001546040516001600160a01b039091169184919081818185875af1925050503d80600081146115f1576040519150601f19603f3d011682016040523d82523d6000602084013e6115f6565b606091505b5050809150508061163e5760405162461bcd60e51b81526020600482015260126024820152712a3930b739b332b9101a103330b4b632b21760711b604482015260640161096b565b50506001600555505050565b6004546001600160a01b031633146116745760405162461bcd60e51b815260040161096b906134cf565b600880546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6004546001600160a01b031633146116cc5760405162461bcd60e51b815260040161096b906134cf565b610d2b60128383612abe565b601281815481106116e857600080fd5b600091825260209091200154905081565b6004546001600160a01b031633146117235760405162461bcd60e51b815260040161096b906134cf565b610d2b600a8383612af9565b6004546001600160a01b031633146117595760405162461bcd60e51b815260040161096b906134cf565b600b805460ff9092166101000261ff0019909216919091179055565b606081518351146117da5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161096b565b600083516001600160401b038111156117f5576117f56136d7565b60405190808252806020026020018201604052801561181e578160200160208202803683370190505b50905060005b845181101561189657611869858281518110611842576118426136c1565b602002602001015185838151811061185c5761185c6136c1565b6020026020010151610903565b82828151811061187b5761187b6136c1565b602090810291909101015261188f81613666565b9050611824565b509392505050565b600a81815481106118ae57600080fd5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b6004546001600160a01b031633146118fc5760405162461bcd60e51b815260040161096b906134cf565b61190660006122f5565b565b60178054610a39906135ff565b6004546001600160a01b0316331461193f5760405162461bcd60e51b815260040161096b906134cf565b61194881612347565b50565b6004546001600160a01b031633146119755760405162461bcd60e51b815260040161096b906134cf565b610d2b600c8383612af9565b610cb333838361235a565b600c81815481106118ae57600080fd5b6004546001600160a01b031633146119c65760405162461bcd60e51b815260040161096b906134cf565b610d2b60098383612b90565b6004546001600160a01b031633146119fc5760405162461bcd60e51b815260040161096b906134cf565b6015805460ff1916911515919091179055565b60155460ff1615611a325760405162461bcd60e51b815260040161096b90613504565b828282611a4133848484610dc7565b611aa05760405162461bcd60e51b815260206004820152602a60248201527f41206361727465697261207574696c697a616461206e616f2065737461206e616044820152691038393296b9b0b6329760b11b606482015260840161096b565b600e544210158015611ab45750600f544211155b611b155760405162461bcd60e51b815260206004820152602c60248201527f4a616e656c6120646520636f6d7072612070617261207072652d73616c65206560448201526b39ba30903332b1b430b2309760a11b606482015260840161096b565b600b543360009081526019602052604090205461010090910460ff1690611b3d908a9061356d565b1115611bb15760405162461bcd60e51b815260206004820152603860248201527f4d6178696d6f206465206d696e7420706f72206361727465697261206e61207060448201527f72652d73616c65206a6120666f69206573676f7461646f2e0000000000000000606482015260840161096b565b33600090815260196020526040812080548a9290611bd090849061356d565b90915550611be090508888611edf565b5050505050505050565b600d8181548110611bfa57600080fd5b9060005260206000209060049182820401919006600802915054906101000a90046001600160401b031681565b6001600160a01b038516331480611c435750611c438533610832565b611ca15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161096b565b610dc0858585858561243b565b6004546001600160a01b03163314611cd85760405162461bcd60e51b815260040161096b906134cf565b6001600160a01b038116611d3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096b565b611948816122f5565b606060028054611d55906135ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611d81906135ff565b8015611dce5780601f10611da357610100808354040283529160200191611dce565b820191906000526020600020905b815481529060010190602001808311611db157829003601f168201915b50505050509050919050565b606081611dfe5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e285780611e1281613666565b9150611e219050600a83613585565b9150611e02565b6000816001600160401b03811115611e4257611e426136d7565b6040519080825280601f01601f191660200182016040528015611e6c576020820181803683370190505b5090505b8415611ed757611e816001836135b8565b9150611e8e600a86613681565b611e9990603061356d565b60f81b818381518110611eae57611eae6136c1565b60200101906001600160f81b031916908160001a905350611ed0600a86613585565b9450611e70565b949350505050565b333214611f3f5760405162461bcd60e51b815260206004820152602860248201527f50726f6962696461207472616e7361636f6573206465206f7574726f7320636f6044820152676e747261746f732160c01b606482015260840161096b565b6000600c8281548110611f5457611f546136c1565b90600052602060002090602091828204019190069054906101000a900460ff1660ff169050600d8161ffff1681548110611f9057611f906136c1565b60009182526020909120600482040154611fbf916003166008026101000a90046001600160401b031684613599565b3410156120405760405162461bcd60e51b815260206004820152604360248201527f506167616d656e746f20696e636f727265746f2c2066756e646f7320656e766960448201527f61646f732073616f20696e737566696369656e746573207061726120636f6d7060648201526239309760e91b608482015260a40161096b565b600a8281548110612053576120536136c1565b600091825260208083208183040154858452600390915260409092205460ff601f9092166101000a909204169061208b90859061356d565b11156120ef5760405162461bcd60e51b815260206004820152602d60248201527f4d6178696d6f20737570706c79207061726120657374612061727465206a612060448201526c3337b49030ba34b733b4b2379760991b606482015260840161096b565b610d2b33838560405180602001604052806000815250612567565b815183511461216c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161096b565b6001600160a01b0384166121925760405162461bcd60e51b815260040161096b90613440565b336121a1818787878787612668565b60005b84518110156122875760008582815181106121c1576121c16136c1565b6020026020010151905060008583815181106121df576121df6136c1565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561222f5760405162461bcd60e51b815260040161096b90613485565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061226c90849061356d565b925050819055505050508061228090613666565b90506121a4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516122d79291906133b7565b60405180910390a46122ed818787878787612774565b505050505050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8051610cb3906002906020840190612be3565b816001600160a01b0316836001600160a01b031614156123ce5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161096b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166124615760405162461bcd60e51b815260040161096b90613440565b33612480818787612471886128e8565b61247a886128e8565b87612668565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156124c15760405162461bcd60e51b815260040161096b90613485565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906124fe90849061356d565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461255e828888888888612933565b50505050505050565b6001600160a01b0384166125c75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161096b565b336125d881600087612471886128e8565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061260890849061356d565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610dc081600087878787612933565b6001600160a01b0385166126ef5760005b83518110156126ed57828181518110612694576126946136c1565b6020026020010151600360008684815181106126b2576126b26136c1565b6020026020010151815260200190815260200160002060008282546126d7919061356d565b909155506126e6905081613666565b9050612679565b505b6001600160a01b0384166122ed5760005b835181101561255e5782818151811061271b5761271b6136c1565b602002602001015160036000868481518110612739576127396136c1565b60200260200101518152602001908152602001600020600082825461275e91906135b8565b9091555061276d905081613666565b9050612700565b6001600160a01b0384163b156122ed5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906127b89089908990889088908890600401613303565b602060405180830381600087803b1580156127d257600080fd5b505af1925050508015612802575060408051601f3d908101601f191682019092526127ff91810190613129565b60015b6128b85761280e6136ed565b806308c379a014156128485750612823613709565b8061282e575061284a565b8060405162461bcd60e51b815260040161096b91906133e5565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840161096b565b6001600160e01b0319811663bc197c8160e01b1461255e5760405162461bcd60e51b815260040161096b906133f8565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612922576129226136c1565b602090810291909101015292915050565b6001600160a01b0384163b156122ed5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906129779089908990889088908890600401613361565b602060405180830381600087803b15801561299157600080fd5b505af19250505080156129c1575060408051601f3d908101601f191682019092526129be91810190613129565b60015b6129cd5761280e6136ed565b6001600160e01b0319811663f23a6e6160e01b1461255e5760405162461bcd60e51b815260040161096b906133f8565b82805482825590600052602060002090600301600490048101928215612aae5791602002820160005b83821115612a795783356001600160401b031683826101000a8154816001600160401b0302191690836001600160401b031602179055509260200192600801602081600701049283019260010302612a26565b8015612aac5782816101000a8154906001600160401b030219169055600801602081600701049283019260010302612a79565b505b50612aba929150612c57565b5090565b828054828255906000526020600020908101928215612aae579160200282015b82811115612aae578235825591602001919060010190612ade565b82805482825590600052602060002090601f01602090048101928215612aae5791602002820160005b83821115612b6357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302612b22565b8015612aac5782816101000a81549060ff0219169055600101602081600001049283019260010302612b63565b828054828255906000526020600020908101928215612aae579160200282015b82811115612aae5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612bb0565b828054612bef906135ff565b90600052602060002090601f016020900481019282612c115760008555612aae565b82601f10612c2a57805160ff1916838001178555612aae565b82800160010185558215612aae579182015b82811115612aae578251825591602001919060010190612c3c565b5b80821115612aba5760008155600101612c58565b60006001600160401b03831115612c8557612c856136d7565b604051612c9c601f8501601f19166020018261363a565b809150838152848484011115612cb157600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114612ce057600080fd5b919050565b60008083601f840112612cf757600080fd5b5081356001600160401b03811115612d0e57600080fd5b6020830191508360208260051b8501011115612d2957600080fd5b9250929050565b600082601f830112612d4157600080fd5b81356020612d4e8261354a565b604051612d5b828261363a565b8381528281019150858301600585901b87018401881015612d7b57600080fd5b60005b85811015612d9a57813584529284019290840190600101612d7e565b5090979650505050505050565b80358015158114612ce057600080fd5b600082601f830112612dc857600080fd5b612dd783833560208501612c6c565b9392505050565b803560ff81168114612ce057600080fd5b600060208284031215612e0157600080fd5b612dd782612cc9565b60008060408385031215612e1d57600080fd5b612e2683612cc9565b9150612e3460208401612cc9565b90509250929050565b600080600080600060a08688031215612e5557600080fd5b612e5e86612cc9565b9450612e6c60208701612cc9565b935060408601356001600160401b0380821115612e8857600080fd5b612e9489838a01612d30565b94506060880135915080821115612eaa57600080fd5b612eb689838a01612d30565b93506080880135915080821115612ecc57600080fd5b50612ed988828901612db7565b9150509295509295909350565b600080600080600060a08688031215612efe57600080fd5b612f0786612cc9565b9450612f1560208701612cc9565b9350604086013592506060860135915060808601356001600160401b03811115612f3e57600080fd5b612ed988828901612db7565b60008060408385031215612f5d57600080fd5b612f6683612cc9565b9150612e3460208401612da7565b60008060408385031215612f8757600080fd5b612f9083612cc9565b946020939093013593505050565b60008060008060808587031215612fb457600080fd5b612fbd85612cc9565b9350612fcb60208601612dde565b93969395505050506040820135916060013590565b60008060208385031215612ff357600080fd5b82356001600160401b0381111561300957600080fd5b61301585828601612ce5565b90969095509350505050565b6000806040838503121561303457600080fd5b82356001600160401b038082111561304b57600080fd5b818501915085601f83011261305f57600080fd5b8135602061306c8261354a565b604051613079828261363a565b8381528281019150858301600585901b870184018b101561309957600080fd5b600096505b848710156130c3576130af81612cc9565b83526001969096019591830191830161309e565b50965050860135925050808211156130da57600080fd5b506130e785828601612d30565b9150509250929050565b60006020828403121561310357600080fd5b612dd782612da7565b60006020828403121561311e57600080fd5b8135612dd781613792565b60006020828403121561313b57600080fd5b8151612dd781613792565b60006020828403121561315857600080fd5b81356001600160401b0381111561316e57600080fd5b8201601f8101841361317f57600080fd5b611ed784823560208401612c6c565b6000602082840312156131a057600080fd5b5035919050565b600080604083850312156131ba57600080fd5b50508035926020909101359150565b600080600080608085870312156131df57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561321357600080fd5b853594506020860135935061322a60408701612dde565b94979396509394606081013594506080013592915050565b60006020828403121561325457600080fd5b612dd782612dde565b600081518084526020808501945080840160005b8381101561328d57815187529582019590820190600101613271565b509495945050505050565b600081518084526132b08160208601602086016135cf565b601f01601f19169290920160200192915050565b600083516132d68184602088016135cf565b8351908301906132ea8183602088016135cf565b64173539b7b760d91b9101908152600501949350505050565b60006001600160a01b03808816835280871660208401525060a0604083015261332f60a083018661325d565b8281036060840152613341818661325d565b905082810360808401526133558185613298565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261339960a0830184613298565b979650505050505050565b602081526000612dd7602083018461325d565b6040815260006133ca604083018561325d565b82810360208401526133dc818561325d565b95945050505050565b602081526000612dd76020830184613298565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f436f6e747261746f2065737461207061757361646f2074656d706f726172696160408201526536b2b73a329760d11b606082015260800190565b60006001600160401b03821115613563576135636136d7565b5060051b60200190565b6000821982111561358057613580613695565b500190565b600082613594576135946136ab565b500490565b60008160001904831182151516156135b3576135b3613695565b500290565b6000828210156135ca576135ca613695565b500390565b60005b838110156135ea5781810151838201526020016135d2565b838111156135f9576000848401525b50505050565b600181811c9082168061361357607f821691505b6020821081141561363457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561365f5761365f6136d7565b6040525050565b600060001982141561367a5761367a613695565b5060010190565b600082613690576136906136ab565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156137065760046000803e5060005160e01c5b90565b600060443d10156137175790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561374657505050505090565b828501915081518181111561375e5750505050505090565b843d87010160208285010111156137785750505050505090565b6137876020828601018761363a565b509095945050505050565b6001600160e01b03198116811461194857600080fdfea26469706673582212202bd3a3469c7426f09abc40fc8b61f4dbd7be73bd16521f878a04f086d36edc6b64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000a65aae78edef916d4102ba7b5672068c0d35fbff00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f3535756e6974792e6d7970696e6174612e636c6f75642f697066732f516d654e4a5533426a574e74654c4d4766506d5a41626175517a4b6e6f666336687a39664c734e445a66357842792f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000f4d3d077c12934dfaadf7aced971c392e9c9bb5b0000000000000000000000004e3c4cb1c2ecc0005c5980a5c09ac5146529ccb2000000000000000000000000189dc876eae36ccc437321903f0fbb3105f64640000000000000000000000000ca9a636963ba3a2928dd93110bad5fce1f652a3b

Deployed Bytecode

0x6080604052600436106102db5760003560e01c80635c975abb1161017f578063bd85b039116100e1578063e985e9c51161008a578063f6bb0c4b11610064578063f6bb0c4b146108a0578063f8685030146108c0578063fbf9e7a6146108ed57600080fd5b8063e985e9c514610817578063f242432a14610860578063f2fde38b1461088057600080fd5b8063e3b19a1b116100bb578063e3b19a1b146107b2578063e3cbf23e146107cc578063e6a72acf146107df57600080fd5b8063bd85b03914610745578063dfb60dd514610772578063e272b8921461079257600080fd5b806395d89b4111610143578063a22cb4651161011d578063a22cb465146106e5578063b2596a6714610705578063b95717211461072557600080fd5b806395d89b41146106905780639b642de1146106a55780639c3e7ef3146106c557600080fd5b80635c975abb146105f55780636c2d481f1461060f578063715018a6146106475780637b1a4b0e1461065c5780638da5cb5b1461067257600080fd5b8063326241141161024357806345f0a44f116101ec5780634e1273f4116101c65780634e1273f4146105795780634f558e79146105a65780635c0b2885146105d557600080fd5b806345f0a44f1461051957806348f971c8146105395780634d839f2a1461055957600080fd5b8063401bd5151161021d578063401bd515146104c35780634331153c146104e3578063447781b21461050357600080fd5b8063326241141461046157806333516198146104815780633ccfd60b146104ae57600080fd5b80630e89341c116102a557806327a811801161027f57806327a81180146104015780632dd18326146104215780632eb2c2d61461044157600080fd5b80630e89341c1461039d5780631022fa31146103bd57806325d12749146103ee57600080fd5b8062c1e5cf146102e0578062fdd58e1461030957806301ffc9a714610329578063062897ba1461035957806306fdde031461037b575b600080fd5b3480156102ec57600080fd5b506102f660115481565b6040519081526020015b60405180910390f35b34801561031557600080fd5b506102f6610324366004612f74565b610903565b34801561033557600080fd5b5061034961034436600461310c565b61099a565b6040519015158152602001610300565b34801561036557600080fd5b50610379610374366004613242565b6109ec565b005b34801561038757600080fd5b50610390610a2c565b60405161030091906133e5565b3480156103a957600080fd5b506103906103b836600461318e565b610aba565b3480156103c957600080fd5b50600b546103dc90610100900460ff1681565b60405160ff9091168152602001610300565b6103796103fc3660046131a7565b610b51565b34801561040d57600080fd5b5061037961041c3660046131c9565b610cb7565b34801561042d57600080fd5b5061037961043c366004612fe0565b610cf5565b34801561044d57600080fd5b5061037961045c366004612e3d565b610d30565b34801561046d57600080fd5b5061034961047c366004612f9e565b610dc7565b34801561048d57600080fd5b506102f661049c366004612def565b60196020526000908152604090205481565b3480156104ba57600080fd5b50610379610ed1565b3480156104cf57600080fd5b506103796104de366004612e0a565b61164a565b3480156104ef57600080fd5b506103796104fe366004612fe0565b6116a2565b34801561050f57600080fd5b506102f6600e5481565b34801561052557600080fd5b506102f661053436600461318e565b6116d8565b34801561054557600080fd5b50610379610554366004612fe0565b6116f9565b34801561056557600080fd5b50610379610574366004613242565b61172f565b34801561058557600080fd5b50610599610594366004613021565b611775565b60405161030091906133a4565b3480156105b257600080fd5b506103496105c136600461318e565b600090815260036020526040902054151590565b3480156105e157600080fd5b506103dc6105f036600461318e565b61189e565b34801561060157600080fd5b506015546103499060ff1681565b34801561061b57600080fd5b5060065461062f906001600160a01b031681565b6040516001600160a01b039091168152602001610300565b34801561065357600080fd5b506103796118d2565b34801561066857600080fd5b506102f660105481565b34801561067e57600080fd5b506004546001600160a01b031661062f565b34801561069c57600080fd5b50610390611908565b3480156106b157600080fd5b506103796106c0366004613146565b611915565b3480156106d157600080fd5b506103796106e0366004612fe0565b61194b565b3480156106f157600080fd5b50610379610700366004612f4a565b611981565b34801561071157600080fd5b506103dc61072036600461318e565b61198c565b34801561073157600080fd5b50610379610740366004612fe0565b61199c565b34801561075157600080fd5b506102f661076036600461318e565b60009081526003602052604090205490565b34801561077e57600080fd5b5060075461062f906001600160a01b031681565b34801561079e57600080fd5b506103796107ad3660046130f1565b6119d2565b3480156107be57600080fd5b50600b546103dc9060ff1681565b6103796107da3660046131fb565b611a0f565b3480156107eb57600080fd5b506107ff6107fa36600461318e565b611bea565b6040516001600160401b039091168152602001610300565b34801561082357600080fd5b50610349610832366004612e0a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561086c57600080fd5b5061037961087b366004612ee6565b611c27565b34801561088c57600080fd5b5061037961089b366004612def565b611cae565b3480156108ac57600080fd5b5060085461062f906001600160a01b031681565b3480156108cc57600080fd5b506102f66108db366004612def565b60186020526000908152604090205481565b3480156108f957600080fd5b506102f6600f5481565b60006001600160a01b0383166109745760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806109cb57506001600160e01b031982166303a24d0760e21b145b806109e657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6004546001600160a01b03163314610a165760405162461bcd60e51b815260040161096b906134cf565b600b805460ff191660ff92909216919091179055565b60168054610a39906135ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610a65906135ff565b8015610ab25780601f10610a8757610100808354040283529160200191610ab2565b820191906000526020600020905b815481529060010190602001808311610a9557829003601f168201915b505050505081565b600081815260036020526040902054606090610b185760405162461bcd60e51b815260206004820152601660248201527f5552493a206e6f6e6578697374656e7420746f6b656e00000000000000000000604482015260640161096b565b610b2182611d46565b610b2a83611dda565b604051602001610b3b9291906132c4565b6040516020818303038152906040529050919050565b60155460ff1615610b745760405162461bcd60e51b815260040161096b90613504565b6010544210158015610b8857506011544211155b610bec5760405162461bcd60e51b815260206004820152602f60248201527f4a616e656c6120646520636f6d7072612070617261207075626c69632073616c60448201526e329032b9ba30903332b1b430b2309760891b606482015260840161096b565b600b543360009081526018602052604090205460ff90911690610c1090849061356d565b1115610c845760405162461bcd60e51b815260206004820152603b60248201527f4d6178696d6f206465206d696e7420706f72206361727465697261206e61207060448201527f75626c69632073616c65206a6120666f69206573676f7461646f2e0000000000606482015260840161096b565b3360009081526018602052604081208054849290610ca390849061356d565b90915550610cb390508282611edf565b5050565b6004546001600160a01b03163314610ce15760405162461bcd60e51b815260040161096b906134cf565b600e93909355600f91909155601055601155565b6004546001600160a01b03163314610d1f5760405162461bcd60e51b815260040161096b906134cf565b610d2b600d83836129fd565b505050565b6001600160a01b038516331480610d4c5750610d4c8533610832565b610db35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161096b565b610dc0858585858561210a565b5050505050565b6040516bffffffffffffffffffffffff1930606090811b8216602084015286901b1660348201526000908190604801604051602081830303815290604052805190602001209050600181604051602001610e4d91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f198184030181528282528051602091820120600084529083018083525260ff881690820152606081018690526080810185905260a0016020604051602081039080840390855afa158015610eab573d6000803e3d6000fd5b5050604051601f1901516006546001600160a01b03918216911614979650505050505050565b6004546001600160a01b03163314610efb5760405162461bcd60e51b815260040161096b906134cf565b60026005541415610f4e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096b565b600260058190555060006012600081548110610f6c57610f6c6136c1565b9060005260206000200154606447610f849190613585565b610f8e9190613599565b905060006012600181548110610fa657610fa66136c1565b9060005260206000200154606447610fbe9190613585565b610fc89190613599565b905060006012600281548110610fe057610fe06136c1565b9060005260206000200154606447610ff89190613585565b6110029190613599565b90506000611011606485613585565b61101c906014613599565b905061102881856135b8565b600960005260036020527f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4585490945015158061108e5750600a60005260036020527f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d535415155b1561136a5760006064600d6001815481106110ab576110ab6136c1565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b03166001600160401b03166013546110f7600960009081526003602052604090205490565b61110191906135b8565b61110b9190613599565b6111159190613585565b611120906005613599565b905060006064600d60018154811061113a5761113a6136c1565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b03166001600160401b0316601454611186600a60009081526003602052604090205490565b61119091906135b8565b61119a9190613599565b6111a49190613585565b6111af906005613599565b6008546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114611201576040519150601f19603f3d011682016040523d82523d6000602084013e611206565b606091505b50509050806112575760405162461bcd60e51b815260206004820152601c60248201527f5472616e73666572206661696c656420666f722063726561746f727300000000604482015260640161096b565b6007546040516001600160a01b03909116908390600081818185875af1925050503d80600081146112a4576040519150601f19603f3d011682016040523d82523d6000602084013e6112a9565b606091505b505080915050806112fc5760405162461bcd60e51b815260206004820152601d60248201527f5472616e73666572206661696c656420666f722063726561746f72732e000000604482015260640161096b565b611306828461356d565b61131090886135b8565b60036020527f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45854601355600a6000527f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d535460145596505050505b60006009600081548110611380576113806136c1565b60009182526020822001546040516001600160a01b039091169187919081818185875af1925050503d80600081146113d4576040519150601f19603f3d011682016040523d82523d6000602084013e6113d9565b606091505b505090508061141f5760405162461bcd60e51b81526020600482015260126024820152712a3930b739b332b91018903330b4b632b21760711b604482015260640161096b565b6009600181548110611433576114336136c1565b60009182526020822001546040516001600160a01b039091169186919081818185875af1925050503d8060008114611487576040519150601f19603f3d011682016040523d82523d6000602084013e61148c565b606091505b505080915050806114d45760405162461bcd60e51b81526020600482015260126024820152712a3930b739b332b91019103330b4b632b21760711b604482015260640161096b565b60096002815481106114e8576114e86136c1565b60009182526020822001546040516001600160a01b039091169185919081818185875af1925050503d806000811461153c576040519150601f19603f3d011682016040523d82523d6000602084013e611541565b606091505b505080915050806115895760405162461bcd60e51b81526020600482015260126024820152712a3930b739b332b91019903330b4b632b21760711b604482015260640161096b565b600960038154811061159d5761159d6136c1565b60009182526020822001546040516001600160a01b039091169184919081818185875af1925050503d80600081146115f1576040519150601f19603f3d011682016040523d82523d6000602084013e6115f6565b606091505b5050809150508061163e5760405162461bcd60e51b81526020600482015260126024820152712a3930b739b332b9101a103330b4b632b21760711b604482015260640161096b565b50506001600555505050565b6004546001600160a01b031633146116745760405162461bcd60e51b815260040161096b906134cf565b600880546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6004546001600160a01b031633146116cc5760405162461bcd60e51b815260040161096b906134cf565b610d2b60128383612abe565b601281815481106116e857600080fd5b600091825260209091200154905081565b6004546001600160a01b031633146117235760405162461bcd60e51b815260040161096b906134cf565b610d2b600a8383612af9565b6004546001600160a01b031633146117595760405162461bcd60e51b815260040161096b906134cf565b600b805460ff9092166101000261ff0019909216919091179055565b606081518351146117da5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161096b565b600083516001600160401b038111156117f5576117f56136d7565b60405190808252806020026020018201604052801561181e578160200160208202803683370190505b50905060005b845181101561189657611869858281518110611842576118426136c1565b602002602001015185838151811061185c5761185c6136c1565b6020026020010151610903565b82828151811061187b5761187b6136c1565b602090810291909101015261188f81613666565b9050611824565b509392505050565b600a81815481106118ae57600080fd5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b6004546001600160a01b031633146118fc5760405162461bcd60e51b815260040161096b906134cf565b61190660006122f5565b565b60178054610a39906135ff565b6004546001600160a01b0316331461193f5760405162461bcd60e51b815260040161096b906134cf565b61194881612347565b50565b6004546001600160a01b031633146119755760405162461bcd60e51b815260040161096b906134cf565b610d2b600c8383612af9565b610cb333838361235a565b600c81815481106118ae57600080fd5b6004546001600160a01b031633146119c65760405162461bcd60e51b815260040161096b906134cf565b610d2b60098383612b90565b6004546001600160a01b031633146119fc5760405162461bcd60e51b815260040161096b906134cf565b6015805460ff1916911515919091179055565b60155460ff1615611a325760405162461bcd60e51b815260040161096b90613504565b828282611a4133848484610dc7565b611aa05760405162461bcd60e51b815260206004820152602a60248201527f41206361727465697261207574696c697a616461206e616f2065737461206e616044820152691038393296b9b0b6329760b11b606482015260840161096b565b600e544210158015611ab45750600f544211155b611b155760405162461bcd60e51b815260206004820152602c60248201527f4a616e656c6120646520636f6d7072612070617261207072652d73616c65206560448201526b39ba30903332b1b430b2309760a11b606482015260840161096b565b600b543360009081526019602052604090205461010090910460ff1690611b3d908a9061356d565b1115611bb15760405162461bcd60e51b815260206004820152603860248201527f4d6178696d6f206465206d696e7420706f72206361727465697261206e61207060448201527f72652d73616c65206a6120666f69206573676f7461646f2e0000000000000000606482015260840161096b565b33600090815260196020526040812080548a9290611bd090849061356d565b90915550611be090508888611edf565b5050505050505050565b600d8181548110611bfa57600080fd5b9060005260206000209060049182820401919006600802915054906101000a90046001600160401b031681565b6001600160a01b038516331480611c435750611c438533610832565b611ca15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161096b565b610dc0858585858561243b565b6004546001600160a01b03163314611cd85760405162461bcd60e51b815260040161096b906134cf565b6001600160a01b038116611d3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096b565b611948816122f5565b606060028054611d55906135ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611d81906135ff565b8015611dce5780601f10611da357610100808354040283529160200191611dce565b820191906000526020600020905b815481529060010190602001808311611db157829003601f168201915b50505050509050919050565b606081611dfe5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e285780611e1281613666565b9150611e219050600a83613585565b9150611e02565b6000816001600160401b03811115611e4257611e426136d7565b6040519080825280601f01601f191660200182016040528015611e6c576020820181803683370190505b5090505b8415611ed757611e816001836135b8565b9150611e8e600a86613681565b611e9990603061356d565b60f81b818381518110611eae57611eae6136c1565b60200101906001600160f81b031916908160001a905350611ed0600a86613585565b9450611e70565b949350505050565b333214611f3f5760405162461bcd60e51b815260206004820152602860248201527f50726f6962696461207472616e7361636f6573206465206f7574726f7320636f6044820152676e747261746f732160c01b606482015260840161096b565b6000600c8281548110611f5457611f546136c1565b90600052602060002090602091828204019190069054906101000a900460ff1660ff169050600d8161ffff1681548110611f9057611f906136c1565b60009182526020909120600482040154611fbf916003166008026101000a90046001600160401b031684613599565b3410156120405760405162461bcd60e51b815260206004820152604360248201527f506167616d656e746f20696e636f727265746f2c2066756e646f7320656e766960448201527f61646f732073616f20696e737566696369656e746573207061726120636f6d7060648201526239309760e91b608482015260a40161096b565b600a8281548110612053576120536136c1565b600091825260208083208183040154858452600390915260409092205460ff601f9092166101000a909204169061208b90859061356d565b11156120ef5760405162461bcd60e51b815260206004820152602d60248201527f4d6178696d6f20737570706c79207061726120657374612061727465206a612060448201526c3337b49030ba34b733b4b2379760991b606482015260840161096b565b610d2b33838560405180602001604052806000815250612567565b815183511461216c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161096b565b6001600160a01b0384166121925760405162461bcd60e51b815260040161096b90613440565b336121a1818787878787612668565b60005b84518110156122875760008582815181106121c1576121c16136c1565b6020026020010151905060008583815181106121df576121df6136c1565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561222f5760405162461bcd60e51b815260040161096b90613485565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061226c90849061356d565b925050819055505050508061228090613666565b90506121a4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516122d79291906133b7565b60405180910390a46122ed818787878787612774565b505050505050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8051610cb3906002906020840190612be3565b816001600160a01b0316836001600160a01b031614156123ce5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161096b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166124615760405162461bcd60e51b815260040161096b90613440565b33612480818787612471886128e8565b61247a886128e8565b87612668565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156124c15760405162461bcd60e51b815260040161096b90613485565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906124fe90849061356d565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461255e828888888888612933565b50505050505050565b6001600160a01b0384166125c75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161096b565b336125d881600087612471886128e8565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061260890849061356d565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610dc081600087878787612933565b6001600160a01b0385166126ef5760005b83518110156126ed57828181518110612694576126946136c1565b6020026020010151600360008684815181106126b2576126b26136c1565b6020026020010151815260200190815260200160002060008282546126d7919061356d565b909155506126e6905081613666565b9050612679565b505b6001600160a01b0384166122ed5760005b835181101561255e5782818151811061271b5761271b6136c1565b602002602001015160036000868481518110612739576127396136c1565b60200260200101518152602001908152602001600020600082825461275e91906135b8565b9091555061276d905081613666565b9050612700565b6001600160a01b0384163b156122ed5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906127b89089908990889088908890600401613303565b602060405180830381600087803b1580156127d257600080fd5b505af1925050508015612802575060408051601f3d908101601f191682019092526127ff91810190613129565b60015b6128b85761280e6136ed565b806308c379a014156128485750612823613709565b8061282e575061284a565b8060405162461bcd60e51b815260040161096b91906133e5565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840161096b565b6001600160e01b0319811663bc197c8160e01b1461255e5760405162461bcd60e51b815260040161096b906133f8565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612922576129226136c1565b602090810291909101015292915050565b6001600160a01b0384163b156122ed5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906129779089908990889088908890600401613361565b602060405180830381600087803b15801561299157600080fd5b505af19250505080156129c1575060408051601f3d908101601f191682019092526129be91810190613129565b60015b6129cd5761280e6136ed565b6001600160e01b0319811663f23a6e6160e01b1461255e5760405162461bcd60e51b815260040161096b906133f8565b82805482825590600052602060002090600301600490048101928215612aae5791602002820160005b83821115612a795783356001600160401b031683826101000a8154816001600160401b0302191690836001600160401b031602179055509260200192600801602081600701049283019260010302612a26565b8015612aac5782816101000a8154906001600160401b030219169055600801602081600701049283019260010302612a79565b505b50612aba929150612c57565b5090565b828054828255906000526020600020908101928215612aae579160200282015b82811115612aae578235825591602001919060010190612ade565b82805482825590600052602060002090601f01602090048101928215612aae5791602002820160005b83821115612b6357833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302612b22565b8015612aac5782816101000a81549060ff0219169055600101602081600001049283019260010302612b63565b828054828255906000526020600020908101928215612aae579160200282015b82811115612aae5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612bb0565b828054612bef906135ff565b90600052602060002090601f016020900481019282612c115760008555612aae565b82601f10612c2a57805160ff1916838001178555612aae565b82800160010185558215612aae579182015b82811115612aae578251825591602001919060010190612c3c565b5b80821115612aba5760008155600101612c58565b60006001600160401b03831115612c8557612c856136d7565b604051612c9c601f8501601f19166020018261363a565b809150838152848484011115612cb157600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114612ce057600080fd5b919050565b60008083601f840112612cf757600080fd5b5081356001600160401b03811115612d0e57600080fd5b6020830191508360208260051b8501011115612d2957600080fd5b9250929050565b600082601f830112612d4157600080fd5b81356020612d4e8261354a565b604051612d5b828261363a565b8381528281019150858301600585901b87018401881015612d7b57600080fd5b60005b85811015612d9a57813584529284019290840190600101612d7e565b5090979650505050505050565b80358015158114612ce057600080fd5b600082601f830112612dc857600080fd5b612dd783833560208501612c6c565b9392505050565b803560ff81168114612ce057600080fd5b600060208284031215612e0157600080fd5b612dd782612cc9565b60008060408385031215612e1d57600080fd5b612e2683612cc9565b9150612e3460208401612cc9565b90509250929050565b600080600080600060a08688031215612e5557600080fd5b612e5e86612cc9565b9450612e6c60208701612cc9565b935060408601356001600160401b0380821115612e8857600080fd5b612e9489838a01612d30565b94506060880135915080821115612eaa57600080fd5b612eb689838a01612d30565b93506080880135915080821115612ecc57600080fd5b50612ed988828901612db7565b9150509295509295909350565b600080600080600060a08688031215612efe57600080fd5b612f0786612cc9565b9450612f1560208701612cc9565b9350604086013592506060860135915060808601356001600160401b03811115612f3e57600080fd5b612ed988828901612db7565b60008060408385031215612f5d57600080fd5b612f6683612cc9565b9150612e3460208401612da7565b60008060408385031215612f8757600080fd5b612f9083612cc9565b946020939093013593505050565b60008060008060808587031215612fb457600080fd5b612fbd85612cc9565b9350612fcb60208601612dde565b93969395505050506040820135916060013590565b60008060208385031215612ff357600080fd5b82356001600160401b0381111561300957600080fd5b61301585828601612ce5565b90969095509350505050565b6000806040838503121561303457600080fd5b82356001600160401b038082111561304b57600080fd5b818501915085601f83011261305f57600080fd5b8135602061306c8261354a565b604051613079828261363a565b8381528281019150858301600585901b870184018b101561309957600080fd5b600096505b848710156130c3576130af81612cc9565b83526001969096019591830191830161309e565b50965050860135925050808211156130da57600080fd5b506130e785828601612d30565b9150509250929050565b60006020828403121561310357600080fd5b612dd782612da7565b60006020828403121561311e57600080fd5b8135612dd781613792565b60006020828403121561313b57600080fd5b8151612dd781613792565b60006020828403121561315857600080fd5b81356001600160401b0381111561316e57600080fd5b8201601f8101841361317f57600080fd5b611ed784823560208401612c6c565b6000602082840312156131a057600080fd5b5035919050565b600080604083850312156131ba57600080fd5b50508035926020909101359150565b600080600080608085870312156131df57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561321357600080fd5b853594506020860135935061322a60408701612dde565b94979396509394606081013594506080013592915050565b60006020828403121561325457600080fd5b612dd782612dde565b600081518084526020808501945080840160005b8381101561328d57815187529582019590820190600101613271565b509495945050505050565b600081518084526132b08160208601602086016135cf565b601f01601f19169290920160200192915050565b600083516132d68184602088016135cf565b8351908301906132ea8183602088016135cf565b64173539b7b760d91b9101908152600501949350505050565b60006001600160a01b03808816835280871660208401525060a0604083015261332f60a083018661325d565b8281036060840152613341818661325d565b905082810360808401526133558185613298565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261339960a0830184613298565b979650505050505050565b602081526000612dd7602083018461325d565b6040815260006133ca604083018561325d565b82810360208401526133dc818561325d565b95945050505050565b602081526000612dd76020830184613298565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f436f6e747261746f2065737461207061757361646f2074656d706f726172696160408201526536b2b73a329760d11b606082015260800190565b60006001600160401b03821115613563576135636136d7565b5060051b60200190565b6000821982111561358057613580613695565b500190565b600082613594576135946136ab565b500490565b60008160001904831182151516156135b3576135b3613695565b500290565b6000828210156135ca576135ca613695565b500390565b60005b838110156135ea5781810151838201526020016135d2565b838111156135f9576000848401525b50505050565b600181811c9082168061361357607f821691505b6020821081141561363457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561365f5761365f6136d7565b6040525050565b600060001982141561367a5761367a613695565b5060010190565b600082613690576136906136ab565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156137065760046000803e5060005160e01c5b90565b600060443d10156137175790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561374657505050505090565b828501915081518181111561375e5750505050505090565b843d87010160208285010111156137785750505050505090565b6137876020828601018761363a565b509095945050505050565b6001600160e01b03198116811461194857600080fdfea26469706673582212202bd3a3469c7426f09abc40fc8b61f4dbd7be73bd16521f878a04f086d36edc6b64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000a65aae78edef916d4102ba7b5672068c0d35fbff00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f3535756e6974792e6d7970696e6174612e636c6f75642f697066732f516d654e4a5533426a574e74654c4d4766506d5a41626175517a4b6e6f666336687a39664c734e445a66357842792f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000f4d3d077c12934dfaadf7aced971c392e9c9bb5b0000000000000000000000004e3c4cb1c2ecc0005c5980a5c09ac5146529ccb2000000000000000000000000189dc876eae36ccc437321903f0fbb3105f64640000000000000000000000000ca9a636963ba3a2928dd93110bad5fce1f652a3b

-----Decoded View---------------
Arg [0] : _uri (string): https://55unity.mypinata.cloud/ipfs/QmeNJU3BjWNteLMGfPmZAbauQzKnofc6hz9fLsNDZf5xBy/
Arg [1] : _signerRole (address): 0xA65aae78EdEF916d4102BA7b5672068C0D35fbff
Arg [2] : _addresses (address[]): 0xf4D3d077C12934dfaAdF7AceD971c392e9C9bb5b,0x4E3c4cB1c2ecc0005C5980A5C09Ac5146529Ccb2,0x189dC876EAe36CCc437321903F0Fbb3105F64640,0xCa9A636963ba3A2928dD93110bAD5FCE1F652a3b

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 000000000000000000000000a65aae78edef916d4102ba7b5672068c0d35fbff
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000053
Arg [4] : 68747470733a2f2f3535756e6974792e6d7970696e6174612e636c6f75642f69
Arg [5] : 7066732f516d654e4a5533426a574e74654c4d4766506d5a41626175517a4b6e
Arg [6] : 6f666336687a39664c734e445a66357842792f00000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 000000000000000000000000f4d3d077c12934dfaadf7aced971c392e9c9bb5b
Arg [9] : 0000000000000000000000004e3c4cb1c2ecc0005c5980a5c09ac5146529ccb2
Arg [10] : 000000000000000000000000189dc876eae36ccc437321903f0fbb3105f64640
Arg [11] : 000000000000000000000000ca9a636963ba3a2928dd93110bad5fce1f652a3b


Deployed Bytecode Sourcemap

43629:7578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44405:46;;;;;;;;;;;;;;;;;;;28459:25:1;;;28447:2;28432:18;44405:46:0;;;;;;;;28260:231;;;;;;;;;;-1:-1:-1;28260:231:0;;;;;:::i;:::-;;:::i;27283:310::-;;;;;;;;;;-1:-1:-1;27283:310:0;;;;;:::i;:::-;;:::i;:::-;;;15759:14:1;;15752:22;15734:41;;15722:2;15707:18;27283:310:0;15594:187:1;47789:106:0;;;;;;;;;;-1:-1:-1;47789:106:0;;;;;:::i;:::-;;:::i;:::-;;44649:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;48896:226::-;;;;;;;;;;-1:-1:-1;48896:226:0;;;;;:::i;:::-;;:::i;43972:28::-;;;;;;;;;;-1:-1:-1;43972:28:0;;;;;;;;;;;;;;29125:4:1;29113:17;;;29095:36;;29083:2;29068:18;43972:28:0;28953:184:1;46134:463:0;;;;;;:::i;:::-;;:::i;47244:374::-;;;;;;;;;;-1:-1:-1;47244:374:0;;;;;:::i;:::-;;:::i;48295:103::-;;;;;;;;;;-1:-1:-1;48295:103:0;;;;;:::i;:::-;;:::i;30199:442::-;;;;;;;;;;-1:-1:-1;30199:442:0;;;;;:::i;:::-;;:::i;48559:303::-;;;;;;;;;;-1:-1:-1;48559:303:0;;;;;:::i;:::-;;:::i;44858:51::-;;;;;;;;;;-1:-1:-1;44858:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;49641:1563;;;;;;;;;;;;;:::i;49469:160::-;;;;;;;;;;-1:-1:-1;49469:160:0;;;;;:::i;:::-;;:::i;49235:105::-;;;;;;;;;;-1:-1:-1;49235:105:0;;;;;:::i;:::-;;:::i;44246:46::-;;;;;;;;;;;;;;;;44458:38;;;;;;;;;;-1:-1:-1;44458:38:0;;;;;:::i;:::-;;:::i;47903:124::-;;;;;;;;;;-1:-1:-1;47903:124:0;;;;;:::i;:::-;;:::i;47679:102::-;;;;;;;;;;-1:-1:-1;47679:102:0;;;;;:::i;:::-;;:::i;28657:524::-;;;;;;;;;;-1:-1:-1;28657:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42699:122::-;;;;;;;;;;-1:-1:-1;42699:122:0;;;;;:::i;:::-;42756:4;42577:16;;;:12;:16;;;;;;-1:-1:-1;;;42699:122:0;43867:62;;;;;;;;;;-1:-1:-1;43867:62:0;;;;;:::i;:::-;;:::i;44610:26::-;;;;;;;;;;-1:-1:-1;44610:26:0;;;;;;;;43731:25;;;;;;;;;;-1:-1:-1;43731:25:0;;;;-1:-1:-1;;;;;43731:25:0;;;;;;-1:-1:-1;;;;;13349:55:1;;;13331:74;;13319:2;13304:18;43731:25:0;13185:226:1;7489:103:0;;;;;;;;;;;;;:::i;44353:45::-;;;;;;;;;;;;;;;;6838:87;;;;;;;;;;-1:-1:-1;6911:6:0;;-1:-1:-1;;;;;6911:6:0;6838:87;;44687:28;;;;;;;;;;;;;:::i;49130:97::-;;;;;;;;;;-1:-1:-1;49130:97:0;;;;;:::i;:::-;;:::i;48406:99::-;;;;;;;;;;-1:-1:-1;48406:99:0;;;;;:::i;:::-;;:::i;29254:155::-;;;;;;;;;;-1:-1:-1;29254:155:0;;;;;:::i;:::-;;:::i;44046:49::-;;;;;;;;;;-1:-1:-1;44046:49:0;;;;;:::i;:::-;;:::i;49348:113::-;;;;;;;;;;-1:-1:-1;49348:113:0;;;;;:::i;:::-;;:::i;42488:::-;;;;;;;;;;-1:-1:-1;42488:113:0;;;;;:::i;:::-;42550:7;42577:16;;;:12;:16;;;;;;;42488:113;43763:25;;;;;;;;;;-1:-1:-1;43763:25:0;;;;-1:-1:-1;;;;;43763:25:0;;;48097:89;;;;;;;;;;-1:-1:-1;48097:89:0;;;;;:::i;:::-;;:::i;43936:29::-;;;;;;;;;;-1:-1:-1;43936:29:0;;;;;;;;45567:535;;;;;;:::i;:::-;;:::i;44102:87::-;;;;;;;;;;-1:-1:-1;44102:87:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;28910:31:1;;;28892:50;;28880:2;28865:18;44102:87:0;28748:200:1;29481:168:0;;;;;;;;;;-1:-1:-1;29481:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;29604:27:0;;;29580:4;29604:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;29481:168;29721:401;;;;;;;;;;-1:-1:-1;29721:401:0;;;;;:::i;:::-;;:::i;7747:201::-;;;;;;;;;;-1:-1:-1;7747:201:0;;;;;:::i;:::-;;:::i;43795:25::-;;;;;;;;;;-1:-1:-1;43795:25:0;;;;-1:-1:-1;;;;;43795:25:0;;;44805:46;;;;;;;;;;-1:-1:-1;44805:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;44299:47;;;;;;;;;;;;;;;;28260:231;28346:7;-1:-1:-1;;;;;28374:21:0;;28366:77;;;;-1:-1:-1;;;28366:77:0;;17873:2:1;28366:77:0;;;17855:21:1;17912:2;17892:18;;;17885:30;17951:34;17931:18;;;17924:62;-1:-1:-1;;;18002:18:1;;;17995:41;18053:19;;28366:77:0;;;;;;;;;-1:-1:-1;28461:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;28461:22:0;;;;;;;;;;;;28260:231::o;27283:310::-;27385:4;-1:-1:-1;;;;;;27422:41:0;;-1:-1:-1;;;27422:41:0;;:110;;-1:-1:-1;;;;;;;27480:52:0;;-1:-1:-1;;;27480:52:0;27422:110;:163;;;-1:-1:-1;;;;;;;;;;18700:40:0;;;27549:36;27402:183;27283:310;-1:-1:-1;;27283:310:0:o;47789:106::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;47861:11:::1;:26:::0;;-1:-1:-1;;47861:26:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;47789:106::o;44649:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48896:226::-;42756:4;42577:16;;;:12;:16;;;;;;48952:13;;48978:46;;;;-1:-1:-1;;;48978:46:0;;23478:2:1;48978:46:0;;;23460:21:1;23517:2;23497:18;;;23490:30;23556:24;23536:18;;;23529:52;23598:18;;48978:46:0;23276:346:1;48978:46:0;49066:14;49076:3;49066:9;:14::i;:::-;49082:21;49099:3;49082:16;:21::i;:::-;49049:64;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49035:79;;48896:226;;;:::o;46134:463::-;45226:6;;;;45225:7;45217:58;;;;-1:-1:-1;;;45217:58:0;;;;;;;:::i;:::-;46259:17:::1;;46240:15;:36;;:77;;;;;46299:18;;46280:15;:37;;46240:77;46232:137;;;::::0;-1:-1:-1;;;46232:137:0;;18285:2:1;46232:137:0::1;::::0;::::1;18267:21:1::0;18324:2;18304:18;;;18297:30;18363:34;18343:18;;;18336:62;-1:-1:-1;;;18414:18:1;;;18407:45;18469:19;;46232:137:0::1;18083:411:1::0;46232:137:0::1;46424:11;::::0;46400:10:::1;46424:11;46388:23:::0;;;:11:::1;:23;::::0;;;;;46424:11:::1;::::0;;::::1;::::0;46388:32:::1;::::0;46414:6;;46388:32:::1;:::i;:::-;:47;;46380:120;;;::::0;-1:-1:-1;;;46380:120:0;;17445:2:1;46380:120:0::1;::::0;::::1;17427:21:1::0;17484:2;17464:18;;;17457:30;17523:34;17503:18;;;17496:62;17594:29;17574:18;;;17567:57;17641:19;;46380:120:0::1;17243:423:1::0;46380:120:0::1;46523:10;46511:23;::::0;;;:11:::1;:23;::::0;;;;:33;;46538:6;;46511:23;:33:::1;::::0;46538:6;;46511:33:::1;:::i;:::-;::::0;;;-1:-1:-1;46565:24:0::1;::::0;-1:-1:-1;46575:6:0;46583:5;46565:9:::1;:24::i;:::-;46134:463:::0;;:::o;47244:374::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;47417:18:::1;:40:::0;;;;47468:19:::1;:42:::0;;;;47521:17:::1;:38:::0;47570:18:::1;:40:::0;47244:374::o;48295:103::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;48370:20:::1;:9;48382:8:::0;;48370:20:::1;:::i;:::-;;48295:103:::0;;:::o;30199:442::-;-1:-1:-1;;;;;30432:20:0;;5642:10;30432:20;;:60;;-1:-1:-1;30456:36:0;30473:4;5642:10;29481:168;:::i;30456:36::-;30410:160;;;;-1:-1:-1;;;30410:160:0;;21518:2:1;30410:160:0;;;21500:21:1;21557:2;21537:18;;;21530:30;21596:34;21576:18;;;21569:62;-1:-1:-1;;;21647:18:1;;;21640:48;21705:19;;30410:160:0;21316:414:1;30410:160:0;30581:52;30604:4;30610:2;30614:3;30619:7;30628:4;30581:22;:52::i;:::-;30199:442;;;;;:::o;48559:303::-;48700:28;;-1:-1:-1;;48717:4:0;11837:2:1;11833:15;;;11829:24;;48700:28:0;;;11817:37:1;11888:15;;;11884:24;11870:12;;;11863:46;48658:4:0;;;;11925:12:1;;48700:28:0;;;;;;;;;;;;48690:39;;;;;;48675:54;;48762:92;48835:4;48782:58;;;;;;;12832:66:1;12820:79;;12924:2;12915:12;;12908:28;;;;12961:2;12952:12;;12590:380;48782:58:0;;;;-1:-1:-1;;48782:58:0;;;;;;;;;48772:69;;48782:58;48772:69;;;;48762:92;;;;;;;;;16013:25:1;16086:4;16074:17;;16054:18;;;16047:45;16108:18;;;16101:34;;;16151:18;;;16144:34;;;15985:19;;48762:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48762:92:0;;-1:-1:-1;;48762:92:0;;48747:10;;-1:-1:-1;;;;;48747:107:0;;;:10;;:107;;48559:303;-1:-1:-1;;;;;;;48559:303:0:o;49641:1563::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;3936:1:::1;4534:7;;:19;;4526:63;;;::::0;-1:-1:-1;;;4526:63:0;;26925:2:1;4526:63:0::1;::::0;::::1;26907:21:1::0;26964:2;26944:18;;;26937:30;27003:33;26983:18;;;26976:61;27054:18;;4526:63:0::1;26723:355:1::0;4526:63:0::1;3936:1;4667:7;:18;;;;49704:15:::2;49753:7;49761:1;49753:10;;;;;;;;:::i;:::-;;;;;;;;;49746:3;49723:21;:26;;;;:::i;:::-;49722:41;;;;:::i;:::-;49704:59;;49774:15;49823:7;49831:1;49823:10;;;;;;;;:::i;:::-;;;;;;;;;49816:3;49793:21;:26;;;;:::i;:::-;49792:41;;;;:::i;:::-;49774:59;;49844:15;49893:7;49901:1;49893:10;;;;;;;;:::i;:::-;;;;;;;;;49886:3;49863:21;:26;;;;:::i;:::-;49862:41;;;;:::i;:::-;49844:59:::0;-1:-1:-1;49914:15:0::2;49933:11;49941:3;49933:7:::0;:11:::2;:::i;:::-;49932:18;::::0;49948:2:::2;49932:18;:::i;:::-;49914:36:::0;-1:-1:-1;49971:17:0::2;49914:36:::0;49971:7;:17:::2;:::i;:::-;50024:1;50029;42577:16:::0;:12;:16;;;;49961:27;;-1:-1:-1;;;;50012:41:0::2;;-1:-1:-1::0;50046:2:0::2;50052:1;42577:16:::0;:12;:16;;;;50034:19;;50012:41:::2;50009:723;;;50070:22;50144:3;50130:9;50140:1;50130:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;50130:12:0::2;-1:-1:-1::0;;;;;50097:45:0::2;50115:12;;50098:14;50110:1;42550:7:::0;42577:16;;;:12;:16;;;;;;;42488:113;50098:14:::2;:29;;;;:::i;:::-;50097:45;;;;:::i;:::-;50096:51;;;;:::i;:::-;50095:57;::::0;50151:1:::2;50095:57;:::i;:::-;50070:82;;50167:22;50241:3;50227:9;50237:1;50227:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;50227:12:0::2;-1:-1:-1::0;;;;;50194:45:0::2;50213:11;;50195:15;50207:2;42550:7:::0;42577:16;;;:12;:16;;;;;;;42488:113;50195:15:::2;:29;;;;:::i;:::-;50194:45;;;;:::i;:::-;50193:51;;;;:::i;:::-;50192:57;::::0;50248:1:::2;50192:57;:::i;:::-;50293:10;::::0;:42:::2;::::0;50167:82;;-1:-1:-1;50267:20:0::2;::::0;-1:-1:-1;;;;;50293:10:0;;::::2;::::0;50316:14;;50267:20;50293:42;50267:20;50293:42;50316:14;50293:10;:42:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50266:69;;;50358:15;50350:56;;;::::0;-1:-1:-1;;;50350:56:0;;24937:2:1;50350:56:0::2;::::0;::::2;24919:21:1::0;24976:2;24956:18;;;24949:30;25015;24995:18;;;24988:58;25063:18;;50350:56:0::2;24735:352:1::0;50350:56:0::2;50445:10;::::0;:42:::2;::::0;-1:-1:-1;;;;;50445:10:0;;::::2;::::0;50468:14;;50445:42:::2;::::0;;;50468:14;50445:10;:42:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50423:64;;;;;50510:15;50502:57;;;::::0;-1:-1:-1;;;50502:57:0;;22709:2:1;50502:57:0::2;::::0;::::2;22691:21:1::0;22748:2;22728:18;;;22721:30;22787:31;22767:18;;;22760:59;22836:18;;50502:57:0::2;22507:353:1::0;50502:57:0::2;50597:31;50614:14:::0;50597;:31:::2;:::i;:::-;50586:43;::::0;:7;:43:::2;:::i;:::-;42577:12:::0;:16;;;;50647:12:::2;:29:::0;50717:2:::2;42550:7:::0;42577:16;;;50691:11:::2;:29:::0;50576:53;-1:-1:-1;;;;50009:723:0::2;50753:12;50771:9;50781:1;50771:12;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;::::2;::::0;:37:::2;::::0;-1:-1:-1;;;;;50771:12:0;;::::2;::::0;50796:7;;50771:37;;:12;:37;50796:7;50771:12;:37:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50752:56;;;50827:7;50819:38;;;::::0;-1:-1:-1;;;50819:38:0;;24243:2:1;50819:38:0::2;::::0;::::2;24225:21:1::0;24282:2;24262:18;;;24255:30;-1:-1:-1;;;24301:18:1;;;24294:48;24359:18;;50819:38:0::2;24041:342:1::0;50819:38:0::2;50884:9;50894:1;50884:12;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;::::2;::::0;:37:::2;::::0;-1:-1:-1;;;;;50884:12:0;;::::2;::::0;50909:7;;50884:37;;:12;:37;50909:7;50884:12;:37:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50870:51;;;;;50940:7;50932:38;;;::::0;-1:-1:-1;;;50932:38:0;;20765:2:1;50932:38:0::2;::::0;::::2;20747:21:1::0;20804:2;20784:18;;;20777:30;-1:-1:-1;;;20823:18:1;;;20816:48;20881:18;;50932:38:0::2;20563:342:1::0;50932:38:0::2;50997:9;51007:1;50997:12;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;::::2;::::0;:37:::2;::::0;-1:-1:-1;;;;;50997:12:0;;::::2;::::0;51022:7;;50997:37;;:12;:37;51022:7;50997:12;:37:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50983:51;;;;;51053:7;51045:38;;;::::0;-1:-1:-1;;;51045:38:0;;24590:2:1;51045:38:0::2;::::0;::::2;24572:21:1::0;24629:2;24609:18;;;24602:30;-1:-1:-1;;;24648:18:1;;;24641:48;24706:18;;51045:38:0::2;24388:342:1::0;51045:38:0::2;51110:9;51120:1;51110:12;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;::::2;::::0;:37:::2;::::0;-1:-1:-1;;;;;51110:12:0;;::::2;::::0;51135:7;;51110:37;;:12;:37;51135:7;51110:12;:37:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51096:51;;;;;51166:7;51158:38;;;::::0;-1:-1:-1;;;51158:38:0;;27285:2:1;51158:38:0::2;::::0;::::2;27267:21:1::0;27324:2;27304:18;;;27297:30;-1:-1:-1;;;27343:18:1;;;27336:48;27401:18;;51158:38:0::2;27083:342:1::0;51158:38:0::2;-1:-1:-1::0;;3892:1:0::1;4846:7;:22:::0;-1:-1:-1;;;49641:1563:0:o;49469:160::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;49562:10:::1;:24:::0;;-1:-1:-1;;;;;49562:24:0;;::::1;-1:-1:-1::0;;;;;;49562:24:0;;::::1;;::::0;;;49597:10:::1;:24:::0;;;;;::::1;::::0;::::1;;::::0;;49469:160::o;49235:105::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;49314:18:::1;:7;49324:8:::0;;49314:18:::1;:::i;44458:38::-:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44458:38:0;:::o;47903:124::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;47989:30:::1;:13;48005:14:::0;;47989:30:::1;:::i;47679:102::-:0;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;47749:10:::1;:24:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;47749:24:0;;::::1;::::0;;;::::1;::::0;;47679:102::o;28657:524::-;28813:16;28874:3;:10;28855:8;:15;:29;28847:83;;;;-1:-1:-1;;;28847:83:0;;25704:2:1;28847:83:0;;;25686:21:1;25743:2;25723:18;;;25716:30;25782:34;25762:18;;;25755:62;-1:-1:-1;;;25833:18:1;;;25826:39;25882:19;;28847:83:0;25502:405:1;28847:83:0;28943:30;28990:8;:15;-1:-1:-1;;;;;28976:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28976:30:0;;28943:63;;29024:9;29019:122;29043:8;:15;29039:1;:19;29019:122;;;29099:30;29109:8;29118:1;29109:11;;;;;;;;:::i;:::-;;;;;;;29122:3;29126:1;29122:6;;;;;;;;:::i;:::-;;;;;;;29099:9;:30::i;:::-;29080:13;29094:1;29080:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;29060:3;;;:::i;:::-;;;29019:122;;;-1:-1:-1;29160:13:0;28657:524;-1:-1:-1;;;28657:524:0:o;43867:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7489:103::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;7554:30:::1;7581:1;7554:18;:30::i;:::-;7489:103::o:0;44687:28::-;;;;;;;:::i;49130:97::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;49198:21:::1;49212:6;49198:13;:21::i;:::-;49130:97:::0;:::o;48406:99::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;48481:16:::1;:6;48490:7:::0;;48481:16:::1;:::i;29254:155::-:0;29349:52;5642:10;29382:8;29392;29349:18;:52::i;44046:49::-;;;;;;;;;;;;49348:113;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;49431:22:::1;:9;49443:10:::0;;49431:22:::1;:::i;48097:89::-:0;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;48163:6:::1;:15:::0;;-1:-1:-1;;48163:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48097:89::o;45567:535::-;45226:6;;;;45225:7;45217:58;;;;-1:-1:-1;;;45217:58:0;;;;;;;:::i;:::-;45709:2:::1;45713;45717;45418:44;45439:10;45451:2;45455;45459;45418:20;:44::i;:::-;45410:99;;;::::0;-1:-1:-1;;;45410:99:0;;23067:2:1;45410:99:0::1;::::0;::::1;23049:21:1::0;23106:2;23086:18;;;23079:30;23145:34;23125:18;;;23118:62;-1:-1:-1;;;23196:18:1;;;23189:40;23246:19;;45410:99:0::1;22865:406:1::0;45410:99:0::1;45759:18:::2;;45740:15;:37;;:79;;;;;45800:19;;45781:15;:38;;45740:79;45732:136;;;::::0;-1:-1:-1;;;45732:136:0;;19943:2:1;45732:136:0::2;::::0;::::2;19925:21:1::0;19982:2;19962:18;;;19955:30;20021:34;20001:18;;;19994:62;-1:-1:-1;;;20072:18:1;;;20065:42;20124:19;;45732:136:0::2;19741:408:1::0;45732:136:0::2;45928:10;::::0;45904::::2;45887:28;::::0;;;:16:::2;:28;::::0;;;;;45928:10:::2;::::0;;::::2;;;::::0;45887:37:::2;::::0;45918:6;;45887:37:::2;:::i;:::-;:51;;45879:121;;;::::0;-1:-1:-1;;;45879:121:0;;19108:2:1;45879:121:0::2;::::0;::::2;19090:21:1::0;19147:2;19127:18;;;19120:30;19186:34;19166:18;;;19159:62;19257:26;19237:18;;;19230:54;19301:19;;45879:121:0::2;18906:420:1::0;45879:121:0::2;46028:10;46011:28;::::0;;;:16:::2;:28;::::0;;;;:38;;46043:6;;46011:28;:38:::2;::::0;46043:6;;46011:38:::2;:::i;:::-;::::0;;;-1:-1:-1;46070:24:0::2;::::0;-1:-1:-1;46080:6:0;46088:5;46070:9:::2;:24::i;:::-;45286:1:::1;;;45567:535:::0;;;;;:::o;44102:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44102:87:0;;:::o;29721:401::-;-1:-1:-1;;;;;29929:20:0;;5642:10;29929:20;;:60;;-1:-1:-1;29953:36:0;29970:4;5642:10;29481:168;:::i;29953:36::-;29907:151;;;;-1:-1:-1;;;29907:151:0;;19533:2:1;29907:151:0;;;19515:21:1;19572:2;19552:18;;;19545:30;19611:34;19591:18;;;19584:62;-1:-1:-1;;;19662:18:1;;;19655:39;19711:19;;29907:151:0;19331:405:1;29907:151:0;30069:45;30087:4;30093:2;30097;30101:6;30109:4;30069:17;:45::i;7747:201::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7836:22:0;::::1;7828:73;;;::::0;-1:-1:-1;;;7828:73:0;;18701:2:1;7828:73:0::1;::::0;::::1;18683:21:1::0;18740:2;18720:18;;;18713:30;18779:34;18759:18;;;18752:62;-1:-1:-1;;;18830:18:1;;;18823:36;18876:19;;7828:73:0::1;18499:402:1::0;7828:73:0::1;7912:28;7931:8;7912:18;:28::i;28004:105::-:0;28064:13;28097:4;28090:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28004:105;;;:::o;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;-1:-1:-1;;;;;867:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;;1073:6;365:723;-1:-1:-1;;;;365:723:0:o;46683:490::-;46760:10;46774:9;46760:23;46752:76;;;;-1:-1:-1;;;46752:76:0;;20356:2:1;46752:76:0;;;20338:21:1;20395:2;20375:18;;;20368:30;20434:34;20414:18;;;20407:62;-1:-1:-1;;;20485:18:1;;;20478:38;20533:19;;46752:76:0;20154:404:1;46752:76:0;46839:12;46854:6;46861:5;46854:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;46839:28;;;;46908:9;46918:5;46908:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;46899:25;;46908:16;;;;;;;;-1:-1:-1;;;;;46908:16:0;46899:6;:25;:::i;:::-;46886:9;:38;;46878:118;;;;-1:-1:-1;;;46878:118:0;;27632:2:1;46878:118:0;;;27614:21:1;27671:2;27651:18;;;27644:30;27710:34;27690:18;;;27683:62;27781:34;27761:18;;;27754:62;-1:-1:-1;;;27832:19:1;;;27825:34;27876:19;;46878:118:0;27430:471:1;46878:118:0;47046:13;47060:5;47046:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;42577:16;;;:12;:16;;;;;;;;47046:20;;;;;;;;;;;;47015:27;;47036:6;;47015:27;:::i;:::-;:51;;47007:109;;;;-1:-1:-1;;;47007:109:0;;23829:2:1;47007:109:0;;;23811:21:1;23868:2;23848:18;;;23841:30;23907:34;23887:18;;;23880:62;-1:-1:-1;;;23958:18:1;;;23951:43;24011:19;;47007:109:0;23627:409:1;47007:109:0;47129:36;47135:10;47147:5;47154:6;47129:36;;;;;;;;;;;;:5;:36::i;32283:1074::-;32510:7;:14;32496:3;:10;:28;32488:81;;;;-1:-1:-1;;;32488:81:0;;26114:2:1;32488:81:0;;;26096:21:1;26153:2;26133:18;;;26126:30;26192:34;26172:18;;;26165:62;-1:-1:-1;;;26243:18:1;;;26236:38;26291:19;;32488:81:0;25912:404:1;32488:81:0;-1:-1:-1;;;;;32588:16:0;;32580:66;;;;-1:-1:-1;;;32580:66:0;;;;;;;:::i;:::-;5642:10;32703:60;5642:10;32734:4;32740:2;32744:3;32749:7;32758:4;32703:20;:60::i;:::-;32781:9;32776:421;32800:3;:10;32796:1;:14;32776:421;;;32832:10;32845:3;32849:1;32845:6;;;;;;;;:::i;:::-;;;;;;;32832:19;;32866:14;32883:7;32891:1;32883:10;;;;;;;;:::i;:::-;;;;;;;;;;;;32910:19;32932:13;;;;;;;;;;-1:-1:-1;;;;;32932:19:0;;;;;;;;;;;;32883:10;;-1:-1:-1;32974:21:0;;;;32966:76;;;;-1:-1:-1;;;32966:76:0;;;;;;;:::i;:::-;33086:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33086:19:0;;;;;;;;;;33108:20;;;33086:42;;33158:17;;;;;;;:27;;33108:20;;33086:9;33158:27;;33108:20;;33158:27;:::i;:::-;;;;;;;;32817:380;;;32812:3;;;;:::i;:::-;;;32776:421;;;;33244:2;-1:-1:-1;;;;;33214:47:0;33238:4;-1:-1:-1;;;;;33214:47:0;33228:8;-1:-1:-1;;;;;33214:47:0;;33248:3;33253:7;33214:47;;;;;;;:::i;:::-;;;;;;;;33274:75;33310:8;33320:4;33326:2;33330:3;33335:7;33344:4;33274:35;:75::i;:::-;32477:880;32283:1074;;;;;:::o;8108:191::-;8201:6;;;-1:-1:-1;;;;;8218:17:0;;;-1:-1:-1;;;;;;8218:17:0;;;;;;;8251:40;;8201:6;;;8218:17;8201:6;;8251:40;;8182:16;;8251:40;8171:128;8108:191;:::o;34201:88::-;34268:13;;;;:4;;:13;;;;;:::i;38469:331::-;38624:8;-1:-1:-1;;;;;38615:17:0;:5;-1:-1:-1;;;;;38615:17:0;;;38607:71;;;;-1:-1:-1;;;38607:71:0;;25294:2:1;38607:71:0;;;25276:21:1;25333:2;25313:18;;;25306:30;25372:34;25352:18;;;25345:62;-1:-1:-1;;;25423:18:1;;;25416:39;25472:19;;38607:71:0;25092:405:1;38607:71:0;-1:-1:-1;;;;;38689:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;38689:46:0;;;;;;;;;;38751:41;;15734::1;;;38751::0;;15707:18:1;38751:41:0;;;;;;;38469:331;;;:::o;31105:820::-;-1:-1:-1;;;;;31293:16:0;;31285:66;;;;-1:-1:-1;;;31285:66:0;;;;;;;:::i;:::-;5642:10;31408:96;5642:10;31439:4;31445:2;31449:21;31467:2;31449:17;:21::i;:::-;31472:25;31490:6;31472:17;:25::i;:::-;31499:4;31408:20;:96::i;:::-;31517:19;31539:13;;;;;;;;;;;-1:-1:-1;;;;;31539:19:0;;;;;;;;;;31577:21;;;;31569:76;;;;-1:-1:-1;;;31569:76:0;;;;;;;:::i;:::-;31681:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31681:19:0;;;;;;;;;;31703:20;;;31681:42;;31745:17;;;;;;;:27;;31703:20;;31681:9;31745:27;;31703:20;;31745:27;:::i;:::-;;;;-1:-1:-1;;31790:46:0;;;28669:25:1;;;28725:2;28710:18;;28703:34;;;-1:-1:-1;;;;;31790:46:0;;;;;;;;;;;;;;28642:18:1;31790:46:0;;;;;;;31849:68;31880:8;31890:4;31896:2;31900;31904:6;31912:4;31849:30;:68::i;:::-;31274:651;;31105:820;;;;;:::o;34675:569::-;-1:-1:-1;;;;;34828:16:0;;34820:62;;;;-1:-1:-1;;;34820:62:0;;26523:2:1;34820:62:0;;;26505:21:1;26562:2;26542:18;;;26535:30;26601:34;26581:18;;;26574:62;-1:-1:-1;;;26652:18:1;;;26645:31;26693:19;;34820:62:0;26321:397:1;34820:62:0;5642:10;34939:102;5642:10;34895:16;34982:2;34986:21;35004:2;34986:17;:21::i;34939:102::-;35054:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35054:17:0;;;;;;;;;:27;;35075:6;;35054:9;:27;;35075:6;;35054:27;:::i;:::-;;;;-1:-1:-1;;35097:52:0;;;28669:25:1;;;28725:2;28710:18;;28703:34;;;-1:-1:-1;;;;;35097:52:0;;;;35130:1;;35097:52;;;;;;28642:18:1;35097:52:0;;;;;;;35162:74;35193:8;35211:1;35215:2;35219;35223:6;35231:4;35162:30;:74::i;42896:655::-;-1:-1:-1;;;;;43218:18:0;;43214:160;;43258:9;43253:110;43277:3;:10;43273:1;:14;43253:110;;;43337:7;43345:1;43337:10;;;;;;;;:::i;:::-;;;;;;;43313:12;:20;43326:3;43330:1;43326:6;;;;;;;;:::i;:::-;;;;;;;43313:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;43289:3:0;;-1:-1:-1;43289:3:0;;:::i;:::-;;;43253:110;;;;43214:160;-1:-1:-1;;;;;43390:16:0;;43386:158;;43428:9;43423:110;43447:3;:10;43443:1;:14;43423:110;;;43507:7;43515:1;43507:10;;;;;;;;:::i;:::-;;;;;;;43483:12;:20;43496:3;43500:1;43496:6;;;;;;;;:::i;:::-;;;;;;;43483:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;43459:3:0;;-1:-1:-1;43459:3:0;;:::i;:::-;;;43423:110;;40737:813;-1:-1:-1;;;;;40977:13:0;;9834:19;:23;40973:570;;41013:79;;-1:-1:-1;;;41013:79:0;;-1:-1:-1;;;;;41013:43:0;;;;;:79;;41057:8;;41067:4;;41073:3;;41078:7;;41087:4;;41013:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41013:79:0;;;;;;;;-1:-1:-1;;41013:79:0;;;;;;;;;;;;:::i;:::-;;;41009:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41405:6;41398:14;;-1:-1:-1;;;41398:14:0;;;;;;;;:::i;41009:523::-;;;41454:62;;-1:-1:-1;;;41454:62:0;;16615:2:1;41454:62:0;;;16597:21:1;16654:2;16634:18;;;16627:30;16693:34;16673:18;;;16666:62;16764:22;16744:18;;;16737:50;16804:19;;41454:62:0;16413:416:1;41009:523:0;-1:-1:-1;;;;;;41174:60:0;;-1:-1:-1;;;41174:60:0;41170:159;;41259:50;;-1:-1:-1;;;41259:50:0;;;;;;;:::i;41558:198::-;41678:16;;;41692:1;41678:16;;;;;;;;;41624;;41653:22;;41678:16;;;;;;;;;;;;-1:-1:-1;41678:16:0;41653:41;;41716:7;41705:5;41711:1;41705:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;41743:5;41558:198;-1:-1:-1;;41558:198:0:o;39985:744::-;-1:-1:-1;;;;;40200:13:0;;9834:19;:23;40196:526;;40236:72;;-1:-1:-1;;;40236:72:0;;-1:-1:-1;;;;;40236:38:0;;;;;:72;;40275:8;;40285:4;;40291:2;;40295:6;;40303:4;;40236:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40236:72:0;;;;;;;;-1:-1:-1;;40236:72:0;;;;;;;;;;;;:::i;:::-;;;40232:479;;;;:::i;:::-;-1:-1:-1;;;;;;40358:55:0;;-1:-1:-1;;;40358:55:0;40354:154;;40438:50;;-1:-1:-1;;;40438:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;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:45;;;369:1;366;359:12;328:45;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;;14:468;;;;;:::o;487:196::-;555:20;;-1:-1:-1;;;;;604:54:1;;594:65;;584:93;;673:1;670;663:12;584:93;487:196;;;:::o;688:367::-;751:8;761:6;815:3;808:4;800:6;796:17;792:27;782:55;;833:1;830;823:12;782:55;-1:-1:-1;856:20:1;;-1:-1:-1;;;;;888:30:1;;885:50;;;931:1;928;921:12;885:50;968:4;960:6;956:17;944:29;;1028:3;1021:4;1011:6;1008:1;1004:14;996:6;992:27;988:38;985:47;982:67;;;1045:1;1042;1035:12;982:67;688:367;;;;;:::o;1060:735::-;1114:5;1167:3;1160:4;1152:6;1148:17;1144:27;1134:55;;1185:1;1182;1175:12;1134:55;1221:6;1208:20;1247:4;1270:43;1310:2;1270:43;:::i;:::-;1342:2;1336:9;1354:31;1382:2;1374:6;1354:31;:::i;:::-;1420:18;;;1454:15;;;;-1:-1:-1;1489:15:1;;;1539:1;1535:10;;;1523:23;;1519:32;;1516:41;-1:-1:-1;1513:61:1;;;1570:1;1567;1560:12;1513:61;1592:1;1602:163;1616:2;1613:1;1610:9;1602:163;;;1673:17;;1661:30;;1711:12;;;;1743;;;;1634:1;1627:9;1602:163;;;-1:-1:-1;1783:6:1;;1060:735;-1:-1:-1;;;;;;;1060:735:1:o;1800:160::-;1865:20;;1921:13;;1914:21;1904:32;;1894:60;;1950:1;1947;1940:12;1965:220;2007:5;2060:3;2053:4;2045:6;2041:17;2037:27;2027:55;;2078:1;2075;2068:12;2027:55;2100:79;2175:3;2166:6;2153:20;2146:4;2138:6;2134:17;2100:79;:::i;:::-;2091:88;1965:220;-1:-1:-1;;;1965:220:1:o;2190:156::-;2256:20;;2316:4;2305:16;;2295:27;;2285:55;;2336:1;2333;2326:12;2351:186;2410:6;2463:2;2451:9;2442:7;2438:23;2434:32;2431:52;;;2479:1;2476;2469:12;2431:52;2502:29;2521:9;2502:29;:::i;2542:260::-;2610:6;2618;2671:2;2659:9;2650:7;2646:23;2642:32;2639:52;;;2687:1;2684;2677:12;2639:52;2710:29;2729:9;2710:29;:::i;:::-;2700:39;;2758:38;2792:2;2781:9;2777:18;2758:38;:::i;:::-;2748:48;;2542:260;;;;;:::o;2807:943::-;2961:6;2969;2977;2985;2993;3046:3;3034:9;3025:7;3021:23;3017:33;3014:53;;;3063:1;3060;3053:12;3014:53;3086:29;3105:9;3086:29;:::i;:::-;3076:39;;3134:38;3168:2;3157:9;3153:18;3134:38;:::i;:::-;3124:48;;3223:2;3212:9;3208:18;3195:32;-1:-1:-1;;;;;3287:2:1;3279:6;3276:14;3273:34;;;3303:1;3300;3293:12;3273:34;3326:61;3379:7;3370:6;3359:9;3355:22;3326:61;:::i;:::-;3316:71;;3440:2;3429:9;3425:18;3412:32;3396:48;;3469:2;3459:8;3456:16;3453:36;;;3485:1;3482;3475:12;3453:36;3508:63;3563:7;3552:8;3541:9;3537:24;3508:63;:::i;:::-;3498:73;;3624:3;3613:9;3609:19;3596:33;3580:49;;3654:2;3644:8;3641:16;3638:36;;;3670:1;3667;3660:12;3638:36;;3693:51;3736:7;3725:8;3714:9;3710:24;3693:51;:::i;:::-;3683:61;;;2807:943;;;;;;;;:::o;3755:606::-;3859:6;3867;3875;3883;3891;3944:3;3932:9;3923:7;3919:23;3915:33;3912:53;;;3961:1;3958;3951:12;3912:53;3984:29;4003:9;3984:29;:::i;:::-;3974:39;;4032:38;4066:2;4055:9;4051:18;4032:38;:::i;:::-;4022:48;;4117:2;4106:9;4102:18;4089:32;4079:42;;4168:2;4157:9;4153:18;4140:32;4130:42;;4223:3;4212:9;4208:19;4195:33;-1:-1:-1;;;;;4243:6:1;4240:30;4237:50;;;4283:1;4280;4273:12;4237:50;4306:49;4347:7;4338:6;4327:9;4323:22;4306:49;:::i;4366:254::-;4431:6;4439;4492:2;4480:9;4471:7;4467:23;4463:32;4460:52;;;4508:1;4505;4498:12;4460:52;4531:29;4550:9;4531:29;:::i;:::-;4521:39;;4579:35;4610:2;4599:9;4595:18;4579:35;:::i;4625:254::-;4693:6;4701;4754:2;4742:9;4733:7;4729:23;4725:32;4722:52;;;4770:1;4767;4760:12;4722:52;4793:29;4812:9;4793:29;:::i;:::-;4783:39;4869:2;4854:18;;;;4841:32;;-1:-1:-1;;;4625:254:1:o;4884:393::-;4968:6;4976;4984;4992;5045:3;5033:9;5024:7;5020:23;5016:33;5013:53;;;5062:1;5059;5052:12;5013:53;5085:29;5104:9;5085:29;:::i;:::-;5075:39;;5133:36;5165:2;5154:9;5150:18;5133:36;:::i;:::-;4884:393;;5123:46;;-1:-1:-1;;;;5216:2:1;5201:18;;5188:32;;5267:2;5252:18;5239:32;;4884:393::o;5282:437::-;5368:6;5376;5429:2;5417:9;5408:7;5404:23;5400:32;5397:52;;;5445:1;5442;5435:12;5397:52;5485:9;5472:23;-1:-1:-1;;;;;5510:6:1;5507:30;5504:50;;;5550:1;5547;5540:12;5504:50;5589:70;5651:7;5642:6;5631:9;5627:22;5589:70;:::i;:::-;5678:8;;5563:96;;-1:-1:-1;5282:437:1;-1:-1:-1;;;;5282:437:1:o;5724:1219::-;5842:6;5850;5903:2;5891:9;5882:7;5878:23;5874:32;5871:52;;;5919:1;5916;5909:12;5871:52;5959:9;5946:23;-1:-1:-1;;;;;6029:2:1;6021:6;6018:14;6015:34;;;6045:1;6042;6035:12;6015:34;6083:6;6072:9;6068:22;6058:32;;6128:7;6121:4;6117:2;6113:13;6109:27;6099:55;;6150:1;6147;6140:12;6099:55;6186:2;6173:16;6208:4;6231:43;6271:2;6231:43;:::i;:::-;6303:2;6297:9;6315:31;6343:2;6335:6;6315:31;:::i;:::-;6381:18;;;6415:15;;;;-1:-1:-1;6450:11:1;;;6492:1;6488:10;;;6480:19;;6476:28;;6473:41;-1:-1:-1;6470:61:1;;;6527:1;6524;6517:12;6470:61;6549:1;6540:10;;6559:169;6573:2;6570:1;6567:9;6559:169;;;6630:23;6649:3;6630:23;:::i;:::-;6618:36;;6591:1;6584:9;;;;;6674:12;;;;6706;;6559:169;;;-1:-1:-1;6747:6:1;-1:-1:-1;;6791:18:1;;6778:32;;-1:-1:-1;;6822:16:1;;;6819:36;;;6851:1;6848;6841:12;6819:36;;6874:63;6929:7;6918:8;6907:9;6903:24;6874:63;:::i;:::-;6864:73;;;5724:1219;;;;;:::o;8271:180::-;8327:6;8380:2;8368:9;8359:7;8355:23;8351:32;8348:52;;;8396:1;8393;8386:12;8348:52;8419:26;8435:9;8419:26;:::i;8456:245::-;8514:6;8567:2;8555:9;8546:7;8542:23;8538:32;8535:52;;;8583:1;8580;8573:12;8535:52;8622:9;8609:23;8641:30;8665:5;8641:30;:::i;8706:249::-;8775:6;8828:2;8816:9;8807:7;8803:23;8799:32;8796:52;;;8844:1;8841;8834:12;8796:52;8876:9;8870:16;8895:30;8919:5;8895:30;:::i;8960:450::-;9029:6;9082:2;9070:9;9061:7;9057:23;9053:32;9050:52;;;9098:1;9095;9088:12;9050:52;9138:9;9125:23;-1:-1:-1;;;;;9163:6:1;9160:30;9157:50;;;9203:1;9200;9193:12;9157:50;9226:22;;9279:4;9271:13;;9267:27;-1:-1:-1;9257:55:1;;9308:1;9305;9298:12;9257:55;9331:73;9396:7;9391:2;9378:16;9373:2;9369;9365:11;9331:73;:::i;9415:180::-;9474:6;9527:2;9515:9;9506:7;9502:23;9498:32;9495:52;;;9543:1;9540;9533:12;9495:52;-1:-1:-1;9566:23:1;;9415:180;-1:-1:-1;9415:180:1:o;9600:248::-;9668:6;9676;9729:2;9717:9;9708:7;9704:23;9700:32;9697:52;;;9745:1;9742;9735:12;9697:52;-1:-1:-1;;9768:23:1;;;9838:2;9823:18;;;9810:32;;-1:-1:-1;9600:248:1:o;9853:385::-;9939:6;9947;9955;9963;10016:3;10004:9;9995:7;9991:23;9987:33;9984:53;;;10033:1;10030;10023:12;9984:53;-1:-1:-1;;10056:23:1;;;10126:2;10111:18;;10098:32;;-1:-1:-1;10177:2:1;10162:18;;10149:32;;10228:2;10213:18;10200:32;;-1:-1:-1;9853:385:1;-1:-1:-1;9853:385:1:o;10243:456::-;10336:6;10344;10352;10360;10368;10421:3;10409:9;10400:7;10396:23;10392:33;10389:53;;;10438:1;10435;10428:12;10389:53;10474:9;10461:23;10451:33;;10531:2;10520:9;10516:18;10503:32;10493:42;;10554:36;10586:2;10575:9;10571:18;10554:36;:::i;:::-;10243:456;;;;-1:-1:-1;10544:46:1;;10637:2;10622:18;;10609:32;;-1:-1:-1;10688:3:1;10673:19;10660:33;;10243:456;-1:-1:-1;;10243:456:1:o;10704:182::-;10761:6;10814:2;10802:9;10793:7;10789:23;10785:32;10782:52;;;10830:1;10827;10820:12;10782:52;10853:27;10870:9;10853:27;:::i;10891:435::-;10944:3;10982:5;10976:12;11009:6;11004:3;10997:19;11035:4;11064:2;11059:3;11055:12;11048:19;;11101:2;11094:5;11090:14;11122:1;11132:169;11146:6;11143:1;11140:13;11132:169;;;11207:13;;11195:26;;11241:12;;;;11276:15;;;;11168:1;11161:9;11132:169;;;-1:-1:-1;11317:3:1;;10891:435;-1:-1:-1;;;;;10891:435:1:o;11331:257::-;11372:3;11410:5;11404:12;11437:6;11432:3;11425:19;11453:63;11509:6;11502:4;11497:3;11493:14;11486:4;11479:5;11475:16;11453:63;:::i;:::-;11570:2;11549:15;-1:-1:-1;;11545:29:1;11536:39;;;;11577:4;11532:50;;11331:257;-1:-1:-1;;11331:257:1:o;11948:637::-;12228:3;12266:6;12260:13;12282:53;12328:6;12323:3;12316:4;12308:6;12304:17;12282:53;:::i;:::-;12398:13;;12357:16;;;;12420:57;12398:13;12357:16;12454:4;12442:17;;12420:57;:::i;:::-;-1:-1:-1;;;12499:20:1;;12528:22;;;12577:1;12566:13;;11948:637;-1:-1:-1;;;;11948:637:1:o;13416:849::-;13738:4;-1:-1:-1;;;;;13848:2:1;13840:6;13836:15;13825:9;13818:34;13900:2;13892:6;13888:15;13883:2;13872:9;13868:18;13861:43;;13940:3;13935:2;13924:9;13920:18;13913:31;13967:57;14019:3;14008:9;14004:19;13996:6;13967:57;:::i;:::-;14072:9;14064:6;14060:22;14055:2;14044:9;14040:18;14033:50;14106:44;14143:6;14135;14106:44;:::i;:::-;14092:58;;14199:9;14191:6;14187:22;14181:3;14170:9;14166:19;14159:51;14227:32;14252:6;14244;14227:32;:::i;:::-;14219:40;13416:849;-1:-1:-1;;;;;;;;13416:849:1:o;14270:583::-;14492:4;-1:-1:-1;;;;;14602:2:1;14594:6;14590:15;14579:9;14572:34;14654:2;14646:6;14642:15;14637:2;14626:9;14622:18;14615:43;;14694:6;14689:2;14678:9;14674:18;14667:34;14737:6;14732:2;14721:9;14717:18;14710:34;14781:3;14775;14764:9;14760:19;14753:32;14802:45;14842:3;14831:9;14827:19;14819:6;14802:45;:::i;:::-;14794:53;14270:583;-1:-1:-1;;;;;;;14270:583:1:o;14858:261::-;15037:2;15026:9;15019:21;15000:4;15057:56;15109:2;15098:9;15094:18;15086:6;15057:56;:::i;15124:465::-;15381:2;15370:9;15363:21;15344:4;15407:56;15459:2;15448:9;15444:18;15436:6;15407:56;:::i;:::-;15511:9;15503:6;15499:22;15494:2;15483:9;15479:18;15472:50;15539:44;15576:6;15568;15539:44;:::i;:::-;15531:52;15124:465;-1:-1:-1;;;;;15124:465:1:o;16189:219::-;16338:2;16327:9;16320:21;16301:4;16358:44;16398:2;16387:9;16383:18;16375:6;16358:44;:::i;16834:404::-;17036:2;17018:21;;;17075:2;17055:18;;;17048:30;17114:34;17109:2;17094:18;;17087:62;-1:-1:-1;;;17180:2:1;17165:18;;17158:38;17228:3;17213:19;;16834:404::o;20910:401::-;21112:2;21094:21;;;21151:2;21131:18;;;21124:30;21190:34;21185:2;21170:18;;21163:62;-1:-1:-1;;;21256:2:1;21241:18;;21234:35;21301:3;21286:19;;20910:401::o;21735:406::-;21937:2;21919:21;;;21976:2;21956:18;;;21949:30;22015:34;22010:2;21995:18;;21988:62;-1:-1:-1;;;22081:2:1;22066:18;;22059:40;22131:3;22116:19;;21735:406::o;22146:356::-;22348:2;22330:21;;;22367:18;;;22360:30;22426:34;22421:2;22406:18;;22399:62;22493:2;22478:18;;22146:356::o;27906:402::-;28108:2;28090:21;;;28147:2;28127:18;;;28120:30;28186:34;28181:2;28166:18;;28159:62;-1:-1:-1;;;28252:2:1;28237:18;;28230:36;28298:3;28283:19;;27906:402::o;29142:183::-;29202:4;-1:-1:-1;;;;;29227:6:1;29224:30;29221:56;;;29257:18;;:::i;:::-;-1:-1:-1;29302:1:1;29298:14;29314:4;29294:25;;29142:183::o;29330:128::-;29370:3;29401:1;29397:6;29394:1;29391:13;29388:39;;;29407:18;;:::i;:::-;-1:-1:-1;29443:9:1;;29330:128::o;29463:120::-;29503:1;29529;29519:35;;29534:18;;:::i;:::-;-1:-1:-1;29568:9:1;;29463:120::o;29588:168::-;29628:7;29694:1;29690;29686:6;29682:14;29679:1;29676:21;29671:1;29664:9;29657:17;29653:45;29650:71;;;29701:18;;:::i;:::-;-1:-1:-1;29741:9:1;;29588:168::o;29761:125::-;29801:4;29829:1;29826;29823:8;29820:34;;;29834:18;;:::i;:::-;-1:-1:-1;29871:9:1;;29761:125::o;29891:258::-;29963:1;29973:113;29987:6;29984:1;29981:13;29973:113;;;30063:11;;;30057:18;30044:11;;;30037:39;30009:2;30002:10;29973:113;;;30104:6;30101:1;30098:13;30095:48;;;30139:1;30130:6;30125:3;30121:16;30114:27;30095:48;;29891:258;;;:::o;30154:380::-;30233:1;30229:12;;;;30276;;;30297:61;;30351:4;30343:6;30339:17;30329:27;;30297:61;30404:2;30396:6;30393:14;30373:18;30370:38;30367:161;;;30450:10;30445:3;30441:20;30438:1;30431:31;30485:4;30482:1;30475:15;30513:4;30510:1;30503:15;30367:161;;30154:380;;;:::o;30539:249::-;30649:2;30630:13;;-1:-1:-1;;30626:27:1;30614:40;;-1:-1:-1;;;;;30669:34:1;;30705:22;;;30666:62;30663:88;;;30731:18;;:::i;:::-;30767:2;30760:22;-1:-1:-1;;30539:249:1:o;30793:135::-;30832:3;-1:-1:-1;;30853:17:1;;30850:43;;;30873:18;;:::i;:::-;-1:-1:-1;30920:1:1;30909:13;;30793:135::o;30933:112::-;30965:1;30991;30981:35;;30996:18;;:::i;:::-;-1:-1:-1;31030:9:1;;30933:112::o;31050:127::-;31111:10;31106:3;31102:20;31099:1;31092:31;31142:4;31139:1;31132:15;31166:4;31163:1;31156:15;31182:127;31243:10;31238:3;31234:20;31231:1;31224:31;31274:4;31271:1;31264:15;31298:4;31295:1;31288:15;31314:127;31375:10;31370:3;31366:20;31363:1;31356:31;31406:4;31403:1;31396:15;31430:4;31427:1;31420:15;31446:127;31507:10;31502:3;31498:20;31495:1;31488:31;31538:4;31535:1;31528:15;31562:4;31559:1;31552:15;31578:179;31613:3;31655:1;31637:16;31634:23;31631:120;;;31701:1;31698;31695;31680:23;-1:-1:-1;31738:1:1;31732:8;31727:3;31723:18;31631:120;31578:179;:::o;31762:671::-;31801:3;31843:4;31825:16;31822:26;31819:39;;;31762:671;:::o;31819:39::-;31885:2;31879:9;-1:-1:-1;;31950:16:1;31946:25;;31943:1;31879:9;31922:50;32001:4;31995:11;32025:16;-1:-1:-1;;;;;32131:2:1;32124:4;32116:6;32112:17;32109:25;32104:2;32096:6;32093:14;32090:45;32087:58;;;32138:5;;;;;31762:671;:::o;32087:58::-;32175:6;32169:4;32165:17;32154:28;;32211:3;32205:10;32238:2;32230:6;32227:14;32224:27;;;32244:5;;;;;;31762:671;:::o;32224:27::-;32328:2;32309:16;32303:4;32299:27;32295:36;32288:4;32279:6;32274:3;32270:16;32266:27;32263:69;32260:82;;;32335:5;;;;;;31762:671;:::o;32260:82::-;32351:57;32402:4;32393:6;32385;32381:19;32377:30;32371:4;32351:57;:::i;:::-;-1:-1:-1;32424:3:1;;31762:671;-1:-1:-1;;;;;31762:671:1:o;32438:131::-;-1:-1:-1;;;;;;32512:32:1;;32502:43;;32492:71;;32559:1;32556;32549:12

Swarm Source

ipfs://2bd3a3469c7426f09abc40fc8b61f4dbd7be73bd16521f878a04f086d36edc6b
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.