ETH Price: $2,506.48 (-0.36%)

Token

GlitchClocks (GCL)
 

Overview

Max Total Supply

19 GCL

Holders

18

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 GCL
0x3ebd637f0fc8f1bac02cbd138916a8e2d7f5898a
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:
GlitchClocks

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 2021-10-16
*/

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol



pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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/utils/Strings.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

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

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol



pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}

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



pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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



pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: contracts/GlitchClocks.sol



pragma solidity ^0.8.0;







contract GlitchClocks is ERC721, ERC721Burnable, ERC721Enumerable, Ownable {
	using Strings for uint256;

	string private _baseTokenURI;
	string private _baseTokenExtension = ".json";

	uint256 public constant NFT_COST = 0.025 ether;
	uint256 public constant MAX_SUPPLY = 10080;
	uint256 private constant MAX_MINT_PER_CALL = 25;

	bool public isSaleActive = false;
	bool public isDestroyClockActive = false;
	bool public isReflectionsActive = false;
	string public provenanceHash = "";

	mapping(uint256 => uint256) private _availableDistributions;
	mapping(address => uint256) private _burnCounts;

	event EthDeposited(uint256 amount);
	event EthClaimed(address to, uint256 amount);
	event ClockDestroyed(uint256 tokenId);

	constructor(string memory name, string memory symbol, string memory initBaseURI) ERC721(name, symbol) {
		setBaseURI(initBaseURI);
	}

	modifier saleActive {
		require(isSaleActive, "Sale has not started");
		_;
	}

	modifier destroyClockActive {
		require(isReflectionsActive, "Destroy Clock is not active");
		_;
	}

	modifier reflectionsActive {
		require(isReflectionsActive, "Reflection is not active");
		_;
	}

	function getProvenanceHash() public view returns (string memory) {
		return provenanceHash;
	}

	function setProvenanceHash(string memory newProvenanceHash) public onlyOwner {
		provenanceHash = newProvenanceHash;
	}

	function mintClocks(uint256 numNFTs) public payable saleActive {
		require(MAX_SUPPLY > totalSupply(), "Sale has ended");
		require(
			numNFTs > 0 && numNFTs <= MAX_MINT_PER_CALL,
			"Exceeds MAX_MINT_PER_CALL"
		);
		require(
			MAX_SUPPLY >= totalSupply() + numNFTs,
			"Exceeds MAX_SUPPLY"
		);
		require(msg.value >= NFT_COST * numNFTs, "Incorrect Ether value");

		for (uint256 i = 0; i < numNFTs; i++) {
			uint256 mintIndex = totalSupply() + 1;
			_safeMint(msg.sender, mintIndex);
		}
	}

	// Used for Giveaways
	function reserveMint(uint256 reservedAmount) public onlyOwner {
		uint beginSupply = totalSupply();
		for (uint256 i = 1; i <= reservedAmount; i++) {
			_safeMint(msg.sender, beginSupply + i);
		}
	}

	// Used for Giveaways
	function reserveMint(uint256 reservedAmount, address mintAddress) public onlyOwner {
		uint beginSupply = totalSupply();
		for (uint256 i = 1; i <= reservedAmount; i++) {
			_safeMint(mintAddress, beginSupply + i);
		}
	}

	// Used for Giveaways
	function reserveMintBulk(address[] calldata mintAddresses) public onlyOwner {
		uint beginSupply = totalSupply();
		for (uint256 i = 0; i < mintAddresses.length; i++) {
			_safeMint(mintAddresses[i], beginSupply + 1 + i);
		}
	}

	function deposit() public payable reflectionsActive onlyOwner {
		uint256 tokenCount = totalSupply();
		uint256 amountPerToken = msg.value / tokenCount;

		for(uint256 i = 0; i < tokenCount; i++) {
			_availableDistributions[tokenByIndex(i)] += amountPerToken;
		}
		emit EthDeposited(msg.value);
	}

	function getAvailableDistributions(uint256 tokenId) public view returns (uint256) {
		return _availableDistributions[tokenId];
	}

	function getTotalAvailableDistributions(address owner) public view reflectionsActive returns (uint256) {
		uint256 totalDistrubtions = 0;
		uint256 numTokens = balanceOf(owner);

		for(uint256 i = 0; i < numTokens; i++) {
			totalDistrubtions += getAvailableDistributions(tokenOfOwnerByIndex(owner, i));
		}

		return totalDistrubtions;
	}

	function claim() public reflectionsActive {
		uint256 availableAmount = 0;
		uint256 numTokens = balanceOf(msg.sender);

		for(uint256 i = 0; i < numTokens; i++) {
			uint256 tokenId = tokenOfOwnerByIndex(msg.sender, i);
			availableAmount += _availableDistributions[tokenId];
			_availableDistributions[tokenId] = 0;
		}

		require(availableAmount > 0, "There are no available distributions left to claim");
		emit EthClaimed(msg.sender, availableAmount);
		Address.sendValue(payable(msg.sender), availableAmount);
	}

	function _baseURI() internal view override(ERC721) returns (string memory) {
		return _baseTokenURI;
	}

	function setBaseURI(string memory baseTokenURI) public onlyOwner {
		_baseTokenURI = baseTokenURI;
	}

	function _baseExtension() internal view returns (string memory) {
		return _baseTokenExtension;
	}

	function setBaseTokenExtension(string memory newBaseTokenExtension) public onlyOwner {
		_baseTokenExtension = newBaseTokenExtension;
	}

	function tokenURI(uint256 tokenId)
		public
		view
		override(ERC721)
		returns (string memory)
	{
		require(
			_exists(tokenId),
			"ERC721Metadata: URI query for nonexistent token"
		);
		uint256 adjustedTokenId = tokenId - 1;
		string memory currentBaseURI = _baseURI();
		string memory currentBaseExtension = _baseExtension();
		return
			string(
				abi.encodePacked(
					currentBaseURI,
					adjustedTokenId.toString(),
					currentBaseExtension
				)
			);
	}

	function toggleIsSaleActive() public onlyOwner {
		isSaleActive = !isSaleActive;
	}

	function toggleIsDestroyActive() public onlyOwner {
		isDestroyClockActive = !isDestroyClockActive;
	}

	function toggleIsReflectionsActive() public onlyOwner {
		isReflectionsActive = !isReflectionsActive;
	}

	function withdraw() public onlyOwner {
		require(payable(msg.sender).send(address(this).balance), "Withdraw failed");
	}

	function destroyClock(uint256 tokenId) public saleActive destroyClockActive {
		require(_isApprovedOrOwner(msg.sender, tokenId), "Caller is not approved nor token is approved");

		_burn(tokenId);
		_burnCounts[msg.sender] += 1;

		uint256 burnedTokenId = totalSupply() + 1;
		_safeMint(msg.sender, burnedTokenId);

		emit ClockDestroyed(tokenId);
	}

	function getBurnCount(address sender) public view returns (uint256) {
		return _burnCounts[sender];
	}

	function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {
		super._beforeTokenTransfer(from, to, tokenId);
	}

	function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {
		return super.supportsInterface(interfaceId);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ClockDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"destroyClock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getAvailableDistributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBurnCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProvenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getTotalAvailableDistributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDestroyClockActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isReflectionsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numNFTs","type":"uint256"}],"name":"mintClocks","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reservedAmount","type":"uint256"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reservedAmount","type":"uint256"},{"internalType":"address","name":"mintAddress","type":"address"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"mintAddresses","type":"address[]"}],"name":"reserveMintBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseTokenExtension","type":"string"}],"name":"setBaseTokenExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newProvenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleIsDestroyActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleIsReflectionsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleIsSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000311565b506000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff02191690831515021790555060405180602001604052806000815250600e9080519060200190620000ca92919062000311565b50348015620000d857600080fd5b5060405162005c6038038062005c608339818101604052810190620000fe91906200043f565b828281600090805190602001906200011892919062000311565b5080600190805190602001906200013192919062000311565b50505062000154620001486200016e60201b60201c565b6200017660201b60201c565b62000165816200023c60201b60201c565b505050620006ff565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024c6200016e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000272620002e760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c2906200051f565b60405180910390fd5b80600b9080519060200190620002e392919062000311565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200031f90620005e7565b90600052602060002090601f0160209004810192826200034357600085556200038f565b82601f106200035e57805160ff19168380011785556200038f565b828001600101855582156200038f579182015b828111156200038e57825182559160200191906001019062000371565b5b5090506200039e9190620003a2565b5090565b5b80821115620003bd576000816000905550600101620003a3565b5090565b6000620003d8620003d2846200056a565b62000541565b905082815260208101848484011115620003f757620003f6620006b6565b5b62000404848285620005b1565b509392505050565b600082601f830112620004245762000423620006b1565b5b815162000436848260208601620003c1565b91505092915050565b6000806000606084860312156200045b576200045a620006c0565b5b600084015167ffffffffffffffff8111156200047c576200047b620006bb565b5b6200048a868287016200040c565b935050602084015167ffffffffffffffff811115620004ae57620004ad620006bb565b5b620004bc868287016200040c565b925050604084015167ffffffffffffffff811115620004e057620004df620006bb565b5b620004ee868287016200040c565b9150509250925092565b600062000507602083620005a0565b91506200051482620006d6565b602082019050919050565b600060208201905081810360008301526200053a81620004f8565b9050919050565b60006200054d62000560565b90506200055b82826200061d565b919050565b6000604051905090565b600067ffffffffffffffff82111562000588576200058762000682565b5b6200059382620006c5565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005d1578082015181840152602081019050620005b4565b83811115620005e1576000848401525b50505050565b600060028204905060018216806200060057607f821691505b6020821081141562000617576200061662000653565b5b50919050565b6200062882620006c5565b810181811067ffffffffffffffff821117156200064a576200064962000682565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615551806200070f6000396000f3fe6080604052600436106102675760003560e01c806370a0823111610144578063aff3e10b116100b6578063d0e30db01161007a578063d0e30db014610918578063e985e9c514610922578063ebd633111461095f578063f2fde38b14610976578063f30290bd1461099f578063ffd301ca146109b657610267565b8063aff3e10b14610821578063b88d4fde1461084a578063bf4abb7a14610873578063c6ab67a3146108b0578063c87b56dd146108db57610267565b806394b3fbc21161010857806394b3fbc21461071157806395d89b411461073c57806396dd5b2914610767578063a22cb465146107a4578063a2960a27146107cd578063a9b58a30146107f657610267565b806370a0823114610652578063715018a61461068f57806384381b9d146106a65780638cad0d9e146106bd5780638da5cb5b146106e657610267565b80633ccfd60b116101dd5780634e71d92d116101a15780634e71d92d146105445780634f6ccce71461055b57806355f804b314610598578063564566a8146105c157806360b02f70146105ec5780636352211e1461061557610267565b80633ccfd60b1461048557806340f2990d1461049c57806342842e0e146104c757806342966c68146104f05780634c0395861461051957610267565b8063109695231161022f57806310969523146103775780631342ff4c146103a057806318160ddd146103c957806323b872dd146103f45780632f745c591461041d57806332cb6b0c1461045a57610267565b806301ffc9a71461026c57806306acd069146102a957806306fdde03146102e6578063081812fc14610311578063095ea7b31461034e575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613d05565b6109d2565b6040516102a0919061441b565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613af5565b6109e4565b6040516102dd9190614838565b60405180910390f35b3480156102f257600080fd5b506102fb610a8b565b6040516103089190614436565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613da8565b610b1d565b604051610345919061438b565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613c78565b610ba2565b005b34801561038357600080fd5b5061039e60048036038101906103999190613d5f565b610cba565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190613da8565b610d50565b005b3480156103d557600080fd5b506103de610e13565b6040516103eb9190614838565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190613b62565b610e20565b005b34801561042957600080fd5b50610444600480360381019061043f9190613c78565b610e80565b6040516104519190614838565b60405180910390f35b34801561046657600080fd5b5061046f610f25565b60405161047c9190614838565b60405180910390f35b34801561049157600080fd5b5061049a610f2b565b005b3480156104a857600080fd5b506104b161101d565b6040516104be919061441b565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613b62565b611030565b005b3480156104fc57600080fd5b5061051760048036038101906105129190613da8565b611050565b005b34801561052557600080fd5b5061052e6110ac565b60405161053b9190614838565b60405180910390f35b34801561055057600080fd5b506105596110b7565b005b34801561056757600080fd5b50610582600480360381019061057d9190613da8565b611206565b60405161058f9190614838565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613d5f565b611277565b005b3480156105cd57600080fd5b506105d661130d565b6040516105e3919061441b565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190613dd5565b611320565b005b34801561062157600080fd5b5061063c60048036038101906106379190613da8565b6113e4565b604051610649919061438b565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190613af5565b611496565b6040516106869190614838565b60405180910390f35b34801561069b57600080fd5b506106a461154e565b005b3480156106b257600080fd5b506106bb6115d6565b005b3480156106c957600080fd5b506106e460048036038101906106df9190613da8565b61167e565b005b3480156106f257600080fd5b506106fb611822565b604051610708919061438b565b60405180910390f35b34801561071d57600080fd5b5061072661184c565b6040516107339190614436565b60405180910390f35b34801561074857600080fd5b506107516118de565b60405161075e9190614436565b60405180910390f35b34801561077357600080fd5b5061078e60048036038101906107899190613da8565b611970565b60405161079b9190614838565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190613c38565b61198d565b005b3480156107d957600080fd5b506107f460048036038101906107ef9190613cb8565b611b0e565b005b34801561080257600080fd5b5061080b611c05565b604051610818919061441b565b60405180910390f35b34801561082d57600080fd5b5061084860048036038101906108439190613d5f565b611c18565b005b34801561085657600080fd5b50610871600480360381019061086c9190613bb5565b611cae565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613af5565b611d10565b6040516108a79190614838565b60405180910390f35b3480156108bc57600080fd5b506108c5611d59565b6040516108d29190614436565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd9190613da8565b611de7565b60405161090f9190614436565b60405180910390f35b610920611e90565b005b34801561092e57600080fd5b5061094960048036038101906109449190613b22565b612003565b604051610956919061441b565b60405180910390f35b34801561096b57600080fd5b50610974612097565b005b34801561098257600080fd5b5061099d60048036038101906109989190613af5565b61213f565b005b3480156109ab57600080fd5b506109b4612237565b005b6109d060048036038101906109cb9190613da8565b6122df565b005b60006109dd826124ba565b9050919050565b6000600d60029054906101000a900460ff16610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c906146f8565b60405180910390fd5b600080610a4184611496565b905060005b81811015610a8057610a60610a5b8683610e80565b611970565b83610a6b9190614928565b92508080610a7890614b56565b915050610a46565b508192505050919050565b606060008054610a9a90614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac690614af3565b8015610b135780601f10610ae857610100808354040283529160200191610b13565b820191906000526020600020905b815481529060010190602001808311610af657829003601f168201915b5050505050905090565b6000610b2882612534565b610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90614658565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bad826113e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590614738565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c3d6125a0565b73ffffffffffffffffffffffffffffffffffffffff161480610c6c5750610c6b81610c666125a0565b612003565b5b610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca2906145b8565b60405180910390fd5b610cb583836125a8565b505050565b610cc26125a0565b73ffffffffffffffffffffffffffffffffffffffff16610ce0611822565b73ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614678565b60405180910390fd5b80600e9080519060200190610d4c9291906138b3565b5050565b610d586125a0565b73ffffffffffffffffffffffffffffffffffffffff16610d76611822565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390614678565b60405180910390fd5b6000610dd6610e13565b90506000600190505b828111610e0e57610dfb338284610df69190614928565b612661565b8080610e0690614b56565b915050610ddf565b505050565b6000600880549050905090565b610e31610e2b6125a0565b8261267f565b610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790614758565b60405180910390fd5b610e7b83838361275d565b505050565b6000610e8b83611496565b8210610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec390614458565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61276081565b610f336125a0565b73ffffffffffffffffffffffffffffffffffffffff16610f51611822565b73ffffffffffffffffffffffffffffffffffffffff1614610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90614678565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061101b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611012906144d8565b60405180910390fd5b565b600d60029054906101000a900460ff1681565b61104b83838360405180602001604052806000815250611cae565b505050565b61106161105b6125a0565b8261267f565b6110a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611097906147f8565b60405180910390fd5b6110a9816129b9565b50565b6658d15e1762800081565b600d60029054906101000a900460ff16611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906146f8565b60405180910390fd5b60008061111233611496565b905060005b8181101561117b57600061112b3383610e80565b9050600f6000828152602001908152602001600020548461114c9190614928565b93506000600f60008381526020019081526020016000208190555050808061117390614b56565b915050611117565b50600082116111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b6906146d8565b60405180910390fd5b7f0d7976053781e071cecf47e898ad2a6dc87621ca33734e96eb4b92453319e8c933836040516111f09291906143f2565b60405180910390a16112023383612aca565b5050565b6000611210610e13565b8210611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890614798565b60405180910390fd5b6008828154811061126557611264614c8c565b5b90600052602060002001549050919050565b61127f6125a0565b73ffffffffffffffffffffffffffffffffffffffff1661129d611822565b73ffffffffffffffffffffffffffffffffffffffff16146112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea90614678565b60405180910390fd5b80600b90805190602001906113099291906138b3565b5050565b600d60009054906101000a900460ff1681565b6113286125a0565b73ffffffffffffffffffffffffffffffffffffffff16611346611822565b73ffffffffffffffffffffffffffffffffffffffff161461139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390614678565b60405180910390fd5b60006113a6610e13565b90506000600190505b8381116113de576113cb8382846113c69190614928565b612661565b80806113d690614b56565b9150506113af565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561148d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611484906145f8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906145d8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115566125a0565b73ffffffffffffffffffffffffffffffffffffffff16611574611822565b73ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190614678565b60405180910390fd5b6115d46000612bbe565b565b6115de6125a0565b73ffffffffffffffffffffffffffffffffffffffff166115fc611822565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164990614678565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b600d60009054906101000a900460ff166116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c4906147d8565b60405180910390fd5b600d60029054906101000a900460ff1661171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390614778565b60405180910390fd5b611726338261267f565b611765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175c906147b8565b60405180910390fd5b61176e816129b9565b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117be9190614928565b92505081905550600060016117d1610e13565b6117db9190614928565b90506117e73382612661565b7f44db8907f309d5490b65c11cc3f287928322a4684b0c7fb48b80131c3a08c1aa826040516118169190614838565b60405180910390a15050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e805461185b90614af3565b80601f016020809104026020016040519081016040528092919081815260200182805461188790614af3565b80156118d45780601f106118a9576101008083540402835291602001916118d4565b820191906000526020600020905b8154815290600101906020018083116118b757829003601f168201915b5050505050905090565b6060600180546118ed90614af3565b80601f016020809104026020016040519081016040528092919081815260200182805461191990614af3565b80156119665780601f1061193b57610100808354040283529160200191611966565b820191906000526020600020905b81548152906001019060200180831161194957829003601f168201915b5050505050905090565b6000600f6000838152602001908152602001600020549050919050565b6119956125a0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614538565b60405180910390fd5b8060056000611a106125a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611abd6125a0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b02919061441b565b60405180910390a35050565b611b166125a0565b73ffffffffffffffffffffffffffffffffffffffff16611b34611822565b73ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614678565b60405180910390fd5b6000611b94610e13565b905060005b83839050811015611bff57611bec848483818110611bba57611bb9614c8c565b5b9050602002016020810190611bcf9190613af5565b82600185611bdd9190614928565b611be79190614928565b612661565b8080611bf790614b56565b915050611b99565b50505050565b600d60019054906101000a900460ff1681565b611c206125a0565b73ffffffffffffffffffffffffffffffffffffffff16611c3e611822565b73ffffffffffffffffffffffffffffffffffffffff1614611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90614678565b60405180910390fd5b80600c9080519060200190611caa9291906138b3565b5050565b611cbf611cb96125a0565b8361267f565b611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf590614758565b60405180910390fd5b611d0a84848484612c84565b50505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e8054611d6690614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9290614af3565b8015611ddf5780601f10611db457610100808354040283529160200191611ddf565b820191906000526020600020905b815481529060010190602001808311611dc257829003601f168201915b505050505081565b6060611df282612534565b611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e28906146b8565b60405180910390fd5b6000600183611e409190614a09565b90506000611e4c612ce0565b90506000611e58612d72565b905081611e6484612e04565b82604051602001611e7793929190614345565b6040516020818303038152906040529350505050919050565b600d60029054906101000a900460ff16611edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed6906146f8565b60405180910390fd5b611ee76125a0565b73ffffffffffffffffffffffffffffffffffffffff16611f05611822565b73ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5290614678565b60405180910390fd5b6000611f65610e13565b905060008134611f75919061497e565b905060005b82811015611fc75781600f6000611f9084611206565b81526020019081526020016000206000828254611fad9190614928565b925050819055508080611fbf90614b56565b915050611f7a565b507f44863bc9b335caf97ca3a3ab6fb67776965a88292ed53b0679f8eae4a67b630c34604051611ff79190614838565b60405180910390a15050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61209f6125a0565b73ffffffffffffffffffffffffffffffffffffffff166120bd611822565b73ffffffffffffffffffffffffffffffffffffffff1614612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90614678565b60405180910390fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b6121476125a0565b73ffffffffffffffffffffffffffffffffffffffff16612165611822565b73ffffffffffffffffffffffffffffffffffffffff16146121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290614678565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290614498565b60405180910390fd5b61223481612bbe565b50565b61223f6125a0565b73ffffffffffffffffffffffffffffffffffffffff1661225d611822565b73ffffffffffffffffffffffffffffffffffffffff16146122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614678565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b600d60009054906101000a900460ff1661232e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612325906147d8565b60405180910390fd5b612336610e13565b61276011612379576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612370906144f8565b60405180910390fd5b60008111801561238a575060198111155b6123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090614618565b60405180910390fd5b806123d2610e13565b6123dc9190614928565b6127601015612420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241790614718565b60405180910390fd5b806658d15e1762800061243391906149af565b341015612475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246c90614818565b60405180910390fd5b60005b818110156124b6576000600161248c610e13565b6124969190614928565b90506124a23382612661565b5080806124ae90614b56565b915050612478565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061252d575061252c82612f65565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661261b836113e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61267b828260405180602001604052806000815250613047565b5050565b600061268a82612534565b6126c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c090614598565b60405180910390fd5b60006126d4836113e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061274357508373ffffffffffffffffffffffffffffffffffffffff1661272b84610b1d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061275457506127538185612003565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661277d826113e4565b73ffffffffffffffffffffffffffffffffffffffff16146127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614698565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614518565b60405180910390fd5b61284e8383836130a2565b6128596000826125a8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a99190614a09565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129009190614928565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129c4826113e4565b90506129d2816000846130a2565b6129dd6000836125a8565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2d9190614a09565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b80471015612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0490614578565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612b3390614376565b60006040518083038185875af1925050503d8060008114612b70576040519150601f19603f3d011682016040523d82523d6000602084013e612b75565b606091505b5050905080612bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb090614558565b60405180910390fd5b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c8f84848461275d565b612c9b848484846130b2565b612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd190614478565b60405180910390fd5b50505050565b6060600b8054612cef90614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1b90614af3565b8015612d685780601f10612d3d57610100808354040283529160200191612d68565b820191906000526020600020905b815481529060010190602001808311612d4b57829003601f168201915b5050505050905090565b6060600c8054612d8190614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054612dad90614af3565b8015612dfa5780601f10612dcf57610100808354040283529160200191612dfa565b820191906000526020600020905b815481529060010190602001808311612ddd57829003601f168201915b5050505050905090565b60606000821415612e4c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f60565b600082905060005b60008214612e7e578080612e6790614b56565b915050600a82612e77919061497e565b9150612e54565b60008167ffffffffffffffff811115612e9a57612e99614cbb565b5b6040519080825280601f01601f191660200182016040528015612ecc5781602001600182028036833780820191505090505b5090505b60008514612f5957600182612ee59190614a09565b9150600a85612ef49190614b9f565b6030612f009190614928565b60f81b818381518110612f1657612f15614c8c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f52919061497e565b9450612ed0565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061303057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613040575061303f82613249565b5b9050919050565b61305183836132b3565b61305e60008484846130b2565b61309d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309490614478565b60405180910390fd5b505050565b6130ad838383613481565b505050565b60006130d38473ffffffffffffffffffffffffffffffffffffffff16613595565b1561323c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130fc6125a0565b8786866040518563ffffffff1660e01b815260040161311e94939291906143a6565b602060405180830381600087803b15801561313857600080fd5b505af192505050801561316957506040513d601f19601f820116820180604052508101906131669190613d32565b60015b6131ec573d8060008114613199576040519150601f19603f3d011682016040523d82523d6000602084013e61319e565b606091505b506000815114156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db90614478565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613241565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331a90614638565b60405180910390fd5b61332c81612534565b1561336c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613363906144b8565b60405180910390fd5b613378600083836130a2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133c89190614928565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61348c8383836135a8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134cf576134ca816135ad565b61350e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461350d5761350c83826135f6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135515761354c81613763565b613590565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461358f5761358e8282613834565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161360384611496565b61360d9190614a09565b90506000600760008481526020019081526020016000205490508181146136f2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137779190614a09565b90506000600960008481526020019081526020016000205490506000600883815481106137a7576137a6614c8c565b5b9060005260206000200154905080600883815481106137c9576137c8614c8c565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061381857613817614c5d565b5b6001900381819060005260206000200160009055905550505050565b600061383f83611496565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546138bf90614af3565b90600052602060002090601f0160209004810192826138e15760008555613928565b82601f106138fa57805160ff1916838001178555613928565b82800160010185558215613928579182015b8281111561392757825182559160200191906001019061390c565b5b5090506139359190613939565b5090565b5b8082111561395257600081600090555060010161393a565b5090565b600061396961396484614878565b614853565b90508281526020810184848401111561398557613984614cf9565b5b613990848285614ab1565b509392505050565b60006139ab6139a6846148a9565b614853565b9050828152602081018484840111156139c7576139c6614cf9565b5b6139d2848285614ab1565b509392505050565b6000813590506139e9816154bf565b92915050565b60008083601f840112613a0557613a04614cef565b5b8235905067ffffffffffffffff811115613a2257613a21614cea565b5b602083019150836020820283011115613a3e57613a3d614cf4565b5b9250929050565b600081359050613a54816154d6565b92915050565b600081359050613a69816154ed565b92915050565b600081519050613a7e816154ed565b92915050565b600082601f830112613a9957613a98614cef565b5b8135613aa9848260208601613956565b91505092915050565b600082601f830112613ac757613ac6614cef565b5b8135613ad7848260208601613998565b91505092915050565b600081359050613aef81615504565b92915050565b600060208284031215613b0b57613b0a614d03565b5b6000613b19848285016139da565b91505092915050565b60008060408385031215613b3957613b38614d03565b5b6000613b47858286016139da565b9250506020613b58858286016139da565b9150509250929050565b600080600060608486031215613b7b57613b7a614d03565b5b6000613b89868287016139da565b9350506020613b9a868287016139da565b9250506040613bab86828701613ae0565b9150509250925092565b60008060008060808587031215613bcf57613bce614d03565b5b6000613bdd878288016139da565b9450506020613bee878288016139da565b9350506040613bff87828801613ae0565b925050606085013567ffffffffffffffff811115613c2057613c1f614cfe565b5b613c2c87828801613a84565b91505092959194509250565b60008060408385031215613c4f57613c4e614d03565b5b6000613c5d858286016139da565b9250506020613c6e85828601613a45565b9150509250929050565b60008060408385031215613c8f57613c8e614d03565b5b6000613c9d858286016139da565b9250506020613cae85828601613ae0565b9150509250929050565b60008060208385031215613ccf57613cce614d03565b5b600083013567ffffffffffffffff811115613ced57613cec614cfe565b5b613cf9858286016139ef565b92509250509250929050565b600060208284031215613d1b57613d1a614d03565b5b6000613d2984828501613a5a565b91505092915050565b600060208284031215613d4857613d47614d03565b5b6000613d5684828501613a6f565b91505092915050565b600060208284031215613d7557613d74614d03565b5b600082013567ffffffffffffffff811115613d9357613d92614cfe565b5b613d9f84828501613ab2565b91505092915050565b600060208284031215613dbe57613dbd614d03565b5b6000613dcc84828501613ae0565b91505092915050565b60008060408385031215613dec57613deb614d03565b5b6000613dfa85828601613ae0565b9250506020613e0b858286016139da565b9150509250929050565b613e1e81614a3d565b82525050565b613e2d81614a4f565b82525050565b6000613e3e826148da565b613e4881856148f0565b9350613e58818560208601614ac0565b613e6181614d08565b840191505092915050565b6000613e77826148e5565b613e81818561490c565b9350613e91818560208601614ac0565b613e9a81614d08565b840191505092915050565b6000613eb0826148e5565b613eba818561491d565b9350613eca818560208601614ac0565b80840191505092915050565b6000613ee3602b8361490c565b9150613eee82614d19565b604082019050919050565b6000613f0660328361490c565b9150613f1182614d68565b604082019050919050565b6000613f2960268361490c565b9150613f3482614db7565b604082019050919050565b6000613f4c601c8361490c565b9150613f5782614e06565b602082019050919050565b6000613f6f600f8361490c565b9150613f7a82614e2f565b602082019050919050565b6000613f92600e8361490c565b9150613f9d82614e58565b602082019050919050565b6000613fb560248361490c565b9150613fc082614e81565b604082019050919050565b6000613fd860198361490c565b9150613fe382614ed0565b602082019050919050565b6000613ffb603a8361490c565b915061400682614ef9565b604082019050919050565b600061401e601d8361490c565b915061402982614f48565b602082019050919050565b6000614041602c8361490c565b915061404c82614f71565b604082019050919050565b600061406460388361490c565b915061406f82614fc0565b604082019050919050565b6000614087602a8361490c565b91506140928261500f565b604082019050919050565b60006140aa60298361490c565b91506140b58261505e565b604082019050919050565b60006140cd60198361490c565b91506140d8826150ad565b602082019050919050565b60006140f060208361490c565b91506140fb826150d6565b602082019050919050565b6000614113602c8361490c565b915061411e826150ff565b604082019050919050565b600061413660208361490c565b91506141418261514e565b602082019050919050565b600061415960298361490c565b915061416482615177565b604082019050919050565b600061417c602f8361490c565b9150614187826151c6565b604082019050919050565b600061419f60328361490c565b91506141aa82615215565b604082019050919050565b60006141c260188361490c565b91506141cd82615264565b602082019050919050565b60006141e560128361490c565b91506141f08261528d565b602082019050919050565b600061420860218361490c565b9150614213826152b6565b604082019050919050565b600061422b600083614901565b915061423682615305565b600082019050919050565b600061424e60318361490c565b915061425982615308565b604082019050919050565b6000614271601b8361490c565b915061427c82615357565b602082019050919050565b6000614294602c8361490c565b915061429f82615380565b604082019050919050565b60006142b7602c8361490c565b91506142c2826153cf565b604082019050919050565b60006142da60148361490c565b91506142e58261541e565b602082019050919050565b60006142fd60308361490c565b915061430882615447565b604082019050919050565b600061432060158361490c565b915061432b82615496565b602082019050919050565b61433f81614aa7565b82525050565b60006143518286613ea5565b915061435d8285613ea5565b91506143698284613ea5565b9150819050949350505050565b60006143818261421e565b9150819050919050565b60006020820190506143a06000830184613e15565b92915050565b60006080820190506143bb6000830187613e15565b6143c86020830186613e15565b6143d56040830185614336565b81810360608301526143e78184613e33565b905095945050505050565b60006040820190506144076000830185613e15565b6144146020830184614336565b9392505050565b60006020820190506144306000830184613e24565b92915050565b600060208201905081810360008301526144508184613e6c565b905092915050565b6000602082019050818103600083015261447181613ed6565b9050919050565b6000602082019050818103600083015261449181613ef9565b9050919050565b600060208201905081810360008301526144b181613f1c565b9050919050565b600060208201905081810360008301526144d181613f3f565b9050919050565b600060208201905081810360008301526144f181613f62565b9050919050565b6000602082019050818103600083015261451181613f85565b9050919050565b6000602082019050818103600083015261453181613fa8565b9050919050565b6000602082019050818103600083015261455181613fcb565b9050919050565b6000602082019050818103600083015261457181613fee565b9050919050565b6000602082019050818103600083015261459181614011565b9050919050565b600060208201905081810360008301526145b181614034565b9050919050565b600060208201905081810360008301526145d181614057565b9050919050565b600060208201905081810360008301526145f18161407a565b9050919050565b600060208201905081810360008301526146118161409d565b9050919050565b60006020820190508181036000830152614631816140c0565b9050919050565b60006020820190508181036000830152614651816140e3565b9050919050565b6000602082019050818103600083015261467181614106565b9050919050565b6000602082019050818103600083015261469181614129565b9050919050565b600060208201905081810360008301526146b18161414c565b9050919050565b600060208201905081810360008301526146d18161416f565b9050919050565b600060208201905081810360008301526146f181614192565b9050919050565b60006020820190508181036000830152614711816141b5565b9050919050565b60006020820190508181036000830152614731816141d8565b9050919050565b60006020820190508181036000830152614751816141fb565b9050919050565b6000602082019050818103600083015261477181614241565b9050919050565b6000602082019050818103600083015261479181614264565b9050919050565b600060208201905081810360008301526147b181614287565b9050919050565b600060208201905081810360008301526147d1816142aa565b9050919050565b600060208201905081810360008301526147f1816142cd565b9050919050565b60006020820190508181036000830152614811816142f0565b9050919050565b6000602082019050818103600083015261483181614313565b9050919050565b600060208201905061484d6000830184614336565b92915050565b600061485d61486e565b90506148698282614b25565b919050565b6000604051905090565b600067ffffffffffffffff82111561489357614892614cbb565b5b61489c82614d08565b9050602081019050919050565b600067ffffffffffffffff8211156148c4576148c3614cbb565b5b6148cd82614d08565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061493382614aa7565b915061493e83614aa7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561497357614972614bd0565b5b828201905092915050565b600061498982614aa7565b915061499483614aa7565b9250826149a4576149a3614bff565b5b828204905092915050565b60006149ba82614aa7565b91506149c583614aa7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149fe576149fd614bd0565b5b828202905092915050565b6000614a1482614aa7565b9150614a1f83614aa7565b925082821015614a3257614a31614bd0565b5b828203905092915050565b6000614a4882614a87565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ade578082015181840152602081019050614ac3565b83811115614aed576000848401525b50505050565b60006002820490506001821680614b0b57607f821691505b60208210811415614b1f57614b1e614c2e565b5b50919050565b614b2e82614d08565b810181811067ffffffffffffffff82111715614b4d57614b4c614cbb565b5b80604052505050565b6000614b6182614aa7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9457614b93614bd0565b5b600182019050919050565b6000614baa82614aa7565b9150614bb583614aa7565b925082614bc557614bc4614bff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f53616c652068617320656e646564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473204d41585f4d494e545f5045525f43414c4c00000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f546865726520617265206e6f20617661696c61626c652064697374726962757460008201527f696f6e73206c65667420746f20636c61696d0000000000000000000000000000602082015250565b7f5265666c656374696f6e206973206e6f74206163746976650000000000000000600082015250565b7f45786365656473204d41585f535550504c590000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f44657374726f7920436c6f636b206973206e6f74206163746976650000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f7420617070726f766564206e6f7220746f6b656e60008201527f20697320617070726f7665640000000000000000000000000000000000000000602082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f496e636f72726563742045746865722076616c75650000000000000000000000600082015250565b6154c881614a3d565b81146154d357600080fd5b50565b6154df81614a4f565b81146154ea57600080fd5b50565b6154f681614a5b565b811461550157600080fd5b50565b61550d81614aa7565b811461551857600080fd5b5056fea26469706673582212204ea9555c0b0a261c7d94a7c5069d86d7671912e9f0b0a21c10ba9201465b4e2064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c476c69746368436c6f636b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000347434c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c806370a0823111610144578063aff3e10b116100b6578063d0e30db01161007a578063d0e30db014610918578063e985e9c514610922578063ebd633111461095f578063f2fde38b14610976578063f30290bd1461099f578063ffd301ca146109b657610267565b8063aff3e10b14610821578063b88d4fde1461084a578063bf4abb7a14610873578063c6ab67a3146108b0578063c87b56dd146108db57610267565b806394b3fbc21161010857806394b3fbc21461071157806395d89b411461073c57806396dd5b2914610767578063a22cb465146107a4578063a2960a27146107cd578063a9b58a30146107f657610267565b806370a0823114610652578063715018a61461068f57806384381b9d146106a65780638cad0d9e146106bd5780638da5cb5b146106e657610267565b80633ccfd60b116101dd5780634e71d92d116101a15780634e71d92d146105445780634f6ccce71461055b57806355f804b314610598578063564566a8146105c157806360b02f70146105ec5780636352211e1461061557610267565b80633ccfd60b1461048557806340f2990d1461049c57806342842e0e146104c757806342966c68146104f05780634c0395861461051957610267565b8063109695231161022f57806310969523146103775780631342ff4c146103a057806318160ddd146103c957806323b872dd146103f45780632f745c591461041d57806332cb6b0c1461045a57610267565b806301ffc9a71461026c57806306acd069146102a957806306fdde03146102e6578063081812fc14610311578063095ea7b31461034e575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613d05565b6109d2565b6040516102a0919061441b565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613af5565b6109e4565b6040516102dd9190614838565b60405180910390f35b3480156102f257600080fd5b506102fb610a8b565b6040516103089190614436565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613da8565b610b1d565b604051610345919061438b565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613c78565b610ba2565b005b34801561038357600080fd5b5061039e60048036038101906103999190613d5f565b610cba565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190613da8565b610d50565b005b3480156103d557600080fd5b506103de610e13565b6040516103eb9190614838565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190613b62565b610e20565b005b34801561042957600080fd5b50610444600480360381019061043f9190613c78565b610e80565b6040516104519190614838565b60405180910390f35b34801561046657600080fd5b5061046f610f25565b60405161047c9190614838565b60405180910390f35b34801561049157600080fd5b5061049a610f2b565b005b3480156104a857600080fd5b506104b161101d565b6040516104be919061441b565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613b62565b611030565b005b3480156104fc57600080fd5b5061051760048036038101906105129190613da8565b611050565b005b34801561052557600080fd5b5061052e6110ac565b60405161053b9190614838565b60405180910390f35b34801561055057600080fd5b506105596110b7565b005b34801561056757600080fd5b50610582600480360381019061057d9190613da8565b611206565b60405161058f9190614838565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613d5f565b611277565b005b3480156105cd57600080fd5b506105d661130d565b6040516105e3919061441b565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190613dd5565b611320565b005b34801561062157600080fd5b5061063c60048036038101906106379190613da8565b6113e4565b604051610649919061438b565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190613af5565b611496565b6040516106869190614838565b60405180910390f35b34801561069b57600080fd5b506106a461154e565b005b3480156106b257600080fd5b506106bb6115d6565b005b3480156106c957600080fd5b506106e460048036038101906106df9190613da8565b61167e565b005b3480156106f257600080fd5b506106fb611822565b604051610708919061438b565b60405180910390f35b34801561071d57600080fd5b5061072661184c565b6040516107339190614436565b60405180910390f35b34801561074857600080fd5b506107516118de565b60405161075e9190614436565b60405180910390f35b34801561077357600080fd5b5061078e60048036038101906107899190613da8565b611970565b60405161079b9190614838565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190613c38565b61198d565b005b3480156107d957600080fd5b506107f460048036038101906107ef9190613cb8565b611b0e565b005b34801561080257600080fd5b5061080b611c05565b604051610818919061441b565b60405180910390f35b34801561082d57600080fd5b5061084860048036038101906108439190613d5f565b611c18565b005b34801561085657600080fd5b50610871600480360381019061086c9190613bb5565b611cae565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613af5565b611d10565b6040516108a79190614838565b60405180910390f35b3480156108bc57600080fd5b506108c5611d59565b6040516108d29190614436565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd9190613da8565b611de7565b60405161090f9190614436565b60405180910390f35b610920611e90565b005b34801561092e57600080fd5b5061094960048036038101906109449190613b22565b612003565b604051610956919061441b565b60405180910390f35b34801561096b57600080fd5b50610974612097565b005b34801561098257600080fd5b5061099d60048036038101906109989190613af5565b61213f565b005b3480156109ab57600080fd5b506109b4612237565b005b6109d060048036038101906109cb9190613da8565b6122df565b005b60006109dd826124ba565b9050919050565b6000600d60029054906101000a900460ff16610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c906146f8565b60405180910390fd5b600080610a4184611496565b905060005b81811015610a8057610a60610a5b8683610e80565b611970565b83610a6b9190614928565b92508080610a7890614b56565b915050610a46565b508192505050919050565b606060008054610a9a90614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac690614af3565b8015610b135780601f10610ae857610100808354040283529160200191610b13565b820191906000526020600020905b815481529060010190602001808311610af657829003601f168201915b5050505050905090565b6000610b2882612534565b610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90614658565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bad826113e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590614738565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c3d6125a0565b73ffffffffffffffffffffffffffffffffffffffff161480610c6c5750610c6b81610c666125a0565b612003565b5b610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca2906145b8565b60405180910390fd5b610cb583836125a8565b505050565b610cc26125a0565b73ffffffffffffffffffffffffffffffffffffffff16610ce0611822565b73ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614678565b60405180910390fd5b80600e9080519060200190610d4c9291906138b3565b5050565b610d586125a0565b73ffffffffffffffffffffffffffffffffffffffff16610d76611822565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390614678565b60405180910390fd5b6000610dd6610e13565b90506000600190505b828111610e0e57610dfb338284610df69190614928565b612661565b8080610e0690614b56565b915050610ddf565b505050565b6000600880549050905090565b610e31610e2b6125a0565b8261267f565b610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790614758565b60405180910390fd5b610e7b83838361275d565b505050565b6000610e8b83611496565b8210610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec390614458565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61276081565b610f336125a0565b73ffffffffffffffffffffffffffffffffffffffff16610f51611822565b73ffffffffffffffffffffffffffffffffffffffff1614610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90614678565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061101b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611012906144d8565b60405180910390fd5b565b600d60029054906101000a900460ff1681565b61104b83838360405180602001604052806000815250611cae565b505050565b61106161105b6125a0565b8261267f565b6110a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611097906147f8565b60405180910390fd5b6110a9816129b9565b50565b6658d15e1762800081565b600d60029054906101000a900460ff16611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906146f8565b60405180910390fd5b60008061111233611496565b905060005b8181101561117b57600061112b3383610e80565b9050600f6000828152602001908152602001600020548461114c9190614928565b93506000600f60008381526020019081526020016000208190555050808061117390614b56565b915050611117565b50600082116111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b6906146d8565b60405180910390fd5b7f0d7976053781e071cecf47e898ad2a6dc87621ca33734e96eb4b92453319e8c933836040516111f09291906143f2565b60405180910390a16112023383612aca565b5050565b6000611210610e13565b8210611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890614798565b60405180910390fd5b6008828154811061126557611264614c8c565b5b90600052602060002001549050919050565b61127f6125a0565b73ffffffffffffffffffffffffffffffffffffffff1661129d611822565b73ffffffffffffffffffffffffffffffffffffffff16146112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea90614678565b60405180910390fd5b80600b90805190602001906113099291906138b3565b5050565b600d60009054906101000a900460ff1681565b6113286125a0565b73ffffffffffffffffffffffffffffffffffffffff16611346611822565b73ffffffffffffffffffffffffffffffffffffffff161461139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390614678565b60405180910390fd5b60006113a6610e13565b90506000600190505b8381116113de576113cb8382846113c69190614928565b612661565b80806113d690614b56565b9150506113af565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561148d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611484906145f8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906145d8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115566125a0565b73ffffffffffffffffffffffffffffffffffffffff16611574611822565b73ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190614678565b60405180910390fd5b6115d46000612bbe565b565b6115de6125a0565b73ffffffffffffffffffffffffffffffffffffffff166115fc611822565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164990614678565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b600d60009054906101000a900460ff166116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c4906147d8565b60405180910390fd5b600d60029054906101000a900460ff1661171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390614778565b60405180910390fd5b611726338261267f565b611765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175c906147b8565b60405180910390fd5b61176e816129b9565b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117be9190614928565b92505081905550600060016117d1610e13565b6117db9190614928565b90506117e73382612661565b7f44db8907f309d5490b65c11cc3f287928322a4684b0c7fb48b80131c3a08c1aa826040516118169190614838565b60405180910390a15050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e805461185b90614af3565b80601f016020809104026020016040519081016040528092919081815260200182805461188790614af3565b80156118d45780601f106118a9576101008083540402835291602001916118d4565b820191906000526020600020905b8154815290600101906020018083116118b757829003601f168201915b5050505050905090565b6060600180546118ed90614af3565b80601f016020809104026020016040519081016040528092919081815260200182805461191990614af3565b80156119665780601f1061193b57610100808354040283529160200191611966565b820191906000526020600020905b81548152906001019060200180831161194957829003601f168201915b5050505050905090565b6000600f6000838152602001908152602001600020549050919050565b6119956125a0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614538565b60405180910390fd5b8060056000611a106125a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611abd6125a0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b02919061441b565b60405180910390a35050565b611b166125a0565b73ffffffffffffffffffffffffffffffffffffffff16611b34611822565b73ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614678565b60405180910390fd5b6000611b94610e13565b905060005b83839050811015611bff57611bec848483818110611bba57611bb9614c8c565b5b9050602002016020810190611bcf9190613af5565b82600185611bdd9190614928565b611be79190614928565b612661565b8080611bf790614b56565b915050611b99565b50505050565b600d60019054906101000a900460ff1681565b611c206125a0565b73ffffffffffffffffffffffffffffffffffffffff16611c3e611822565b73ffffffffffffffffffffffffffffffffffffffff1614611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90614678565b60405180910390fd5b80600c9080519060200190611caa9291906138b3565b5050565b611cbf611cb96125a0565b8361267f565b611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf590614758565b60405180910390fd5b611d0a84848484612c84565b50505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e8054611d6690614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9290614af3565b8015611ddf5780601f10611db457610100808354040283529160200191611ddf565b820191906000526020600020905b815481529060010190602001808311611dc257829003601f168201915b505050505081565b6060611df282612534565b611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e28906146b8565b60405180910390fd5b6000600183611e409190614a09565b90506000611e4c612ce0565b90506000611e58612d72565b905081611e6484612e04565b82604051602001611e7793929190614345565b6040516020818303038152906040529350505050919050565b600d60029054906101000a900460ff16611edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed6906146f8565b60405180910390fd5b611ee76125a0565b73ffffffffffffffffffffffffffffffffffffffff16611f05611822565b73ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5290614678565b60405180910390fd5b6000611f65610e13565b905060008134611f75919061497e565b905060005b82811015611fc75781600f6000611f9084611206565b81526020019081526020016000206000828254611fad9190614928565b925050819055508080611fbf90614b56565b915050611f7a565b507f44863bc9b335caf97ca3a3ab6fb67776965a88292ed53b0679f8eae4a67b630c34604051611ff79190614838565b60405180910390a15050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61209f6125a0565b73ffffffffffffffffffffffffffffffffffffffff166120bd611822565b73ffffffffffffffffffffffffffffffffffffffff1614612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90614678565b60405180910390fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b6121476125a0565b73ffffffffffffffffffffffffffffffffffffffff16612165611822565b73ffffffffffffffffffffffffffffffffffffffff16146121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290614678565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290614498565b60405180910390fd5b61223481612bbe565b50565b61223f6125a0565b73ffffffffffffffffffffffffffffffffffffffff1661225d611822565b73ffffffffffffffffffffffffffffffffffffffff16146122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614678565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b600d60009054906101000a900460ff1661232e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612325906147d8565b60405180910390fd5b612336610e13565b61276011612379576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612370906144f8565b60405180910390fd5b60008111801561238a575060198111155b6123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090614618565b60405180910390fd5b806123d2610e13565b6123dc9190614928565b6127601015612420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241790614718565b60405180910390fd5b806658d15e1762800061243391906149af565b341015612475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246c90614818565b60405180910390fd5b60005b818110156124b6576000600161248c610e13565b6124969190614928565b90506124a23382612661565b5080806124ae90614b56565b915050612478565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061252d575061252c82612f65565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661261b836113e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61267b828260405180602001604052806000815250613047565b5050565b600061268a82612534565b6126c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c090614598565b60405180910390fd5b60006126d4836113e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061274357508373ffffffffffffffffffffffffffffffffffffffff1661272b84610b1d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061275457506127538185612003565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661277d826113e4565b73ffffffffffffffffffffffffffffffffffffffff16146127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614698565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614518565b60405180910390fd5b61284e8383836130a2565b6128596000826125a8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a99190614a09565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129009190614928565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129c4826113e4565b90506129d2816000846130a2565b6129dd6000836125a8565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2d9190614a09565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b80471015612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0490614578565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612b3390614376565b60006040518083038185875af1925050503d8060008114612b70576040519150601f19603f3d011682016040523d82523d6000602084013e612b75565b606091505b5050905080612bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb090614558565b60405180910390fd5b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c8f84848461275d565b612c9b848484846130b2565b612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd190614478565b60405180910390fd5b50505050565b6060600b8054612cef90614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1b90614af3565b8015612d685780601f10612d3d57610100808354040283529160200191612d68565b820191906000526020600020905b815481529060010190602001808311612d4b57829003601f168201915b5050505050905090565b6060600c8054612d8190614af3565b80601f0160208091040260200160405190810160405280929190818152602001828054612dad90614af3565b8015612dfa5780601f10612dcf57610100808354040283529160200191612dfa565b820191906000526020600020905b815481529060010190602001808311612ddd57829003601f168201915b5050505050905090565b60606000821415612e4c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f60565b600082905060005b60008214612e7e578080612e6790614b56565b915050600a82612e77919061497e565b9150612e54565b60008167ffffffffffffffff811115612e9a57612e99614cbb565b5b6040519080825280601f01601f191660200182016040528015612ecc5781602001600182028036833780820191505090505b5090505b60008514612f5957600182612ee59190614a09565b9150600a85612ef49190614b9f565b6030612f009190614928565b60f81b818381518110612f1657612f15614c8c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f52919061497e565b9450612ed0565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061303057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613040575061303f82613249565b5b9050919050565b61305183836132b3565b61305e60008484846130b2565b61309d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309490614478565b60405180910390fd5b505050565b6130ad838383613481565b505050565b60006130d38473ffffffffffffffffffffffffffffffffffffffff16613595565b1561323c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130fc6125a0565b8786866040518563ffffffff1660e01b815260040161311e94939291906143a6565b602060405180830381600087803b15801561313857600080fd5b505af192505050801561316957506040513d601f19601f820116820180604052508101906131669190613d32565b60015b6131ec573d8060008114613199576040519150601f19603f3d011682016040523d82523d6000602084013e61319e565b606091505b506000815114156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db90614478565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613241565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331a90614638565b60405180910390fd5b61332c81612534565b1561336c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613363906144b8565b60405180910390fd5b613378600083836130a2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133c89190614928565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61348c8383836135a8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134cf576134ca816135ad565b61350e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461350d5761350c83826135f6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135515761354c81613763565b613590565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461358f5761358e8282613834565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161360384611496565b61360d9190614a09565b90506000600760008481526020019081526020016000205490508181146136f2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137779190614a09565b90506000600960008481526020019081526020016000205490506000600883815481106137a7576137a6614c8c565b5b9060005260206000200154905080600883815481106137c9576137c8614c8c565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061381857613817614c5d565b5b6001900381819060005260206000200160009055905550505050565b600061383f83611496565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546138bf90614af3565b90600052602060002090601f0160209004810192826138e15760008555613928565b82601f106138fa57805160ff1916838001178555613928565b82800160010185558215613928579182015b8281111561392757825182559160200191906001019061390c565b5b5090506139359190613939565b5090565b5b8082111561395257600081600090555060010161393a565b5090565b600061396961396484614878565b614853565b90508281526020810184848401111561398557613984614cf9565b5b613990848285614ab1565b509392505050565b60006139ab6139a6846148a9565b614853565b9050828152602081018484840111156139c7576139c6614cf9565b5b6139d2848285614ab1565b509392505050565b6000813590506139e9816154bf565b92915050565b60008083601f840112613a0557613a04614cef565b5b8235905067ffffffffffffffff811115613a2257613a21614cea565b5b602083019150836020820283011115613a3e57613a3d614cf4565b5b9250929050565b600081359050613a54816154d6565b92915050565b600081359050613a69816154ed565b92915050565b600081519050613a7e816154ed565b92915050565b600082601f830112613a9957613a98614cef565b5b8135613aa9848260208601613956565b91505092915050565b600082601f830112613ac757613ac6614cef565b5b8135613ad7848260208601613998565b91505092915050565b600081359050613aef81615504565b92915050565b600060208284031215613b0b57613b0a614d03565b5b6000613b19848285016139da565b91505092915050565b60008060408385031215613b3957613b38614d03565b5b6000613b47858286016139da565b9250506020613b58858286016139da565b9150509250929050565b600080600060608486031215613b7b57613b7a614d03565b5b6000613b89868287016139da565b9350506020613b9a868287016139da565b9250506040613bab86828701613ae0565b9150509250925092565b60008060008060808587031215613bcf57613bce614d03565b5b6000613bdd878288016139da565b9450506020613bee878288016139da565b9350506040613bff87828801613ae0565b925050606085013567ffffffffffffffff811115613c2057613c1f614cfe565b5b613c2c87828801613a84565b91505092959194509250565b60008060408385031215613c4f57613c4e614d03565b5b6000613c5d858286016139da565b9250506020613c6e85828601613a45565b9150509250929050565b60008060408385031215613c8f57613c8e614d03565b5b6000613c9d858286016139da565b9250506020613cae85828601613ae0565b9150509250929050565b60008060208385031215613ccf57613cce614d03565b5b600083013567ffffffffffffffff811115613ced57613cec614cfe565b5b613cf9858286016139ef565b92509250509250929050565b600060208284031215613d1b57613d1a614d03565b5b6000613d2984828501613a5a565b91505092915050565b600060208284031215613d4857613d47614d03565b5b6000613d5684828501613a6f565b91505092915050565b600060208284031215613d7557613d74614d03565b5b600082013567ffffffffffffffff811115613d9357613d92614cfe565b5b613d9f84828501613ab2565b91505092915050565b600060208284031215613dbe57613dbd614d03565b5b6000613dcc84828501613ae0565b91505092915050565b60008060408385031215613dec57613deb614d03565b5b6000613dfa85828601613ae0565b9250506020613e0b858286016139da565b9150509250929050565b613e1e81614a3d565b82525050565b613e2d81614a4f565b82525050565b6000613e3e826148da565b613e4881856148f0565b9350613e58818560208601614ac0565b613e6181614d08565b840191505092915050565b6000613e77826148e5565b613e81818561490c565b9350613e91818560208601614ac0565b613e9a81614d08565b840191505092915050565b6000613eb0826148e5565b613eba818561491d565b9350613eca818560208601614ac0565b80840191505092915050565b6000613ee3602b8361490c565b9150613eee82614d19565b604082019050919050565b6000613f0660328361490c565b9150613f1182614d68565b604082019050919050565b6000613f2960268361490c565b9150613f3482614db7565b604082019050919050565b6000613f4c601c8361490c565b9150613f5782614e06565b602082019050919050565b6000613f6f600f8361490c565b9150613f7a82614e2f565b602082019050919050565b6000613f92600e8361490c565b9150613f9d82614e58565b602082019050919050565b6000613fb560248361490c565b9150613fc082614e81565b604082019050919050565b6000613fd860198361490c565b9150613fe382614ed0565b602082019050919050565b6000613ffb603a8361490c565b915061400682614ef9565b604082019050919050565b600061401e601d8361490c565b915061402982614f48565b602082019050919050565b6000614041602c8361490c565b915061404c82614f71565b604082019050919050565b600061406460388361490c565b915061406f82614fc0565b604082019050919050565b6000614087602a8361490c565b91506140928261500f565b604082019050919050565b60006140aa60298361490c565b91506140b58261505e565b604082019050919050565b60006140cd60198361490c565b91506140d8826150ad565b602082019050919050565b60006140f060208361490c565b91506140fb826150d6565b602082019050919050565b6000614113602c8361490c565b915061411e826150ff565b604082019050919050565b600061413660208361490c565b91506141418261514e565b602082019050919050565b600061415960298361490c565b915061416482615177565b604082019050919050565b600061417c602f8361490c565b9150614187826151c6565b604082019050919050565b600061419f60328361490c565b91506141aa82615215565b604082019050919050565b60006141c260188361490c565b91506141cd82615264565b602082019050919050565b60006141e560128361490c565b91506141f08261528d565b602082019050919050565b600061420860218361490c565b9150614213826152b6565b604082019050919050565b600061422b600083614901565b915061423682615305565b600082019050919050565b600061424e60318361490c565b915061425982615308565b604082019050919050565b6000614271601b8361490c565b915061427c82615357565b602082019050919050565b6000614294602c8361490c565b915061429f82615380565b604082019050919050565b60006142b7602c8361490c565b91506142c2826153cf565b604082019050919050565b60006142da60148361490c565b91506142e58261541e565b602082019050919050565b60006142fd60308361490c565b915061430882615447565b604082019050919050565b600061432060158361490c565b915061432b82615496565b602082019050919050565b61433f81614aa7565b82525050565b60006143518286613ea5565b915061435d8285613ea5565b91506143698284613ea5565b9150819050949350505050565b60006143818261421e565b9150819050919050565b60006020820190506143a06000830184613e15565b92915050565b60006080820190506143bb6000830187613e15565b6143c86020830186613e15565b6143d56040830185614336565b81810360608301526143e78184613e33565b905095945050505050565b60006040820190506144076000830185613e15565b6144146020830184614336565b9392505050565b60006020820190506144306000830184613e24565b92915050565b600060208201905081810360008301526144508184613e6c565b905092915050565b6000602082019050818103600083015261447181613ed6565b9050919050565b6000602082019050818103600083015261449181613ef9565b9050919050565b600060208201905081810360008301526144b181613f1c565b9050919050565b600060208201905081810360008301526144d181613f3f565b9050919050565b600060208201905081810360008301526144f181613f62565b9050919050565b6000602082019050818103600083015261451181613f85565b9050919050565b6000602082019050818103600083015261453181613fa8565b9050919050565b6000602082019050818103600083015261455181613fcb565b9050919050565b6000602082019050818103600083015261457181613fee565b9050919050565b6000602082019050818103600083015261459181614011565b9050919050565b600060208201905081810360008301526145b181614034565b9050919050565b600060208201905081810360008301526145d181614057565b9050919050565b600060208201905081810360008301526145f18161407a565b9050919050565b600060208201905081810360008301526146118161409d565b9050919050565b60006020820190508181036000830152614631816140c0565b9050919050565b60006020820190508181036000830152614651816140e3565b9050919050565b6000602082019050818103600083015261467181614106565b9050919050565b6000602082019050818103600083015261469181614129565b9050919050565b600060208201905081810360008301526146b18161414c565b9050919050565b600060208201905081810360008301526146d18161416f565b9050919050565b600060208201905081810360008301526146f181614192565b9050919050565b60006020820190508181036000830152614711816141b5565b9050919050565b60006020820190508181036000830152614731816141d8565b9050919050565b60006020820190508181036000830152614751816141fb565b9050919050565b6000602082019050818103600083015261477181614241565b9050919050565b6000602082019050818103600083015261479181614264565b9050919050565b600060208201905081810360008301526147b181614287565b9050919050565b600060208201905081810360008301526147d1816142aa565b9050919050565b600060208201905081810360008301526147f1816142cd565b9050919050565b60006020820190508181036000830152614811816142f0565b9050919050565b6000602082019050818103600083015261483181614313565b9050919050565b600060208201905061484d6000830184614336565b92915050565b600061485d61486e565b90506148698282614b25565b919050565b6000604051905090565b600067ffffffffffffffff82111561489357614892614cbb565b5b61489c82614d08565b9050602081019050919050565b600067ffffffffffffffff8211156148c4576148c3614cbb565b5b6148cd82614d08565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061493382614aa7565b915061493e83614aa7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561497357614972614bd0565b5b828201905092915050565b600061498982614aa7565b915061499483614aa7565b9250826149a4576149a3614bff565b5b828204905092915050565b60006149ba82614aa7565b91506149c583614aa7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149fe576149fd614bd0565b5b828202905092915050565b6000614a1482614aa7565b9150614a1f83614aa7565b925082821015614a3257614a31614bd0565b5b828203905092915050565b6000614a4882614a87565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ade578082015181840152602081019050614ac3565b83811115614aed576000848401525b50505050565b60006002820490506001821680614b0b57607f821691505b60208210811415614b1f57614b1e614c2e565b5b50919050565b614b2e82614d08565b810181811067ffffffffffffffff82111715614b4d57614b4c614cbb565b5b80604052505050565b6000614b6182614aa7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9457614b93614bd0565b5b600182019050919050565b6000614baa82614aa7565b9150614bb583614aa7565b925082614bc557614bc4614bff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f53616c652068617320656e646564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473204d41585f4d494e545f5045525f43414c4c00000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f546865726520617265206e6f20617661696c61626c652064697374726962757460008201527f696f6e73206c65667420746f20636c61696d0000000000000000000000000000602082015250565b7f5265666c656374696f6e206973206e6f74206163746976650000000000000000600082015250565b7f45786365656473204d41585f535550504c590000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f44657374726f7920436c6f636b206973206e6f74206163746976650000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f7420617070726f766564206e6f7220746f6b656e60008201527f20697320617070726f7665640000000000000000000000000000000000000000602082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f496e636f72726563742045746865722076616c75650000000000000000000000600082015250565b6154c881614a3d565b81146154d357600080fd5b50565b6154df81614a4f565b81146154ea57600080fd5b50565b6154f681614a5b565b811461550157600080fd5b50565b61550d81614aa7565b811461551857600080fd5b5056fea26469706673582212204ea9555c0b0a261c7d94a7c5069d86d7671912e9f0b0a21c10ba9201465b4e2064736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c476c69746368436c6f636b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000347434c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): GlitchClocks
