ETH Price: $2,550.13 (+4.63%)

Token

Genesis Pass (GP)
 

Overview

Max Total Supply

87 GP

Holders

74

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
chvnnel.eth
0x501a1868f3681820be5b34e42c4899bf3efd6f44
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
GenesisPass

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @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 v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


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

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

// File: @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: contracts/GenesisPass.sol



pragma solidity ^0.8.0;





contract GenesisPass is ERC1155, Ownable {

    string public constant name = "Genesis Pass";

    string public constant symbol = "GP";



    uint32 public startDate = 1645568520;

    uint32 public totalSupply = 0;

    uint32 public constant maxSupply = 2222;

    uint256 public constant unitPrice = 0.69 ether;



    constructor(string memory uri) ERC1155(uri) {}



    function setURI(string memory uri) external onlyOwner {

        _setURI(uri);

    }



    function setStartDate(uint32 timestamp) external onlyOwner {

        startDate = timestamp;

    }



    function saleIsActive() public view returns (bool) {

        return startDate <= block.timestamp;

    }



    function mint(address to, uint32 count) internal {

        totalSupply += count;



        if (count > 1) {

            uint256[] memory ids = new uint256[](uint256(count));

            uint256[] memory amounts = new uint256[](uint256(count));



            for (uint32 i = 0; i < count; i++) {

                ids[i] = totalSupply - count + i;

                amounts[i] = 1;

            }



            _mintBatch(to, ids, amounts, "");

        } else {

            _mint(to, totalSupply - 1, 1, "");

        }

    }



    function mint(uint32 count) external payable {

        require(saleIsActive(), "Sale is not active.");

        require(count > 0, "Count must be greater than 0.");

        require(

            totalSupply + count <= maxSupply,

            "Count exceeds the maximum allowed supply."

        );

        require(msg.value >= unitPrice * count, "Not enough ether.");



        mint(msg.sender, count);

    }



    function batchMint(address[] memory addresses) external onlyOwner {

        require(

            totalSupply + addresses.length <= maxSupply,

            "Count exceeds the maximum allowed supply."

        );



        for (uint256 i = 0; i < addresses.length; i++) {

            mint(addresses[i], 1);

        }

    }



    function withdraw() external onlyOwner {

        address[3] memory addresses = [

            0xaaeb01acdAeCEaB3A69C5B77134d5456c018291E,

            0x043057782C29BC08950E32c475A3B5273c2021d0,

            0x581b0CC5d9fA5A776821689C3e221f5EB1305CB3

        ];



        uint32[3] memory shares = [uint32(1500), uint32(1500), uint32(7000)];



        uint256 balance = address(this).balance;



        for (uint32 i = 0; i < addresses.length; i++) {

            uint256 amount = i == addresses.length - 1

                ? address(this).balance

                : (balance * shares[i]) / 10000;

            payable(addresses[i]).transfer(amount);

        }

    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startDate","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526362156208600360146101000a81548163ffffffff021916908363ffffffff1602179055506000600360186101000a81548163ffffffff021916908363ffffffff1602179055503480156200005857600080fd5b50604051620044d7380380620044d783398181016040528101906200007e9190620002d0565b806200009081620000b860201b60201c565b50620000b1620000a5620000d460201b60201c565b620000dc60201b60201c565b50620004a5565b8060029080519060200190620000d0929190620001a2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b090620003b6565b90600052602060002090601f016020900481019282620001d4576000855562000220565b82601f10620001ef57805160ff191683800117855562000220565b8280016001018555821562000220579182015b828111156200021f57825182559160200191906001019062000202565b5b5090506200022f919062000233565b5090565b5b808211156200024e57600081600090555060010162000234565b5090565b60006200026962000263846200034a565b62000321565b90508281526020810184848401111562000288576200028762000485565b5b6200029584828562000380565b509392505050565b600082601f830112620002b557620002b462000480565b5b8151620002c784826020860162000252565b91505092915050565b600060208284031215620002e957620002e86200048f565b5b600082015167ffffffffffffffff8111156200030a57620003096200048a565b5b62000318848285016200029d565b91505092915050565b60006200032d62000340565b90506200033b8282620003ec565b919050565b6000604051905090565b600067ffffffffffffffff82111562000368576200036762000451565b5b620003738262000494565b9050602081019050919050565b60005b83811015620003a057808201518184015260208101905062000383565b83811115620003b0576000848401525b50505050565b60006002820490506001821680620003cf57607f821691505b60208210811415620003e657620003e562000422565b5b50919050565b620003f78262000494565b810181811067ffffffffffffffff8211171562000419576200041862000451565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61402280620004b56000396000f3fe60806040526004361061013f5760003560e01c80638da5cb5b116100b6578063d67b06c11161006f578063d67b06c114610428578063e73faa2d14610451578063e985e9c51461047c578063eb8d2444146104b9578063f242432a146104e4578063f2fde38b1461050d5761013f565b80638da5cb5b1461033957806395d89b4114610364578063a22cb4651461038f578063a71bbebe146103b8578063c373c0ef146103d4578063d5abeb01146103fd5761013f565b80630e89341c116101085780630e89341c1461023d57806318160ddd1461027a5780632eb2c2d6146102a55780633ccfd60b146102ce5780634e1273f4146102e5578063715018a6146103225761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be57806306fdde03146101e75780630b97bc8614610212575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612b10565b610536565b6040516101789190613427565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612c11565b6105ff565b6040516101b591906131ca565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c6b565b6106e1565b005b3480156101f357600080fd5b506101fc610769565b60405161020991906131e5565b60405180910390f35b34801561021e57600080fd5b506102276107a2565b604051610234919061346b565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612cb4565b6107b8565b60405161027191906131e5565b60405180910390f35b34801561028657600080fd5b5061028f61084c565b60405161029c919061346b565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c7919061296a565b610862565b005b3480156102da57600080fd5b506102e3610903565b005b3480156102f157600080fd5b5061030c60048036038101906103079190612b99565b610b9d565b6040516103199190613171565b60405180910390f35b34801561032e57600080fd5b50610337610cb6565b005b34801561034557600080fd5b5061034e610d3e565b60405161035b9190613094565b60405180910390f35b34801561037057600080fd5b50610379610d68565b60405161038691906131e5565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612ad0565b610da1565b005b6103d260048036038101906103cd9190612ce1565b610db7565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190612ce1565b610f1e565b005b34801561040957600080fd5b50610412610fbe565b60405161041f919061346b565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612b50565b610fc4565b005b34801561045d57600080fd5b506104666110f7565b6040516104739190613427565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061292a565b611103565b6040516104b091906131ca565b60405180910390f35b3480156104c557600080fd5b506104ce611197565b6040516104db91906131ca565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612a39565b6111ba565b005b34801561051957600080fd5b50610534600480360381019061052f91906128fd565b61125b565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059e90613247565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ca57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106da57506106d982611353565b5b9050919050565b6106e96113bd565b73ffffffffffffffffffffffffffffffffffffffff16610707610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075490613367565b60405180910390fd5b610766816113c5565b50565b6040518060400160405280600c81526020017f47656e657369732050617373000000000000000000000000000000000000000081525081565b600360149054906101000a900463ffffffff1681565b6060600280546107c79061381f565b80601f01602080910402602001604051908101604052809291908181526020018280546107f39061381f565b80156108405780601f1061081557610100808354040283529160200191610840565b820191906000526020600020905b81548152906001019060200180831161082357829003601f168201915b50505050509050919050565b600360189054906101000a900463ffffffff1681565b61086a6113bd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108b057506108af856108aa6113bd565b611103565b5b6108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690613307565b60405180910390fd5b6108fc85858585856113df565b5050505050565b61090b6113bd565b73ffffffffffffffffffffffffffffffffffffffff16610929610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461097f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097690613367565b60405180910390fd5b6000604051806060016040528073aaeb01acdaeceab3a69c5b77134d5456c018291e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173043057782c29bc08950e32c475a3b5273c2021d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173581b0cc5d9fa5a776821689c3e221f5eb1305cb373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050600060405180606001604052806105dc63ffffffff1663ffffffff1681526020016105dc63ffffffff1663ffffffff168152602001611b5863ffffffff1663ffffffff168152509050600047905060005b60038163ffffffff161015610b9757600060016003610ace91906136f1565b8263ffffffff1614610b1b57612710848363ffffffff1660038110610af657610af5613985565b5b602002015163ffffffff1684610b0c9190613697565b610b169190613666565b610b1d565b475b9050848263ffffffff1660038110610b3857610b37613985565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b82573d6000803e3d6000fd5b50508080610b8f906138cb565b915050610aaf565b50505050565b60608151835114610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda906133c7565b60405180910390fd5b6000835167ffffffffffffffff811115610c0057610bff6139b4565b5b604051908082528060200260200182016040528015610c2e5781602001602082028036833780820191505090505b50905060005b8451811015610cab57610c7b858281518110610c5357610c52613985565b5b6020026020010151858381518110610c6e57610c6d613985565b5b6020026020010151610536565b828281518110610c8e57610c8d613985565b5b60200260200101818152505080610ca490613882565b9050610c34565b508091505092915050565b610cbe6113bd565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613367565b60405180910390fd5b610d3c60006116f3565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600281526020017f475000000000000000000000000000000000000000000000000000000000000081525081565b610db3610dac6113bd565b83836117b9565b5050565b610dbf611197565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613387565b60405180910390fd5b60008163ffffffff1611610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132a7565b60405180910390fd5b6108ae63ffffffff1681600360189054906101000a900463ffffffff16610e6e919061362c565b63ffffffff161115610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90613347565b60405180910390fd5b8063ffffffff166709935f581f050000610ecf9190613697565b341015610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906132c7565b60405180910390fd5b610f1b3382611926565b50565b610f266113bd565b73ffffffffffffffffffffffffffffffffffffffff16610f44610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613367565b60405180910390fd5b80600360146101000a81548163ffffffff021916908363ffffffff16021790555050565b6108ae81565b610fcc6113bd565b73ffffffffffffffffffffffffffffffffffffffff16610fea610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613367565b60405180910390fd5b6108ae63ffffffff168151600360189054906101000a900463ffffffff1663ffffffff1661106e91906135d6565b11156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a690613347565b60405180910390fd5b60005b81518110156110f3576110e08282815181106110d1576110d0613985565b5b60200260200101516001611926565b80806110eb90613882565b9150506110b2565b5050565b6709935f581f05000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360149054906101000a900463ffffffff1663ffffffff161115905090565b6111c26113bd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112085750611207856112026113bd565b611103565b5b611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613287565b60405180910390fd5b6112548585858585611b27565b5050505050565b6112636113bd565b73ffffffffffffffffffffffffffffffffffffffff16611281610d3e565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90613367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90613267565b60405180910390fd5b611350816116f3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906113db9291906125c0565b5050565b8151835114611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906133e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a906132e7565b60405180910390fd5b600061149d6113bd565b90506114ad818787878787611da9565b60005b845181101561165e5760008582815181106114ce576114cd613985565b5b6020026020010151905060008583815181106114ed576114ec613985565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590613327565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164391906135d6565b925050819055505050508061165790613882565b90506114b0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116d5929190613193565b60405180910390a46116eb818787878787611db1565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906133a7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161191991906131ca565b60405180910390a3505050565b80600360188282829054906101000a900463ffffffff16611947919061362c565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611ae25760008163ffffffff1667ffffffffffffffff811115611996576119956139b4565b5b6040519080825280602002602001820160405280156119c45781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff8111156119e9576119e86139b4565b5b604051908082528060200260200182016040528015611a175781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611abf578084600360189054906101000a900463ffffffff16611a509190613725565b611a5a919061362c565b63ffffffff16838263ffffffff1681518110611a7957611a78613985565b5b6020026020010181815250506001828263ffffffff1681518110611aa057611a9f613985565b5b6020026020010181815250508080611ab7906138cb565b915050611a1d565b50611adb84838360405180602001604052806000815250611f98565b5050611b23565b611b22826001600360189054906101000a900463ffffffff16611b059190613725565b63ffffffff166001604051806020016040528060008152506121b6565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e906132e7565b60405180910390fd5b6000611ba16113bd565b9050611bc1818787611bb28861234c565b611bbb8861234c565b87611da9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613327565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d0d91906135d6565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611d8a929190613442565b60405180910390a4611da08288888888886123c6565b50505050505050565b505050505050565b611dd08473ffffffffffffffffffffffffffffffffffffffff166125ad565b15611f90578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e169594939291906130af565b602060405180830381600087803b158015611e3057600080fd5b505af1925050508015611e6157506040513d601f19601f82011682018060405250810190611e5e9190612c3e565b60015b611f0757611e6d6139e3565b806308c379a01415611eca5750611e82613ee3565b80611e8d5750611ecc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec191906131e5565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90613207565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590613227565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90613407565b60405180910390fd5b815183511461204c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612043906133e7565b60405180910390fd5b60006120566113bd565b905061206781600087878787611da9565b60005b84518110156121205783818151811061208657612085613985565b5b60200260200101516000808784815181106120a4576120a3613985565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210691906135d6565b92505081905550808061211890613882565b91505061206a565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612198929190613193565b60405180910390a46121af81600087878787611db1565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90613407565b60405180910390fd5b60006122306113bd565b9050612251816000876122428861234c565b61224b8861234c565b87611da9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b091906135d6565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161232e929190613442565b60405180910390a4612345816000878787876123c6565b5050505050565b60606000600167ffffffffffffffff81111561236b5761236a6139b4565b5b6040519080825280602002602001820160405280156123995781602001602082028036833780820191505090505b50905082816000815181106123b1576123b0613985565b5b60200260200101818152505080915050919050565b6123e58473ffffffffffffffffffffffffffffffffffffffff166125ad565b156125a5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161242b959493929190613117565b602060405180830381600087803b15801561244557600080fd5b505af192505050801561247657506040513d601f19601f820116820180604052508101906124739190612c3e565b60015b61251c576124826139e3565b806308c379a014156124df5750612497613ee3565b806124a257506124e1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d691906131e5565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390613207565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90613227565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546125cc9061381f565b90600052602060002090601f0160209004810192826125ee5760008555612635565b82601f1061260757805160ff1916838001178555612635565b82800160010185558215612635579182015b82811115612634578251825591602001919060010190612619565b5b5090506126429190612646565b5090565b5b8082111561265f576000816000905550600101612647565b5090565b6000612676612671846134ab565b613486565b9050808382526020820190508285602086028201111561269957612698613a0a565b5b60005b858110156126c957816126af88826127c7565b84526020840193506020830192505060018101905061269c565b5050509392505050565b60006126e66126e1846134d7565b613486565b9050808382526020820190508285602086028201111561270957612708613a0a565b5b60005b85811015612739578161271f88826128d3565b84526020840193506020830192505060018101905061270c565b5050509392505050565b600061275661275184613503565b613486565b90508281526020810184848401111561277257612771613a0f565b5b61277d8482856137dd565b509392505050565b600061279861279384613534565b613486565b9050828152602081018484840111156127b4576127b3613a0f565b5b6127bf8482856137dd565b509392505050565b6000813590506127d681613f79565b92915050565b600082601f8301126127f1576127f0613a05565b5b8135612801848260208601612663565b91505092915050565b600082601f83011261281f5761281e613a05565b5b813561282f8482602086016126d3565b91505092915050565b60008135905061284781613f90565b92915050565b60008135905061285c81613fa7565b92915050565b60008151905061287181613fa7565b92915050565b600082601f83011261288c5761288b613a05565b5b813561289c848260208601612743565b91505092915050565b600082601f8301126128ba576128b9613a05565b5b81356128ca848260208601612785565b91505092915050565b6000813590506128e281613fbe565b92915050565b6000813590506128f781613fd5565b92915050565b60006020828403121561291357612912613a19565b5b6000612921848285016127c7565b91505092915050565b6000806040838503121561294157612940613a19565b5b600061294f858286016127c7565b9250506020612960858286016127c7565b9150509250929050565b600080600080600060a0868803121561298657612985613a19565b5b6000612994888289016127c7565b95505060206129a5888289016127c7565b945050604086013567ffffffffffffffff8111156129c6576129c5613a14565b5b6129d28882890161280a565b935050606086013567ffffffffffffffff8111156129f3576129f2613a14565b5b6129ff8882890161280a565b925050608086013567ffffffffffffffff811115612a2057612a1f613a14565b5b612a2c88828901612877565b9150509295509295909350565b600080600080600060a08688031215612a5557612a54613a19565b5b6000612a63888289016127c7565b9550506020612a74888289016127c7565b9450506040612a85888289016128d3565b9350506060612a96888289016128d3565b925050608086013567ffffffffffffffff811115612ab757612ab6613a14565b5b612ac388828901612877565b9150509295509295909350565b60008060408385031215612ae757612ae6613a19565b5b6000612af5858286016127c7565b9250506020612b0685828601612838565b9150509250929050565b60008060408385031215612b2757612b26613a19565b5b6000612b35858286016127c7565b9250506020612b46858286016128d3565b9150509250929050565b600060208284031215612b6657612b65613a19565b5b600082013567ffffffffffffffff811115612b8457612b83613a14565b5b612b90848285016127dc565b91505092915050565b60008060408385031215612bb057612baf613a19565b5b600083013567ffffffffffffffff811115612bce57612bcd613a14565b5b612bda858286016127dc565b925050602083013567ffffffffffffffff811115612bfb57612bfa613a14565b5b612c078582860161280a565b9150509250929050565b600060208284031215612c2757612c26613a19565b5b6000612c358482850161284d565b91505092915050565b600060208284031215612c5457612c53613a19565b5b6000612c6284828501612862565b91505092915050565b600060208284031215612c8157612c80613a19565b5b600082013567ffffffffffffffff811115612c9f57612c9e613a14565b5b612cab848285016128a5565b91505092915050565b600060208284031215612cca57612cc9613a19565b5b6000612cd8848285016128d3565b91505092915050565b600060208284031215612cf757612cf6613a19565b5b6000612d05848285016128e8565b91505092915050565b6000612d1a8383613067565b60208301905092915050565b612d2f81613759565b82525050565b6000612d4082613575565b612d4a81856135a3565b9350612d5583613565565b8060005b83811015612d86578151612d6d8882612d0e565b9750612d7883613596565b925050600181019050612d59565b5085935050505092915050565b612d9c8161376b565b82525050565b6000612dad82613580565b612db781856135b4565b9350612dc78185602086016137ec565b612dd081613a1e565b840191505092915050565b6000612de68261358b565b612df081856135c5565b9350612e008185602086016137ec565b612e0981613a1e565b840191505092915050565b6000612e216034836135c5565b9150612e2c82613a3c565b604082019050919050565b6000612e446028836135c5565b9150612e4f82613a8b565b604082019050919050565b6000612e67602b836135c5565b9150612e7282613ada565b604082019050919050565b6000612e8a6026836135c5565b9150612e9582613b29565b604082019050919050565b6000612ead6029836135c5565b9150612eb882613b78565b604082019050919050565b6000612ed0601d836135c5565b9150612edb82613bc7565b602082019050919050565b6000612ef36011836135c5565b9150612efe82613bf0565b602082019050919050565b6000612f166025836135c5565b9150612f2182613c19565b604082019050919050565b6000612f396032836135c5565b9150612f4482613c68565b604082019050919050565b6000612f5c602a836135c5565b9150612f6782613cb7565b604082019050919050565b6000612f7f6029836135c5565b9150612f8a82613d06565b604082019050919050565b6000612fa26020836135c5565b9150612fad82613d55565b602082019050919050565b6000612fc56013836135c5565b9150612fd082613d7e565b602082019050919050565b6000612fe86029836135c5565b9150612ff382613da7565b604082019050919050565b600061300b6029836135c5565b915061301682613df6565b604082019050919050565b600061302e6028836135c5565b915061303982613e45565b604082019050919050565b60006130516021836135c5565b915061305c82613e94565b604082019050919050565b613070816137c3565b82525050565b61307f816137c3565b82525050565b61308e816137cd565b82525050565b60006020820190506130a96000830184612d26565b92915050565b600060a0820190506130c46000830188612d26565b6130d16020830187612d26565b81810360408301526130e38186612d35565b905081810360608301526130f78185612d35565b9050818103608083015261310b8184612da2565b90509695505050505050565b600060a08201905061312c6000830188612d26565b6131396020830187612d26565b6131466040830186613076565b6131536060830185613076565b81810360808301526131658184612da2565b90509695505050505050565b6000602082019050818103600083015261318b8184612d35565b905092915050565b600060408201905081810360008301526131ad8185612d35565b905081810360208301526131c18184612d35565b90509392505050565b60006020820190506131df6000830184612d93565b92915050565b600060208201905081810360008301526131ff8184612ddb565b905092915050565b6000602082019050818103600083015261322081612e14565b9050919050565b6000602082019050818103600083015261324081612e37565b9050919050565b6000602082019050818103600083015261326081612e5a565b9050919050565b6000602082019050818103600083015261328081612e7d565b9050919050565b600060208201905081810360008301526132a081612ea0565b9050919050565b600060208201905081810360008301526132c081612ec3565b9050919050565b600060208201905081810360008301526132e081612ee6565b9050919050565b6000602082019050818103600083015261330081612f09565b9050919050565b6000602082019050818103600083015261332081612f2c565b9050919050565b6000602082019050818103600083015261334081612f4f565b9050919050565b6000602082019050818103600083015261336081612f72565b9050919050565b6000602082019050818103600083015261338081612f95565b9050919050565b600060208201905081810360008301526133a081612fb8565b9050919050565b600060208201905081810360008301526133c081612fdb565b9050919050565b600060208201905081810360008301526133e081612ffe565b9050919050565b6000602082019050818103600083015261340081613021565b9050919050565b6000602082019050818103600083015261342081613044565b9050919050565b600060208201905061343c6000830184613076565b92915050565b60006040820190506134576000830185613076565b6134646020830184613076565b9392505050565b60006020820190506134806000830184613085565b92915050565b60006134906134a1565b905061349c8282613851565b919050565b6000604051905090565b600067ffffffffffffffff8211156134c6576134c56139b4565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134f2576134f16139b4565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561351e5761351d6139b4565b5b61352782613a1e565b9050602081019050919050565b600067ffffffffffffffff82111561354f5761354e6139b4565b5b61355882613a1e565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135e1826137c3565b91506135ec836137c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613621576136206138f8565b5b828201905092915050565b6000613637826137cd565b9150613642836137cd565b92508263ffffffff0382111561365b5761365a6138f8565b5b828201905092915050565b6000613671826137c3565b915061367c836137c3565b92508261368c5761368b613927565b5b828204905092915050565b60006136a2826137c3565b91506136ad836137c3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e6576136e56138f8565b5b828202905092915050565b60006136fc826137c3565b9150613707836137c3565b92508282101561371a576137196138f8565b5b828203905092915050565b6000613730826137cd565b915061373b836137cd565b92508282101561374e5761374d6138f8565b5b828203905092915050565b6000613764826137a3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561380a5780820151818401526020810190506137ef565b83811115613819576000848401525b50505050565b6000600282049050600182168061383757607f821691505b6020821081141561384b5761384a613956565b5b50919050565b61385a82613a1e565b810181811067ffffffffffffffff82111715613879576138786139b4565b5b80604052505050565b600061388d826137c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138c0576138bf6138f8565b5b600182019050919050565b60006138d6826137cd565b915063ffffffff8214156138ed576138ec6138f8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a025760046000803e6139ff600051613a2f565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613ef357613f76565b613efb6134a1565b60043d036004823e80513d602482011167ffffffffffffffff82111715613f23575050613f76565b808201805167ffffffffffffffff811115613f415750505050613f76565b80602083010160043d038501811115613f5e575050505050613f76565b613f6d82602001850186613851565b82955050505050505b90565b613f8281613759565b8114613f8d57600080fd5b50565b613f998161376b565b8114613fa457600080fd5b50565b613fb081613777565b8114613fbb57600080fd5b50565b613fc7816137c3565b8114613fd257600080fd5b50565b613fde816137cd565b8114613fe957600080fd5b5056fea2646970667358221220629e765e3a9bff586bd04f6dd794dd35f6b13992525fb1f9a313e7f2711768ea64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d636a4c3562625274634c6a7279696271737862646a416d5876525471796736386e373234794a3137436a45322f7b69647d2e6a736f6e00000000

Deployed Bytecode

0x60806040526004361061013f5760003560e01c80638da5cb5b116100b6578063d67b06c11161006f578063d67b06c114610428578063e73faa2d14610451578063e985e9c51461047c578063eb8d2444146104b9578063f242432a146104e4578063f2fde38b1461050d5761013f565b80638da5cb5b1461033957806395d89b4114610364578063a22cb4651461038f578063a71bbebe146103b8578063c373c0ef146103d4578063d5abeb01146103fd5761013f565b80630e89341c116101085780630e89341c1461023d57806318160ddd1461027a5780632eb2c2d6146102a55780633ccfd60b146102ce5780634e1273f4146102e5578063715018a6146103225761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be57806306fdde03146101e75780630b97bc8614610212575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612b10565b610536565b6040516101789190613427565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612c11565b6105ff565b6040516101b591906131ca565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c6b565b6106e1565b005b3480156101f357600080fd5b506101fc610769565b60405161020991906131e5565b60405180910390f35b34801561021e57600080fd5b506102276107a2565b604051610234919061346b565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612cb4565b6107b8565b60405161027191906131e5565b60405180910390f35b34801561028657600080fd5b5061028f61084c565b60405161029c919061346b565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c7919061296a565b610862565b005b3480156102da57600080fd5b506102e3610903565b005b3480156102f157600080fd5b5061030c60048036038101906103079190612b99565b610b9d565b6040516103199190613171565b60405180910390f35b34801561032e57600080fd5b50610337610cb6565b005b34801561034557600080fd5b5061034e610d3e565b60405161035b9190613094565b60405180910390f35b34801561037057600080fd5b50610379610d68565b60405161038691906131e5565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612ad0565b610da1565b005b6103d260048036038101906103cd9190612ce1565b610db7565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190612ce1565b610f1e565b005b34801561040957600080fd5b50610412610fbe565b60405161041f919061346b565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612b50565b610fc4565b005b34801561045d57600080fd5b506104666110f7565b6040516104739190613427565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061292a565b611103565b6040516104b091906131ca565b60405180910390f35b3480156104c557600080fd5b506104ce611197565b6040516104db91906131ca565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612a39565b6111ba565b005b34801561051957600080fd5b50610534600480360381019061052f91906128fd565b61125b565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059e90613247565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ca57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106da57506106d982611353565b5b9050919050565b6106e96113bd565b73ffffffffffffffffffffffffffffffffffffffff16610707610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075490613367565b60405180910390fd5b610766816113c5565b50565b6040518060400160405280600c81526020017f47656e657369732050617373000000000000000000000000000000000000000081525081565b600360149054906101000a900463ffffffff1681565b6060600280546107c79061381f565b80601f01602080910402602001604051908101604052809291908181526020018280546107f39061381f565b80156108405780601f1061081557610100808354040283529160200191610840565b820191906000526020600020905b81548152906001019060200180831161082357829003601f168201915b50505050509050919050565b600360189054906101000a900463ffffffff1681565b61086a6113bd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108b057506108af856108aa6113bd565b611103565b5b6108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690613307565b60405180910390fd5b6108fc85858585856113df565b5050505050565b61090b6113bd565b73ffffffffffffffffffffffffffffffffffffffff16610929610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461097f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097690613367565b60405180910390fd5b6000604051806060016040528073aaeb01acdaeceab3a69c5b77134d5456c018291e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173043057782c29bc08950e32c475a3b5273c2021d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173581b0cc5d9fa5a776821689c3e221f5eb1305cb373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050600060405180606001604052806105dc63ffffffff1663ffffffff1681526020016105dc63ffffffff1663ffffffff168152602001611b5863ffffffff1663ffffffff168152509050600047905060005b60038163ffffffff161015610b9757600060016003610ace91906136f1565b8263ffffffff1614610b1b57612710848363ffffffff1660038110610af657610af5613985565b5b602002015163ffffffff1684610b0c9190613697565b610b169190613666565b610b1d565b475b9050848263ffffffff1660038110610b3857610b37613985565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b82573d6000803e3d6000fd5b50508080610b8f906138cb565b915050610aaf565b50505050565b60608151835114610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda906133c7565b60405180910390fd5b6000835167ffffffffffffffff811115610c0057610bff6139b4565b5b604051908082528060200260200182016040528015610c2e5781602001602082028036833780820191505090505b50905060005b8451811015610cab57610c7b858281518110610c5357610c52613985565b5b6020026020010151858381518110610c6e57610c6d613985565b5b6020026020010151610536565b828281518110610c8e57610c8d613985565b5b60200260200101818152505080610ca490613882565b9050610c34565b508091505092915050565b610cbe6113bd565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613367565b60405180910390fd5b610d3c60006116f3565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600281526020017f475000000000000000000000000000000000000000000000000000000000000081525081565b610db3610dac6113bd565b83836117b9565b5050565b610dbf611197565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613387565b60405180910390fd5b60008163ffffffff1611610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132a7565b60405180910390fd5b6108ae63ffffffff1681600360189054906101000a900463ffffffff16610e6e919061362c565b63ffffffff161115610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90613347565b60405180910390fd5b8063ffffffff166709935f581f050000610ecf9190613697565b341015610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906132c7565b60405180910390fd5b610f1b3382611926565b50565b610f266113bd565b73ffffffffffffffffffffffffffffffffffffffff16610f44610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613367565b60405180910390fd5b80600360146101000a81548163ffffffff021916908363ffffffff16021790555050565b6108ae81565b610fcc6113bd565b73ffffffffffffffffffffffffffffffffffffffff16610fea610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613367565b60405180910390fd5b6108ae63ffffffff168151600360189054906101000a900463ffffffff1663ffffffff1661106e91906135d6565b11156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a690613347565b60405180910390fd5b60005b81518110156110f3576110e08282815181106110d1576110d0613985565b5b60200260200101516001611926565b80806110eb90613882565b9150506110b2565b5050565b6709935f581f05000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360149054906101000a900463ffffffff1663ffffffff161115905090565b6111c26113bd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112085750611207856112026113bd565b611103565b5b611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613287565b60405180910390fd5b6112548585858585611b27565b5050505050565b6112636113bd565b73ffffffffffffffffffffffffffffffffffffffff16611281610d3e565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90613367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90613267565b60405180910390fd5b611350816116f3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906113db9291906125c0565b5050565b8151835114611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906133e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a906132e7565b60405180910390fd5b600061149d6113bd565b90506114ad818787878787611da9565b60005b845181101561165e5760008582815181106114ce576114cd613985565b5b6020026020010151905060008583815181106114ed576114ec613985565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590613327565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164391906135d6565b925050819055505050508061165790613882565b90506114b0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116d5929190613193565b60405180910390a46116eb818787878787611db1565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906133a7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161191991906131ca565b60405180910390a3505050565b80600360188282829054906101000a900463ffffffff16611947919061362c565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611ae25760008163ffffffff1667ffffffffffffffff811115611996576119956139b4565b5b6040519080825280602002602001820160405280156119c45781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff8111156119e9576119e86139b4565b5b604051908082528060200260200182016040528015611a175781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611abf578084600360189054906101000a900463ffffffff16611a509190613725565b611a5a919061362c565b63ffffffff16838263ffffffff1681518110611a7957611a78613985565b5b6020026020010181815250506001828263ffffffff1681518110611aa057611a9f613985565b5b6020026020010181815250508080611ab7906138cb565b915050611a1d565b50611adb84838360405180602001604052806000815250611f98565b5050611b23565b611b22826001600360189054906101000a900463ffffffff16611b059190613725565b63ffffffff166001604051806020016040528060008152506121b6565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e906132e7565b60405180910390fd5b6000611ba16113bd565b9050611bc1818787611bb28861234c565b611bbb8861234c565b87611da9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613327565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d0d91906135d6565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611d8a929190613442565b60405180910390a4611da08288888888886123c6565b50505050505050565b505050505050565b611dd08473ffffffffffffffffffffffffffffffffffffffff166125ad565b15611f90578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e169594939291906130af565b602060405180830381600087803b158015611e3057600080fd5b505af1925050508015611e6157506040513d601f19601f82011682018060405250810190611e5e9190612c3e565b60015b611f0757611e6d6139e3565b806308c379a01415611eca5750611e82613ee3565b80611e8d5750611ecc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec191906131e5565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90613207565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590613227565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90613407565b60405180910390fd5b815183511461204c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612043906133e7565b60405180910390fd5b60006120566113bd565b905061206781600087878787611da9565b60005b84518110156121205783818151811061208657612085613985565b5b60200260200101516000808784815181106120a4576120a3613985565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210691906135d6565b92505081905550808061211890613882565b91505061206a565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612198929190613193565b60405180910390a46121af81600087878787611db1565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90613407565b60405180910390fd5b60006122306113bd565b9050612251816000876122428861234c565b61224b8861234c565b87611da9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b091906135d6565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161232e929190613442565b60405180910390a4612345816000878787876123c6565b5050505050565b60606000600167ffffffffffffffff81111561236b5761236a6139b4565b5b6040519080825280602002602001820160405280156123995781602001602082028036833780820191505090505b50905082816000815181106123b1576123b0613985565b5b60200260200101818152505080915050919050565b6123e58473ffffffffffffffffffffffffffffffffffffffff166125ad565b156125a5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161242b959493929190613117565b602060405180830381600087803b15801561244557600080fd5b505af192505050801561247657506040513d601f19601f820116820180604052508101906124739190612c3e565b60015b61251c576124826139e3565b806308c379a014156124df5750612497613ee3565b806124a257506124e1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d691906131e5565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390613207565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90613227565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546125cc9061381f565b90600052602060002090601f0160209004810192826125ee5760008555612635565b82601f1061260757805160ff1916838001178555612635565b82800160010185558215612635579182015b82811115612634578251825591602001919060010190612619565b5b5090506126429190612646565b5090565b5b8082111561265f576000816000905550600101612647565b5090565b6000612676612671846134ab565b613486565b9050808382526020820190508285602086028201111561269957612698613a0a565b5b60005b858110156126c957816126af88826127c7565b84526020840193506020830192505060018101905061269c565b5050509392505050565b60006126e66126e1846134d7565b613486565b9050808382526020820190508285602086028201111561270957612708613a0a565b5b60005b85811015612739578161271f88826128d3565b84526020840193506020830192505060018101905061270c565b5050509392505050565b600061275661275184613503565b613486565b90508281526020810184848401111561277257612771613a0f565b5b61277d8482856137dd565b509392505050565b600061279861279384613534565b613486565b9050828152602081018484840111156127b4576127b3613a0f565b5b6127bf8482856137dd565b509392505050565b6000813590506127d681613f79565b92915050565b600082601f8301126127f1576127f0613a05565b5b8135612801848260208601612663565b91505092915050565b600082601f83011261281f5761281e613a05565b5b813561282f8482602086016126d3565b91505092915050565b60008135905061284781613f90565b92915050565b60008135905061285c81613fa7565b92915050565b60008151905061287181613fa7565b92915050565b600082601f83011261288c5761288b613a05565b5b813561289c848260208601612743565b91505092915050565b600082601f8301126128ba576128b9613a05565b5b81356128ca848260208601612785565b91505092915050565b6000813590506128e281613fbe565b92915050565b6000813590506128f781613fd5565b92915050565b60006020828403121561291357612912613a19565b5b6000612921848285016127c7565b91505092915050565b6000806040838503121561294157612940613a19565b5b600061294f858286016127c7565b9250506020612960858286016127c7565b9150509250929050565b600080600080600060a0868803121561298657612985613a19565b5b6000612994888289016127c7565b95505060206129a5888289016127c7565b945050604086013567ffffffffffffffff8111156129c6576129c5613a14565b5b6129d28882890161280a565b935050606086013567ffffffffffffffff8111156129f3576129f2613a14565b5b6129ff8882890161280a565b925050608086013567ffffffffffffffff811115612a2057612a1f613a14565b5b612a2c88828901612877565b9150509295509295909350565b600080600080600060a08688031215612a5557612a54613a19565b5b6000612a63888289016127c7565b9550506020612a74888289016127c7565b9450506040612a85888289016128d3565b9350506060612a96888289016128d3565b925050608086013567ffffffffffffffff811115612ab757612ab6613a14565b5b612ac388828901612877565b9150509295509295909350565b60008060408385031215612ae757612ae6613a19565b5b6000612af5858286016127c7565b9250506020612b0685828601612838565b9150509250929050565b60008060408385031215612b2757612b26613a19565b5b6000612b35858286016127c7565b9250506020612b46858286016128d3565b9150509250929050565b600060208284031215612b6657612b65613a19565b5b600082013567ffffffffffffffff811115612b8457612b83613a14565b5b612b90848285016127dc565b91505092915050565b60008060408385031215612bb057612baf613a19565b5b600083013567ffffffffffffffff811115612bce57612bcd613a14565b5b612bda858286016127dc565b925050602083013567ffffffffffffffff811115612bfb57612bfa613a14565b5b612c078582860161280a565b9150509250929050565b600060208284031215612c2757612c26613a19565b5b6000612c358482850161284d565b91505092915050565b600060208284031215612c5457612c53613a19565b5b6000612c6284828501612862565b91505092915050565b600060208284031215612c8157612c80613a19565b5b600082013567ffffffffffffffff811115612c9f57612c9e613a14565b5b612cab848285016128a5565b91505092915050565b600060208284031215612cca57612cc9613a19565b5b6000612cd8848285016128d3565b91505092915050565b600060208284031215612cf757612cf6613a19565b5b6000612d05848285016128e8565b91505092915050565b6000612d1a8383613067565b60208301905092915050565b612d2f81613759565b82525050565b6000612d4082613575565b612d4a81856135a3565b9350612d5583613565565b8060005b83811015612d86578151612d6d8882612d0e565b9750612d7883613596565b925050600181019050612d59565b5085935050505092915050565b612d9c8161376b565b82525050565b6000612dad82613580565b612db781856135b4565b9350612dc78185602086016137ec565b612dd081613a1e565b840191505092915050565b6000612de68261358b565b612df081856135c5565b9350612e008185602086016137ec565b612e0981613a1e565b840191505092915050565b6000612e216034836135c5565b9150612e2c82613a3c565b604082019050919050565b6000612e446028836135c5565b9150612e4f82613a8b565b604082019050919050565b6000612e67602b836135c5565b9150612e7282613ada565b604082019050919050565b6000612e8a6026836135c5565b9150612e9582613b29565b604082019050919050565b6000612ead6029836135c5565b9150612eb882613b78565b604082019050919050565b6000612ed0601d836135c5565b9150612edb82613bc7565b602082019050919050565b6000612ef36011836135c5565b9150612efe82613bf0565b602082019050919050565b6000612f166025836135c5565b9150612f2182613c19565b604082019050919050565b6000612f396032836135c5565b9150612f4482613c68565b604082019050919050565b6000612f5c602a836135c5565b9150612f6782613cb7565b604082019050919050565b6000612f7f6029836135c5565b9150612f8a82613d06565b604082019050919050565b6000612fa26020836135c5565b9150612fad82613d55565b602082019050919050565b6000612fc56013836135c5565b9150612fd082613d7e565b602082019050919050565b6000612fe86029836135c5565b9150612ff382613da7565b604082019050919050565b600061300b6029836135c5565b915061301682613df6565b604082019050919050565b600061302e6028836135c5565b915061303982613e45565b604082019050919050565b60006130516021836135c5565b915061305c82613e94565b604082019050919050565b613070816137c3565b82525050565b61307f816137c3565b82525050565b61308e816137cd565b82525050565b60006020820190506130a96000830184612d26565b92915050565b600060a0820190506130c46000830188612d26565b6130d16020830187612d26565b81810360408301526130e38186612d35565b905081810360608301526130f78185612d35565b9050818103608083015261310b8184612da2565b90509695505050505050565b600060a08201905061312c6000830188612d26565b6131396020830187612d26565b6131466040830186613076565b6131536060830185613076565b81810360808301526131658184612da2565b90509695505050505050565b6000602082019050818103600083015261318b8184612d35565b905092915050565b600060408201905081810360008301526131ad8185612d35565b905081810360208301526131c18184612d35565b90509392505050565b60006020820190506131df6000830184612d93565b92915050565b600060208201905081810360008301526131ff8184612ddb565b905092915050565b6000602082019050818103600083015261322081612e14565b9050919050565b6000602082019050818103600083015261324081612e37565b9050919050565b6000602082019050818103600083015261326081612e5a565b9050919050565b6000602082019050818103600083015261328081612e7d565b9050919050565b600060208201905081810360008301526132a081612ea0565b9050919050565b600060208201905081810360008301526132c081612ec3565b9050919050565b600060208201905081810360008301526132e081612ee6565b9050919050565b6000602082019050818103600083015261330081612f09565b9050919050565b6000602082019050818103600083015261332081612f2c565b9050919050565b6000602082019050818103600083015261334081612f4f565b9050919050565b6000602082019050818103600083015261336081612f72565b9050919050565b6000602082019050818103600083015261338081612f95565b9050919050565b600060208201905081810360008301526133a081612fb8565b9050919050565b600060208201905081810360008301526133c081612fdb565b9050919050565b600060208201905081810360008301526133e081612ffe565b9050919050565b6000602082019050818103600083015261340081613021565b9050919050565b6000602082019050818103600083015261342081613044565b9050919050565b600060208201905061343c6000830184613076565b92915050565b60006040820190506134576000830185613076565b6134646020830184613076565b9392505050565b60006020820190506134806000830184613085565b92915050565b60006134906134a1565b905061349c8282613851565b919050565b6000604051905090565b600067ffffffffffffffff8211156134c6576134c56139b4565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134f2576134f16139b4565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561351e5761351d6139b4565b5b61352782613a1e565b9050602081019050919050565b600067ffffffffffffffff82111561354f5761354e6139b4565b5b61355882613a1e565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135e1826137c3565b91506135ec836137c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613621576136206138f8565b5b828201905092915050565b6000613637826137cd565b9150613642836137cd565b92508263ffffffff0382111561365b5761365a6138f8565b5b828201905092915050565b6000613671826137c3565b915061367c836137c3565b92508261368c5761368b613927565b5b828204905092915050565b60006136a2826137c3565b91506136ad836137c3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e6576136e56138f8565b5b828202905092915050565b60006136fc826137c3565b9150613707836137c3565b92508282101561371a576137196138f8565b5b828203905092915050565b6000613730826137cd565b915061373b836137cd565b92508282101561374e5761374d6138f8565b5b828203905092915050565b6000613764826137a3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561380a5780820151818401526020810190506137ef565b83811115613819576000848401525b50505050565b6000600282049050600182168061383757607f821691505b6020821081141561384b5761384a613956565b5b50919050565b61385a82613a1e565b810181811067ffffffffffffffff82111715613879576138786139b4565b5b80604052505050565b600061388d826137c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138c0576138bf6138f8565b5b600182019050919050565b60006138d6826137cd565b915063ffffffff8214156138ed576138ec6138f8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a025760046000803e6139ff600051613a2f565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613ef357613f76565b613efb6134a1565b60043d036004823e80513d602482011167ffffffffffffffff82111715613f23575050613f76565b808201805167ffffffffffffffff811115613f415750505050613f76565b80602083010160043d038501811115613f5e575050505050613f76565b613f6d82602001850186613851565b82955050505050505b90565b613f8281613759565b8114613f8d57600080fd5b50565b613f998161376b565b8114613fa457600080fd5b50565b613fb081613777565b8114613fbb57600080fd5b50565b613fc7816137c3565b8114613fd257600080fd5b50565b613fde816137cd565b8114613fe957600080fd5b5056fea2646970667358221220629e765e3a9bff586bd04f6dd794dd35f6b13992525fb1f9a313e7f2711768ea64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d636a4c3562625274634c6a7279696271737862646a416d5876525471796736386e373234794a3137436a45322f7b69647d2e6a736f6e00000000

-----Decoded View---------------
Arg [0] : uri (string): https://buckets.mypinata.cloud/ipfs/QmcjL5bbRtcLjryibqsxbdjAmXvRTqyg68n724yJ17CjE2/{id}.json

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005c
Arg [2] : 68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f69
Arg [3] : 7066732f516d636a4c3562625274634c6a7279696271737862646a416d587652
Arg [4] : 5471796736386e373234794a3137436a45322f7b69647d2e6a736f6e00000000


Deployed Bytecode Sourcemap

36558:2825:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22001:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36958:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36608:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36710:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22722:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36755:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24917:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38671:707;;;;;;;;;;;;;:::i;:::-;;23375:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2606:103;;;;;;;;;;;;;:::i;:::-;;1955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36661:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37870:433;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37059:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36793:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38315:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36841:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24199:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37174:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24439:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22978:231;23064:7;23111:1;23092:21;;:7;:21;;;;23084:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:9;:13;23189:2;23179:13;;;;;;;;;;;:22;23193:7;23179:22;;;;;;;;;;;;;;;;23172:29;;22978:231;;;;:::o;22001:310::-;22103:4;22155:26;22140:41;;;:11;:41;;;;:110;;;;22213:37;22198:52;;;:11;:52;;;;22140:110;:163;;;;22267:36;22291:11;22267:23;:36::i;:::-;22140:163;22120:183;;22001:310;;;:::o;36958:89::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37025:12:::1;37033:3;37025:7;:12::i;:::-;36958:89:::0;:::o;36608:44::-;;;;;;;;;;;;;;;;;;;:::o;36710:36::-;;;;;;;;;;;;;:::o;22722:105::-;22782:13;22815:4;22808:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22722:105;;;:::o;36755:29::-;;;;;;;;;;;;;:::o;24917:442::-;25158:12;:10;:12::i;:::-;25150:20;;:4;:20;;;:60;;;;25174:36;25191:4;25197:12;:10;:12::i;:::-;25174:16;:36::i;:::-;25150:60;25128:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25299:52;25322:4;25328:2;25332:3;25337:7;25346:4;25299:22;:52::i;:::-;24917:442;;;;;:::o;38671:707::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38723:27:::1;:220;;;;;;;;38770:42;38723:220;;;;;;;;38829:42;38723:220;;;;;;;;38888:42;38723:220;;;;;;::::0;::::1;;38960:23;:68;;;;;;;;38994:4;38960:68;;;;;;;;39008:4;38960:68;;;;;;;;39022:4;38960:68;;;;;;::::0;::::1;;39045:15;39063:21;39045:39;;39106:8;39101:268;39124:16;39120:1;:20;;;39101:268;;;39164:14;39205:1;39186:16;:20;;;;:::i;:::-;39181:1;:25;;;:119;;39295:5;39282:6;39289:1;39282:9;;;;;;;;;:::i;:::-;;;;;;39272:19;;:7;:19;;;;:::i;:::-;39271:29;;;;:::i;:::-;39181:119;;;39228:21;39181:119;39164:136;;39325:9;39335:1;39325:12;;;;;;;;;:::i;:::-;;;;;;39317:30;;:38;39348:6;39317:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39147:222;39142:3;;;;;:::i;:::-;;;;39101:268;;;;38710:668;;;38671:707::o:0;23375:524::-;23531:16;23592:3;:10;23573:8;:15;:29;23565:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:30;23708:8;:15;23694:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:63;;23742:9;23737:122;23761:8;:15;23757:1;:19;23737:122;;;23817:30;23827:8;23836:1;23827:11;;;;;;;;:::i;:::-;;;;;;;;23840:3;23844:1;23840:6;;;;;;;;:::i;:::-;;;;;;;;23817:9;:30::i;:::-;23798:13;23812:1;23798:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23778:3;;;;:::i;:::-;;;23737:122;;;;23878:13;23871:20;;;23375:524;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;36661:36::-;;;;;;;;;;;;;;;;;;;:::o;23972:155::-;24067:52;24086:12;:10;:12::i;:::-;24100:8;24110;24067:18;:52::i;:::-;23972:155;;:::o;37870:433::-;37936:14;:12;:14::i;:::-;37928:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;38003:1;37995:5;:9;;;37987:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36828:4;38075:32;;38089:5;38075:11;;;;;;;;;;;:19;;;;:::i;:::-;:32;;;;38051:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;38226:5;38214:17;;36877:10;38214:17;;;;:::i;:::-;38201:9;:30;;38193:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38270:23;38275:10;38287:5;38270:4;:23::i;:::-;37870:433;:::o;37059:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37143:9:::1;37131;;:21;;;;;;;;;;;;;;;;;;37059:103:::0;:::o;36793:39::-;36828:4;36793:39;:::o;38315:344::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36828:4:::1;38418:43;;38432:9;:16;38418:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:43;;38394:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38556:9;38551:99;38575:9;:16;38571:1;:20;38551:99;;;38615:21;38620:9;38630:1;38620:12;;;;;;;;:::i;:::-;;;;;;;;38634:1;38615:4;:21::i;:::-;38593:3;;;;;:::i;:::-;;;;38551:99;;;;38315:344:::0;:::o;36841:46::-;36877:10;36841:46;:::o;24199:168::-;24298:4;24322:18;:27;24341:7;24322:27;;;;;;;;;;;;;;;:37;24350:8;24322:37;;;;;;;;;;;;;;;;;;;;;;;;;24315:44;;24199:168;;;;:::o;37174:109::-;37219:4;37258:15;37245:9;;;;;;;;;;;:28;;;;37238:35;;37174:109;:::o;24439:401::-;24655:12;:10;:12::i;:::-;24647:20;;:4;:20;;;:60;;;;24671:36;24688:4;24694:12;:10;:12::i;:::-;24671:16;:36::i;:::-;24647:60;24625:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24787:45;24805:4;24811:2;24815;24819:6;24827:4;24787:17;:45::i;:::-;24439:401;;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;13356:157::-;13441:4;13480:25;13465:40;;;:11;:40;;;;13458:47;;13356:157;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;28919:88::-;28993:6;28986:4;:13;;;;;;;;;;;;:::i;:::-;;28919:88;:::o;27001:1074::-;27228:7;:14;27214:3;:10;:28;27206:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27320:1;27306:16;;:2;:16;;;;27298:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27377:16;27396:12;:10;:12::i;:::-;27377:31;;27421:60;27442:8;27452:4;27458:2;27462:3;27467:7;27476:4;27421:20;:60::i;:::-;27499:9;27494:421;27518:3;:10;27514:1;:14;27494:421;;;27550:10;27563:3;27567:1;27563:6;;;;;;;;:::i;:::-;;;;;;;;27550:19;;27584:14;27601:7;27609:1;27601:10;;;;;;;;:::i;:::-;;;;;;;;27584:27;;27628:19;27650:9;:13;27660:2;27650:13;;;;;;;;;;;:19;27664:4;27650:19;;;;;;;;;;;;;;;;27628:41;;27707:6;27692:11;:21;;27684:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:6;27826:11;:20;27804:9;:13;27814:2;27804:13;;;;;;;;;;;:19;27818:4;27804:19;;;;;;;;;;;;;;;:42;;;;27897:6;27876:9;:13;27886:2;27876:13;;;;;;;;;;;:17;27890:2;27876:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27535:380;;;27530:3;;;;:::i;:::-;;;27494:421;;;;27962:2;27932:47;;27956:4;27932:47;;27946:8;27932:47;;;27966:3;27971:7;27932:47;;;;;;;:::i;:::-;;;;;;;;27992:75;28028:8;28038:4;28044:2;28048:3;28053:7;28062:4;27992:35;:75::i;:::-;27195:880;27001:1074;;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;33187:331::-;33342:8;33333:17;;:5;:17;;;;33325:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:8;33407:18;:25;33426:5;33407:25;;;;;;;;;;;;;;;:35;33433:8;33407:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33491:8;33469:41;;33484:5;33469:41;;;33501:8;33469:41;;;;;;:::i;:::-;;;;;;;;33187:331;;;:::o;37295:563::-;37372:5;37357:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37406:1;37398:5;:9;;;37394:455;;;37426:20;37471:5;37463:14;;37449:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37426:52;;37495:24;37544:5;37536:14;;37522:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37495:56;;37577:8;37572:141;37595:5;37591:9;;:1;:9;;;37572:141;;;37659:1;37651:5;37637:11;;;;;;;;;;;:19;;;;:::i;:::-;:23;;;;:::i;:::-;37628:32;;:3;37632:1;37628:6;;;;;;;;;;:::i;:::-;;;;;;;:32;;;;;37694:1;37681:7;37689:1;37681:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;37602:3;;;;;:::i;:::-;;;;37572:141;;;;37733:32;37744:2;37748:3;37753:7;37733:32;;;;;;;;;;;;:10;:32::i;:::-;37409:370;;37394:455;;;37802:33;37808:2;37826:1;37812:11;;;;;;;;;;;:15;;;;:::i;:::-;37802:33;;37829:1;37802:33;;;;;;;;;;;;:5;:33::i;:::-;37394:455;37295:563;;:::o;25823:820::-;26025:1;26011:16;;:2;:16;;;;26003:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:16;26101:12;:10;:12::i;:::-;26082:31;;26126:96;26147:8;26157:4;26163:2;26167:21;26185:2;26167:17;:21::i;:::-;26190:25;26208:6;26190:17;:25::i;:::-;26217:4;26126:20;:96::i;:::-;26235:19;26257:9;:13;26267:2;26257:13;;;;;;;;;;;:19;26271:4;26257:19;;;;;;;;;;;;;;;;26235:41;;26310:6;26295:11;:21;;26287:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26435:6;26421:11;:20;26399:9;:13;26409:2;26399:13;;;;;;;;;;;:19;26413:4;26399:19;;;;;;;;;;;;;;;:42;;;;26484:6;26463:9;:13;26473:2;26463:13;;;;;;;;;;;:17;26477:2;26463:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26539:2;26508:46;;26533:4;26508:46;;26523:8;26508:46;;;26543:2;26547:6;26508:46;;;;;;;:::i;:::-;;;;;;;;26567:68;26598:8;26608:4;26614:2;26618;26622:6;26630:4;26567:30;:68::i;:::-;25992:651;;25823:820;;;;;:::o;34474:221::-;;;;;;;:::o;35455:813::-;35695:15;:2;:13;;;:15::i;:::-;35691:570;;;35748:2;35731:43;;;35775:8;35785:4;35791:3;35796:7;35805:4;35731:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35727:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36123:6;36116:14;;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;;;36172:62;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;35904:48;;;35892:60;;;:8;:60;;;;35888:159;;35977:50;;;;;;;;;;:::i;:::-;;;;;;;;35888:159;35811:251;35691:570;35455:813;;;;;;:::o;30318:735::-;30510:1;30496:16;;:2;:16;;;;30488:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30583:7;:14;30569:3;:10;:28;30561:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30655:16;30674:12;:10;:12::i;:::-;30655:31;;30699:66;30720:8;30738:1;30742:2;30746:3;30751:7;30760:4;30699:20;:66::i;:::-;30783:9;30778:103;30802:3;:10;30798:1;:14;30778:103;;;30859:7;30867:1;30859:10;;;;;;;;:::i;:::-;;;;;;;;30834:9;:17;30844:3;30848:1;30844:6;;;;;;;;:::i;:::-;;;;;;;;30834:17;;;;;;;;;;;:21;30852:2;30834:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30814:3;;;;;:::i;:::-;;;;30778:103;;;;30934:2;30898:53;;30930:1;30898:53;;30912:8;30898:53;;;30938:3;30943:7;30898:53;;;;;;;:::i;:::-;;;;;;;;30964:81;31000:8;31018:1;31022:2;31026:3;31031:7;31040:4;30964:35;:81::i;:::-;30477:576;30318:735;;;;:::o;29393:569::-;29560:1;29546:16;;:2;:16;;;;29538:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:16;29632:12;:10;:12::i;:::-;29613:31;;29657:102;29678:8;29696:1;29700:2;29704:21;29722:2;29704:17;:21::i;:::-;29727:25;29745:6;29727:17;:25::i;:::-;29754:4;29657:20;:102::i;:::-;29793:6;29772:9;:13;29782:2;29772:13;;;;;;;;;;;:17;29786:2;29772:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29852:2;29815:52;;29848:1;29815:52;;29830:8;29815:52;;;29856:2;29860:6;29815:52;;;;;;;:::i;:::-;;;;;;;;29880:74;29911:8;29929:1;29933:2;29937;29941:6;29949:4;29880:30;:74::i;:::-;29527:435;29393:569;;;;:::o;36276:198::-;36342:16;36371:22;36410:1;36396:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36371:41;;36434:7;36423:5;36429:1;36423:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36461:5;36454:12;;;36276:198;;;:::o;34703:744::-;34918:15;:2;:13;;;:15::i;:::-;34914:526;;;34971:2;34954:38;;;34993:8;35003:4;35009:2;35013:6;35021:4;34954:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34950:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35302:6;35295:14;;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;;;35351:62;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;35088:43;;;35076:55;;;:8;:55;;;;35072:154;;35156:50;;;;;;;;;;:::i;:::-;;;;;;;;35072:154;35027:214;34914:526;34703:744;;;;;;:::o;4243:387::-;4303:4;4511:12;4578:7;4566:20;4558:28;;4621:1;4614:4;:8;4607:15;;;4243:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:137::-;4598:5;4636:6;4623:20;4614:29;;4652:32;4678:5;4652:32;:::i;:::-;4553:137;;;;:::o;4696:329::-;4755:6;4804:2;4792:9;4783:7;4779:23;4775:32;4772:119;;;4810:79;;:::i;:::-;4772:119;4930:1;4955:53;5000:7;4991:6;4980:9;4976:22;4955:53;:::i;:::-;4945:63;;4901:117;4696:329;;;;:::o;5031:474::-;5099:6;5107;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5253:117;5409:2;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5380:118;5031:474;;;;;:::o;5511:1509::-;5665:6;5673;5681;5689;5697;5746:3;5734:9;5725:7;5721:23;5717:33;5714:120;;;5753:79;;:::i;:::-;5714:120;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;6000:2;6026:53;6071:7;6062:6;6051:9;6047:22;6026:53;:::i;:::-;6016:63;;5971:118;6156:2;6145:9;6141:18;6128:32;6187:18;6179:6;6176:30;6173:117;;;6209:79;;:::i;:::-;6173:117;6314:78;6384:7;6375:6;6364:9;6360:22;6314:78;:::i;:::-;6304:88;;6099:303;6469:2;6458:9;6454:18;6441:32;6500:18;6492:6;6489:30;6486:117;;;6522:79;;:::i;:::-;6486:117;6627:78;6697:7;6688:6;6677:9;6673:22;6627:78;:::i;:::-;6617:88;;6412:303;6782:3;6771:9;6767:19;6754:33;6814:18;6806:6;6803:30;6800:117;;;6836:79;;:::i;:::-;6800:117;6941:62;6995:7;6986:6;6975:9;6971:22;6941:62;:::i;:::-;6931:72;;6725:288;5511:1509;;;;;;;;:::o;7026:1089::-;7130:6;7138;7146;7154;7162;7211:3;7199:9;7190:7;7186:23;7182:33;7179:120;;;7218:79;;:::i;:::-;7179:120;7338:1;7363:53;7408:7;7399:6;7388:9;7384:22;7363:53;:::i;:::-;7353:63;;7309:117;7465:2;7491:53;7536:7;7527:6;7516:9;7512:22;7491:53;:::i;:::-;7481:63;;7436:118;7593:2;7619:53;7664:7;7655:6;7644:9;7640:22;7619:53;:::i;:::-;7609:63;;7564:118;7721:2;7747:53;7792:7;7783:6;7772:9;7768:22;7747:53;:::i;:::-;7737:63;;7692:118;7877:3;7866:9;7862:19;7849:33;7909:18;7901:6;7898:30;7895:117;;;7931:79;;:::i;:::-;7895:117;8036:62;8090:7;8081:6;8070:9;8066:22;8036:62;:::i;:::-;8026:72;;7820:288;7026:1089;;;;;;;;:::o;8121:468::-;8186:6;8194;8243:2;8231:9;8222:7;8218:23;8214:32;8211:119;;;8249:79;;:::i;:::-;8211:119;8369:1;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8340:117;8496:2;8522:50;8564:7;8555:6;8544:9;8540:22;8522:50;:::i;:::-;8512:60;;8467:115;8121:468;;;;;:::o;8595:474::-;8663:6;8671;8720:2;8708:9;8699:7;8695:23;8691:32;8688:119;;;8726:79;;:::i;:::-;8688:119;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;8973:2;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8944:118;8595:474;;;;;:::o;9075:539::-;9159:6;9208:2;9196:9;9187:7;9183:23;9179:32;9176:119;;;9214:79;;:::i;:::-;9176:119;9362:1;9351:9;9347:17;9334:31;9392:18;9384:6;9381:30;9378:117;;;9414:79;;:::i;:::-;9378:117;9519:78;9589:7;9580:6;9569:9;9565:22;9519:78;:::i;:::-;9509:88;;9305:302;9075:539;;;;:::o;9620:894::-;9738:6;9746;9795:2;9783:9;9774:7;9770:23;9766:32;9763:119;;;9801:79;;:::i;:::-;9763:119;9949:1;9938:9;9934:17;9921:31;9979:18;9971:6;9968:30;9965:117;;;10001:79;;:::i;:::-;9965:117;10106:78;10176:7;10167:6;10156:9;10152:22;10106:78;:::i;:::-;10096:88;;9892:302;10261:2;10250:9;10246:18;10233:32;10292:18;10284:6;10281:30;10278:117;;;10314:79;;:::i;:::-;10278:117;10419:78;10489:7;10480:6;10469:9;10465:22;10419:78;:::i;:::-;10409:88;;10204:303;9620:894;;;;;:::o;10520:327::-;10578:6;10627:2;10615:9;10606:7;10602:23;10598:32;10595:119;;;10633:79;;:::i;:::-;10595:119;10753:1;10778:52;10822:7;10813:6;10802:9;10798:22;10778:52;:::i;:::-;10768:62;;10724:116;10520:327;;;;:::o;10853:349::-;10922:6;10971:2;10959:9;10950:7;10946:23;10942:32;10939:119;;;10977:79;;:::i;:::-;10939:119;11097:1;11122:63;11177:7;11168:6;11157:9;11153:22;11122:63;:::i;:::-;11112:73;;11068:127;10853:349;;;;:::o;11208:509::-;11277:6;11326:2;11314:9;11305:7;11301:23;11297:32;11294:119;;;11332:79;;:::i;:::-;11294:119;11480:1;11469:9;11465:17;11452:31;11510:18;11502:6;11499:30;11496:117;;;11532:79;;:::i;:::-;11496:117;11637:63;11692:7;11683:6;11672:9;11668:22;11637:63;:::i;:::-;11627:73;;11423:287;11208:509;;;;:::o;11723:329::-;11782:6;11831:2;11819:9;11810:7;11806:23;11802:32;11799:119;;;11837:79;;:::i;:::-;11799:119;11957:1;11982:53;12027:7;12018:6;12007:9;12003:22;11982:53;:::i;:::-;11972:63;;11928:117;11723:329;;;;:::o;12058:327::-;12116:6;12165:2;12153:9;12144:7;12140:23;12136:32;12133:119;;;12171:79;;:::i;:::-;12133:119;12291:1;12316:52;12360:7;12351:6;12340:9;12336:22;12316:52;:::i;:::-;12306:62;;12262:116;12058:327;;;;:::o;12391:179::-;12460:10;12481:46;12523:3;12515:6;12481:46;:::i;:::-;12559:4;12554:3;12550:14;12536:28;;12391:179;;;;:::o;12576:118::-;12663:24;12681:5;12663:24;:::i;:::-;12658:3;12651:37;12576:118;;:::o;12730:732::-;12849:3;12878:54;12926:5;12878:54;:::i;:::-;12948:86;13027:6;13022:3;12948:86;:::i;:::-;12941:93;;13058:56;13108:5;13058:56;:::i;:::-;13137:7;13168:1;13153:284;13178:6;13175:1;13172:13;13153:284;;;13254:6;13248:13;13281:63;13340:3;13325:13;13281:63;:::i;:::-;13274:70;;13367:60;13420:6;13367:60;:::i;:::-;13357:70;;13213:224;13200:1;13197;13193:9;13188:14;;13153:284;;;13157:14;13453:3;13446:10;;12854:608;;;12730:732;;;;:::o;13468:109::-;13549:21;13564:5;13549:21;:::i;:::-;13544:3;13537:34;13468:109;;:::o;13583:360::-;13669:3;13697:38;13729:5;13697:38;:::i;:::-;13751:70;13814:6;13809:3;13751:70;:::i;:::-;13744:77;;13830:52;13875:6;13870:3;13863:4;13856:5;13852:16;13830:52;:::i;:::-;13907:29;13929:6;13907:29;:::i;:::-;13902:3;13898:39;13891:46;;13673:270;13583:360;;;;:::o;13949:364::-;14037:3;14065:39;14098:5;14065:39;:::i;:::-;14120:71;14184:6;14179:3;14120:71;:::i;:::-;14113:78;;14200:52;14245:6;14240:3;14233:4;14226:5;14222:16;14200:52;:::i;:::-;14277:29;14299:6;14277:29;:::i;:::-;14272:3;14268:39;14261:46;;14041:272;13949:364;;;;:::o;14319:366::-;14461:3;14482:67;14546:2;14541:3;14482:67;:::i;:::-;14475:74;;14558:93;14647:3;14558:93;:::i;:::-;14676:2;14671:3;14667:12;14660:19;;14319:366;;;:::o;14691:::-;14833:3;14854:67;14918:2;14913:3;14854:67;:::i;:::-;14847:74;;14930:93;15019:3;14930:93;:::i;:::-;15048:2;15043:3;15039:12;15032:19;;14691:366;;;:::o;15063:::-;15205:3;15226:67;15290:2;15285:3;15226:67;:::i;:::-;15219:74;;15302:93;15391:3;15302:93;:::i;:::-;15420:2;15415:3;15411:12;15404:19;;15063:366;;;:::o;15435:::-;15577:3;15598:67;15662:2;15657:3;15598:67;:::i;:::-;15591:74;;15674:93;15763:3;15674:93;:::i;:::-;15792:2;15787:3;15783:12;15776:19;;15435:366;;;:::o;15807:::-;15949:3;15970:67;16034:2;16029:3;15970:67;:::i;:::-;15963:74;;16046:93;16135:3;16046:93;:::i;:::-;16164:2;16159:3;16155:12;16148:19;;15807:366;;;:::o;16179:::-;16321:3;16342:67;16406:2;16401:3;16342:67;:::i;:::-;16335:74;;16418:93;16507:3;16418:93;:::i;:::-;16536:2;16531:3;16527:12;16520:19;;16179:366;;;:::o;16551:::-;16693:3;16714:67;16778:2;16773:3;16714:67;:::i;:::-;16707:74;;16790:93;16879:3;16790:93;:::i;:::-;16908:2;16903:3;16899:12;16892:19;;16551:366;;;:::o;16923:::-;17065:3;17086:67;17150:2;17145:3;17086:67;:::i;:::-;17079:74;;17162:93;17251:3;17162:93;:::i;:::-;17280:2;17275:3;17271:12;17264:19;;16923:366;;;:::o;17295:::-;17437:3;17458:67;17522:2;17517:3;17458:67;:::i;:::-;17451:74;;17534:93;17623:3;17534:93;:::i;:::-;17652:2;17647:3;17643:12;17636:19;;17295:366;;;:::o;17667:::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:::-;18181:3;18202:67;18266:2;18261:3;18202:67;:::i;:::-;18195:74;;18278:93;18367:3;18278:93;:::i;:::-;18396:2;18391:3;18387:12;18380:19;;18039:366;;;:::o;18411:::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:::-;18925:3;18946:67;19010:2;19005:3;18946:67;:::i;:::-;18939:74;;19022:93;19111:3;19022:93;:::i;:::-;19140:2;19135:3;19131:12;19124:19;;18783:366;;;:::o;19155:::-;19297:3;19318:67;19382:2;19377:3;19318:67;:::i;:::-;19311:74;;19394:93;19483:3;19394:93;:::i;:::-;19512:2;19507:3;19503:12;19496:19;;19155:366;;;:::o;19527:::-;19669:3;19690:67;19754:2;19749:3;19690:67;:::i;:::-;19683:74;;19766:93;19855:3;19766:93;:::i;:::-;19884:2;19879:3;19875:12;19868:19;;19527:366;;;:::o;19899:::-;20041:3;20062:67;20126:2;20121:3;20062:67;:::i;:::-;20055:74;;20138:93;20227:3;20138:93;:::i;:::-;20256:2;20251:3;20247:12;20240:19;;19899:366;;;:::o;20271:::-;20413:3;20434:67;20498:2;20493:3;20434:67;:::i;:::-;20427:74;;20510:93;20599:3;20510:93;:::i;:::-;20628:2;20623:3;20619:12;20612:19;;20271:366;;;:::o;20643:108::-;20720:24;20738:5;20720:24;:::i;:::-;20715:3;20708:37;20643:108;;:::o;20757:118::-;20844:24;20862:5;20844:24;:::i;:::-;20839:3;20832:37;20757:118;;:::o;20881:115::-;20966:23;20983:5;20966:23;:::i;:::-;20961:3;20954:36;20881:115;;:::o;21002:222::-;21095:4;21133:2;21122:9;21118:18;21110:26;;21146:71;21214:1;21203:9;21199:17;21190:6;21146:71;:::i;:::-;21002:222;;;;:::o;21230:1053::-;21553:4;21591:3;21580:9;21576:19;21568:27;;21605:71;21673:1;21662:9;21658:17;21649:6;21605:71;:::i;:::-;21686:72;21754:2;21743:9;21739:18;21730:6;21686:72;:::i;:::-;21805:9;21799:4;21795:20;21790:2;21779:9;21775:18;21768:48;21833:108;21936:4;21927:6;21833:108;:::i;:::-;21825:116;;21988:9;21982:4;21978:20;21973:2;21962:9;21958:18;21951:48;22016:108;22119:4;22110:6;22016:108;:::i;:::-;22008:116;;22172:9;22166:4;22162:20;22156:3;22145:9;22141:19;22134:49;22200:76;22271:4;22262:6;22200:76;:::i;:::-;22192:84;;21230:1053;;;;;;;;:::o;22289:751::-;22512:4;22550:3;22539:9;22535:19;22527:27;;22564:71;22632:1;22621:9;22617:17;22608:6;22564:71;:::i;:::-;22645:72;22713:2;22702:9;22698:18;22689:6;22645:72;:::i;:::-;22727;22795:2;22784:9;22780:18;22771:6;22727:72;:::i;:::-;22809;22877:2;22866:9;22862:18;22853:6;22809:72;:::i;:::-;22929:9;22923:4;22919:20;22913:3;22902:9;22898:19;22891:49;22957:76;23028:4;23019:6;22957:76;:::i;:::-;22949:84;;22289:751;;;;;;;;:::o;23046:373::-;23189:4;23227:2;23216:9;23212:18;23204:26;;23276:9;23270:4;23266:20;23262:1;23251:9;23247:17;23240:47;23304:108;23407:4;23398:6;23304:108;:::i;:::-;23296:116;;23046:373;;;;:::o;23425:634::-;23646:4;23684:2;23673:9;23669:18;23661:26;;23733:9;23727:4;23723:20;23719:1;23708:9;23704:17;23697:47;23761:108;23864:4;23855:6;23761:108;:::i;:::-;23753:116;;23916:9;23910:4;23906:20;23901:2;23890:9;23886:18;23879:48;23944:108;24047:4;24038:6;23944:108;:::i;:::-;23936:116;;23425:634;;;;;:::o;24065:210::-;24152:4;24190:2;24179:9;24175:18;24167:26;;24203:65;24265:1;24254:9;24250:17;24241:6;24203:65;:::i;:::-;24065:210;;;;:::o;24281:313::-;24394:4;24432:2;24421:9;24417:18;24409:26;;24481:9;24475:4;24471:20;24467:1;24456:9;24452:17;24445:47;24509:78;24582:4;24573:6;24509:78;:::i;:::-;24501:86;;24281:313;;;;:::o;24600:419::-;24766:4;24804:2;24793:9;24789:18;24781:26;;24853:9;24847:4;24843:20;24839:1;24828:9;24824:17;24817:47;24881:131;25007:4;24881:131;:::i;:::-;24873:139;;24600:419;;;:::o;25025:::-;25191:4;25229:2;25218:9;25214:18;25206:26;;25278:9;25272:4;25268:20;25264:1;25253:9;25249:17;25242:47;25306:131;25432:4;25306:131;:::i;:::-;25298:139;;25025:419;;;:::o;25450:::-;25616:4;25654:2;25643:9;25639:18;25631:26;;25703:9;25697:4;25693:20;25689:1;25678:9;25674:17;25667:47;25731:131;25857:4;25731:131;:::i;:::-;25723:139;;25450:419;;;:::o;25875:::-;26041:4;26079:2;26068:9;26064:18;26056:26;;26128:9;26122:4;26118:20;26114:1;26103:9;26099:17;26092:47;26156:131;26282:4;26156:131;:::i;:::-;26148:139;;25875:419;;;:::o;26300:::-;26466:4;26504:2;26493:9;26489:18;26481:26;;26553:9;26547:4;26543:20;26539:1;26528:9;26524:17;26517:47;26581:131;26707:4;26581:131;:::i;:::-;26573:139;;26300:419;;;:::o;26725:::-;26891:4;26929:2;26918:9;26914:18;26906:26;;26978:9;26972:4;26968:20;26964:1;26953:9;26949:17;26942:47;27006:131;27132:4;27006:131;:::i;:::-;26998:139;;26725:419;;;:::o;27150:::-;27316:4;27354:2;27343:9;27339:18;27331:26;;27403:9;27397:4;27393:20;27389:1;27378:9;27374:17;27367:47;27431:131;27557:4;27431:131;:::i;:::-;27423:139;;27150:419;;;:::o;27575:::-;27741:4;27779:2;27768:9;27764:18;27756:26;;27828:9;27822:4;27818:20;27814:1;27803:9;27799:17;27792:47;27856:131;27982:4;27856:131;:::i;:::-;27848:139;;27575:419;;;:::o;28000:::-;28166:4;28204:2;28193:9;28189:18;28181:26;;28253:9;28247:4;28243:20;28239:1;28228:9;28224:17;28217:47;28281:131;28407:4;28281:131;:::i;:::-;28273:139;;28000:419;;;:::o;28425:::-;28591:4;28629:2;28618:9;28614:18;28606:26;;28678:9;28672:4;28668:20;28664:1;28653:9;28649:17;28642:47;28706:131;28832:4;28706:131;:::i;:::-;28698:139;;28425:419;;;:::o;28850:::-;29016:4;29054:2;29043:9;29039:18;29031:26;;29103:9;29097:4;29093:20;29089:1;29078:9;29074:17;29067:47;29131:131;29257:4;29131:131;:::i;:::-;29123:139;;28850:419;;;:::o;29275:::-;29441:4;29479:2;29468:9;29464:18;29456:26;;29528:9;29522:4;29518:20;29514:1;29503:9;29499:17;29492:47;29556:131;29682:4;29556:131;:::i;:::-;29548:139;;29275:419;;;:::o;29700:::-;29866:4;29904:2;29893:9;29889:18;29881:26;;29953:9;29947:4;29943:20;29939:1;29928:9;29924:17;29917:47;29981:131;30107:4;29981:131;:::i;:::-;29973:139;;29700:419;;;:::o;30125:::-;30291:4;30329:2;30318:9;30314:18;30306:26;;30378:9;30372:4;30368:20;30364:1;30353:9;30349:17;30342:47;30406:131;30532:4;30406:131;:::i;:::-;30398:139;;30125:419;;;:::o;30550:::-;30716:4;30754:2;30743:9;30739:18;30731:26;;30803:9;30797:4;30793:20;30789:1;30778:9;30774:17;30767:47;30831:131;30957:4;30831:131;:::i;:::-;30823:139;;30550:419;;;:::o;30975:::-;31141:4;31179:2;31168:9;31164:18;31156:26;;31228:9;31222:4;31218:20;31214:1;31203:9;31199:17;31192:47;31256:131;31382:4;31256:131;:::i;:::-;31248:139;;30975:419;;;:::o;31400:::-;31566:4;31604:2;31593:9;31589:18;31581:26;;31653:9;31647:4;31643:20;31639:1;31628:9;31624:17;31617:47;31681:131;31807:4;31681:131;:::i;:::-;31673:139;;31400:419;;;:::o;31825:222::-;31918:4;31956:2;31945:9;31941:18;31933:26;;31969:71;32037:1;32026:9;32022:17;32013:6;31969:71;:::i;:::-;31825:222;;;;:::o;32053:332::-;32174:4;32212:2;32201:9;32197:18;32189:26;;32225:71;32293:1;32282:9;32278:17;32269:6;32225:71;:::i;:::-;32306:72;32374:2;32363:9;32359:18;32350:6;32306:72;:::i;:::-;32053:332;;;;;:::o;32391:218::-;32482:4;32520:2;32509:9;32505:18;32497:26;;32533:69;32599:1;32588:9;32584:17;32575:6;32533:69;:::i;:::-;32391:218;;;;:::o;32615:129::-;32649:6;32676:20;;:::i;:::-;32666:30;;32705:33;32733:4;32725:6;32705:33;:::i;:::-;32615:129;;;:::o;32750:75::-;32783:6;32816:2;32810:9;32800:19;;32750:75;:::o;32831:311::-;32908:4;32998:18;32990:6;32987:30;32984:56;;;33020:18;;:::i;:::-;32984:56;33070:4;33062:6;33058:17;33050:25;;33130:4;33124;33120:15;33112:23;;32831:311;;;:::o;33148:::-;33225:4;33315:18;33307:6;33304:30;33301:56;;;33337:18;;:::i;:::-;33301:56;33387:4;33379:6;33375:17;33367:25;;33447:4;33441;33437:15;33429:23;;33148:311;;;:::o;33465:307::-;33526:4;33616:18;33608:6;33605:30;33602:56;;;33638:18;;:::i;:::-;33602:56;33676:29;33698:6;33676:29;:::i;:::-;33668:37;;33760:4;33754;33750:15;33742:23;;33465:307;;;:::o;33778:308::-;33840:4;33930:18;33922:6;33919:30;33916:56;;;33952:18;;:::i;:::-;33916:56;33990:29;34012:6;33990:29;:::i;:::-;33982:37;;34074:4;34068;34064:15;34056:23;;33778:308;;;:::o;34092:132::-;34159:4;34182:3;34174:11;;34212:4;34207:3;34203:14;34195:22;;34092:132;;;:::o;34230:114::-;34297:6;34331:5;34325:12;34315:22;;34230:114;;;:::o;34350:98::-;34401:6;34435:5;34429:12;34419:22;;34350:98;;;:::o;34454:99::-;34506:6;34540:5;34534:12;34524:22;;34454:99;;;:::o;34559:113::-;34629:4;34661;34656:3;34652:14;34644:22;;34559:113;;;:::o;34678:184::-;34777:11;34811:6;34806:3;34799:19;34851:4;34846:3;34842:14;34827:29;;34678:184;;;;:::o;34868:168::-;34951:11;34985:6;34980:3;34973:19;35025:4;35020:3;35016:14;35001:29;;34868:168;;;;:::o;35042:169::-;35126:11;35160:6;35155:3;35148:19;35200:4;35195:3;35191:14;35176:29;;35042:169;;;;:::o;35217:305::-;35257:3;35276:20;35294:1;35276:20;:::i;:::-;35271:25;;35310:20;35328:1;35310:20;:::i;:::-;35305:25;;35464:1;35396:66;35392:74;35389:1;35386:81;35383:107;;;35470:18;;:::i;:::-;35383:107;35514:1;35511;35507:9;35500:16;;35217:305;;;;:::o;35528:246::-;35567:3;35586:19;35603:1;35586:19;:::i;:::-;35581:24;;35619:19;35636:1;35619:19;:::i;:::-;35614:24;;35716:1;35704:10;35700:18;35697:1;35694:25;35691:51;;;35722:18;;:::i;:::-;35691:51;35766:1;35763;35759:9;35752:16;;35528:246;;;;:::o;35780:185::-;35820:1;35837:20;35855:1;35837:20;:::i;:::-;35832:25;;35871:20;35889:1;35871:20;:::i;:::-;35866:25;;35910:1;35900:35;;35915:18;;:::i;:::-;35900:35;35957:1;35954;35950:9;35945:14;;35780:185;;;;:::o;35971:348::-;36011:7;36034:20;36052:1;36034:20;:::i;:::-;36029:25;;36068:20;36086:1;36068:20;:::i;:::-;36063:25;;36256:1;36188:66;36184:74;36181:1;36178:81;36173:1;36166:9;36159:17;36155:105;36152:131;;;36263:18;;:::i;:::-;36152:131;36311:1;36308;36304:9;36293:20;;35971:348;;;;:::o;36325:191::-;36365:4;36385:20;36403:1;36385:20;:::i;:::-;36380:25;;36419:20;36437:1;36419:20;:::i;:::-;36414:25;;36458:1;36455;36452:8;36449:34;;;36463:18;;:::i;:::-;36449:34;36508:1;36505;36501:9;36493:17;;36325:191;;;;:::o;36522:188::-;36561:4;36581:19;36598:1;36581:19;:::i;:::-;36576:24;;36614:19;36631:1;36614:19;:::i;:::-;36609:24;;36652:1;36649;36646:8;36643:34;;;36657:18;;:::i;:::-;36643:34;36702:1;36699;36695:9;36687:17;;36522:188;;;;:::o;36716:96::-;36753:7;36782:24;36800:5;36782:24;:::i;:::-;36771:35;;36716:96;;;:::o;36818:90::-;36852:7;36895:5;36888:13;36881:21;36870:32;;36818:90;;;:::o;36914:149::-;36950:7;36990:66;36983:5;36979:78;36968:89;;36914:149;;;:::o;37069:126::-;37106:7;37146:42;37139:5;37135:54;37124:65;;37069:126;;;:::o;37201:77::-;37238:7;37267:5;37256:16;;37201:77;;;:::o;37284:93::-;37320:7;37360:10;37353:5;37349:22;37338:33;;37284:93;;;:::o;37383:154::-;37467:6;37462:3;37457;37444:30;37529:1;37520:6;37515:3;37511:16;37504:27;37383:154;;;:::o;37543:307::-;37611:1;37621:113;37635:6;37632:1;37629:13;37621:113;;;37720:1;37715:3;37711:11;37705:18;37701:1;37696:3;37692:11;37685:39;37657:2;37654:1;37650:10;37645:15;;37621:113;;;37752:6;37749:1;37746:13;37743:101;;;37832:1;37823:6;37818:3;37814:16;37807:27;37743:101;37592:258;37543:307;;;:::o;37856:320::-;37900:6;37937:1;37931:4;37927:12;37917:22;;37984:1;37978:4;37974:12;38005:18;37995:81;;38061:4;38053:6;38049:17;38039:27;;37995:81;38123:2;38115:6;38112:14;38092:18;38089:38;38086:84;;;38142:18;;:::i;:::-;38086:84;37907:269;37856:320;;;:::o;38182:281::-;38265:27;38287:4;38265:27;:::i;:::-;38257:6;38253:40;38395:6;38383:10;38380:22;38359:18;38347:10;38344:34;38341:62;38338:88;;;38406:18;;:::i;:::-;38338:88;38446:10;38442:2;38435:22;38225:238;38182:281;;:::o;38469:233::-;38508:3;38531:24;38549:5;38531:24;:::i;:::-;38522:33;;38577:66;38570:5;38567:77;38564:103;;;38647:18;;:::i;:::-;38564:103;38694:1;38687:5;38683:13;38676:20;;38469:233;;;:::o;38708:175::-;38746:3;38769:23;38786:5;38769:23;:::i;:::-;38760:32;;38814:10;38807:5;38804:21;38801:47;;;38828:18;;:::i;:::-;38801:47;38875:1;38868:5;38864:13;38857:20;;38708:175;;;:::o;38889:180::-;38937:77;38934:1;38927:88;39034:4;39031:1;39024:15;39058:4;39055:1;39048:15;39075:180;39123:77;39120:1;39113:88;39220:4;39217:1;39210:15;39244:4;39241:1;39234:15;39261:180;39309:77;39306:1;39299:88;39406:4;39403:1;39396:15;39430:4;39427:1;39420:15;39447:180;39495:77;39492:1;39485:88;39592:4;39589:1;39582:15;39616:4;39613:1;39606:15;39633:180;39681:77;39678:1;39671:88;39778:4;39775:1;39768:15;39802:4;39799:1;39792:15;39819:183;39854:3;39892:1;39874:16;39871:23;39868:128;;;39930:1;39927;39924;39909:23;39952:34;39983:1;39977:8;39952:34;:::i;:::-;39945:41;;39868:128;39819:183;:::o;40008:117::-;40117:1;40114;40107:12;40131:117;40240:1;40237;40230:12;40254:117;40363:1;40360;40353:12;40377:117;40486:1;40483;40476:12;40500:117;40609:1;40606;40599:12;40623:102;40664:6;40715:2;40711:7;40706:2;40699:5;40695:14;40691:28;40681:38;;40623:102;;;:::o;40731:106::-;40775:8;40824:5;40819:3;40815:15;40794:36;;40731:106;;;:::o;40843:239::-;40983:34;40979:1;40971:6;40967:14;40960:58;41052:22;41047:2;41039:6;41035:15;41028:47;40843:239;:::o;41088:227::-;41228:34;41224:1;41216:6;41212:14;41205:58;41297:10;41292:2;41284:6;41280:15;41273:35;41088:227;:::o;41321:230::-;41461:34;41457:1;41449:6;41445:14;41438:58;41530:13;41525:2;41517:6;41513:15;41506:38;41321:230;:::o;41557:225::-;41697:34;41693:1;41685:6;41681:14;41674:58;41766:8;41761:2;41753:6;41749:15;41742:33;41557:225;:::o;41788:228::-;41928:34;41924:1;41916:6;41912:14;41905:58;41997:11;41992:2;41984:6;41980:15;41973:36;41788:228;:::o;42022:179::-;42162:31;42158:1;42150:6;42146:14;42139:55;42022:179;:::o;42207:167::-;42347:19;42343:1;42335:6;42331:14;42324:43;42207:167;:::o;42380:224::-;42520:34;42516:1;42508:6;42504:14;42497:58;42589:7;42584:2;42576:6;42572:15;42565:32;42380:224;:::o;42610:237::-;42750:34;42746:1;42738:6;42734:14;42727:58;42819:20;42814:2;42806:6;42802:15;42795:45;42610:237;:::o;42853:229::-;42993:34;42989:1;42981:6;42977:14;42970:58;43062:12;43057:2;43049:6;43045:15;43038:37;42853:229;:::o;43088:228::-;43228:34;43224:1;43216:6;43212:14;43205:58;43297:11;43292:2;43284:6;43280:15;43273:36;43088:228;:::o;43322:182::-;43462:34;43458:1;43450:6;43446:14;43439:58;43322:182;:::o;43510:169::-;43650:21;43646:1;43638:6;43634:14;43627:45;43510:169;:::o;43685:228::-;43825:34;43821:1;43813:6;43809:14;43802:58;43894:11;43889:2;43881:6;43877:15;43870:36;43685:228;:::o;43919:::-;44059:34;44055:1;44047:6;44043:14;44036:58;44128:11;44123:2;44115:6;44111:15;44104:36;43919:228;:::o;44153:227::-;44293:34;44289:1;44281:6;44277:14;44270:58;44362:10;44357:2;44349:6;44345:15;44338:35;44153:227;:::o;44386:220::-;44526:34;44522:1;44514:6;44510:14;44503:58;44595:3;44590:2;44582:6;44578:15;44571:28;44386:220;:::o;44612:711::-;44651:3;44689:4;44671:16;44668:26;44665:39;;;44697:5;;44665:39;44726:20;;:::i;:::-;44801:1;44783:16;44779:24;44776:1;44770:4;44755:49;44834:4;44828:11;44933:16;44926:4;44918:6;44914:17;44911:39;44878:18;44870:6;44867:30;44851:113;44848:146;;;44979:5;;;;44848:146;45025:6;45019:4;45015:17;45061:3;45055:10;45088:18;45080:6;45077:30;45074:43;;;45110:5;;;;;;45074:43;45158:6;45151:4;45146:3;45142:14;45138:27;45217:1;45199:16;45195:24;45189:4;45185:35;45180:3;45177:44;45174:57;;;45224:5;;;;;;;45174:57;45241;45289:6;45283:4;45279:17;45271:6;45267:30;45261:4;45241:57;:::i;:::-;45314:3;45307:10;;44655:668;;;;;44612:711;;:::o;45329:122::-;45402:24;45420:5;45402:24;:::i;:::-;45395:5;45392:35;45382:63;;45441:1;45438;45431:12;45382:63;45329:122;:::o;45457:116::-;45527:21;45542:5;45527:21;:::i;:::-;45520:5;45517:32;45507:60;;45563:1;45560;45553:12;45507:60;45457:116;:::o;45579:120::-;45651:23;45668:5;45651:23;:::i;:::-;45644:5;45641:34;45631:62;;45689:1;45686;45679:12;45631:62;45579:120;:::o;45705:122::-;45778:24;45796:5;45778:24;:::i;:::-;45771:5;45768:35;45758:63;;45817:1;45814;45807:12;45758:63;45705:122;:::o;45833:120::-;45905:23;45922:5;45905:23;:::i;:::-;45898:5;45895:34;45885:62;;45943:1;45940;45933:12;45885:62;45833:120;:::o

Swarm Source

ipfs://629e765e3a9bff586bd04f6dd794dd35f6b13992525fb1f9a313e7f2711768ea
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.