ETH Price: $2,484.44 (+2.80%)

Token

Gummy Gocks (GOCKS)
 

Overview

Max Total Supply

409 GOCKS

Holders

43

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
planckstate.eth
Balance
2 GOCKS
0x3a33e605008433f1eda7bd5c65befa9fccd8c344
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:
GummyGocks

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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


// OpenZeppelin Contracts v4.4.1 (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/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (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);

    /**
     * @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/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (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/security/ReentrancyGuard.sol


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


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

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol



pragma solidity ^0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // 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
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

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

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

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @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 ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

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

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @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 override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: 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 override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: 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`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * 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
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

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

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

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

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

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

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * 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`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/GummyGocks.sol



pragma solidity ^0.8.0;





contract GummyGocks is Ownable, ERC721A, ReentrancyGuard {

  uint256 public immutable maxPerAddressDuringMint;
  uint256 public FREE_MINT_LIMIT_PER_WALLET;
  bool public PAUSED = true;
  uint256 public PRICE = 0.005 ether;

  mapping(address => uint256) private freeMintCountMap;

  struct SaleConfig {
    uint64 publicPrice;
    bool paused;
  }

  SaleConfig public saleConfig;

  constructor(
    uint256 freeMintAllowance
  ) ERC721A("Gummy Gocks", "GOCKS", 20, 6969) {
    FREE_MINT_LIMIT_PER_WALLET = freeMintAllowance;
    maxPerAddressDuringMint = 20;
  }

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

  function privateMint(address[] memory addresses, uint256 quantity) external onlyOwner {
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    for (uint256 i = 0; i < addresses.length; i++) {
      _safeMint(addresses[i], quantity);
    }
  }

  function publicMint(uint256 quantity)
    external
    payable
    callerIsUser
  {
    bool state = PAUSED;
    uint256 publicPrice = PRICE;

    require(
      isPublicSaleOn(publicPrice, state),
      "public sale has not begun yet"
    );
    require(
      numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint,
      "can not mint this many"
    );
    require(totalSupply() + quantity <= collectionSize, "reached max supply");

    uint256 price = publicPrice * quantity;

    uint256 remainingFreeMint = FREE_MINT_LIMIT_PER_WALLET -
                freeMintCountMap[msg.sender];
    if (remainingFreeMint > 0) {
      if (quantity >= remainingFreeMint) {
        price -= remainingFreeMint * publicPrice;
        updateFreeMintCount(msg.sender, remainingFreeMint);
      } else {
        price -= quantity * publicPrice;
        updateFreeMintCount(msg.sender, quantity);
      }
    }

    _safeMint(msg.sender, quantity);
    refundIfOver(price);
  }

  function refundIfOver(uint256 price) private {
    require(msg.value >= price, "Need to send more ETH.");
    if (msg.value > price) {
      payable(msg.sender).transfer(msg.value - price);
    }
  }

  function setSalePaused(bool saleIsPaused) external onlyOwner {
      PAUSED = saleIsPaused;
  }

  function isPublicSaleOn(
    uint256 publicPriceWei,
    bool state
  ) internal view returns (bool) {
    return
      publicPriceWei != 0 &&
      !state;
  }

  function setFreeMintAllowance(uint256 freeMintAllowance)
    external
    onlyOwner
  {
    FREE_MINT_LIMIT_PER_WALLET = freeMintAllowance;
  }

  function updateFreeMintCount(address minter, uint256 count) private {
    freeMintCountMap[minter] += count;
  }

  // For marketing etc.
  function devMint(uint256 quantity) external onlyOwner {
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    require(
      quantity % maxBatchSize == 0,
      "can only mint a multiple of the maxBatchSize"
    );
    uint256 numChunks = quantity / maxBatchSize;
    for (uint256 i = 0; i < numChunks; i++) {
      _safeMint(msg.sender, maxBatchSize);
    }
  }
  
  // // metadata URI
  string private _baseTokenURI;

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

  function setBaseURI(string calldata baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
    _setOwnersExplicit(quantity);
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"freeMintAllowance","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"FREE_MINT_LIMIT_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","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":"quantity","type":"uint256"}],"name":"devMint","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":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"privateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[],"name":"saleConfig","outputs":[{"internalType":"uint64","name":"publicPrice","type":"uint64"},{"internalType":"bool","name":"paused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freeMintAllowance","type":"uint256"}],"name":"setFreeMintAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"saleIsPaused","type":"bool"}],"name":"setSalePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052600060015560006008556001600b60006101000a81548160ff0219169083151502179055506611c37937e08000600c553480156200004157600080fd5b5060405162005a0b38038062005a0b83398181016040528101906200006791906200037c565b6040518060400160405280600b81526020017f47756d6d7920476f636b730000000000000000000000000000000000000000008152506040518060400160405280600581526020017f474f434b530000000000000000000000000000000000000000000000000000008152506014611b39620000f8620000ec620001e960201b60201c565b620001f160201b60201c565b600081116200013e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001359062000418565b60405180910390fd5b6000821162000184576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017b90620003f6565b60405180910390fd5b83600290805190602001906200019c929190620002b5565b508260039080519060200190620001b5929190620002b5565b508160a08181525050806080818152505050505050600160098190555080600a81905550601460c081815250505062000572565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c39062000455565b90600052602060002090601f016020900481019282620002e7576000855562000333565b82601f106200030257805160ff191683800117855562000333565b8280016001018555821562000333579182015b828111156200033257825182559160200191906001019062000315565b5b50905062000342919062000346565b5090565b5b808211156200036157600081600090555060010162000347565b5090565b600081519050620003768162000558565b92915050565b6000602082840312156200038f57600080fd5b60006200039f8482850162000365565b91505092915050565b6000620003b76027836200043a565b9150620003c482620004ba565b604082019050919050565b6000620003de602e836200043a565b9150620003eb8262000509565b604082019050919050565b600060208201905081810360008301526200041181620003a8565b9050919050565b600060208201905081810360008301526200043381620003cf565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200046e57607f821691505b602082108114156200048557620004846200048b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b62000563816200044b565b81146200056f57600080fd5b50565b60805160a05160c051615423620005e860003960008181610d9c0152611724015260008181611250015281816112be015281816112fb01528181612a2b01528181612a54015261322b015260008181610e12015281816111d9015281816114d00152818161268201526126b601526154236000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063a9aad58c116100a0578063c87b56dd1161006f578063c87b56dd14610745578063d7224ba014610782578063dc33e681146107ad578063e985e9c5146107ea578063f2fde38b1461082757610204565b8063a9aad58c146106b1578063ac446002146106dc578063b0551ac4146106f3578063b88d4fde1461071c57610204565b80638da5cb5b116100e75780638da5cb5b146105c957806390aa0b0f146105f45780639231ab2a1461062057806395d89b411461065d578063a22cb4651461068857610204565b8063715018a6146105335780638bc35c2f1461054a5780638d859f3e146105755780638d92becd146105a057610204565b80632db115441161019b5780634f6ccce71161016a5780634f6ccce71461042a57806355f804b3146104675780636352211e1461049057806366a44155146104cd57806370a08231146104f657610204565b80632db115441461037f5780632f745c591461039b578063375a069a146103d857806342842e0e1461040157610204565b806310b0c052116101d757806310b0c052146102d757806318160ddd1461030257806323b872dd1461032d5780632d20fb601461035657610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613b1e565b610850565b60405161023d919061420a565b60405180910390f35b34801561025257600080fd5b5061025b61099a565b6040516102689190614225565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613bb5565b610a2c565b6040516102a591906141a3565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613a65565b610ab1565b005b3480156102e357600080fd5b506102ec610bca565b6040516102f99190614642565b60405180910390f35b34801561030e57600080fd5b50610317610bd0565b6040516103249190614642565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061395f565b610bda565b005b34801561036257600080fd5b5061037d60048036038101906103789190613bb5565b610bea565b005b61039960048036038101906103949190613bb5565b610cc8565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190613a65565b610f5d565b6040516103cf9190614642565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190613bb5565b61115b565b005b34801561040d57600080fd5b506104286004803603810190610423919061395f565b611337565b005b34801561043657600080fd5b50610451600480360381019061044c9190613bb5565b611357565b60405161045e9190614642565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613b70565b6113aa565b005b34801561049c57600080fd5b506104b760048036038101906104b29190613bb5565b61143c565b6040516104c491906141a3565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613aa1565b611452565b005b34801561050257600080fd5b5061051d600480360381019061051891906138fa565b6115b1565b60405161052a9190614642565b60405180910390f35b34801561053f57600080fd5b5061054861169a565b005b34801561055657600080fd5b5061055f611722565b60405161056c9190614642565b60405180910390f35b34801561058157600080fd5b5061058a611746565b6040516105979190614642565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613af5565b61174c565b005b3480156105d557600080fd5b506105de6117e5565b6040516105eb91906141a3565b60405180910390f35b34801561060057600080fd5b5061060961180e565b60405161061792919061465d565b60405180910390f35b34801561062c57600080fd5b5061064760048036038101906106429190613bb5565b611841565b6040516106549190614627565b60405180910390f35b34801561066957600080fd5b50610672611859565b60405161067f9190614225565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190613a29565b6118eb565b005b3480156106bd57600080fd5b506106c6611a6c565b6040516106d3919061420a565b60405180910390f35b3480156106e857600080fd5b506106f1611a7f565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613bb5565b611c00565b005b34801561072857600080fd5b50610743600480360381019061073e91906139ae565b611c86565b005b34801561075157600080fd5b5061076c60048036038101906107679190613bb5565b611ce2565b6040516107799190614225565b60405180910390f35b34801561078e57600080fd5b50610797611d89565b6040516107a49190614642565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906138fa565b611d8f565b6040516107e19190614642565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c9190613923565b611da1565b60405161081e919061420a565b60405180910390f35b34801561083357600080fd5b5061084e600480360381019061084991906138fa565b611e35565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610993575061099282611f2d565b5b9050919050565b6060600280546109a9906149f5565b80601f01602080910402602001604051908101604052809291908181526020018280546109d5906149f5565b8015610a225780601f106109f757610100808354040283529160200191610a22565b820191906000526020600020905b815481529060010190602001808311610a0557829003601f168201915b5050505050905090565b6000610a3782611f97565b610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d906145e7565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610abc8261143c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490614487565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4c611fa5565b73ffffffffffffffffffffffffffffffffffffffff161480610b7b5750610b7a81610b75611fa5565b611da1565b5b610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190614347565b60405180910390fd5b610bc5838383611fad565b505050565b600a5481565b6000600154905090565b610be583838361205f565b505050565b610bf2611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610c106117e5565b73ffffffffffffffffffffffffffffffffffffffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d906143e7565b60405180910390fd5b60026009541415610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca3906145a7565b60405180910390fd5b6002600981905550610cbd81612618565b600160098190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614327565b60405180910390fd5b6000600b60009054906101000a900460ff1690506000600c549050610d5b81836128a6565b610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190614467565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083610dc533611d8f565b610dcf919061479c565b1115610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790614547565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083610e3a610bd0565b610e44919061479c565b1115610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c906143a7565b60405180910390fd5b60008382610e939190614823565b90506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a54610ee491906148b1565b90506000811115610f4357808510610f1e578281610f029190614823565b82610f0d91906148b1565b9150610f1933826128be565b610f42565b8285610f2a9190614823565b82610f3591906148b1565b9150610f4133866128be565b5b5b610f4d3386612918565b610f5682612936565b5050505050565b6000610f68836115b1565b8210610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090614247565b60405180910390fd5b6000610fb3610bd0565b905060008060005b83811015611119576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146110ad57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561110557868414156110f6578195505050505050611155565b838061110190614a58565b9450505b50808061111190614a58565b915050610fbb565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90614567565b60405180910390fd5b92915050565b611163611fa5565b73ffffffffffffffffffffffffffffffffffffffff166111816117e5565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce906143e7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611201610bd0565b61120b919061479c565b111561124c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611243906143a7565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261127a9190614aa1565b146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b1906142a7565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000826112e891906147f2565b905060005b818110156113325761131f337f0000000000000000000000000000000000000000000000000000000000000000612918565b808061132a90614a58565b9150506112ed565b505050565b61135283838360405180602001604052806000815250611c86565b505050565b6000611361610bd0565b82106113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906142c7565b60405180910390fd5b819050919050565b6113b2611fa5565b73ffffffffffffffffffffffffffffffffffffffff166113d06117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906143e7565b60405180910390fd5b8181600f919061143792919061366c565b505050565b6000611447826129d7565b600001519050919050565b61145a611fa5565b73ffffffffffffffffffffffffffffffffffffffff166114786117e5565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c5906143e7565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816114f8610bd0565b611502919061479c565b1115611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906143a7565b60405180910390fd5b60005b82518110156115ac5761159983828151811061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183612918565b80806115a490614a58565b915050611546565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614387565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116a2611fa5565b73ffffffffffffffffffffffffffffffffffffffff166116c06117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d906143e7565b60405180910390fd5b6117206000612bda565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b611754611fa5565b73ffffffffffffffffffffffffffffffffffffffff166117726117e5565b73ffffffffffffffffffffffffffffffffffffffff16146117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906143e7565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900460ff16905082565b6118496136f2565b611852826129d7565b9050919050565b606060038054611868906149f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611894906149f5565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b5050505050905090565b6118f3611fa5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614427565b60405180910390fd5b806007600061196e611fa5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a1b611fa5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a60919061420a565b60405180910390a35050565b600b60009054906101000a900460ff1681565b611a87611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611aa56117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906143e7565b60405180910390fd5b60026009541415611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38906145a7565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611b6f9061418e565b60006040518083038185875af1925050503d8060008114611bac576040519150601f19603f3d011682016040523d82523d6000602084013e611bb1565b606091505b5050905080611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906144a7565b60405180910390fd5b506001600981905550565b611c08611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611c266117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906143e7565b60405180910390fd5b80600a8190555050565b611c9184848461205f565b611c9d84848484612c9e565b611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd3906144c7565b60405180910390fd5b50505050565b6060611ced82611f97565b611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390614407565b60405180910390fd5b6000611d36612e35565b90506000815111611d565760405180602001604052806000815250611d81565b80611d6084612ec7565b604051602001611d7192919061416a565b6040516020818303038152906040525b915050919050565b60085481565b6000611d9a82613074565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e3d611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611e5b6117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906143e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614267565b60405180910390fd5b611f2a81612bda565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061206a826129d7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612091611fa5565b73ffffffffffffffffffffffffffffffffffffffff1614806120ed57506120b6611fa5565b73ffffffffffffffffffffffffffffffffffffffff166120d584610a2c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061210957506121088260000151612103611fa5565b611da1565b5b90508061214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290614447565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906143c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142e7565b60405180910390fd5b61223a858585600161315d565b61224a6000848460000151611fad565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166122b8919061487d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661235c9190614756565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612462919061479c565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125a8576124d881611f97565b156125a7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126108686866001613163565b505050505050565b6000600854905060008211612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614367565b60405180910390fd5b600060018383612672919061479c565b61267c91906148b1565b905060017f00000000000000000000000000000000000000000000000000000000000000006126ab91906148b1565b8111156126e25760017f00000000000000000000000000000000000000000000000000000000000000006126df91906148b1565b90505b6126eb81611f97565b61272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614587565b60405180910390fd5b60008290505b81811161288d57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287a5760006127ad826129d7565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061288590614a58565b915050612730565b5060018161289b919061479c565b600881905550505050565b60008083141580156128b6575081155b905092915050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461290d919061479c565b925050819055505050565b612932828260405180602001604052806000815250613169565b5050565b80341015612979576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612970906144e7565b60405180910390fd5b803411156129d4573373ffffffffffffffffffffffffffffffffffffffff166108fc82346129a791906148b1565b9081150290604051600060405180830381858888f193505050501580156129d2573d6000803e3d6000fd5b505b50565b6129df6136f2565b6129e882611f97565b612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90614287565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612a8b5760017f000000000000000000000000000000000000000000000000000000000000000084612a7e91906148b1565b612a88919061479c565b90505b60008390505b818110612b99576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b8557809350505050612bd5565b508080612b91906149cb565b915050612a91565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc906145c7565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cbf8473ffffffffffffffffffffffffffffffffffffffff16613649565b15612e28578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ce8611fa5565b8786866040518563ffffffff1660e01b8152600401612d0a94939291906141be565b602060405180830381600087803b158015612d2457600080fd5b505af1925050508015612d5557506040513d601f19601f82011682018060405250810190612d529190613b47565b60015b612dd8573d8060008114612d85576040519150601f19603f3d011682016040523d82523d6000602084013e612d8a565b606091505b50600081511415612dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc7906144c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e2d565b600190505b949350505050565b6060600f8054612e44906149f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612e70906149f5565b8015612ebd5780601f10612e9257610100808354040283529160200191612ebd565b820191906000526020600020905b815481529060010190602001808311612ea057829003601f168201915b5050505050905090565b60606000821415612f0f576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061306f565b600082905060005b60008214612f41578080612f2a90614a58565b915050600a82612f3a91906147f2565b9150612f17565b60008167ffffffffffffffff811115612f83577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612fb55781602001600182028036833780820191505090505b5090505b6000851461306857600182612fce91906148b1565b9150600a85612fdd9190614aa1565b6030612fe9919061479c565b60f81b818381518110613025577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561306191906147f2565b9450612fb9565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dc90614307565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d790614527565b60405180910390fd5b6131e981611f97565b15613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322090614507565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561328c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328390614607565b60405180910390fd5b613299600085838661315d565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516133969190614756565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133bd9190614756565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561362c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135cc6000888488612c9e565b61360b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613602906144c7565b60405180910390fd5b818061361690614a58565b925050808061362490614a58565b91505061355b565b50806001819055506136416000878588613163565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613678906149f5565b90600052602060002090601f01602090048101928261369a57600085556136e1565b82601f106136b357803560ff19168380011785556136e1565b828001600101855582156136e1579182015b828111156136e05782358255916020019190600101906136c5565b5b5090506136ee919061372c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561374557600081600090555060010161372d565b5090565b600061375c613757846146ab565b614686565b9050808382526020820190508285602086028201111561377b57600080fd5b60005b858110156137ab578161379188826137f3565b84526020840193506020830192505060018101905061377e565b5050509392505050565b60006137c86137c3846146d7565b614686565b9050828152602081018484840111156137e057600080fd5b6137eb848285614989565b509392505050565b60008135905061380281615391565b92915050565b600082601f83011261381957600080fd5b8135613829848260208601613749565b91505092915050565b600081359050613841816153a8565b92915050565b600081359050613856816153bf565b92915050565b60008151905061386b816153bf565b92915050565b600082601f83011261388257600080fd5b81356138928482602086016137b5565b91505092915050565b60008083601f8401126138ad57600080fd5b8235905067ffffffffffffffff8111156138c657600080fd5b6020830191508360018202830111156138de57600080fd5b9250929050565b6000813590506138f4816153d6565b92915050565b60006020828403121561390c57600080fd5b600061391a848285016137f3565b91505092915050565b6000806040838503121561393657600080fd5b6000613944858286016137f3565b9250506020613955858286016137f3565b9150509250929050565b60008060006060848603121561397457600080fd5b6000613982868287016137f3565b9350506020613993868287016137f3565b92505060406139a4868287016138e5565b9150509250925092565b600080600080608085870312156139c457600080fd5b60006139d2878288016137f3565b94505060206139e3878288016137f3565b93505060406139f4878288016138e5565b925050606085013567ffffffffffffffff811115613a1157600080fd5b613a1d87828801613871565b91505092959194509250565b60008060408385031215613a3c57600080fd5b6000613a4a858286016137f3565b9250506020613a5b85828601613832565b9150509250929050565b60008060408385031215613a7857600080fd5b6000613a86858286016137f3565b9250506020613a97858286016138e5565b9150509250929050565b60008060408385031215613ab457600080fd5b600083013567ffffffffffffffff811115613ace57600080fd5b613ada85828601613808565b9250506020613aeb858286016138e5565b9150509250929050565b600060208284031215613b0757600080fd5b6000613b1584828501613832565b91505092915050565b600060208284031215613b3057600080fd5b6000613b3e84828501613847565b91505092915050565b600060208284031215613b5957600080fd5b6000613b678482850161385c565b91505092915050565b60008060208385031215613b8357600080fd5b600083013567ffffffffffffffff811115613b9d57600080fd5b613ba98582860161389b565b92509250509250929050565b600060208284031215613bc757600080fd5b6000613bd5848285016138e5565b91505092915050565b613be7816148e5565b82525050565b613bf6816148e5565b82525050565b613c05816148f7565b82525050565b6000613c1682614708565b613c20818561471e565b9350613c30818560208601614998565b613c3981614b8e565b840191505092915050565b6000613c4f82614713565b613c59818561473a565b9350613c69818560208601614998565b613c7281614b8e565b840191505092915050565b6000613c8882614713565b613c92818561474b565b9350613ca2818560208601614998565b80840191505092915050565b6000613cbb60228361473a565b9150613cc682614b9f565b604082019050919050565b6000613cde60268361473a565b9150613ce982614bee565b604082019050919050565b6000613d01602a8361473a565b9150613d0c82614c3d565b604082019050919050565b6000613d24602c8361473a565b9150613d2f82614c8c565b604082019050919050565b6000613d4760238361473a565b9150613d5282614cdb565b604082019050919050565b6000613d6a60258361473a565b9150613d7582614d2a565b604082019050919050565b6000613d8d60318361473a565b9150613d9882614d79565b604082019050919050565b6000613db0601e8361473a565b9150613dbb82614dc8565b602082019050919050565b6000613dd360398361473a565b9150613dde82614df1565b604082019050919050565b6000613df660188361473a565b9150613e0182614e40565b602082019050919050565b6000613e19602b8361473a565b9150613e2482614e69565b604082019050919050565b6000613e3c60128361473a565b9150613e4782614eb8565b602082019050919050565b6000613e5f60268361473a565b9150613e6a82614ee1565b604082019050919050565b6000613e8260208361473a565b9150613e8d82614f30565b602082019050919050565b6000613ea5602f8361473a565b9150613eb082614f59565b604082019050919050565b6000613ec8601a8361473a565b9150613ed382614fa8565b602082019050919050565b6000613eeb60328361473a565b9150613ef682614fd1565b604082019050919050565b6000613f0e601d8361473a565b9150613f1982615020565b602082019050919050565b6000613f3160228361473a565b9150613f3c82615049565b604082019050919050565b6000613f5460008361472f565b9150613f5f82615098565b600082019050919050565b6000613f7760108361473a565b9150613f828261509b565b602082019050919050565b6000613f9a60338361473a565b9150613fa5826150c4565b604082019050919050565b6000613fbd60168361473a565b9150613fc882615113565b602082019050919050565b6000613fe0601d8361473a565b9150613feb8261513c565b602082019050919050565b600061400360218361473a565b915061400e82615165565b604082019050919050565b600061402660168361473a565b9150614031826151b4565b602082019050919050565b6000614049602e8361473a565b9150614054826151dd565b604082019050919050565b600061406c60268361473a565b91506140778261522c565b604082019050919050565b600061408f601f8361473a565b915061409a8261527b565b602082019050919050565b60006140b2602f8361473a565b91506140bd826152a4565b604082019050919050565b60006140d5602d8361473a565b91506140e0826152f3565b604082019050919050565b60006140f860228361473a565b915061410382615342565b604082019050919050565b6040820160008201516141246000850182613bde565b506020820151614137602085018261414c565b50505050565b6141468161496b565b82525050565b61415581614975565b82525050565b61416481614975565b82525050565b60006141768285613c7d565b91506141828284613c7d565b91508190509392505050565b600061419982613f47565b9150819050919050565b60006020820190506141b86000830184613bed565b92915050565b60006080820190506141d36000830187613bed565b6141e06020830186613bed565b6141ed604083018561413d565b81810360608301526141ff8184613c0b565b905095945050505050565b600060208201905061421f6000830184613bfc565b92915050565b6000602082019050818103600083015261423f8184613c44565b905092915050565b6000602082019050818103600083015261426081613cae565b9050919050565b6000602082019050818103600083015261428081613cd1565b9050919050565b600060208201905081810360008301526142a081613cf4565b9050919050565b600060208201905081810360008301526142c081613d17565b9050919050565b600060208201905081810360008301526142e081613d3a565b9050919050565b6000602082019050818103600083015261430081613d5d565b9050919050565b6000602082019050818103600083015261432081613d80565b9050919050565b6000602082019050818103600083015261434081613da3565b9050919050565b6000602082019050818103600083015261436081613dc6565b9050919050565b6000602082019050818103600083015261438081613de9565b9050919050565b600060208201905081810360008301526143a081613e0c565b9050919050565b600060208201905081810360008301526143c081613e2f565b9050919050565b600060208201905081810360008301526143e081613e52565b9050919050565b6000602082019050818103600083015261440081613e75565b9050919050565b6000602082019050818103600083015261442081613e98565b9050919050565b6000602082019050818103600083015261444081613ebb565b9050919050565b6000602082019050818103600083015261446081613ede565b9050919050565b6000602082019050818103600083015261448081613f01565b9050919050565b600060208201905081810360008301526144a081613f24565b9050919050565b600060208201905081810360008301526144c081613f6a565b9050919050565b600060208201905081810360008301526144e081613f8d565b9050919050565b6000602082019050818103600083015261450081613fb0565b9050919050565b6000602082019050818103600083015261452081613fd3565b9050919050565b6000602082019050818103600083015261454081613ff6565b9050919050565b6000602082019050818103600083015261456081614019565b9050919050565b600060208201905081810360008301526145808161403c565b9050919050565b600060208201905081810360008301526145a08161405f565b9050919050565b600060208201905081810360008301526145c081614082565b9050919050565b600060208201905081810360008301526145e0816140a5565b9050919050565b60006020820190508181036000830152614600816140c8565b9050919050565b60006020820190508181036000830152614620816140eb565b9050919050565b600060408201905061463c600083018461410e565b92915050565b6000602082019050614657600083018461413d565b92915050565b6000604082019050614672600083018561415b565b61467f6020830184613bfc565b9392505050565b60006146906146a1565b905061469c8282614a27565b919050565b6000604051905090565b600067ffffffffffffffff8211156146c6576146c5614b5f565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146f2576146f1614b5f565b5b6146fb82614b8e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147618261492f565b915061476c8361492f565b9250826fffffffffffffffffffffffffffffffff0382111561479157614790614ad2565b5b828201905092915050565b60006147a78261496b565b91506147b28361496b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147e7576147e6614ad2565b5b828201905092915050565b60006147fd8261496b565b91506148088361496b565b92508261481857614817614b01565b5b828204905092915050565b600061482e8261496b565b91506148398361496b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487257614871614ad2565b5b828202905092915050565b60006148888261492f565b91506148938361492f565b9250828210156148a6576148a5614ad2565b5b828203905092915050565b60006148bc8261496b565b91506148c78361496b565b9250828210156148da576148d9614ad2565b5b828203905092915050565b60006148f08261494b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149b657808201518184015260208101905061499b565b838111156149c5576000848401525b50505050565b60006149d68261496b565b915060008214156149ea576149e9614ad2565b5b600182039050919050565b60006002820490506001821680614a0d57607f821691505b60208210811415614a2157614a20614b30565b5b50919050565b614a3082614b8e565b810181811067ffffffffffffffff82111715614a4f57614a4e614b5f565b5b80604052505050565b6000614a638261496b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a9657614a95614ad2565b5b600182019050919050565b6000614aac8261496b565b9150614ab78361496b565b925082614ac757614ac6614b01565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61539a816148e5565b81146153a557600080fd5b50565b6153b1816148f7565b81146153bc57600080fd5b50565b6153c881614903565b81146153d357600080fd5b50565b6153df8161496b565b81146153ea57600080fd5b5056fea264697066735822122097a138284e3ecbf0dd30f6226eb1c65bc82d9098866bff7b2cdfdb1bdd855df864736f6c634300080400330000000000000000000000000000000000000000000000000000000000000002

Deployed Bytecode

0x6080604052600436106102045760003560e01c8063715018a611610118578063a9aad58c116100a0578063c87b56dd1161006f578063c87b56dd14610745578063d7224ba014610782578063dc33e681146107ad578063e985e9c5146107ea578063f2fde38b1461082757610204565b8063a9aad58c146106b1578063ac446002146106dc578063b0551ac4146106f3578063b88d4fde1461071c57610204565b80638da5cb5b116100e75780638da5cb5b146105c957806390aa0b0f146105f45780639231ab2a1461062057806395d89b411461065d578063a22cb4651461068857610204565b8063715018a6146105335780638bc35c2f1461054a5780638d859f3e146105755780638d92becd146105a057610204565b80632db115441161019b5780634f6ccce71161016a5780634f6ccce71461042a57806355f804b3146104675780636352211e1461049057806366a44155146104cd57806370a08231146104f657610204565b80632db115441461037f5780632f745c591461039b578063375a069a146103d857806342842e0e1461040157610204565b806310b0c052116101d757806310b0c052146102d757806318160ddd1461030257806323b872dd1461032d5780632d20fb601461035657610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613b1e565b610850565b60405161023d919061420a565b60405180910390f35b34801561025257600080fd5b5061025b61099a565b6040516102689190614225565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613bb5565b610a2c565b6040516102a591906141a3565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613a65565b610ab1565b005b3480156102e357600080fd5b506102ec610bca565b6040516102f99190614642565b60405180910390f35b34801561030e57600080fd5b50610317610bd0565b6040516103249190614642565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061395f565b610bda565b005b34801561036257600080fd5b5061037d60048036038101906103789190613bb5565b610bea565b005b61039960048036038101906103949190613bb5565b610cc8565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190613a65565b610f5d565b6040516103cf9190614642565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190613bb5565b61115b565b005b34801561040d57600080fd5b506104286004803603810190610423919061395f565b611337565b005b34801561043657600080fd5b50610451600480360381019061044c9190613bb5565b611357565b60405161045e9190614642565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613b70565b6113aa565b005b34801561049c57600080fd5b506104b760048036038101906104b29190613bb5565b61143c565b6040516104c491906141a3565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613aa1565b611452565b005b34801561050257600080fd5b5061051d600480360381019061051891906138fa565b6115b1565b60405161052a9190614642565b60405180910390f35b34801561053f57600080fd5b5061054861169a565b005b34801561055657600080fd5b5061055f611722565b60405161056c9190614642565b60405180910390f35b34801561058157600080fd5b5061058a611746565b6040516105979190614642565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613af5565b61174c565b005b3480156105d557600080fd5b506105de6117e5565b6040516105eb91906141a3565b60405180910390f35b34801561060057600080fd5b5061060961180e565b60405161061792919061465d565b60405180910390f35b34801561062c57600080fd5b5061064760048036038101906106429190613bb5565b611841565b6040516106549190614627565b60405180910390f35b34801561066957600080fd5b50610672611859565b60405161067f9190614225565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190613a29565b6118eb565b005b3480156106bd57600080fd5b506106c6611a6c565b6040516106d3919061420a565b60405180910390f35b3480156106e857600080fd5b506106f1611a7f565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613bb5565b611c00565b005b34801561072857600080fd5b50610743600480360381019061073e91906139ae565b611c86565b005b34801561075157600080fd5b5061076c60048036038101906107679190613bb5565b611ce2565b6040516107799190614225565b60405180910390f35b34801561078e57600080fd5b50610797611d89565b6040516107a49190614642565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906138fa565b611d8f565b6040516107e19190614642565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c9190613923565b611da1565b60405161081e919061420a565b60405180910390f35b34801561083357600080fd5b5061084e600480360381019061084991906138fa565b611e35565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610993575061099282611f2d565b5b9050919050565b6060600280546109a9906149f5565b80601f01602080910402602001604051908101604052809291908181526020018280546109d5906149f5565b8015610a225780601f106109f757610100808354040283529160200191610a22565b820191906000526020600020905b815481529060010190602001808311610a0557829003601f168201915b5050505050905090565b6000610a3782611f97565b610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d906145e7565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610abc8261143c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490614487565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4c611fa5565b73ffffffffffffffffffffffffffffffffffffffff161480610b7b5750610b7a81610b75611fa5565b611da1565b5b610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190614347565b60405180910390fd5b610bc5838383611fad565b505050565b600a5481565b6000600154905090565b610be583838361205f565b505050565b610bf2611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610c106117e5565b73ffffffffffffffffffffffffffffffffffffffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d906143e7565b60405180910390fd5b60026009541415610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca3906145a7565b60405180910390fd5b6002600981905550610cbd81612618565b600160098190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614327565b60405180910390fd5b6000600b60009054906101000a900460ff1690506000600c549050610d5b81836128a6565b610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190614467565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000001483610dc533611d8f565b610dcf919061479c565b1115610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790614547565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000001b3983610e3a610bd0565b610e44919061479c565b1115610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c906143a7565b60405180910390fd5b60008382610e939190614823565b90506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a54610ee491906148b1565b90506000811115610f4357808510610f1e578281610f029190614823565b82610f0d91906148b1565b9150610f1933826128be565b610f42565b8285610f2a9190614823565b82610f3591906148b1565b9150610f4133866128be565b5b5b610f4d3386612918565b610f5682612936565b5050505050565b6000610f68836115b1565b8210610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090614247565b60405180910390fd5b6000610fb3610bd0565b905060008060005b83811015611119576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146110ad57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561110557868414156110f6578195505050505050611155565b838061110190614a58565b9450505b50808061111190614a58565b915050610fbb565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90614567565b60405180910390fd5b92915050565b611163611fa5565b73ffffffffffffffffffffffffffffffffffffffff166111816117e5565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce906143e7565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000001b3981611201610bd0565b61120b919061479c565b111561124c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611243906143a7565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148261127a9190614aa1565b146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b1906142a7565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000014826112e891906147f2565b905060005b818110156113325761131f337f0000000000000000000000000000000000000000000000000000000000000014612918565b808061132a90614a58565b9150506112ed565b505050565b61135283838360405180602001604052806000815250611c86565b505050565b6000611361610bd0565b82106113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906142c7565b60405180910390fd5b819050919050565b6113b2611fa5565b73ffffffffffffffffffffffffffffffffffffffff166113d06117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906143e7565b60405180910390fd5b8181600f919061143792919061366c565b505050565b6000611447826129d7565b600001519050919050565b61145a611fa5565b73ffffffffffffffffffffffffffffffffffffffff166114786117e5565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c5906143e7565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000001b39816114f8610bd0565b611502919061479c565b1115611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906143a7565b60405180910390fd5b60005b82518110156115ac5761159983828151811061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183612918565b80806115a490614a58565b915050611546565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614387565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116a2611fa5565b73ffffffffffffffffffffffffffffffffffffffff166116c06117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d906143e7565b60405180910390fd5b6117206000612bda565b565b7f000000000000000000000000000000000000000000000000000000000000001481565b600c5481565b611754611fa5565b73ffffffffffffffffffffffffffffffffffffffff166117726117e5565b73ffffffffffffffffffffffffffffffffffffffff16146117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906143e7565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900460ff16905082565b6118496136f2565b611852826129d7565b9050919050565b606060038054611868906149f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611894906149f5565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b5050505050905090565b6118f3611fa5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614427565b60405180910390fd5b806007600061196e611fa5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a1b611fa5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a60919061420a565b60405180910390a35050565b600b60009054906101000a900460ff1681565b611a87611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611aa56117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906143e7565b60405180910390fd5b60026009541415611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38906145a7565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611b6f9061418e565b60006040518083038185875af1925050503d8060008114611bac576040519150601f19603f3d011682016040523d82523d6000602084013e611bb1565b606091505b5050905080611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906144a7565b60405180910390fd5b506001600981905550565b611c08611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611c266117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906143e7565b60405180910390fd5b80600a8190555050565b611c9184848461205f565b611c9d84848484612c9e565b611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd3906144c7565b60405180910390fd5b50505050565b6060611ced82611f97565b611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390614407565b60405180910390fd5b6000611d36612e35565b90506000815111611d565760405180602001604052806000815250611d81565b80611d6084612ec7565b604051602001611d7192919061416a565b6040516020818303038152906040525b915050919050565b60085481565b6000611d9a82613074565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e3d611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611e5b6117e5565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906143e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614267565b60405180910390fd5b611f2a81612bda565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061206a826129d7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612091611fa5565b73ffffffffffffffffffffffffffffffffffffffff1614806120ed57506120b6611fa5565b73ffffffffffffffffffffffffffffffffffffffff166120d584610a2c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061210957506121088260000151612103611fa5565b611da1565b5b90508061214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290614447565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906143c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142e7565b60405180910390fd5b61223a858585600161315d565b61224a6000848460000151611fad565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166122b8919061487d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661235c9190614756565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612462919061479c565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125a8576124d881611f97565b156125a7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126108686866001613163565b505050505050565b6000600854905060008211612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614367565b60405180910390fd5b600060018383612672919061479c565b61267c91906148b1565b905060017f0000000000000000000000000000000000000000000000000000000000001b396126ab91906148b1565b8111156126e25760017f0000000000000000000000000000000000000000000000000000000000001b396126df91906148b1565b90505b6126eb81611f97565b61272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614587565b60405180910390fd5b60008290505b81811161288d57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287a5760006127ad826129d7565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061288590614a58565b915050612730565b5060018161289b919061479c565b600881905550505050565b60008083141580156128b6575081155b905092915050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461290d919061479c565b925050819055505050565b612932828260405180602001604052806000815250613169565b5050565b80341015612979576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612970906144e7565b60405180910390fd5b803411156129d4573373ffffffffffffffffffffffffffffffffffffffff166108fc82346129a791906148b1565b9081150290604051600060405180830381858888f193505050501580156129d2573d6000803e3d6000fd5b505b50565b6129df6136f2565b6129e882611f97565b612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90614287565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612a8b5760017f000000000000000000000000000000000000000000000000000000000000001484612a7e91906148b1565b612a88919061479c565b90505b60008390505b818110612b99576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b8557809350505050612bd5565b508080612b91906149cb565b915050612a91565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc906145c7565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cbf8473ffffffffffffffffffffffffffffffffffffffff16613649565b15612e28578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ce8611fa5565b8786866040518563ffffffff1660e01b8152600401612d0a94939291906141be565b602060405180830381600087803b158015612d2457600080fd5b505af1925050508015612d5557506040513d601f19601f82011682018060405250810190612d529190613b47565b60015b612dd8573d8060008114612d85576040519150601f19603f3d011682016040523d82523d6000602084013e612d8a565b606091505b50600081511415612dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc7906144c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e2d565b600190505b949350505050565b6060600f8054612e44906149f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612e70906149f5565b8015612ebd5780601f10612e9257610100808354040283529160200191612ebd565b820191906000526020600020905b815481529060010190602001808311612ea057829003601f168201915b5050505050905090565b60606000821415612f0f576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061306f565b600082905060005b60008214612f41578080612f2a90614a58565b915050600a82612f3a91906147f2565b9150612f17565b60008167ffffffffffffffff811115612f83577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612fb55781602001600182028036833780820191505090505b5090505b6000851461306857600182612fce91906148b1565b9150600a85612fdd9190614aa1565b6030612fe9919061479c565b60f81b818381518110613025577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561306191906147f2565b9450612fb9565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dc90614307565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d790614527565b60405180910390fd5b6131e981611f97565b15613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322090614507565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000001483111561328c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328390614607565b60405180910390fd5b613299600085838661315d565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516133969190614756565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133bd9190614756565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561362c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135cc6000888488612c9e565b61360b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613602906144c7565b60405180910390fd5b818061361690614a58565b925050808061362490614a58565b91505061355b565b50806001819055506136416000878588613163565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613678906149f5565b90600052602060002090601f01602090048101928261369a57600085556136e1565b82601f106136b357803560ff19168380011785556136e1565b828001600101855582156136e1579182015b828111156136e05782358255916020019190600101906136c5565b5b5090506136ee919061372c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561374557600081600090555060010161372d565b5090565b600061375c613757846146ab565b614686565b9050808382526020820190508285602086028201111561377b57600080fd5b60005b858110156137ab578161379188826137f3565b84526020840193506020830192505060018101905061377e565b5050509392505050565b60006137c86137c3846146d7565b614686565b9050828152602081018484840111156137e057600080fd5b6137eb848285614989565b509392505050565b60008135905061380281615391565b92915050565b600082601f83011261381957600080fd5b8135613829848260208601613749565b91505092915050565b600081359050613841816153a8565b92915050565b600081359050613856816153bf565b92915050565b60008151905061386b816153bf565b92915050565b600082601f83011261388257600080fd5b81356138928482602086016137b5565b91505092915050565b60008083601f8401126138ad57600080fd5b8235905067ffffffffffffffff8111156138c657600080fd5b6020830191508360018202830111156138de57600080fd5b9250929050565b6000813590506138f4816153d6565b92915050565b60006020828403121561390c57600080fd5b600061391a848285016137f3565b91505092915050565b6000806040838503121561393657600080fd5b6000613944858286016137f3565b9250506020613955858286016137f3565b9150509250929050565b60008060006060848603121561397457600080fd5b6000613982868287016137f3565b9350506020613993868287016137f3565b92505060406139a4868287016138e5565b9150509250925092565b600080600080608085870312156139c457600080fd5b60006139d2878288016137f3565b94505060206139e3878288016137f3565b93505060406139f4878288016138e5565b925050606085013567ffffffffffffffff811115613a1157600080fd5b613a1d87828801613871565b91505092959194509250565b60008060408385031215613a3c57600080fd5b6000613a4a858286016137f3565b9250506020613a5b85828601613832565b9150509250929050565b60008060408385031215613a7857600080fd5b6000613a86858286016137f3565b9250506020613a97858286016138e5565b9150509250929050565b60008060408385031215613ab457600080fd5b600083013567ffffffffffffffff811115613ace57600080fd5b613ada85828601613808565b9250506020613aeb858286016138e5565b9150509250929050565b600060208284031215613b0757600080fd5b6000613b1584828501613832565b91505092915050565b600060208284031215613b3057600080fd5b6000613b3e84828501613847565b91505092915050565b600060208284031215613b5957600080fd5b6000613b678482850161385c565b91505092915050565b60008060208385031215613b8357600080fd5b600083013567ffffffffffffffff811115613b9d57600080fd5b613ba98582860161389b565b92509250509250929050565b600060208284031215613bc757600080fd5b6000613bd5848285016138e5565b91505092915050565b613be7816148e5565b82525050565b613bf6816148e5565b82525050565b613c05816148f7565b82525050565b6000613c1682614708565b613c20818561471e565b9350613c30818560208601614998565b613c3981614b8e565b840191505092915050565b6000613c4f82614713565b613c59818561473a565b9350613c69818560208601614998565b613c7281614b8e565b840191505092915050565b6000613c8882614713565b613c92818561474b565b9350613ca2818560208601614998565b80840191505092915050565b6000613cbb60228361473a565b9150613cc682614b9f565b604082019050919050565b6000613cde60268361473a565b9150613ce982614bee565b604082019050919050565b6000613d01602a8361473a565b9150613d0c82614c3d565b604082019050919050565b6000613d24602c8361473a565b9150613d2f82614c8c565b604082019050919050565b6000613d4760238361473a565b9150613d5282614cdb565b604082019050919050565b6000613d6a60258361473a565b9150613d7582614d2a565b604082019050919050565b6000613d8d60318361473a565b9150613d9882614d79565b604082019050919050565b6000613db0601e8361473a565b9150613dbb82614dc8565b602082019050919050565b6000613dd360398361473a565b9150613dde82614df1565b604082019050919050565b6000613df660188361473a565b9150613e0182614e40565b602082019050919050565b6000613e19602b8361473a565b9150613e2482614e69565b604082019050919050565b6000613e3c60128361473a565b9150613e4782614eb8565b602082019050919050565b6000613e5f60268361473a565b9150613e6a82614ee1565b604082019050919050565b6000613e8260208361473a565b9150613e8d82614f30565b602082019050919050565b6000613ea5602f8361473a565b9150613eb082614f59565b604082019050919050565b6000613ec8601a8361473a565b9150613ed382614fa8565b602082019050919050565b6000613eeb60328361473a565b9150613ef682614fd1565b604082019050919050565b6000613f0e601d8361473a565b9150613f1982615020565b602082019050919050565b6000613f3160228361473a565b9150613f3c82615049565b604082019050919050565b6000613f5460008361472f565b9150613f5f82615098565b600082019050919050565b6000613f7760108361473a565b9150613f828261509b565b602082019050919050565b6000613f9a60338361473a565b9150613fa5826150c4565b604082019050919050565b6000613fbd60168361473a565b9150613fc882615113565b602082019050919050565b6000613fe0601d8361473a565b9150613feb8261513c565b602082019050919050565b600061400360218361473a565b915061400e82615165565b604082019050919050565b600061402660168361473a565b9150614031826151b4565b602082019050919050565b6000614049602e8361473a565b9150614054826151dd565b604082019050919050565b600061406c60268361473a565b91506140778261522c565b604082019050919050565b600061408f601f8361473a565b915061409a8261527b565b602082019050919050565b60006140b2602f8361473a565b91506140bd826152a4565b604082019050919050565b60006140d5602d8361473a565b91506140e0826152f3565b604082019050919050565b60006140f860228361473a565b915061410382615342565b604082019050919050565b6040820160008201516141246000850182613bde565b506020820151614137602085018261414c565b50505050565b6141468161496b565b82525050565b61415581614975565b82525050565b61416481614975565b82525050565b60006141768285613c7d565b91506141828284613c7d565b91508190509392505050565b600061419982613f47565b9150819050919050565b60006020820190506141b86000830184613bed565b92915050565b60006080820190506141d36000830187613bed565b6141e06020830186613bed565b6141ed604083018561413d565b81810360608301526141ff8184613c0b565b905095945050505050565b600060208201905061421f6000830184613bfc565b92915050565b6000602082019050818103600083015261423f8184613c44565b905092915050565b6000602082019050818103600083015261426081613cae565b9050919050565b6000602082019050818103600083015261428081613cd1565b9050919050565b600060208201905081810360008301526142a081613cf4565b9050919050565b600060208201905081810360008301526142c081613d17565b9050919050565b600060208201905081810360008301526142e081613d3a565b9050919050565b6000602082019050818103600083015261430081613d5d565b9050919050565b6000602082019050818103600083015261432081613d80565b9050919050565b6000602082019050818103600083015261434081613da3565b9050919050565b6000602082019050818103600083015261436081613dc6565b9050919050565b6000602082019050818103600083015261438081613de9565b9050919050565b600060208201905081810360008301526143a081613e0c565b9050919050565b600060208201905081810360008301526143c081613e2f565b9050919050565b600060208201905081810360008301526143e081613e52565b9050919050565b6000602082019050818103600083015261440081613e75565b9050919050565b6000602082019050818103600083015261442081613e98565b9050919050565b6000602082019050818103600083015261444081613ebb565b9050919050565b6000602082019050818103600083015261446081613ede565b9050919050565b6000602082019050818103600083015261448081613f01565b9050919050565b600060208201905081810360008301526144a081613f24565b9050919050565b600060208201905081810360008301526144c081613f6a565b9050919050565b600060208201905081810360008301526144e081613f8d565b9050919050565b6000602082019050818103600083015261450081613fb0565b9050919050565b6000602082019050818103600083015261452081613fd3565b9050919050565b6000602082019050818103600083015261454081613ff6565b9050919050565b6000602082019050818103600083015261456081614019565b9050919050565b600060208201905081810360008301526145808161403c565b9050919050565b600060208201905081810360008301526145a08161405f565b9050919050565b600060208201905081810360008301526145c081614082565b9050919050565b600060208201905081810360008301526145e0816140a5565b9050919050565b60006020820190508181036000830152614600816140c8565b9050919050565b60006020820190508181036000830152614620816140eb565b9050919050565b600060408201905061463c600083018461410e565b92915050565b6000602082019050614657600083018461413d565b92915050565b6000604082019050614672600083018561415b565b61467f6020830184613bfc565b9392505050565b60006146906146a1565b905061469c8282614a27565b919050565b6000604051905090565b600067ffffffffffffffff8211156146c6576146c5614b5f565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146f2576146f1614b5f565b5b6146fb82614b8e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147618261492f565b915061476c8361492f565b9250826fffffffffffffffffffffffffffffffff0382111561479157614790614ad2565b5b828201905092915050565b60006147a78261496b565b91506147b28361496b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147e7576147e6614ad2565b5b828201905092915050565b60006147fd8261496b565b91506148088361496b565b92508261481857614817614b01565b5b828204905092915050565b600061482e8261496b565b91506148398361496b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487257614871614ad2565b5b828202905092915050565b60006148888261492f565b91506148938361492f565b9250828210156148a6576148a5614ad2565b5b828203905092915050565b60006148bc8261496b565b91506148c78361496b565b9250828210156148da576148d9614ad2565b5b828203905092915050565b60006148f08261494b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149b657808201518184015260208101905061499b565b838111156149c5576000848401525b50505050565b60006149d68261496b565b915060008214156149ea576149e9614ad2565b5b600182039050919050565b60006002820490506001821680614a0d57607f821691505b60208210811415614a2157614a20614b30565b5b50919050565b614a3082614b8e565b810181811067ffffffffffffffff82111715614a4f57614a4e614b5f565b5b80604052505050565b6000614a638261496b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a9657614a95614ad2565b5b600182019050919050565b6000614aac8261496b565b9150614ab78361496b565b925082614ac757614ac6614b01565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61539a816148e5565b81146153a557600080fd5b50565b6153b1816148f7565b81146153bc57600080fd5b50565b6153c881614903565b81146153d357600080fd5b50565b6153df8161496b565b81146153ea57600080fd5b5056fea264697066735822122097a138284e3ecbf0dd30f6226eb1c65bc82d9098866bff7b2cdfdb1bdd855df864736f6c63430008040033

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

0000000000000000000000000000000000000000000000000000000000000002

-----Decoded View---------------
Arg [0] : freeMintAllowance (uint256): 2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000002


Deployed Bytecode Sourcemap

42709:4044:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27801:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29527:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31052:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30615:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42826:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26362:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31902:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46366:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43699:1003;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26993:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45493:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32107:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26525:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46073:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29350:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43418:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28227:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41816:103;;;;;;;;;;;;;:::i;:::-;;42773:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42902:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44918:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41165:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43075:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;46603:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29682:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31320:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42872:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46179:181;;;;;;;;;;;;;:::i;:::-;;45194:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32327:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29843:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36742:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46490:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31657:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42074:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27801:370;27928:4;27973:25;27958:40;;;:11;:40;;;;:99;;;;28024:33;28009:48;;;:11;:48;;;;27958:99;:160;;;;28083:35;28068:50;;;:11;:50;;;;27958:160;:207;;;;28129:36;28153:11;28129:23;:36::i;:::-;27958:207;27944:221;;27801:370;;;:::o;29527:94::-;29581:13;29610:5;29603:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29527:94;:::o;31052:204::-;31120:7;31144:16;31152:7;31144;:16::i;:::-;31136:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31226:15;:24;31242:7;31226:24;;;;;;;;;;;;;;;;;;;;;31219:31;;31052:204;;;:::o;30615:379::-;30684:13;30700:24;30716:7;30700:15;:24::i;:::-;30684:40;;30745:5;30739:11;;:2;:11;;;;30731:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30830:5;30814:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30839:37;30856:5;30863:12;:10;:12::i;:::-;30839:16;:37::i;:::-;30814:62;30798:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30960:28;30969:2;30973:7;30982:5;30960:8;:28::i;:::-;30615:379;;;:::o;42826:41::-;;;;:::o;26362:94::-;26415:7;26438:12;;26431:19;;26362:94;:::o;31902:142::-;32010:28;32020:4;32026:2;32030:7;32010:9;:28::i;:::-;31902:142;;;:::o;46366:118::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1:::1;22804:7;;:19;;22796:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1;22937:7;:18;;;;46450:28:::2;46469:8;46450:18;:28::i;:::-;22162:1:::1;23116:7;:22;;;;46366:118:::0;:::o;43699:1003::-;43353:10;43340:23;;:9;:23;;;43332:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43792:10:::1;43805:6;;;;;;;;;;;43792:19;;43818;43840:5;;43818:27;;43870:34;43885:11;43898:5;43870:14;:34::i;:::-;43854:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;44013:23;44001:8;43974:24;43987:10;43974:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;43958:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;44119:14;44107:8;44091:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;44083:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44165:13;44195:8;44181:11;:22;;;;:::i;:::-;44165:38;;44212:25;44286:16;:28;44303:10;44286:28;;;;;;;;;;;;;;;;44240:26;;:74;;;;:::i;:::-;44212:102;;44345:1;44325:17;:21;44321:310;;;44373:17;44361:8;:29;44357:267;;44432:11;44412:17;:31;;;;:::i;:::-;44403:40;;;;;:::i;:::-;;;44454:50;44474:10;44486:17;44454:19;:50::i;:::-;44357:267;;;44551:11;44540:8;:22;;;;:::i;:::-;44531:31;;;;;:::i;:::-;;;44573:41;44593:10;44605:8;44573:19;:41::i;:::-;44357:267;44321:310;44639:31;44649:10;44661:8;44639:9;:31::i;:::-;44677:19;44690:5;44677:12;:19::i;:::-;43405:1;;;;43699:1003:::0;:::o;26993:744::-;27102:7;27137:16;27147:5;27137:9;:16::i;:::-;27129:5;:24;27121:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27199:22;27224:13;:11;:13::i;:::-;27199:38;;27244:19;27274:25;27324:9;27319:350;27343:14;27339:1;:18;27319:350;;;27373:31;27407:11;:14;27419:1;27407:14;;;;;;;;;;;27373:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27460:1;27434:28;;:9;:14;;;:28;;;27430:89;;27495:9;:14;;;27475:34;;27430:89;27552:5;27531:26;;:17;:26;;;27527:135;;;27589:5;27574:11;:20;27570:59;;;27616:1;27609:8;;;;;;;;;27570:59;27639:13;;;;;:::i;:::-;;;;27527:135;27319:350;27359:3;;;;;:::i;:::-;;;;27319:350;;;;27675:56;;;;;;;;;;:::i;:::-;;;;;;;;26993:744;;;;;:::o;45493:401::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45590:14:::1;45578:8;45562:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;45554:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45677:1;45661:12;45650:8;:23;;;;:::i;:::-;:28;45634:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45747:17;45778:12;45767:8;:23;;;;:::i;:::-;45747:43;;45802:9;45797:92;45821:9;45817:1;:13;45797:92;;;45846:35;45856:10;45868:12;45846:9;:35::i;:::-;45832:3;;;;;:::i;:::-;;;;45797:92;;;;41456:1;45493:401:::0;:::o;32107:157::-;32219:39;32236:4;32242:2;32246:7;32219:39;;;;;;;;;;;;:16;:39::i;:::-;32107:157;;;:::o;26525:177::-;26592:7;26624:13;:11;:13::i;:::-;26616:5;:21;26608:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26691:5;26684:12;;26525:177;;;:::o;46073:100::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46160:7:::1;;46144:13;:23;;;;;;;:::i;:::-;;46073:100:::0;;:::o;29350:118::-;29414:7;29437:20;29449:7;29437:11;:20::i;:::-;:25;;;29430:32;;29350:118;;;:::o;43418:275::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43547:14:::1;43535:8;43519:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;43511:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43596:9;43591:97;43615:9;:16;43611:1;:20;43591:97;;;43647:33;43657:9;43667:1;43657:12;;;;;;;;;;;;;;;;;;;;;;43671:8;43647:9;:33::i;:::-;43633:3;;;;;:::i;:::-;;;;43591:97;;;;43418:275:::0;;:::o;28227:211::-;28291:7;28332:1;28315:19;;:5;:19;;;;28307:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28404:12;:19;28417:5;28404:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28396:36;;28389:43;;28227:211;;;:::o;41816:103::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41881:30:::1;41908:1;41881:18;:30::i;:::-;41816:103::o:0;42773:48::-;;;:::o;42902:34::-;;;;:::o;44918:97::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44997:12:::1;44988:6;;:21;;;;;;;;;;;;;;;;;;44918:97:::0;:::o;41165:87::-;41211:7;41238:6;;;;;;;;;;;41231:13;;41165:87;:::o;43075:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46603:147::-;46684:21;;:::i;:::-;46724:20;46736:7;46724:11;:20::i;:::-;46717:27;;46603:147;;;:::o;29682:98::-;29738:13;29767:7;29760:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29682:98;:::o;31320:274::-;31423:12;:10;:12::i;:::-;31411:24;;:8;:24;;;;31403:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31520:8;31475:18;:32;31494:12;:10;:12::i;:::-;31475:32;;;;;;;;;;;;;;;:42;31508:8;31475:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31569:8;31540:48;;31555:12;:10;:12::i;:::-;31540:48;;;31579:8;31540:48;;;;;;:::i;:::-;;;;;;;;31320:274;;:::o;42872:25::-;;;;;;;;;;;;;:::o;46179:181::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1:::1;22804:7;;:19;;22796:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1;22937:7;:18;;;;46244:12:::2;46262:10;:15;;46285:21;46262:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46243:68;;;46326:7;46318:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;22968:1;22162::::1;23116:7;:22;;;;46179:181::o:0;45194:148::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45319:17:::1;45290:26;:46;;;;45194:148:::0;:::o;32327:311::-;32464:28;32474:4;32480:2;32484:7;32464:9;:28::i;:::-;32515:48;32538:4;32544:2;32548:7;32557:5;32515:22;:48::i;:::-;32499:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;32327:311;;;;:::o;29843:394::-;29941:13;29982:16;29990:7;29982;:16::i;:::-;29966:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;30072:21;30096:10;:8;:10::i;:::-;30072:34;;30151:1;30133:7;30127:21;:25;:104;;;;;;;;;;;;;;;;;30188:7;30197:18;:7;:16;:18::i;:::-;30171:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30127:104;30113:118;;;29843:394;;;:::o;36742:43::-;;;;:::o;46490:107::-;46548:7;46571:20;46585:5;46571:13;:20::i;:::-;46564:27;;46490:107;;;:::o;31657:186::-;31779:4;31802:18;:25;31821:5;31802:25;;;;;;;;;;;;;;;:35;31828:8;31802:35;;;;;;;;;;;;;;;;;;;;;;;;;31795:42;;31657:186;;;;:::o;42074:201::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42183:1:::1;42163:22;;:8;:22;;;;42155:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42239:28;42258:8;42239:18;:28::i;:::-;42074:201:::0;:::o;13475:157::-;13560:4;13599:25;13584:40;;;:11;:40;;;;13577:47;;13475:157;;;:::o;32877:105::-;32934:4;32964:12;;32954:7;:22;32947:29;;32877:105;;;:::o;23832:98::-;23885:7;23912:10;23905:17;;23832:98;:::o;36564:172::-;36688:2;36661:15;:24;36677:7;36661:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36722:7;36718:2;36702:28;;36711:5;36702:28;;;;;;;;;;;;36564:172;;;:::o;34929:1529::-;35026:35;35064:20;35076:7;35064:11;:20::i;:::-;35026:58;;35093:22;35135:13;:18;;;35119:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;35188:12;:10;:12::i;:::-;35164:36;;:20;35176:7;35164:11;:20::i;:::-;:36;;;35119:81;:142;;;;35211:50;35228:13;:18;;;35248:12;:10;:12::i;:::-;35211:16;:50::i;:::-;35119:142;35093:169;;35287:17;35271:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35419:4;35397:26;;:13;:18;;;:26;;;35381:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35508:1;35494:16;;:2;:16;;;;35486:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35561:43;35583:4;35589:2;35593:7;35602:1;35561:21;:43::i;:::-;35661:49;35678:1;35682:7;35691:13;:18;;;35661:8;:49::i;:::-;35749:1;35719:12;:18;35732:4;35719:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35785:1;35757:12;:16;35770:2;35757:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35816:43;;;;;;;;35831:2;35816:43;;;;;;35842:15;35816:43;;;;;35793:11;:20;35805:7;35793:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36087:19;36119:1;36109:7;:11;;;;:::i;:::-;36087:33;;36172:1;36131:43;;:11;:24;36143:11;36131:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36127:236;;;36189:20;36197:11;36189:7;:20::i;:::-;36185:171;;;36249:97;;;;;;;;36276:13;:18;;;36249:97;;;;;;36307:13;:28;;;36249:97;;;;;36222:11;:24;36234:11;36222:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36185:171;36127:236;36395:7;36391:2;36376:27;;36385:4;36376:27;;;;;;;;;;;;36410:42;36431:4;36437:2;36441:7;36450:1;36410:20;:42::i;:::-;34929:1529;;;;;;:::o;36890:846::-;36952:25;36980:24;;36952:52;;37030:1;37019:8;:12;37011:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37067:16;37117:1;37106:8;37086:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;37067:51;;37157:1;37140:14;:18;;;;:::i;:::-;37129:8;:29;37125:81;;;37197:1;37180:14;:18;;;;:::i;:::-;37169:29;;37125:81;37321:17;37329:8;37321:7;:17::i;:::-;37313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37393:9;37405:17;37393:29;;37388:297;37429:8;37424:1;:13;37388:297;;37488:1;37457:33;;:11;:14;37469:1;37457:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;37453:225;;;37503:31;37537:14;37549:1;37537:11;:14::i;:::-;37503:48;;37579:89;;;;;;;;37606:9;:14;;;37579:89;;;;;;37633:9;:24;;;37579:89;;;;;37562:11;:14;37574:1;37562:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37453:225;;37439:3;;;;;:::i;:::-;;;;37388:297;;;;37729:1;37718:8;:12;;;;:::i;:::-;37691:24;:39;;;;36890:846;;;:::o;45021:167::-;45119:4;45164:1;45146:14;:19;;:36;;;;;45177:5;45176:6;45146:36;45132:50;;45021:167;;;;:::o;45348:114::-;45451:5;45423:16;:24;45440:6;45423:24;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;45348:114;;:::o;32988:98::-;33053:27;33063:2;33067:8;33053:27;;;;;;;;;;;;:9;:27::i;:::-;32988:98;;:::o;44708:204::-;44781:5;44768:9;:18;;44760:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44836:5;44824:9;:17;44820:87;;;44860:10;44852:28;;:47;44893:5;44881:9;:17;;;;:::i;:::-;44852:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44820:87;44708:204;:::o;28690:606::-;28766:21;;:::i;:::-;28807:16;28815:7;28807;:16::i;:::-;28799:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28879:26;28927:12;28916:7;:23;28912:93;;28996:1;28981:12;28971:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;28950:47;;28912:93;29018:12;29033:7;29018:22;;29013:212;29050:18;29042:4;:26;29013:212;;29087:31;29121:11;:17;29133:4;29121:17;;;;;;;;;;;29087:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29177:1;29151:28;;:9;:14;;;:28;;;29147:71;;29199:9;29192:16;;;;;;;29147:71;29013:212;29070:6;;;;;:::i;:::-;;;;29013:212;;;;29233:57;;;;;;;;;;:::i;:::-;;;;;;;;28690:606;;;;:::o;42435:191::-;42509:16;42528:6;;;;;;;;;;;42509:25;;42554:8;42545:6;;:17;;;;;;;;;;;;;;;;;;42609:8;42578:40;;42599:8;42578:40;;;;;;;;;;;;42435:191;;:::o;38279:690::-;38416:4;38433:15;:2;:13;;;:15::i;:::-;38429:535;;;38488:2;38472:36;;;38509:12;:10;:12::i;:::-;38523:4;38529:7;38538:5;38472:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38459:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38720:1;38703:6;:13;:18;38699:215;;;38736:61;;;;;;;;;;:::i;:::-;;;;;;;;38699:215;38882:6;38876:13;38867:6;38863:2;38859:15;38852:38;38459:464;38604:45;;;38594:55;;;:6;:55;;;;38587:62;;;;;38429:535;38952:4;38945:11;;38279:690;;;;;;;:::o;45959:108::-;46019:13;46048;46041:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45959:108;:::o;400:723::-;456:13;686:1;677:5;:10;673:53;;;704:10;;;;;;;;;;;;;;;;;;;;;673:53;736:12;751:5;736:20;;767:14;792:78;807:1;799:4;:9;792:78;;825:8;;;;;:::i;:::-;;;;856:2;848:10;;;;;:::i;:::-;;;792:78;;;880:19;912:6;902:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:39;;930:154;946:1;937:5;:10;930:154;;974:1;964:11;;;;;:::i;:::-;;;1041:2;1033:5;:10;;;;:::i;:::-;1020:2;:24;;;;:::i;:::-;1007:39;;990:6;997;990:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1070:2;1061:11;;;;;:::i;:::-;;;930:154;;;1108:6;1094:21;;;;;400:723;;;;:::o;28444:240::-;28505:7;28554:1;28537:19;;:5;:19;;;;28521:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;28645:12;:19;28658:5;28645:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28637:41;;28630:48;;28444:240;;;:::o;39431:141::-;;;;;:::o;39958:140::-;;;;;:::o;33425:1272::-;33530:20;33553:12;;33530:35;;33594:1;33580:16;;:2;:16;;;;33572:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33771:21;33779:12;33771:7;:21::i;:::-;33770:22;33762:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33853:12;33841:8;:24;;33833:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33913:61;33943:1;33947:2;33951:12;33965:8;33913:21;:61::i;:::-;33983:30;34016:12;:16;34029:2;34016:16;;;;;;;;;;;;;;;33983:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34058:119;;;;;;;;34108:8;34078:11;:19;;;:39;;;;:::i;:::-;34058:119;;;;;;34161:8;34126:11;:24;;;:44;;;;:::i;:::-;34058:119;;;;;34039:12;:16;34052:2;34039:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34212:43;;;;;;;;34227:2;34212:43;;;;;;34238:15;34212:43;;;;;34184:11;:25;34196:12;34184:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34264:20;34287:12;34264:35;;34313:9;34308:281;34332:8;34328:1;:12;34308:281;;;34386:12;34382:2;34361:38;;34378:1;34361:38;;;;;;;;;;;;34426:59;34457:1;34461:2;34465:12;34479:5;34426:22;:59::i;:::-;34408:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34567:14;;;;;:::i;:::-;;;;34342:3;;;;;:::i;:::-;;;;34308:281;;;;34612:12;34597;:27;;;;34631:60;34660:1;34664:2;34668:12;34682:8;34631:20;:60::i;:::-;33425:1272;;;;;;:::o;3392:326::-;3452:4;3709:1;3687:7;:19;;;:23;3680:30;;3392:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:139::-;1080:5;1118:6;1105:20;1096:29;;1134:33;1161:5;1134:33;:::i;:::-;1086:87;;;;:::o;1196:303::-;1267:5;1316:3;1309:4;1301:6;1297:17;1293:27;1283:2;;1334:1;1331;1324:12;1283:2;1374:6;1361:20;1399:94;1489:3;1481:6;1474:4;1466:6;1462:17;1399:94;:::i;:::-;1390:103;;1273:226;;;;;:::o;1505:133::-;1548:5;1586:6;1573:20;1564:29;;1602:30;1626:5;1602:30;:::i;:::-;1554:84;;;;:::o;1644:137::-;1689:5;1727:6;1714:20;1705:29;;1743:32;1769:5;1743:32;:::i;:::-;1695:86;;;;:::o;1787:141::-;1843:5;1874:6;1868:13;1859:22;;1890:32;1916:5;1890:32;:::i;:::-;1849:79;;;;:::o;1947:271::-;2002:5;2051:3;2044:4;2036:6;2032:17;2028:27;2018:2;;2069:1;2066;2059:12;2018:2;2109:6;2096:20;2134:78;2208:3;2200:6;2193:4;2185:6;2181:17;2134:78;:::i;:::-;2125:87;;2008:210;;;;;:::o;2238:352::-;2296:8;2306:6;2356:3;2349:4;2341:6;2337:17;2333:27;2323:2;;2374:1;2371;2364:12;2323:2;2410:6;2397:20;2387:30;;2440:18;2432:6;2429:30;2426:2;;;2472:1;2469;2462:12;2426:2;2509:4;2501:6;2497:17;2485:29;;2563:3;2555:4;2547:6;2543:17;2533:8;2529:32;2526:41;2523:2;;;2580:1;2577;2570:12;2523:2;2313:277;;;;;:::o;2596:139::-;2642:5;2680:6;2667:20;2658:29;;2696:33;2723:5;2696:33;:::i;:::-;2648:87;;;;:::o;2741:262::-;2800:6;2849:2;2837:9;2828:7;2824:23;2820:32;2817:2;;;2865:1;2862;2855:12;2817:2;2908:1;2933:53;2978:7;2969:6;2958:9;2954:22;2933:53;:::i;:::-;2923:63;;2879:117;2807:196;;;;:::o;3009:407::-;3077:6;3085;3134:2;3122:9;3113:7;3109:23;3105:32;3102:2;;;3150:1;3147;3140:12;3102:2;3193:1;3218:53;3263:7;3254:6;3243:9;3239:22;3218:53;:::i;:::-;3208:63;;3164:117;3320:2;3346:53;3391:7;3382:6;3371:9;3367:22;3346:53;:::i;:::-;3336:63;;3291:118;3092:324;;;;;:::o;3422:552::-;3499:6;3507;3515;3564:2;3552:9;3543:7;3539:23;3535:32;3532:2;;;3580:1;3577;3570:12;3532:2;3623:1;3648:53;3693:7;3684:6;3673:9;3669:22;3648:53;:::i;:::-;3638:63;;3594:117;3750:2;3776:53;3821:7;3812:6;3801:9;3797:22;3776:53;:::i;:::-;3766:63;;3721:118;3878:2;3904:53;3949:7;3940:6;3929:9;3925:22;3904:53;:::i;:::-;3894:63;;3849:118;3522:452;;;;;:::o;3980:809::-;4075:6;4083;4091;4099;4148:3;4136:9;4127:7;4123:23;4119:33;4116:2;;;4165:1;4162;4155:12;4116:2;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;4335:2;4361:53;4406:7;4397:6;4386:9;4382:22;4361:53;:::i;:::-;4351:63;;4306:118;4463:2;4489:53;4534:7;4525:6;4514:9;4510:22;4489:53;:::i;:::-;4479:63;;4434:118;4619:2;4608:9;4604:18;4591:32;4650:18;4642:6;4639:30;4636:2;;;4682:1;4679;4672:12;4636:2;4710:62;4764:7;4755:6;4744:9;4740:22;4710:62;:::i;:::-;4700:72;;4562:220;4106:683;;;;;;;:::o;4795:401::-;4860:6;4868;4917:2;4905:9;4896:7;4892:23;4888:32;4885:2;;;4933:1;4930;4923:12;4885:2;4976:1;5001:53;5046:7;5037:6;5026:9;5022:22;5001:53;:::i;:::-;4991:63;;4947:117;5103:2;5129:50;5171:7;5162:6;5151:9;5147:22;5129:50;:::i;:::-;5119:60;;5074:115;4875:321;;;;;:::o;5202:407::-;5270:6;5278;5327:2;5315:9;5306:7;5302:23;5298:32;5295:2;;;5343:1;5340;5333:12;5295:2;5386:1;5411:53;5456:7;5447:6;5436:9;5432:22;5411:53;:::i;:::-;5401:63;;5357:117;5513:2;5539:53;5584:7;5575:6;5564:9;5560:22;5539:53;:::i;:::-;5529:63;;5484:118;5285:324;;;;;:::o;5615:550::-;5708:6;5716;5765:2;5753:9;5744:7;5740:23;5736:32;5733:2;;;5781:1;5778;5771:12;5733:2;5852:1;5841:9;5837:17;5824:31;5882:18;5874:6;5871:30;5868:2;;;5914:1;5911;5904:12;5868:2;5942:78;6012:7;6003:6;5992:9;5988:22;5942:78;:::i;:::-;5932:88;;5795:235;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;5723:442;;;;;:::o;6171:256::-;6227:6;6276:2;6264:9;6255:7;6251:23;6247:32;6244:2;;;6292:1;6289;6282:12;6244:2;6335:1;6360:50;6402:7;6393:6;6382:9;6378:22;6360:50;:::i;:::-;6350:60;;6306:114;6234:193;;;;:::o;6433:260::-;6491:6;6540:2;6528:9;6519:7;6515:23;6511:32;6508:2;;;6556:1;6553;6546:12;6508:2;6599:1;6624:52;6668:7;6659:6;6648:9;6644:22;6624:52;:::i;:::-;6614:62;;6570:116;6498:195;;;;:::o;6699:282::-;6768:6;6817:2;6805:9;6796:7;6792:23;6788:32;6785:2;;;6833:1;6830;6823:12;6785:2;6876:1;6901:63;6956:7;6947:6;6936:9;6932:22;6901:63;:::i;:::-;6891:73;;6847:127;6775:206;;;;:::o;6987:395::-;7058:6;7066;7115:2;7103:9;7094:7;7090:23;7086:32;7083:2;;;7131:1;7128;7121:12;7083:2;7202:1;7191:9;7187:17;7174:31;7232:18;7224:6;7221:30;7218:2;;;7264:1;7261;7254:12;7218:2;7300:65;7357:7;7348:6;7337:9;7333:22;7300:65;:::i;:::-;7282:83;;;;7145:230;7073:309;;;;;:::o;7388:262::-;7447:6;7496:2;7484:9;7475:7;7471:23;7467:32;7464:2;;;7512:1;7509;7502:12;7464:2;7555:1;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7526:117;7454:196;;;;:::o;7656:108::-;7733:24;7751:5;7733:24;:::i;:::-;7728:3;7721:37;7711:53;;:::o;7770:118::-;7857:24;7875:5;7857:24;:::i;:::-;7852:3;7845:37;7835:53;;:::o;7894:109::-;7975:21;7990:5;7975:21;:::i;:::-;7970:3;7963:34;7953:50;;:::o;8009:360::-;8095:3;8123:38;8155:5;8123:38;:::i;:::-;8177:70;8240:6;8235:3;8177:70;:::i;:::-;8170:77;;8256:52;8301:6;8296:3;8289:4;8282:5;8278:16;8256:52;:::i;:::-;8333:29;8355:6;8333:29;:::i;:::-;8328:3;8324:39;8317:46;;8099:270;;;;;:::o;8375:364::-;8463:3;8491:39;8524:5;8491:39;:::i;:::-;8546:71;8610:6;8605:3;8546:71;:::i;:::-;8539:78;;8626:52;8671:6;8666:3;8659:4;8652:5;8648:16;8626:52;:::i;:::-;8703:29;8725:6;8703:29;:::i;:::-;8698:3;8694:39;8687:46;;8467:272;;;;;:::o;8745:377::-;8851:3;8879:39;8912:5;8879:39;:::i;:::-;8934:89;9016:6;9011:3;8934:89;:::i;:::-;8927:96;;9032:52;9077:6;9072:3;9065:4;9058:5;9054:16;9032:52;:::i;:::-;9109:6;9104:3;9100:16;9093:23;;8855:267;;;;;:::o;9128:366::-;9270:3;9291:67;9355:2;9350:3;9291:67;:::i;:::-;9284:74;;9367:93;9456:3;9367:93;:::i;:::-;9485:2;9480:3;9476:12;9469:19;;9274:220;;;:::o;9500:366::-;9642:3;9663:67;9727:2;9722:3;9663:67;:::i;:::-;9656:74;;9739:93;9828:3;9739:93;:::i;:::-;9857:2;9852:3;9848:12;9841:19;;9646:220;;;:::o;9872:366::-;10014:3;10035:67;10099:2;10094:3;10035:67;:::i;:::-;10028:74;;10111:93;10200:3;10111:93;:::i;:::-;10229:2;10224:3;10220:12;10213:19;;10018:220;;;:::o;10244:366::-;10386:3;10407:67;10471:2;10466:3;10407:67;:::i;:::-;10400:74;;10483:93;10572:3;10483:93;:::i;:::-;10601:2;10596:3;10592:12;10585:19;;10390:220;;;:::o;10616:366::-;10758:3;10779:67;10843:2;10838:3;10779:67;:::i;:::-;10772:74;;10855:93;10944:3;10855:93;:::i;:::-;10973:2;10968:3;10964:12;10957:19;;10762:220;;;:::o;10988:366::-;11130:3;11151:67;11215:2;11210:3;11151:67;:::i;:::-;11144:74;;11227:93;11316:3;11227:93;:::i;:::-;11345:2;11340:3;11336:12;11329:19;;11134:220;;;:::o;11360:366::-;11502:3;11523:67;11587:2;11582:3;11523:67;:::i;:::-;11516:74;;11599:93;11688:3;11599:93;:::i;:::-;11717:2;11712:3;11708:12;11701:19;;11506:220;;;:::o;11732:366::-;11874:3;11895:67;11959:2;11954:3;11895:67;:::i;:::-;11888:74;;11971:93;12060:3;11971:93;:::i;:::-;12089:2;12084:3;12080:12;12073:19;;11878:220;;;:::o;12104:366::-;12246:3;12267:67;12331:2;12326:3;12267:67;:::i;:::-;12260:74;;12343:93;12432:3;12343:93;:::i;:::-;12461:2;12456:3;12452:12;12445:19;;12250:220;;;:::o;12476:366::-;12618:3;12639:67;12703:2;12698:3;12639:67;:::i;:::-;12632:74;;12715:93;12804:3;12715:93;:::i;:::-;12833:2;12828:3;12824:12;12817:19;;12622:220;;;:::o;12848:366::-;12990:3;13011:67;13075:2;13070:3;13011:67;:::i;:::-;13004:74;;13087:93;13176:3;13087:93;:::i;:::-;13205:2;13200:3;13196:12;13189:19;;12994:220;;;:::o;13220:366::-;13362:3;13383:67;13447:2;13442:3;13383:67;:::i;:::-;13376:74;;13459:93;13548:3;13459:93;:::i;:::-;13577:2;13572:3;13568:12;13561:19;;13366:220;;;:::o;13592:366::-;13734:3;13755:67;13819:2;13814:3;13755:67;:::i;:::-;13748:74;;13831:93;13920:3;13831:93;:::i;:::-;13949:2;13944:3;13940:12;13933:19;;13738:220;;;:::o;13964:366::-;14106:3;14127:67;14191:2;14186:3;14127:67;:::i;:::-;14120:74;;14203:93;14292:3;14203:93;:::i;:::-;14321:2;14316:3;14312:12;14305:19;;14110:220;;;:::o;14336:366::-;14478:3;14499:67;14563:2;14558:3;14499:67;:::i;:::-;14492:74;;14575:93;14664:3;14575:93;:::i;:::-;14693:2;14688:3;14684:12;14677:19;;14482:220;;;:::o;14708:366::-;14850:3;14871:67;14935:2;14930:3;14871:67;:::i;:::-;14864:74;;14947:93;15036:3;14947:93;:::i;:::-;15065:2;15060:3;15056:12;15049:19;;14854:220;;;:::o;15080:366::-;15222:3;15243:67;15307:2;15302:3;15243:67;:::i;:::-;15236:74;;15319:93;15408:3;15319:93;:::i;:::-;15437:2;15432:3;15428:12;15421:19;;15226:220;;;:::o;15452:366::-;15594:3;15615:67;15679:2;15674:3;15615:67;:::i;:::-;15608:74;;15691:93;15780:3;15691:93;:::i;:::-;15809:2;15804:3;15800:12;15793:19;;15598:220;;;:::o;15824:366::-;15966:3;15987:67;16051:2;16046:3;15987:67;:::i;:::-;15980:74;;16063:93;16152:3;16063:93;:::i;:::-;16181:2;16176:3;16172:12;16165:19;;15970:220;;;:::o;16196:398::-;16355:3;16376:83;16457:1;16452:3;16376:83;:::i;:::-;16369:90;;16468:93;16557:3;16468:93;:::i;:::-;16586:1;16581:3;16577:11;16570:18;;16359:235;;;:::o;16600:366::-;16742:3;16763:67;16827:2;16822:3;16763:67;:::i;:::-;16756:74;;16839:93;16928:3;16839:93;:::i;:::-;16957:2;16952:3;16948:12;16941:19;;16746:220;;;:::o;16972:366::-;17114:3;17135:67;17199:2;17194:3;17135:67;:::i;:::-;17128:74;;17211:93;17300:3;17211:93;:::i;:::-;17329:2;17324:3;17320:12;17313:19;;17118:220;;;:::o;17344:366::-;17486:3;17507:67;17571:2;17566:3;17507:67;:::i;:::-;17500:74;;17583:93;17672:3;17583:93;:::i;:::-;17701:2;17696:3;17692:12;17685:19;;17490:220;;;:::o;17716:366::-;17858:3;17879:67;17943:2;17938:3;17879:67;:::i;:::-;17872:74;;17955:93;18044:3;17955:93;:::i;:::-;18073:2;18068:3;18064:12;18057:19;;17862:220;;;:::o;18088:366::-;18230:3;18251:67;18315:2;18310:3;18251:67;:::i;:::-;18244:74;;18327:93;18416:3;18327:93;:::i;:::-;18445:2;18440:3;18436:12;18429:19;;18234:220;;;:::o;18460:366::-;18602:3;18623:67;18687:2;18682:3;18623:67;:::i;:::-;18616:74;;18699:93;18788:3;18699:93;:::i;:::-;18817:2;18812:3;18808:12;18801:19;;18606:220;;;:::o;18832:366::-;18974:3;18995:67;19059:2;19054:3;18995:67;:::i;:::-;18988:74;;19071:93;19160:3;19071:93;:::i;:::-;19189:2;19184:3;19180:12;19173:19;;18978:220;;;:::o;19204:366::-;19346:3;19367:67;19431:2;19426:3;19367:67;:::i;:::-;19360:74;;19443:93;19532:3;19443:93;:::i;:::-;19561:2;19556:3;19552:12;19545:19;;19350:220;;;:::o;19576:366::-;19718:3;19739:67;19803:2;19798:3;19739:67;:::i;:::-;19732:74;;19815:93;19904:3;19815:93;:::i;:::-;19933:2;19928:3;19924:12;19917:19;;19722:220;;;:::o;19948:366::-;20090:3;20111:67;20175:2;20170:3;20111:67;:::i;:::-;20104:74;;20187:93;20276:3;20187:93;:::i;:::-;20305:2;20300:3;20296:12;20289:19;;20094:220;;;:::o;20320:366::-;20462:3;20483:67;20547:2;20542:3;20483:67;:::i;:::-;20476:74;;20559:93;20648:3;20559:93;:::i;:::-;20677:2;20672:3;20668:12;20661:19;;20466:220;;;:::o;20692:366::-;20834:3;20855:67;20919:2;20914:3;20855:67;:::i;:::-;20848:74;;20931:93;21020:3;20931:93;:::i;:::-;21049:2;21044:3;21040:12;21033:19;;20838:220;;;:::o;21134:527::-;21293:4;21288:3;21284:14;21380:4;21373:5;21369:16;21363:23;21399:63;21456:4;21451:3;21447:14;21433:12;21399:63;:::i;:::-;21308:164;21564:4;21557:5;21553:16;21547:23;21583:61;21638:4;21633:3;21629:14;21615:12;21583:61;:::i;:::-;21482:172;21262:399;;;:::o;21667:118::-;21754:24;21772:5;21754:24;:::i;:::-;21749:3;21742:37;21732:53;;:::o;21791:105::-;21866:23;21883:5;21866:23;:::i;:::-;21861:3;21854:36;21844:52;;:::o;21902:115::-;21987:23;22004:5;21987:23;:::i;:::-;21982:3;21975:36;21965:52;;:::o;22023:435::-;22203:3;22225:95;22316:3;22307:6;22225:95;:::i;:::-;22218:102;;22337:95;22428:3;22419:6;22337:95;:::i;:::-;22330:102;;22449:3;22442:10;;22207:251;;;;;:::o;22464:379::-;22648:3;22670:147;22813:3;22670:147;:::i;:::-;22663:154;;22834:3;22827:10;;22652:191;;;:::o;22849:222::-;22942:4;22980:2;22969:9;22965:18;22957:26;;22993:71;23061:1;23050:9;23046:17;23037:6;22993:71;:::i;:::-;22947:124;;;;:::o;23077:640::-;23272:4;23310:3;23299:9;23295:19;23287:27;;23324:71;23392:1;23381:9;23377:17;23368:6;23324:71;:::i;:::-;23405:72;23473:2;23462:9;23458:18;23449:6;23405:72;:::i;:::-;23487;23555:2;23544:9;23540:18;23531:6;23487:72;:::i;:::-;23606:9;23600:4;23596:20;23591:2;23580:9;23576:18;23569:48;23634:76;23705:4;23696:6;23634:76;:::i;:::-;23626:84;;23277:440;;;;;;;:::o;23723:210::-;23810:4;23848:2;23837:9;23833:18;23825:26;;23861:65;23923:1;23912:9;23908:17;23899:6;23861:65;:::i;:::-;23815:118;;;;:::o;23939:313::-;24052:4;24090:2;24079:9;24075:18;24067:26;;24139:9;24133:4;24129:20;24125:1;24114:9;24110:17;24103:47;24167:78;24240:4;24231:6;24167:78;:::i;:::-;24159:86;;24057:195;;;;:::o;24258:419::-;24424:4;24462:2;24451:9;24447:18;24439:26;;24511:9;24505:4;24501:20;24497:1;24486:9;24482:17;24475:47;24539:131;24665:4;24539:131;:::i;:::-;24531:139;;24429:248;;;:::o;24683:419::-;24849:4;24887:2;24876:9;24872:18;24864:26;;24936:9;24930:4;24926:20;24922:1;24911:9;24907:17;24900:47;24964:131;25090:4;24964:131;:::i;:::-;24956:139;;24854:248;;;:::o;25108:419::-;25274:4;25312:2;25301:9;25297:18;25289:26;;25361:9;25355:4;25351:20;25347:1;25336:9;25332:17;25325:47;25389:131;25515:4;25389:131;:::i;:::-;25381:139;;25279:248;;;:::o;25533:419::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25814:131;25940:4;25814:131;:::i;:::-;25806:139;;25704:248;;;:::o;25958:419::-;26124:4;26162:2;26151:9;26147:18;26139:26;;26211:9;26205:4;26201:20;26197:1;26186:9;26182:17;26175:47;26239:131;26365:4;26239:131;:::i;:::-;26231:139;;26129:248;;;:::o;26383:419::-;26549:4;26587:2;26576:9;26572:18;26564:26;;26636:9;26630:4;26626:20;26622:1;26611:9;26607:17;26600:47;26664:131;26790:4;26664:131;:::i;:::-;26656:139;;26554:248;;;:::o;26808:419::-;26974:4;27012:2;27001:9;26997:18;26989:26;;27061:9;27055:4;27051:20;27047:1;27036:9;27032:17;27025:47;27089:131;27215:4;27089:131;:::i;:::-;27081:139;;26979:248;;;:::o;27233:419::-;27399:4;27437:2;27426:9;27422:18;27414:26;;27486:9;27480:4;27476:20;27472:1;27461:9;27457:17;27450:47;27514:131;27640:4;27514:131;:::i;:::-;27506:139;;27404:248;;;:::o;27658:419::-;27824:4;27862:2;27851:9;27847:18;27839:26;;27911:9;27905:4;27901:20;27897:1;27886:9;27882:17;27875:47;27939:131;28065:4;27939:131;:::i;:::-;27931:139;;27829:248;;;:::o;28083:419::-;28249:4;28287:2;28276:9;28272:18;28264:26;;28336:9;28330:4;28326:20;28322:1;28311:9;28307:17;28300:47;28364:131;28490:4;28364:131;:::i;:::-;28356:139;;28254:248;;;:::o;28508:419::-;28674:4;28712:2;28701:9;28697:18;28689:26;;28761:9;28755:4;28751:20;28747:1;28736:9;28732:17;28725:47;28789:131;28915:4;28789:131;:::i;:::-;28781:139;;28679:248;;;:::o;28933:419::-;29099:4;29137:2;29126:9;29122:18;29114:26;;29186:9;29180:4;29176:20;29172:1;29161:9;29157:17;29150:47;29214:131;29340:4;29214:131;:::i;:::-;29206:139;;29104:248;;;:::o;29358:419::-;29524:4;29562:2;29551:9;29547:18;29539:26;;29611:9;29605:4;29601:20;29597:1;29586:9;29582:17;29575:47;29639:131;29765:4;29639:131;:::i;:::-;29631:139;;29529:248;;;:::o;29783:419::-;29949:4;29987:2;29976:9;29972:18;29964:26;;30036:9;30030:4;30026:20;30022:1;30011:9;30007:17;30000:47;30064:131;30190:4;30064:131;:::i;:::-;30056:139;;29954:248;;;:::o;30208:419::-;30374:4;30412:2;30401:9;30397:18;30389:26;;30461:9;30455:4;30451:20;30447:1;30436:9;30432:17;30425:47;30489:131;30615:4;30489:131;:::i;:::-;30481:139;;30379:248;;;:::o;30633:419::-;30799:4;30837:2;30826:9;30822:18;30814:26;;30886:9;30880:4;30876:20;30872:1;30861:9;30857:17;30850:47;30914:131;31040:4;30914:131;:::i;:::-;30906:139;;30804:248;;;:::o;31058:419::-;31224:4;31262:2;31251:9;31247:18;31239:26;;31311:9;31305:4;31301:20;31297:1;31286:9;31282:17;31275:47;31339:131;31465:4;31339:131;:::i;:::-;31331:139;;31229:248;;;:::o;31483:419::-;31649:4;31687:2;31676:9;31672:18;31664:26;;31736:9;31730:4;31726:20;31722:1;31711:9;31707:17;31700:47;31764:131;31890:4;31764:131;:::i;:::-;31756:139;;31654:248;;;:::o;31908:419::-;32074:4;32112:2;32101:9;32097:18;32089:26;;32161:9;32155:4;32151:20;32147:1;32136:9;32132:17;32125:47;32189:131;32315:4;32189:131;:::i;:::-;32181:139;;32079:248;;;:::o;32333:419::-;32499:4;32537:2;32526:9;32522:18;32514:26;;32586:9;32580:4;32576:20;32572:1;32561:9;32557:17;32550:47;32614:131;32740:4;32614:131;:::i;:::-;32606:139;;32504:248;;;:::o;32758:419::-;32924:4;32962:2;32951:9;32947:18;32939:26;;33011:9;33005:4;33001:20;32997:1;32986:9;32982:17;32975:47;33039:131;33165:4;33039:131;:::i;:::-;33031:139;;32929:248;;;:::o;33183:419::-;33349:4;33387:2;33376:9;33372:18;33364:26;;33436:9;33430:4;33426:20;33422:1;33411:9;33407:17;33400:47;33464:131;33590:4;33464:131;:::i;:::-;33456:139;;33354:248;;;:::o;33608:419::-;33774:4;33812:2;33801:9;33797:18;33789:26;;33861:9;33855:4;33851:20;33847:1;33836:9;33832:17;33825:47;33889:131;34015:4;33889:131;:::i;:::-;33881:139;;33779:248;;;:::o;34033:419::-;34199:4;34237:2;34226:9;34222:18;34214:26;;34286:9;34280:4;34276:20;34272:1;34261:9;34257:17;34250:47;34314:131;34440:4;34314:131;:::i;:::-;34306:139;;34204:248;;;:::o;34458:419::-;34624:4;34662:2;34651:9;34647:18;34639:26;;34711:9;34705:4;34701:20;34697:1;34686:9;34682:17;34675:47;34739:131;34865:4;34739:131;:::i;:::-;34731:139;;34629:248;;;:::o;34883:419::-;35049:4;35087:2;35076:9;35072:18;35064:26;;35136:9;35130:4;35126:20;35122:1;35111:9;35107:17;35100:47;35164:131;35290:4;35164:131;:::i;:::-;35156:139;;35054:248;;;:::o;35308:419::-;35474:4;35512:2;35501:9;35497:18;35489:26;;35561:9;35555:4;35551:20;35547:1;35536:9;35532:17;35525:47;35589:131;35715:4;35589:131;:::i;:::-;35581:139;;35479:248;;;:::o;35733:419::-;35899:4;35937:2;35926:9;35922:18;35914:26;;35986:9;35980:4;35976:20;35972:1;35961:9;35957:17;35950:47;36014:131;36140:4;36014:131;:::i;:::-;36006:139;;35904:248;;;:::o;36158:419::-;36324:4;36362:2;36351:9;36347:18;36339:26;;36411:9;36405:4;36401:20;36397:1;36386:9;36382:17;36375:47;36439:131;36565:4;36439:131;:::i;:::-;36431:139;;36329:248;;;:::o;36583:419::-;36749:4;36787:2;36776:9;36772:18;36764:26;;36836:9;36830:4;36826:20;36822:1;36811:9;36807:17;36800:47;36864:131;36990:4;36864:131;:::i;:::-;36856:139;;36754:248;;;:::o;37008:419::-;37174:4;37212:2;37201:9;37197:18;37189:26;;37261:9;37255:4;37251:20;37247:1;37236:9;37232:17;37225:47;37289:131;37415:4;37289:131;:::i;:::-;37281:139;;37179:248;;;:::o;37433:346::-;37588:4;37626:2;37615:9;37611:18;37603:26;;37639:133;37769:1;37758:9;37754:17;37745:6;37639:133;:::i;:::-;37593:186;;;;:::o;37785:222::-;37878:4;37916:2;37905:9;37901:18;37893:26;;37929:71;37997:1;37986:9;37982:17;37973:6;37929:71;:::i;:::-;37883:124;;;;:::o;38013:316::-;38126:4;38164:2;38153:9;38149:18;38141:26;;38177:69;38243:1;38232:9;38228:17;38219:6;38177:69;:::i;:::-;38256:66;38318:2;38307:9;38303:18;38294:6;38256:66;:::i;:::-;38131:198;;;;;:::o;38335:129::-;38369:6;38396:20;;:::i;:::-;38386:30;;38425:33;38453:4;38445:6;38425:33;:::i;:::-;38376:88;;;:::o;38470:75::-;38503:6;38536:2;38530:9;38520:19;;38510:35;:::o;38551:311::-;38628:4;38718:18;38710:6;38707:30;38704:2;;;38740:18;;:::i;:::-;38704:2;38790:4;38782:6;38778:17;38770:25;;38850:4;38844;38840:15;38832:23;;38633:229;;;:::o;38868:307::-;38929:4;39019:18;39011:6;39008:30;39005:2;;;39041:18;;:::i;:::-;39005:2;39079:29;39101:6;39079:29;:::i;:::-;39071:37;;39163:4;39157;39153:15;39145:23;;38934:241;;;:::o;39181:98::-;39232:6;39266:5;39260:12;39250:22;;39239:40;;;:::o;39285:99::-;39337:6;39371:5;39365:12;39355:22;;39344:40;;;:::o;39390:168::-;39473:11;39507:6;39502:3;39495:19;39547:4;39542:3;39538:14;39523:29;;39485:73;;;;:::o;39564:147::-;39665:11;39702:3;39687:18;;39677:34;;;;:::o;39717:169::-;39801:11;39835:6;39830:3;39823:19;39875:4;39870:3;39866:14;39851:29;;39813:73;;;;:::o;39892:148::-;39994:11;40031:3;40016:18;;40006:34;;;;:::o;40046:273::-;40086:3;40105:20;40123:1;40105:20;:::i;:::-;40100:25;;40139:20;40157:1;40139:20;:::i;:::-;40134:25;;40261:1;40225:34;40221:42;40218:1;40215:49;40212:2;;;40267:18;;:::i;:::-;40212:2;40311:1;40308;40304:9;40297:16;;40090:229;;;;:::o;40325:305::-;40365:3;40384:20;40402:1;40384:20;:::i;:::-;40379:25;;40418:20;40436:1;40418:20;:::i;:::-;40413:25;;40572:1;40504:66;40500:74;40497:1;40494:81;40491:2;;;40578:18;;:::i;:::-;40491:2;40622:1;40619;40615:9;40608:16;;40369:261;;;;:::o;40636:185::-;40676:1;40693:20;40711:1;40693:20;:::i;:::-;40688:25;;40727:20;40745:1;40727:20;:::i;:::-;40722:25;;40766:1;40756:2;;40771:18;;:::i;:::-;40756:2;40813:1;40810;40806:9;40801:14;;40678:143;;;;:::o;40827:348::-;40867:7;40890:20;40908:1;40890:20;:::i;:::-;40885:25;;40924:20;40942:1;40924:20;:::i;:::-;40919:25;;41112:1;41044:66;41040:74;41037:1;41034:81;41029:1;41022:9;41015:17;41011:105;41008:2;;;41119:18;;:::i;:::-;41008:2;41167:1;41164;41160:9;41149:20;;40875:300;;;;:::o;41181:191::-;41221:4;41241:20;41259:1;41241:20;:::i;:::-;41236:25;;41275:20;41293:1;41275:20;:::i;:::-;41270:25;;41314:1;41311;41308:8;41305:2;;;41319:18;;:::i;:::-;41305:2;41364:1;41361;41357:9;41349:17;;41226:146;;;;:::o;41378:191::-;41418:4;41438:20;41456:1;41438:20;:::i;:::-;41433:25;;41472:20;41490:1;41472:20;:::i;:::-;41467:25;;41511:1;41508;41505:8;41502:2;;;41516:18;;:::i;:::-;41502:2;41561:1;41558;41554:9;41546:17;;41423:146;;;;:::o;41575:96::-;41612:7;41641:24;41659:5;41641:24;:::i;:::-;41630:35;;41620:51;;;:::o;41677:90::-;41711:7;41754:5;41747:13;41740:21;41729:32;;41719:48;;;:::o;41773:149::-;41809:7;41849:66;41842:5;41838:78;41827:89;;41817:105;;;:::o;41928:118::-;41965:7;42005:34;41998:5;41994:46;41983:57;;41973:73;;;:::o;42052:126::-;42089:7;42129:42;42122:5;42118:54;42107:65;;42097:81;;;:::o;42184:77::-;42221:7;42250:5;42239:16;;42229:32;;;:::o;42267:101::-;42303:7;42343:18;42336:5;42332:30;42321:41;;42311:57;;;:::o;42374:154::-;42458:6;42453:3;42448;42435:30;42520:1;42511:6;42506:3;42502:16;42495:27;42425:103;;;:::o;42534:307::-;42602:1;42612:113;42626:6;42623:1;42620:13;42612:113;;;42711:1;42706:3;42702:11;42696:18;42692:1;42687:3;42683:11;42676:39;42648:2;42645:1;42641:10;42636:15;;42612:113;;;42743:6;42740:1;42737:13;42734:2;;;42823:1;42814:6;42809:3;42805:16;42798:27;42734:2;42583:258;;;;:::o;42847:171::-;42886:3;42909:24;42927:5;42909:24;:::i;:::-;42900:33;;42955:4;42948:5;42945:15;42942:2;;;42963:18;;:::i;:::-;42942:2;43010:1;43003:5;42999:13;42992:20;;42890:128;;;:::o;43024:320::-;43068:6;43105:1;43099:4;43095:12;43085:22;;43152:1;43146:4;43142:12;43173:18;43163:2;;43229:4;43221:6;43217:17;43207:27;;43163:2;43291;43283:6;43280:14;43260:18;43257:38;43254:2;;;43310:18;;:::i;:::-;43254:2;43075:269;;;;:::o;43350:281::-;43433:27;43455:4;43433:27;:::i;:::-;43425:6;43421:40;43563:6;43551:10;43548:22;43527:18;43515:10;43512:34;43509:62;43506:2;;;43574:18;;:::i;:::-;43506:2;43614:10;43610:2;43603:22;43393:238;;;:::o;43637:233::-;43676:3;43699:24;43717:5;43699:24;:::i;:::-;43690:33;;43745:66;43738:5;43735:77;43732:2;;;43815:18;;:::i;:::-;43732:2;43862:1;43855:5;43851:13;43844:20;;43680:190;;;:::o;43876:176::-;43908:1;43925:20;43943:1;43925:20;:::i;:::-;43920:25;;43959:20;43977:1;43959:20;:::i;:::-;43954:25;;43998:1;43988:2;;44003:18;;:::i;:::-;43988:2;44044:1;44041;44037:9;44032:14;;43910:142;;;;:::o;44058:180::-;44106:77;44103:1;44096:88;44203:4;44200:1;44193:15;44227:4;44224:1;44217:15;44244:180;44292:77;44289:1;44282:88;44389:4;44386:1;44379:15;44413:4;44410:1;44403:15;44430:180;44478:77;44475:1;44468:88;44575:4;44572:1;44565:15;44599:4;44596:1;44589:15;44616:180;44664:77;44661:1;44654:88;44761:4;44758:1;44751:15;44785:4;44782:1;44775:15;44802:102;44843:6;44894:2;44890:7;44885:2;44878:5;44874:14;44870:28;44860:38;;44850:54;;;:::o;44910:221::-;45050:34;45046:1;45038:6;45034:14;45027:58;45119:4;45114:2;45106:6;45102:15;45095:29;45016:115;:::o;45137:225::-;45277:34;45273:1;45265:6;45261:14;45254:58;45346:8;45341:2;45333:6;45329:15;45322:33;45243:119;:::o;45368:229::-;45508:34;45504:1;45496:6;45492:14;45485:58;45577:12;45572:2;45564:6;45560:15;45553:37;45474:123;:::o;45603:231::-;45743:34;45739:1;45731:6;45727:14;45720:58;45812:14;45807:2;45799:6;45795:15;45788:39;45709:125;:::o;45840:222::-;45980:34;45976:1;45968:6;45964:14;45957:58;46049:5;46044:2;46036:6;46032:15;46025:30;45946:116;:::o;46068:224::-;46208:34;46204:1;46196:6;46192:14;46185:58;46277:7;46272:2;46264:6;46260:15;46253:32;46174:118;:::o;46298:236::-;46438:34;46434:1;46426:6;46422:14;46415:58;46507:19;46502:2;46494:6;46490:15;46483:44;46404:130;:::o;46540:180::-;46680:32;46676:1;46668:6;46664:14;46657:56;46646:74;:::o;46726:244::-;46866:34;46862:1;46854:6;46850:14;46843:58;46935:27;46930:2;46922:6;46918:15;46911:52;46832:138;:::o;46976:174::-;47116:26;47112:1;47104:6;47100:14;47093:50;47082:68;:::o;47156:230::-;47296:34;47292:1;47284:6;47280:14;47273:58;47365:13;47360:2;47352:6;47348:15;47341:38;47262:124;:::o;47392:168::-;47532:20;47528:1;47520:6;47516:14;47509:44;47498:62;:::o;47566:225::-;47706:34;47702:1;47694:6;47690:14;47683:58;47775:8;47770:2;47762:6;47758:15;47751:33;47672:119;:::o;47797:182::-;47937:34;47933:1;47925:6;47921:14;47914:58;47903:76;:::o;47985:234::-;48125:34;48121:1;48113:6;48109:14;48102:58;48194:17;48189:2;48181:6;48177:15;48170:42;48091:128;:::o;48225:176::-;48365:28;48361:1;48353:6;48349:14;48342:52;48331:70;:::o;48407:237::-;48547:34;48543:1;48535:6;48531:14;48524:58;48616:20;48611:2;48603:6;48599:15;48592:45;48513:131;:::o;48650:179::-;48790:31;48786:1;48778:6;48774:14;48767:55;48756:73;:::o;48835:221::-;48975:34;48971:1;48963:6;48959:14;48952:58;49044:4;49039:2;49031:6;49027:15;49020:29;48941:115;:::o;49062:114::-;49168:8;:::o;49182:166::-;49322:18;49318:1;49310:6;49306:14;49299:42;49288:60;:::o;49354:238::-;49494:34;49490:1;49482:6;49478:14;49471:58;49563:21;49558:2;49550:6;49546:15;49539:46;49460:132;:::o;49598:172::-;49738:24;49734:1;49726:6;49722:14;49715:48;49704:66;:::o;49776:179::-;49916:31;49912:1;49904:6;49900:14;49893:55;49882:73;:::o;49961:220::-;50101:34;50097:1;50089:6;50085:14;50078:58;50170:3;50165:2;50157:6;50153:15;50146:28;50067:114;:::o;50187:172::-;50327:24;50323:1;50315:6;50311:14;50304:48;50293:66;:::o;50365:233::-;50505:34;50501:1;50493:6;50489:14;50482:58;50574:16;50569:2;50561:6;50557:15;50550:41;50471:127;:::o;50604:225::-;50744:34;50740:1;50732:6;50728:14;50721:58;50813:8;50808:2;50800:6;50796:15;50789:33;50710:119;:::o;50835:181::-;50975:33;50971:1;50963:6;50959:14;50952:57;50941:75;:::o;51022:234::-;51162:34;51158:1;51150:6;51146:14;51139:58;51231:17;51226:2;51218:6;51214:15;51207:42;51128:128;:::o;51262:232::-;51402:34;51398:1;51390:6;51386:14;51379:58;51471:15;51466:2;51458:6;51454:15;51447:40;51368:126;:::o;51500:221::-;51640:34;51636:1;51628:6;51624:14;51617:58;51709:4;51704:2;51696:6;51692:15;51685:29;51606:115;:::o;51727:122::-;51800:24;51818:5;51800:24;:::i;:::-;51793:5;51790:35;51780:2;;51839:1;51836;51829:12;51780:2;51770:79;:::o;51855:116::-;51925:21;51940:5;51925:21;:::i;:::-;51918:5;51915:32;51905:2;;51961:1;51958;51951:12;51905:2;51895:76;:::o;51977:120::-;52049:23;52066:5;52049:23;:::i;:::-;52042:5;52039:34;52029:2;;52087:1;52084;52077:12;52029:2;52019:78;:::o;52103:122::-;52176:24;52194:5;52176:24;:::i;:::-;52169:5;52166:35;52156:2;;52215:1;52212;52205:12;52156:2;52146:79;:::o

Swarm Source

ipfs://97a138284e3ecbf0dd30f6226eb1c65bc82d9098866bff7b2cdfdb1bdd855df8
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.