ETH Price: $3,498.91 (+4.58%)

Token

Full Moonbirds (FullMoonbirds)
 

Overview

Max Total Supply

2,461 FullMoonbirds

Holders

720

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 FullMoonbirds
0xc3f696d9a6cf2d6d63c3de704a910c8946cbc9d2
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:
FullMoonbirdsContract

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}

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;
}

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);
}

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;
    }
}

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);
    }
}

pragma solidity ^0.8.0;

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

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

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

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);
}

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

  /**
   * @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(TotalToken). 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()))
        : "";
  }


  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 virtual 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 virtual 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 > TotalToken - 1) {
      endIndex = TotalToken - 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 {}
}



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 make 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;
    }
}



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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


pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

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


pragma solidity ^0.8.0;


contract FullMoonbirdsContract is Ownable, ERC721A, ReentrancyGuard {
  bool public     IsSalesStart;
  bool public     IsClaimActive;  
  uint256 public  TotalCollectionSize;
  uint256 public  Mintprice;  
  uint256 public  MaxClaimTokenTotalForFree; 
  uint256 public  MaxClaimTokenTotalForFreePerwallet;   
  uint public     MaxFreeClaimPerTx;  
  uint public     MaxMintPerTx; 
  mapping(address => uint256) private ClaimPerWallet;

 constructor(
    uint256 maxBatchSize_,
    uint256 TotalToken_
  ) ERC721A("Full Moonbirds", "FullMoonbirds", maxBatchSize_, TotalToken_) {
    MaxMintPerTx = maxBatchSize_;
    TotalCollectionSize = TotalToken_; 
    IsSalesStart = true;  
    IsClaimActive = true;     
    Mintprice =   4000000000000000;
    MaxClaimTokenTotalForFree = 2000;
    MaxClaimTokenTotalForFreePerwallet = 3;
    MaxFreeClaimPerTx = 3; 
  }

  
  function MintTo(address _to,uint256 mintamount) external onlyOwner {        
    require(totalSupply() + mintamount <= TotalCollectionSize, "Can not mint more than TotalCollectionSize");

    _safeMint(_to, mintamount);
    }

  function Claim(uint256 mintamount) external payable {
    require(IsClaimActive, "Sale is not started");
    require(mintamount > 0 && mintamount <= MaxFreeClaimPerTx, "Can not mint more than MaxFreeClaimPerTx");  
    require(ClaimPerWallet[msg.sender] + mintamount <= MaxClaimTokenTotalForFreePerwallet, "Can not mint more than MaxClaimTokenTotalForFreePerwallet");     
    require(totalSupply() + mintamount <= MaxClaimTokenTotalForFree, "Can not mint more than MaxClaimTokenTotalForFree");

    _safeMint(msg.sender, mintamount);
    ClaimPerWallet[msg.sender] += mintamount;
  }

  function Mint(uint256 mintamount) external payable {
    require(IsSalesStart, "Sale is not started");
    require(totalSupply() + mintamount <= TotalCollectionSize, "Can not mint more than TotalCollectionSize");    
    require(mintamount > 0 && mintamount <= MaxMintPerTx, "Can not mint more than MaxMintPerTx");
    require(msg.value >= Mintprice*mintamount, "Not paid enough ETH.");

    _safeMint(msg.sender, mintamount);
  } 


  function SetMaxMintPerTxForClaim(uint _MaxFreeClaimPerTx) external onlyOwner {
    MaxFreeClaimPerTx = _MaxFreeClaimPerTx;
  }   

  function setMaxMintPerTx(uint _MaxMintPerTx) external onlyOwner {
    MaxMintPerTx = _MaxMintPerTx;
  }   

  function setTotalCollectionSize(uint _TotalToken) external onlyOwner {
    TotalCollectionSize = _TotalToken;
  }

  function setMintprice(uint _Mintprice) external onlyOwner {
    Mintprice = _Mintprice;
  }        

  function setMaxClaimTokenTotalForFreePerwallet(uint _MaxClaimTokenTotalForFreePerwallet) external onlyOwner {
    MaxClaimTokenTotalForFreePerwallet = _MaxClaimTokenTotalForFreePerwallet;
  }         

  function setMaxClaimTokenTotalForFree(uint _MaxClaimTokenTotalForFree) external onlyOwner {
    MaxClaimTokenTotalForFree = _MaxClaimTokenTotalForFree;
  } 

  function SetSalesStart() public onlyOwner {
    IsSalesStart = !IsSalesStart;
  }

  function SetIsClaimActive() public onlyOwner {
    IsClaimActive = !IsClaimActive;
  }

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

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

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

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

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

  function tokensOfOwner(address _owner) external view returns(uint256[] memory ) {
    uint256 tokenCount = balanceOf(_owner);
    if (tokenCount == 0) {
        return new uint256[](0);
    } else {
        uint256[] memory result = new uint256[](tokenCount);
        uint256 index;
        for (index = 0; index < tokenCount; index++) {
            result[index] = tokenOfOwnerByIndex(_owner, index);
        }
        return result;
    }
  } 

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

 }

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"TotalToken_","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":[{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"Claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"IsClaimActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IsSalesStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxClaimTokenTotalForFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxClaimTokenTotalForFreePerwallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxFreeClaimPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"MintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Mintprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetIsClaimActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxFreeClaimPerTx","type":"uint256"}],"name":"SetMaxMintPerTxForClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetSalesStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalCollectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"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":[],"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":[{"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":"_MaxClaimTokenTotalForFree","type":"uint256"}],"name":"setMaxClaimTokenTotalForFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxClaimTokenTotalForFreePerwallet","type":"uint256"}],"name":"setMaxClaimTokenTotalForFreePerwallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Mintprice","type":"uint256"}],"name":"setMintprice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TotalToken","type":"uint256"}],"name":"setTotalCollectionSize","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600060015560006008553480156200001b57600080fd5b5060405162005c7738038062005c778339818101604052810190620000419190620003af565b6040518060400160405280600e81526020017f46756c6c204d6f6f6e62697264730000000000000000000000000000000000008152506040518060400160405280600d81526020017f46756c6c4d6f6f6e6269726473000000000000000000000000000000000000008152508383620000cf620000c36200021c60201b60201c565b6200022460201b60201c565b6000811162000115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010c90620004e2565b60405180910390fd5b600082116200015b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015290620004c0565b60405180910390fd5b836002908051906020019062000173929190620002e8565b5082600390805190602001906200018c929190620002e8565b508160a0818152505080608081815250505050505060016009819055508160108190555080600b819055506001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff021916908315150217905550660e35fa931a0000600c819055506107d0600d819055506003600e819055506003600f8190555050506200059e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002f6906200051f565b90600052602060002090601f0160209004810192826200031a576000855562000366565b82601f106200033557805160ff191683800117855562000366565b8280016001018555821562000366579182015b828111156200036557825182559160200191906001019062000348565b5b50905062000375919062000379565b5090565b5b80821115620003945760008160009055506001016200037a565b5090565b600081519050620003a98162000584565b92915050565b60008060408385031215620003c357600080fd5b6000620003d38582860162000398565b9250506020620003e68582860162000398565b9150509250929050565b6000620003ff60278362000504565b91507f455243373231413a206d61782062617463682073697a65206d7573742062652060008301527f6e6f6e7a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000467602e8362000504565b91507f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008301527f6e6f6e7a65726f20737570706c790000000000000000000000000000000000006020830152604082019050919050565b60006020820190508181036000830152620004db81620003f0565b9050919050565b60006020820190508181036000830152620004fd8162000458565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200053857607f821691505b602082108114156200054f576200054e62000555565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200058f8162000515565b81146200059b57600080fd5b50565b60805160a05161569e620005d960003960008181612dfb01528181612e2401526135ef015260008181612b830152612bb7015261569e6000f3fe6080604052600436106102725760003560e01c806361f1f87d1161014f57806395d89b41116100c1578063c87b56dd1161007a578063c87b56dd1461090c578063d7224ba014610949578063dc33e68114610974578063e985e9c5146109b1578063f2fde38b146109ee578063fb41438b14610a1757610272565b806395d89b41146108105780639a47415e1461083b578063a22cb46514610866578063afb2b1a91461088f578063b6414eb8146108ba578063b88d4fde146108e357610272565b80637b0a6691116101135780637b0a6691146106f95780637bb2b3c114610724578063823903a9146107405780638462151c1461076b5780638da5cb5b146107a85780639231ab2a146107d357610272565b806361f1f87d146106125780636352211e1461063d57806370a082311461067a578063715018a6146106b75780637293773c146106ce57610272565b80632f745c59116101e85780634f6ccce7116101ac5780634f6ccce71461051657806354870bc614610553578063556621cc1461056a57806355f804b3146105955780635b7a0d88146105be578063616cdb1e146105e957610272565b80632f745c591461045957806336748001146104965780633ccfd60b146104bf57806342842e0e146104d65780634f1aa58f146104ff57610272565b8063095ea7b31161023a578063095ea7b31461036157806318160ddd1461038a5780631e8ab346146103b557806323b872dd146103de5780632ccee9be146104075780632d20fb601461043057610272565b8063011239571461027757806301ffc9a7146102a057806306fdde03146102dd5780630788370314610308578063081812fc14610324575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613e62565b610a40565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190613dcb565b610ac6565b6040516102d49190614c99565b60405180910390f35b3480156102e957600080fd5b506102f2610c10565b6040516102ff9190614cb4565b60405180910390f35b610322600480360381019061031d9190613e62565b610ca2565b005b34801561033057600080fd5b5061034b60048036038101906103469190613e62565b610df6565b6040516103589190614c10565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190613d8f565b610e7b565b005b34801561039657600080fd5b5061039f610f94565b6040516103ac91906150f1565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190613e62565b610f9e565b005b3480156103ea57600080fd5b5061040560048036038101906104009190613c89565b611024565b005b34801561041357600080fd5b5061042e60048036038101906104299190613d8f565b611034565b005b34801561043c57600080fd5b5061045760048036038101906104529190613e62565b611115565b005b34801561046557600080fd5b50610480600480360381019061047b9190613d8f565b6111f3565b60405161048d91906150f1565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613e62565b6113f1565b005b3480156104cb57600080fd5b506104d4611477565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613c89565b6115f8565b005b34801561050b57600080fd5b50610514611618565b005b34801561052257600080fd5b5061053d60048036038101906105389190613e62565b6116c0565b60405161054a91906150f1565b60405180910390f35b34801561055f57600080fd5b50610568611713565b005b34801561057657600080fd5b5061057f6117bb565b60405161058c91906150f1565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613e1d565b6117c1565b005b3480156105ca57600080fd5b506105d3611853565b6040516105e091906150f1565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613e62565b611859565b005b34801561061e57600080fd5b506106276118df565b60405161063491906150f1565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190613e62565b6118e5565b6040516106719190614c10565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190613c24565b6118fb565b6040516106ae91906150f1565b60405180910390f35b3480156106c357600080fd5b506106cc6119e4565b005b3480156106da57600080fd5b506106e3611a6c565b6040516106f09190614c99565b60405180910390f35b34801561070557600080fd5b5061070e611a7f565b60405161071b9190614c99565b60405180910390f35b61073e60048036038101906107399190613e62565b611a92565b005b34801561074c57600080fd5b50610755611c7b565b60405161076291906150f1565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190613c24565b611c81565b60405161079f9190614c77565b60405180910390f35b3480156107b457600080fd5b506107bd611dfd565b6040516107ca9190614c10565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613e62565b611e26565b60405161080791906150d6565b60405180910390f35b34801561081c57600080fd5b50610825611e3e565b6040516108329190614cb4565b60405180910390f35b34801561084757600080fd5b50610850611ed0565b60405161085d91906150f1565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613d53565b611ed6565b005b34801561089b57600080fd5b506108a4612057565b6040516108b191906150f1565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190613e62565b61205d565b005b3480156108ef57600080fd5b5061090a60048036038101906109059190613cd8565b6120e3565b005b34801561091857600080fd5b50610933600480360381019061092e9190613e62565b61213f565b6040516109409190614cb4565b60405180910390f35b34801561095557600080fd5b5061095e6121e6565b60405161096b91906150f1565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613c24565b6121ec565b6040516109a891906150f1565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190613c4d565b6121fe565b6040516109e59190614c99565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a109190613c24565b612292565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190613e62565b61238a565b005b610a48612410565b73ffffffffffffffffffffffffffffffffffffffff16610a66611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390614eb6565b60405180910390fd5b80600d8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c095750610c0882612418565b5b9050919050565b606060028054610c1f90615493565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4b90615493565b8015610c985780601f10610c6d57610100808354040283529160200191610c98565b820191906000526020600020905b815481529060010190602001808311610c7b57829003601f168201915b5050505050905090565b600a60009054906101000a900460ff16610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890614df6565b60405180910390fd5b600b5481610cfd610f94565b610d07919061523a565b1115610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90614f36565b60405180910390fd5b600081118015610d5a57506010548111155b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614d16565b60405180910390fd5b80600c54610da791906152c1565b341015610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090614f56565b60405180910390fd5b610df33382612482565b50565b6000610e01826124a0565b610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790615096565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e86826118e5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90614f76565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f16612410565b73ffffffffffffffffffffffffffffffffffffffff161480610f455750610f4481610f3f612410565b6121fe565b5b610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90614e36565b60405180910390fd5b610f8f8383836124ae565b505050565b6000600154905090565b610fa6612410565b73ffffffffffffffffffffffffffffffffffffffff16610fc4611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190614eb6565b60405180910390fd5b80600f8190555050565b61102f838383612560565b505050565b61103c612410565b73ffffffffffffffffffffffffffffffffffffffff1661105a611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790614eb6565b60405180910390fd5b600b54816110bc610f94565b6110c6919061523a565b1115611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90614f36565b60405180910390fd5b6111118282612482565b5050565b61111d612410565b73ffffffffffffffffffffffffffffffffffffffff1661113b611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890614eb6565b60405180910390fd5b600260095414156111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90615056565b60405180910390fd5b60026009819055506111e881612b19565b600160098190555050565b60006111fe836118fb565b821061123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690614cd6565b60405180910390fd5b6000611249610f94565b905060008060005b838110156113af576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461134357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561139b578684141561138c5781955050505050506113eb565b8380611397906154c5565b9450505b5080806113a7906154c5565b915050611251565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290615016565b60405180910390fd5b92915050565b6113f9612410565b73ffffffffffffffffffffffffffffffffffffffff16611417611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614eb6565b60405180910390fd5b80600c8190555050565b61147f612410565b73ffffffffffffffffffffffffffffffffffffffff1661149d611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90614eb6565b60405180910390fd5b60026009541415611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090615056565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161156790614bfb565b60006040518083038185875af1925050503d80600081146115a4576040519150601f19603f3d011682016040523d82523d6000602084013e6115a9565b606091505b50509050806115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614f96565b60405180910390fd5b506001600981905550565b611613838383604051806020016040528060008152506120e3565b505050565b611620612410565b73ffffffffffffffffffffffffffffffffffffffff1661163e611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b90614eb6565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b60006116ca610f94565b821061170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614d96565b60405180910390fd5b819050919050565b61171b612410565b73ffffffffffffffffffffffffffffffffffffffff16611739611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690614eb6565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600c5481565b6117c9612410565b73ffffffffffffffffffffffffffffffffffffffff166117e7611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614eb6565b60405180910390fd5b81816012919061184e929190613a2c565b505050565b600b5481565b611861612410565b73ffffffffffffffffffffffffffffffffffffffff1661187f611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90614eb6565b60405180910390fd5b8060108190555050565b600d5481565b60006118f082612da7565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390614e76565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6119ec612410565b73ffffffffffffffffffffffffffffffffffffffff16611a0a611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790614eb6565b60405180910390fd5b611a6a6000612faa565b565b600a60019054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b600a60019054906101000a900460ff16611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890614df6565b60405180910390fd5b600081118015611af35750600f548111155b611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990614d76565b60405180910390fd5b600e5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b80919061523a565b1115611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890614e16565b60405180910390fd5b600d5481611bcd610f94565b611bd7919061523a565b1115611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90614cf6565b60405180910390fd5b611c223382612482565b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c71919061523a565b9250508190555050565b60105481565b60606000611c8e836118fb565b90506000811415611d1157600067ffffffffffffffff811115611cda577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d085781602001602082028036833780820191505090505b50915050611df8565b60008167ffffffffffffffff811115611d53577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d815781602001602082028036833780820191505090505b50905060005b82811015611df157611d9985826111f3565b828281518110611dd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611de9906154c5565b915050611d87565b8193505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e2e613ab2565b611e3782612da7565b9050919050565b606060038054611e4d90615493565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7990615493565b8015611ec65780601f10611e9b57610100808354040283529160200191611ec6565b820191906000526020600020905b815481529060010190602001808311611ea957829003601f168201915b5050505050905090565b600e5481565b611ede612410565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614ef6565b60405180910390fd5b8060076000611f59612410565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612006612410565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161204b9190614c99565b60405180910390a35050565b600f5481565b612065612410565b73ffffffffffffffffffffffffffffffffffffffff16612083611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d090614eb6565b60405180910390fd5b80600e8190555050565b6120ee848484612560565b6120fa8484848461306e565b612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614fb6565b60405180910390fd5b50505050565b606061214a826124a0565b612189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218090614ed6565b60405180910390fd5b6000612193613205565b905060008151116121b357604051806020016040528060008152506121de565b806121bd84613297565b6040516020016121ce929190614bd7565b6040516020818303038152906040525b915050919050565b60085481565b60006121f782613444565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61229a612410565b73ffffffffffffffffffffffffffffffffffffffff166122b8611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461230e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230590614eb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237590614d36565b60405180910390fd5b61238781612faa565b50565b612392612410565b73ffffffffffffffffffffffffffffffffffffffff166123b0611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90614eb6565b60405180910390fd5b80600b8190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61249c82826040518060200160405280600081525061352d565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061256b82612da7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612592612410565b73ffffffffffffffffffffffffffffffffffffffff1614806125ee57506125b7612410565b73ffffffffffffffffffffffffffffffffffffffff166125d684610df6565b73ffffffffffffffffffffffffffffffffffffffff16145b8061260a57506126098260000151612604612410565b6121fe565b5b90508061264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264390614f16565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614e96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561272e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272590614db6565b60405180910390fd5b61273b8585856001613a0d565b61274b60008484600001516124ae565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127b9919061531b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661285d91906151f4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612963919061523a565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612aa9576129d9816124a0565b15612aa8576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b118686866001613a13565b505050505050565b6000600854905060008211612b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5a90614e56565b60405180910390fd5b600060018383612b73919061523a565b612b7d919061534f565b905060017f0000000000000000000000000000000000000000000000000000000000000000612bac919061534f565b811115612be35760017f0000000000000000000000000000000000000000000000000000000000000000612be0919061534f565b90505b612bec816124a0565b612c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2290615036565b60405180910390fd5b60008290505b818111612d8e57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d7b576000612cae82612da7565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612d86906154c5565b915050612c31565b50600181612d9c919061523a565b600881905550505050565b612daf613ab2565b612db8826124a0565b612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dee90614d56565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612e5b5760017f000000000000000000000000000000000000000000000000000000000000000084612e4e919061534f565b612e58919061523a565b90505b60008390505b818110612f69576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f5557809350505050612fa5565b508080612f6190615469565b915050612e61565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c90615076565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061308f8473ffffffffffffffffffffffffffffffffffffffff16613a19565b156131f8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130b8612410565b8786866040518563ffffffff1660e01b81526004016130da9493929190614c2b565b602060405180830381600087803b1580156130f457600080fd5b505af192505050801561312557506040513d601f19601f820116820180604052508101906131229190613df4565b60015b6131a8573d8060008114613155576040519150601f19603f3d011682016040523d82523d6000602084013e61315a565b606091505b506000815114156131a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319790614fb6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131fd565b600190505b949350505050565b60606012805461321490615493565b80601f016020809104026020016040519081016040528092919081815260200182805461324090615493565b801561328d5780601f106132625761010080835404028352916020019161328d565b820191906000526020600020905b81548152906001019060200180831161327057829003601f168201915b5050505050905090565b606060008214156132df576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061343f565b600082905060005b600082146133115780806132fa906154c5565b915050600a8261330a9190615290565b91506132e7565b60008167ffffffffffffffff811115613353577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133855781602001600182028036833780820191505090505b5090505b600085146134385760018261339e919061534f565b9150600a856133ad919061550e565b60306133b9919061523a565b60f81b8183815181106133f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134319190615290565b9450613389565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ac90614dd6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156135a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359b90614ff6565b60405180910390fd5b6135ad816124a0565b156135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e490614fd6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613650576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613647906150b6565b60405180910390fd5b61365d6000858386613a0d565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161375a91906151f4565b6fffffffffffffffffffffffffffffffff16815260200185836020015161378191906151f4565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156139f057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613990600088848861306e565b6139cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c690614fb6565b60405180910390fd5b81806139da906154c5565b92505080806139e8906154c5565b91505061391f565b5080600181905550613a056000878588613a13565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b828054613a3890615493565b90600052602060002090601f016020900481019282613a5a5760008555613aa1565b82601f10613a7357803560ff1916838001178555613aa1565b82800160010185558215613aa1579182015b82811115613aa0578235825591602001919060010190613a85565b5b509050613aae9190613aec565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613b05576000816000905550600101613aed565b5090565b6000613b1c613b178461513d565b61510c565b905082815260208101848484011115613b3457600080fd5b613b3f848285615427565b509392505050565b600081359050613b568161560c565b92915050565b600081359050613b6b81615623565b92915050565b600081359050613b808161563a565b92915050565b600081519050613b958161563a565b92915050565b600082601f830112613bac57600080fd5b8135613bbc848260208601613b09565b91505092915050565b60008083601f840112613bd757600080fd5b8235905067ffffffffffffffff811115613bf057600080fd5b602083019150836001820283011115613c0857600080fd5b9250929050565b600081359050613c1e81615651565b92915050565b600060208284031215613c3657600080fd5b6000613c4484828501613b47565b91505092915050565b60008060408385031215613c6057600080fd5b6000613c6e85828601613b47565b9250506020613c7f85828601613b47565b9150509250929050565b600080600060608486031215613c9e57600080fd5b6000613cac86828701613b47565b9350506020613cbd86828701613b47565b9250506040613cce86828701613c0f565b9150509250925092565b60008060008060808587031215613cee57600080fd5b6000613cfc87828801613b47565b9450506020613d0d87828801613b47565b9350506040613d1e87828801613c0f565b925050606085013567ffffffffffffffff811115613d3b57600080fd5b613d4787828801613b9b565b91505092959194509250565b60008060408385031215613d6657600080fd5b6000613d7485828601613b47565b9250506020613d8585828601613b5c565b9150509250929050565b60008060408385031215613da257600080fd5b6000613db085828601613b47565b9250506020613dc185828601613c0f565b9150509250929050565b600060208284031215613ddd57600080fd5b6000613deb84828501613b71565b91505092915050565b600060208284031215613e0657600080fd5b6000613e1484828501613b86565b91505092915050565b60008060208385031215613e3057600080fd5b600083013567ffffffffffffffff811115613e4a57600080fd5b613e5685828601613bc5565b92509250509250929050565b600060208284031215613e7457600080fd5b6000613e8284828501613c0f565b91505092915050565b6000613e978383614baa565b60208301905092915050565b613eac81615383565b82525050565b613ebb81615383565b82525050565b6000613ecc8261517d565b613ed681856151ab565b9350613ee18361516d565b8060005b83811015613f12578151613ef98882613e8b565b9750613f048361519e565b925050600181019050613ee5565b5085935050505092915050565b613f2881615395565b82525050565b6000613f3982615188565b613f4381856151bc565b9350613f53818560208601615436565b613f5c816155fb565b840191505092915050565b6000613f7282615193565b613f7c81856151d8565b9350613f8c818560208601615436565b613f95816155fb565b840191505092915050565b6000613fab82615193565b613fb581856151e9565b9350613fc5818560208601615436565b80840191505092915050565b6000613fde6022836151d8565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140446030836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d6178436c61696d5460008301527f6f6b656e546f74616c466f7246726565000000000000000000000000000000006020830152604082019050919050565b60006140aa6023836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d61784d696e74506560008301527f72547800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141106026836151d8565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614176602a836151d8565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b60006141dc6028836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d617846726565436c60008301527f61696d50657254780000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142426023836151d8565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142a86025836151d8565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061430e6031836151d8565b91507f455243373231413a206e756d626572206d696e74656420717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b60006143746013836151d8565b91507f53616c65206973206e6f742073746172746564000000000000000000000000006000830152602082019050919050565b60006143b46039836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d6178436c61696d5460008301527f6f6b656e546f74616c466f724672656550657277616c6c6574000000000000006020830152604082019050919050565b600061441a6039836151d8565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006144806018836151d8565b91507f7175616e74697479206d757374206265206e6f6e7a65726f00000000000000006000830152602082019050919050565b60006144c0602b836151d8565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006145266026836151d8565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061458c6020836151d8565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006145cc602f836151d8565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614632601a836151d8565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006146726032836151d8565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006146d8602a836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e20546f74616c436f6c6c60008301527f656374696f6e53697a65000000000000000000000000000000000000000000006020830152604082019050919050565b600061473e6014836151d8565b91507f4e6f74207061696420656e6f756768204554482e0000000000000000000000006000830152602082019050919050565b600061477e6022836151d8565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147e46000836151cd565b9150600082019050919050565b60006147fe6010836151d8565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b600061483e6033836151d8565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006148a4601d836151d8565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b60006148e46021836151d8565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061494a602e836151d8565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006149b06026836151d8565b91507f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008301527f6c65616e757000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a16601f836151d8565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614a56602f836151d8565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614abc602d836151d8565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614b226022836151d8565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b604082016000820151614b916000850182613ea3565b506020820151614ba46020850182614bc8565b50505050565b614bb381615409565b82525050565b614bc281615409565b82525050565b614bd181615413565b82525050565b6000614be38285613fa0565b9150614bef8284613fa0565b91508190509392505050565b6000614c06826147d7565b9150819050919050565b6000602082019050614c256000830184613eb2565b92915050565b6000608082019050614c406000830187613eb2565b614c4d6020830186613eb2565b614c5a6040830185614bb9565b8181036060830152614c6c8184613f2e565b905095945050505050565b60006020820190508181036000830152614c918184613ec1565b905092915050565b6000602082019050614cae6000830184613f1f565b92915050565b60006020820190508181036000830152614cce8184613f67565b905092915050565b60006020820190508181036000830152614cef81613fd1565b9050919050565b60006020820190508181036000830152614d0f81614037565b9050919050565b60006020820190508181036000830152614d2f8161409d565b9050919050565b60006020820190508181036000830152614d4f81614103565b9050919050565b60006020820190508181036000830152614d6f81614169565b9050919050565b60006020820190508181036000830152614d8f816141cf565b9050919050565b60006020820190508181036000830152614daf81614235565b9050919050565b60006020820190508181036000830152614dcf8161429b565b9050919050565b60006020820190508181036000830152614def81614301565b9050919050565b60006020820190508181036000830152614e0f81614367565b9050919050565b60006020820190508181036000830152614e2f816143a7565b9050919050565b60006020820190508181036000830152614e4f8161440d565b9050919050565b60006020820190508181036000830152614e6f81614473565b9050919050565b60006020820190508181036000830152614e8f816144b3565b9050919050565b60006020820190508181036000830152614eaf81614519565b9050919050565b60006020820190508181036000830152614ecf8161457f565b9050919050565b60006020820190508181036000830152614eef816145bf565b9050919050565b60006020820190508181036000830152614f0f81614625565b9050919050565b60006020820190508181036000830152614f2f81614665565b9050919050565b60006020820190508181036000830152614f4f816146cb565b9050919050565b60006020820190508181036000830152614f6f81614731565b9050919050565b60006020820190508181036000830152614f8f81614771565b9050919050565b60006020820190508181036000830152614faf816147f1565b9050919050565b60006020820190508181036000830152614fcf81614831565b9050919050565b60006020820190508181036000830152614fef81614897565b9050919050565b6000602082019050818103600083015261500f816148d7565b9050919050565b6000602082019050818103600083015261502f8161493d565b9050919050565b6000602082019050818103600083015261504f816149a3565b9050919050565b6000602082019050818103600083015261506f81614a09565b9050919050565b6000602082019050818103600083015261508f81614a49565b9050919050565b600060208201905081810360008301526150af81614aaf565b9050919050565b600060208201905081810360008301526150cf81614b15565b9050919050565b60006040820190506150eb6000830184614b7b565b92915050565b60006020820190506151066000830184614bb9565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615133576151326155cc565b5b8060405250919050565b600067ffffffffffffffff821115615158576151576155cc565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006151ff826153cd565b915061520a836153cd565b9250826fffffffffffffffffffffffffffffffff0382111561522f5761522e61553f565b5b828201905092915050565b600061524582615409565b915061525083615409565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152855761528461553f565b5b828201905092915050565b600061529b82615409565b91506152a683615409565b9250826152b6576152b561556e565b5b828204905092915050565b60006152cc82615409565b91506152d783615409565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153105761530f61553f565b5b828202905092915050565b6000615326826153cd565b9150615331836153cd565b9250828210156153445761534361553f565b5b828203905092915050565b600061535a82615409565b915061536583615409565b9250828210156153785761537761553f565b5b828203905092915050565b600061538e826153e9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015615454578082015181840152602081019050615439565b83811115615463576000848401525b50505050565b600061547482615409565b915060008214156154885761548761553f565b5b600182039050919050565b600060028204905060018216806154ab57607f821691505b602082108114156154bf576154be61559d565b5b50919050565b60006154d082615409565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155035761550261553f565b5b600182019050919050565b600061551982615409565b915061552483615409565b9250826155345761553361556e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61561581615383565b811461562057600080fd5b50565b61562c81615395565b811461563757600080fd5b50565b615643816153a1565b811461564e57600080fd5b50565b61565a81615409565b811461566557600080fd5b5056fea2646970667358221220c9c76ccd0e792612da37f0e2d125fd24216cc3c04eaaee2135c2b0a3d5903f5464736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000001388

Deployed Bytecode

0x6080604052600436106102725760003560e01c806361f1f87d1161014f57806395d89b41116100c1578063c87b56dd1161007a578063c87b56dd1461090c578063d7224ba014610949578063dc33e68114610974578063e985e9c5146109b1578063f2fde38b146109ee578063fb41438b14610a1757610272565b806395d89b41146108105780639a47415e1461083b578063a22cb46514610866578063afb2b1a91461088f578063b6414eb8146108ba578063b88d4fde146108e357610272565b80637b0a6691116101135780637b0a6691146106f95780637bb2b3c114610724578063823903a9146107405780638462151c1461076b5780638da5cb5b146107a85780639231ab2a146107d357610272565b806361f1f87d146106125780636352211e1461063d57806370a082311461067a578063715018a6146106b75780637293773c146106ce57610272565b80632f745c59116101e85780634f6ccce7116101ac5780634f6ccce71461051657806354870bc614610553578063556621cc1461056a57806355f804b3146105955780635b7a0d88146105be578063616cdb1e146105e957610272565b80632f745c591461045957806336748001146104965780633ccfd60b146104bf57806342842e0e146104d65780634f1aa58f146104ff57610272565b8063095ea7b31161023a578063095ea7b31461036157806318160ddd1461038a5780631e8ab346146103b557806323b872dd146103de5780632ccee9be146104075780632d20fb601461043057610272565b8063011239571461027757806301ffc9a7146102a057806306fdde03146102dd5780630788370314610308578063081812fc14610324575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613e62565b610a40565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190613dcb565b610ac6565b6040516102d49190614c99565b60405180910390f35b3480156102e957600080fd5b506102f2610c10565b6040516102ff9190614cb4565b60405180910390f35b610322600480360381019061031d9190613e62565b610ca2565b005b34801561033057600080fd5b5061034b60048036038101906103469190613e62565b610df6565b6040516103589190614c10565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190613d8f565b610e7b565b005b34801561039657600080fd5b5061039f610f94565b6040516103ac91906150f1565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190613e62565b610f9e565b005b3480156103ea57600080fd5b5061040560048036038101906104009190613c89565b611024565b005b34801561041357600080fd5b5061042e60048036038101906104299190613d8f565b611034565b005b34801561043c57600080fd5b5061045760048036038101906104529190613e62565b611115565b005b34801561046557600080fd5b50610480600480360381019061047b9190613d8f565b6111f3565b60405161048d91906150f1565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613e62565b6113f1565b005b3480156104cb57600080fd5b506104d4611477565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613c89565b6115f8565b005b34801561050b57600080fd5b50610514611618565b005b34801561052257600080fd5b5061053d60048036038101906105389190613e62565b6116c0565b60405161054a91906150f1565b60405180910390f35b34801561055f57600080fd5b50610568611713565b005b34801561057657600080fd5b5061057f6117bb565b60405161058c91906150f1565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613e1d565b6117c1565b005b3480156105ca57600080fd5b506105d3611853565b6040516105e091906150f1565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613e62565b611859565b005b34801561061e57600080fd5b506106276118df565b60405161063491906150f1565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190613e62565b6118e5565b6040516106719190614c10565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190613c24565b6118fb565b6040516106ae91906150f1565b60405180910390f35b3480156106c357600080fd5b506106cc6119e4565b005b3480156106da57600080fd5b506106e3611a6c565b6040516106f09190614c99565b60405180910390f35b34801561070557600080fd5b5061070e611a7f565b60405161071b9190614c99565b60405180910390f35b61073e60048036038101906107399190613e62565b611a92565b005b34801561074c57600080fd5b50610755611c7b565b60405161076291906150f1565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190613c24565b611c81565b60405161079f9190614c77565b60405180910390f35b3480156107b457600080fd5b506107bd611dfd565b6040516107ca9190614c10565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613e62565b611e26565b60405161080791906150d6565b60405180910390f35b34801561081c57600080fd5b50610825611e3e565b6040516108329190614cb4565b60405180910390f35b34801561084757600080fd5b50610850611ed0565b60405161085d91906150f1565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613d53565b611ed6565b005b34801561089b57600080fd5b506108a4612057565b6040516108b191906150f1565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190613e62565b61205d565b005b3480156108ef57600080fd5b5061090a60048036038101906109059190613cd8565b6120e3565b005b34801561091857600080fd5b50610933600480360381019061092e9190613e62565b61213f565b6040516109409190614cb4565b60405180910390f35b34801561095557600080fd5b5061095e6121e6565b60405161096b91906150f1565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613c24565b6121ec565b6040516109a891906150f1565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190613c4d565b6121fe565b6040516109e59190614c99565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a109190613c24565b612292565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190613e62565b61238a565b005b610a48612410565b73ffffffffffffffffffffffffffffffffffffffff16610a66611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390614eb6565b60405180910390fd5b80600d8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c095750610c0882612418565b5b9050919050565b606060028054610c1f90615493565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4b90615493565b8015610c985780601f10610c6d57610100808354040283529160200191610c98565b820191906000526020600020905b815481529060010190602001808311610c7b57829003601f168201915b5050505050905090565b600a60009054906101000a900460ff16610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890614df6565b60405180910390fd5b600b5481610cfd610f94565b610d07919061523a565b1115610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90614f36565b60405180910390fd5b600081118015610d5a57506010548111155b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614d16565b60405180910390fd5b80600c54610da791906152c1565b341015610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090614f56565b60405180910390fd5b610df33382612482565b50565b6000610e01826124a0565b610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790615096565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e86826118e5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90614f76565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f16612410565b73ffffffffffffffffffffffffffffffffffffffff161480610f455750610f4481610f3f612410565b6121fe565b5b610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90614e36565b60405180910390fd5b610f8f8383836124ae565b505050565b6000600154905090565b610fa6612410565b73ffffffffffffffffffffffffffffffffffffffff16610fc4611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190614eb6565b60405180910390fd5b80600f8190555050565b61102f838383612560565b505050565b61103c612410565b73ffffffffffffffffffffffffffffffffffffffff1661105a611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790614eb6565b60405180910390fd5b600b54816110bc610f94565b6110c6919061523a565b1115611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90614f36565b60405180910390fd5b6111118282612482565b5050565b61111d612410565b73ffffffffffffffffffffffffffffffffffffffff1661113b611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890614eb6565b60405180910390fd5b600260095414156111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90615056565b60405180910390fd5b60026009819055506111e881612b19565b600160098190555050565b60006111fe836118fb565b821061123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690614cd6565b60405180910390fd5b6000611249610f94565b905060008060005b838110156113af576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461134357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561139b578684141561138c5781955050505050506113eb565b8380611397906154c5565b9450505b5080806113a7906154c5565b915050611251565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290615016565b60405180910390fd5b92915050565b6113f9612410565b73ffffffffffffffffffffffffffffffffffffffff16611417611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614eb6565b60405180910390fd5b80600c8190555050565b61147f612410565b73ffffffffffffffffffffffffffffffffffffffff1661149d611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90614eb6565b60405180910390fd5b60026009541415611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090615056565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161156790614bfb565b60006040518083038185875af1925050503d80600081146115a4576040519150601f19603f3d011682016040523d82523d6000602084013e6115a9565b606091505b50509050806115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614f96565b60405180910390fd5b506001600981905550565b611613838383604051806020016040528060008152506120e3565b505050565b611620612410565b73ffffffffffffffffffffffffffffffffffffffff1661163e611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b90614eb6565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b60006116ca610f94565b821061170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614d96565b60405180910390fd5b819050919050565b61171b612410565b73ffffffffffffffffffffffffffffffffffffffff16611739611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690614eb6565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600c5481565b6117c9612410565b73ffffffffffffffffffffffffffffffffffffffff166117e7611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614eb6565b60405180910390fd5b81816012919061184e929190613a2c565b505050565b600b5481565b611861612410565b73ffffffffffffffffffffffffffffffffffffffff1661187f611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90614eb6565b60405180910390fd5b8060108190555050565b600d5481565b60006118f082612da7565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390614e76565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6119ec612410565b73ffffffffffffffffffffffffffffffffffffffff16611a0a611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790614eb6565b60405180910390fd5b611a6a6000612faa565b565b600a60019054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b600a60019054906101000a900460ff16611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890614df6565b60405180910390fd5b600081118015611af35750600f548111155b611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990614d76565b60405180910390fd5b600e5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b80919061523a565b1115611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890614e16565b60405180910390fd5b600d5481611bcd610f94565b611bd7919061523a565b1115611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90614cf6565b60405180910390fd5b611c223382612482565b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c71919061523a565b9250508190555050565b60105481565b60606000611c8e836118fb565b90506000811415611d1157600067ffffffffffffffff811115611cda577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d085781602001602082028036833780820191505090505b50915050611df8565b60008167ffffffffffffffff811115611d53577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d815781602001602082028036833780820191505090505b50905060005b82811015611df157611d9985826111f3565b828281518110611dd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611de9906154c5565b915050611d87565b8193505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e2e613ab2565b611e3782612da7565b9050919050565b606060038054611e4d90615493565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7990615493565b8015611ec65780601f10611e9b57610100808354040283529160200191611ec6565b820191906000526020600020905b815481529060010190602001808311611ea957829003601f168201915b5050505050905090565b600e5481565b611ede612410565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614ef6565b60405180910390fd5b8060076000611f59612410565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612006612410565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161204b9190614c99565b60405180910390a35050565b600f5481565b612065612410565b73ffffffffffffffffffffffffffffffffffffffff16612083611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d090614eb6565b60405180910390fd5b80600e8190555050565b6120ee848484612560565b6120fa8484848461306e565b612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614fb6565b60405180910390fd5b50505050565b606061214a826124a0565b612189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218090614ed6565b60405180910390fd5b6000612193613205565b905060008151116121b357604051806020016040528060008152506121de565b806121bd84613297565b6040516020016121ce929190614bd7565b6040516020818303038152906040525b915050919050565b60085481565b60006121f782613444565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61229a612410565b73ffffffffffffffffffffffffffffffffffffffff166122b8611dfd565b73ffffffffffffffffffffffffffffffffffffffff161461230e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230590614eb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237590614d36565b60405180910390fd5b61238781612faa565b50565b612392612410565b73ffffffffffffffffffffffffffffffffffffffff166123b0611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90614eb6565b60405180910390fd5b80600b8190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61249c82826040518060200160405280600081525061352d565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061256b82612da7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612592612410565b73ffffffffffffffffffffffffffffffffffffffff1614806125ee57506125b7612410565b73ffffffffffffffffffffffffffffffffffffffff166125d684610df6565b73ffffffffffffffffffffffffffffffffffffffff16145b8061260a57506126098260000151612604612410565b6121fe565b5b90508061264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264390614f16565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614e96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561272e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272590614db6565b60405180910390fd5b61273b8585856001613a0d565b61274b60008484600001516124ae565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127b9919061531b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661285d91906151f4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612963919061523a565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612aa9576129d9816124a0565b15612aa8576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b118686866001613a13565b505050505050565b6000600854905060008211612b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5a90614e56565b60405180910390fd5b600060018383612b73919061523a565b612b7d919061534f565b905060017f0000000000000000000000000000000000000000000000000000000000001388612bac919061534f565b811115612be35760017f0000000000000000000000000000000000000000000000000000000000001388612be0919061534f565b90505b612bec816124a0565b612c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2290615036565b60405180910390fd5b60008290505b818111612d8e57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d7b576000612cae82612da7565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612d86906154c5565b915050612c31565b50600181612d9c919061523a565b600881905550505050565b612daf613ab2565b612db8826124a0565b612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dee90614d56565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612e5b5760017f000000000000000000000000000000000000000000000000000000000000001484612e4e919061534f565b612e58919061523a565b90505b60008390505b818110612f69576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f5557809350505050612fa5565b508080612f6190615469565b915050612e61565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c90615076565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061308f8473ffffffffffffffffffffffffffffffffffffffff16613a19565b156131f8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130b8612410565b8786866040518563ffffffff1660e01b81526004016130da9493929190614c2b565b602060405180830381600087803b1580156130f457600080fd5b505af192505050801561312557506040513d601f19601f820116820180604052508101906131229190613df4565b60015b6131a8573d8060008114613155576040519150601f19603f3d011682016040523d82523d6000602084013e61315a565b606091505b506000815114156131a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319790614fb6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131fd565b600190505b949350505050565b60606012805461321490615493565b80601f016020809104026020016040519081016040528092919081815260200182805461324090615493565b801561328d5780601f106132625761010080835404028352916020019161328d565b820191906000526020600020905b81548152906001019060200180831161327057829003601f168201915b5050505050905090565b606060008214156132df576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061343f565b600082905060005b600082146133115780806132fa906154c5565b915050600a8261330a9190615290565b91506132e7565b60008167ffffffffffffffff811115613353577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133855781602001600182028036833780820191505090505b5090505b600085146134385760018261339e919061534f565b9150600a856133ad919061550e565b60306133b9919061523a565b60f81b8183815181106133f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134319190615290565b9450613389565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ac90614dd6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156135a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359b90614ff6565b60405180910390fd5b6135ad816124a0565b156135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e490614fd6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000014831115613650576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613647906150b6565b60405180910390fd5b61365d6000858386613a0d565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161375a91906151f4565b6fffffffffffffffffffffffffffffffff16815260200185836020015161378191906151f4565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156139f057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613990600088848861306e565b6139cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c690614fb6565b60405180910390fd5b81806139da906154c5565b92505080806139e8906154c5565b91505061391f565b5080600181905550613a056000878588613a13565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b828054613a3890615493565b90600052602060002090601f016020900481019282613a5a5760008555613aa1565b82601f10613a7357803560ff1916838001178555613aa1565b82800160010185558215613aa1579182015b82811115613aa0578235825591602001919060010190613a85565b5b509050613aae9190613aec565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613b05576000816000905550600101613aed565b5090565b6000613b1c613b178461513d565b61510c565b905082815260208101848484011115613b3457600080fd5b613b3f848285615427565b509392505050565b600081359050613b568161560c565b92915050565b600081359050613b6b81615623565b92915050565b600081359050613b808161563a565b92915050565b600081519050613b958161563a565b92915050565b600082601f830112613bac57600080fd5b8135613bbc848260208601613b09565b91505092915050565b60008083601f840112613bd757600080fd5b8235905067ffffffffffffffff811115613bf057600080fd5b602083019150836001820283011115613c0857600080fd5b9250929050565b600081359050613c1e81615651565b92915050565b600060208284031215613c3657600080fd5b6000613c4484828501613b47565b91505092915050565b60008060408385031215613c6057600080fd5b6000613c6e85828601613b47565b9250506020613c7f85828601613b47565b9150509250929050565b600080600060608486031215613c9e57600080fd5b6000613cac86828701613b47565b9350506020613cbd86828701613b47565b9250506040613cce86828701613c0f565b9150509250925092565b60008060008060808587031215613cee57600080fd5b6000613cfc87828801613b47565b9450506020613d0d87828801613b47565b9350506040613d1e87828801613c0f565b925050606085013567ffffffffffffffff811115613d3b57600080fd5b613d4787828801613b9b565b91505092959194509250565b60008060408385031215613d6657600080fd5b6000613d7485828601613b47565b9250506020613d8585828601613b5c565b9150509250929050565b60008060408385031215613da257600080fd5b6000613db085828601613b47565b9250506020613dc185828601613c0f565b9150509250929050565b600060208284031215613ddd57600080fd5b6000613deb84828501613b71565b91505092915050565b600060208284031215613e0657600080fd5b6000613e1484828501613b86565b91505092915050565b60008060208385031215613e3057600080fd5b600083013567ffffffffffffffff811115613e4a57600080fd5b613e5685828601613bc5565b92509250509250929050565b600060208284031215613e7457600080fd5b6000613e8284828501613c0f565b91505092915050565b6000613e978383614baa565b60208301905092915050565b613eac81615383565b82525050565b613ebb81615383565b82525050565b6000613ecc8261517d565b613ed681856151ab565b9350613ee18361516d565b8060005b83811015613f12578151613ef98882613e8b565b9750613f048361519e565b925050600181019050613ee5565b5085935050505092915050565b613f2881615395565b82525050565b6000613f3982615188565b613f4381856151bc565b9350613f53818560208601615436565b613f5c816155fb565b840191505092915050565b6000613f7282615193565b613f7c81856151d8565b9350613f8c818560208601615436565b613f95816155fb565b840191505092915050565b6000613fab82615193565b613fb581856151e9565b9350613fc5818560208601615436565b80840191505092915050565b6000613fde6022836151d8565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140446030836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d6178436c61696d5460008301527f6f6b656e546f74616c466f7246726565000000000000000000000000000000006020830152604082019050919050565b60006140aa6023836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d61784d696e74506560008301527f72547800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141106026836151d8565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614176602a836151d8565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b60006141dc6028836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d617846726565436c60008301527f61696d50657254780000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142426023836151d8565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142a86025836151d8565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061430e6031836151d8565b91507f455243373231413a206e756d626572206d696e74656420717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b60006143746013836151d8565b91507f53616c65206973206e6f742073746172746564000000000000000000000000006000830152602082019050919050565b60006143b46039836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e204d6178436c61696d5460008301527f6f6b656e546f74616c466f724672656550657277616c6c6574000000000000006020830152604082019050919050565b600061441a6039836151d8565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006144806018836151d8565b91507f7175616e74697479206d757374206265206e6f6e7a65726f00000000000000006000830152602082019050919050565b60006144c0602b836151d8565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006145266026836151d8565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061458c6020836151d8565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006145cc602f836151d8565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614632601a836151d8565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006146726032836151d8565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006146d8602a836151d8565b91507f43616e206e6f74206d696e74206d6f7265207468616e20546f74616c436f6c6c60008301527f656374696f6e53697a65000000000000000000000000000000000000000000006020830152604082019050919050565b600061473e6014836151d8565b91507f4e6f74207061696420656e6f756768204554482e0000000000000000000000006000830152602082019050919050565b600061477e6022836151d8565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147e46000836151cd565b9150600082019050919050565b60006147fe6010836151d8565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b600061483e6033836151d8565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006148a4601d836151d8565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b60006148e46021836151d8565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061494a602e836151d8565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006149b06026836151d8565b91507f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008301527f6c65616e757000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a16601f836151d8565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614a56602f836151d8565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614abc602d836151d8565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614b226022836151d8565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b604082016000820151614b916000850182613ea3565b506020820151614ba46020850182614bc8565b50505050565b614bb381615409565b82525050565b614bc281615409565b82525050565b614bd181615413565b82525050565b6000614be38285613fa0565b9150614bef8284613fa0565b91508190509392505050565b6000614c06826147d7565b9150819050919050565b6000602082019050614c256000830184613eb2565b92915050565b6000608082019050614c406000830187613eb2565b614c4d6020830186613eb2565b614c5a6040830185614bb9565b8181036060830152614c6c8184613f2e565b905095945050505050565b60006020820190508181036000830152614c918184613ec1565b905092915050565b6000602082019050614cae6000830184613f1f565b92915050565b60006020820190508181036000830152614cce8184613f67565b905092915050565b60006020820190508181036000830152614cef81613fd1565b9050919050565b60006020820190508181036000830152614d0f81614037565b9050919050565b60006020820190508181036000830152614d2f8161409d565b9050919050565b60006020820190508181036000830152614d4f81614103565b9050919050565b60006020820190508181036000830152614d6f81614169565b9050919050565b60006020820190508181036000830152614d8f816141cf565b9050919050565b60006020820190508181036000830152614daf81614235565b9050919050565b60006020820190508181036000830152614dcf8161429b565b9050919050565b60006020820190508181036000830152614def81614301565b9050919050565b60006020820190508181036000830152614e0f81614367565b9050919050565b60006020820190508181036000830152614e2f816143a7565b9050919050565b60006020820190508181036000830152614e4f8161440d565b9050919050565b60006020820190508181036000830152614e6f81614473565b9050919050565b60006020820190508181036000830152614e8f816144b3565b9050919050565b60006020820190508181036000830152614eaf81614519565b9050919050565b60006020820190508181036000830152614ecf8161457f565b9050919050565b60006020820190508181036000830152614eef816145bf565b9050919050565b60006020820190508181036000830152614f0f81614625565b9050919050565b60006020820190508181036000830152614f2f81614665565b9050919050565b60006020820190508181036000830152614f4f816146cb565b9050919050565b60006020820190508181036000830152614f6f81614731565b9050919050565b60006020820190508181036000830152614f8f81614771565b9050919050565b60006020820190508181036000830152614faf816147f1565b9050919050565b60006020820190508181036000830152614fcf81614831565b9050919050565b60006020820190508181036000830152614fef81614897565b9050919050565b6000602082019050818103600083015261500f816148d7565b9050919050565b6000602082019050818103600083015261502f8161493d565b9050919050565b6000602082019050818103600083015261504f816149a3565b9050919050565b6000602082019050818103600083015261506f81614a09565b9050919050565b6000602082019050818103600083015261508f81614a49565b9050919050565b600060208201905081810360008301526150af81614aaf565b9050919050565b600060208201905081810360008301526150cf81614b15565b9050919050565b60006040820190506150eb6000830184614b7b565b92915050565b60006020820190506151066000830184614bb9565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615133576151326155cc565b5b8060405250919050565b600067ffffffffffffffff821115615158576151576155cc565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006151ff826153cd565b915061520a836153cd565b9250826fffffffffffffffffffffffffffffffff0382111561522f5761522e61553f565b5b828201905092915050565b600061524582615409565b915061525083615409565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152855761528461553f565b5b828201905092915050565b600061529b82615409565b91506152a683615409565b9250826152b6576152b561556e565b5b828204905092915050565b60006152cc82615409565b91506152d783615409565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153105761530f61553f565b5b828202905092915050565b6000615326826153cd565b9150615331836153cd565b9250828210156153445761534361553f565b5b828203905092915050565b600061535a82615409565b915061536583615409565b9250828210156153785761537761553f565b5b828203905092915050565b600061538e826153e9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015615454578082015181840152602081019050615439565b83811115615463576000848401525b50505050565b600061547482615409565b915060008214156154885761548761553f565b5b600182039050919050565b600060028204905060018216806154ab57607f821691505b602082108114156154bf576154be61559d565b5b50919050565b60006154d082615409565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155035761550261553f565b5b600182019050919050565b600061551982615409565b915061552483615409565b9250826155345761553361556e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61561581615383565b811461562057600080fd5b50565b61562c81615395565b811461563757600080fd5b50565b615643816153a1565b811461564e57600080fd5b50565b61565a81615409565b811461566557600080fd5b5056fea2646970667358221220c9c76ccd0e792612da37f0e2d125fd24216cc3c04eaaee2135c2b0a3d5903f5464736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000001388

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 20
Arg [1] : TotalToken_ (uint256): 5000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001388


Deployed Bytecode Sourcemap

40857:4492:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43716:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21930:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42583:437;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24953:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20495:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43029:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25803:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41750:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44063:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21122:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43401:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45167:176;;;;;;;;;;;;;:::i;:::-;;26016:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43969:88;;;;;;;;;;;;;:::i;:::-;;20658:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43880:83;;;;;;;;;;;;;:::i;:::-;;41039:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44335:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40999:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43166:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41071:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23479:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22356:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38235:94;;;;;;;;;;;;;:::i;:::-;;40963:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40930:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41985:592;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41216:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44704:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37584:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44551:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41118:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25221:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41176:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43508:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26236:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23972:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30659:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44187:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25558:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38484:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43280:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43716:157;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43841:26:::1;43813:25;:54;;;;43716:157:::0;:::o;21930:370::-;22057:4;22102:25;22087:40;;;:11;:40;;;;:99;;;;22153:33;22138:48;;;:11;:48;;;;22087:99;:160;;;;22212:35;22197:50;;;:11;:50;;;;22087:160;:207;;;;22258:36;22282:11;22258:23;:36::i;:::-;22087:207;22073:221;;21930:370;;;:::o;23656:94::-;23710:13;23739:5;23732:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23656:94;:::o;42583:437::-;42649:12;;;;;;;;;;;42641:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;42730:19;;42716:10;42700:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:49;;42692:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;42828:1;42815:10;:14;:44;;;;;42847:12;;42833:10;:26;;42815:44;42807:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;42937:10;42927:9;;:20;;;;:::i;:::-;42914:9;:33;;42906:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42981:33;42991:10;43003;42981:9;:33::i;:::-;42583:437;:::o;24953:204::-;25021:7;25045:16;25053:7;25045;:16::i;:::-;25037:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25127:15;:24;25143:7;25127:24;;;;;;;;;;;;;;;;;;;;;25120:31;;24953:204;;;:::o;24516:379::-;24585:13;24601:24;24617:7;24601:15;:24::i;:::-;24585:40;;24646:5;24640:11;;:2;:11;;;;24632:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24731:5;24715:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24740:37;24757:5;24764:12;:10;:12::i;:::-;24740:16;:37::i;:::-;24715:62;24699:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;24861:28;24870:2;24874:7;24883:5;24861:8;:28::i;:::-;24516:379;;;:::o;20495:94::-;20548:7;20571:12;;20564:19;;20495:94;:::o;43029:128::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43133:18:::1;43113:17;:38;;;;43029:128:::0;:::o;25803:150::-;25919:28;25929:4;25935:2;25939:7;25919:9;:28::i;:::-;25803:150;;;:::o;41750:229::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41870:19:::1;;41856:10;41840:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:49;;41832:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;41945:26;41955:3;41960:10;41945:9;:26::i;:::-;41750:229:::0;;:::o;44063:118::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1:::1;36292:7;;:19;;36284:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1;36425:7;:18;;;;44147:28:::2;44166:8;44147:18;:28::i;:::-;35652:1:::1;36604:7;:22;;;;44063:118:::0;:::o;21122:744::-;21231:7;21266:16;21276:5;21266:9;:16::i;:::-;21258:5;:24;21250:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21328:22;21353:13;:11;:13::i;:::-;21328:38;;21373:19;21403:25;21453:9;21448:350;21472:14;21468:1;:18;21448:350;;;21502:31;21536:11;:14;21548:1;21536:14;;;;;;;;;;;21502:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21589:1;21563:28;;:9;:14;;;:28;;;21559:89;;21624:9;:14;;;21604:34;;21559:89;21681:5;21660:26;;:17;:26;;;21656:135;;;21718:5;21703:11;:20;21699:59;;;21745:1;21738:8;;;;;;;;;21699:59;21768:13;;;;;:::i;:::-;;;;21656:135;21448:350;21488:3;;;;;:::i;:::-;;;;21448:350;;;;21804:56;;;;;;;;;;:::i;:::-;;;;;;;;21122:744;;;;;:::o;43401:93::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43478:10:::1;43466:9;:22;;;;43401:93:::0;:::o;45167:176::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1:::1;36292:7;;:19;;36284:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1;36425:7;:18;;;;45227:12:::2;45245:10;:15;;45268:21;45245:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45226:68;;;45309:7;45301:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36456:1;35652::::1;36604:7;:22;;;;45167:176::o:0;26016:157::-;26128:39;26145:4;26151:2;26155:7;26128:39;;;;;;;;;;;;:16;:39::i;:::-;26016:157;;;:::o;43969:88::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44038:13:::1;;;;;;;;;;;44037:14;44021:13;;:30;;;;;;;;;;;;;;;;;;43969:88::o:0;20658:177::-;20725:7;20757:13;:11;:13::i;:::-;20749:5;:21;20741:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20824:5;20817:12;;20658:177;;;:::o;43880:83::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43945:12:::1;;;;;;;;;;;43944:13;43929:12;;:28;;;;;;;;;;;;;;;;;;43880:83::o:0;41039:25::-;;;;:::o;44335:98::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44420:7:::1;;44406:11;:21;;;;;;;:::i;:::-;;44335:98:::0;;:::o;40999:35::-;;;;:::o;43166:105::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43252:13:::1;43237:12;:28;;;;43166:105:::0;:::o;41071:41::-;;;;:::o;23479:118::-;23543:7;23566:20;23578:7;23566:11;:20::i;:::-;:25;;;23559:32;;23479:118;;;:::o;22356:211::-;22420:7;22461:1;22444:19;;:5;:19;;;;22436:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22533:12;:19;22546:5;22533:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;22525:36;;22518:43;;22356:211;;;:::o;38235:94::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38300:21:::1;38318:1;38300:9;:21::i;:::-;38235:94::o:0;40963:29::-;;;;;;;;;;;;;:::o;40930:28::-;;;;;;;;;;;;;:::o;41985:592::-;42052:13;;;;;;;;;;;42044:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;42117:1;42104:10;:14;:49;;;;;42136:17;;42122:10;:31;;42104:49;42096:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;42258:34;;42244:10;42215:14;:26;42230:10;42215:26;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:77;;42207:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;42404:25;;42390:10;42374:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:55;;42366:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;42491:33;42501:10;42513;42491:9;:33::i;:::-;42561:10;42531:14;:26;42546:10;42531:26;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;41985:592;:::o;41216:28::-;;;;:::o;44704:456::-;44765:16;44791:18;44812:17;44822:6;44812:9;:17::i;:::-;44791:38;;44854:1;44840:10;:15;44836:319;;;44889:1;44875:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44868:23;;;;;44836:319;44916:23;44956:10;44942:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44916:51;;44978:13;45002:122;45026:10;45018:5;:18;45002:122;;;45078:34;45098:6;45106:5;45078:19;:34::i;:::-;45062:6;45069:5;45062:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;45038:7;;;;;:::i;:::-;;;;45002:122;;;45141:6;45134:13;;;;;44704:456;;;;:::o;37584:87::-;37630:7;37657:6;;;;;;;;;;;37650:13;;37584:87;:::o;44551:147::-;44632:21;;:::i;:::-;44672:20;44684:7;44672:11;:20::i;:::-;44665:27;;44551:147;;;:::o;23811:98::-;23867:13;23896:7;23889:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23811:98;:::o;41118:50::-;;;;:::o;25221:274::-;25324:12;:10;:12::i;:::-;25312:24;;:8;:24;;;;25304:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25421:8;25376:18;:32;25395:12;:10;:12::i;:::-;25376:32;;;;;;;;;;;;;;;:42;25409:8;25376:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25470:8;25441:48;;25456:12;:10;:12::i;:::-;25441:48;;;25480:8;25441:48;;;;;;:::i;:::-;;;;;;;;25221:274;;:::o;41176:33::-;;;;:::o;43508:193::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43660:35:::1;43623:34;:72;;;;43508:193:::0;:::o;26236:319::-;26381:28;26391:4;26397:2;26401:7;26381:9;:28::i;:::-;26432:48;26455:4;26461:2;26465:7;26474:5;26432:22;:48::i;:::-;26416:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;26236:319;;;;:::o;23972:394::-;24070:13;24111:16;24119:7;24111;:16::i;:::-;24095:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;24201:21;24225:10;:8;:10::i;:::-;24201:34;;24280:1;24262:7;24256:21;:25;:104;;;;;;;;;;;;;;;;;24317:7;24326:18;:7;:16;:18::i;:::-;24300:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24256:104;24242:118;;;23972:394;;;:::o;30659:43::-;;;;:::o;44187:107::-;44245:7;44268:20;44282:5;44268:13;:20::i;:::-;44261:27;;44187:107;;;:::o;25558:186::-;25680:4;25703:18;:25;25722:5;25703:25;;;;;;;;;;;;;;;:35;25729:8;25703:35;;;;;;;;;;;;;;;;;;;;;;;;;25696:42;;25558:186;;;;:::o;38484:192::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38593:1:::1;38573:22;;:8;:22;;;;38565:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38649:19;38659:8;38649:9;:19::i;:::-;38484:192:::0;:::o;43280:115::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43378:11:::1;43356:19;:33;;;;43280:115:::0;:::o;14481:98::-;14534:7;14561:10;14554:17;;14481:98;:::o;306:157::-;391:4;430:25;415:40;;;:11;:40;;;;408:47;;306:157;;;:::o;26905:98::-;26970:27;26980:2;26984:8;26970:27;;;;;;;;;;;;:9;:27::i;:::-;26905:98;;:::o;26794:105::-;26851:4;26881:12;;26871:7;:22;26864:29;;26794:105;;;:::o;30481:172::-;30605:2;30578:15;:24;30594:7;30578:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30639:7;30635:2;30619:28;;30628:5;30619:28;;;;;;;;;;;;30481:172;;;:::o;28846:1529::-;28943:35;28981:20;28993:7;28981:11;:20::i;:::-;28943:58;;29010:22;29052:13;:18;;;29036:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;29105:12;:10;:12::i;:::-;29081:36;;:20;29093:7;29081:11;:20::i;:::-;:36;;;29036:81;:142;;;;29128:50;29145:13;:18;;;29165:12;:10;:12::i;:::-;29128:16;:50::i;:::-;29036:142;29010:169;;29204:17;29188:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;29336:4;29314:26;;:13;:18;;;:26;;;29298:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;29425:1;29411:16;;:2;:16;;;;29403:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29478:43;29500:4;29506:2;29510:7;29519:1;29478:21;:43::i;:::-;29578:49;29595:1;29599:7;29608:13;:18;;;29578:8;:49::i;:::-;29666:1;29636:12;:18;29649:4;29636:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29702:1;29674:12;:16;29687:2;29674:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29733:43;;;;;;;;29748:2;29733:43;;;;;;29759:15;29733:43;;;;;29710:11;:20;29722:7;29710:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30004:19;30036:1;30026:7;:11;;;;:::i;:::-;30004:33;;30089:1;30048:43;;:11;:24;30060:11;30048:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;30044:236;;;30106:20;30114:11;30106:7;:20::i;:::-;30102:171;;;30166:97;;;;;;;;30193:13;:18;;;30166:97;;;;;;30224:13;:28;;;30166:97;;;;;30139:11;:24;30151:11;30139:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30102:171;30044:236;30312:7;30308:2;30293:27;;30302:4;30293:27;;;;;;;;;;;;30327:42;30348:4;30354:2;30358:7;30367:1;30327:20;:42::i;:::-;28846:1529;;;;;;:::o;30807:838::-;30869:25;30897:24;;30869:52;;30947:1;30936:8;:12;30928:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:16;31034:1;31023:8;31003:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;30984:51;;31070:1;31057:10;:14;;;;:::i;:::-;31046:8;:25;31042:73;;;31106:1;31093:10;:14;;;;:::i;:::-;31082:25;;31042:73;31230:17;31238:8;31230:7;:17::i;:::-;31222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31302:9;31314:17;31302:29;;31297:297;31338:8;31333:1;:13;31297:297;;31397:1;31366:33;;:11;:14;31378:1;31366:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;31362:225;;;31412:31;31446:14;31458:1;31446:11;:14::i;:::-;31412:48;;31488:89;;;;;;;;31515:9;:14;;;31488:89;;;;;;31542:9;:24;;;31488:89;;;;;31471:11;:14;31483:1;31471:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31362:225;;31348:3;;;;;:::i;:::-;;;;31297:297;;;;31638:1;31627:8;:12;;;;:::i;:::-;31600:24;:39;;;;30807:838;;;:::o;22819:606::-;22895:21;;:::i;:::-;22936:16;22944:7;22936;:16::i;:::-;22928:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23008:26;23056:12;23045:7;:23;23041:93;;23125:1;23110:12;23100:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;23079:47;;23041:93;23147:12;23162:7;23147:22;;23142:212;23179:18;23171:4;:26;23142:212;;23216:31;23250:11;:17;23262:4;23250:17;;;;;;;;;;;23216:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23306:1;23280:28;;:9;:14;;;:28;;;23276:71;;23328:9;23321:16;;;;;;;23276:71;23142:212;23199:6;;;;;:::i;:::-;;;;23142:212;;;;23362:57;;;;;;;;;;:::i;:::-;;;;;;;;22819:606;;;;:::o;38684:173::-;38740:16;38759:6;;;;;;;;;;;38740:25;;38785:8;38776:6;;:17;;;;;;;;;;;;;;;;;;38840:8;38809:40;;38830:8;38809:40;;;;;;;;;;;;38684:173;;:::o;32188:690::-;32325:4;32342:15;:2;:13;;;:15::i;:::-;32338:535;;;32397:2;32381:36;;;32418:12;:10;:12::i;:::-;32432:4;32438:7;32447:5;32381:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32368:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32629:1;32612:6;:13;:18;32608:215;;;32645:61;;;;;;;;;;:::i;:::-;;;;;;;;32608:215;32791:6;32785:13;32776:6;32772:2;32768:15;32761:38;32368:464;32513:45;;;32503:55;;;:6;:55;;;;32496:62;;;;;32338:535;32861:4;32854:11;;32188:690;;;;;;;:::o;44439:106::-;44499:13;44528:11;44521:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44439:106;:::o;14948:723::-;15004:13;15234:1;15225:5;:10;15221:53;;;15252:10;;;;;;;;;;;;;;;;;;;;;15221:53;15284:12;15299:5;15284:20;;15315:14;15340:78;15355:1;15347:4;:9;15340:78;;15373:8;;;;;:::i;:::-;;;;15404:2;15396:10;;;;;:::i;:::-;;;15340:78;;;15428:19;15460:6;15450:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15428:39;;15478:154;15494:1;15485:5;:10;15478:154;;15522:1;15512:11;;;;;:::i;:::-;;;15589:2;15581:5;:10;;;;:::i;:::-;15568:2;:24;;;;:::i;:::-;15555:39;;15538:6;15545;15538:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;15618:2;15609:11;;;;;:::i;:::-;;;15478:154;;;15656:6;15642:21;;;;;14948:723;;;;:::o;22573:240::-;22634:7;22683:1;22666:19;;:5;:19;;;;22650:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22774:12;:19;22787:5;22774:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;22766:41;;22759:48;;22573:240;;;:::o;27342:1272::-;27447:20;27470:12;;27447:35;;27511:1;27497:16;;:2;:16;;;;27489:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27688:21;27696:12;27688:7;:21::i;:::-;27687:22;27679:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27770:12;27758:8;:24;;27750:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27830:61;27860:1;27864:2;27868:12;27882:8;27830:21;:61::i;:::-;27900:30;27933:12;:16;27946:2;27933:16;;;;;;;;;;;;;;;27900:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27975:119;;;;;;;;28025:8;27995:11;:19;;;:39;;;;:::i;:::-;27975:119;;;;;;28078:8;28043:11;:24;;;:44;;;;:::i;:::-;27975:119;;;;;27956:12;:16;27969:2;27956:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28129:43;;;;;;;;28144:2;28129:43;;;;;;28155:15;28129:43;;;;;28101:11;:25;28113:12;28101:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28181:20;28204:12;28181:35;;28230:9;28225:281;28249:8;28245:1;:12;28225:281;;;28303:12;28299:2;28278:38;;28295:1;28278:38;;;;;;;;;;;;28343:59;28374:1;28378:2;28382:12;28396:5;28343:22;:59::i;:::-;28325:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;28484:14;;;;;:::i;:::-;;;;28259:3;;;;;:::i;:::-;;;;28225:281;;;;28529:12;28514;:27;;;;28548:60;28577:1;28581:2;28585:12;28599:8;28548:20;:60::i;:::-;27342:1272;;;;;;:::o;33340:141::-;;;;;:::o;33867:140::-;;;;;:::o;1178:387::-;1238:4;1446:12;1513:7;1501:20;1493:28;;1556:1;1549:4;:8;1542:15;;;1178:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1233:352::-;;;1351:3;1344:4;1336:6;1332:17;1328:27;1318:2;;1369:1;1366;1359:12;1318:2;1405:6;1392:20;1382:30;;1435:18;1427:6;1424:30;1421:2;;;1467:1;1464;1457:12;1421:2;1504:4;1496:6;1492:17;1480:29;;1558:3;1550:4;1542:6;1538:17;1528:8;1524:32;1521:41;1518:2;;;1575:1;1572;1565:12;1518:2;1308:277;;;;;:::o;1591:139::-;;1675:6;1662:20;1653:29;;1691:33;1718:5;1691:33;:::i;:::-;1643:87;;;;:::o;1736:262::-;;1844:2;1832:9;1823:7;1819:23;1815:32;1812:2;;;1860:1;1857;1850:12;1812:2;1903:1;1928:53;1973:7;1964:6;1953:9;1949:22;1928:53;:::i;:::-;1918:63;;1874:117;1802:196;;;;:::o;2004:407::-;;;2129:2;2117:9;2108:7;2104:23;2100:32;2097:2;;;2145:1;2142;2135:12;2097:2;2188:1;2213:53;2258:7;2249:6;2238:9;2234:22;2213:53;:::i;:::-;2203:63;;2159:117;2315:2;2341:53;2386:7;2377:6;2366:9;2362:22;2341:53;:::i;:::-;2331:63;;2286:118;2087:324;;;;;:::o;2417:552::-;;;;2559:2;2547:9;2538:7;2534:23;2530:32;2527:2;;;2575:1;2572;2565:12;2527:2;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2745:2;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;:::i;:::-;2761:63;;2716:118;2873:2;2899:53;2944:7;2935:6;2924:9;2920:22;2899:53;:::i;:::-;2889:63;;2844:118;2517:452;;;;;:::o;2975:809::-;;;;;3143:3;3131:9;3122:7;3118:23;3114:33;3111:2;;;3160:1;3157;3150:12;3111:2;3203:1;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3174:117;3330:2;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3301:118;3458:2;3484:53;3529:7;3520:6;3509:9;3505:22;3484:53;:::i;:::-;3474:63;;3429:118;3614:2;3603:9;3599:18;3586:32;3645:18;3637:6;3634:30;3631:2;;;3677:1;3674;3667:12;3631:2;3705:62;3759:7;3750:6;3739:9;3735:22;3705:62;:::i;:::-;3695:72;;3557:220;3101:683;;;;;;;:::o;3790:401::-;;;3912:2;3900:9;3891:7;3887:23;3883:32;3880:2;;;3928:1;3925;3918:12;3880:2;3971:1;3996:53;4041:7;4032:6;4021:9;4017:22;3996:53;:::i;:::-;3986:63;;3942:117;4098:2;4124:50;4166:7;4157:6;4146:9;4142:22;4124:50;:::i;:::-;4114:60;;4069:115;3870:321;;;;;:::o;4197:407::-;;;4322:2;4310:9;4301:7;4297:23;4293:32;4290:2;;;4338:1;4335;4328:12;4290:2;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4508:2;4534:53;4579:7;4570:6;4559:9;4555:22;4534:53;:::i;:::-;4524:63;;4479:118;4280:324;;;;;:::o;4610:260::-;;4717:2;4705:9;4696:7;4692:23;4688:32;4685:2;;;4733:1;4730;4723:12;4685:2;4776:1;4801:52;4845:7;4836:6;4825:9;4821:22;4801:52;:::i;:::-;4791:62;;4747:116;4675:195;;;;:::o;4876:282::-;;4994:2;4982:9;4973:7;4969:23;4965:32;4962:2;;;5010:1;5007;5000:12;4962:2;5053:1;5078:63;5133:7;5124:6;5113:9;5109:22;5078:63;:::i;:::-;5068:73;;5024:127;4952:206;;;;:::o;5164:395::-;;;5292:2;5280:9;5271:7;5267:23;5263:32;5260:2;;;5308:1;5305;5298:12;5260:2;5379:1;5368:9;5364:17;5351:31;5409:18;5401:6;5398:30;5395:2;;;5441:1;5438;5431:12;5395:2;5477:65;5534:7;5525:6;5514:9;5510:22;5477:65;:::i;:::-;5459:83;;;;5322:230;5250:309;;;;;:::o;5565:262::-;;5673:2;5661:9;5652:7;5648:23;5644:32;5641:2;;;5689:1;5686;5679:12;5641:2;5732:1;5757:53;5802:7;5793:6;5782:9;5778:22;5757:53;:::i;:::-;5747:63;;5703:117;5631:196;;;;:::o;5833:179::-;;5923:46;5965:3;5957:6;5923:46;:::i;:::-;6001:4;5996:3;5992:14;5978:28;;5913:99;;;;:::o;6018:108::-;6095:24;6113:5;6095:24;:::i;:::-;6090:3;6083:37;6073:53;;:::o;6132:118::-;6219:24;6237:5;6219:24;:::i;:::-;6214:3;6207:37;6197:53;;:::o;6286:732::-;;6434:54;6482:5;6434:54;:::i;:::-;6504:86;6583:6;6578:3;6504:86;:::i;:::-;6497:93;;6614:56;6664:5;6614:56;:::i;:::-;6693:7;6724:1;6709:284;6734:6;6731:1;6728:13;6709:284;;;6810:6;6804:13;6837:63;6896:3;6881:13;6837:63;:::i;:::-;6830:70;;6923:60;6976:6;6923:60;:::i;:::-;6913:70;;6769:224;6756:1;6753;6749:9;6744:14;;6709:284;;;6713:14;7009:3;7002:10;;6410:608;;;;;;;:::o;7024:109::-;7105:21;7120:5;7105:21;:::i;:::-;7100:3;7093:34;7083:50;;:::o;7139:360::-;;7253:38;7285:5;7253:38;:::i;:::-;7307:70;7370:6;7365:3;7307:70;:::i;:::-;7300:77;;7386:52;7431:6;7426:3;7419:4;7412:5;7408:16;7386:52;:::i;:::-;7463:29;7485:6;7463:29;:::i;:::-;7458:3;7454:39;7447:46;;7229:270;;;;;:::o;7505:364::-;;7621:39;7654:5;7621:39;:::i;:::-;7676:71;7740:6;7735:3;7676:71;:::i;:::-;7669:78;;7756:52;7801:6;7796:3;7789:4;7782:5;7778:16;7756:52;:::i;:::-;7833:29;7855:6;7833:29;:::i;:::-;7828:3;7824:39;7817:46;;7597:272;;;;;:::o;7875:377::-;;8009:39;8042:5;8009:39;:::i;:::-;8064:89;8146:6;8141:3;8064:89;:::i;:::-;8057:96;;8162:52;8207:6;8202:3;8195:4;8188:5;8184:16;8162:52;:::i;:::-;8239:6;8234:3;8230:16;8223:23;;7985:267;;;;;:::o;8258:366::-;;8421:67;8485:2;8480:3;8421:67;:::i;:::-;8414:74;;8518:34;8514:1;8509:3;8505:11;8498:55;8584:4;8579:2;8574:3;8570:12;8563:26;8615:2;8610:3;8606:12;8599:19;;8404:220;;;:::o;8630:380::-;;8793:67;8857:2;8852:3;8793:67;:::i;:::-;8786:74;;8890:34;8886:1;8881:3;8877:11;8870:55;8956:18;8951:2;8946:3;8942:12;8935:40;9001:2;8996:3;8992:12;8985:19;;8776:234;;;:::o;9016:367::-;;9179:67;9243:2;9238:3;9179:67;:::i;:::-;9172:74;;9276:34;9272:1;9267:3;9263:11;9256:55;9342:5;9337:2;9332:3;9328:12;9321:27;9374:2;9369:3;9365:12;9358:19;;9162:221;;;:::o;9389:370::-;;9552:67;9616:2;9611:3;9552:67;:::i;:::-;9545:74;;9649:34;9645:1;9640:3;9636:11;9629:55;9715:8;9710:2;9705:3;9701:12;9694:30;9750:2;9745:3;9741:12;9734:19;;9535:224;;;:::o;9765:374::-;;9928:67;9992:2;9987:3;9928:67;:::i;:::-;9921:74;;10025:34;10021:1;10016:3;10012:11;10005:55;10091:12;10086:2;10081:3;10077:12;10070:34;10130:2;10125:3;10121:12;10114:19;;9911:228;;;:::o;10145:372::-;;10308:67;10372:2;10367:3;10308:67;:::i;:::-;10301:74;;10405:34;10401:1;10396:3;10392:11;10385:55;10471:10;10466:2;10461:3;10457:12;10450:32;10508:2;10503:3;10499:12;10492:19;;10291:226;;;:::o;10523:367::-;;10686:67;10750:2;10745:3;10686:67;:::i;:::-;10679:74;;10783:34;10779:1;10774:3;10770:11;10763:55;10849:5;10844:2;10839:3;10835:12;10828:27;10881:2;10876:3;10872:12;10865:19;;10669:221;;;:::o;10896:369::-;;11059:67;11123:2;11118:3;11059:67;:::i;:::-;11052:74;;11156:34;11152:1;11147:3;11143:11;11136:55;11222:7;11217:2;11212:3;11208:12;11201:29;11256:2;11251:3;11247:12;11240:19;;11042:223;;;:::o;11271:381::-;;11434:67;11498:2;11493:3;11434:67;:::i;:::-;11427:74;;11531:34;11527:1;11522:3;11518:11;11511:55;11597:19;11592:2;11587:3;11583:12;11576:41;11643:2;11638:3;11634:12;11627:19;;11417:235;;;:::o;11658:317::-;;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11918:21;11914:1;11909:3;11905:11;11898:42;11966:2;11961:3;11957:12;11950:19;;11804:171;;;:::o;11981:389::-;;12144:67;12208:2;12203:3;12144:67;:::i;:::-;12137:74;;12241:34;12237:1;12232:3;12228:11;12221:55;12307:27;12302:2;12297:3;12293:12;12286:49;12361:2;12356:3;12352:12;12345:19;;12127:243;;;:::o;12376:389::-;;12539:67;12603:2;12598:3;12539:67;:::i;:::-;12532:74;;12636:34;12632:1;12627:3;12623:11;12616:55;12702:27;12697:2;12692:3;12688:12;12681:49;12756:2;12751:3;12747:12;12740:19;;12522:243;;;:::o;12771:322::-;;12934:67;12998:2;12993:3;12934:67;:::i;:::-;12927:74;;13031:26;13027:1;13022:3;13018:11;13011:47;13084:2;13079:3;13075:12;13068:19;;12917:176;;;:::o;13099:375::-;;13262:67;13326:2;13321:3;13262:67;:::i;:::-;13255:74;;13359:34;13355:1;13350:3;13346:11;13339:55;13425:13;13420:2;13415:3;13411:12;13404:35;13465:2;13460:3;13456:12;13449:19;;13245:229;;;:::o;13480:370::-;;13643:67;13707:2;13702:3;13643:67;:::i;:::-;13636:74;;13740:34;13736:1;13731:3;13727:11;13720:55;13806:8;13801:2;13796:3;13792:12;13785:30;13841:2;13836:3;13832:12;13825:19;;13626:224;;;:::o;13856:330::-;;14019:67;14083:2;14078:3;14019:67;:::i;:::-;14012:74;;14116:34;14112:1;14107:3;14103:11;14096:55;14177:2;14172:3;14168:12;14161:19;;14002:184;;;:::o;14192:379::-;;14355:67;14419:2;14414:3;14355:67;:::i;:::-;14348:74;;14452:34;14448:1;14443:3;14439:11;14432:55;14518:17;14513:2;14508:3;14504:12;14497:39;14562:2;14557:3;14553:12;14546:19;;14338:233;;;:::o;14577:324::-;;14740:67;14804:2;14799:3;14740:67;:::i;:::-;14733:74;;14837:28;14833:1;14828:3;14824:11;14817:49;14892:2;14887:3;14883:12;14876:19;;14723:178;;;:::o;14907:382::-;;15070:67;15134:2;15129:3;15070:67;:::i;:::-;15063:74;;15167:34;15163:1;15158:3;15154:11;15147:55;15233:20;15228:2;15223:3;15219:12;15212:42;15280:2;15275:3;15271:12;15264:19;;15053:236;;;:::o;15295:374::-;;15458:67;15522:2;15517:3;15458:67;:::i;:::-;15451:74;;15555:34;15551:1;15546:3;15542:11;15535:55;15621:12;15616:2;15611:3;15607:12;15600:34;15660:2;15655:3;15651:12;15644:19;;15441:228;;;:::o;15675:318::-;;15838:67;15902:2;15897:3;15838:67;:::i;:::-;15831:74;;15935:22;15931:1;15926:3;15922:11;15915:43;15984:2;15979:3;15975:12;15968:19;;15821:172;;;:::o;15999:366::-;;16162:67;16226:2;16221:3;16162:67;:::i;:::-;16155:74;;16259:34;16255:1;16250:3;16246:11;16239:55;16325:4;16320:2;16315:3;16311:12;16304:26;16356:2;16351:3;16347:12;16340:19;;16145:220;;;:::o;16371:297::-;;16551:83;16632:1;16627:3;16551:83;:::i;:::-;16544:90;;16660:1;16655:3;16651:11;16644:18;;16534:134;;;:::o;16674:314::-;;16837:67;16901:2;16896:3;16837:67;:::i;:::-;16830:74;;16934:18;16930:1;16925:3;16921:11;16914:39;16979:2;16974:3;16970:12;16963:19;;16820:168;;;:::o;16994:383::-;;17157:67;17221:2;17216:3;17157:67;:::i;:::-;17150:74;;17254:34;17250:1;17245:3;17241:11;17234:55;17320:21;17315:2;17310:3;17306:12;17299:43;17368:2;17363:3;17359:12;17352:19;;17140:237;;;:::o;17383:327::-;;17546:67;17610:2;17605:3;17546:67;:::i;:::-;17539:74;;17643:31;17639:1;17634:3;17630:11;17623:52;17701:2;17696:3;17692:12;17685:19;;17529:181;;;:::o;17716:365::-;;17879:67;17943:2;17938:3;17879:67;:::i;:::-;17872:74;;17976:34;17972:1;17967:3;17963:11;17956:55;18042:3;18037:2;18032:3;18028:12;18021:25;18072:2;18067:3;18063:12;18056:19;;17862:219;;;:::o;18087:378::-;;18250:67;18314:2;18309:3;18250:67;:::i;:::-;18243:74;;18347:34;18343:1;18338:3;18334:11;18327:55;18413:16;18408:2;18403:3;18399:12;18392:38;18456:2;18451:3;18447:12;18440:19;;18233:232;;;:::o;18471:370::-;;18634:67;18698:2;18693:3;18634:67;:::i;:::-;18627:74;;18731:34;18727:1;18722:3;18718:11;18711:55;18797:8;18792:2;18787:3;18783:12;18776:30;18832:2;18827:3;18823:12;18816:19;;18617:224;;;:::o;18847:329::-;;19010:67;19074:2;19069:3;19010:67;:::i;:::-;19003:74;;19107:33;19103:1;19098:3;19094:11;19087:54;19167:2;19162:3;19158:12;19151:19;;18993:183;;;:::o;19182:379::-;;19345:67;19409:2;19404:3;19345:67;:::i;:::-;19338:74;;19442:34;19438:1;19433:3;19429:11;19422:55;19508:17;19503:2;19498:3;19494:12;19487:39;19552:2;19547:3;19543:12;19536:19;;19328:233;;;:::o;19567:377::-;;19730:67;19794:2;19789:3;19730:67;:::i;:::-;19723:74;;19827:34;19823:1;19818:3;19814:11;19807:55;19893:15;19888:2;19883:3;19879:12;19872:37;19935:2;19930:3;19926:12;19919:19;;19713:231;;;:::o;19950:366::-;;20113:67;20177:2;20172:3;20113:67;:::i;:::-;20106:74;;20210:34;20206:1;20201:3;20197:11;20190:55;20276:4;20271:2;20266:3;20262:12;20255:26;20307:2;20302:3;20298:12;20291:19;;20096:220;;;:::o;20392:527::-;20551:4;20546:3;20542:14;20638:4;20631:5;20627:16;20621:23;20657:63;20714:4;20709:3;20705:14;20691:12;20657:63;:::i;:::-;20566:164;20822:4;20815:5;20811:16;20805:23;20841:61;20896:4;20891:3;20887:14;20873:12;20841:61;:::i;:::-;20740:172;20520:399;;;:::o;20925:108::-;21002:24;21020:5;21002:24;:::i;:::-;20997:3;20990:37;20980:53;;:::o;21039:118::-;21126:24;21144:5;21126:24;:::i;:::-;21121:3;21114:37;21104:53;;:::o;21163:105::-;21238:23;21255:5;21238:23;:::i;:::-;21233:3;21226:36;21216:52;;:::o;21274:435::-;;21476:95;21567:3;21558:6;21476:95;:::i;:::-;21469:102;;21588:95;21679:3;21670:6;21588:95;:::i;:::-;21581:102;;21700:3;21693:10;;21458:251;;;;;:::o;21715:379::-;;21921:147;22064:3;21921:147;:::i;:::-;21914:154;;22085:3;22078:10;;21903:191;;;:::o;22100:222::-;;22231:2;22220:9;22216:18;22208:26;;22244:71;22312:1;22301:9;22297:17;22288:6;22244:71;:::i;:::-;22198:124;;;;:::o;22328:640::-;;22561:3;22550:9;22546:19;22538:27;;22575:71;22643:1;22632:9;22628:17;22619:6;22575:71;:::i;:::-;22656:72;22724:2;22713:9;22709:18;22700:6;22656:72;:::i;:::-;22738;22806:2;22795:9;22791:18;22782:6;22738:72;:::i;:::-;22857:9;22851:4;22847:20;22842:2;22831:9;22827:18;22820:48;22885:76;22956:4;22947:6;22885:76;:::i;:::-;22877:84;;22528:440;;;;;;;:::o;22974:373::-;;23155:2;23144:9;23140:18;23132:26;;23204:9;23198:4;23194:20;23190:1;23179:9;23175:17;23168:47;23232:108;23335:4;23326:6;23232:108;:::i;:::-;23224:116;;23122:225;;;;:::o;23353:210::-;;23478:2;23467:9;23463:18;23455:26;;23491:65;23553:1;23542:9;23538:17;23529:6;23491:65;:::i;:::-;23445:118;;;;:::o;23569:313::-;;23720:2;23709:9;23705:18;23697:26;;23769:9;23763:4;23759:20;23755:1;23744:9;23740:17;23733:47;23797:78;23870:4;23861:6;23797:78;:::i;:::-;23789:86;;23687:195;;;;:::o;23888:419::-;;24092:2;24081:9;24077:18;24069:26;;24141:9;24135:4;24131:20;24127:1;24116:9;24112:17;24105:47;24169:131;24295:4;24169:131;:::i;:::-;24161:139;;24059:248;;;:::o;24313:419::-;;24517:2;24506:9;24502:18;24494:26;;24566:9;24560:4;24556:20;24552:1;24541:9;24537:17;24530:47;24594:131;24720:4;24594:131;:::i;:::-;24586:139;;24484:248;;;:::o;24738:419::-;;24942:2;24931:9;24927:18;24919:26;;24991:9;24985:4;24981:20;24977:1;24966:9;24962:17;24955:47;25019:131;25145:4;25019:131;:::i;:::-;25011:139;;24909:248;;;:::o;25163:419::-;;25367:2;25356:9;25352:18;25344:26;;25416:9;25410:4;25406:20;25402:1;25391:9;25387:17;25380:47;25444:131;25570:4;25444:131;:::i;:::-;25436:139;;25334:248;;;:::o;25588:419::-;;25792:2;25781:9;25777:18;25769:26;;25841:9;25835:4;25831:20;25827:1;25816:9;25812:17;25805:47;25869:131;25995:4;25869:131;:::i;:::-;25861:139;;25759:248;;;:::o;26013:419::-;;26217:2;26206:9;26202:18;26194:26;;26266:9;26260:4;26256:20;26252:1;26241:9;26237:17;26230:47;26294:131;26420:4;26294:131;:::i;:::-;26286:139;;26184:248;;;:::o;26438:419::-;;26642:2;26631:9;26627:18;26619:26;;26691:9;26685:4;26681:20;26677:1;26666:9;26662:17;26655:47;26719:131;26845:4;26719:131;:::i;:::-;26711:139;;26609:248;;;:::o;26863:419::-;;27067:2;27056:9;27052:18;27044:26;;27116:9;27110:4;27106:20;27102:1;27091:9;27087:17;27080:47;27144:131;27270:4;27144:131;:::i;:::-;27136:139;;27034:248;;;:::o;27288:419::-;;27492:2;27481:9;27477:18;27469:26;;27541:9;27535:4;27531:20;27527:1;27516:9;27512:17;27505:47;27569:131;27695:4;27569:131;:::i;:::-;27561:139;;27459:248;;;:::o;27713:419::-;;27917:2;27906:9;27902:18;27894:26;;27966:9;27960:4;27956:20;27952:1;27941:9;27937:17;27930:47;27994:131;28120:4;27994:131;:::i;:::-;27986:139;;27884:248;;;:::o;28138:419::-;;28342:2;28331:9;28327:18;28319:26;;28391:9;28385:4;28381:20;28377:1;28366:9;28362:17;28355:47;28419:131;28545:4;28419:131;:::i;:::-;28411:139;;28309:248;;;:::o;28563:419::-;;28767:2;28756:9;28752:18;28744:26;;28816:9;28810:4;28806:20;28802:1;28791:9;28787:17;28780:47;28844:131;28970:4;28844:131;:::i;:::-;28836:139;;28734:248;;;:::o;28988:419::-;;29192:2;29181:9;29177:18;29169:26;;29241:9;29235:4;29231:20;29227:1;29216:9;29212:17;29205:47;29269:131;29395:4;29269:131;:::i;:::-;29261:139;;29159:248;;;:::o;29413:419::-;;29617:2;29606:9;29602:18;29594:26;;29666:9;29660:4;29656:20;29652:1;29641:9;29637:17;29630:47;29694:131;29820:4;29694:131;:::i;:::-;29686:139;;29584:248;;;:::o;29838:419::-;;30042:2;30031:9;30027:18;30019:26;;30091:9;30085:4;30081:20;30077:1;30066:9;30062:17;30055:47;30119:131;30245:4;30119:131;:::i;:::-;30111:139;;30009:248;;;:::o;30263:419::-;;30467:2;30456:9;30452:18;30444:26;;30516:9;30510:4;30506:20;30502:1;30491:9;30487:17;30480:47;30544:131;30670:4;30544:131;:::i;:::-;30536:139;;30434:248;;;:::o;30688:419::-;;30892:2;30881:9;30877:18;30869:26;;30941:9;30935:4;30931:20;30927:1;30916:9;30912:17;30905:47;30969:131;31095:4;30969:131;:::i;:::-;30961:139;;30859:248;;;:::o;31113:419::-;;31317:2;31306:9;31302:18;31294:26;;31366:9;31360:4;31356:20;31352:1;31341:9;31337:17;31330:47;31394:131;31520:4;31394:131;:::i;:::-;31386:139;;31284:248;;;:::o;31538:419::-;;31742:2;31731:9;31727:18;31719:26;;31791:9;31785:4;31781:20;31777:1;31766:9;31762:17;31755:47;31819:131;31945:4;31819:131;:::i;:::-;31811:139;;31709:248;;;:::o;31963:419::-;;32167:2;32156:9;32152:18;32144:26;;32216:9;32210:4;32206:20;32202:1;32191:9;32187:17;32180:47;32244:131;32370:4;32244:131;:::i;:::-;32236:139;;32134:248;;;:::o;32388:419::-;;32592:2;32581:9;32577:18;32569:26;;32641:9;32635:4;32631:20;32627:1;32616:9;32612:17;32605:47;32669:131;32795:4;32669:131;:::i;:::-;32661:139;;32559:248;;;:::o;32813:419::-;;33017:2;33006:9;33002:18;32994:26;;33066:9;33060:4;33056:20;33052:1;33041:9;33037:17;33030:47;33094:131;33220:4;33094:131;:::i;:::-;33086:139;;32984:248;;;:::o;33238:419::-;;33442:2;33431:9;33427:18;33419:26;;33491:9;33485:4;33481:20;33477:1;33466:9;33462:17;33455:47;33519:131;33645:4;33519:131;:::i;:::-;33511:139;;33409:248;;;:::o;33663:419::-;;33867:2;33856:9;33852:18;33844:26;;33916:9;33910:4;33906:20;33902:1;33891:9;33887:17;33880:47;33944:131;34070:4;33944:131;:::i;:::-;33936:139;;33834:248;;;:::o;34088:419::-;;34292:2;34281:9;34277:18;34269:26;;34341:9;34335:4;34331:20;34327:1;34316:9;34312:17;34305:47;34369:131;34495:4;34369:131;:::i;:::-;34361:139;;34259:248;;;:::o;34513:419::-;;34717:2;34706:9;34702:18;34694:26;;34766:9;34760:4;34756:20;34752:1;34741:9;34737:17;34730:47;34794:131;34920:4;34794:131;:::i;:::-;34786:139;;34684:248;;;:::o;34938:419::-;;35142:2;35131:9;35127:18;35119:26;;35191:9;35185:4;35181:20;35177:1;35166:9;35162:17;35155:47;35219:131;35345:4;35219:131;:::i;:::-;35211:139;;35109:248;;;:::o;35363:419::-;;35567:2;35556:9;35552:18;35544:26;;35616:9;35610:4;35606:20;35602:1;35591:9;35587:17;35580:47;35644:131;35770:4;35644:131;:::i;:::-;35636:139;;35534:248;;;:::o;35788:419::-;;35992:2;35981:9;35977:18;35969:26;;36041:9;36035:4;36031:20;36027:1;36016:9;36012:17;36005:47;36069:131;36195:4;36069:131;:::i;:::-;36061:139;;35959:248;;;:::o;36213:419::-;;36417:2;36406:9;36402:18;36394:26;;36466:9;36460:4;36456:20;36452:1;36441:9;36437:17;36430:47;36494:131;36620:4;36494:131;:::i;:::-;36486:139;;36384:248;;;:::o;36638:419::-;;36842:2;36831:9;36827:18;36819:26;;36891:9;36885:4;36881:20;36877:1;36866:9;36862:17;36855:47;36919:131;37045:4;36919:131;:::i;:::-;36911:139;;36809:248;;;:::o;37063:419::-;;37267:2;37256:9;37252:18;37244:26;;37316:9;37310:4;37306:20;37302:1;37291:9;37287:17;37280:47;37344:131;37470:4;37344:131;:::i;:::-;37336:139;;37234:248;;;:::o;37488:346::-;;37681:2;37670:9;37666:18;37658:26;;37694:133;37824:1;37813:9;37809:17;37800:6;37694:133;:::i;:::-;37648:186;;;;:::o;37840:222::-;;37971:2;37960:9;37956:18;37948:26;;37984:71;38052:1;38041:9;38037:17;38028:6;37984:71;:::i;:::-;37938:124;;;;:::o;38068:283::-;;38134:2;38128:9;38118:19;;38176:4;38168:6;38164:17;38283:6;38271:10;38268:22;38247:18;38235:10;38232:34;38229:62;38226:2;;;38294:18;;:::i;:::-;38226:2;38334:10;38330:2;38323:22;38108:243;;;;:::o;38357:331::-;;38508:18;38500:6;38497:30;38494:2;;;38530:18;;:::i;:::-;38494:2;38615:4;38611:9;38604:4;38596:6;38592:17;38588:33;38580:41;;38676:4;38670;38666:15;38658:23;;38423:265;;;:::o;38694:132::-;;38784:3;38776:11;;38814:4;38809:3;38805:14;38797:22;;38766:60;;;:::o;38832:114::-;;38933:5;38927:12;38917:22;;38906:40;;;:::o;38952:98::-;;39037:5;39031:12;39021:22;;39010:40;;;:::o;39056:99::-;;39142:5;39136:12;39126:22;;39115:40;;;:::o;39161:113::-;;39263:4;39258:3;39254:14;39246:22;;39236:38;;;:::o;39280:184::-;;39413:6;39408:3;39401:19;39453:4;39448:3;39444:14;39429:29;;39391:73;;;;:::o;39470:168::-;;39587:6;39582:3;39575:19;39627:4;39622:3;39618:14;39603:29;;39565:73;;;;:::o;39644:147::-;;39782:3;39767:18;;39757:34;;;;:::o;39797:169::-;;39915:6;39910:3;39903:19;39955:4;39950:3;39946:14;39931:29;;39893:73;;;;:::o;39972:148::-;;40111:3;40096:18;;40086:34;;;;:::o;40126:273::-;;40185:20;40203:1;40185:20;:::i;:::-;40180:25;;40219:20;40237:1;40219:20;:::i;:::-;40214:25;;40341:1;40305:34;40301:42;40298:1;40295:49;40292:2;;;40347:18;;:::i;:::-;40292:2;40391:1;40388;40384:9;40377:16;;40170:229;;;;:::o;40405:305::-;;40464:20;40482:1;40464:20;:::i;:::-;40459:25;;40498:20;40516:1;40498:20;:::i;:::-;40493:25;;40652:1;40584:66;40580:74;40577:1;40574:81;40571:2;;;40658:18;;:::i;:::-;40571:2;40702:1;40699;40695:9;40688:16;;40449:261;;;;:::o;40716:185::-;;40773:20;40791:1;40773:20;:::i;:::-;40768:25;;40807:20;40825:1;40807:20;:::i;:::-;40802:25;;40846:1;40836:2;;40851:18;;:::i;:::-;40836:2;40893:1;40890;40886:9;40881:14;;40758:143;;;;:::o;40907:348::-;;40970:20;40988:1;40970:20;:::i;:::-;40965:25;;41004:20;41022:1;41004:20;:::i;:::-;40999:25;;41192:1;41124:66;41120:74;41117:1;41114:81;41109:1;41102:9;41095:17;41091:105;41088:2;;;41199:18;;:::i;:::-;41088:2;41247:1;41244;41240:9;41229:20;;40955:300;;;;:::o;41261:191::-;;41321:20;41339:1;41321:20;:::i;:::-;41316:25;;41355:20;41373:1;41355:20;:::i;:::-;41350:25;;41394:1;41391;41388:8;41385:2;;;41399:18;;:::i;:::-;41385:2;41444:1;41441;41437:9;41429:17;;41306:146;;;;:::o;41458:191::-;;41518:20;41536:1;41518:20;:::i;:::-;41513:25;;41552:20;41570:1;41552:20;:::i;:::-;41547:25;;41591:1;41588;41585:8;41582:2;;;41596:18;;:::i;:::-;41582:2;41641:1;41638;41634:9;41626:17;;41503:146;;;;:::o;41655:96::-;;41721:24;41739:5;41721:24;:::i;:::-;41710:35;;41700:51;;;:::o;41757:90::-;;41834:5;41827:13;41820:21;41809:32;;41799:48;;;:::o;41853:149::-;;41929:66;41922:5;41918:78;41907:89;;41897:105;;;:::o;42008:118::-;;42085:34;42078:5;42074:46;42063:57;;42053:73;;;:::o;42132:126::-;;42209:42;42202:5;42198:54;42187:65;;42177:81;;;:::o;42264:77::-;;42330:5;42319:16;;42309:32;;;:::o;42347:101::-;;42423:18;42416:5;42412:30;42401:41;;42391:57;;;:::o;42454:154::-;42538:6;42533:3;42528;42515:30;42600:1;42591:6;42586:3;42582:16;42575:27;42505:103;;;:::o;42614:307::-;42682:1;42692:113;42706:6;42703:1;42700:13;42692:113;;;42791:1;42786:3;42782:11;42776:18;42772:1;42767:3;42763:11;42756:39;42728:2;42725:1;42721:10;42716:15;;42692:113;;;42823:6;42820:1;42817:13;42814:2;;;42903:1;42894:6;42889:3;42885:16;42878:27;42814:2;42663:258;;;;:::o;42927:171::-;;42989:24;43007:5;42989:24;:::i;:::-;42980:33;;43035:4;43028:5;43025:15;43022:2;;;43043:18;;:::i;:::-;43022:2;43090:1;43083:5;43079:13;43072:20;;42970:128;;;:::o;43104:320::-;;43185:1;43179:4;43175:12;43165:22;;43232:1;43226:4;43222:12;43253:18;43243:2;;43309:4;43301:6;43297:17;43287:27;;43243:2;43371;43363:6;43360:14;43340:18;43337:38;43334:2;;;43390:18;;:::i;:::-;43334:2;43155:269;;;;:::o;43430:233::-;;43492:24;43510:5;43492:24;:::i;:::-;43483:33;;43538:66;43531:5;43528:77;43525:2;;;43608:18;;:::i;:::-;43525:2;43655:1;43648:5;43644:13;43637:20;;43473:190;;;:::o;43669:176::-;;43718:20;43736:1;43718:20;:::i;:::-;43713:25;;43752:20;43770:1;43752:20;:::i;:::-;43747:25;;43791:1;43781:2;;43796:18;;:::i;:::-;43781:2;43837:1;43834;43830:9;43825:14;;43703:142;;;;:::o;43851:180::-;43899:77;43896:1;43889:88;43996:4;43993:1;43986:15;44020:4;44017:1;44010:15;44037:180;44085:77;44082:1;44075:88;44182:4;44179:1;44172:15;44206:4;44203:1;44196:15;44223:180;44271:77;44268:1;44261:88;44368:4;44365:1;44358:15;44392:4;44389:1;44382:15;44409:180;44457:77;44454:1;44447:88;44554:4;44551:1;44544:15;44578:4;44575:1;44568:15;44595:102;;44687:2;44683:7;44678:2;44671:5;44667:14;44663:28;44653:38;;44643:54;;;:::o;44703:122::-;44776:24;44794:5;44776:24;:::i;:::-;44769:5;44766:35;44756:2;;44815:1;44812;44805:12;44756:2;44746:79;:::o;44831:116::-;44901:21;44916:5;44901:21;:::i;:::-;44894:5;44891:32;44881:2;;44937:1;44934;44927:12;44881:2;44871:76;:::o;44953:120::-;45025:23;45042:5;45025:23;:::i;:::-;45018:5;45015:34;45005:2;;45063:1;45060;45053:12;45005:2;44995:78;:::o;45079:122::-;45152:24;45170:5;45152:24;:::i;:::-;45145:5;45142:35;45132:2;;45191:1;45188;45181:12;45132:2;45122:79;:::o

Swarm Source

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