ETH Price: $2,628.62 (+1.67%)
Gas: 1 Gwei

Token

Yoda (YODA)
 

Overview

Max Total Supply

1,562 YODA

Holders

143

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
alexjia.eth
Balance
10 YODA
0xE7936592003aC7C3a96a944D4FC2877cCfF511a3
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:
Yoda

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-06-06
*/

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol


// Creators: locationtba.eth, 2pmflow.eth

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..).
 *
 * 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 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.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_
  ) {
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  }

  /**
   * @dev Returns whether `tokenId` exists.
   *
   * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
   *
   * Tokens start existing when they are minted (`_mint`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

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

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - `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 > currentIndex - 1) {
      endIndex = currentIndex - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

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

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
   * transferred to `to`.
   * - When `from` is zero, `tokenId` will be minted for `to`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/YodaFree.sol


pragma solidity ^0.8.0;



contract Yoda is Ownable, ERC721A {

    // constants
    uint256 constant FREE_MINTS = 1500;
    uint256 constant MAX_ELEMENTS = 5555;
    uint256 constant MAX_ELEMENTS_ONE_TIME = 10;
    uint256 constant PUBLIC_PRICE = 0.005 ether;

    // state variable
    string public baseTokenURI;

    constructor(uint256 maxBatchSize_) ERC721A("Yoda", "YODA", maxBatchSize_) {}

    function mint(address _to, uint256 _mintAmount) public payable {
        uint256 supply = totalSupply();
        require(_mintAmount > 0,"You should mint more than zero.");
        require(_mintAmount <= MAX_ELEMENTS_ONE_TIME,"Max limit reached");
        if(supply < FREE_MINTS){
            require(_mintAmount + supply <= FREE_MINTS,"Not enough free mints available");
            _safeMint(_to,_mintAmount);
        } else {
            require(supply + _mintAmount <= MAX_ELEMENTS,"Reached max supply");
            require(msg.value >= _mintAmount * PUBLIC_PRICE,"Not enough gwei in wallet");
            _safeMint(_to,_mintAmount);
        }
    }

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

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

    function setBaseURI(string calldata baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","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":"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":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[],"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60a0604052600060015560006008553480156200001b57600080fd5b50604051620043bc380380620043bc8339818101604052810190620000419190620002eb565b6040518060400160405280600481526020017f596f6461000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f594f44410000000000000000000000000000000000000000000000000000000081525082620000ce620000c26200015860201b60201c565b6200016060201b60201c565b6000811162000114576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010b906200037f565b60405180910390fd5b82600290805190602001906200012c92919062000224565b5081600390805190602001906200014592919062000224565b508060808181525050505050506200043b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023290620003bc565b90600052602060002090601f016020900481019282620002565760008555620002a2565b82601f106200027157805160ff1916838001178555620002a2565b82800160010185558215620002a2579182015b82811115620002a157825182559160200191906001019062000284565b5b509050620002b19190620002b5565b5090565b5b80821115620002d0576000816000905550600101620002b6565b5090565b600081519050620002e58162000421565b92915050565b600060208284031215620002fe57600080fd5b60006200030e84828501620002d4565b91505092915050565b600062000326602783620003a1565b91507f455243373231413a206d61782062617463682073697a65206d7573742062652060008301527f6e6f6e7a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b600060208201905081810360008301526200039a8162000317565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620003d557607f821691505b60208210811415620003ec57620003eb620003f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200042c81620003b2565b81146200043857600080fd5b50565b608051613f576200046560003960008181611cdd01528181611d0601526123f40152613f576000f3fe60806040526004361061014b5760003560e01c80636352211e116100b6578063b88d4fde1161006f578063b88d4fde14610474578063c87b56dd1461049d578063d547cfb7146104da578063d7224ba014610505578063e985e9c514610530578063f2fde38b1461056d5761014b565b80636352211e1461036457806370a08231146103a1578063715018a6146103de5780638da5cb5b146103f557806395d89b4114610420578063a22cb4651461044b5761014b565b80632f745c59116101085780632f745c59146102725780633ccfd60b146102af57806340c10f19146102b957806342842e0e146102d55780634f6ccce7146102fe57806355f804b31461033b5761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806318160ddd1461021e57806323b872dd14610249575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190612bc4565b610596565b60405161018491906136a5565b60405180910390f35b34801561019957600080fd5b506101a26106e0565b6040516101af91906136c0565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da9190612c5b565b610772565b6040516101ec919061363e565b60405180910390f35b34801561020157600080fd5b5061021c60048036038101906102179190612b88565b6107f7565b005b34801561022a57600080fd5b50610233610910565b6040516102409190613a02565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190612a82565b61091a565b005b34801561027e57600080fd5b5061029960048036038101906102949190612b88565b61092a565b6040516102a69190613a02565b60405180910390f35b6102b7610b28565b005b6102d360048036038101906102ce9190612b88565b610be4565b005b3480156102e157600080fd5b506102fc60048036038101906102f79190612a82565b610d95565b005b34801561030a57600080fd5b5061032560048036038101906103209190612c5b565b610db5565b6040516103329190613a02565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190612c16565b610e08565b005b34801561037057600080fd5b5061038b60048036038101906103869190612c5b565b610e9a565b604051610398919061363e565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190612a1d565b610eb0565b6040516103d59190613a02565b60405180910390f35b3480156103ea57600080fd5b506103f3610f99565b005b34801561040157600080fd5b5061040a611021565b604051610417919061363e565b60405180910390f35b34801561042c57600080fd5b5061043561104a565b60405161044291906136c0565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190612b4c565b6110dc565b005b34801561048057600080fd5b5061049b60048036038101906104969190612ad1565b61125d565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190612c5b565b6112b9565b6040516104d191906136c0565b60405180910390f35b3480156104e657600080fd5b506104ef611360565b6040516104fc91906136c0565b60405180910390f35b34801561051157600080fd5b5061051a6113ee565b6040516105279190613a02565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190612a46565b6113f4565b60405161056491906136a5565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f9190612a1d565b611488565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106d957506106d882611580565b5b9050919050565b6060600280546106ef90613d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90613d4c565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b600061077d826115ea565b6107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b3906139c2565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080282610e9a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90613902565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108926115f8565b73ffffffffffffffffffffffffffffffffffffffff1614806108c157506108c0816108bb6115f8565b6113f4565b5b610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790613822565b60405180910390fd5b61090b838383611600565b505050565b6000600154905090565b6109258383836116b2565b505050565b600061093583610eb0565b8210610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096d906136e2565b60405180910390fd5b6000610980610910565b905060008060005b83811015610ae6576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610a7a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ad25786841415610ac3578195505050505050610b22565b8380610ace90613d7e565b9450505b508080610ade90613d7e565b915050610988565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990613982565b60405180910390fd5b92915050565b610b306115f8565b73ffffffffffffffffffffffffffffffffffffffff16610b4e611021565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90613882565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610be257600080fd5b565b6000610bee610910565b905060008211610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90613702565b60405180910390fd5b600a821115610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90613802565b60405180910390fd5b6105dc811015610ce0576105dc8183610c909190613b07565b1115610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890613782565b60405180910390fd5b610cdb8383611c6b565b610d90565b6115b38282610cef9190613b07565b1115610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d27906137c2565b60405180910390fd5b6611c37937e0800082610d439190613b8e565b341015610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613722565b60405180910390fd5b610d8f8383611c6b565b5b505050565b610db08383836040518060200160405280600081525061125d565b505050565b6000610dbf610910565b8210610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df7906137a2565b60405180910390fd5b819050919050565b610e106115f8565b73ffffffffffffffffffffffffffffffffffffffff16610e2e611021565b73ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90613882565b60405180910390fd5b818160099190610e95929190612825565b505050565b6000610ea582611c89565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890613842565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610fa16115f8565b73ffffffffffffffffffffffffffffffffffffffff16610fbf611021565b73ffffffffffffffffffffffffffffffffffffffff1614611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c90613882565b60405180910390fd5b61101f6000611e8c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461105990613d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461108590613d4c565b80156110d25780601f106110a7576101008083540402835291602001916110d2565b820191906000526020600020905b8154815290600101906020018083116110b557829003601f168201915b5050505050905090565b6110e46115f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611149906138c2565b60405180910390fd5b806007600061115f6115f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661120c6115f8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161125191906136a5565b60405180910390a35050565b6112688484846116b2565b61127484848484611f50565b6112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613922565b60405180910390fd5b50505050565b60606112c4826115ea565b611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa906138a2565b60405180910390fd5b600061130d6120e7565b9050600081511161132d5760405180602001604052806000815250611358565b8061133784612179565b60405160200161134892919061361a565b6040516020818303038152906040525b915050919050565b6009805461136d90613d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461139990613d4c565b80156113e65780601f106113bb576101008083540402835291602001916113e6565b820191906000526020600020905b8154815290600101906020018083116113c957829003601f168201915b505050505081565b60085481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114906115f8565b73ffffffffffffffffffffffffffffffffffffffff166114ae611021565b73ffffffffffffffffffffffffffffffffffffffff1614611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613882565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613742565b60405180910390fd5b61157d81611e8c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006116bd82611c89565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166116e46115f8565b73ffffffffffffffffffffffffffffffffffffffff16148061174057506117096115f8565b73ffffffffffffffffffffffffffffffffffffffff1661172884610772565b73ffffffffffffffffffffffffffffffffffffffff16145b8061175c575061175b82600001516117566115f8565b6113f4565b5b90508061179e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611795906138e2565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180790613862565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611877906137e2565b60405180910390fd5b61188d8585856001612326565b61189d6000848460000151611600565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661190b9190613be8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166119af9190613ac1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611ab59190613b07565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bfb57611b2b816115ea565b15611bfa576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c63868686600161232c565b505050505050565b611c85828260405180602001604052806000815250612332565b5050565b611c916128ab565b611c9a826115ea565b611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613762565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310611d3d5760017f000000000000000000000000000000000000000000000000000000000000000084611d309190613c1c565b611d3a9190613b07565b90505b60008390505b818110611e4b576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611e3757809350505050611e87565b508080611e4390613d22565b915050611d43565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e906139a2565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611f718473ffffffffffffffffffffffffffffffffffffffff16612812565b156120da578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f9a6115f8565b8786866040518563ffffffff1660e01b8152600401611fbc9493929190613659565b602060405180830381600087803b158015611fd657600080fd5b505af192505050801561200757506040513d601f19601f820116820180604052508101906120049190612bed565b60015b61208a573d8060008114612037576040519150601f19603f3d011682016040523d82523d6000602084013e61203c565b606091505b50600081511415612082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207990613922565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120df565b600190505b949350505050565b6060600980546120f690613d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461212290613d4c565b801561216f5780601f106121445761010080835404028352916020019161216f565b820191906000526020600020905b81548152906001019060200180831161215257829003601f168201915b5050505050905090565b606060008214156121c1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612321565b600082905060005b600082146121f35780806121dc90613d7e565b915050600a826121ec9190613b5d565b91506121c9565b60008167ffffffffffffffff811115612235577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122675781602001600182028036833780820191505090505b5090505b6000851461231a576001826122809190613c1c565b9150600a8561228f9190613dc7565b603061229b9190613b07565b60f81b8183815181106122d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123139190613b5d565b945061226b565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613962565b60405180910390fd5b6123b2816115ea565b156123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990613942565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c906139e2565b60405180910390fd5b6124626000858386612326565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161255f9190613ac1565b6fffffffffffffffffffffffffffffffff1681526020018583602001516125869190613ac1565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156127f557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127956000888488611f50565b6127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb90613922565b60405180910390fd5b81806127df90613d7e565b92505080806127ed90613d7e565b915050612724565b508060018190555061280a600087858861232c565b505050505050565b600080823b905060008111915050919050565b82805461283190613d4c565b90600052602060002090601f016020900481019282612853576000855561289a565b82601f1061286c57803560ff191683800117855561289a565b8280016001018555821561289a579182015b8281111561289957823582559160200191906001019061287e565b5b5090506128a791906128e5565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156128fe5760008160009055506001016128e6565b5090565b600061291561291084613a4e565b613a1d565b90508281526020810184848401111561292d57600080fd5b612938848285613ce0565b509392505050565b60008135905061294f81613ec5565b92915050565b60008135905061296481613edc565b92915050565b60008135905061297981613ef3565b92915050565b60008151905061298e81613ef3565b92915050565b600082601f8301126129a557600080fd5b81356129b5848260208601612902565b91505092915050565b60008083601f8401126129d057600080fd5b8235905067ffffffffffffffff8111156129e957600080fd5b602083019150836001820283011115612a0157600080fd5b9250929050565b600081359050612a1781613f0a565b92915050565b600060208284031215612a2f57600080fd5b6000612a3d84828501612940565b91505092915050565b60008060408385031215612a5957600080fd5b6000612a6785828601612940565b9250506020612a7885828601612940565b9150509250929050565b600080600060608486031215612a9757600080fd5b6000612aa586828701612940565b9350506020612ab686828701612940565b9250506040612ac786828701612a08565b9150509250925092565b60008060008060808587031215612ae757600080fd5b6000612af587828801612940565b9450506020612b0687828801612940565b9350506040612b1787828801612a08565b925050606085013567ffffffffffffffff811115612b3457600080fd5b612b4087828801612994565b91505092959194509250565b60008060408385031215612b5f57600080fd5b6000612b6d85828601612940565b9250506020612b7e85828601612955565b9150509250929050565b60008060408385031215612b9b57600080fd5b6000612ba985828601612940565b9250506020612bba85828601612a08565b9150509250929050565b600060208284031215612bd657600080fd5b6000612be48482850161296a565b91505092915050565b600060208284031215612bff57600080fd5b6000612c0d8482850161297f565b91505092915050565b60008060208385031215612c2957600080fd5b600083013567ffffffffffffffff811115612c4357600080fd5b612c4f858286016129be565b92509250509250929050565b600060208284031215612c6d57600080fd5b6000612c7b84828501612a08565b91505092915050565b612c8d81613c50565b82525050565b612c9c81613c62565b82525050565b6000612cad82613a7e565b612cb78185613a94565b9350612cc7818560208601613cef565b612cd081613eb4565b840191505092915050565b6000612ce682613a89565b612cf08185613aa5565b9350612d00818560208601613cef565b612d0981613eb4565b840191505092915050565b6000612d1f82613a89565b612d298185613ab6565b9350612d39818560208601613cef565b80840191505092915050565b6000612d52602283613aa5565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612db8601f83613aa5565b91507f596f752073686f756c64206d696e74206d6f7265207468616e207a65726f2e006000830152602082019050919050565b6000612df8601983613aa5565b91507f4e6f7420656e6f756768206777656920696e2077616c6c6574000000000000006000830152602082019050919050565b6000612e38602683613aa5565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e9e602a83613aa5565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f04601f83613aa5565b91507f4e6f7420656e6f7567682066726565206d696e747320617661696c61626c65006000830152602082019050919050565b6000612f44602383613aa5565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612faa601283613aa5565b91507f52656163686564206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b6000612fea602583613aa5565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613050601183613aa5565b91507f4d6178206c696d697420726561636865640000000000000000000000000000006000830152602082019050919050565b6000613090603983613aa5565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006130f6602b83613aa5565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061315c602683613aa5565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131c2602083613aa5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613202602f83613aa5565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613268601a83613aa5565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006132a8603283613aa5565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b600061330e602283613aa5565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613374603383613aa5565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006133da601d83613aa5565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b600061341a602183613aa5565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613480602e83613aa5565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006134e6602f83613aa5565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061354c602d83613aa5565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b60006135b2602283613aa5565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61361481613cd6565b82525050565b60006136268285612d14565b91506136328284612d14565b91508190509392505050565b60006020820190506136536000830184612c84565b92915050565b600060808201905061366e6000830187612c84565b61367b6020830186612c84565b613688604083018561360b565b818103606083015261369a8184612ca2565b905095945050505050565b60006020820190506136ba6000830184612c93565b92915050565b600060208201905081810360008301526136da8184612cdb565b905092915050565b600060208201905081810360008301526136fb81612d45565b9050919050565b6000602082019050818103600083015261371b81612dab565b9050919050565b6000602082019050818103600083015261373b81612deb565b9050919050565b6000602082019050818103600083015261375b81612e2b565b9050919050565b6000602082019050818103600083015261377b81612e91565b9050919050565b6000602082019050818103600083015261379b81612ef7565b9050919050565b600060208201905081810360008301526137bb81612f37565b9050919050565b600060208201905081810360008301526137db81612f9d565b9050919050565b600060208201905081810360008301526137fb81612fdd565b9050919050565b6000602082019050818103600083015261381b81613043565b9050919050565b6000602082019050818103600083015261383b81613083565b9050919050565b6000602082019050818103600083015261385b816130e9565b9050919050565b6000602082019050818103600083015261387b8161314f565b9050919050565b6000602082019050818103600083015261389b816131b5565b9050919050565b600060208201905081810360008301526138bb816131f5565b9050919050565b600060208201905081810360008301526138db8161325b565b9050919050565b600060208201905081810360008301526138fb8161329b565b9050919050565b6000602082019050818103600083015261391b81613301565b9050919050565b6000602082019050818103600083015261393b81613367565b9050919050565b6000602082019050818103600083015261395b816133cd565b9050919050565b6000602082019050818103600083015261397b8161340d565b9050919050565b6000602082019050818103600083015261399b81613473565b9050919050565b600060208201905081810360008301526139bb816134d9565b9050919050565b600060208201905081810360008301526139db8161353f565b9050919050565b600060208201905081810360008301526139fb816135a5565b9050919050565b6000602082019050613a17600083018461360b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a4457613a43613e85565b5b8060405250919050565b600067ffffffffffffffff821115613a6957613a68613e85565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613acc82613c9a565b9150613ad783613c9a565b9250826fffffffffffffffffffffffffffffffff03821115613afc57613afb613df8565b5b828201905092915050565b6000613b1282613cd6565b9150613b1d83613cd6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b5257613b51613df8565b5b828201905092915050565b6000613b6882613cd6565b9150613b7383613cd6565b925082613b8357613b82613e27565b5b828204905092915050565b6000613b9982613cd6565b9150613ba483613cd6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bdd57613bdc613df8565b5b828202905092915050565b6000613bf382613c9a565b9150613bfe83613c9a565b925082821015613c1157613c10613df8565b5b828203905092915050565b6000613c2782613cd6565b9150613c3283613cd6565b925082821015613c4557613c44613df8565b5b828203905092915050565b6000613c5b82613cb6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d0d578082015181840152602081019050613cf2565b83811115613d1c576000848401525b50505050565b6000613d2d82613cd6565b91506000821415613d4157613d40613df8565b5b600182039050919050565b60006002820490506001821680613d6457607f821691505b60208210811415613d7857613d77613e56565b5b50919050565b6000613d8982613cd6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dbc57613dbb613df8565b5b600182019050919050565b6000613dd282613cd6565b9150613ddd83613cd6565b925082613ded57613dec613e27565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613ece81613c50565b8114613ed957600080fd5b50565b613ee581613c62565b8114613ef057600080fd5b50565b613efc81613c6e565b8114613f0757600080fd5b50565b613f1381613cd6565b8114613f1e57600080fd5b5056fea26469706673582212205bd89a822015dc96deb4fec00eea7e3d4689861f0624068f48e0fc5221bfae2564736f6c63430008000033000000000000000000000000000000000000000000000000000000000000000a

Deployed Bytecode

0x60806040526004361061014b5760003560e01c80636352211e116100b6578063b88d4fde1161006f578063b88d4fde14610474578063c87b56dd1461049d578063d547cfb7146104da578063d7224ba014610505578063e985e9c514610530578063f2fde38b1461056d5761014b565b80636352211e1461036457806370a08231146103a1578063715018a6146103de5780638da5cb5b146103f557806395d89b4114610420578063a22cb4651461044b5761014b565b80632f745c59116101085780632f745c59146102725780633ccfd60b146102af57806340c10f19146102b957806342842e0e146102d55780634f6ccce7146102fe57806355f804b31461033b5761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806318160ddd1461021e57806323b872dd14610249575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190612bc4565b610596565b60405161018491906136a5565b60405180910390f35b34801561019957600080fd5b506101a26106e0565b6040516101af91906136c0565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da9190612c5b565b610772565b6040516101ec919061363e565b60405180910390f35b34801561020157600080fd5b5061021c60048036038101906102179190612b88565b6107f7565b005b34801561022a57600080fd5b50610233610910565b6040516102409190613a02565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190612a82565b61091a565b005b34801561027e57600080fd5b5061029960048036038101906102949190612b88565b61092a565b6040516102a69190613a02565b60405180910390f35b6102b7610b28565b005b6102d360048036038101906102ce9190612b88565b610be4565b005b3480156102e157600080fd5b506102fc60048036038101906102f79190612a82565b610d95565b005b34801561030a57600080fd5b5061032560048036038101906103209190612c5b565b610db5565b6040516103329190613a02565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190612c16565b610e08565b005b34801561037057600080fd5b5061038b60048036038101906103869190612c5b565b610e9a565b604051610398919061363e565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190612a1d565b610eb0565b6040516103d59190613a02565b60405180910390f35b3480156103ea57600080fd5b506103f3610f99565b005b34801561040157600080fd5b5061040a611021565b604051610417919061363e565b60405180910390f35b34801561042c57600080fd5b5061043561104a565b60405161044291906136c0565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190612b4c565b6110dc565b005b34801561048057600080fd5b5061049b60048036038101906104969190612ad1565b61125d565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190612c5b565b6112b9565b6040516104d191906136c0565b60405180910390f35b3480156104e657600080fd5b506104ef611360565b6040516104fc91906136c0565b60405180910390f35b34801561051157600080fd5b5061051a6113ee565b6040516105279190613a02565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190612a46565b6113f4565b60405161056491906136a5565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f9190612a1d565b611488565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106d957506106d882611580565b5b9050919050565b6060600280546106ef90613d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90613d4c565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b600061077d826115ea565b6107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b3906139c2565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080282610e9a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90613902565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108926115f8565b73ffffffffffffffffffffffffffffffffffffffff1614806108c157506108c0816108bb6115f8565b6113f4565b5b610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790613822565b60405180910390fd5b61090b838383611600565b505050565b6000600154905090565b6109258383836116b2565b505050565b600061093583610eb0565b8210610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096d906136e2565b60405180910390fd5b6000610980610910565b905060008060005b83811015610ae6576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610a7a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ad25786841415610ac3578195505050505050610b22565b8380610ace90613d7e565b9450505b508080610ade90613d7e565b915050610988565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990613982565b60405180910390fd5b92915050565b610b306115f8565b73ffffffffffffffffffffffffffffffffffffffff16610b4e611021565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90613882565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610be257600080fd5b565b6000610bee610910565b905060008211610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90613702565b60405180910390fd5b600a821115610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90613802565b60405180910390fd5b6105dc811015610ce0576105dc8183610c909190613b07565b1115610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890613782565b60405180910390fd5b610cdb8383611c6b565b610d90565b6115b38282610cef9190613b07565b1115610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d27906137c2565b60405180910390fd5b6611c37937e0800082610d439190613b8e565b341015610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613722565b60405180910390fd5b610d8f8383611c6b565b5b505050565b610db08383836040518060200160405280600081525061125d565b505050565b6000610dbf610910565b8210610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df7906137a2565b60405180910390fd5b819050919050565b610e106115f8565b73ffffffffffffffffffffffffffffffffffffffff16610e2e611021565b73ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90613882565b60405180910390fd5b818160099190610e95929190612825565b505050565b6000610ea582611c89565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890613842565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610fa16115f8565b73ffffffffffffffffffffffffffffffffffffffff16610fbf611021565b73ffffffffffffffffffffffffffffffffffffffff1614611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c90613882565b60405180910390fd5b61101f6000611e8c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461105990613d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461108590613d4c565b80156110d25780601f106110a7576101008083540402835291602001916110d2565b820191906000526020600020905b8154815290600101906020018083116110b557829003601f168201915b5050505050905090565b6110e46115f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611149906138c2565b60405180910390fd5b806007600061115f6115f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661120c6115f8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161125191906136a5565b60405180910390a35050565b6112688484846116b2565b61127484848484611f50565b6112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613922565b60405180910390fd5b50505050565b60606112c4826115ea565b611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa906138a2565b60405180910390fd5b600061130d6120e7565b9050600081511161132d5760405180602001604052806000815250611358565b8061133784612179565b60405160200161134892919061361a565b6040516020818303038152906040525b915050919050565b6009805461136d90613d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461139990613d4c565b80156113e65780601f106113bb576101008083540402835291602001916113e6565b820191906000526020600020905b8154815290600101906020018083116113c957829003601f168201915b505050505081565b60085481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114906115f8565b73ffffffffffffffffffffffffffffffffffffffff166114ae611021565b73ffffffffffffffffffffffffffffffffffffffff1614611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613882565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613742565b60405180910390fd5b61157d81611e8c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006116bd82611c89565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166116e46115f8565b73ffffffffffffffffffffffffffffffffffffffff16148061174057506117096115f8565b73ffffffffffffffffffffffffffffffffffffffff1661172884610772565b73ffffffffffffffffffffffffffffffffffffffff16145b8061175c575061175b82600001516117566115f8565b6113f4565b5b90508061179e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611795906138e2565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180790613862565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611877906137e2565b60405180910390fd5b61188d8585856001612326565b61189d6000848460000151611600565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661190b9190613be8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166119af9190613ac1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611ab59190613b07565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bfb57611b2b816115ea565b15611bfa576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c63868686600161232c565b505050505050565b611c85828260405180602001604052806000815250612332565b5050565b611c916128ab565b611c9a826115ea565b611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613762565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a8310611d3d5760017f000000000000000000000000000000000000000000000000000000000000000a84611d309190613c1c565b611d3a9190613b07565b90505b60008390505b818110611e4b576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611e3757809350505050611e87565b508080611e4390613d22565b915050611d43565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e906139a2565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611f718473ffffffffffffffffffffffffffffffffffffffff16612812565b156120da578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f9a6115f8565b8786866040518563ffffffff1660e01b8152600401611fbc9493929190613659565b602060405180830381600087803b158015611fd657600080fd5b505af192505050801561200757506040513d601f19601f820116820180604052508101906120049190612bed565b60015b61208a573d8060008114612037576040519150601f19603f3d011682016040523d82523d6000602084013e61203c565b606091505b50600081511415612082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207990613922565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120df565b600190505b949350505050565b6060600980546120f690613d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461212290613d4c565b801561216f5780601f106121445761010080835404028352916020019161216f565b820191906000526020600020905b81548152906001019060200180831161215257829003601f168201915b5050505050905090565b606060008214156121c1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612321565b600082905060005b600082146121f35780806121dc90613d7e565b915050600a826121ec9190613b5d565b91506121c9565b60008167ffffffffffffffff811115612235577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122675781602001600182028036833780820191505090505b5090505b6000851461231a576001826122809190613c1c565b9150600a8561228f9190613dc7565b603061229b9190613b07565b60f81b8183815181106122d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123139190613b5d565b945061226b565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613962565b60405180910390fd5b6123b2816115ea565b156123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990613942565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c906139e2565b60405180910390fd5b6124626000858386612326565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161255f9190613ac1565b6fffffffffffffffffffffffffffffffff1681526020018583602001516125869190613ac1565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156127f557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127956000888488611f50565b6127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb90613922565b60405180910390fd5b81806127df90613d7e565b92505080806127ed90613d7e565b915050612724565b508060018190555061280a600087858861232c565b505050505050565b600080823b905060008111915050919050565b82805461283190613d4c565b90600052602060002090601f016020900481019282612853576000855561289a565b82601f1061286c57803560ff191683800117855561289a565b8280016001018555821561289a579182015b8281111561289957823582559160200191906001019061287e565b5b5090506128a791906128e5565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156128fe5760008160009055506001016128e6565b5090565b600061291561291084613a4e565b613a1d565b90508281526020810184848401111561292d57600080fd5b612938848285613ce0565b509392505050565b60008135905061294f81613ec5565b92915050565b60008135905061296481613edc565b92915050565b60008135905061297981613ef3565b92915050565b60008151905061298e81613ef3565b92915050565b600082601f8301126129a557600080fd5b81356129b5848260208601612902565b91505092915050565b60008083601f8401126129d057600080fd5b8235905067ffffffffffffffff8111156129e957600080fd5b602083019150836001820283011115612a0157600080fd5b9250929050565b600081359050612a1781613f0a565b92915050565b600060208284031215612a2f57600080fd5b6000612a3d84828501612940565b91505092915050565b60008060408385031215612a5957600080fd5b6000612a6785828601612940565b9250506020612a7885828601612940565b9150509250929050565b600080600060608486031215612a9757600080fd5b6000612aa586828701612940565b9350506020612ab686828701612940565b9250506040612ac786828701612a08565b9150509250925092565b60008060008060808587031215612ae757600080fd5b6000612af587828801612940565b9450506020612b0687828801612940565b9350506040612b1787828801612a08565b925050606085013567ffffffffffffffff811115612b3457600080fd5b612b4087828801612994565b91505092959194509250565b60008060408385031215612b5f57600080fd5b6000612b6d85828601612940565b9250506020612b7e85828601612955565b9150509250929050565b60008060408385031215612b9b57600080fd5b6000612ba985828601612940565b9250506020612bba85828601612a08565b9150509250929050565b600060208284031215612bd657600080fd5b6000612be48482850161296a565b91505092915050565b600060208284031215612bff57600080fd5b6000612c0d8482850161297f565b91505092915050565b60008060208385031215612c2957600080fd5b600083013567ffffffffffffffff811115612c4357600080fd5b612c4f858286016129be565b92509250509250929050565b600060208284031215612c6d57600080fd5b6000612c7b84828501612a08565b91505092915050565b612c8d81613c50565b82525050565b612c9c81613c62565b82525050565b6000612cad82613a7e565b612cb78185613a94565b9350612cc7818560208601613cef565b612cd081613eb4565b840191505092915050565b6000612ce682613a89565b612cf08185613aa5565b9350612d00818560208601613cef565b612d0981613eb4565b840191505092915050565b6000612d1f82613a89565b612d298185613ab6565b9350612d39818560208601613cef565b80840191505092915050565b6000612d52602283613aa5565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612db8601f83613aa5565b91507f596f752073686f756c64206d696e74206d6f7265207468616e207a65726f2e006000830152602082019050919050565b6000612df8601983613aa5565b91507f4e6f7420656e6f756768206777656920696e2077616c6c6574000000000000006000830152602082019050919050565b6000612e38602683613aa5565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e9e602a83613aa5565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f04601f83613aa5565b91507f4e6f7420656e6f7567682066726565206d696e747320617661696c61626c65006000830152602082019050919050565b6000612f44602383613aa5565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612faa601283613aa5565b91507f52656163686564206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b6000612fea602583613aa5565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613050601183613aa5565b91507f4d6178206c696d697420726561636865640000000000000000000000000000006000830152602082019050919050565b6000613090603983613aa5565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006130f6602b83613aa5565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061315c602683613aa5565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131c2602083613aa5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613202602f83613aa5565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613268601a83613aa5565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006132a8603283613aa5565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b600061330e602283613aa5565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613374603383613aa5565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006133da601d83613aa5565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b600061341a602183613aa5565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613480602e83613aa5565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006134e6602f83613aa5565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061354c602d83613aa5565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b60006135b2602283613aa5565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61361481613cd6565b82525050565b60006136268285612d14565b91506136328284612d14565b91508190509392505050565b60006020820190506136536000830184612c84565b92915050565b600060808201905061366e6000830187612c84565b61367b6020830186612c84565b613688604083018561360b565b818103606083015261369a8184612ca2565b905095945050505050565b60006020820190506136ba6000830184612c93565b92915050565b600060208201905081810360008301526136da8184612cdb565b905092915050565b600060208201905081810360008301526136fb81612d45565b9050919050565b6000602082019050818103600083015261371b81612dab565b9050919050565b6000602082019050818103600083015261373b81612deb565b9050919050565b6000602082019050818103600083015261375b81612e2b565b9050919050565b6000602082019050818103600083015261377b81612e91565b9050919050565b6000602082019050818103600083015261379b81612ef7565b9050919050565b600060208201905081810360008301526137bb81612f37565b9050919050565b600060208201905081810360008301526137db81612f9d565b9050919050565b600060208201905081810360008301526137fb81612fdd565b9050919050565b6000602082019050818103600083015261381b81613043565b9050919050565b6000602082019050818103600083015261383b81613083565b9050919050565b6000602082019050818103600083015261385b816130e9565b9050919050565b6000602082019050818103600083015261387b8161314f565b9050919050565b6000602082019050818103600083015261389b816131b5565b9050919050565b600060208201905081810360008301526138bb816131f5565b9050919050565b600060208201905081810360008301526138db8161325b565b9050919050565b600060208201905081810360008301526138fb8161329b565b9050919050565b6000602082019050818103600083015261391b81613301565b9050919050565b6000602082019050818103600083015261393b81613367565b9050919050565b6000602082019050818103600083015261395b816133cd565b9050919050565b6000602082019050818103600083015261397b8161340d565b9050919050565b6000602082019050818103600083015261399b81613473565b9050919050565b600060208201905081810360008301526139bb816134d9565b9050919050565b600060208201905081810360008301526139db8161353f565b9050919050565b600060208201905081810360008301526139fb816135a5565b9050919050565b6000602082019050613a17600083018461360b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a4457613a43613e85565b5b8060405250919050565b600067ffffffffffffffff821115613a6957613a68613e85565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613acc82613c9a565b9150613ad783613c9a565b9250826fffffffffffffffffffffffffffffffff03821115613afc57613afb613df8565b5b828201905092915050565b6000613b1282613cd6565b9150613b1d83613cd6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b5257613b51613df8565b5b828201905092915050565b6000613b6882613cd6565b9150613b7383613cd6565b925082613b8357613b82613e27565b5b828204905092915050565b6000613b9982613cd6565b9150613ba483613cd6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bdd57613bdc613df8565b5b828202905092915050565b6000613bf382613c9a565b9150613bfe83613c9a565b925082821015613c1157613c10613df8565b5b828203905092915050565b6000613c2782613cd6565b9150613c3283613cd6565b925082821015613c4557613c44613df8565b5b828203905092915050565b6000613c5b82613cb6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d0d578082015181840152602081019050613cf2565b83811115613d1c576000848401525b50505050565b6000613d2d82613cd6565b91506000821415613d4157613d40613df8565b5b600182039050919050565b60006002820490506001821680613d6457607f821691505b60208210811415613d7857613d77613e56565b5b50919050565b6000613d8982613cd6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dbc57613dbb613df8565b5b600182019050919050565b6000613dd282613cd6565b9150613ddd83613cd6565b925082613ded57613dec613e27565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613ece81613c50565b8114613ed957600080fd5b50565b613ee581613c62565b8114613ef057600080fd5b50565b613efc81613c6e565b8114613f0757600080fd5b50565b613f1381613cd6565b8114613f1e57600080fd5b5056fea26469706673582212205bd89a822015dc96deb4fec00eea7e3d4689861f0624068f48e0fc5221bfae2564736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000000a

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10

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


Deployed Bytecode Sourcemap

38268:1418:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23708:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25434:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26959:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26522:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22272:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27809:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22900:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39331:120;;;:::i;:::-;;38657:666;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28014:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22435:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39580:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25257:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24134:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37571:94;;;;;;;;;;;;;:::i;:::-;;36920:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25589:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27227:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28234:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25750:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38538:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32565:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27564:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37820:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23708:370;23835:4;23880:25;23865:40;;;:11;:40;;;;:99;;;;23931:33;23916:48;;;:11;:48;;;;23865:99;:160;;;;23990:35;23975:50;;;:11;:50;;;;23865:160;:207;;;;24036:36;24060:11;24036:23;:36::i;:::-;23865:207;23851:221;;23708:370;;;:::o;25434:94::-;25488:13;25517:5;25510:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25434:94;:::o;26959:204::-;27027:7;27051:16;27059:7;27051;:16::i;:::-;27043:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27133:15;:24;27149:7;27133:24;;;;;;;;;;;;;;;;;;;;;27126:31;;26959:204;;;:::o;26522:379::-;26591:13;26607:24;26623:7;26607:15;:24::i;:::-;26591:40;;26652:5;26646:11;;:2;:11;;;;26638:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26737:5;26721:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26746:37;26763:5;26770:12;:10;:12::i;:::-;26746:16;:37::i;:::-;26721:62;26705:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;26867:28;26876:2;26880:7;26889:5;26867:8;:28::i;:::-;26522:379;;;:::o;22272:94::-;22325:7;22348:12;;22341:19;;22272:94;:::o;27809:142::-;27917:28;27927:4;27933:2;27937:7;27917:9;:28::i;:::-;27809:142;;;:::o;22900:744::-;23009:7;23044:16;23054:5;23044:9;:16::i;:::-;23036:5;:24;23028:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23106:22;23131:13;:11;:13::i;:::-;23106:38;;23151:19;23181:25;23231:9;23226:350;23250:14;23246:1;:18;23226:350;;;23280:31;23314:11;:14;23326:1;23314:14;;;;;;;;;;;23280:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23367:1;23341:28;;:9;:14;;;:28;;;23337:89;;23402:9;:14;;;23382:34;;23337:89;23459:5;23438:26;;:17;:26;;;23434:135;;;23496:5;23481:11;:20;23477:59;;;23523:1;23516:8;;;;;;;;;23477:59;23546:13;;;;;:::i;:::-;;;;23434:135;23226:350;23266:3;;;;;:::i;:::-;;;;23226:350;;;;23582:56;;;;;;;;;;:::i;:::-;;;;;;;;22900:744;;;;;:::o;39331:120::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39403:10:::1;39395:24;;:47;39420:21;39395:47;;;;;;;;;;;;;;;;;;;;;;;39387:56;;;::::0;::::1;;39331:120::o:0;38657:666::-;38731:14;38748:13;:11;:13::i;:::-;38731:30;;38794:1;38780:11;:15;38772:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38454:2;38849:11;:36;;38841:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38359:4;38920:6;:19;38917:399;;;38359:4;38977:6;38963:11;:20;;;;:::i;:::-;:34;;38955:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39047:26;39057:3;39061:11;39047:9;:26::i;:::-;38917:399;;;38402:4;39123:11;39114:6;:20;;;;:::i;:::-;:36;;39106:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38495:11;39208;:26;;;;:::i;:::-;39195:9;:39;;39187:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39278:26;39288:3;39292:11;39278:9;:26::i;:::-;38917:399;38657:666;;;:::o;28014:157::-;28126:39;28143:4;28149:2;28153:7;28126:39;;;;;;;;;;;;:16;:39::i;:::-;28014:157;;;:::o;22435:177::-;22502:7;22534:13;:11;:13::i;:::-;22526:5;:21;22518:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22601:5;22594:12;;22435:177;;;:::o;39580:103::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39668:7:::1;;39653:12;:22;;;;;;;:::i;:::-;;39580:103:::0;;:::o;25257:118::-;25321:7;25344:20;25356:7;25344:11;:20::i;:::-;:25;;;25337:32;;25257:118;;;:::o;24134:211::-;24198:7;24239:1;24222:19;;:5;:19;;;;24214:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24311:12;:19;24324:5;24311:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24303:36;;24296:43;;24134:211;;;:::o;37571:94::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37636:21:::1;37654:1;37636:9;:21::i;:::-;37571:94::o:0;36920:87::-;36966:7;36993:6;;;;;;;;;;;36986:13;;36920:87;:::o;25589:98::-;25645:13;25674:7;25667:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25589:98;:::o;27227:274::-;27330:12;:10;:12::i;:::-;27318:24;;:8;:24;;;;27310:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27427:8;27382:18;:32;27401:12;:10;:12::i;:::-;27382:32;;;;;;;;;;;;;;;:42;27415:8;27382:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27476:8;27447:48;;27462:12;:10;:12::i;:::-;27447:48;;;27486:8;27447:48;;;;;;:::i;:::-;;;;;;;;27227:274;;:::o;28234:311::-;28371:28;28381:4;28387:2;28391:7;28371:9;:28::i;:::-;28422:48;28445:4;28451:2;28455:7;28464:5;28422:22;:48::i;:::-;28406:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;28234:311;;;;:::o;25750:394::-;25848:13;25889:16;25897:7;25889;:16::i;:::-;25873:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25979:21;26003:10;:8;:10::i;:::-;25979:34;;26058:1;26040:7;26034:21;:25;:104;;;;;;;;;;;;;;;;;26095:7;26104:18;:7;:16;:18::i;:::-;26078:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26034:104;26020:118;;;25750:394;;;:::o;38538:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32565:43::-;;;;:::o;27564:186::-;27686:4;27709:18;:25;27728:5;27709:25;;;;;;;;;;;;;;;:35;27735:8;27709:35;;;;;;;;;;;;;;;;;;;;;;;;;27702:42;;27564:186;;;;:::o;37820:192::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37929:1:::1;37909:22;;:8;:22;;;;37901:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37985:19;37995:8;37985:9;:19::i;:::-;37820:192:::0;:::o;12776:157::-;12861:4;12900:25;12885:40;;;:11;:40;;;;12878:47;;12776:157;;;:::o;28784:105::-;28841:4;28871:12;;28861:7;:22;28854:29;;28784:105;;;:::o;20090:98::-;20143:7;20170:10;20163:17;;20090:98;:::o;32387:172::-;32511:2;32484:15;:24;32500:7;32484:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32545:7;32541:2;32525:28;;32534:5;32525:28;;;;;;;;;;;;32387:172;;;:::o;30752:1529::-;30849:35;30887:20;30899:7;30887:11;:20::i;:::-;30849:58;;30916:22;30958:13;:18;;;30942:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;31011:12;:10;:12::i;:::-;30987:36;;:20;30999:7;30987:11;:20::i;:::-;:36;;;30942:81;:142;;;;31034:50;31051:13;:18;;;31071:12;:10;:12::i;:::-;31034:16;:50::i;:::-;30942:142;30916:169;;31110:17;31094:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31242:4;31220:26;;:13;:18;;;:26;;;31204:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;31331:1;31317:16;;:2;:16;;;;31309:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31384:43;31406:4;31412:2;31416:7;31425:1;31384:21;:43::i;:::-;31484:49;31501:1;31505:7;31514:13;:18;;;31484:8;:49::i;:::-;31572:1;31542:12;:18;31555:4;31542:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31608:1;31580:12;:16;31593:2;31580:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31639:43;;;;;;;;31654:2;31639:43;;;;;;31665:15;31639:43;;;;;31616:11;:20;31628:7;31616:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31910:19;31942:1;31932:7;:11;;;;:::i;:::-;31910:33;;31995:1;31954:43;;:11;:24;31966:11;31954:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;31950:236;;;32012:20;32020:11;32012:7;:20::i;:::-;32008:171;;;32072:97;;;;;;;;32099:13;:18;;;32072:97;;;;;;32130:13;:28;;;32072:97;;;;;32045:11;:24;32057:11;32045:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32008:171;31950:236;32218:7;32214:2;32199:27;;32208:4;32199:27;;;;;;;;;;;;32233:42;32254:4;32260:2;32264:7;32273:1;32233:20;:42::i;:::-;30752:1529;;;;;;:::o;28895:98::-;28960:27;28970:2;28974:8;28960:27;;;;;;;;;;;;:9;:27::i;:::-;28895:98;;:::o;24597:606::-;24673:21;;:::i;:::-;24714:16;24722:7;24714;:16::i;:::-;24706:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24786:26;24834:12;24823:7;:23;24819:93;;24903:1;24888:12;24878:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;24857:47;;24819:93;24925:12;24940:7;24925:22;;24920:212;24957:18;24949:4;:26;24920:212;;24994:31;25028:11;:17;25040:4;25028:17;;;;;;;;;;;24994:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25084:1;25058:28;;:9;:14;;;:28;;;25054:71;;25106:9;25099:16;;;;;;;25054:71;24920:212;24977:6;;;;;:::i;:::-;;;;24920:212;;;;25140:57;;;;;;;;;;:::i;:::-;;;;;;;;24597:606;;;;:::o;38020:173::-;38076:16;38095:6;;;;;;;;;;;38076:25;;38121:8;38112:6;;:17;;;;;;;;;;;;;;;;;;38176:8;38145:40;;38166:8;38145:40;;;;;;;;;;;;38020:173;;:::o;34098:690::-;34235:4;34252:15;:2;:13;;;:15::i;:::-;34248:535;;;34307:2;34291:36;;;34328:12;:10;:12::i;:::-;34342:4;34348:7;34357:5;34291:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34278:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34539:1;34522:6;:13;:18;34518:215;;;34555:61;;;;;;;;;;:::i;:::-;;;;;;;;34518:215;34701:6;34695:13;34686:6;34682:2;34678:15;34671:38;34278:464;34423:45;;;34413:55;;;:6;:55;;;;34406:62;;;;;34248:535;34771:4;34764:11;;34098:690;;;;;;;:::o;39459:113::-;39519:13;39552:12;39545:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39459:113;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;35250:141::-;;;;;:::o;35777:140::-;;;;;:::o;29248:1272::-;29353:20;29376:12;;29353:35;;29417:1;29403:16;;:2;:16;;;;29395:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29594:21;29602:12;29594:7;:21::i;:::-;29593:22;29585:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:12;29664:8;:24;;29656:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29736:61;29766:1;29770:2;29774:12;29788:8;29736:21;:61::i;:::-;29806:30;29839:12;:16;29852:2;29839:16;;;;;;;;;;;;;;;29806:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29881:119;;;;;;;;29931:8;29901:11;:19;;;:39;;;;:::i;:::-;29881:119;;;;;;29984:8;29949:11;:24;;;:44;;;;:::i;:::-;29881:119;;;;;29862:12;:16;29875:2;29862:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30035:43;;;;;;;;30050:2;30035:43;;;;;;30061:15;30035:43;;;;;30007:11;:25;30019:12;30007:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30087:20;30110:12;30087:35;;30136:9;30131:281;30155:8;30151:1;:12;30131:281;;;30209:12;30205:2;30184:38;;30201:1;30184:38;;;;;;;;;;;;30249:59;30280:1;30284:2;30288:12;30302:5;30249:22;:59::i;:::-;30231:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;30390:14;;;;;:::i;:::-;;;;30165:3;;;;;:::i;:::-;;;;30131:281;;;;30435:12;30420;:27;;;;30454:60;30483:1;30487:2;30491:12;30505:8;30454:20;:60::i;:::-;29248:1272;;;;;;:::o;2836:387::-;2896:4;3104:12;3171:7;3159:20;3151:28;;3214:1;3207:4;:8;3200:15;;;2836: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:118::-;5920:24;5938:5;5920:24;:::i;:::-;5915:3;5908:37;5898:53;;:::o;5957:109::-;6038:21;6053:5;6038:21;:::i;:::-;6033:3;6026:34;6016:50;;:::o;6072:360::-;;6186:38;6218:5;6186:38;:::i;:::-;6240:70;6303:6;6298:3;6240:70;:::i;:::-;6233:77;;6319:52;6364:6;6359:3;6352:4;6345:5;6341:16;6319:52;:::i;:::-;6396:29;6418:6;6396:29;:::i;:::-;6391:3;6387:39;6380:46;;6162:270;;;;;:::o;6438:364::-;;6554:39;6587:5;6554:39;:::i;:::-;6609:71;6673:6;6668:3;6609:71;:::i;:::-;6602:78;;6689:52;6734:6;6729:3;6722:4;6715:5;6711:16;6689:52;:::i;:::-;6766:29;6788:6;6766:29;:::i;:::-;6761:3;6757:39;6750:46;;6530:272;;;;;:::o;6808:377::-;;6942:39;6975:5;6942:39;:::i;:::-;6997:89;7079:6;7074:3;6997:89;:::i;:::-;6990:96;;7095:52;7140:6;7135:3;7128:4;7121:5;7117:16;7095:52;:::i;:::-;7172:6;7167:3;7163:16;7156:23;;6918:267;;;;;:::o;7191:366::-;;7354:67;7418:2;7413:3;7354:67;:::i;:::-;7347:74;;7451:34;7447:1;7442:3;7438:11;7431:55;7517:4;7512:2;7507:3;7503:12;7496:26;7548:2;7543:3;7539:12;7532:19;;7337:220;;;:::o;7563:329::-;;7726:67;7790:2;7785:3;7726:67;:::i;:::-;7719:74;;7823:33;7819:1;7814:3;7810:11;7803:54;7883:2;7878:3;7874:12;7867:19;;7709:183;;;:::o;7898:323::-;;8061:67;8125:2;8120:3;8061:67;:::i;:::-;8054:74;;8158:27;8154:1;8149:3;8145:11;8138:48;8212:2;8207:3;8203:12;8196:19;;8044:177;;;:::o;8227:370::-;;8390:67;8454:2;8449:3;8390:67;:::i;:::-;8383:74;;8487:34;8483:1;8478:3;8474:11;8467:55;8553:8;8548:2;8543:3;8539:12;8532:30;8588:2;8583:3;8579:12;8572:19;;8373:224;;;:::o;8603:374::-;;8766:67;8830:2;8825:3;8766:67;:::i;:::-;8759:74;;8863:34;8859:1;8854:3;8850:11;8843:55;8929:12;8924:2;8919:3;8915:12;8908:34;8968:2;8963:3;8959:12;8952:19;;8749:228;;;:::o;8983:329::-;;9146:67;9210:2;9205:3;9146:67;:::i;:::-;9139:74;;9243:33;9239:1;9234:3;9230:11;9223:54;9303:2;9298:3;9294:12;9287:19;;9129:183;;;:::o;9318:367::-;;9481:67;9545:2;9540:3;9481:67;:::i;:::-;9474:74;;9578:34;9574:1;9569:3;9565:11;9558:55;9644:5;9639:2;9634:3;9630:12;9623:27;9676:2;9671:3;9667:12;9660:19;;9464:221;;;:::o;9691:316::-;;9854:67;9918:2;9913:3;9854:67;:::i;:::-;9847:74;;9951:20;9947:1;9942:3;9938:11;9931:41;9998:2;9993:3;9989:12;9982:19;;9837:170;;;:::o;10013:369::-;;10176:67;10240:2;10235:3;10176:67;:::i;:::-;10169:74;;10273:34;10269:1;10264:3;10260:11;10253:55;10339:7;10334:2;10329:3;10325:12;10318:29;10373:2;10368:3;10364:12;10357:19;;10159:223;;;:::o;10388:315::-;;10551:67;10615:2;10610:3;10551:67;:::i;:::-;10544:74;;10648:19;10644:1;10639:3;10635:11;10628:40;10694:2;10689:3;10685:12;10678:19;;10534:169;;;:::o;10709:389::-;;10872:67;10936:2;10931:3;10872:67;:::i;:::-;10865:74;;10969:34;10965:1;10960:3;10956:11;10949:55;11035:27;11030:2;11025:3;11021:12;11014:49;11089:2;11084:3;11080:12;11073:19;;10855:243;;;:::o;11104:375::-;;11267:67;11331:2;11326:3;11267:67;:::i;:::-;11260:74;;11364:34;11360:1;11355:3;11351:11;11344:55;11430:13;11425:2;11420:3;11416:12;11409:35;11470:2;11465:3;11461:12;11454:19;;11250:229;;;:::o;11485:370::-;;11648:67;11712:2;11707:3;11648:67;:::i;:::-;11641:74;;11745:34;11741:1;11736:3;11732:11;11725:55;11811:8;11806:2;11801:3;11797:12;11790:30;11846:2;11841:3;11837:12;11830:19;;11631:224;;;:::o;11861:330::-;;12024:67;12088:2;12083:3;12024:67;:::i;:::-;12017:74;;12121:34;12117:1;12112:3;12108:11;12101:55;12182:2;12177:3;12173:12;12166:19;;12007:184;;;:::o;12197:379::-;;12360:67;12424:2;12419:3;12360:67;:::i;:::-;12353:74;;12457:34;12453:1;12448:3;12444:11;12437:55;12523:17;12518:2;12513:3;12509:12;12502:39;12567:2;12562:3;12558:12;12551:19;;12343:233;;;:::o;12582:324::-;;12745:67;12809:2;12804:3;12745:67;:::i;:::-;12738:74;;12842:28;12838:1;12833:3;12829:11;12822:49;12897:2;12892:3;12888:12;12881:19;;12728:178;;;:::o;12912:382::-;;13075:67;13139:2;13134:3;13075:67;:::i;:::-;13068:74;;13172:34;13168:1;13163:3;13159:11;13152:55;13238:20;13233:2;13228:3;13224:12;13217:42;13285:2;13280:3;13276:12;13269:19;;13058:236;;;:::o;13300:366::-;;13463:67;13527:2;13522:3;13463:67;:::i;:::-;13456:74;;13560:34;13556:1;13551:3;13547:11;13540:55;13626:4;13621:2;13616:3;13612:12;13605:26;13657:2;13652:3;13648:12;13641:19;;13446:220;;;:::o;13672:383::-;;13835:67;13899:2;13894:3;13835:67;:::i;:::-;13828:74;;13932:34;13928:1;13923:3;13919:11;13912:55;13998:21;13993:2;13988:3;13984:12;13977:43;14046:2;14041:3;14037:12;14030:19;;13818:237;;;:::o;14061:327::-;;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14321:31;14317:1;14312:3;14308:11;14301:52;14379:2;14374:3;14370:12;14363:19;;14207:181;;;:::o;14394:365::-;;14557:67;14621:2;14616:3;14557:67;:::i;:::-;14550:74;;14654:34;14650:1;14645:3;14641:11;14634:55;14720:3;14715:2;14710:3;14706:12;14699:25;14750:2;14745:3;14741:12;14734:19;;14540:219;;;:::o;14765:378::-;;14928:67;14992:2;14987:3;14928:67;:::i;:::-;14921:74;;15025:34;15021:1;15016:3;15012:11;15005:55;15091:16;15086:2;15081:3;15077:12;15070:38;15134:2;15129:3;15125:12;15118:19;;14911:232;;;:::o;15149:379::-;;15312:67;15376:2;15371:3;15312:67;:::i;:::-;15305:74;;15409:34;15405:1;15400:3;15396:11;15389:55;15475:17;15470:2;15465:3;15461:12;15454:39;15519:2;15514:3;15510:12;15503:19;;15295:233;;;:::o;15534:377::-;;15697:67;15761:2;15756:3;15697:67;:::i;:::-;15690:74;;15794:34;15790:1;15785:3;15781:11;15774:55;15860:15;15855:2;15850:3;15846:12;15839:37;15902:2;15897:3;15893:12;15886:19;;15680:231;;;:::o;15917:366::-;;16080:67;16144:2;16139:3;16080:67;:::i;:::-;16073:74;;16177:34;16173:1;16168:3;16164:11;16157:55;16243:4;16238:2;16233:3;16229:12;16222:26;16274:2;16269:3;16265:12;16258:19;;16063:220;;;:::o;16289:118::-;16376:24;16394:5;16376:24;:::i;:::-;16371:3;16364:37;16354:53;;:::o;16413:435::-;;16615:95;16706:3;16697:6;16615:95;:::i;:::-;16608:102;;16727:95;16818:3;16809:6;16727:95;:::i;:::-;16720:102;;16839:3;16832:10;;16597:251;;;;;:::o;16854:222::-;;16985:2;16974:9;16970:18;16962:26;;16998:71;17066:1;17055:9;17051:17;17042:6;16998:71;:::i;:::-;16952:124;;;;:::o;17082:640::-;;17315:3;17304:9;17300:19;17292:27;;17329:71;17397:1;17386:9;17382:17;17373:6;17329:71;:::i;:::-;17410:72;17478:2;17467:9;17463:18;17454:6;17410:72;:::i;:::-;17492;17560:2;17549:9;17545:18;17536:6;17492:72;:::i;:::-;17611:9;17605:4;17601:20;17596:2;17585:9;17581:18;17574:48;17639:76;17710:4;17701:6;17639:76;:::i;:::-;17631:84;;17282:440;;;;;;;:::o;17728:210::-;;17853:2;17842:9;17838:18;17830:26;;17866:65;17928:1;17917:9;17913:17;17904:6;17866:65;:::i;:::-;17820:118;;;;:::o;17944:313::-;;18095:2;18084:9;18080:18;18072:26;;18144:9;18138:4;18134:20;18130:1;18119:9;18115:17;18108:47;18172:78;18245:4;18236:6;18172:78;:::i;:::-;18164:86;;18062:195;;;;:::o;18263:419::-;;18467:2;18456:9;18452:18;18444:26;;18516:9;18510:4;18506:20;18502:1;18491:9;18487:17;18480:47;18544:131;18670:4;18544:131;:::i;:::-;18536:139;;18434:248;;;:::o;18688:419::-;;18892:2;18881:9;18877:18;18869:26;;18941:9;18935:4;18931:20;18927:1;18916:9;18912:17;18905:47;18969:131;19095:4;18969:131;:::i;:::-;18961:139;;18859:248;;;:::o;19113:419::-;;19317:2;19306:9;19302:18;19294:26;;19366:9;19360:4;19356:20;19352:1;19341:9;19337:17;19330:47;19394:131;19520:4;19394:131;:::i;:::-;19386:139;;19284:248;;;:::o;19538:419::-;;19742:2;19731:9;19727:18;19719:26;;19791:9;19785:4;19781:20;19777:1;19766:9;19762:17;19755:47;19819:131;19945:4;19819:131;:::i;:::-;19811:139;;19709:248;;;:::o;19963:419::-;;20167:2;20156:9;20152:18;20144:26;;20216:9;20210:4;20206:20;20202:1;20191:9;20187:17;20180:47;20244:131;20370:4;20244:131;:::i;:::-;20236:139;;20134:248;;;:::o;20388:419::-;;20592:2;20581:9;20577:18;20569:26;;20641:9;20635:4;20631:20;20627:1;20616:9;20612:17;20605:47;20669:131;20795:4;20669:131;:::i;:::-;20661:139;;20559:248;;;:::o;20813:419::-;;21017:2;21006:9;21002:18;20994:26;;21066:9;21060:4;21056:20;21052:1;21041:9;21037:17;21030:47;21094:131;21220:4;21094:131;:::i;:::-;21086:139;;20984:248;;;:::o;21238:419::-;;21442:2;21431:9;21427:18;21419:26;;21491:9;21485:4;21481:20;21477:1;21466:9;21462:17;21455:47;21519:131;21645:4;21519:131;:::i;:::-;21511:139;;21409:248;;;:::o;21663:419::-;;21867:2;21856:9;21852:18;21844:26;;21916:9;21910:4;21906:20;21902:1;21891:9;21887:17;21880:47;21944:131;22070:4;21944:131;:::i;:::-;21936:139;;21834:248;;;:::o;22088:419::-;;22292:2;22281:9;22277:18;22269:26;;22341:9;22335:4;22331:20;22327:1;22316:9;22312:17;22305:47;22369:131;22495:4;22369:131;:::i;:::-;22361:139;;22259:248;;;:::o;22513:419::-;;22717:2;22706:9;22702:18;22694:26;;22766:9;22760:4;22756:20;22752:1;22741:9;22737:17;22730:47;22794:131;22920:4;22794:131;:::i;:::-;22786:139;;22684:248;;;:::o;22938:419::-;;23142:2;23131:9;23127:18;23119:26;;23191:9;23185:4;23181:20;23177:1;23166:9;23162:17;23155:47;23219:131;23345:4;23219:131;:::i;:::-;23211:139;;23109:248;;;:::o;23363:419::-;;23567:2;23556:9;23552:18;23544:26;;23616:9;23610:4;23606:20;23602:1;23591:9;23587:17;23580:47;23644:131;23770:4;23644:131;:::i;:::-;23636:139;;23534:248;;;:::o;23788:419::-;;23992:2;23981:9;23977:18;23969:26;;24041:9;24035:4;24031:20;24027:1;24016:9;24012:17;24005:47;24069:131;24195:4;24069:131;:::i;:::-;24061:139;;23959:248;;;:::o;24213:419::-;;24417:2;24406:9;24402:18;24394:26;;24466:9;24460:4;24456:20;24452:1;24441:9;24437:17;24430:47;24494:131;24620:4;24494:131;:::i;:::-;24486:139;;24384:248;;;:::o;24638:419::-;;24842:2;24831:9;24827:18;24819:26;;24891:9;24885:4;24881:20;24877:1;24866:9;24862:17;24855:47;24919:131;25045:4;24919:131;:::i;:::-;24911:139;;24809:248;;;:::o;25063:419::-;;25267:2;25256:9;25252:18;25244:26;;25316:9;25310:4;25306:20;25302:1;25291:9;25287:17;25280:47;25344:131;25470:4;25344:131;:::i;:::-;25336:139;;25234:248;;;:::o;25488:419::-;;25692:2;25681:9;25677:18;25669:26;;25741:9;25735:4;25731:20;25727:1;25716:9;25712:17;25705:47;25769:131;25895:4;25769:131;:::i;:::-;25761:139;;25659:248;;;:::o;25913:419::-;;26117:2;26106:9;26102:18;26094:26;;26166:9;26160:4;26156:20;26152:1;26141:9;26137:17;26130:47;26194:131;26320:4;26194:131;:::i;:::-;26186:139;;26084:248;;;:::o;26338:419::-;;26542:2;26531:9;26527:18;26519:26;;26591:9;26585:4;26581:20;26577:1;26566:9;26562:17;26555:47;26619:131;26745:4;26619:131;:::i;:::-;26611:139;;26509:248;;;:::o;26763:419::-;;26967:2;26956:9;26952:18;26944:26;;27016:9;27010:4;27006:20;27002:1;26991:9;26987:17;26980:47;27044:131;27170:4;27044:131;:::i;:::-;27036:139;;26934:248;;;:::o;27188:419::-;;27392:2;27381:9;27377:18;27369:26;;27441:9;27435:4;27431:20;27427:1;27416:9;27412:17;27405:47;27469:131;27595:4;27469:131;:::i;:::-;27461:139;;27359:248;;;:::o;27613:419::-;;27817:2;27806:9;27802:18;27794:26;;27866:9;27860:4;27856:20;27852:1;27841:9;27837:17;27830:47;27894:131;28020:4;27894:131;:::i;:::-;27886:139;;27784:248;;;:::o;28038:419::-;;28242:2;28231:9;28227:18;28219:26;;28291:9;28285:4;28281:20;28277:1;28266:9;28262:17;28255:47;28319:131;28445:4;28319:131;:::i;:::-;28311:139;;28209:248;;;:::o;28463:419::-;;28667:2;28656:9;28652:18;28644:26;;28716:9;28710:4;28706:20;28702:1;28691:9;28687:17;28680:47;28744:131;28870:4;28744:131;:::i;:::-;28736:139;;28634:248;;;:::o;28888:222::-;;29019:2;29008:9;29004:18;28996:26;;29032:71;29100:1;29089:9;29085:17;29076:6;29032:71;:::i;:::-;28986:124;;;;:::o;29116:283::-;;29182:2;29176:9;29166:19;;29224:4;29216:6;29212:17;29331:6;29319:10;29316:22;29295:18;29283:10;29280:34;29277:62;29274:2;;;29342:18;;:::i;:::-;29274:2;29382:10;29378:2;29371:22;29156:243;;;;:::o;29405:331::-;;29556:18;29548:6;29545:30;29542:2;;;29578:18;;:::i;:::-;29542:2;29663:4;29659:9;29652:4;29644:6;29640:17;29636:33;29628:41;;29724:4;29718;29714:15;29706:23;;29471:265;;;:::o;29742:98::-;;29827:5;29821:12;29811:22;;29800:40;;;:::o;29846:99::-;;29932:5;29926:12;29916:22;;29905:40;;;:::o;29951:168::-;;30068:6;30063:3;30056:19;30108:4;30103:3;30099:14;30084:29;;30046:73;;;;:::o;30125:169::-;;30243:6;30238:3;30231:19;30283:4;30278:3;30274:14;30259:29;;30221:73;;;;:::o;30300:148::-;;30439:3;30424:18;;30414:34;;;;:::o;30454:273::-;;30513:20;30531:1;30513:20;:::i;:::-;30508:25;;30547:20;30565:1;30547:20;:::i;:::-;30542:25;;30669:1;30633:34;30629:42;30626:1;30623:49;30620:2;;;30675:18;;:::i;:::-;30620:2;30719:1;30716;30712:9;30705:16;;30498:229;;;;:::o;30733:305::-;;30792:20;30810:1;30792:20;:::i;:::-;30787:25;;30826:20;30844:1;30826:20;:::i;:::-;30821:25;;30980:1;30912:66;30908:74;30905:1;30902:81;30899:2;;;30986:18;;:::i;:::-;30899:2;31030:1;31027;31023:9;31016:16;;30777:261;;;;:::o;31044:185::-;;31101:20;31119:1;31101:20;:::i;:::-;31096:25;;31135:20;31153:1;31135:20;:::i;:::-;31130:25;;31174:1;31164:2;;31179:18;;:::i;:::-;31164:2;31221:1;31218;31214:9;31209:14;;31086:143;;;;:::o;31235:348::-;;31298:20;31316:1;31298:20;:::i;:::-;31293:25;;31332:20;31350:1;31332:20;:::i;:::-;31327:25;;31520:1;31452:66;31448:74;31445:1;31442:81;31437:1;31430:9;31423:17;31419:105;31416:2;;;31527:18;;:::i;:::-;31416:2;31575:1;31572;31568:9;31557:20;;31283:300;;;;:::o;31589:191::-;;31649:20;31667:1;31649:20;:::i;:::-;31644:25;;31683:20;31701:1;31683:20;:::i;:::-;31678:25;;31722:1;31719;31716:8;31713:2;;;31727:18;;:::i;:::-;31713:2;31772:1;31769;31765:9;31757:17;;31634:146;;;;:::o;31786:191::-;;31846:20;31864:1;31846:20;:::i;:::-;31841:25;;31880:20;31898:1;31880:20;:::i;:::-;31875:25;;31919:1;31916;31913:8;31910:2;;;31924:18;;:::i;:::-;31910:2;31969:1;31966;31962:9;31954:17;;31831:146;;;;:::o;31983:96::-;;32049:24;32067:5;32049:24;:::i;:::-;32038:35;;32028:51;;;:::o;32085:90::-;;32162:5;32155:13;32148:21;32137:32;;32127:48;;;:::o;32181:149::-;;32257:66;32250:5;32246:78;32235:89;;32225:105;;;:::o;32336:118::-;;32413:34;32406:5;32402:46;32391:57;;32381:73;;;:::o;32460:126::-;;32537:42;32530:5;32526:54;32515:65;;32505:81;;;:::o;32592:77::-;;32658:5;32647:16;;32637:32;;;:::o;32675:154::-;32759:6;32754:3;32749;32736:30;32821:1;32812:6;32807:3;32803:16;32796:27;32726:103;;;:::o;32835:307::-;32903:1;32913:113;32927:6;32924:1;32921:13;32913:113;;;33012:1;33007:3;33003:11;32997:18;32993:1;32988:3;32984:11;32977:39;32949:2;32946:1;32942:10;32937:15;;32913:113;;;33044:6;33041:1;33038:13;33035:2;;;33124:1;33115:6;33110:3;33106:16;33099:27;33035:2;32884:258;;;;:::o;33148:171::-;;33210:24;33228:5;33210:24;:::i;:::-;33201:33;;33256:4;33249:5;33246:15;33243:2;;;33264:18;;:::i;:::-;33243:2;33311:1;33304:5;33300:13;33293:20;;33191:128;;;:::o;33325:320::-;;33406:1;33400:4;33396:12;33386:22;;33453:1;33447:4;33443:12;33474:18;33464:2;;33530:4;33522:6;33518:17;33508:27;;33464:2;33592;33584:6;33581:14;33561:18;33558:38;33555:2;;;33611:18;;:::i;:::-;33555:2;33376:269;;;;:::o;33651:233::-;;33713:24;33731:5;33713:24;:::i;:::-;33704:33;;33759:66;33752:5;33749:77;33746:2;;;33829:18;;:::i;:::-;33746:2;33876:1;33869:5;33865:13;33858:20;;33694:190;;;:::o;33890:176::-;;33939:20;33957:1;33939:20;:::i;:::-;33934:25;;33973:20;33991:1;33973:20;:::i;:::-;33968:25;;34012:1;34002:2;;34017:18;;:::i;:::-;34002:2;34058:1;34055;34051:9;34046:14;;33924:142;;;;:::o;34072:180::-;34120:77;34117:1;34110:88;34217:4;34214:1;34207:15;34241:4;34238:1;34231:15;34258:180;34306:77;34303:1;34296:88;34403:4;34400:1;34393:15;34427:4;34424:1;34417:15;34444:180;34492:77;34489:1;34482:88;34589:4;34586:1;34579:15;34613:4;34610:1;34603:15;34630:180;34678:77;34675:1;34668:88;34775:4;34772:1;34765:15;34799:4;34796:1;34789:15;34816:102;;34908:2;34904:7;34899:2;34892:5;34888:14;34884:28;34874:38;;34864:54;;;:::o;34924:122::-;34997:24;35015:5;34997:24;:::i;:::-;34990:5;34987:35;34977:2;;35036:1;35033;35026:12;34977:2;34967:79;:::o;35052:116::-;35122:21;35137:5;35122:21;:::i;:::-;35115:5;35112:32;35102:2;;35158:1;35155;35148:12;35102:2;35092:76;:::o;35174:120::-;35246:23;35263:5;35246:23;:::i;:::-;35239:5;35236:34;35226:2;;35284:1;35281;35274:12;35226:2;35216:78;:::o;35300:122::-;35373:24;35391:5;35373:24;:::i;:::-;35366:5;35363:35;35353:2;;35412:1;35409;35402:12;35353:2;35343:79;:::o

Swarm Source

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