Arg [1] : symbol (string): GCL
Arg [2] : initBaseURI (string):

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 476c69746368436c6f636b730000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 47434c0000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45347:6230:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51412:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48475:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21621:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23180:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22703:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46634:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47301:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35360:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24070:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35028:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45589:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50634:122;;;;;;;;;;;;;:::i;:::-;;45768:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24480:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41325:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45539:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48828:531;;;;;;;;;;;;;:::i;:::-;;35550:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49474:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45688:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47534:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21315:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21045:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43226:94;;;;;;;;;;;;;:::i;:::-;;50324:85;;;;;;;;;;;;;:::i;:::-;;50761:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42575:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46533:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21790:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48339:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23473:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47789:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45724:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49687:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24736:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51126:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45811:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49830:489;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48027:307;;;:::i;:::-;;23839:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50523:106;;;;;;;;;;;;;:::i;:::-;;43475:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50414:104;;;;;;;;;;;;;:::i;:::-;;46760:512;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51412:162;51515:4;51533:36;51557:11;51533:23;:36::i;:::-;51526:43;;51412:162;;;:::o;48475:348::-;48569:7;46469:19;;;;;;;;;;;46461:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48583:25:::1;48617:17:::0;48637:16:::1;48647:5;48637:9;:16::i;:::-;48617:36;;48664:9;48660:128;48683:9;48679:1;:13;48660:128;;;48726:56;48752:29;48772:5;48779:1;48752:19;:29::i;:::-;48726:25;:56::i;:::-;48705:77;;;;;:::i;:::-;;;48694:3;;;;;:::i;:::-;;;;48660:128;;;;48801:17;48794:24;;;;48475:348:::0;;;:::o;21621:100::-;21675:13;21708:5;21701:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21621:100;:::o;23180:221::-;23256:7;23284:16;23292:7;23284;:16::i;:::-;23276:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23369:15;:24;23385:7;23369:24;;;;;;;;;;;;;;;;;;;;;23362:31;;23180:221;;;:::o;22703:411::-;22784:13;22800:23;22815:7;22800:14;:23::i;:::-;22784:39;;22848:5;22842:11;;:2;:11;;;;22834:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22942:5;22926:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22951:37;22968:5;22975:12;:10;:12::i;:::-;22951:16;:37::i;:::-;22926:62;22904:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23085:21;23094:2;23098:7;23085:8;:21::i;:::-;22773:341;22703:411;;:::o;46634:121::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46733:17:::1;46716:14;:34;;;;;;;;;;;;:::i;:::-;;46634:121:::0;:::o;47301:204::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47368:16:::1;47387:13;:11;:13::i;:::-;47368:32;;47410:9;47422:1;47410:13;;47405:96;47430:14;47425:1;:19;47405:96;;47457:38;47467:10;47493:1;47479:11;:15;;;;:::i;:::-;47457:9;:38::i;:::-;47446:3;;;;;:::i;:::-;;;;47405:96;;;;47363:142;47301:204:::0;:::o;35360:113::-;35421:7;35448:10;:17;;;;35441:24;;35360:113;:::o;24070:339::-;24265:41;24284:12;:10;:12::i;:::-;24298:7;24265:18;:41::i;:::-;24257:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24373:28;24383:4;24389:2;24393:7;24373:9;:28::i;:::-;24070:339;;;:::o;35028:256::-;35125:7;35161:23;35178:5;35161:16;:23::i;:::-;35153:5;:31;35145:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35250:12;:19;35263:5;35250:19;;;;;;;;;;;;;;;:26;35270:5;35250:26;;;;;;;;;;;;35243:33;;35028:256;;;;:::o;45589:42::-;45626:5;45589:42;:::o;50634:122::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50692:10:::1;50684:24;;:47;50709:21;50684:47;;;;;;;;;;;;;;;;;;;;;;;50676:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;50634:122::o:0;45768:39::-;;;;;;;;;;;;;:::o;24480:185::-;24618:39;24635:4;24641:2;24645:7;24618:39;;;;;;;;;;;;:16;:39::i;:::-;24480:185;;;:::o;41325:245::-;41443:41;41462:12;:10;:12::i;:::-;41476:7;41443:18;:41::i;:::-;41435:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;41548:14;41554:7;41548:5;:14::i;:::-;41325:245;:::o;45539:46::-;45574:11;45539:46;:::o;48828:531::-;46469:19;;;;;;;;;;;46461:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48875:23:::1;48907:17:::0;48927:21:::1;48937:10;48927:9;:21::i;:::-;48907:41;;48959:9;48955:202;48978:9;48974:1;:13;48955:202;;;49000:15;49018:34;49038:10;49050:1;49018:19;:34::i;:::-;49000:52;;49077:23;:32;49101:7;49077:32;;;;;;;;;;;;49058:51;;;;;:::i;:::-;;;49150:1;49115:23;:32;49139:7;49115:32;;;;;;;;;;;:36;;;;48994:163;48989:3;;;;;:::i;:::-;;;;48955:202;;;;49189:1;49171:15;:19;49163:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;49255:39;49266:10;49278:15;49255:39;;;;;;;:::i;:::-;;;;;;;;49299:55;49325:10;49338:15;49299:17;:55::i;:::-;48870:489;;48828:531::o:0;35550:233::-;35625:7;35661:30;:28;:30::i;:::-;35653:5;:38;35645:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35758:10;35769:5;35758:17;;;;;;;;:::i;:::-;;;;;;;;;;35751:24;;35550:233;;;:::o;49474:103::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49560:12:::1;49544:13;:28;;;;;;;;;;;;:::i;:::-;;49474:103:::0;:::o;45688:32::-;;;;;;;;;;;;;:::o;47534:226::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47622:16:::1;47641:13;:11;:13::i;:::-;47622:32;;47664:9;47676:1;47664:13;;47659:97;47684:14;47679:1;:19;47659:97;;47711:39;47721:11;47748:1;47734:11;:15;;;;:::i;:::-;47711:9;:39::i;:::-;47700:3;;;;;:::i;:::-;;;;47659:97;;;;47617:143;47534:226:::0;;:::o;21315:239::-;21387:7;21407:13;21423:7;:16;21431:7;21423:16;;;;;;;;;;;;;;;;;;;;;21407:32;;21475:1;21458:19;;:5;:19;;;;21450:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21541:5;21534:12;;;21315:239;;;:::o;21045:208::-;21117:7;21162:1;21145:19;;:5;:19;;;;21137:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21229:9;:16;21239:5;21229:16;;;;;;;;;;;;;;;;21222:23;;21045:208;;;:::o;43226:94::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43291:21:::1;43309:1;43291:9;:21::i;:::-;43226:94::o:0;50324:85::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50392:12:::1;;;;;;;;;;;50391:13;50376:12;;:28;;;;;;;;;;;;;;;;;;50324:85::o:0;50761:360::-;46268:12;;;;;;;;;;;46260:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46362:19:::1;;;;;;;;;;;46354:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;50850:39:::2;50869:10;50881:7;50850:18;:39::i;:::-;50842:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;50945:14;50951:7;50945:5;:14::i;:::-;50991:1;50964:11;:23;50976:10;50964:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;50999:21;51039:1;51023:13;:11;:13::i;:::-;:17;;;;:::i;:::-;50999:41;;51045:36;51055:10;51067:13;51045:9;:36::i;:::-;51093:23;51108:7;51093:23;;;;;;:::i;:::-;;;;;;;;50837:284;50761:360:::0;:::o;42575:87::-;42621:7;42648:6;;;;;;;;;;;42641:13;;42575:87;:::o;46533:96::-;46583:13;46610:14;46603:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46533:96;:::o;21790:104::-;21846:13;21879:7;21872:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21790:104;:::o;48339:131::-;48412:7;48433:23;:32;48457:7;48433:32;;;;;;;;;;;;48426:39;;48339:131;;;:::o;23473:295::-;23588:12;:10;:12::i;:::-;23576:24;;:8;:24;;;;23568:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23688:8;23643:18;:32;23662:12;:10;:12::i;:::-;23643:32;;;;;;;;;;;;;;;:42;23676:8;23643:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23741:8;23712:48;;23727:12;:10;:12::i;:::-;23712:48;;;23751:8;23712:48;;;;;;:::i;:::-;;;;;;;;23473:295;;:::o;47789:233::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47870:16:::1;47889:13;:11;:13::i;:::-;47870:32;;47912:9;47907:111;47931:13;;:20;;47927:1;:24;47907:111;;;47964:48;47974:13;;47988:1;47974:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48010:1;48006;47992:11;:15;;;;:::i;:::-;:19;;;;:::i;:::-;47964:9;:48::i;:::-;47953:3;;;;;:::i;:::-;;;;47907:111;;;;47865:157;47789:233:::0;;:::o;45724:40::-;;;;;;;;;;;;;:::o;49687:138::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49799:21:::1;49777:19;:43;;;;;;;;;;;;:::i;:::-;;49687:138:::0;:::o;24736:328::-;24911:41;24930:12;:10;:12::i;:::-;24944:7;24911:18;:41::i;:::-;24903:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25017:39;25031:4;25037:2;25041:7;25050:5;25017:13;:39::i;:::-;24736:328;;;;:::o;51126:104::-;51185:7;51206:11;:19;51218:6;51206:19;;;;;;;;;;;;;;;;51199:26;;51126:104;;;:::o;45811:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49830:489::-;49915:13;49950:16;49958:7;49950;:16::i;:::-;49937:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;50031:23;50067:1;50057:7;:11;;;;:::i;:::-;50031:37;;50073:28;50104:10;:8;:10::i;:::-;50073:41;;50119:34;50156:16;:14;:16::i;:::-;50119:53;;50225:14;50247:26;:15;:24;:26::i;:::-;50281:20;50201:107;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50177:137;;;;;49830:489;;;:::o;48027:307::-;46469:19;;;;;;;;;;;46461:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;42806:12:::1;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48094:18:::2;48115:13;:11;:13::i;:::-;48094:34;;48133:22;48170:10;48158:9;:22;;;;:::i;:::-;48133:47;;48191:9;48187:110;48210:10;48206:1;:14;48187:110;;;48277:14;48233:23;:40;48257:15;48270:1;48257:12;:15::i;:::-;48233:40;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;;;;;;;48222:3;;;;;:::i;:::-;;;;48187:110;;;;48306:23;48319:9;48306:23;;;;;;:::i;:::-;;;;;;;;48089:245;;48027:307::o:0;23839:164::-;23936:4;23960:18;:25;23979:5;23960:25;;;;;;;;;;;;;;;:35;23986:8;23960:35;;;;;;;;;;;;;;;;;;;;;;;;;23953:42;;23839:164;;;;:::o;50523:106::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50605:19:::1;;;;;;;;;;;50604:20;50582:19;;:42;;;;;;;;;;;;;;;;;;50523:106::o:0;43475:192::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43584:1:::1;43564:22;;:8;:22;;;;43556:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43640:19;43650:8;43640:9;:19::i;:::-;43475:192:::0;:::o;50414:104::-;42806:12;:10;:12::i;:::-;42795:23;;:7;:5;:7::i;:::-;:23;;;42787:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50493:20:::1;;;;;;;;;;;50492:21;50469:20;;:44;;;;;;;;;;;;;;;;;;50414:104::o:0;46760:512::-;46268:12;;;;;;;;;;;46260:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46849:13:::1;:11;:13::i;:::-;45626:5;46836:26;46828:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;46909:1;46899:7;:11;:43;;;;;45680:2;46914:7;:28;;46899:43;46886:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;47028:7;47012:13;:11;:13::i;:::-;:23;;;;:::i;:::-;45626:5;46998:37;;46985:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;47103:7;45574:11;47092:18;;;;:::i;:::-;47079:9;:31;;47071:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;47148:9;47143:125;47167:7;47163:1;:11;47143:125;;;47187:17;47223:1;47207:13;:11;:13::i;:::-;:17;;;;:::i;:::-;47187:37;;47230:32;47240:10;47252:9;47230;:32::i;:::-;47181:87;47176:3;;;;;:::i;:::-;;;;47143:125;;;;46760:512:::0;:::o;34720:224::-;34822:4;34861:35;34846:50;;;:11;:50;;;;:90;;;;34900:36;34924:11;34900:23;:36::i;:::-;34846:90;34839:97;;34720:224;;;:::o;26574:127::-;26639:4;26691:1;26663:30;;:7;:16;26671:7;26663:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26656:37;;26574:127;;;:::o;16098:98::-;16151:7;16178:10;16171:17;;16098:98;:::o;30556:174::-;30658:2;30631:15;:24;30647:7;30631:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30714:7;30710:2;30676:46;;30685:23;30700:7;30685:14;:23::i;:::-;30676:46;;;;;;;;;;;;30556:174;;:::o;27558:110::-;27634:26;27644:2;27648:7;27634:26;;;;;;;;;;;;:9;:26::i;:::-;27558:110;;:::o;26868:348::-;26961:4;26986:16;26994:7;26986;:16::i;:::-;26978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27062:13;27078:23;27093:7;27078:14;:23::i;:::-;27062:39;;27131:5;27120:16;;:7;:16;;;:51;;;;27164:7;27140:31;;:20;27152:7;27140:11;:20::i;:::-;:31;;;27120:51;:87;;;;27175:32;27192:5;27199:7;27175:16;:32::i;:::-;27120:87;27112:96;;;26868:348;;;;:::o;29860:578::-;30019:4;29992:31;;:23;30007:7;29992:14;:23::i;:::-;:31;;;29984:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30102:1;30088:16;;:2;:16;;;;30080:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30158:39;30179:4;30185:2;30189:7;30158:20;:39::i;:::-;30262:29;30279:1;30283:7;30262:8;:29::i;:::-;30323:1;30304:9;:15;30314:4;30304:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30352:1;30335:9;:13;30345:2;30335:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30383:2;30364:7;:16;30372:7;30364:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30422:7;30418:2;30403:27;;30412:4;30403:27;;;;;;;;;;;;29860:578;;;:::o;29163:360::-;29223:13;29239:23;29254:7;29239:14;:23::i;:::-;29223:39;;29275:48;29296:5;29311:1;29315:7;29275:20;:48::i;:::-;29364:29;29381:1;29385:7;29364:8;:29::i;:::-;29426:1;29406:9;:16;29416:5;29406:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29445:7;:16;29453:7;29445:16;;;;;;;;;;;;29438:23;;;;;;;;;;;29507:7;29503:1;29479:36;;29488:5;29479:36;;;;;;;;;;;;29212:311;29163:360;:::o;9464:317::-;9579:6;9554:21;:31;;9546:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9633:12;9651:9;:14;;9673:6;9651:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9632:52;;;9703:7;9695:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;9535:246;9464:317;;:::o;43675:173::-;43731:16;43750:6;;;;;;;;;;;43731:25;;43776:8;43767:6;;:17;;;;;;;;;;;;;;;;;;43831:8;43800:40;;43821:8;43800:40;;;;;;;;;;;;43720:128;43675:173;:::o;25946:315::-;26103:28;26113:4;26119:2;26123:7;26103:9;:28::i;:::-;26150:48;26173:4;26179:2;26183:7;26192:5;26150:22;:48::i;:::-;26142:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25946:315;;;;:::o;49364:105::-;49424:13;49451;49444:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49364:105;:::o;49582:100::-;49631:13;49658:19;49651:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49582:100;:::o;16623:723::-;16679:13;16909:1;16900:5;:10;16896:53;;;16927:10;;;;;;;;;;;;;;;;;;;;;16896:53;16959:12;16974:5;16959:20;;16990:14;17015:78;17030:1;17022:4;:9;17015:78;;17048:8;;;;;:::i;:::-;;;;17079:2;17071:10;;;;;:::i;:::-;;;17015:78;;;17103:19;17135:6;17125:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17103:39;;17153:154;17169:1;17160:5;:10;17153:154;;17197:1;17187:11;;;;;:::i;:::-;;;17264:2;17256:5;:10;;;;:::i;:::-;17243:2;:24;;;;:::i;:::-;17230:39;;17213:6;17220;17213:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17293:2;17284:11;;;;;:::i;:::-;;;17153:154;;;17331:6;17317:21;;;;;16623:723;;;;:::o;20676:305::-;20778:4;20830:25;20815:40;;;:11;:40;;;;:105;;;;20887:33;20872:48;;;:11;:48;;;;20815:105;:158;;;;20937:36;20961:11;20937:23;:36::i;:::-;20815:158;20795:178;;20676:305;;;:::o;27895:321::-;28025:18;28031:2;28035:7;28025:5;:18::i;:::-;28076:54;28107:1;28111:2;28115:7;28124:5;28076:22;:54::i;:::-;28054:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27895:321;;;:::o;51235:172::-;51357:45;51384:4;51390:2;51394:7;51357:26;:45::i;:::-;51235:172;;;:::o;31295:799::-;31450:4;31471:15;:2;:13;;;:15::i;:::-;31467:620;;;31523:2;31507:36;;;31544:12;:10;:12::i;:::-;31558:4;31564:7;31573:5;31507:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31503:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31766:1;31749:6;:13;:18;31745:272;;;31792:60;;;;;;;;;;:::i;:::-;;;;;;;;31745:272;31967:6;31961:13;31952:6;31948:2;31944:15;31937:38;31503:529;31640:41;;;31630:51;;;:6;:51;;;;31623:58;;;;;31467:620;32071:4;32064:11;;31295:799;;;;;;;:::o;19180:157::-;19265:4;19304:25;19289:40;;;:11;:40;;;;19282:47;;19180:157;;;:::o;28552:382::-;28646:1;28632:16;;:2;:16;;;;28624:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28705:16;28713:7;28705;:16::i;:::-;28704:17;28696:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28767:45;28796:1;28800:2;28804:7;28767:20;:45::i;:::-;28842:1;28825:9;:13;28835:2;28825:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28873:2;28854:7;:16;28862:7;28854:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28918:7;28914:2;28893:33;;28910:1;28893:33;;;;;;;;;;;;28552:382;;:::o;36396:589::-;36540:45;36567:4;36573:2;36577:7;36540:26;:45::i;:::-;36618:1;36602:18;;:4;:18;;;36598:187;;;36637:40;36669:7;36637:31;:40::i;:::-;36598:187;;;36707:2;36699:10;;:4;:10;;;36695:90;;36726:47;36759:4;36765:7;36726:32;:47::i;:::-;36695:90;36598:187;36813:1;36799:16;;:2;:16;;;36795:183;;;36832:45;36869:7;36832:36;:45::i;:::-;36795:183;;;36905:4;36899:10;;:2;:10;;;36895:83;;36926:40;36954:2;36958:7;36926:27;:40::i;:::-;36895:83;36795:183;36396:589;;;:::o;8142:387::-;8202:4;8410:12;8477:7;8465:20;8457:28;;8520:1;8513:4;:8;8506:15;;;8142:387;;;:::o;32666:126::-;;;;:::o;37708:164::-;37812:10;:17;;;;37785:15;:24;37801:7;37785:24;;;;;;;;;;;:44;;;;37840:10;37856:7;37840:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37708:164;:::o;38499:988::-;38765:22;38815:1;38790:22;38807:4;38790:16;:22::i;:::-;:26;;;;:::i;:::-;38765:51;;38827:18;38848:17;:26;38866:7;38848:26;;;;;;;;;;;;38827:47;;38995:14;38981:10;:28;38977:328;;39026:19;39048:12;:18;39061:4;39048:18;;;;;;;;;;;;;;;:34;39067:14;39048:34;;;;;;;;;;;;39026:56;;39132:11;39099:12;:18;39112:4;39099:18;;;;;;;;;;;;;;;:30;39118:10;39099:30;;;;;;;;;;;:44;;;;39249:10;39216:17;:30;39234:11;39216:30;;;;;;;;;;;:43;;;;39011:294;38977:328;39401:17;:26;39419:7;39401:26;;;;;;;;;;;39394:33;;;39445:12;:18;39458:4;39445:18;;;;;;;;;;;;;;;:34;39464:14;39445:34;;;;;;;;;;;39438:41;;;38580:907;;38499:988;;:::o;39782:1079::-;40035:22;40080:1;40060:10;:17;;;;:21;;;;:::i;:::-;40035:46;;40092:18;40113:15;:24;40129:7;40113:24;;;;;;;;;;;;40092:45;;40464:19;40486:10;40497:14;40486:26;;;;;;;;:::i;:::-;;;;;;;;;;40464:48;;40550:11;40525:10;40536;40525:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40661:10;40630:15;:28;40646:11;40630:28;;;;;;;;;;;:41;;;;40802:15;:24;40818:7;40802:24;;;;;;;;;;;40795:31;;;40837:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39853:1008;;;39782:1079;:::o;37286:221::-;37371:14;37388:20;37405:2;37388:16;:20::i;:::-;37371:37;;37446:7;37419:12;:16;37432:2;37419:16;;;;;;;;;;;;;;;:24;37436:6;37419:24;;;;;;;;;;;:34;;;;37493:6;37464:17;:26;37482:7;37464:26;;;;;;;;;;;:35;;;;37360:147;37286:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:474::-;8382:6;8390;8439:2;8427:9;8418:7;8414:23;8410:32;8407:119;;;8445:79;;:::i;:::-;8407:119;8565:1;8590:53;8635:7;8626:6;8615:9;8611:22;8590:53;:::i;:::-;8580:63;;8536:117;8692:2;8718:53;8763:7;8754:6;8743:9;8739:22;8718:53;:::i;:::-;8708:63;;8663:118;8314:474;;;;;:::o;8794:118::-;8881:24;8899:5;8881:24;:::i;:::-;8876:3;8869:37;8794:118;;:::o;8918:109::-;8999:21;9014:5;8999:21;:::i;:::-;8994:3;8987:34;8918:109;;:::o;9033:360::-;9119:3;9147:38;9179:5;9147:38;:::i;:::-;9201:70;9264:6;9259:3;9201:70;:::i;:::-;9194:77;;9280:52;9325:6;9320:3;9313:4;9306:5;9302:16;9280:52;:::i;:::-;9357:29;9379:6;9357:29;:::i;:::-;9352:3;9348:39;9341:46;;9123:270;9033:360;;;;:::o;9399:364::-;9487:3;9515:39;9548:5;9515:39;:::i;:::-;9570:71;9634:6;9629:3;9570:71;:::i;:::-;9563:78;;9650:52;9695:6;9690:3;9683:4;9676:5;9672:16;9650:52;:::i;:::-;9727:29;9749:6;9727:29;:::i;:::-;9722:3;9718:39;9711:46;;9491:272;9399:364;;;;:::o;9769:377::-;9875:3;9903:39;9936:5;9903:39;:::i;:::-;9958:89;10040:6;10035:3;9958:89;:::i;:::-;9951:96;;10056:52;10101:6;10096:3;10089:4;10082:5;10078:16;10056:52;:::i;:::-;10133:6;10128:3;10124:16;10117:23;;9879:267;9769:377;;;;:::o;10152:366::-;10294:3;10315:67;10379:2;10374:3;10315:67;:::i;:::-;10308:74;;10391:93;10480:3;10391:93;:::i;:::-;10509:2;10504:3;10500:12;10493:19;;10152:366;;;:::o;10524:::-;10666:3;10687:67;10751:2;10746:3;10687:67;:::i;:::-;10680:74;;10763:93;10852:3;10763:93;:::i;:::-;10881:2;10876:3;10872:12;10865:19;;10524:366;;;:::o;10896:::-;11038:3;11059:67;11123:2;11118:3;11059:67;:::i;:::-;11052:74;;11135:93;11224:3;11135:93;:::i;:::-;11253:2;11248:3;11244:12;11237:19;;10896:366;;;:::o;11268:::-;11410:3;11431:67;11495:2;11490:3;11431:67;:::i;:::-;11424:74;;11507:93;11596:3;11507:93;:::i;:::-;11625:2;11620:3;11616:12;11609:19;;11268:366;;;:::o;11640:::-;11782:3;11803:67;11867:2;11862:3;11803:67;:::i;:::-;11796:74;;11879:93;11968:3;11879:93;:::i;:::-;11997:2;11992:3;11988:12;11981:19;;11640:366;;;:::o;12012:::-;12154:3;12175:67;12239:2;12234:3;12175:67;:::i;:::-;12168:74;;12251:93;12340:3;12251:93;:::i;:::-;12369:2;12364:3;12360:12;12353:19;;12012:366;;;:::o;12384:::-;12526:3;12547:67;12611:2;12606:3;12547:67;:::i;:::-;12540:74;;12623:93;12712:3;12623:93;:::i;:::-;12741:2;12736:3;12732:12;12725:19;;12384:366;;;:::o;12756:::-;12898:3;12919:67;12983:2;12978:3;12919:67;:::i;:::-;12912:74;;12995:93;13084:3;12995:93;:::i;:::-;13113:2;13108:3;13104:12;13097:19;;12756:366;;;:::o;13128:::-;13270:3;13291:67;13355:2;13350:3;13291:67;:::i;:::-;13284:74;;13367:93;13456:3;13367:93;:::i;:::-;13485:2;13480:3;13476:12;13469:19;;13128:366;;;:::o;13500:::-;13642:3;13663:67;13727:2;13722:3;13663:67;:::i;:::-;13656:74;;13739:93;13828:3;13739:93;:::i;:::-;13857:2;13852:3;13848:12;13841:19;;13500:366;;;:::o;13872:::-;14014:3;14035:67;14099:2;14094:3;14035:67;:::i;:::-;14028:74;;14111:93;14200:3;14111:93;:::i;:::-;14229:2;14224:3;14220:12;14213:19;;13872:366;;;:::o;14244:::-;14386:3;14407:67;14471:2;14466:3;14407:67;:::i;:::-;14400:74;;14483:93;14572:3;14483:93;:::i;:::-;14601:2;14596:3;14592:12;14585:19;;14244:366;;;:::o;14616:::-;14758:3;14779:67;14843:2;14838:3;14779:67;:::i;:::-;14772:74;;14855:93;14944:3;14855:93;:::i;:::-;14973:2;14968:3;14964:12;14957:19;;14616:366;;;:::o;14988:::-;15130:3;15151:67;15215:2;15210:3;15151:67;:::i;:::-;15144:74;;15227:93;15316:3;15227:93;:::i;:::-;15345:2;15340:3;15336:12;15329:19;;14988:366;;;:::o;15360:::-;15502:3;15523:67;15587:2;15582:3;15523:67;:::i;:::-;15516:74;;15599:93;15688:3;15599:93;:::i;:::-;15717:2;15712:3;15708:12;15701:19;;15360:366;;;:::o;15732:::-;15874:3;15895:67;15959:2;15954:3;15895:67;:::i;:::-;15888:74;;15971:93;16060:3;15971:93;:::i;:::-;16089:2;16084:3;16080:12;16073:19;;15732:366;;;:::o;16104:::-;16246:3;16267:67;16331:2;16326:3;16267:67;:::i;:::-;16260:74;;16343:93;16432:3;16343:93;:::i;:::-;16461:2;16456:3;16452:12;16445:19;;16104:366;;;:::o;16476:::-;16618:3;16639:67;16703:2;16698:3;16639:67;:::i;:::-;16632:74;;16715:93;16804:3;16715:93;:::i;:::-;16833:2;16828:3;16824:12;16817:19;;16476:366;;;:::o;16848:::-;16990:3;17011:67;17075:2;17070:3;17011:67;:::i;:::-;17004:74;;17087:93;17176:3;17087:93;:::i;:::-;17205:2;17200:3;17196:12;17189:19;;16848:366;;;:::o;17220:::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:::-;17734:3;17755:67;17819:2;17814:3;17755:67;:::i;:::-;17748:74;;17831:93;17920:3;17831:93;:::i;:::-;17949:2;17944:3;17940:12;17933:19;;17592:366;;;:::o;17964:::-;18106:3;18127:67;18191:2;18186:3;18127:67;:::i;:::-;18120:74;;18203:93;18292:3;18203:93;:::i;:::-;18321:2;18316:3;18312:12;18305:19;;17964:366;;;:::o;18336:::-;18478:3;18499:67;18563:2;18558:3;18499:67;:::i;:::-;18492:74;;18575:93;18664:3;18575:93;:::i;:::-;18693:2;18688:3;18684:12;18677:19;;18336:366;;;:::o;18708:::-;18850:3;18871:67;18935:2;18930:3;18871:67;:::i;:::-;18864:74;;18947:93;19036:3;18947:93;:::i;:::-;19065:2;19060:3;19056:12;19049:19;;18708:366;;;:::o;19080:398::-;19239:3;19260:83;19341:1;19336:3;19260:83;:::i;:::-;19253:90;;19352:93;19441:3;19352:93;:::i;:::-;19470:1;19465:3;19461:11;19454:18;;19080:398;;;:::o;19484:366::-;19626:3;19647:67;19711:2;19706:3;19647:67;:::i;:::-;19640:74;;19723:93;19812:3;19723:93;:::i;:::-;19841:2;19836:3;19832:12;19825:19;;19484:366;;;:::o;19856:::-;19998:3;20019:67;20083:2;20078:3;20019:67;:::i;:::-;20012:74;;20095:93;20184:3;20095:93;:::i;:::-;20213:2;20208:3;20204:12;20197:19;;19856:366;;;:::o;20228:::-;20370:3;20391:67;20455:2;20450:3;20391:67;:::i;:::-;20384:74;;20467:93;20556:3;20467:93;:::i;:::-;20585:2;20580:3;20576:12;20569:19;;20228:366;;;:::o;20600:::-;20742:3;20763:67;20827:2;20822:3;20763:67;:::i;:::-;20756:74;;20839:93;20928:3;20839:93;:::i;:::-;20957:2;20952:3;20948:12;20941:19;;20600:366;;;:::o;20972:::-;21114:3;21135:67;21199:2;21194:3;21135:67;:::i;:::-;21128:74;;21211:93;21300:3;21211:93;:::i;:::-;21329:2;21324:3;21320:12;21313:19;;20972:366;;;:::o;21344:::-;21486:3;21507:67;21571:2;21566:3;21507:67;:::i;:::-;21500:74;;21583:93;21672:3;21583:93;:::i;:::-;21701:2;21696:3;21692:12;21685:19;;21344:366;;;:::o;21716:::-;21858:3;21879:67;21943:2;21938:3;21879:67;:::i;:::-;21872:74;;21955:93;22044:3;21955:93;:::i;:::-;22073:2;22068:3;22064:12;22057:19;;21716:366;;;:::o;22088:118::-;22175:24;22193:5;22175:24;:::i;:::-;22170:3;22163:37;22088:118;;:::o;22212:595::-;22440:3;22462:95;22553:3;22544:6;22462:95;:::i;:::-;22455:102;;22574:95;22665:3;22656:6;22574:95;:::i;:::-;22567:102;;22686:95;22777:3;22768:6;22686:95;:::i;:::-;22679:102;;22798:3;22791:10;;22212:595;;;;;;:::o;22813:379::-;22997:3;23019:147;23162:3;23019:147;:::i;:::-;23012:154;;23183:3;23176:10;;22813:379;;;:::o;23198:222::-;23291:4;23329:2;23318:9;23314:18;23306:26;;23342:71;23410:1;23399:9;23395:17;23386:6;23342:71;:::i;:::-;23198:222;;;;:::o;23426:640::-;23621:4;23659:3;23648:9;23644:19;23636:27;;23673:71;23741:1;23730:9;23726:17;23717:6;23673:71;:::i;:::-;23754:72;23822:2;23811:9;23807:18;23798:6;23754:72;:::i;:::-;23836;23904:2;23893:9;23889:18;23880:6;23836:72;:::i;:::-;23955:9;23949:4;23945:20;23940:2;23929:9;23925:18;23918:48;23983:76;24054:4;24045:6;23983:76;:::i;:::-;23975:84;;23426:640;;;;;;;:::o;24072:332::-;24193:4;24231:2;24220:9;24216:18;24208:26;;24244:71;24312:1;24301:9;24297:17;24288:6;24244:71;:::i;:::-;24325:72;24393:2;24382:9;24378:18;24369:6;24325:72;:::i;:::-;24072:332;;;;;:::o;24410:210::-;24497:4;24535:2;24524:9;24520:18;24512:26;;24548:65;24610:1;24599:9;24595:17;24586:6;24548:65;:::i;:::-;24410:210;;;;:::o;24626:313::-;24739:4;24777:2;24766:9;24762:18;24754:26;;24826:9;24820:4;24816:20;24812:1;24801:9;24797:17;24790:47;24854:78;24927:4;24918:6;24854:78;:::i;:::-;24846:86;;24626:313;;;;:::o;24945:419::-;25111:4;25149:2;25138:9;25134:18;25126:26;;25198:9;25192:4;25188:20;25184:1;25173:9;25169:17;25162:47;25226:131;25352:4;25226:131;:::i;:::-;25218:139;;24945:419;;;:::o;25370:::-;25536:4;25574:2;25563:9;25559:18;25551:26;;25623:9;25617:4;25613:20;25609:1;25598:9;25594:17;25587:47;25651:131;25777:4;25651:131;:::i;:::-;25643:139;;25370:419;;;:::o;25795:::-;25961:4;25999:2;25988:9;25984:18;25976:26;;26048:9;26042:4;26038:20;26034:1;26023:9;26019:17;26012:47;26076:131;26202:4;26076:131;:::i;:::-;26068:139;;25795:419;;;:::o;26220:::-;26386:4;26424:2;26413:9;26409:18;26401:26;;26473:9;26467:4;26463:20;26459:1;26448:9;26444:17;26437:47;26501:131;26627:4;26501:131;:::i;:::-;26493:139;;26220:419;;;:::o;26645:::-;26811:4;26849:2;26838:9;26834:18;26826:26;;26898:9;26892:4;26888:20;26884:1;26873:9;26869:17;26862:47;26926:131;27052:4;26926:131;:::i;:::-;26918:139;;26645:419;;;:::o;27070:::-;27236:4;27274:2;27263:9;27259:18;27251:26;;27323:9;27317:4;27313:20;27309:1;27298:9;27294:17;27287:47;27351:131;27477:4;27351:131;:::i;:::-;27343:139;;27070:419;;;:::o;27495:::-;27661:4;27699:2;27688:9;27684:18;27676:26;;27748:9;27742:4;27738:20;27734:1;27723:9;27719:17;27712:47;27776:131;27902:4;27776:131;:::i;:::-;27768:139;;27495:419;;;:::o;27920:::-;28086:4;28124:2;28113:9;28109:18;28101:26;;28173:9;28167:4;28163:20;28159:1;28148:9;28144:17;28137:47;28201:131;28327:4;28201:131;:::i;:::-;28193:139;;27920:419;;;:::o;28345:::-;28511:4;28549:2;28538:9;28534:18;28526:26;;28598:9;28592:4;28588:20;28584:1;28573:9;28569:17;28562:47;28626:131;28752:4;28626:131;:::i;:::-;28618:139;;28345:419;;;:::o;28770:::-;28936:4;28974:2;28963:9;28959:18;28951:26;;29023:9;29017:4;29013:20;29009:1;28998:9;28994:17;28987:47;29051:131;29177:4;29051:131;:::i;:::-;29043:139;;28770:419;;;:::o;29195:::-;29361:4;29399:2;29388:9;29384:18;29376:26;;29448:9;29442:4;29438:20;29434:1;29423:9;29419:17;29412:47;29476:131;29602:4;29476:131;:::i;:::-;29468:139;;29195:419;;;:::o;29620:::-;29786:4;29824:2;29813:9;29809:18;29801:26;;29873:9;29867:4;29863:20;29859:1;29848:9;29844:17;29837:47;29901:131;30027:4;29901:131;:::i;:::-;29893:139;;29620:419;;;:::o;30045:::-;30211:4;30249:2;30238:9;30234:18;30226:26;;30298:9;30292:4;30288:20;30284:1;30273:9;30269:17;30262:47;30326:131;30452:4;30326:131;:::i;:::-;30318:139;;30045:419;;;:::o;30470:::-;30636:4;30674:2;30663:9;30659:18;30651:26;;30723:9;30717:4;30713:20;30709:1;30698:9;30694:17;30687:47;30751:131;30877:4;30751:131;:::i;:::-;30743:139;;30470:419;;;:::o;30895:::-;31061:4;31099:2;31088:9;31084:18;31076:26;;31148:9;31142:4;31138:20;31134:1;31123:9;31119:17;31112:47;31176:131;31302:4;31176:131;:::i;:::-;31168:139;;30895:419;;;:::o;31320:::-;31486:4;31524:2;31513:9;31509:18;31501:26;;31573:9;31567:4;31563:20;31559:1;31548:9;31544:17;31537:47;31601:131;31727:4;31601:131;:::i;:::-;31593:139;;31320:419;;;:::o;31745:::-;31911:4;31949:2;31938:9;31934:18;31926:26;;31998:9;31992:4;31988:20;31984:1;31973:9;31969:17;31962:47;32026:131;32152:4;32026:131;:::i;:::-;32018:139;;31745:419;;;:::o;32170:::-;32336:4;32374:2;32363:9;32359:18;32351:26;;32423:9;32417:4;32413:20;32409:1;32398:9;32394:17;32387:47;32451:131;32577:4;32451:131;:::i;:::-;32443:139;;32170:419;;;:::o;32595:::-;32761:4;32799:2;32788:9;32784:18;32776:26;;32848:9;32842:4;32838:20;32834:1;32823:9;32819:17;32812:47;32876:131;33002:4;32876:131;:::i;:::-;32868:139;;32595:419;;;:::o;33020:::-;33186:4;33224:2;33213:9;33209:18;33201:26;;33273:9;33267:4;33263:20;33259:1;33248:9;33244:17;33237:47;33301:131;33427:4;33301:131;:::i;:::-;33293:139;;33020:419;;;:::o;33445:::-;33611:4;33649:2;33638:9;33634:18;33626:26;;33698:9;33692:4;33688:20;33684:1;33673:9;33669:17;33662:47;33726:131;33852:4;33726:131;:::i;:::-;33718:139;;33445:419;;;:::o;33870:::-;34036:4;34074:2;34063:9;34059:18;34051:26;;34123:9;34117:4;34113:20;34109:1;34098:9;34094:17;34087:47;34151:131;34277:4;34151:131;:::i;:::-;34143:139;;33870:419;;;:::o;34295:::-;34461:4;34499:2;34488:9;34484:18;34476:26;;34548:9;34542:4;34538:20;34534:1;34523:9;34519:17;34512:47;34576:131;34702:4;34576:131;:::i;:::-;34568:139;;34295:419;;;:::o;34720:::-;34886:4;34924:2;34913:9;34909:18;34901:26;;34973:9;34967:4;34963:20;34959:1;34948:9;34944:17;34937:47;35001:131;35127:4;35001:131;:::i;:::-;34993:139;;34720:419;;;:::o;35145:::-;35311:4;35349:2;35338:9;35334:18;35326:26;;35398:9;35392:4;35388:20;35384:1;35373:9;35369:17;35362:47;35426:131;35552:4;35426:131;:::i;:::-;35418:139;;35145:419;;;:::o;35570:::-;35736:4;35774:2;35763:9;35759:18;35751:26;;35823:9;35817:4;35813:20;35809:1;35798:9;35794:17;35787:47;35851:131;35977:4;35851:131;:::i;:::-;35843:139;;35570:419;;;:::o;35995:::-;36161:4;36199:2;36188:9;36184:18;36176:26;;36248:9;36242:4;36238:20;36234:1;36223:9;36219:17;36212:47;36276:131;36402:4;36276:131;:::i;:::-;36268:139;;35995:419;;;:::o;36420:::-;36586:4;36624:2;36613:9;36609:18;36601:26;;36673:9;36667:4;36663:20;36659:1;36648:9;36644:17;36637:47;36701:131;36827:4;36701:131;:::i;:::-;36693:139;;36420:419;;;:::o;36845:::-;37011:4;37049:2;37038:9;37034:18;37026:26;;37098:9;37092:4;37088:20;37084:1;37073:9;37069:17;37062:47;37126:131;37252:4;37126:131;:::i;:::-;37118:139;;36845:419;;;:::o;37270:::-;37436:4;37474:2;37463:9;37459:18;37451:26;;37523:9;37517:4;37513:20;37509:1;37498:9;37494:17;37487:47;37551:131;37677:4;37551:131;:::i;:::-;37543:139;;37270:419;;;:::o;37695:::-;37861:4;37899:2;37888:9;37884:18;37876:26;;37948:9;37942:4;37938:20;37934:1;37923:9;37919:17;37912:47;37976:131;38102:4;37976:131;:::i;:::-;37968:139;;37695:419;;;:::o;38120:222::-;38213:4;38251:2;38240:9;38236:18;38228:26;;38264:71;38332:1;38321:9;38317:17;38308:6;38264:71;:::i;:::-;38120:222;;;;:::o;38348:129::-;38382:6;38409:20;;:::i;:::-;38399:30;;38438:33;38466:4;38458:6;38438:33;:::i;:::-;38348:129;;;:::o;38483:75::-;38516:6;38549:2;38543:9;38533:19;;38483:75;:::o;38564:307::-;38625:4;38715:18;38707:6;38704:30;38701:56;;;38737:18;;:::i;:::-;38701:56;38775:29;38797:6;38775:29;:::i;:::-;38767:37;;38859:4;38853;38849:15;38841:23;;38564:307;;;:::o;38877:308::-;38939:4;39029:18;39021:6;39018:30;39015:56;;;39051:18;;:::i;:::-;39015:56;39089:29;39111:6;39089:29;:::i;:::-;39081:37;;39173:4;39167;39163:15;39155:23;;38877:308;;;:::o;39191:98::-;39242:6;39276:5;39270:12;39260:22;;39191:98;;;:::o;39295:99::-;39347:6;39381:5;39375:12;39365:22;;39295:99;;;:::o;39400:168::-;39483:11;39517:6;39512:3;39505:19;39557:4;39552:3;39548:14;39533:29;;39400:168;;;;:::o;39574:147::-;39675:11;39712:3;39697:18;;39574:147;;;;:::o;39727:169::-;39811:11;39845:6;39840:3;39833:19;39885:4;39880:3;39876:14;39861:29;;39727:169;;;;:::o;39902:148::-;40004:11;40041:3;40026:18;;39902:148;;;;:::o;40056:305::-;40096:3;40115:20;40133:1;40115:20;:::i;:::-;40110:25;;40149:20;40167:1;40149:20;:::i;:::-;40144:25;;40303:1;40235:66;40231:74;40228:1;40225:81;40222:107;;;40309:18;;:::i;:::-;40222:107;40353:1;40350;40346:9;40339:16;;40056:305;;;;:::o;40367:185::-;40407:1;40424:20;40442:1;40424:20;:::i;:::-;40419:25;;40458:20;40476:1;40458:20;:::i;:::-;40453:25;;40497:1;40487:35;;40502:18;;:::i;:::-;40487:35;40544:1;40541;40537:9;40532:14;;40367:185;;;;:::o;40558:348::-;40598:7;40621:20;40639:1;40621:20;:::i;:::-;40616:25;;40655:20;40673:1;40655:20;:::i;:::-;40650:25;;40843:1;40775:66;40771:74;40768:1;40765:81;40760:1;40753:9;40746:17;40742:105;40739:131;;;40850:18;;:::i;:::-;40739:131;40898:1;40895;40891:9;40880:20;;40558:348;;;;:::o;40912:191::-;40952:4;40972:20;40990:1;40972:20;:::i;:::-;40967:25;;41006:20;41024:1;41006:20;:::i;:::-;41001:25;;41045:1;41042;41039:8;41036:34;;;41050:18;;:::i;:::-;41036:34;41095:1;41092;41088:9;41080:17;;40912:191;;;;:::o;41109:96::-;41146:7;41175:24;41193:5;41175:24;:::i;:::-;41164:35;;41109:96;;;:::o;41211:90::-;41245:7;41288:5;41281:13;41274:21;41263:32;;41211:90;;;:::o;41307:149::-;41343:7;41383:66;41376:5;41372:78;41361:89;;41307:149;;;:::o;41462:126::-;41499:7;41539:42;41532:5;41528:54;41517:65;;41462:126;;;:::o;41594:77::-;41631:7;41660:5;41649:16;;41594:77;;;:::o;41677:154::-;41761:6;41756:3;41751;41738:30;41823:1;41814:6;41809:3;41805:16;41798:27;41677:154;;;:::o;41837:307::-;41905:1;41915:113;41929:6;41926:1;41923:13;41915:113;;;42014:1;42009:3;42005:11;41999:18;41995:1;41990:3;41986:11;41979:39;41951:2;41948:1;41944:10;41939:15;;41915:113;;;42046:6;42043:1;42040:13;42037:101;;;42126:1;42117:6;42112:3;42108:16;42101:27;42037:101;41886:258;41837:307;;;:::o;42150:320::-;42194:6;42231:1;42225:4;42221:12;42211:22;;42278:1;42272:4;42268:12;42299:18;42289:81;;42355:4;42347:6;42343:17;42333:27;;42289:81;42417:2;42409:6;42406:14;42386:18;42383:38;42380:84;;;42436:18;;:::i;:::-;42380:84;42201:269;42150:320;;;:::o;42476:281::-;42559:27;42581:4;42559:27;:::i;:::-;42551:6;42547:40;42689:6;42677:10;42674:22;42653:18;42641:10;42638:34;42635:62;42632:88;;;42700:18;;:::i;:::-;42632:88;42740:10;42736:2;42729:22;42519:238;42476:281;;:::o;42763:233::-;42802:3;42825:24;42843:5;42825:24;:::i;:::-;42816:33;;42871:66;42864:5;42861:77;42858:103;;;42941:18;;:::i;:::-;42858:103;42988:1;42981:5;42977:13;42970:20;;42763:233;;;:::o;43002:176::-;43034:1;43051:20;43069:1;43051:20;:::i;:::-;43046:25;;43085:20;43103:1;43085:20;:::i;:::-;43080:25;;43124:1;43114:35;;43129:18;;:::i;:::-;43114:35;43170:1;43167;43163:9;43158:14;;43002:176;;;;:::o;43184:180::-;43232:77;43229:1;43222:88;43329:4;43326:1;43319:15;43353:4;43350:1;43343:15;43370:180;43418:77;43415:1;43408:88;43515:4;43512:1;43505:15;43539:4;43536:1;43529:15;43556:180;43604:77;43601:1;43594:88;43701:4;43698:1;43691:15;43725:4;43722:1;43715:15;43742:180;43790:77;43787:1;43780:88;43887:4;43884:1;43877:15;43911:4;43908:1;43901:15;43928:180;43976:77;43973:1;43966:88;44073:4;44070:1;44063:15;44097:4;44094:1;44087:15;44114:180;44162:77;44159:1;44152:88;44259:4;44256:1;44249:15;44283:4;44280:1;44273:15;44300:117;44409:1;44406;44399:12;44423:117;44532:1;44529;44522:12;44546:117;44655:1;44652;44645:12;44669:117;44778:1;44775;44768:12;44792:117;44901:1;44898;44891:12;44915:117;45024:1;45021;45014:12;45038:102;45079:6;45130:2;45126:7;45121:2;45114:5;45110:14;45106:28;45096:38;;45038:102;;;:::o;45146:230::-;45286:34;45282:1;45274:6;45270:14;45263:58;45355:13;45350:2;45342:6;45338:15;45331:38;45146:230;:::o;45382:237::-;45522:34;45518:1;45510:6;45506:14;45499:58;45591:20;45586:2;45578:6;45574:15;45567:45;45382:237;:::o;45625:225::-;45765:34;45761:1;45753:6;45749:14;45742:58;45834:8;45829:2;45821:6;45817:15;45810:33;45625:225;:::o;45856:178::-;45996:30;45992:1;45984:6;45980:14;45973:54;45856:178;:::o;46040:165::-;46180:17;46176:1;46168:6;46164:14;46157:41;46040:165;:::o;46211:164::-;46351:16;46347:1;46339:6;46335:14;46328:40;46211:164;:::o;46381:223::-;46521:34;46517:1;46509:6;46505:14;46498:58;46590:6;46585:2;46577:6;46573:15;46566:31;46381:223;:::o;46610:175::-;46750:27;46746:1;46738:6;46734:14;46727:51;46610:175;:::o;46791:245::-;46931:34;46927:1;46919:6;46915:14;46908:58;47000:28;46995:2;46987:6;46983:15;46976:53;46791:245;:::o;47042:179::-;47182:31;47178:1;47170:6;47166:14;47159:55;47042:179;:::o;47227:231::-;47367:34;47363:1;47355:6;47351:14;47344:58;47436:14;47431:2;47423:6;47419:15;47412:39;47227:231;:::o;47464:243::-;47604:34;47600:1;47592:6;47588:14;47581:58;47673:26;47668:2;47660:6;47656:15;47649:51;47464:243;:::o;47713:229::-;47853:34;47849:1;47841:6;47837:14;47830:58;47922:12;47917:2;47909:6;47905:15;47898:37;47713:229;:::o;47948:228::-;48088:34;48084:1;48076:6;48072:14;48065:58;48157:11;48152:2;48144:6;48140:15;48133:36;47948:228;:::o;48182:175::-;48322:27;48318:1;48310:6;48306:14;48299:51;48182:175;:::o;48363:182::-;48503:34;48499:1;48491:6;48487:14;48480:58;48363:182;:::o;48551:231::-;48691:34;48687:1;48679:6;48675:14;48668:58;48760:14;48755:2;48747:6;48743:15;48736:39;48551:231;:::o;48788:182::-;48928:34;48924:1;48916:6;48912:14;48905:58;48788:182;:::o;48976:228::-;49116:34;49112:1;49104:6;49100:14;49093:58;49185:11;49180:2;49172:6;49168:15;49161:36;48976:228;:::o;49210:234::-;49350:34;49346:1;49338:6;49334:14;49327:58;49419:17;49414:2;49406:6;49402:15;49395:42;49210:234;:::o;49450:237::-;49590:34;49586:1;49578:6;49574:14;49567:58;49659:20;49654:2;49646:6;49642:15;49635:45;49450:237;:::o;49693:174::-;49833:26;49829:1;49821:6;49817:14;49810:50;49693:174;:::o;49873:168::-;50013:20;50009:1;50001:6;49997:14;49990:44;49873:168;:::o;50047:220::-;50187:34;50183:1;50175:6;50171:14;50164:58;50256:3;50251:2;50243:6;50239:15;50232:28;50047:220;:::o;50273:114::-;;:::o;50393:236::-;50533:34;50529:1;50521:6;50517:14;50510:58;50602:19;50597:2;50589:6;50585:15;50578:44;50393:236;:::o;50635:177::-;50775:29;50771:1;50763:6;50759:14;50752:53;50635:177;:::o;50818:231::-;50958:34;50954:1;50946:6;50942:14;50935:58;51027:14;51022:2;51014:6;51010:15;51003:39;50818:231;:::o;51055:::-;51195:34;51191:1;51183:6;51179:14;51172:58;51264:14;51259:2;51251:6;51247:15;51240:39;51055:231;:::o;51292:170::-;51432:22;51428:1;51420:6;51416:14;51409:46;51292:170;:::o;51468:235::-;51608:34;51604:1;51596:6;51592:14;51585:58;51677:18;51672:2;51664:6;51660:15;51653:43;51468:235;:::o;51709:171::-;51849:23;51845:1;51837:6;51833:14;51826:47;51709:171;:::o;51886:122::-;51959:24;51977:5;51959:24;:::i;:::-;51952:5;51949:35;51939:63;;51998:1;51995;51988:12;51939:63;51886:122;:::o;52014:116::-;52084:21;52099:5;52084:21;:::i;:::-;52077:5;52074:32;52064:60;;52120:1;52117;52110:12;52064:60;52014:116;:::o;52136:120::-;52208:23;52225:5;52208:23;:::i;:::-;52201:5;52198:34;52188:62;;52246:1;52243;52236:12;52188:62;52136:120;:::o;52262:122::-;52335:24;52353:5;52335:24;:::i;:::-;52328:5;52325:35;52315:63;;52374:1;52371;52364:12;52315:63;52262:122;:::o

Swarm Source

ipfs://4ea9555c0b0a261c7d94a7c5069d86d7671912e9f0b0a21c10ba9201465b4e20
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.