ETH Price: $3,393.53 (-1.42%)
Gas: 2 Gwei

Token

FeetnotFeetDAO (FT)
 

Overview

Max Total Supply

930 FT

Holders

200

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
losemoney.eth
Balance
2 FT
0xcd74df7b8f0e01aA57FF5cE2518C53439370A4df
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:
FeetnotFeetDAO

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-04-10
*/

//feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao
//feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao
//feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao
//feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao
//feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao feet no feet dao
//touch my feet daddy
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/access/[email protected]


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



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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


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



/**
 * @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);
    }
}





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



/**
 * @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);
}





// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)



/**
 * @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;
}





// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)



/**
 * @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);
}




// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)



/**
 * @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);
}





// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)



/**
 * @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);
}





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



/**
 * @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);
            }
        }
    }
}




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



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


// Creator: Chiru Labs


/**
 * @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).
 *
 * Assumes that an owner cannot have more than the 2**128 (max value of uint128) of supply
 */
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 internal currentIndex = 0;

    // 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) internal _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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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');

        for (uint256 curr = tokenId; ; 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 > 0, 'ERC721A: quantity must be greater 0');

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _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);
    }

    /**
     * @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 {}
}

contract FeetnotFeetDAO is ERC721A, Ownable {

    string public baseURI = "ipfs://QmXR1UA49fFMdA5sbgqsvpmP8DoECzw4AddvpKQM3difRn/?";
    string public contractURI = "ipfs://QmXR1UA49fFMdA5sbgqsvpmP8DoECzw4AddvpKQM3difRn";
    string public constant baseExtension = ".json";
    address public constant proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1;

    uint256 public constant MAX_PER_TX_FREE = 2;
    uint256 public constant MAX_PER_TX = 20;
    uint256 public constant FREE_MAX_SUPPLY = 10;
    uint256 public MAX_SUPPLY = 999;
    uint256 public price = 0.003 ether;

    bool public paused = true;

    constructor() ERC721A("FeetnotFeetDAO", "FT") {}

    function mint(uint256 _amount) external payable {
        address _caller = _msgSender();
        require(!paused, "Paused");
        require(MAX_SUPPLY >= totalSupply() + _amount, "Exceeds max supply");
        require(_amount > 0, "No 0 mints");
        require(tx.origin == _caller, "No contracts");

        if(FREE_MAX_SUPPLY >= totalSupply()){
            require(MAX_PER_TX_FREE >= _amount , "Excess max per free tx");
        }else{
            require(MAX_PER_TX >= _amount , "Excess max per paid tx");
            require(_amount * price == msg.value, "Invalid funds provided");
        }

        _safeMint(_caller, _amount);
    }



    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        (bool success, ) = _msgSender().call{value: balance}("");
        require(success, "Failed to send");
    }

    function pause(bool _state) external onlyOwner {
        paused = _state;
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        baseURI = baseURI_;
    }

    function setContractURI(string memory _contractURI) external onlyOwner {
        contractURI = _contractURI;
    }

function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
}

function setMAX_SUPPLY(uint256 newSupply) public onlyOwner {
        MAX_SUPPLY = newSupply;
}


    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return bytes(baseURI).length > 0 ? string(
            abi.encodePacked(
              baseURI,
              Strings.toString(_tokenId),
              baseExtension
            )
        ) : "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FREE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX_FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","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":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","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":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setMAX_SUPPLY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":"nonpayable","type":"function"}]

60806040526000805560405180606001604052806037815260200162004a4c6037913960089080519060200190620000399291906200023a565b5060405180606001604052806035815260200162004a8360359139600990805190602001906200006b9291906200023a565b506103e7600a55660aa87bee538000600b556001600c60006101000a81548160ff021916908315150217905550348015620000a557600080fd5b506040518060400160405280600e81526020017f466565746e6f744665657444414f0000000000000000000000000000000000008152506040518060400160405280600281526020017f465400000000000000000000000000000000000000000000000000000000000081525081600190805190602001906200012a9291906200023a565b508060029080519060200190620001439291906200023a565b505050620001666200015a6200016c60201b60201c565b6200017460201b60201c565b6200034f565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024890620002ea565b90600052602060002090601f0160209004810192826200026c5760008555620002b8565b82601f106200028757805160ff1916838001178555620002b8565b82800160010185558215620002b8579182015b82811115620002b75782518255916020019190600101906200029a565b5b509050620002c79190620002cb565b5090565b5b80821115620002e6576000816000905550600101620002cc565b5090565b600060028204905060018216806200030357607f821691505b602082108114156200031a576200031962000320565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6146ed806200035f6000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063b88d4fde116100a0578063e8a3d4851161006f578063e8a3d4851461077e578063e985e9c5146107a9578063ec9496ba146107e6578063f2fde38b1461080f578063f43a22dc146108385761020f565b8063b88d4fde146106c2578063c6682862146106eb578063c87b56dd14610716578063cd7c0326146107535761020f565b8063938e3d7b116100e7578063938e3d7b146105fe57806395d89b4114610627578063a035b1fe14610652578063a0712d681461067d578063a22cb465146106995761020f565b8063715018a6146105685780638069876d1461057f5780638da5cb5b146105aa57806391b7f5ed146105d55761020f565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b31461046f5780635c975abb146104985780636352211e146104c35780636c0360eb1461050057806370a082311461052b5761020f565b80633ccfd60b146103c757806342842e0e146103de578063463fff79146104075780634f6ccce7146104325761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806318160ddd1461030b57806323b872dd146103365780632f745c591461035f57806332cb6b0c1461039c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613213565b610863565b6040516102489190613ddf565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131ea565b6109ad565b005b34801561028657600080fd5b5061028f610a46565b60405161029c9190613dfa565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906132a6565b610ad8565b6040516102d99190613d78565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906131ae565b610b5d565b005b34801561031757600080fd5b50610320610c76565b60405161032d919061417c565b60405180910390f35b34801561034257600080fd5b5061035d600480360381019061035891906130a8565b610c7f565b005b34801561036b57600080fd5b50610386600480360381019061038191906131ae565b610c8f565b604051610393919061417c565b60405180910390f35b3480156103a857600080fd5b506103b1610e8d565b6040516103be919061417c565b60405180910390f35b3480156103d357600080fd5b506103dc610e93565b005b3480156103ea57600080fd5b50610405600480360381019061040091906130a8565b610fcb565b005b34801561041357600080fd5b5061041c610feb565b604051610429919061417c565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906132a6565b610ff0565b604051610466919061417c565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613265565b611043565b005b3480156104a457600080fd5b506104ad6110d9565b6040516104ba9190613ddf565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e591906132a6565b6110ec565b6040516104f79190613d78565b60405180910390f35b34801561050c57600080fd5b50610515611102565b6040516105229190613dfa565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613043565b611190565b60405161055f919061417c565b60405180910390f35b34801561057457600080fd5b5061057d611279565b005b34801561058b57600080fd5b50610594611301565b6040516105a1919061417c565b60405180910390f35b3480156105b657600080fd5b506105bf611306565b6040516105cc9190613d78565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f791906132a6565b611330565b005b34801561060a57600080fd5b5061062560048036038101906106209190613265565b6113b6565b005b34801561063357600080fd5b5061063c61144c565b6040516106499190613dfa565b60405180910390f35b34801561065e57600080fd5b506106676114de565b604051610674919061417c565b60405180910390f35b610697600480360381019061069291906132a6565b6114e4565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190613172565b611742565b005b3480156106ce57600080fd5b506106e960048036038101906106e491906130f7565b6118c3565b005b3480156106f757600080fd5b5061070061191f565b60405161070d9190613dfa565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906132a6565b611958565b60405161074a9190613dfa565b60405180910390f35b34801561075f57600080fd5b50610768611a37565b6040516107759190613d78565b60405180910390f35b34801561078a57600080fd5b50610793611a4f565b6040516107a09190613dfa565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb919061306c565b611add565b6040516107dd9190613ddf565b60405180910390f35b3480156107f257600080fd5b5061080d600480360381019061080891906132a6565b611b71565b005b34801561081b57600080fd5b5061083660048036038101906108319190613043565b611bf7565b005b34801561084457600080fd5b5061084d611cef565b60405161085a919061417c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a657506109a582611cf4565b5b9050919050565b6109b5611d5e565b73ffffffffffffffffffffffffffffffffffffffff166109d3611306565b73ffffffffffffffffffffffffffffffffffffffff1614610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613fdc565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b606060018054610a55906144e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a81906144e2565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b6000610ae382611d66565b610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b199061413c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b68826110ec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09061405c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf8611d5e565b73ffffffffffffffffffffffffffffffffffffffff161480610c275750610c2681610c21611d5e565b611add565b5b610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613f3c565b60405180910390fd5b610c71838383611d73565b505050565b60008054905090565b610c8a838383611e25565b505050565b6000610c9a83611190565b8210610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290613e1c565b60405180910390fd5b6000610ce5610c76565b905060008060005b83811015610e4b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ddf57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e375786841415610e28578195505050505050610e87565b8380610e3390614514565b9450505b508080610e4390614514565b915050610ced565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e9061411c565b60405180910390fd5b92915050565b600a5481565b610e9b611d5e565b73ffffffffffffffffffffffffffffffffffffffff16610eb9611306565b73ffffffffffffffffffffffffffffffffffffffff1614610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690613fdc565b60405180910390fd5b60004790506000610f1e611d5e565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f4190613d63565b60006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b5050905080610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906140fc565b60405180910390fd5b5050565b610fe6838383604051806020016040528060008152506118c3565b505050565b600281565b6000610ffa610c76565b821061103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290613edc565b60405180910390fd5b819050919050565b61104b611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611069611306565b73ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613fdc565b60405180910390fd5b80600890805190602001906110d5929190612e2d565b5050565b600c60009054906101000a900460ff1681565b60006110f7826123cc565b600001519050919050565b6008805461110f906144e2565b80601f016020809104026020016040519081016040528092919081815260200182805461113b906144e2565b80156111885780601f1061115d57610100808354040283529160200191611188565b820191906000526020600020905b81548152906001019060200180831161116b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890613f7c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611281611d5e565b73ffffffffffffffffffffffffffffffffffffffff1661129f611306565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613fdc565b60405180910390fd5b6112ff6000612527565b565b600a81565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611338611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611356611306565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390613fdc565b60405180910390fd5b80600b8190555050565b6113be611d5e565b73ffffffffffffffffffffffffffffffffffffffff166113dc611306565b73ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613fdc565b60405180910390fd5b8060099080519060200190611448929190612e2d565b5050565b60606002805461145b906144e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611487906144e2565b80156114d45780601f106114a9576101008083540402835291602001916114d4565b820191906000526020600020905b8154815290600101906020018083116114b757829003601f168201915b5050505050905090565b600b5481565b60006114ee611d5e565b9050600c60009054906101000a900460ff1615611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613e3c565b60405180910390fd5b81611549610c76565b61155391906142d1565b600a541015611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613f5c565b60405180910390fd5b600082116115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190613e9c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f9061415c565b60405180910390fd5b611650610c76565b600a106116a057816002101561169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169290613f1c565b60405180910390fd5b611734565b81601410156116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90613ebc565b60405180910390fd5b34600b54836116f39190614358565b14611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a9061403c565b60405180910390fd5b5b61173e81836125ed565b5050565b61174a611d5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af90613ffc565b60405180910390fd5b80600660006117c5611d5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611872611d5e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118b79190613ddf565b60405180910390a35050565b6118ce848484611e25565b6118da8484848461260b565b611919576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119109061409c565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061196382611d66565b6119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990613f9c565b60405180910390fd5b6000600880546119b1906144e2565b9050116119cd5760405180602001604052806000815250611a30565b60086119d8836127a2565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611a2093929190613d32565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054611a5c906144e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a88906144e2565b8015611ad55780601f10611aaa57610100808354040283529160200191611ad5565b820191906000526020600020905b815481529060010190602001808311611ab857829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b79611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611b97611306565b73ffffffffffffffffffffffffffffffffffffffff1614611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490613fdc565b60405180910390fd5b80600a8190555050565b611bff611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611c1d611306565b73ffffffffffffffffffffffffffffffffffffffff1614611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90613fdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90613e5c565b60405180910390fd5b611cec81612527565b50565b601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e30826123cc565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e57611d5e565b73ffffffffffffffffffffffffffffffffffffffff161480611eb35750611e7c611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611e9b84610ad8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ecf5750611ece8260000151611ec9611d5e565b611add565b5b905080611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f089061401c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90613fbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90613efc565b60405180910390fd5b612000858585600161294f565b6120106000848460000151611d73565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461221691906142d1565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561235c5761228c81611d66565b1561235b576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123c48686866001612955565b505050505050565b6123d4612eb3565b6123dd82611d66565b61241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390613e7c565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461250e578092505050612522565b50808061251a906144b8565b915050612422565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61260782826040518060200160405280600081525061295b565b5050565b600061262c8473ffffffffffffffffffffffffffffffffffffffff16612e1a565b15612795578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612655611d5e565b8786866040518563ffffffff1660e01b81526004016126779493929190613d93565b602060405180830381600087803b15801561269157600080fd5b505af19250505080156126c257506040513d601f19601f820116820180604052508101906126bf919061323c565b60015b612745573d80600081146126f2576040519150601f19603f3d011682016040523d82523d6000602084013e6126f7565b606091505b5060008151141561273d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127349061409c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061279a565b600190505b949350505050565b606060008214156127ea576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061294a565b600082905060005b6000821461281c57808061280590614514565b915050600a826128159190614327565b91506127f2565b60008167ffffffffffffffff81111561285e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128905781602001600182028036833780820191505090505b5090505b60008514612943576001826128a991906143b2565b9150600a856128b8919061455d565b60306128c491906142d1565b60f81b818381518110612900577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561293c9190614327565b9450612894565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c8906140dc565b60405180910390fd5b6129da81611d66565b15612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a11906140bc565b60405180910390fd5b60008311612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a549061407c565b60405180910390fd5b612a6a600085838661294f565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b67919061428b565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b8e919061428b565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612dfd57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d9d600088848861260b565b612ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd39061409c565b60405180910390fd5b8180612de790614514565b9250508080612df590614514565b915050612d2c565b5080600081905550612e126000878588612955565b505050505050565b600080823b905060008111915050919050565b828054612e39906144e2565b90600052602060002090601f016020900481019282612e5b5760008555612ea2565b82601f10612e7457805160ff1916838001178555612ea2565b82800160010185558215612ea2579182015b82811115612ea1578251825591602001919060010190612e86565b5b509050612eaf9190612eed565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f06576000816000905550600101612eee565b5090565b6000612f1d612f18846141c8565b614197565b905082815260208101848484011115612f3557600080fd5b612f40848285614476565b509392505050565b6000612f5b612f56846141f8565b614197565b905082815260208101848484011115612f7357600080fd5b612f7e848285614476565b509392505050565b600081359050612f958161465b565b92915050565b600081359050612faa81614672565b92915050565b600081359050612fbf81614689565b92915050565b600081519050612fd481614689565b92915050565b600082601f830112612feb57600080fd5b8135612ffb848260208601612f0a565b91505092915050565b600082601f83011261301557600080fd5b8135613025848260208601612f48565b91505092915050565b60008135905061303d816146a0565b92915050565b60006020828403121561305557600080fd5b600061306384828501612f86565b91505092915050565b6000806040838503121561307f57600080fd5b600061308d85828601612f86565b925050602061309e85828601612f86565b9150509250929050565b6000806000606084860312156130bd57600080fd5b60006130cb86828701612f86565b93505060206130dc86828701612f86565b92505060406130ed8682870161302e565b9150509250925092565b6000806000806080858703121561310d57600080fd5b600061311b87828801612f86565b945050602061312c87828801612f86565b935050604061313d8782880161302e565b925050606085013567ffffffffffffffff81111561315a57600080fd5b61316687828801612fda565b91505092959194509250565b6000806040838503121561318557600080fd5b600061319385828601612f86565b92505060206131a485828601612f9b565b9150509250929050565b600080604083850312156131c157600080fd5b60006131cf85828601612f86565b92505060206131e08582860161302e565b9150509250929050565b6000602082840312156131fc57600080fd5b600061320a84828501612f9b565b91505092915050565b60006020828403121561322557600080fd5b600061323384828501612fb0565b91505092915050565b60006020828403121561324e57600080fd5b600061325c84828501612fc5565b91505092915050565b60006020828403121561327757600080fd5b600082013567ffffffffffffffff81111561329157600080fd5b61329d84828501613004565b91505092915050565b6000602082840312156132b857600080fd5b60006132c68482850161302e565b91505092915050565b6132d8816143e6565b82525050565b6132e7816143f8565b82525050565b60006132f88261423d565b6133028185614253565b9350613312818560208601614485565b61331b8161464a565b840191505092915050565b600061333182614248565b61333b818561426f565b935061334b818560208601614485565b6133548161464a565b840191505092915050565b600061336a82614248565b6133748185614280565b9350613384818560208601614485565b80840191505092915050565b6000815461339d816144e2565b6133a78186614280565b945060018216600081146133c257600181146133d357613406565b60ff19831686528186019350613406565b6133dc85614228565b60005b838110156133fe578154818901526001820191506020810190506133df565b838801955050505b50505092915050565b600061341c60228361426f565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061348260068361426f565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006134c260268361426f565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613528602a8361426f565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b600061358e600a8361426f565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b60006135ce60168361426f565b91507f457863657373206d6178207065722070616964207478000000000000000000006000830152602082019050919050565b600061360e60238361426f565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061367460258361426f565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136da60168361426f565b91507f457863657373206d6178207065722066726565207478000000000000000000006000830152602082019050919050565b600061371a60398361426f565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061378060128361426f565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b60006137c0602b8361426f565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061382660158361426f565b91507f546f6b656e20646f6573206e6f742065786973742e00000000000000000000006000830152602082019050919050565b600061386660268361426f565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138cc60208361426f565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061390c601a8361426f565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b600061394c60328361426f565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006139b260168361426f565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b60006139f260228361426f565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a58600083614264565b9150600082019050919050565b6000613a7260238361426f565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ad860338361426f565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b6000613b3e601d8361426f565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613b7e60218361426f565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613be4600e8361426f565b91507f4661696c656420746f2073656e640000000000000000000000000000000000006000830152602082019050919050565b6000613c24602e8361426f565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613c8a602d8361426f565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000613cf0600c8361426f565b91507f4e6f20636f6e74726163747300000000000000000000000000000000000000006000830152602082019050919050565b613d2c8161446c565b82525050565b6000613d3e8286613390565b9150613d4a828561335f565b9150613d56828461335f565b9150819050949350505050565b6000613d6e82613a4b565b9150819050919050565b6000602082019050613d8d60008301846132cf565b92915050565b6000608082019050613da860008301876132cf565b613db560208301866132cf565b613dc26040830185613d23565b8181036060830152613dd481846132ed565b905095945050505050565b6000602082019050613df460008301846132de565b92915050565b60006020820190508181036000830152613e148184613326565b905092915050565b60006020820190508181036000830152613e358161340f565b9050919050565b60006020820190508181036000830152613e5581613475565b9050919050565b60006020820190508181036000830152613e75816134b5565b9050919050565b60006020820190508181036000830152613e958161351b565b9050919050565b60006020820190508181036000830152613eb581613581565b9050919050565b60006020820190508181036000830152613ed5816135c1565b9050919050565b60006020820190508181036000830152613ef581613601565b9050919050565b60006020820190508181036000830152613f1581613667565b9050919050565b60006020820190508181036000830152613f35816136cd565b9050919050565b60006020820190508181036000830152613f558161370d565b9050919050565b60006020820190508181036000830152613f7581613773565b9050919050565b60006020820190508181036000830152613f95816137b3565b9050919050565b60006020820190508181036000830152613fb581613819565b9050919050565b60006020820190508181036000830152613fd581613859565b9050919050565b60006020820190508181036000830152613ff5816138bf565b9050919050565b60006020820190508181036000830152614015816138ff565b9050919050565b600060208201905081810360008301526140358161393f565b9050919050565b60006020820190508181036000830152614055816139a5565b9050919050565b60006020820190508181036000830152614075816139e5565b9050919050565b6000602082019050818103600083015261409581613a65565b9050919050565b600060208201905081810360008301526140b581613acb565b9050919050565b600060208201905081810360008301526140d581613b31565b9050919050565b600060208201905081810360008301526140f581613b71565b9050919050565b6000602082019050818103600083015261411581613bd7565b9050919050565b6000602082019050818103600083015261413581613c17565b9050919050565b6000602082019050818103600083015261415581613c7d565b9050919050565b6000602082019050818103600083015261417581613ce3565b9050919050565b60006020820190506141916000830184613d23565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141be576141bd61461b565b5b8060405250919050565b600067ffffffffffffffff8211156141e3576141e261461b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156142135761421261461b565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061429682614430565b91506142a183614430565b9250826fffffffffffffffffffffffffffffffff038211156142c6576142c561458e565b5b828201905092915050565b60006142dc8261446c565b91506142e78361446c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561431c5761431b61458e565b5b828201905092915050565b60006143328261446c565b915061433d8361446c565b92508261434d5761434c6145bd565b5b828204905092915050565b60006143638261446c565b915061436e8361446c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a7576143a661458e565b5b828202905092915050565b60006143bd8261446c565b91506143c88361446c565b9250828210156143db576143da61458e565b5b828203905092915050565b60006143f18261444c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144a3578082015181840152602081019050614488565b838111156144b2576000848401525b50505050565b60006144c38261446c565b915060008214156144d7576144d661458e565b5b600182039050919050565b600060028204905060018216806144fa57607f821691505b6020821081141561450e5761450d6145ec565b5b50919050565b600061451f8261446c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145525761455161458e565b5b600182019050919050565b60006145688261446c565b91506145738361446c565b925082614583576145826145bd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614664816143e6565b811461466f57600080fd5b50565b61467b816143f8565b811461468657600080fd5b50565b61469281614404565b811461469d57600080fd5b50565b6146a98161446c565b81146146b457600080fd5b5056fea26469706673582212209a5a5730991bec1686cb32d525506d822711a667d290d1923ac96b419602695864736f6c63430008000033697066733a2f2f516d5852315541343966464d644135736267717376706d5038446f45437a773441646476704b514d33646966526e2f3f697066733a2f2f516d5852315541343966464d644135736267717376706d5038446f45437a773441646476704b514d33646966526e

Deployed Bytecode

0x60806040526004361061020f5760003560e01c8063715018a611610118578063b88d4fde116100a0578063e8a3d4851161006f578063e8a3d4851461077e578063e985e9c5146107a9578063ec9496ba146107e6578063f2fde38b1461080f578063f43a22dc146108385761020f565b8063b88d4fde146106c2578063c6682862146106eb578063c87b56dd14610716578063cd7c0326146107535761020f565b8063938e3d7b116100e7578063938e3d7b146105fe57806395d89b4114610627578063a035b1fe14610652578063a0712d681461067d578063a22cb465146106995761020f565b8063715018a6146105685780638069876d1461057f5780638da5cb5b146105aa57806391b7f5ed146105d55761020f565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b31461046f5780635c975abb146104985780636352211e146104c35780636c0360eb1461050057806370a082311461052b5761020f565b80633ccfd60b146103c757806342842e0e146103de578063463fff79146104075780634f6ccce7146104325761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806318160ddd1461030b57806323b872dd146103365780632f745c591461035f57806332cb6b0c1461039c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613213565b610863565b6040516102489190613ddf565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131ea565b6109ad565b005b34801561028657600080fd5b5061028f610a46565b60405161029c9190613dfa565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906132a6565b610ad8565b6040516102d99190613d78565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906131ae565b610b5d565b005b34801561031757600080fd5b50610320610c76565b60405161032d919061417c565b60405180910390f35b34801561034257600080fd5b5061035d600480360381019061035891906130a8565b610c7f565b005b34801561036b57600080fd5b50610386600480360381019061038191906131ae565b610c8f565b604051610393919061417c565b60405180910390f35b3480156103a857600080fd5b506103b1610e8d565b6040516103be919061417c565b60405180910390f35b3480156103d357600080fd5b506103dc610e93565b005b3480156103ea57600080fd5b50610405600480360381019061040091906130a8565b610fcb565b005b34801561041357600080fd5b5061041c610feb565b604051610429919061417c565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906132a6565b610ff0565b604051610466919061417c565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613265565b611043565b005b3480156104a457600080fd5b506104ad6110d9565b6040516104ba9190613ddf565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e591906132a6565b6110ec565b6040516104f79190613d78565b60405180910390f35b34801561050c57600080fd5b50610515611102565b6040516105229190613dfa565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613043565b611190565b60405161055f919061417c565b60405180910390f35b34801561057457600080fd5b5061057d611279565b005b34801561058b57600080fd5b50610594611301565b6040516105a1919061417c565b60405180910390f35b3480156105b657600080fd5b506105bf611306565b6040516105cc9190613d78565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f791906132a6565b611330565b005b34801561060a57600080fd5b5061062560048036038101906106209190613265565b6113b6565b005b34801561063357600080fd5b5061063c61144c565b6040516106499190613dfa565b60405180910390f35b34801561065e57600080fd5b506106676114de565b604051610674919061417c565b60405180910390f35b610697600480360381019061069291906132a6565b6114e4565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190613172565b611742565b005b3480156106ce57600080fd5b506106e960048036038101906106e491906130f7565b6118c3565b005b3480156106f757600080fd5b5061070061191f565b60405161070d9190613dfa565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906132a6565b611958565b60405161074a9190613dfa565b60405180910390f35b34801561075f57600080fd5b50610768611a37565b6040516107759190613d78565b60405180910390f35b34801561078a57600080fd5b50610793611a4f565b6040516107a09190613dfa565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb919061306c565b611add565b6040516107dd9190613ddf565b60405180910390f35b3480156107f257600080fd5b5061080d600480360381019061080891906132a6565b611b71565b005b34801561081b57600080fd5b5061083660048036038101906108319190613043565b611bf7565b005b34801561084457600080fd5b5061084d611cef565b60405161085a919061417c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a657506109a582611cf4565b5b9050919050565b6109b5611d5e565b73ffffffffffffffffffffffffffffffffffffffff166109d3611306565b73ffffffffffffffffffffffffffffffffffffffff1614610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613fdc565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b606060018054610a55906144e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a81906144e2565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b6000610ae382611d66565b610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b199061413c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b68826110ec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09061405c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf8611d5e565b73ffffffffffffffffffffffffffffffffffffffff161480610c275750610c2681610c21611d5e565b611add565b5b610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613f3c565b60405180910390fd5b610c71838383611d73565b505050565b60008054905090565b610c8a838383611e25565b505050565b6000610c9a83611190565b8210610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290613e1c565b60405180910390fd5b6000610ce5610c76565b905060008060005b83811015610e4b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ddf57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e375786841415610e28578195505050505050610e87565b8380610e3390614514565b9450505b508080610e4390614514565b915050610ced565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e9061411c565b60405180910390fd5b92915050565b600a5481565b610e9b611d5e565b73ffffffffffffffffffffffffffffffffffffffff16610eb9611306565b73ffffffffffffffffffffffffffffffffffffffff1614610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690613fdc565b60405180910390fd5b60004790506000610f1e611d5e565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f4190613d63565b60006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b5050905080610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906140fc565b60405180910390fd5b5050565b610fe6838383604051806020016040528060008152506118c3565b505050565b600281565b6000610ffa610c76565b821061103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290613edc565b60405180910390fd5b819050919050565b61104b611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611069611306565b73ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613fdc565b60405180910390fd5b80600890805190602001906110d5929190612e2d565b5050565b600c60009054906101000a900460ff1681565b60006110f7826123cc565b600001519050919050565b6008805461110f906144e2565b80601f016020809104026020016040519081016040528092919081815260200182805461113b906144e2565b80156111885780601f1061115d57610100808354040283529160200191611188565b820191906000526020600020905b81548152906001019060200180831161116b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890613f7c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611281611d5e565b73ffffffffffffffffffffffffffffffffffffffff1661129f611306565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613fdc565b60405180910390fd5b6112ff6000612527565b565b600a81565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611338611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611356611306565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390613fdc565b60405180910390fd5b80600b8190555050565b6113be611d5e565b73ffffffffffffffffffffffffffffffffffffffff166113dc611306565b73ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613fdc565b60405180910390fd5b8060099080519060200190611448929190612e2d565b5050565b60606002805461145b906144e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611487906144e2565b80156114d45780601f106114a9576101008083540402835291602001916114d4565b820191906000526020600020905b8154815290600101906020018083116114b757829003601f168201915b5050505050905090565b600b5481565b60006114ee611d5e565b9050600c60009054906101000a900460ff1615611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613e3c565b60405180910390fd5b81611549610c76565b61155391906142d1565b600a541015611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613f5c565b60405180910390fd5b600082116115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190613e9c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f9061415c565b60405180910390fd5b611650610c76565b600a106116a057816002101561169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169290613f1c565b60405180910390fd5b611734565b81601410156116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90613ebc565b60405180910390fd5b34600b54836116f39190614358565b14611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a9061403c565b60405180910390fd5b5b61173e81836125ed565b5050565b61174a611d5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af90613ffc565b60405180910390fd5b80600660006117c5611d5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611872611d5e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118b79190613ddf565b60405180910390a35050565b6118ce848484611e25565b6118da8484848461260b565b611919576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119109061409c565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061196382611d66565b6119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990613f9c565b60405180910390fd5b6000600880546119b1906144e2565b9050116119cd5760405180602001604052806000815250611a30565b60086119d8836127a2565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611a2093929190613d32565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054611a5c906144e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a88906144e2565b8015611ad55780601f10611aaa57610100808354040283529160200191611ad5565b820191906000526020600020905b815481529060010190602001808311611ab857829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b79611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611b97611306565b73ffffffffffffffffffffffffffffffffffffffff1614611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490613fdc565b60405180910390fd5b80600a8190555050565b611bff611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611c1d611306565b73ffffffffffffffffffffffffffffffffffffffff1614611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90613fdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90613e5c565b60405180910390fd5b611cec81612527565b50565b601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e30826123cc565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e57611d5e565b73ffffffffffffffffffffffffffffffffffffffff161480611eb35750611e7c611d5e565b73ffffffffffffffffffffffffffffffffffffffff16611e9b84610ad8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ecf5750611ece8260000151611ec9611d5e565b611add565b5b905080611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f089061401c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90613fbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90613efc565b60405180910390fd5b612000858585600161294f565b6120106000848460000151611d73565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461221691906142d1565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561235c5761228c81611d66565b1561235b576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123c48686866001612955565b505050505050565b6123d4612eb3565b6123dd82611d66565b61241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390613e7c565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461250e578092505050612522565b50808061251a906144b8565b915050612422565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61260782826040518060200160405280600081525061295b565b5050565b600061262c8473ffffffffffffffffffffffffffffffffffffffff16612e1a565b15612795578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612655611d5e565b8786866040518563ffffffff1660e01b81526004016126779493929190613d93565b602060405180830381600087803b15801561269157600080fd5b505af19250505080156126c257506040513d601f19601f820116820180604052508101906126bf919061323c565b60015b612745573d80600081146126f2576040519150601f19603f3d011682016040523d82523d6000602084013e6126f7565b606091505b5060008151141561273d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127349061409c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061279a565b600190505b949350505050565b606060008214156127ea576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061294a565b600082905060005b6000821461281c57808061280590614514565b915050600a826128159190614327565b91506127f2565b60008167ffffffffffffffff81111561285e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128905781602001600182028036833780820191505090505b5090505b60008514612943576001826128a991906143b2565b9150600a856128b8919061455d565b60306128c491906142d1565b60f81b818381518110612900577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561293c9190614327565b9450612894565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c8906140dc565b60405180910390fd5b6129da81611d66565b15612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a11906140bc565b60405180910390fd5b60008311612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a549061407c565b60405180910390fd5b612a6a600085838661294f565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b67919061428b565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b8e919061428b565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612dfd57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d9d600088848861260b565b612ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd39061409c565b60405180910390fd5b8180612de790614514565b9250508080612df590614514565b915050612d2c565b5080600081905550612e126000878588612955565b505050505050565b600080823b905060008111915050919050565b828054612e39906144e2565b90600052602060002090601f016020900481019282612e5b5760008555612ea2565b82601f10612e7457805160ff1916838001178555612ea2565b82800160010185558215612ea2579182015b82811115612ea1578251825591602001919060010190612e86565b5b509050612eaf9190612eed565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f06576000816000905550600101612eee565b5090565b6000612f1d612f18846141c8565b614197565b905082815260208101848484011115612f3557600080fd5b612f40848285614476565b509392505050565b6000612f5b612f56846141f8565b614197565b905082815260208101848484011115612f7357600080fd5b612f7e848285614476565b509392505050565b600081359050612f958161465b565b92915050565b600081359050612faa81614672565b92915050565b600081359050612fbf81614689565b92915050565b600081519050612fd481614689565b92915050565b600082601f830112612feb57600080fd5b8135612ffb848260208601612f0a565b91505092915050565b600082601f83011261301557600080fd5b8135613025848260208601612f48565b91505092915050565b60008135905061303d816146a0565b92915050565b60006020828403121561305557600080fd5b600061306384828501612f86565b91505092915050565b6000806040838503121561307f57600080fd5b600061308d85828601612f86565b925050602061309e85828601612f86565b9150509250929050565b6000806000606084860312156130bd57600080fd5b60006130cb86828701612f86565b93505060206130dc86828701612f86565b92505060406130ed8682870161302e565b9150509250925092565b6000806000806080858703121561310d57600080fd5b600061311b87828801612f86565b945050602061312c87828801612f86565b935050604061313d8782880161302e565b925050606085013567ffffffffffffffff81111561315a57600080fd5b61316687828801612fda565b91505092959194509250565b6000806040838503121561318557600080fd5b600061319385828601612f86565b92505060206131a485828601612f9b565b9150509250929050565b600080604083850312156131c157600080fd5b60006131cf85828601612f86565b92505060206131e08582860161302e565b9150509250929050565b6000602082840312156131fc57600080fd5b600061320a84828501612f9b565b91505092915050565b60006020828403121561322557600080fd5b600061323384828501612fb0565b91505092915050565b60006020828403121561324e57600080fd5b600061325c84828501612fc5565b91505092915050565b60006020828403121561327757600080fd5b600082013567ffffffffffffffff81111561329157600080fd5b61329d84828501613004565b91505092915050565b6000602082840312156132b857600080fd5b60006132c68482850161302e565b91505092915050565b6132d8816143e6565b82525050565b6132e7816143f8565b82525050565b60006132f88261423d565b6133028185614253565b9350613312818560208601614485565b61331b8161464a565b840191505092915050565b600061333182614248565b61333b818561426f565b935061334b818560208601614485565b6133548161464a565b840191505092915050565b600061336a82614248565b6133748185614280565b9350613384818560208601614485565b80840191505092915050565b6000815461339d816144e2565b6133a78186614280565b945060018216600081146133c257600181146133d357613406565b60ff19831686528186019350613406565b6133dc85614228565b60005b838110156133fe578154818901526001820191506020810190506133df565b838801955050505b50505092915050565b600061341c60228361426f565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061348260068361426f565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006134c260268361426f565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613528602a8361426f565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b600061358e600a8361426f565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b60006135ce60168361426f565b91507f457863657373206d6178207065722070616964207478000000000000000000006000830152602082019050919050565b600061360e60238361426f565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061367460258361426f565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136da60168361426f565b91507f457863657373206d6178207065722066726565207478000000000000000000006000830152602082019050919050565b600061371a60398361426f565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061378060128361426f565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b60006137c0602b8361426f565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061382660158361426f565b91507f546f6b656e20646f6573206e6f742065786973742e00000000000000000000006000830152602082019050919050565b600061386660268361426f565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138cc60208361426f565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061390c601a8361426f565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b600061394c60328361426f565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006139b260168361426f565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b60006139f260228361426f565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a58600083614264565b9150600082019050919050565b6000613a7260238361426f565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ad860338361426f565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b6000613b3e601d8361426f565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613b7e60218361426f565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613be4600e8361426f565b91507f4661696c656420746f2073656e640000000000000000000000000000000000006000830152602082019050919050565b6000613c24602e8361426f565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613c8a602d8361426f565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000613cf0600c8361426f565b91507f4e6f20636f6e74726163747300000000000000000000000000000000000000006000830152602082019050919050565b613d2c8161446c565b82525050565b6000613d3e8286613390565b9150613d4a828561335f565b9150613d56828461335f565b9150819050949350505050565b6000613d6e82613a4b565b9150819050919050565b6000602082019050613d8d60008301846132cf565b92915050565b6000608082019050613da860008301876132cf565b613db560208301866132cf565b613dc26040830185613d23565b8181036060830152613dd481846132ed565b905095945050505050565b6000602082019050613df460008301846132de565b92915050565b60006020820190508181036000830152613e148184613326565b905092915050565b60006020820190508181036000830152613e358161340f565b9050919050565b60006020820190508181036000830152613e5581613475565b9050919050565b60006020820190508181036000830152613e75816134b5565b9050919050565b60006020820190508181036000830152613e958161351b565b9050919050565b60006020820190508181036000830152613eb581613581565b9050919050565b60006020820190508181036000830152613ed5816135c1565b9050919050565b60006020820190508181036000830152613ef581613601565b9050919050565b60006020820190508181036000830152613f1581613667565b9050919050565b60006020820190508181036000830152613f35816136cd565b9050919050565b60006020820190508181036000830152613f558161370d565b9050919050565b60006020820190508181036000830152613f7581613773565b9050919050565b60006020820190508181036000830152613f95816137b3565b9050919050565b60006020820190508181036000830152613fb581613819565b9050919050565b60006020820190508181036000830152613fd581613859565b9050919050565b60006020820190508181036000830152613ff5816138bf565b9050919050565b60006020820190508181036000830152614015816138ff565b9050919050565b600060208201905081810360008301526140358161393f565b9050919050565b60006020820190508181036000830152614055816139a5565b9050919050565b60006020820190508181036000830152614075816139e5565b9050919050565b6000602082019050818103600083015261409581613a65565b9050919050565b600060208201905081810360008301526140b581613acb565b9050919050565b600060208201905081810360008301526140d581613b31565b9050919050565b600060208201905081810360008301526140f581613b71565b9050919050565b6000602082019050818103600083015261411581613bd7565b9050919050565b6000602082019050818103600083015261413581613c17565b9050919050565b6000602082019050818103600083015261415581613c7d565b9050919050565b6000602082019050818103600083015261417581613ce3565b9050919050565b60006020820190506141916000830184613d23565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141be576141bd61461b565b5b8060405250919050565b600067ffffffffffffffff8211156141e3576141e261461b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156142135761421261461b565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061429682614430565b91506142a183614430565b9250826fffffffffffffffffffffffffffffffff038211156142c6576142c561458e565b5b828201905092915050565b60006142dc8261446c565b91506142e78361446c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561431c5761431b61458e565b5b828201905092915050565b60006143328261446c565b915061433d8361446c565b92508261434d5761434c6145bd565b5b828204905092915050565b60006143638261446c565b915061436e8361446c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a7576143a661458e565b5b828202905092915050565b60006143bd8261446c565b91506143c88361446c565b9250828210156143db576143da61458e565b5b828203905092915050565b60006143f18261444c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144a3578082015181840152602081019050614488565b838111156144b2576000848401525b50505050565b60006144c38261446c565b915060008214156144d7576144d661458e565b5b600182039050919050565b600060028204905060018216806144fa57607f821691505b6020821081141561450e5761450d6145ec565b5b50919050565b600061451f8261446c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145525761455161458e565b5b600182019050919050565b60006145688261446c565b91506145738361446c565b925082614583576145826145bd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614664816143e6565b811461466f57600080fd5b50565b61467b816143f8565b811461468657600080fd5b50565b61469281614404565b811461469d57600080fd5b50565b6146a98161446c565b81146146b457600080fd5b5056fea26469706673582212209a5a5730991bec1686cb32d525506d822711a667d290d1923ac96b419602695864736f6c63430008000033

Deployed Bytecode Sourcemap

38705:2462:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26719:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40291:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28346:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29907:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29428:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25160:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30783:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25824:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39234:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40074:209;;;;;;;;;;;;;:::i;:::-;;31016:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39087:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25337:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40380:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39315:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28155:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38758:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27155:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3197:103;;;;;;;;;;;;;:::i;:::-;;39183:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2546:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40608:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40488:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28515:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39272:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39405:657;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30193:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31264:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38936:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40802:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38989:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38846:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30552:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40696:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3455:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39137:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26719:372;26821:4;26873:25;26858:40;;;:11;:40;;;;:105;;;;26930:33;26915:48;;;:11;:48;;;;26858:105;:172;;;;26995:35;26980:50;;;:11;:50;;;;26858:172;:225;;;;27047:36;27071:11;27047:23;:36::i;:::-;26858:225;26838:245;;26719:372;;;:::o;40291:81::-;2777:12;:10;:12::i;:::-;2766:23;;:7;:5;:7::i;:::-;:23;;;2758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40358:6:::1;40349;;:15;;;;;;;;;;;;;;;;;;40291:81:::0;:::o;28346:100::-;28400:13;28433:5;28426:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28346:100;:::o;29907:214::-;29975:7;30003:16;30011:7;30003;:16::i;:::-;29995:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30089:15;:24;30105:7;30089:24;;;;;;;;;;;;;;;;;;;;;30082:31;;29907:214;;;:::o;29428:413::-;29501:13;29517:24;29533:7;29517:15;:24::i;:::-;29501:40;;29566:5;29560:11;;:2;:11;;;;29552:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29661:5;29645:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29670:37;29687:5;29694:12;:10;:12::i;:::-;29670:16;:37::i;:::-;29645:62;29623:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;29805:28;29814:2;29818:7;29827:5;29805:8;:28::i;:::-;29428:413;;;:::o;25160:100::-;25213:7;25240:12;;25233:19;;25160:100;:::o;30783:162::-;30909:28;30919:4;30925:2;30929:7;30909:9;:28::i;:::-;30783:162;;;:::o;25824:823::-;25913:7;25949:16;25959:5;25949:9;:16::i;:::-;25941:5;:24;25933:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26015:22;26040:13;:11;:13::i;:::-;26015:38;;26064:19;26098:25;26152:9;26147:426;26171:14;26167:1;:18;26147:426;;;26207:31;26241:11;:14;26253:1;26241:14;;;;;;;;;;;26207:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26300:1;26274:28;;:9;:14;;;:28;;;26270:103;;26343:9;:14;;;26323:34;;26270:103;26412:5;26391:26;;:17;:26;;;26387:175;;;26457:5;26442:11;:20;26438:77;;;26494:1;26487:8;;;;;;;;;26438:77;26533:13;;;;;:::i;:::-;;;;26387:175;26147:426;26187:3;;;;;:::i;:::-;;;;26147:426;;;;26583:56;;;;;;;;;;:::i;:::-;;;;;;;;25824:823;;;;;:::o;39234:31::-;;;;:::o;40074:209::-;2777:12;:10;:12::i;:::-;2766:23;;:7;:5;:7::i;:::-;:23;;;2758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40124:15:::1;40142:21;40124:39;;40175:12;40193;:10;:12::i;:::-;:17;;40218:7;40193:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40174:56;;;40249:7;40241:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;2837:1;;40074:209::o:0;31016:177::-;31146:39;31163:4;31169:2;31173:7;31146:39;;;;;;;;;;;;:16;:39::i;:::-;31016:177;;;:::o;39087:43::-;39129:1;39087:43;:::o;25337:187::-;25404:7;25440:13;:11;:13::i;:::-;25432:5;:21;25424:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25511:5;25504:12;;25337:187;;;:::o;40380:100::-;2777:12;:10;:12::i;:::-;2766:23;;:7;:5;:7::i;:::-;:23;;;2758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40464:8:::1;40454:7;:18;;;;;;;;;;;;:::i;:::-;;40380:100:::0;:::o;39315:25::-;;;;;;;;;;;;;:::o;28155:124::-;28219:7;28246:20;28258:7;28246:11;:20::i;:::-;:25;;;28239:32;;28155:124;;;:::o;38758:81::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27155:221::-;27219:7;27264:1;27247:19;;:5;:19;;;;27239:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27340:12;:19;27353:5;27340:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27332:36;;27325:43;;27155:221;;;:::o;3197:103::-;2777:12;:10;:12::i;:::-;2766:23;;:7;:5;:7::i;:::-;:23;;;2758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3262:30:::1;3289:1;3262:18;:30::i;:::-;3197:103::o:0;39183:44::-;39225:2;39183:44;:::o;2546:87::-;2592:7;2619:6;;;;;;;;;;;2612:13;;2546:87;:::o;40608:84::-;2777:12;:10;:12::i;:::-;2766:23;;:7;:5;:7::i;:::-;:23;;;2758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40680:8:::1;40672:5;:16;;;;40608:84:::0;:::o;40488:116::-;2777:12;:10;:12::i;:::-;2766:23;;:7;:5;:7::i;:::-;:23;;;2758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40584:12:::1;40570:11;:26;;;;;;;;;;;;:::i;:::-;;40488:116:::0;:::o;28515:104::-;28571:13;28604:7;28597:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28515:104;:::o;39272:34::-;;;;:::o;39405:657::-;39464:15;39482:12;:10;:12::i;:::-;39464:30;;39514:6;;;;;;;;;;;39513:7;39505:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;39580:7;39564:13;:11;:13::i;:::-;:23;;;;:::i;:::-;39550:10;;:37;;39542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39639:1;39629:7;:11;39621:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;39687:7;39674:20;;:9;:20;;;39666:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;39746:13;:11;:13::i;:::-;39225:2;39727:32;39724:291;;39802:7;39129:1;39783:26;;39775:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39724:291;;;39890:7;39174:2;39876:21;;39868:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39967:9;39958:5;;39948:7;:15;;;;:::i;:::-;:28;39940:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39724:291;40027:27;40037:7;40046;40027:9;:27::i;:::-;39405:657;;:::o;30193:288::-;30300:12;:10;:12::i;:::-;30288:24;;:8;:24;;;;30280:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30401:8;30356:18;:32;30375:12;:10;:12::i;:::-;30356:32;;;;;;;;;;;;;;;:42;30389:8;30356:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30454:8;30425:48;;30440:12;:10;:12::i;:::-;30425:48;;;30464:8;30425:48;;;;;;:::i;:::-;;;;;;;;30193:288;;:::o;31264:355::-;31423:28;31433:4;31439:2;31443:7;31423:9;:28::i;:::-;31484:48;31507:4;31513:2;31517:7;31526:5;31484:22;:48::i;:::-;31462:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;31264:355;;;;:::o;38936:46::-;;;;;;;;;;;;;;;;;;;:::o;40802:362::-;40868:13;40902:17;40910:8;40902:7;:17::i;:::-;40894:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40987:1;40969:7;40963:21;;;;;:::i;:::-;;;:25;:193;;;;;;;;;;;;;;;;;41045:7;41069:26;41086:8;41069:16;:26::i;:::-;41112:13;;;;;;;;;;;;;;;;;41012:128;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40963:193;40956:200;;40802:362;;;:::o;38989:89::-;39036:42;38989:89;:::o;38846:83::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30552:164::-;30649:4;30673:18;:25;30692:5;30673:25;;;;;;;;;;;;;;;:35;30699:8;30673:35;;;;;;;;;;;;;;;;;;;;;;;;;30666:42;;30552:164;;;;:::o;40696:96::-;2777:12;:10;:12::i;:::-;2766:23;;:7;:5;:7::i;:::-;:23;;;2758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40779:9:::1;40766:10;:22;;;;40696:96:::0;:::o;3455:201::-;2777:12;:10;:12::i;:::-;2766:23;;:7;:5;:7::i;:::-;:23;;;2758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3564:1:::1;3544:22;;:8;:22;;;;3536:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3620:28;3639:8;3620:18;:28::i;:::-;3455:201:::0;:::o;39137:39::-;39174:2;39137:39;:::o;23223:157::-;23308:4;23347:25;23332:40;;;:11;:40;;;;23325:47;;23223:157;;;:::o;1287:98::-;1340:7;1367:10;1360:17;;1287:98;:::o;31874:111::-;31931:4;31965:12;;31955:7;:22;31948:29;;31874:111;;;:::o;35916:196::-;36058:2;36031:15;:24;36047:7;36031:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36096:7;36092:2;36076:28;;36085:5;36076:28;;;;;;;;;;;;35916:196;;;:::o;34015:1783::-;34130:35;34168:20;34180:7;34168:11;:20::i;:::-;34130:58;;34201:22;34243:13;:18;;;34227:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;34302:12;:10;:12::i;:::-;34278:36;;:20;34290:7;34278:11;:20::i;:::-;:36;;;34227:87;:154;;;;34331:50;34348:13;:18;;;34368:12;:10;:12::i;:::-;34331:16;:50::i;:::-;34227:154;34201:181;;34403:17;34395:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;34518:4;34496:26;;:13;:18;;;:26;;;34488:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;34598:1;34584:16;;:2;:16;;;;34576:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34655:43;34677:4;34683:2;34687:7;34696:1;34655:21;:43::i;:::-;34763:49;34780:1;34784:7;34793:13;:18;;;34763:8;:49::i;:::-;35047:1;35017:12;:18;35030:4;35017:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35091:1;35063:12;:16;35076:2;35063:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35139:43;;;;;;;;35154:2;35139:43;;;;;;35165:15;35139:43;;;;;35116:11;:20;35128:7;35116:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35422:19;35454:1;35444:7;:11;;;;:::i;:::-;35422:33;;35511:1;35470:43;;:11;:24;35482:11;35470:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;35466:227;;;35534:20;35542:11;35534:7;:20::i;:::-;35530:152;;;35602:64;;;;;;;;35617:13;:18;;;35602:64;;;;;;35637:13;:28;;;35602:64;;;;;35575:11;:24;35587:11;35575:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35530:152;35466:227;35729:7;35725:2;35710:27;;35719:4;35710:27;;;;;;;;;;;;35748:42;35769:4;35775:2;35779:7;35788:1;35748:20;:42::i;:::-;34015:1783;;;;;;:::o;27621:472::-;27682:21;;:::i;:::-;27724:16;27732:7;27724;:16::i;:::-;27716:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27805:12;27820:7;27805:22;;27800:216;27854:31;27888:11;:17;27900:4;27888:17;;;;;;;;;;;27854:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27950:1;27924:28;;:9;:14;;;:28;;;27920:85;;27980:9;27973:16;;;;;;27920:85;27800:216;27831:6;;;;;:::i;:::-;;;;27800:216;;27621:472;;;;:::o;3816:191::-;3890:16;3909:6;;;;;;;;;;;3890:25;;3935:8;3926:6;;:17;;;;;;;;;;;;;;;;;;3990:8;3959:40;;3980:8;3959:40;;;;;;;;;;;;3816:191;;:::o;31993:104::-;32062:27;32072:2;32076:8;32062:27;;;;;;;;;;;;:9;:27::i;:::-;31993:104;;:::o;36677:804::-;36832:4;36853:15;:2;:13;;;:15::i;:::-;36849:625;;;36905:2;36889:36;;;36926:12;:10;:12::i;:::-;36940:4;36946:7;36955:5;36889:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36885:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37152:1;37135:6;:13;:18;37131:273;;;37178:61;;;;;;;;;;:::i;:::-;;;;;;;;37131:273;37354:6;37348:13;37339:6;37335:2;37331:15;37324:38;36885:534;37022:45;;;37012:55;;;:6;:55;;;;37005:62;;;;;36849:625;37458:4;37451:11;;36677:804;;;;;;;:::o;4364:723::-;4420:13;4650:1;4641:5;:10;4637:53;;;4668:10;;;;;;;;;;;;;;;;;;;;;4637:53;4700:12;4715:5;4700:20;;4731:14;4756:78;4771:1;4763:4;:9;4756:78;;4789:8;;;;;:::i;:::-;;;;4820:2;4812:10;;;;;:::i;:::-;;;4756:78;;;4844:19;4876:6;4866:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4844:39;;4894:154;4910:1;4901:5;:10;4894:154;;4938:1;4928:11;;;;;:::i;:::-;;;5005:2;4997:5;:10;;;;:::i;:::-;4984:2;:24;;;;:::i;:::-;4971:39;;4954:6;4961;4954:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;5034:2;5025:11;;;;;:::i;:::-;;;4894:154;;;5072:6;5058:21;;;;;4364:723;;;;:::o;37969:159::-;;;;;:::o;38540:158::-;;;;;:::o;32374:1387::-;32497:20;32520:12;;32497:35;;32565:1;32551:16;;:2;:16;;;;32543:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32750:21;32758:12;32750:7;:21::i;:::-;32749:22;32741:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32835:1;32824:8;:12;32816:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32889:61;32919:1;32923:2;32927:12;32941:8;32889:21;:61::i;:::-;32963:30;32996:12;:16;33009:2;32996:16;;;;;;;;;;;;;;;32963:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33042:135;;;;;;;;33098:8;33068:11;:19;;;:39;;;;:::i;:::-;33042:135;;;;;;33157:8;33122:11;:24;;;:44;;;;:::i;:::-;33042:135;;;;;33023:12;:16;33036:2;33023:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33216:43;;;;;;;;33231:2;33216:43;;;;;;33242:15;33216:43;;;;;33188:11;:25;33200:12;33188:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33272:20;33295:12;33272:35;;33325:9;33320:325;33344:8;33340:1;:12;33320:325;;;33404:12;33400:2;33379:38;;33396:1;33379:38;;;;;;;;;;;;33458:59;33489:1;33493:2;33497:12;33511:5;33458:22;:59::i;:::-;33432:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;33619:14;;;;;:::i;:::-;;;;33354:3;;;;;:::i;:::-;;;;33320:325;;;;33670:12;33655;:27;;;;33693:60;33722:1;33726:2;33730:12;33744:8;33693:20;:60::i;:::-;32374:1387;;;;;;:::o;15115:387::-;15175:4;15383:12;15450:7;15438:20;15430:28;;15493:1;15486:4;:8;15479:15;;;15115: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:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:118::-;6433:24;6451:5;6433:24;:::i;:::-;6428:3;6421:37;6411:53;;:::o;6470:109::-;6551:21;6566:5;6551:21;:::i;:::-;6546:3;6539:34;6529:50;;:::o;6585:360::-;;6699:38;6731:5;6699:38;:::i;:::-;6753:70;6816:6;6811:3;6753:70;:::i;:::-;6746:77;;6832:52;6877:6;6872:3;6865:4;6858:5;6854:16;6832:52;:::i;:::-;6909:29;6931:6;6909:29;:::i;:::-;6904:3;6900:39;6893:46;;6675:270;;;;;:::o;6951:364::-;;7067:39;7100:5;7067:39;:::i;:::-;7122:71;7186:6;7181:3;7122:71;:::i;:::-;7115:78;;7202:52;7247:6;7242:3;7235:4;7228:5;7224:16;7202:52;:::i;:::-;7279:29;7301:6;7279:29;:::i;:::-;7274:3;7270:39;7263:46;;7043:272;;;;;:::o;7321:377::-;;7455:39;7488:5;7455:39;:::i;:::-;7510:89;7592:6;7587:3;7510:89;:::i;:::-;7503:96;;7608:52;7653:6;7648:3;7641:4;7634:5;7630:16;7608:52;:::i;:::-;7685:6;7680:3;7676:16;7669:23;;7431:267;;;;;:::o;7728:845::-;;7868:5;7862:12;7897:36;7923:9;7897:36;:::i;:::-;7949:89;8031:6;8026:3;7949:89;:::i;:::-;7942:96;;8069:1;8058:9;8054:17;8085:1;8080:137;;;;8231:1;8226:341;;;;8047:520;;8080:137;8164:4;8160:9;8149;8145:25;8140:3;8133:38;8200:6;8195:3;8191:16;8184:23;;8080:137;;8226:341;8293:38;8325:5;8293:38;:::i;:::-;8353:1;8367:154;8381:6;8378:1;8375:13;8367:154;;;8455:7;8449:14;8445:1;8440:3;8436:11;8429:35;8505:1;8496:7;8492:15;8481:26;;8403:4;8400:1;8396:12;8391:17;;8367:154;;;8550:6;8545:3;8541:16;8534:23;;8233:334;;8047:520;;7835:738;;;;;;:::o;8579:366::-;;8742:67;8806:2;8801:3;8742:67;:::i;:::-;8735:74;;8839:34;8835:1;8830:3;8826:11;8819:55;8905:4;8900:2;8895:3;8891:12;8884:26;8936:2;8931:3;8927:12;8920:19;;8725:220;;;:::o;8951:303::-;;9114:66;9178:1;9173:3;9114:66;:::i;:::-;9107:73;;9210:8;9206:1;9201:3;9197:11;9190:29;9245:2;9240:3;9236:12;9229:19;;9097:157;;;:::o;9260:370::-;;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9520:34;9516:1;9511:3;9507:11;9500:55;9586:8;9581:2;9576:3;9572:12;9565:30;9621:2;9616:3;9612:12;9605:19;;9406:224;;;:::o;9636:374::-;;9799:67;9863:2;9858:3;9799:67;:::i;:::-;9792:74;;9896:34;9892:1;9887:3;9883:11;9876:55;9962:12;9957:2;9952:3;9948:12;9941:34;10001:2;9996:3;9992:12;9985:19;;9782:228;;;:::o;10016:308::-;;10179:67;10243:2;10238:3;10179:67;:::i;:::-;10172:74;;10276:12;10272:1;10267:3;10263:11;10256:33;10315:2;10310:3;10306:12;10299:19;;10162:162;;;:::o;10330:320::-;;10493:67;10557:2;10552:3;10493:67;:::i;:::-;10486:74;;10590:24;10586:1;10581:3;10577:11;10570:45;10641:2;10636:3;10632:12;10625:19;;10476:174;;;:::o;10656:367::-;;10819:67;10883:2;10878:3;10819:67;:::i;:::-;10812:74;;10916:34;10912:1;10907:3;10903:11;10896:55;10982:5;10977:2;10972:3;10968:12;10961:27;11014:2;11009:3;11005:12;10998:19;;10802:221;;;:::o;11029:369::-;;11192:67;11256:2;11251:3;11192:67;:::i;:::-;11185:74;;11289:34;11285:1;11280:3;11276:11;11269:55;11355:7;11350:2;11345:3;11341:12;11334:29;11389:2;11384:3;11380:12;11373:19;;11175:223;;;:::o;11404:320::-;;11567:67;11631:2;11626:3;11567:67;:::i;:::-;11560:74;;11664:24;11660:1;11655:3;11651:11;11644:45;11715:2;11710:3;11706:12;11699:19;;11550:174;;;:::o;11730:389::-;;11893:67;11957:2;11952:3;11893:67;:::i;:::-;11886:74;;11990:34;11986:1;11981:3;11977:11;11970:55;12056:27;12051:2;12046:3;12042:12;12035:49;12110:2;12105:3;12101:12;12094:19;;11876:243;;;:::o;12125:316::-;;12288:67;12352:2;12347:3;12288:67;:::i;:::-;12281:74;;12385:20;12381:1;12376:3;12372:11;12365:41;12432:2;12427:3;12423:12;12416:19;;12271:170;;;:::o;12447:375::-;;12610:67;12674:2;12669:3;12610:67;:::i;:::-;12603:74;;12707:34;12703:1;12698:3;12694:11;12687:55;12773:13;12768:2;12763:3;12759:12;12752:35;12813:2;12808:3;12804:12;12797:19;;12593:229;;;:::o;12828:319::-;;12991:67;13055:2;13050:3;12991:67;:::i;:::-;12984:74;;13088:23;13084:1;13079:3;13075:11;13068:44;13138:2;13133:3;13129:12;13122:19;;12974:173;;;:::o;13153:370::-;;13316:67;13380:2;13375:3;13316:67;:::i;:::-;13309:74;;13413:34;13409:1;13404:3;13400:11;13393:55;13479:8;13474:2;13469:3;13465:12;13458:30;13514:2;13509:3;13505:12;13498:19;;13299:224;;;:::o;13529:330::-;;13692:67;13756:2;13751:3;13692:67;:::i;:::-;13685:74;;13789:34;13785:1;13780:3;13776:11;13769:55;13850:2;13845:3;13841:12;13834:19;;13675:184;;;:::o;13865:324::-;;14028:67;14092:2;14087:3;14028:67;:::i;:::-;14021:74;;14125:28;14121:1;14116:3;14112:11;14105:49;14180:2;14175:3;14171:12;14164:19;;14011:178;;;:::o;14195:382::-;;14358:67;14422:2;14417:3;14358:67;:::i;:::-;14351:74;;14455:34;14451:1;14446:3;14442:11;14435:55;14521:20;14516:2;14511:3;14507:12;14500:42;14568:2;14563:3;14559:12;14552:19;;14341:236;;;:::o;14583:320::-;;14746:67;14810:2;14805:3;14746:67;:::i;:::-;14739:74;;14843:24;14839:1;14834:3;14830:11;14823:45;14894:2;14889:3;14885:12;14878:19;;14729:174;;;:::o;14909:366::-;;15072:67;15136:2;15131:3;15072:67;:::i;:::-;15065:74;;15169:34;15165:1;15160:3;15156:11;15149:55;15235:4;15230:2;15225:3;15221:12;15214:26;15266:2;15261:3;15257:12;15250:19;;15055:220;;;:::o;15281:297::-;;15461:83;15542:1;15537:3;15461:83;:::i;:::-;15454:90;;15570:1;15565:3;15561:11;15554:18;;15444:134;;;:::o;15584:367::-;;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15844:34;15840:1;15835:3;15831:11;15824:55;15910:5;15905:2;15900:3;15896:12;15889:27;15942:2;15937:3;15933:12;15926:19;;15730:221;;;:::o;15957:383::-;;16120:67;16184:2;16179:3;16120:67;:::i;:::-;16113:74;;16217:34;16213:1;16208:3;16204:11;16197:55;16283:21;16278:2;16273:3;16269:12;16262:43;16331:2;16326:3;16322:12;16315:19;;16103:237;;;:::o;16346:327::-;;16509:67;16573:2;16568:3;16509:67;:::i;:::-;16502:74;;16606:31;16602:1;16597:3;16593:11;16586:52;16664:2;16659:3;16655:12;16648:19;;16492:181;;;:::o;16679:365::-;;16842:67;16906:2;16901:3;16842:67;:::i;:::-;16835:74;;16939:34;16935:1;16930:3;16926:11;16919:55;17005:3;17000:2;16995:3;16991:12;16984:25;17035:2;17030:3;17026:12;17019:19;;16825:219;;;:::o;17050:312::-;;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17310:16;17306:1;17301:3;17297:11;17290:37;17353:2;17348:3;17344:12;17337:19;;17196:166;;;:::o;17368:378::-;;17531:67;17595:2;17590:3;17531:67;:::i;:::-;17524:74;;17628:34;17624:1;17619:3;17615:11;17608:55;17694:16;17689:2;17684:3;17680:12;17673:38;17737:2;17732:3;17728:12;17721:19;;17514:232;;;:::o;18137:377::-;;18300:67;18364:2;18359:3;18300:67;:::i;:::-;18293:74;;18397:34;18393:1;18388:3;18384:11;18377:55;18463:15;18458:2;18453:3;18449:12;18442:37;18505:2;18500:3;18496:12;18489:19;;18283:231;;;:::o;18520:310::-;;18683:67;18747:2;18742:3;18683:67;:::i;:::-;18676:74;;18780:14;18776:1;18771:3;18767:11;18760:35;18821:2;18816:3;18812:12;18805:19;;18666:164;;;:::o;18836:118::-;18923:24;18941:5;18923:24;:::i;:::-;18918:3;18911:37;18901:53;;:::o;18960:589::-;;19207:92;19295:3;19286:6;19207:92;:::i;:::-;19200:99;;19316:95;19407:3;19398:6;19316:95;:::i;:::-;19309:102;;19428:95;19519:3;19510:6;19428:95;:::i;:::-;19421:102;;19540:3;19533:10;;19189:360;;;;;;:::o;19555:379::-;;19761:147;19904:3;19761:147;:::i;:::-;19754:154;;19925:3;19918:10;;19743:191;;;:::o;19940:222::-;;20071:2;20060:9;20056:18;20048:26;;20084:71;20152:1;20141:9;20137:17;20128:6;20084:71;:::i;:::-;20038:124;;;;:::o;20168:640::-;;20401:3;20390:9;20386:19;20378:27;;20415:71;20483:1;20472:9;20468:17;20459:6;20415:71;:::i;:::-;20496:72;20564:2;20553:9;20549:18;20540:6;20496:72;:::i;:::-;20578;20646:2;20635:9;20631:18;20622:6;20578:72;:::i;:::-;20697:9;20691:4;20687:20;20682:2;20671:9;20667:18;20660:48;20725:76;20796:4;20787:6;20725:76;:::i;:::-;20717:84;;20368:440;;;;;;;:::o;20814:210::-;;20939:2;20928:9;20924:18;20916:26;;20952:65;21014:1;21003:9;20999:17;20990:6;20952:65;:::i;:::-;20906:118;;;;:::o;21030:313::-;;21181:2;21170:9;21166:18;21158:26;;21230:9;21224:4;21220:20;21216:1;21205:9;21201:17;21194:47;21258:78;21331:4;21322:6;21258:78;:::i;:::-;21250:86;;21148:195;;;;:::o;21349:419::-;;21553:2;21542:9;21538:18;21530:26;;21602:9;21596:4;21592:20;21588:1;21577:9;21573:17;21566:47;21630:131;21756:4;21630:131;:::i;:::-;21622:139;;21520:248;;;:::o;21774:419::-;;21978:2;21967:9;21963:18;21955:26;;22027:9;22021:4;22017:20;22013:1;22002:9;21998:17;21991:47;22055:131;22181:4;22055:131;:::i;:::-;22047:139;;21945:248;;;:::o;22199:419::-;;22403:2;22392:9;22388:18;22380:26;;22452:9;22446:4;22442:20;22438:1;22427:9;22423:17;22416:47;22480:131;22606:4;22480:131;:::i;:::-;22472:139;;22370:248;;;:::o;22624:419::-;;22828:2;22817:9;22813:18;22805:26;;22877:9;22871:4;22867:20;22863:1;22852:9;22848:17;22841:47;22905:131;23031:4;22905:131;:::i;:::-;22897:139;;22795:248;;;:::o;23049:419::-;;23253:2;23242:9;23238:18;23230:26;;23302:9;23296:4;23292:20;23288:1;23277:9;23273:17;23266:47;23330:131;23456:4;23330:131;:::i;:::-;23322:139;;23220:248;;;:::o;23474:419::-;;23678:2;23667:9;23663:18;23655:26;;23727:9;23721:4;23717:20;23713:1;23702:9;23698:17;23691:47;23755:131;23881:4;23755:131;:::i;:::-;23747:139;;23645:248;;;:::o;23899:419::-;;24103:2;24092:9;24088:18;24080:26;;24152:9;24146:4;24142:20;24138:1;24127:9;24123:17;24116:47;24180:131;24306:4;24180:131;:::i;:::-;24172:139;;24070:248;;;:::o;24324:419::-;;24528:2;24517:9;24513:18;24505:26;;24577:9;24571:4;24567:20;24563:1;24552:9;24548:17;24541:47;24605:131;24731:4;24605:131;:::i;:::-;24597:139;;24495:248;;;:::o;24749:419::-;;24953:2;24942:9;24938:18;24930:26;;25002:9;24996:4;24992:20;24988:1;24977:9;24973:17;24966:47;25030:131;25156:4;25030:131;:::i;:::-;25022:139;;24920:248;;;:::o;25174:419::-;;25378:2;25367:9;25363:18;25355:26;;25427:9;25421:4;25417:20;25413:1;25402:9;25398:17;25391:47;25455:131;25581:4;25455:131;:::i;:::-;25447:139;;25345:248;;;:::o;25599:419::-;;25803:2;25792:9;25788:18;25780:26;;25852:9;25846:4;25842:20;25838:1;25827:9;25823:17;25816:47;25880:131;26006:4;25880:131;:::i;:::-;25872:139;;25770:248;;;:::o;26024:419::-;;26228:2;26217:9;26213:18;26205:26;;26277:9;26271:4;26267:20;26263:1;26252:9;26248:17;26241:47;26305:131;26431:4;26305:131;:::i;:::-;26297:139;;26195:248;;;:::o;26449:419::-;;26653:2;26642:9;26638:18;26630:26;;26702:9;26696:4;26692:20;26688:1;26677:9;26673:17;26666:47;26730:131;26856:4;26730:131;:::i;:::-;26722:139;;26620:248;;;:::o;26874:419::-;;27078:2;27067:9;27063:18;27055:26;;27127:9;27121:4;27117:20;27113:1;27102:9;27098:17;27091:47;27155:131;27281:4;27155:131;:::i;:::-;27147:139;;27045:248;;;:::o;27299:419::-;;27503:2;27492:9;27488:18;27480:26;;27552:9;27546:4;27542:20;27538:1;27527:9;27523:17;27516:47;27580:131;27706:4;27580:131;:::i;:::-;27572:139;;27470:248;;;:::o;27724:419::-;;27928:2;27917:9;27913:18;27905:26;;27977:9;27971:4;27967:20;27963:1;27952:9;27948:17;27941:47;28005:131;28131:4;28005:131;:::i;:::-;27997:139;;27895:248;;;:::o;28149:419::-;;28353:2;28342:9;28338:18;28330:26;;28402:9;28396:4;28392:20;28388:1;28377:9;28373:17;28366:47;28430:131;28556:4;28430:131;:::i;:::-;28422:139;;28320:248;;;:::o;28574:419::-;;28778:2;28767:9;28763:18;28755:26;;28827:9;28821:4;28817:20;28813:1;28802:9;28798:17;28791:47;28855:131;28981:4;28855:131;:::i;:::-;28847:139;;28745:248;;;:::o;28999:419::-;;29203:2;29192:9;29188:18;29180:26;;29252:9;29246:4;29242:20;29238:1;29227:9;29223:17;29216:47;29280:131;29406:4;29280:131;:::i;:::-;29272:139;;29170:248;;;:::o;29424:419::-;;29628:2;29617:9;29613:18;29605:26;;29677:9;29671:4;29667:20;29663:1;29652:9;29648:17;29641:47;29705:131;29831:4;29705:131;:::i;:::-;29697:139;;29595:248;;;:::o;29849:419::-;;30053:2;30042:9;30038:18;30030:26;;30102:9;30096:4;30092:20;30088:1;30077:9;30073:17;30066:47;30130:131;30256:4;30130:131;:::i;:::-;30122:139;;30020:248;;;:::o;30274:419::-;;30478:2;30467:9;30463:18;30455:26;;30527:9;30521:4;30517:20;30513:1;30502:9;30498:17;30491:47;30555:131;30681:4;30555:131;:::i;:::-;30547:139;;30445:248;;;:::o;30699:419::-;;30903:2;30892:9;30888:18;30880:26;;30952:9;30946:4;30942:20;30938:1;30927:9;30923:17;30916:47;30980:131;31106:4;30980:131;:::i;:::-;30972:139;;30870:248;;;:::o;31124:419::-;;31328:2;31317:9;31313:18;31305:26;;31377:9;31371:4;31367:20;31363:1;31352:9;31348:17;31341:47;31405:131;31531:4;31405:131;:::i;:::-;31397:139;;31295:248;;;:::o;31549:419::-;;31753:2;31742:9;31738:18;31730:26;;31802:9;31796:4;31792:20;31788:1;31777:9;31773:17;31766:47;31830:131;31956:4;31830:131;:::i;:::-;31822:139;;31720:248;;;:::o;32399:419::-;;32603:2;32592:9;32588:18;32580:26;;32652:9;32646:4;32642:20;32638:1;32627:9;32623:17;32616:47;32680:131;32806:4;32680:131;:::i;:::-;32672:139;;32570:248;;;:::o;32824:419::-;;33028:2;33017:9;33013:18;33005:26;;33077:9;33071:4;33067:20;33063:1;33052:9;33048:17;33041:47;33105:131;33231:4;33105:131;:::i;:::-;33097:139;;32995:248;;;:::o;33249:222::-;;33380:2;33369:9;33365:18;33357:26;;33393:71;33461:1;33450:9;33446:17;33437:6;33393:71;:::i;:::-;33347:124;;;;:::o;33477:283::-;;33543:2;33537:9;33527:19;;33585:4;33577:6;33573:17;33692:6;33680:10;33677:22;33656:18;33644:10;33641:34;33638:62;33635:2;;;33703:18;;:::i;:::-;33635:2;33743:10;33739:2;33732:22;33517:243;;;;:::o;33766:331::-;;33917:18;33909:6;33906:30;33903:2;;;33939:18;;:::i;:::-;33903:2;34024:4;34020:9;34013:4;34005:6;34001:17;33997:33;33989:41;;34085:4;34079;34075:15;34067:23;;33832:265;;;:::o;34103:332::-;;34255:18;34247:6;34244:30;34241:2;;;34277:18;;:::i;:::-;34241:2;34362:4;34358:9;34351:4;34343:6;34339:17;34335:33;34327:41;;34423:4;34417;34413:15;34405:23;;34170:265;;;:::o;34441:141::-;;34513:3;34505:11;;34536:3;34533:1;34526:14;34570:4;34567:1;34557:18;34549:26;;34495:87;;;:::o;34588:98::-;;34673:5;34667:12;34657:22;;34646:40;;;:::o;34692:99::-;;34778:5;34772:12;34762:22;;34751:40;;;:::o;34797:168::-;;34914:6;34909:3;34902:19;34954:4;34949:3;34945:14;34930:29;;34892:73;;;;:::o;34971:147::-;;35109:3;35094:18;;35084:34;;;;:::o;35124:169::-;;35242:6;35237:3;35230:19;35282:4;35277:3;35273:14;35258:29;;35220:73;;;;:::o;35299:148::-;;35438:3;35423:18;;35413:34;;;;:::o;35453:273::-;;35512:20;35530:1;35512:20;:::i;:::-;35507:25;;35546:20;35564:1;35546:20;:::i;:::-;35541:25;;35668:1;35632:34;35628:42;35625:1;35622:49;35619:2;;;35674:18;;:::i;:::-;35619:2;35718:1;35715;35711:9;35704:16;;35497:229;;;;:::o;35732:305::-;;35791:20;35809:1;35791:20;:::i;:::-;35786:25;;35825:20;35843:1;35825:20;:::i;:::-;35820:25;;35979:1;35911:66;35907:74;35904:1;35901:81;35898:2;;;35985:18;;:::i;:::-;35898:2;36029:1;36026;36022:9;36015:16;;35776:261;;;;:::o;36043:185::-;;36100:20;36118:1;36100:20;:::i;:::-;36095:25;;36134:20;36152:1;36134:20;:::i;:::-;36129:25;;36173:1;36163:2;;36178:18;;:::i;:::-;36163:2;36220:1;36217;36213:9;36208:14;;36085:143;;;;:::o;36234:348::-;;36297:20;36315:1;36297:20;:::i;:::-;36292:25;;36331:20;36349:1;36331:20;:::i;:::-;36326:25;;36519:1;36451:66;36447:74;36444:1;36441:81;36436:1;36429:9;36422:17;36418:105;36415:2;;;36526:18;;:::i;:::-;36415:2;36574:1;36571;36567:9;36556:20;;36282:300;;;;:::o;36588:191::-;;36648:20;36666:1;36648:20;:::i;:::-;36643:25;;36682:20;36700:1;36682:20;:::i;:::-;36677:25;;36721:1;36718;36715:8;36712:2;;;36726:18;;:::i;:::-;36712:2;36771:1;36768;36764:9;36756:17;;36633:146;;;;:::o;36785:96::-;;36851:24;36869:5;36851:24;:::i;:::-;36840:35;;36830:51;;;:::o;36887:90::-;;36964:5;36957:13;36950:21;36939:32;;36929:48;;;:::o;36983:149::-;;37059:66;37052:5;37048:78;37037:89;;37027:105;;;:::o;37138:118::-;;37215:34;37208:5;37204:46;37193:57;;37183:73;;;:::o;37262:126::-;;37339:42;37332:5;37328:54;37317:65;;37307:81;;;:::o;37394:77::-;;37460:5;37449:16;;37439:32;;;:::o;37477:154::-;37561:6;37556:3;37551;37538:30;37623:1;37614:6;37609:3;37605:16;37598:27;37528:103;;;:::o;37637:307::-;37705:1;37715:113;37729:6;37726:1;37723:13;37715:113;;;37814:1;37809:3;37805:11;37799:18;37795:1;37790:3;37786:11;37779:39;37751:2;37748:1;37744:10;37739:15;;37715:113;;;37846:6;37843:1;37840:13;37837:2;;;37926:1;37917:6;37912:3;37908:16;37901:27;37837:2;37686:258;;;;:::o;37950:171::-;;38012:24;38030:5;38012:24;:::i;:::-;38003:33;;38058:4;38051:5;38048:15;38045:2;;;38066:18;;:::i;:::-;38045:2;38113:1;38106:5;38102:13;38095:20;;37993:128;;;:::o;38127:320::-;;38208:1;38202:4;38198:12;38188:22;;38255:1;38249:4;38245:12;38276:18;38266:2;;38332:4;38324:6;38320:17;38310:27;;38266:2;38394;38386:6;38383:14;38363:18;38360:38;38357:2;;;38413:18;;:::i;:::-;38357:2;38178:269;;;;:::o;38453:233::-;;38515:24;38533:5;38515:24;:::i;:::-;38506:33;;38561:66;38554:5;38551:77;38548:2;;;38631:18;;:::i;:::-;38548:2;38678:1;38671:5;38667:13;38660:20;;38496:190;;;:::o;38692:176::-;;38741:20;38759:1;38741:20;:::i;:::-;38736:25;;38775:20;38793:1;38775:20;:::i;:::-;38770:25;;38814:1;38804:2;;38819:18;;:::i;:::-;38804:2;38860:1;38857;38853:9;38848:14;;38726:142;;;;:::o;38874:180::-;38922:77;38919:1;38912:88;39019:4;39016:1;39009:15;39043:4;39040:1;39033:15;39060:180;39108:77;39105:1;39098:88;39205:4;39202:1;39195:15;39229:4;39226:1;39219:15;39246:180;39294:77;39291:1;39284:88;39391:4;39388:1;39381:15;39415:4;39412:1;39405:15;39432:180;39480:77;39477:1;39470:88;39577:4;39574:1;39567:15;39601:4;39598:1;39591:15;39618:102;;39710:2;39706:7;39701:2;39694:5;39690:14;39686:28;39676:38;;39666:54;;;:::o;39726:122::-;39799:24;39817:5;39799:24;:::i;:::-;39792:5;39789:35;39779:2;;39838:1;39835;39828:12;39779:2;39769:79;:::o;39854:116::-;39924:21;39939:5;39924:21;:::i;:::-;39917:5;39914:32;39904:2;;39960:1;39957;39950:12;39904:2;39894:76;:::o;39976:120::-;40048:23;40065:5;40048:23;:::i;:::-;40041:5;40038:34;40028:2;;40086:1;40083;40076:12;40028:2;40018:78;:::o;40102:122::-;40175:24;40193:5;40175:24;:::i;:::-;40168:5;40165:35;40155:2;;40214:1;40211;40204:12;40155:2;40145:79;:::o

Swarm Source

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