ETH Price: $2,519.84 (-0.37%)

Token

coolmfer (cmfers)
 

Overview

Max Total Supply

1,027 cmfers

Holders

51

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 cmfers
0xBBE916581C65D5989965A4975b380F296701cC7b
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:
coolmfer

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-22
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


abstract contract Ownable is Context {
    address private _owner;

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


    constructor() {
        _transferOwnership(_msgSender());
    }


    function owner() public view virtual returns (address) {
        return _owner;
    }


    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }


    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }


    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";


    function toString(uint256 value) internal pure returns (string memory) {

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


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


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


interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File @openzeppelin/contracts/token/ERC721/[email protected]


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


// File @openzeppelin/contracts/token/ERC721/[email protected]


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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


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


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


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


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


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


// File contracts/test.sol


contract coolmfer is ERC721A, Ownable {

    string public baseURI = "";
    string public contractURI = "";
    string public constant baseExtension = ".json";
    address public constant proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1;

    uint256 public constant MAX_PER_TX_FREE = 10;
    uint256 public constant MAX_PER_TX = 20;
    uint256 public constant FREE_MAX_SUPPLY = 1000;
    uint256 public constant MAX_SUPPLY = 6969;
    uint256 public constant price = 0.0069 ether;

    bool public paused = true;

    constructor() ERC721A("coolmfer", "cmfers") {}

    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 isApprovedForAll(address owner, address operator)
        override
        public
        view
        returns (bool)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

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

    function setupOS() external onlyOwner {
        _safeMint(_msgSender(), 1);
    }

    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 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 OwnableDelegateProxy { }
contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

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":[],"name":"setupOS","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"}]

60806040526000805560405180602001604052806000815250600890805190602001906200002f92919062000215565b5060405180602001604052806000815250600990805190602001906200005792919062000215565b506001600a60006101000a81548160ff0219169083151502179055503480156200008057600080fd5b506040518060400160405280600881526020017f636f6f6c6d6665720000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f636d66657273000000000000000000000000000000000000000000000000000081525081600190805190602001906200010592919062000215565b5080600290805190602001906200011e92919062000215565b50505062000141620001356200014760201b60201c565b6200014f60201b60201c565b6200032a565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022390620002f4565b90600052602060002090601f01602090048101928262000247576000855562000293565b82601f106200026257805160ff191683800117855562000293565b8280016001018555821562000293579182015b828111156200029257825182559160200191906001019062000275565b5b509050620002a29190620002a6565b5090565b5b80821115620002c1576000816000905550600101620002a7565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030d57607f821691505b60208210811415620003245762000323620002c5565b5b50919050565b61492a806200033a6000396000f3fe6080604052600436106102045760003560e01c80636c0360eb11610118578063a22cb465116100a0578063cd7c03261161006f578063cd7c032614610736578063e8a3d48514610761578063e985e9c51461078c578063f2fde38b146107c9578063f43a22dc146107f257610204565b8063a22cb4651461067c578063b88d4fde146106a5578063c6682862146106ce578063c87b56dd146106f957610204565b80638da5cb5b116100e75780638da5cb5b146105b6578063938e3d7b146105e157806395d89b411461060a578063a035b1fe14610635578063a0712d681461066057610204565b80636c0360eb1461050c57806370a0823114610537578063715018a6146105745780638069876d1461058b57610204565b806332cb6b0c1161019b5780634f6ccce71161016a5780634f6ccce71461042757806355f804b3146104645780635c975abb1461048d5780636352211e146104b8578063698982ba146104f557610204565b806332cb6b0c146103915780633ccfd60b146103bc57806342842e0e146103d3578063463fff79146103fc57610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd1461030057806323b872dd1461032b5780632f745c591461035457610204565b806301ffc9a71461020957806302329a291461024657806306fdde031461026f578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612f4a565b61081d565b60405161023d9190612f92565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612fd9565b610967565b005b34801561027b57600080fd5b50610284610a00565b604051610291919061309f565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc91906130f7565b610a92565b6040516102ce9190613165565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f991906131ac565b610b17565b005b34801561030c57600080fd5b50610315610c30565b60405161032291906131fb565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190613216565b610c39565b005b34801561036057600080fd5b5061037b600480360381019061037691906131ac565b610c49565b60405161038891906131fb565b60405180910390f35b34801561039d57600080fd5b506103a6610e47565b6040516103b391906131fb565b60405180910390f35b3480156103c857600080fd5b506103d1610e4d565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190613216565b610f85565b005b34801561040857600080fd5b50610411610fa5565b60405161041e91906131fb565b60405180910390f35b34801561043357600080fd5b5061044e600480360381019061044991906130f7565b610faa565b60405161045b91906131fb565b60405180910390f35b34801561047057600080fd5b5061048b6004803603810190610486919061339e565b610ffd565b005b34801561049957600080fd5b506104a2611093565b6040516104af9190612f92565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da91906130f7565b6110a6565b6040516104ec9190613165565b60405180910390f35b34801561050157600080fd5b5061050a6110bc565b005b34801561051857600080fd5b5061052161114c565b60405161052e919061309f565b60405180910390f35b34801561054357600080fd5b5061055e600480360381019061055991906133e7565b6111da565b60405161056b91906131fb565b60405180910390f35b34801561058057600080fd5b506105896112c3565b005b34801561059757600080fd5b506105a061134b565b6040516105ad91906131fb565b60405180910390f35b3480156105c257600080fd5b506105cb611351565b6040516105d89190613165565b60405180910390f35b3480156105ed57600080fd5b506106086004803603810190610603919061339e565b61137b565b005b34801561061657600080fd5b5061061f611411565b60405161062c919061309f565b60405180910390f35b34801561064157600080fd5b5061064a6114a3565b60405161065791906131fb565b60405180910390f35b61067a600480360381019061067591906130f7565b6114ae565b005b34801561068857600080fd5b506106a3600480360381019061069e9190613414565b611712565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906134f5565b611893565b005b3480156106da57600080fd5b506106e36118ef565b6040516106f0919061309f565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b91906130f7565b611928565b60405161072d919061309f565b60405180910390f35b34801561074257600080fd5b5061074b611a07565b6040516107589190613165565b60405180910390f35b34801561076d57600080fd5b50610776611a1f565b604051610783919061309f565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190613578565b611aad565b6040516107c09190612f92565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb91906133e7565b611b92565b005b3480156107fe57600080fd5b50610807611c8a565b60405161081491906131fb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610960575061095f82611c8f565b5b9050919050565b61096f611cf9565b73ffffffffffffffffffffffffffffffffffffffff1661098d611351565b73ffffffffffffffffffffffffffffffffffffffff16146109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90613604565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b606060018054610a0f90613653565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3b90613653565b8015610a885780601f10610a5d57610100808354040283529160200191610a88565b820191906000526020600020905b815481529060010190602001808311610a6b57829003601f168201915b5050505050905090565b6000610a9d82611d01565b610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad3906136f7565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b22826110a6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90613789565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb2611cf9565b73ffffffffffffffffffffffffffffffffffffffff161480610be15750610be081610bdb611cf9565b611aad565b5b610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179061381b565b60405180910390fd5b610c2b838383611d0e565b505050565b60008054905090565b610c44838383611dc0565b505050565b6000610c54836111da565b8210610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c906138ad565b60405180910390fd5b6000610c9f610c30565b905060008060005b83811015610e05576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d9957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df15786841415610de2578195505050505050610e41565b8380610ded906138fc565b9450505b508080610dfd906138fc565b915050610ca7565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e38906139b7565b60405180910390fd5b92915050565b611b3981565b610e55611cf9565b73ffffffffffffffffffffffffffffffffffffffff16610e73611351565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090613604565b60405180910390fd5b60004790506000610ed8611cf9565b73ffffffffffffffffffffffffffffffffffffffff1682604051610efb90613a08565b60006040518083038185875af1925050503d8060008114610f38576040519150601f19603f3d011682016040523d82523d6000602084013e610f3d565b606091505b5050905080610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613a69565b60405180910390fd5b5050565b610fa083838360405180602001604052806000815250611893565b505050565b600a81565b6000610fb4610c30565b8210610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613afb565b60405180910390fd5b819050919050565b611005611cf9565b73ffffffffffffffffffffffffffffffffffffffff16611023611351565b73ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613604565b60405180910390fd5b806008908051906020019061108f929190612e01565b5050565b600a60009054906101000a900460ff1681565b60006110b182612367565b600001519050919050565b6110c4611cf9565b73ffffffffffffffffffffffffffffffffffffffff166110e2611351565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90613604565b60405180910390fd5b61114a611143611cf9565b60016124c2565b565b6008805461115990613653565b80601f016020809104026020016040519081016040528092919081815260200182805461118590613653565b80156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613b8d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112cb611cf9565b73ffffffffffffffffffffffffffffffffffffffff166112e9611351565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690613604565b60405180910390fd5b61134960006124e0565b565b6103e881565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611383611cf9565b73ffffffffffffffffffffffffffffffffffffffff166113a1611351565b73ffffffffffffffffffffffffffffffffffffffff16146113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90613604565b60405180910390fd5b806009908051906020019061140d929190612e01565b5050565b60606002805461142090613653565b80601f016020809104026020016040519081016040528092919081815260200182805461144c90613653565b80156114995780601f1061146e57610100808354040283529160200191611499565b820191906000526020600020905b81548152906001019060200180831161147c57829003601f168201915b5050505050905090565b6618838370f3400081565b60006114b8611cf9565b9050600a60009054906101000a900460ff161561150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190613bf9565b60405180910390fd5b81611513610c30565b61151d9190613c19565b611b391015611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613cbb565b60405180910390fd5b600082116115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b90613d27565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990613d93565b60405180910390fd5b61161a610c30565b6103e81061166b5781600a1015611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613dff565b60405180910390fd5b611704565b81601410156116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690613e6b565b60405180910390fd5b346618838370f34000836116c39190613e8b565b14611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90613f31565b60405180910390fd5b5b61170e81836124c2565b5050565b61171a611cf9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90613f9d565b60405180910390fd5b8060066000611795611cf9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611842611cf9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118879190612f92565b60405180910390a35050565b61189e848484611dc0565b6118aa848484846125a6565b6118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e09061402f565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061193382611d01565b611972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119699061409b565b60405180910390fd5b60006008805461198190613653565b90501161199d5760405180602001604052806000815250611a00565b60086119a88361272e565b6040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506040516020016119f09392919061418b565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054611a2c90613653565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5890613653565b8015611aa55780601f10611a7a57610100808354040283529160200191611aa5565b820191906000526020600020905b815481529060010190602001808311611a8857829003601f168201915b505050505081565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611b179190613165565b602060405180830381865afa158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5891906141fa565b73ffffffffffffffffffffffffffffffffffffffff161415611b7e576001915050611b8c565b611b88848461288f565b9150505b92915050565b611b9a611cf9565b73ffffffffffffffffffffffffffffffffffffffff16611bb8611351565b73ffffffffffffffffffffffffffffffffffffffff1614611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590613604565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7590614299565b60405180910390fd5b611c87816124e0565b50565b601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611dcb82612367565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611df2611cf9565b73ffffffffffffffffffffffffffffffffffffffff161480611e4e5750611e17611cf9565b73ffffffffffffffffffffffffffffffffffffffff16611e3684610a92565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e6a5750611e698260000151611e64611cf9565b611aad565b5b905080611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea39061432b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f15906143bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f859061444f565b60405180910390fd5b611f9b8585856001612923565b611fab6000848460000151611d0e565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846121b19190613c19565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122f75761222781611d01565b156122f6576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461235f8686866001612929565b505050505050565b61236f612e87565b61237882611d01565b6123b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ae906144e1565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124a95780925050506124bd565b5080806124b590614501565b9150506123bd565b919050565b6124dc82826040518060200160405280600081525061292f565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125c78473ffffffffffffffffffffffffffffffffffffffff16612dee565b15612721578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f0611cf9565b8786866040518563ffffffff1660e01b81526004016126129493929190614580565b6020604051808303816000875af192505050801561264e57506040513d601f19601f8201168201806040525081019061264b91906145e1565b60015b6126d1573d806000811461267e576040519150601f19603f3d011682016040523d82523d6000602084013e612683565b606091505b506000815114156126c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c09061402f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612726565b600190505b949350505050565b60606000821415612776576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061288a565b600082905060005b600082146127a8578080612791906138fc565b915050600a826127a1919061463d565b915061277e565b60008167ffffffffffffffff8111156127c4576127c3613273565b5b6040519080825280601f01601f1916602001820160405280156127f65781602001600182028036833780820191505090505b5090505b600085146128835760018261280f919061466e565b9150600a8561281e91906146a2565b603061282a9190613c19565b60f81b8183815181106128405761283f6146d3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561287c919061463d565b94506127fa565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614774565b60405180910390fd5b6129ae81611d01565b156129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e5906147e0565b60405180910390fd5b60008311612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2890614872565b60405180910390fd5b612a3e6000858386612923565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b3b91906148ae565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b6291906148ae565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612dd157818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d7160008884886125a6565b612db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da79061402f565b60405180910390fd5b8180612dbb906138fc565b9250508080612dc9906138fc565b915050612d00565b5080600081905550612de66000878588612929565b505050505050565b600080823b905060008111915050919050565b828054612e0d90613653565b90600052602060002090601f016020900481019282612e2f5760008555612e76565b82601f10612e4857805160ff1916838001178555612e76565b82800160010185558215612e76579182015b82811115612e75578251825591602001919060010190612e5a565b5b509050612e839190612ec1565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612eda576000816000905550600101612ec2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f2781612ef2565b8114612f3257600080fd5b50565b600081359050612f4481612f1e565b92915050565b600060208284031215612f6057612f5f612ee8565b5b6000612f6e84828501612f35565b91505092915050565b60008115159050919050565b612f8c81612f77565b82525050565b6000602082019050612fa76000830184612f83565b92915050565b612fb681612f77565b8114612fc157600080fd5b50565b600081359050612fd381612fad565b92915050565b600060208284031215612fef57612fee612ee8565b5b6000612ffd84828501612fc4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613040578082015181840152602081019050613025565b8381111561304f576000848401525b50505050565b6000601f19601f8301169050919050565b600061307182613006565b61307b8185613011565b935061308b818560208601613022565b61309481613055565b840191505092915050565b600060208201905081810360008301526130b98184613066565b905092915050565b6000819050919050565b6130d4816130c1565b81146130df57600080fd5b50565b6000813590506130f1816130cb565b92915050565b60006020828403121561310d5761310c612ee8565b5b600061311b848285016130e2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061314f82613124565b9050919050565b61315f81613144565b82525050565b600060208201905061317a6000830184613156565b92915050565b61318981613144565b811461319457600080fd5b50565b6000813590506131a681613180565b92915050565b600080604083850312156131c3576131c2612ee8565b5b60006131d185828601613197565b92505060206131e2858286016130e2565b9150509250929050565b6131f5816130c1565b82525050565b600060208201905061321060008301846131ec565b92915050565b60008060006060848603121561322f5761322e612ee8565b5b600061323d86828701613197565b935050602061324e86828701613197565b925050604061325f868287016130e2565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132ab82613055565b810181811067ffffffffffffffff821117156132ca576132c9613273565b5b80604052505050565b60006132dd612ede565b90506132e982826132a2565b919050565b600067ffffffffffffffff82111561330957613308613273565b5b61331282613055565b9050602081019050919050565b82818337600083830152505050565b600061334161333c846132ee565b6132d3565b90508281526020810184848401111561335d5761335c61326e565b5b61336884828561331f565b509392505050565b600082601f83011261338557613384613269565b5b813561339584826020860161332e565b91505092915050565b6000602082840312156133b4576133b3612ee8565b5b600082013567ffffffffffffffff8111156133d2576133d1612eed565b5b6133de84828501613370565b91505092915050565b6000602082840312156133fd576133fc612ee8565b5b600061340b84828501613197565b91505092915050565b6000806040838503121561342b5761342a612ee8565b5b600061343985828601613197565b925050602061344a85828601612fc4565b9150509250929050565b600067ffffffffffffffff82111561346f5761346e613273565b5b61347882613055565b9050602081019050919050565b600061349861349384613454565b6132d3565b9050828152602081018484840111156134b4576134b361326e565b5b6134bf84828561331f565b509392505050565b600082601f8301126134dc576134db613269565b5b81356134ec848260208601613485565b91505092915050565b6000806000806080858703121561350f5761350e612ee8565b5b600061351d87828801613197565b945050602061352e87828801613197565b935050604061353f878288016130e2565b925050606085013567ffffffffffffffff8111156135605761355f612eed565b5b61356c878288016134c7565b91505092959194509250565b6000806040838503121561358f5761358e612ee8565b5b600061359d85828601613197565b92505060206135ae85828601613197565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135ee602083613011565b91506135f9826135b8565b602082019050919050565b6000602082019050818103600083015261361d816135e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061366b57607f821691505b6020821081141561367f5761367e613624565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136e1602d83613011565b91506136ec82613685565b604082019050919050565b60006020820190508181036000830152613710816136d4565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613773602283613011565b915061377e82613717565b604082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613805603983613011565b9150613810826137a9565b604082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613897602283613011565b91506138a28261383b565b604082019050919050565b600060208201905081810360008301526138c68161388a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613907826130c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561393a576139396138cd565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006139a1602e83613011565b91506139ac82613945565b604082019050919050565b600060208201905081810360008301526139d081613994565b9050919050565b600081905092915050565b50565b60006139f26000836139d7565b91506139fd826139e2565b600082019050919050565b6000613a13826139e5565b9150819050919050565b7f4661696c656420746f2073656e64000000000000000000000000000000000000600082015250565b6000613a53600e83613011565b9150613a5e82613a1d565b602082019050919050565b60006020820190508181036000830152613a8281613a46565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ae5602383613011565b9150613af082613a89565b604082019050919050565b60006020820190508181036000830152613b1481613ad8565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613b77602b83613011565b9150613b8282613b1b565b604082019050919050565b60006020820190508181036000830152613ba681613b6a565b9050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b6000613be3600683613011565b9150613bee82613bad565b602082019050919050565b60006020820190508181036000830152613c1281613bd6565b9050919050565b6000613c24826130c1565b9150613c2f836130c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c6457613c636138cd565b5b828201905092915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000613ca5601283613011565b9150613cb082613c6f565b602082019050919050565b60006020820190508181036000830152613cd481613c98565b9050919050565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b6000613d11600a83613011565b9150613d1c82613cdb565b602082019050919050565b60006020820190508181036000830152613d4081613d04565b9050919050565b7f4e6f20636f6e7472616374730000000000000000000000000000000000000000600082015250565b6000613d7d600c83613011565b9150613d8882613d47565b602082019050919050565b60006020820190508181036000830152613dac81613d70565b9050919050565b7f457863657373206d617820706572206672656520747800000000000000000000600082015250565b6000613de9601683613011565b9150613df482613db3565b602082019050919050565b60006020820190508181036000830152613e1881613ddc565b9050919050565b7f457863657373206d617820706572207061696420747800000000000000000000600082015250565b6000613e55601683613011565b9150613e6082613e1f565b602082019050919050565b60006020820190508181036000830152613e8481613e48565b9050919050565b6000613e96826130c1565b9150613ea1836130c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eda57613ed96138cd565b5b828202905092915050565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b6000613f1b601683613011565b9150613f2682613ee5565b602082019050919050565b60006020820190508181036000830152613f4a81613f0e565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613f87601a83613011565b9150613f9282613f51565b602082019050919050565b60006020820190508181036000830152613fb681613f7a565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614019603383613011565b915061402482613fbd565b604082019050919050565b600060208201905081810360008301526140488161400c565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b6000614085601583613011565b91506140908261404f565b602082019050919050565b600060208201905081810360008301526140b481614078565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546140e881613653565b6140f281866140bb565b9450600182166000811461410d576001811461411e57614151565b60ff19831686528186019350614151565b614127856140c6565b60005b838110156141495781548189015260018201915060208101905061412a565b838801955050505b50505092915050565b600061416582613006565b61416f81856140bb565b935061417f818560208601613022565b80840191505092915050565b600061419782866140db565b91506141a3828561415a565b91506141af828461415a565b9150819050949350505050565b60006141c782613144565b9050919050565b6141d7816141bc565b81146141e257600080fd5b50565b6000815190506141f4816141ce565b92915050565b6000602082840312156142105761420f612ee8565b5b600061421e848285016141e5565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614283602683613011565b915061428e82614227565b604082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614315603283613011565b9150614320826142b9565b604082019050919050565b6000602082019050818103600083015261434481614308565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006143a7602683613011565b91506143b28261434b565b604082019050919050565b600060208201905081810360008301526143d68161439a565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614439602583613011565b9150614444826143dd565b604082019050919050565b600060208201905081810360008301526144688161442c565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006144cb602a83613011565b91506144d68261446f565b604082019050919050565b600060208201905081810360008301526144fa816144be565b9050919050565b600061450c826130c1565b915060008214156145205761451f6138cd565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006145528261452b565b61455c8185614536565b935061456c818560208601613022565b61457581613055565b840191505092915050565b60006080820190506145956000830187613156565b6145a26020830186613156565b6145af60408301856131ec565b81810360608301526145c18184614547565b905095945050505050565b6000815190506145db81612f1e565b92915050565b6000602082840312156145f7576145f6612ee8565b5b6000614605848285016145cc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614648826130c1565b9150614653836130c1565b9250826146635761466261460e565b5b828204905092915050565b6000614679826130c1565b9150614684836130c1565b925082821015614697576146966138cd565b5b828203905092915050565b60006146ad826130c1565b91506146b8836130c1565b9250826146c8576146c761460e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061475e602183613011565b915061476982614702565b604082019050919050565b6000602082019050818103600083015261478d81614751565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b60006147ca601d83613011565b91506147d582614794565b602082019050919050565b600060208201905081810360008301526147f9816147bd565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b600061485c602383613011565b915061486782614800565b604082019050919050565b6000602082019050818103600083015261488b8161484f565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006148b982614892565b91506148c483614892565b9250826fffffffffffffffffffffffffffffffff038211156148e9576148e86138cd565b5b82820190509291505056fea2646970667358221220f95b882ad40075f374fdf228d99113b33a9bf02b33ba988bb7c8f9801bc76ef864736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102045760003560e01c80636c0360eb11610118578063a22cb465116100a0578063cd7c03261161006f578063cd7c032614610736578063e8a3d48514610761578063e985e9c51461078c578063f2fde38b146107c9578063f43a22dc146107f257610204565b8063a22cb4651461067c578063b88d4fde146106a5578063c6682862146106ce578063c87b56dd146106f957610204565b80638da5cb5b116100e75780638da5cb5b146105b6578063938e3d7b146105e157806395d89b411461060a578063a035b1fe14610635578063a0712d681461066057610204565b80636c0360eb1461050c57806370a0823114610537578063715018a6146105745780638069876d1461058b57610204565b806332cb6b0c1161019b5780634f6ccce71161016a5780634f6ccce71461042757806355f804b3146104645780635c975abb1461048d5780636352211e146104b8578063698982ba146104f557610204565b806332cb6b0c146103915780633ccfd60b146103bc57806342842e0e146103d3578063463fff79146103fc57610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd1461030057806323b872dd1461032b5780632f745c591461035457610204565b806301ffc9a71461020957806302329a291461024657806306fdde031461026f578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612f4a565b61081d565b60405161023d9190612f92565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612fd9565b610967565b005b34801561027b57600080fd5b50610284610a00565b604051610291919061309f565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc91906130f7565b610a92565b6040516102ce9190613165565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f991906131ac565b610b17565b005b34801561030c57600080fd5b50610315610c30565b60405161032291906131fb565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190613216565b610c39565b005b34801561036057600080fd5b5061037b600480360381019061037691906131ac565b610c49565b60405161038891906131fb565b60405180910390f35b34801561039d57600080fd5b506103a6610e47565b6040516103b391906131fb565b60405180910390f35b3480156103c857600080fd5b506103d1610e4d565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190613216565b610f85565b005b34801561040857600080fd5b50610411610fa5565b60405161041e91906131fb565b60405180910390f35b34801561043357600080fd5b5061044e600480360381019061044991906130f7565b610faa565b60405161045b91906131fb565b60405180910390f35b34801561047057600080fd5b5061048b6004803603810190610486919061339e565b610ffd565b005b34801561049957600080fd5b506104a2611093565b6040516104af9190612f92565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da91906130f7565b6110a6565b6040516104ec9190613165565b60405180910390f35b34801561050157600080fd5b5061050a6110bc565b005b34801561051857600080fd5b5061052161114c565b60405161052e919061309f565b60405180910390f35b34801561054357600080fd5b5061055e600480360381019061055991906133e7565b6111da565b60405161056b91906131fb565b60405180910390f35b34801561058057600080fd5b506105896112c3565b005b34801561059757600080fd5b506105a061134b565b6040516105ad91906131fb565b60405180910390f35b3480156105c257600080fd5b506105cb611351565b6040516105d89190613165565b60405180910390f35b3480156105ed57600080fd5b506106086004803603810190610603919061339e565b61137b565b005b34801561061657600080fd5b5061061f611411565b60405161062c919061309f565b60405180910390f35b34801561064157600080fd5b5061064a6114a3565b60405161065791906131fb565b60405180910390f35b61067a600480360381019061067591906130f7565b6114ae565b005b34801561068857600080fd5b506106a3600480360381019061069e9190613414565b611712565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906134f5565b611893565b005b3480156106da57600080fd5b506106e36118ef565b6040516106f0919061309f565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b91906130f7565b611928565b60405161072d919061309f565b60405180910390f35b34801561074257600080fd5b5061074b611a07565b6040516107589190613165565b60405180910390f35b34801561076d57600080fd5b50610776611a1f565b604051610783919061309f565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190613578565b611aad565b6040516107c09190612f92565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb91906133e7565b611b92565b005b3480156107fe57600080fd5b50610807611c8a565b60405161081491906131fb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610960575061095f82611c8f565b5b9050919050565b61096f611cf9565b73ffffffffffffffffffffffffffffffffffffffff1661098d611351565b73ffffffffffffffffffffffffffffffffffffffff16146109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90613604565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b606060018054610a0f90613653565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3b90613653565b8015610a885780601f10610a5d57610100808354040283529160200191610a88565b820191906000526020600020905b815481529060010190602001808311610a6b57829003601f168201915b5050505050905090565b6000610a9d82611d01565b610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad3906136f7565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b22826110a6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90613789565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb2611cf9565b73ffffffffffffffffffffffffffffffffffffffff161480610be15750610be081610bdb611cf9565b611aad565b5b610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179061381b565b60405180910390fd5b610c2b838383611d0e565b505050565b60008054905090565b610c44838383611dc0565b505050565b6000610c54836111da565b8210610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c906138ad565b60405180910390fd5b6000610c9f610c30565b905060008060005b83811015610e05576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d9957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df15786841415610de2578195505050505050610e41565b8380610ded906138fc565b9450505b508080610dfd906138fc565b915050610ca7565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e38906139b7565b60405180910390fd5b92915050565b611b3981565b610e55611cf9565b73ffffffffffffffffffffffffffffffffffffffff16610e73611351565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090613604565b60405180910390fd5b60004790506000610ed8611cf9565b73ffffffffffffffffffffffffffffffffffffffff1682604051610efb90613a08565b60006040518083038185875af1925050503d8060008114610f38576040519150601f19603f3d011682016040523d82523d6000602084013e610f3d565b606091505b5050905080610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613a69565b60405180910390fd5b5050565b610fa083838360405180602001604052806000815250611893565b505050565b600a81565b6000610fb4610c30565b8210610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613afb565b60405180910390fd5b819050919050565b611005611cf9565b73ffffffffffffffffffffffffffffffffffffffff16611023611351565b73ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613604565b60405180910390fd5b806008908051906020019061108f929190612e01565b5050565b600a60009054906101000a900460ff1681565b60006110b182612367565b600001519050919050565b6110c4611cf9565b73ffffffffffffffffffffffffffffffffffffffff166110e2611351565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90613604565b60405180910390fd5b61114a611143611cf9565b60016124c2565b565b6008805461115990613653565b80601f016020809104026020016040519081016040528092919081815260200182805461118590613653565b80156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613b8d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112cb611cf9565b73ffffffffffffffffffffffffffffffffffffffff166112e9611351565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690613604565b60405180910390fd5b61134960006124e0565b565b6103e881565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611383611cf9565b73ffffffffffffffffffffffffffffffffffffffff166113a1611351565b73ffffffffffffffffffffffffffffffffffffffff16146113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90613604565b60405180910390fd5b806009908051906020019061140d929190612e01565b5050565b60606002805461142090613653565b80601f016020809104026020016040519081016040528092919081815260200182805461144c90613653565b80156114995780601f1061146e57610100808354040283529160200191611499565b820191906000526020600020905b81548152906001019060200180831161147c57829003601f168201915b5050505050905090565b6618838370f3400081565b60006114b8611cf9565b9050600a60009054906101000a900460ff161561150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190613bf9565b60405180910390fd5b81611513610c30565b61151d9190613c19565b611b391015611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613cbb565b60405180910390fd5b600082116115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b90613d27565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990613d93565b60405180910390fd5b61161a610c30565b6103e81061166b5781600a1015611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613dff565b60405180910390fd5b611704565b81601410156116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690613e6b565b60405180910390fd5b346618838370f34000836116c39190613e8b565b14611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90613f31565b60405180910390fd5b5b61170e81836124c2565b5050565b61171a611cf9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90613f9d565b60405180910390fd5b8060066000611795611cf9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611842611cf9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118879190612f92565b60405180910390a35050565b61189e848484611dc0565b6118aa848484846125a6565b6118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e09061402f565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061193382611d01565b611972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119699061409b565b60405180910390fd5b60006008805461198190613653565b90501161199d5760405180602001604052806000815250611a00565b60086119a88361272e565b6040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506040516020016119f09392919061418b565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054611a2c90613653565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5890613653565b8015611aa55780601f10611a7a57610100808354040283529160200191611aa5565b820191906000526020600020905b815481529060010190602001808311611a8857829003601f168201915b505050505081565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611b179190613165565b602060405180830381865afa158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5891906141fa565b73ffffffffffffffffffffffffffffffffffffffff161415611b7e576001915050611b8c565b611b88848461288f565b9150505b92915050565b611b9a611cf9565b73ffffffffffffffffffffffffffffffffffffffff16611bb8611351565b73ffffffffffffffffffffffffffffffffffffffff1614611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590613604565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7590614299565b60405180910390fd5b611c87816124e0565b50565b601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611dcb82612367565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611df2611cf9565b73ffffffffffffffffffffffffffffffffffffffff161480611e4e5750611e17611cf9565b73ffffffffffffffffffffffffffffffffffffffff16611e3684610a92565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e6a5750611e698260000151611e64611cf9565b611aad565b5b905080611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea39061432b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f15906143bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f859061444f565b60405180910390fd5b611f9b8585856001612923565b611fab6000848460000151611d0e565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846121b19190613c19565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122f75761222781611d01565b156122f6576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461235f8686866001612929565b505050505050565b61236f612e87565b61237882611d01565b6123b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ae906144e1565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124a95780925050506124bd565b5080806124b590614501565b9150506123bd565b919050565b6124dc82826040518060200160405280600081525061292f565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125c78473ffffffffffffffffffffffffffffffffffffffff16612dee565b15612721578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f0611cf9565b8786866040518563ffffffff1660e01b81526004016126129493929190614580565b6020604051808303816000875af192505050801561264e57506040513d601f19601f8201168201806040525081019061264b91906145e1565b60015b6126d1573d806000811461267e576040519150601f19603f3d011682016040523d82523d6000602084013e612683565b606091505b506000815114156126c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c09061402f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612726565b600190505b949350505050565b60606000821415612776576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061288a565b600082905060005b600082146127a8578080612791906138fc565b915050600a826127a1919061463d565b915061277e565b60008167ffffffffffffffff8111156127c4576127c3613273565b5b6040519080825280601f01601f1916602001820160405280156127f65781602001600182028036833780820191505090505b5090505b600085146128835760018261280f919061466e565b9150600a8561281e91906146a2565b603061282a9190613c19565b60f81b8183815181106128405761283f6146d3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561287c919061463d565b94506127fa565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614774565b60405180910390fd5b6129ae81611d01565b156129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e5906147e0565b60405180910390fd5b60008311612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2890614872565b60405180910390fd5b612a3e6000858386612923565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b3b91906148ae565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b6291906148ae565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612dd157818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d7160008884886125a6565b612db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da79061402f565b60405180910390fd5b8180612dbb906138fc565b9250508080612dc9906138fc565b915050612d00565b5080600081905550612de66000878588612929565b505050505050565b600080823b905060008111915050919050565b828054612e0d90613653565b90600052602060002090601f016020900481019282612e2f5760008555612e76565b82601f10612e4857805160ff1916838001178555612e76565b82800160010185558215612e76579182015b82811115612e75578251825591602001919060010190612e5a565b5b509050612e839190612ec1565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612eda576000816000905550600101612ec2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f2781612ef2565b8114612f3257600080fd5b50565b600081359050612f4481612f1e565b92915050565b600060208284031215612f6057612f5f612ee8565b5b6000612f6e84828501612f35565b91505092915050565b60008115159050919050565b612f8c81612f77565b82525050565b6000602082019050612fa76000830184612f83565b92915050565b612fb681612f77565b8114612fc157600080fd5b50565b600081359050612fd381612fad565b92915050565b600060208284031215612fef57612fee612ee8565b5b6000612ffd84828501612fc4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613040578082015181840152602081019050613025565b8381111561304f576000848401525b50505050565b6000601f19601f8301169050919050565b600061307182613006565b61307b8185613011565b935061308b818560208601613022565b61309481613055565b840191505092915050565b600060208201905081810360008301526130b98184613066565b905092915050565b6000819050919050565b6130d4816130c1565b81146130df57600080fd5b50565b6000813590506130f1816130cb565b92915050565b60006020828403121561310d5761310c612ee8565b5b600061311b848285016130e2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061314f82613124565b9050919050565b61315f81613144565b82525050565b600060208201905061317a6000830184613156565b92915050565b61318981613144565b811461319457600080fd5b50565b6000813590506131a681613180565b92915050565b600080604083850312156131c3576131c2612ee8565b5b60006131d185828601613197565b92505060206131e2858286016130e2565b9150509250929050565b6131f5816130c1565b82525050565b600060208201905061321060008301846131ec565b92915050565b60008060006060848603121561322f5761322e612ee8565b5b600061323d86828701613197565b935050602061324e86828701613197565b925050604061325f868287016130e2565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132ab82613055565b810181811067ffffffffffffffff821117156132ca576132c9613273565b5b80604052505050565b60006132dd612ede565b90506132e982826132a2565b919050565b600067ffffffffffffffff82111561330957613308613273565b5b61331282613055565b9050602081019050919050565b82818337600083830152505050565b600061334161333c846132ee565b6132d3565b90508281526020810184848401111561335d5761335c61326e565b5b61336884828561331f565b509392505050565b600082601f83011261338557613384613269565b5b813561339584826020860161332e565b91505092915050565b6000602082840312156133b4576133b3612ee8565b5b600082013567ffffffffffffffff8111156133d2576133d1612eed565b5b6133de84828501613370565b91505092915050565b6000602082840312156133fd576133fc612ee8565b5b600061340b84828501613197565b91505092915050565b6000806040838503121561342b5761342a612ee8565b5b600061343985828601613197565b925050602061344a85828601612fc4565b9150509250929050565b600067ffffffffffffffff82111561346f5761346e613273565b5b61347882613055565b9050602081019050919050565b600061349861349384613454565b6132d3565b9050828152602081018484840111156134b4576134b361326e565b5b6134bf84828561331f565b509392505050565b600082601f8301126134dc576134db613269565b5b81356134ec848260208601613485565b91505092915050565b6000806000806080858703121561350f5761350e612ee8565b5b600061351d87828801613197565b945050602061352e87828801613197565b935050604061353f878288016130e2565b925050606085013567ffffffffffffffff8111156135605761355f612eed565b5b61356c878288016134c7565b91505092959194509250565b6000806040838503121561358f5761358e612ee8565b5b600061359d85828601613197565b92505060206135ae85828601613197565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135ee602083613011565b91506135f9826135b8565b602082019050919050565b6000602082019050818103600083015261361d816135e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061366b57607f821691505b6020821081141561367f5761367e613624565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136e1602d83613011565b91506136ec82613685565b604082019050919050565b60006020820190508181036000830152613710816136d4565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613773602283613011565b915061377e82613717565b604082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613805603983613011565b9150613810826137a9565b604082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613897602283613011565b91506138a28261383b565b604082019050919050565b600060208201905081810360008301526138c68161388a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613907826130c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561393a576139396138cd565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006139a1602e83613011565b91506139ac82613945565b604082019050919050565b600060208201905081810360008301526139d081613994565b9050919050565b600081905092915050565b50565b60006139f26000836139d7565b91506139fd826139e2565b600082019050919050565b6000613a13826139e5565b9150819050919050565b7f4661696c656420746f2073656e64000000000000000000000000000000000000600082015250565b6000613a53600e83613011565b9150613a5e82613a1d565b602082019050919050565b60006020820190508181036000830152613a8281613a46565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ae5602383613011565b9150613af082613a89565b604082019050919050565b60006020820190508181036000830152613b1481613ad8565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613b77602b83613011565b9150613b8282613b1b565b604082019050919050565b60006020820190508181036000830152613ba681613b6a565b9050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b6000613be3600683613011565b9150613bee82613bad565b602082019050919050565b60006020820190508181036000830152613c1281613bd6565b9050919050565b6000613c24826130c1565b9150613c2f836130c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c6457613c636138cd565b5b828201905092915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000613ca5601283613011565b9150613cb082613c6f565b602082019050919050565b60006020820190508181036000830152613cd481613c98565b9050919050565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b6000613d11600a83613011565b9150613d1c82613cdb565b602082019050919050565b60006020820190508181036000830152613d4081613d04565b9050919050565b7f4e6f20636f6e7472616374730000000000000000000000000000000000000000600082015250565b6000613d7d600c83613011565b9150613d8882613d47565b602082019050919050565b60006020820190508181036000830152613dac81613d70565b9050919050565b7f457863657373206d617820706572206672656520747800000000000000000000600082015250565b6000613de9601683613011565b9150613df482613db3565b602082019050919050565b60006020820190508181036000830152613e1881613ddc565b9050919050565b7f457863657373206d617820706572207061696420747800000000000000000000600082015250565b6000613e55601683613011565b9150613e6082613e1f565b602082019050919050565b60006020820190508181036000830152613e8481613e48565b9050919050565b6000613e96826130c1565b9150613ea1836130c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eda57613ed96138cd565b5b828202905092915050565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b6000613f1b601683613011565b9150613f2682613ee5565b602082019050919050565b60006020820190508181036000830152613f4a81613f0e565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613f87601a83613011565b9150613f9282613f51565b602082019050919050565b60006020820190508181036000830152613fb681613f7a565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614019603383613011565b915061402482613fbd565b604082019050919050565b600060208201905081810360008301526140488161400c565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b6000614085601583613011565b91506140908261404f565b602082019050919050565b600060208201905081810360008301526140b481614078565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546140e881613653565b6140f281866140bb565b9450600182166000811461410d576001811461411e57614151565b60ff19831686528186019350614151565b614127856140c6565b60005b838110156141495781548189015260018201915060208101905061412a565b838801955050505b50505092915050565b600061416582613006565b61416f81856140bb565b935061417f818560208601613022565b80840191505092915050565b600061419782866140db565b91506141a3828561415a565b91506141af828461415a565b9150819050949350505050565b60006141c782613144565b9050919050565b6141d7816141bc565b81146141e257600080fd5b50565b6000815190506141f4816141ce565b92915050565b6000602082840312156142105761420f612ee8565b5b600061421e848285016141e5565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614283602683613011565b915061428e82614227565b604082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614315603283613011565b9150614320826142b9565b604082019050919050565b6000602082019050818103600083015261434481614308565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006143a7602683613011565b91506143b28261434b565b604082019050919050565b600060208201905081810360008301526143d68161439a565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614439602583613011565b9150614444826143dd565b604082019050919050565b600060208201905081810360008301526144688161442c565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006144cb602a83613011565b91506144d68261446f565b604082019050919050565b600060208201905081810360008301526144fa816144be565b9050919050565b600061450c826130c1565b915060008214156145205761451f6138cd565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006145528261452b565b61455c8185614536565b935061456c818560208601613022565b61457581613055565b840191505092915050565b60006080820190506145956000830187613156565b6145a26020830186613156565b6145af60408301856131ec565b81810360608301526145c18184614547565b905095945050505050565b6000815190506145db81612f1e565b92915050565b6000602082840312156145f7576145f6612ee8565b5b6000614605848285016145cc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614648826130c1565b9150614653836130c1565b9250826146635761466261460e565b5b828204905092915050565b6000614679826130c1565b9150614684836130c1565b925082821015614697576146966138cd565b5b828203905092915050565b60006146ad826130c1565b91506146b8836130c1565b9250826146c8576146c761460e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061475e602183613011565b915061476982614702565b604082019050919050565b6000602082019050818103600083015261478d81614751565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b60006147ca601d83613011565b91506147d582614794565b602082019050919050565b600060208201905081810360008301526147f9816147bd565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b600061485c602383613011565b915061486782614800565b604082019050919050565b6000602082019050818103600083015261488b8161484f565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006148b982614892565b91506148c483614892565b9250826fffffffffffffffffffffffffffffffff038211156148e9576148e86138cd565b5b82820190509291505056fea2646970667358221220f95b882ad40075f374fdf228d99113b33a9bf02b33ba988bb7c8f9801bc76ef864736f6c634300080c0033

Deployed Bytecode Sourcemap

35435:2719:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23413:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37468:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25040:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26601:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26122:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21854:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27477:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22518:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35853:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37160:209;;;;;;;;;;;;;:::i;:::-;;27710:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35703:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22031:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37557:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35954:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24849:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37377:83;;;;;;;;;;;;;:::i;:::-;;35482:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23849:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;789:103;;;;;;;;;;;;;:::i;:::-;;35800:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;562:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37665:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25209:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35901:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36042:657;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26887:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27958:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35552:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37789:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35605:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35515:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36707:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;902:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35754:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23413:372;23515:4;23567:25;23552:40;;;:11;:40;;;;:105;;;;23624:33;23609:48;;;:11;:48;;;;23552:105;:172;;;;23689:35;23674:50;;;:11;:50;;;;23552:172;:225;;;;23741:36;23765:11;23741:23;:36::i;:::-;23552:225;23532:245;;23413:372;;;:::o;37468:81::-;710:12;:10;:12::i;:::-;699:23;;:7;:5;:7::i;:::-;:23;;;691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37535:6:::1;37526;;:15;;;;;;;;;;;;;;;;;;37468:81:::0;:::o;25040:100::-;25094:13;25127:5;25120:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25040:100;:::o;26601:214::-;26669:7;26697:16;26705:7;26697;:16::i;:::-;26689:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26783:15;:24;26799:7;26783:24;;;;;;;;;;;;;;;;;;;;;26776:31;;26601:214;;;:::o;26122:413::-;26195:13;26211:24;26227:7;26211:15;:24::i;:::-;26195:40;;26260:5;26254:11;;:2;:11;;;;26246:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26355:5;26339:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26364:37;26381:5;26388:12;:10;:12::i;:::-;26364:16;:37::i;:::-;26339:62;26317:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;26499:28;26508:2;26512:7;26521:5;26499:8;:28::i;:::-;26184:351;26122:413;;:::o;21854:100::-;21907:7;21934:12;;21927:19;;21854:100;:::o;27477:162::-;27603:28;27613:4;27619:2;27623:7;27603:9;:28::i;:::-;27477:162;;;:::o;22518:823::-;22607:7;22643:16;22653:5;22643:9;:16::i;:::-;22635:5;:24;22627:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22709:22;22734:13;:11;:13::i;:::-;22709:38;;22758:19;22792:25;22846:9;22841:426;22865:14;22861:1;:18;22841:426;;;22901:31;22935:11;:14;22947:1;22935:14;;;;;;;;;;;22901:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22994:1;22968:28;;:9;:14;;;:28;;;22964:103;;23037:9;:14;;;23017:34;;22964:103;23106:5;23085:26;;:17;:26;;;23081:175;;;23151:5;23136:11;:20;23132:77;;;23188:1;23181:8;;;;;;;;;23132:77;23227:13;;;;;:::i;:::-;;;;23081:175;22886:381;22881:3;;;;;:::i;:::-;;;;22841:426;;;;23277:56;;;;;;;;;;:::i;:::-;;;;;;;;22518:823;;;;;:::o;35853:41::-;35890:4;35853:41;:::o;37160:209::-;710:12;:10;:12::i;:::-;699:23;;:7;:5;:7::i;:::-;:23;;;691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37210:15:::1;37228:21;37210:39;;37261:12;37279;:10;:12::i;:::-;:17;;37304:7;37279:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37260:56;;;37335:7;37327:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;37199:170;;37160:209::o:0;27710:177::-;27840:39;27857:4;27863:2;27867:7;27840:39;;;;;;;;;;;;:16;:39::i;:::-;27710:177;;;:::o;35703:44::-;35745:2;35703:44;:::o;22031:187::-;22098:7;22134:13;:11;:13::i;:::-;22126:5;:21;22118:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22205:5;22198:12;;22031:187;;;:::o;37557:100::-;710:12;:10;:12::i;:::-;699:23;;:7;:5;:7::i;:::-;:23;;;691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37641:8:::1;37631:7;:18;;;;;;;;;;;;:::i;:::-;;37557:100:::0;:::o;35954:25::-;;;;;;;;;;;;;:::o;24849:124::-;24913:7;24940:20;24952:7;24940:11;:20::i;:::-;:25;;;24933:32;;24849:124;;;:::o;37377:83::-;710:12;:10;:12::i;:::-;699:23;;:7;:5;:7::i;:::-;:23;;;691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37426:26:::1;37436:12;:10;:12::i;:::-;37450:1;37426:9;:26::i;:::-;37377:83::o:0;35482:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23849:221::-;23913:7;23958:1;23941:19;;:5;:19;;;;23933:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24034:12;:19;24047:5;24034:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24026:36;;24019:43;;23849:221;;;:::o;789:103::-;710:12;:10;:12::i;:::-;699:23;;:7;:5;:7::i;:::-;:23;;;691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;854:30:::1;881:1;854:18;:30::i;:::-;789:103::o:0;35800:46::-;35842:4;35800:46;:::o;562:87::-;608:7;635:6;;;;;;;;;;;628:13;;562:87;:::o;37665:116::-;710:12;:10;:12::i;:::-;699:23;;:7;:5;:7::i;:::-;:23;;;691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37761:12:::1;37747:11;:26;;;;;;;;;;;;:::i;:::-;;37665:116:::0;:::o;25209:104::-;25265:13;25298:7;25291:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25209:104;:::o;35901:44::-;35933:12;35901:44;:::o;36042:657::-;36101:15;36119:12;:10;:12::i;:::-;36101:30;;36151:6;;;;;;;;;;;36150:7;36142:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;36217:7;36201:13;:11;:13::i;:::-;:23;;;;:::i;:::-;35890:4;36187:37;;36179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36276:1;36266:7;:11;36258:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;36324:7;36311:20;;:9;:20;;;36303:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;36383:13;:11;:13::i;:::-;35842:4;36364:32;36361:291;;36439:7;35745:2;36420:26;;36412:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36361:291;;;36527:7;35791:2;36513:21;;36505:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;36604:9;35933:12;36585:7;:15;;;;:::i;:::-;:28;36577:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36361:291;36664:27;36674:7;36683;36664:9;:27::i;:::-;36090:609;36042:657;:::o;26887:288::-;26994:12;:10;:12::i;:::-;26982:24;;:8;:24;;;;26974:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27095:8;27050:18;:32;27069:12;:10;:12::i;:::-;27050:32;;;;;;;;;;;;;;;:42;27083:8;27050:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27148:8;27119:48;;27134:12;:10;:12::i;:::-;27119:48;;;27158:8;27119:48;;;;;;:::i;:::-;;;;;;;;26887:288;;:::o;27958:355::-;28117:28;28127:4;28133:2;28137:7;28117:9;:28::i;:::-;28178:48;28201:4;28207:2;28211:7;28220:5;28178:22;:48::i;:::-;28156:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;27958:355;;;;:::o;35552:46::-;;;;;;;;;;;;;;;;;;;:::o;37789:362::-;37855:13;37889:17;37897:8;37889:7;:17::i;:::-;37881:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37974:1;37956:7;37950:21;;;;;:::i;:::-;;;:25;:193;;;;;;;;;;;;;;;;;38032:7;38056:26;38073:8;38056:16;:26::i;:::-;38099:13;;;;;;;;;;;;;;;;;37999:128;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37950:193;37943:200;;37789:362;;;:::o;35605:89::-;35652:42;35605:89;:::o;35515:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36707:445::-;36832:4;36917:27;35652:42;36917:65;;37038:8;36997:49;;37005:13;:21;;;37027:5;37005:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36997:49;;;36993:93;;;37070:4;37063:11;;;;;36993:93;37105:39;37128:5;37135:8;37105:22;:39::i;:::-;37098:46;;;36707:445;;;;;:::o;902:201::-;710:12;:10;:12::i;:::-;699:23;;:7;:5;:7::i;:::-;:23;;;691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1011:1:::1;991:22;;:8;:22;;;;983:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1067:28;1086:8;1067:18;:28::i;:::-;902:201:::0;:::o;35754:39::-;35791:2;35754:39;:::o;19917:157::-;20002:4;20041:25;20026:40;;;:11;:40;;;;20019:47;;19917:157;;;:::o;102:98::-;155:7;182:10;175:17;;102:98;:::o;28568:111::-;28625:4;28659:12;;28649:7;:22;28642:29;;28568:111;;;:::o;32612:196::-;32754:2;32727:15;:24;32743:7;32727:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32792:7;32788:2;32772:28;;32781:5;32772:28;;;;;;;;;;;;32612:196;;;:::o;30711:1783::-;30826:35;30864:20;30876:7;30864:11;:20::i;:::-;30826:58;;30897:22;30939:13;:18;;;30923:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;30998:12;:10;:12::i;:::-;30974:36;;:20;30986:7;30974:11;:20::i;:::-;:36;;;30923:87;:154;;;;31027:50;31044:13;:18;;;31064:12;:10;:12::i;:::-;31027:16;:50::i;:::-;30923:154;30897:181;;31099:17;31091:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;31214:4;31192:26;;:13;:18;;;:26;;;31184:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;31294:1;31280:16;;:2;:16;;;;31272:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31351:43;31373:4;31379:2;31383:7;31392:1;31351:21;:43::i;:::-;31459:49;31476:1;31480:7;31489:13;:18;;;31459:8;:49::i;:::-;31743:1;31713:12;:18;31726:4;31713:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31787:1;31759:12;:16;31772:2;31759:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31835:43;;;;;;;;31850:2;31835:43;;;;;;31861:15;31835:43;;;;;31812:11;:20;31824:7;31812:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32118:19;32150:1;32140:7;:11;;;;:::i;:::-;32118:33;;32207:1;32166:43;;:11;:24;32178:11;32166:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;32162:227;;;32230:20;32238:11;32230:7;:20::i;:::-;32226:152;;;32298:64;;;;;;;;32313:13;:18;;;32298:64;;;;;;32333:13;:28;;;32298:64;;;;;32271:11;:24;32283:11;32271:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32226:152;32162:227;32425:7;32421:2;32406:27;;32415:4;32406:27;;;;;;;;;;;;32444:42;32465:4;32471:2;32475:7;32484:1;32444:20;:42::i;:::-;30815:1679;;;30711:1783;;;:::o;24315:472::-;24376:21;;:::i;:::-;24418:16;24426:7;24418;:16::i;:::-;24410:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24499:12;24514:7;24499:22;;24494:216;24548:31;24582:11;:17;24594:4;24582:17;;;;;;;;;;;24548:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24644:1;24618:28;;:9;:14;;;:28;;;24614:85;;24674:9;24667:16;;;;;;24614:85;24533:177;24525:6;;;;;:::i;:::-;;;;24494:216;;24315:472;;;;:::o;28687:104::-;28756:27;28766:2;28770:8;28756:27;;;;;;;;;;;;:9;:27::i;:::-;28687:104;;:::o;1113:191::-;1187:16;1206:6;;;;;;;;;;;1187:25;;1232:8;1223:6;;:17;;;;;;;;;;;;;;;;;;1287:8;1256:40;;1277:8;1256:40;;;;;;;;;;;;1176:128;1113:191;:::o;33373:804::-;33528:4;33549:15;:2;:13;;;:15::i;:::-;33545:625;;;33601:2;33585:36;;;33622:12;:10;:12::i;:::-;33636:4;33642:7;33651:5;33585:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33581:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33848:1;33831:6;:13;:18;33827:273;;;33874:61;;;;;;;;;;:::i;:::-;;;;;;;;33827:273;34050:6;34044:13;34035:6;34031:2;34027:15;34020:38;33581:534;33718:45;;;33708:55;;;:6;:55;;;;33701:62;;;;;33545:625;34154:4;34147:11;;33373:804;;;;;;;:::o;1405:534::-;1461:13;1502:1;1493:5;:10;1489:53;;;1520:10;;;;;;;;;;;;;;;;;;;;;1489:53;1552:12;1567:5;1552:20;;1583:14;1608:78;1623:1;1615:4;:9;1608:78;;1641:8;;;;;:::i;:::-;;;;1672:2;1664:10;;;;;:::i;:::-;;;1608:78;;;1696:19;1728:6;1718:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1696:39;;1746:154;1762:1;1753:5;:10;1746:154;;1790:1;1780:11;;;;;:::i;:::-;;;1857:2;1849:5;:10;;;;:::i;:::-;1836:2;:24;;;;:::i;:::-;1823:39;;1806:6;1813;1806:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1886:2;1877:11;;;;;:::i;:::-;;;1746:154;;;1924:6;1910:21;;;;;1405:534;;;;:::o;27246:164::-;27343:4;27367:18;:25;27386:5;27367:25;;;;;;;;;;;;;;;:35;27393:8;27367:35;;;;;;;;;;;;;;;;;;;;;;;;;27360:42;;27246:164;;;;:::o;34665:159::-;;;;;:::o;35236:158::-;;;;;:::o;29068:1389::-;29191:20;29214:12;;29191:35;;29259:1;29245:16;;:2;:16;;;;29237:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29444:21;29452:12;29444:7;:21::i;:::-;29443:22;29435:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29529:1;29518:8;:12;29510:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29583:61;29613:1;29617:2;29621:12;29635:8;29583:21;:61::i;:::-;29657:30;29690:12;:16;29703:2;29690:16;;;;;;;;;;;;;;;29657:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29736:135;;;;;;;;29792:8;29762:11;:19;;;:39;;;;:::i;:::-;29736:135;;;;;;29851:8;29816:11;:24;;;:44;;;;:::i;:::-;29736:135;;;;;29717:12;:16;29730:2;29717:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29910:43;;;;;;;;29925:2;29910:43;;;;;;29936:15;29910:43;;;;;29882:11;:25;29894:12;29882:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29966:20;29989:12;29966:35;;30019:9;30014:325;30038:8;30034:1;:12;30014:325;;;30098:12;30094:2;30073:38;;30090:1;30073:38;;;;;;;;;;;;30152:59;30183:1;30187:2;30191:12;30205:5;30152:22;:59::i;:::-;30126:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;30313:14;;;;;:::i;:::-;;;;30048:3;;;;;:::i;:::-;;;;30014:325;;;;30366:12;30351;:27;;;;30389:60;30418:1;30422:2;30426:12;30440:8;30389:20;:60::i;:::-;29180:1277;;;29068:1389;;;:::o;11738:387::-;11798:4;12006:12;12073:7;12061:20;12053:28;;12116:1;12109:4;:8;12102:15;;;11738:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:117::-;6614:1;6611;6604:12;6628:117;6737:1;6734;6727:12;6751:180;6799:77;6796:1;6789:88;6896:4;6893:1;6886:15;6920:4;6917:1;6910:15;6937:281;7020:27;7042:4;7020:27;:::i;:::-;7012:6;7008:40;7150:6;7138:10;7135:22;7114:18;7102:10;7099:34;7096:62;7093:88;;;7161:18;;:::i;:::-;7093:88;7201:10;7197:2;7190:22;6980:238;6937:281;;:::o;7224:129::-;7258:6;7285:20;;:::i;:::-;7275:30;;7314:33;7342:4;7334:6;7314:33;:::i;:::-;7224:129;;;:::o;7359:308::-;7421:4;7511:18;7503:6;7500:30;7497:56;;;7533:18;;:::i;:::-;7497:56;7571:29;7593:6;7571:29;:::i;:::-;7563:37;;7655:4;7649;7645:15;7637:23;;7359:308;;;:::o;7673:154::-;7757:6;7752:3;7747;7734:30;7819:1;7810:6;7805:3;7801:16;7794:27;7673:154;;;:::o;7833:412::-;7911:5;7936:66;7952:49;7994:6;7952:49;:::i;:::-;7936:66;:::i;:::-;7927:75;;8025:6;8018:5;8011:21;8063:4;8056:5;8052:16;8101:3;8092:6;8087:3;8083:16;8080:25;8077:112;;;8108:79;;:::i;:::-;8077:112;8198:41;8232:6;8227:3;8222;8198:41;:::i;:::-;7917:328;7833:412;;;;;:::o;8265:340::-;8321:5;8370:3;8363:4;8355:6;8351:17;8347:27;8337:122;;8378:79;;:::i;:::-;8337:122;8495:6;8482:20;8520:79;8595:3;8587:6;8580:4;8572:6;8568:17;8520:79;:::i;:::-;8511:88;;8327:278;8265:340;;;;:::o;8611:509::-;8680:6;8729:2;8717:9;8708:7;8704:23;8700:32;8697:119;;;8735:79;;:::i;:::-;8697:119;8883:1;8872:9;8868:17;8855:31;8913:18;8905:6;8902:30;8899:117;;;8935:79;;:::i;:::-;8899:117;9040:63;9095:7;9086:6;9075:9;9071:22;9040:63;:::i;:::-;9030:73;;8826:287;8611:509;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:182::-;12590:34;12586:1;12578:6;12574:14;12567:58;12450:182;:::o;12638:366::-;12780:3;12801:67;12865:2;12860:3;12801:67;:::i;:::-;12794:74;;12877:93;12966:3;12877:93;:::i;:::-;12995:2;12990:3;12986:12;12979:19;;12638:366;;;:::o;13010:419::-;13176:4;13214:2;13203:9;13199:18;13191:26;;13263:9;13257:4;13253:20;13249:1;13238:9;13234:17;13227:47;13291:131;13417:4;13291:131;:::i;:::-;13283:139;;13010:419;;;:::o;13435:180::-;13483:77;13480:1;13473:88;13580:4;13577:1;13570:15;13604:4;13601:1;13594:15;13621:320;13665:6;13702:1;13696:4;13692:12;13682:22;;13749:1;13743:4;13739:12;13770:18;13760:81;;13826:4;13818:6;13814:17;13804:27;;13760:81;13888:2;13880:6;13877:14;13857:18;13854:38;13851:84;;;13907:18;;:::i;:::-;13851:84;13672:269;13621:320;;;:::o;13947:232::-;14087:34;14083:1;14075:6;14071:14;14064:58;14156:15;14151:2;14143:6;14139:15;14132:40;13947:232;:::o;14185:366::-;14327:3;14348:67;14412:2;14407:3;14348:67;:::i;:::-;14341:74;;14424:93;14513:3;14424:93;:::i;:::-;14542:2;14537:3;14533:12;14526:19;;14185:366;;;:::o;14557:419::-;14723:4;14761:2;14750:9;14746:18;14738:26;;14810:9;14804:4;14800:20;14796:1;14785:9;14781:17;14774:47;14838:131;14964:4;14838:131;:::i;:::-;14830:139;;14557:419;;;:::o;14982:221::-;15122:34;15118:1;15110:6;15106:14;15099:58;15191:4;15186:2;15178:6;15174:15;15167:29;14982:221;:::o;15209:366::-;15351:3;15372:67;15436:2;15431:3;15372:67;:::i;:::-;15365:74;;15448:93;15537:3;15448:93;:::i;:::-;15566:2;15561:3;15557:12;15550:19;;15209:366;;;:::o;15581:419::-;15747:4;15785:2;15774:9;15770:18;15762:26;;15834:9;15828:4;15824:20;15820:1;15809:9;15805:17;15798:47;15862:131;15988:4;15862:131;:::i;:::-;15854:139;;15581:419;;;:::o;16006:244::-;16146:34;16142:1;16134:6;16130:14;16123:58;16215:27;16210:2;16202:6;16198:15;16191:52;16006:244;:::o;16256:366::-;16398:3;16419:67;16483:2;16478:3;16419:67;:::i;:::-;16412:74;;16495:93;16584:3;16495:93;:::i;:::-;16613:2;16608:3;16604:12;16597:19;;16256:366;;;:::o;16628:419::-;16794:4;16832:2;16821:9;16817:18;16809:26;;16881:9;16875:4;16871:20;16867:1;16856:9;16852:17;16845:47;16909:131;17035:4;16909:131;:::i;:::-;16901:139;;16628:419;;;:::o;17053:221::-;17193:34;17189:1;17181:6;17177:14;17170:58;17262:4;17257:2;17249:6;17245:15;17238:29;17053:221;:::o;17280:366::-;17422:3;17443:67;17507:2;17502:3;17443:67;:::i;:::-;17436:74;;17519:93;17608:3;17519:93;:::i;:::-;17637:2;17632:3;17628:12;17621:19;;17280:366;;;:::o;17652:419::-;17818:4;17856:2;17845:9;17841:18;17833:26;;17905:9;17899:4;17895:20;17891:1;17880:9;17876:17;17869:47;17933:131;18059:4;17933:131;:::i;:::-;17925:139;;17652:419;;;:::o;18077:180::-;18125:77;18122:1;18115:88;18222:4;18219:1;18212:15;18246:4;18243:1;18236:15;18263:233;18302:3;18325:24;18343:5;18325:24;:::i;:::-;18316:33;;18371:66;18364:5;18361:77;18358:103;;;18441:18;;:::i;:::-;18358:103;18488:1;18481:5;18477:13;18470:20;;18263:233;;;:::o;18502:::-;18642:34;18638:1;18630:6;18626:14;18619:58;18711:16;18706:2;18698:6;18694:15;18687:41;18502:233;:::o;18741:366::-;18883:3;18904:67;18968:2;18963:3;18904:67;:::i;:::-;18897:74;;18980:93;19069:3;18980:93;:::i;:::-;19098:2;19093:3;19089:12;19082:19;;18741:366;;;:::o;19113:419::-;19279:4;19317:2;19306:9;19302:18;19294:26;;19366:9;19360:4;19356:20;19352:1;19341:9;19337:17;19330:47;19394:131;19520:4;19394:131;:::i;:::-;19386:139;;19113:419;;;:::o;19538:147::-;19639:11;19676:3;19661:18;;19538:147;;;;:::o;19691:114::-;;:::o;19811:398::-;19970:3;19991:83;20072:1;20067:3;19991:83;:::i;:::-;19984:90;;20083:93;20172:3;20083:93;:::i;:::-;20201:1;20196:3;20192:11;20185:18;;19811:398;;;:::o;20215:379::-;20399:3;20421:147;20564:3;20421:147;:::i;:::-;20414:154;;20585:3;20578:10;;20215:379;;;:::o;20600:164::-;20740:16;20736:1;20728:6;20724:14;20717:40;20600:164;:::o;20770:366::-;20912:3;20933:67;20997:2;20992:3;20933:67;:::i;:::-;20926:74;;21009:93;21098:3;21009:93;:::i;:::-;21127:2;21122:3;21118:12;21111:19;;20770:366;;;:::o;21142:419::-;21308:4;21346:2;21335:9;21331:18;21323:26;;21395:9;21389:4;21385:20;21381:1;21370:9;21366:17;21359:47;21423:131;21549:4;21423:131;:::i;:::-;21415:139;;21142:419;;;:::o;21567:222::-;21707:34;21703:1;21695:6;21691:14;21684:58;21776:5;21771:2;21763:6;21759:15;21752:30;21567:222;:::o;21795:366::-;21937:3;21958:67;22022:2;22017:3;21958:67;:::i;:::-;21951:74;;22034:93;22123:3;22034:93;:::i;:::-;22152:2;22147:3;22143:12;22136:19;;21795:366;;;:::o;22167:419::-;22333:4;22371:2;22360:9;22356:18;22348:26;;22420:9;22414:4;22410:20;22406:1;22395:9;22391:17;22384:47;22448:131;22574:4;22448:131;:::i;:::-;22440:139;;22167:419;;;:::o;22592:230::-;22732:34;22728:1;22720:6;22716:14;22709:58;22801:13;22796:2;22788:6;22784:15;22777:38;22592:230;:::o;22828:366::-;22970:3;22991:67;23055:2;23050:3;22991:67;:::i;:::-;22984:74;;23067:93;23156:3;23067:93;:::i;:::-;23185:2;23180:3;23176:12;23169:19;;22828:366;;;:::o;23200:419::-;23366:4;23404:2;23393:9;23389:18;23381:26;;23453:9;23447:4;23443:20;23439:1;23428:9;23424:17;23417:47;23481:131;23607:4;23481:131;:::i;:::-;23473:139;;23200:419;;;:::o;23625:156::-;23765:8;23761:1;23753:6;23749:14;23742:32;23625:156;:::o;23787:365::-;23929:3;23950:66;24014:1;24009:3;23950:66;:::i;:::-;23943:73;;24025:93;24114:3;24025:93;:::i;:::-;24143:2;24138:3;24134:12;24127:19;;23787:365;;;:::o;24158:419::-;24324:4;24362:2;24351:9;24347:18;24339:26;;24411:9;24405:4;24401:20;24397:1;24386:9;24382:17;24375:47;24439:131;24565:4;24439:131;:::i;:::-;24431:139;;24158:419;;;:::o;24583:305::-;24623:3;24642:20;24660:1;24642:20;:::i;:::-;24637:25;;24676:20;24694:1;24676:20;:::i;:::-;24671:25;;24830:1;24762:66;24758:74;24755:1;24752:81;24749:107;;;24836:18;;:::i;:::-;24749:107;24880:1;24877;24873:9;24866:16;;24583:305;;;;:::o;24894:168::-;25034:20;25030:1;25022:6;25018:14;25011:44;24894:168;:::o;25068:366::-;25210:3;25231:67;25295:2;25290:3;25231:67;:::i;:::-;25224:74;;25307:93;25396:3;25307:93;:::i;:::-;25425:2;25420:3;25416:12;25409:19;;25068:366;;;:::o;25440:419::-;25606:4;25644:2;25633:9;25629:18;25621:26;;25693:9;25687:4;25683:20;25679:1;25668:9;25664:17;25657:47;25721:131;25847:4;25721:131;:::i;:::-;25713:139;;25440:419;;;:::o;25865:160::-;26005:12;26001:1;25993:6;25989:14;25982:36;25865:160;:::o;26031:366::-;26173:3;26194:67;26258:2;26253:3;26194:67;:::i;:::-;26187:74;;26270:93;26359:3;26270:93;:::i;:::-;26388:2;26383:3;26379:12;26372:19;;26031:366;;;:::o;26403:419::-;26569:4;26607:2;26596:9;26592:18;26584:26;;26656:9;26650:4;26646:20;26642:1;26631:9;26627:17;26620:47;26684:131;26810:4;26684:131;:::i;:::-;26676:139;;26403:419;;;:::o;26828:162::-;26968:14;26964:1;26956:6;26952:14;26945:38;26828:162;:::o;26996:366::-;27138:3;27159:67;27223:2;27218:3;27159:67;:::i;:::-;27152:74;;27235:93;27324:3;27235:93;:::i;:::-;27353:2;27348:3;27344:12;27337:19;;26996:366;;;:::o;27368:419::-;27534:4;27572:2;27561:9;27557:18;27549:26;;27621:9;27615:4;27611:20;27607:1;27596:9;27592:17;27585:47;27649:131;27775:4;27649:131;:::i;:::-;27641:139;;27368:419;;;:::o;27793:172::-;27933:24;27929:1;27921:6;27917:14;27910:48;27793:172;:::o;27971:366::-;28113:3;28134:67;28198:2;28193:3;28134:67;:::i;:::-;28127:74;;28210:93;28299:3;28210:93;:::i;:::-;28328:2;28323:3;28319:12;28312:19;;27971:366;;;:::o;28343:419::-;28509:4;28547:2;28536:9;28532:18;28524:26;;28596:9;28590:4;28586:20;28582:1;28571:9;28567:17;28560:47;28624:131;28750:4;28624:131;:::i;:::-;28616:139;;28343:419;;;:::o;28768:172::-;28908:24;28904:1;28896:6;28892:14;28885:48;28768:172;:::o;28946:366::-;29088:3;29109:67;29173:2;29168:3;29109:67;:::i;:::-;29102:74;;29185:93;29274:3;29185:93;:::i;:::-;29303:2;29298:3;29294:12;29287:19;;28946:366;;;:::o;29318:419::-;29484:4;29522:2;29511:9;29507:18;29499:26;;29571:9;29565:4;29561:20;29557:1;29546:9;29542:17;29535:47;29599:131;29725:4;29599:131;:::i;:::-;29591:139;;29318:419;;;:::o;29743:348::-;29783:7;29806:20;29824:1;29806:20;:::i;:::-;29801:25;;29840:20;29858:1;29840:20;:::i;:::-;29835:25;;30028:1;29960:66;29956:74;29953:1;29950:81;29945:1;29938:9;29931:17;29927:105;29924:131;;;30035:18;;:::i;:::-;29924:131;30083:1;30080;30076:9;30065:20;;29743:348;;;;:::o;30097:172::-;30237:24;30233:1;30225:6;30221:14;30214:48;30097:172;:::o;30275:366::-;30417:3;30438:67;30502:2;30497:3;30438:67;:::i;:::-;30431:74;;30514:93;30603:3;30514:93;:::i;:::-;30632:2;30627:3;30623:12;30616:19;;30275:366;;;:::o;30647:419::-;30813:4;30851:2;30840:9;30836:18;30828:26;;30900:9;30894:4;30890:20;30886:1;30875:9;30871:17;30864:47;30928:131;31054:4;30928:131;:::i;:::-;30920:139;;30647:419;;;:::o;31072:176::-;31212:28;31208:1;31200:6;31196:14;31189:52;31072:176;:::o;31254:366::-;31396:3;31417:67;31481:2;31476:3;31417:67;:::i;:::-;31410:74;;31493:93;31582:3;31493:93;:::i;:::-;31611:2;31606:3;31602:12;31595:19;;31254:366;;;:::o;31626:419::-;31792:4;31830:2;31819:9;31815:18;31807:26;;31879:9;31873:4;31869:20;31865:1;31854:9;31850:17;31843:47;31907:131;32033:4;31907:131;:::i;:::-;31899:139;;31626:419;;;:::o;32051:238::-;32191:34;32187:1;32179:6;32175:14;32168:58;32260:21;32255:2;32247:6;32243:15;32236:46;32051:238;:::o;32295:366::-;32437:3;32458:67;32522:2;32517:3;32458:67;:::i;:::-;32451:74;;32534:93;32623:3;32534:93;:::i;:::-;32652:2;32647:3;32643:12;32636:19;;32295:366;;;:::o;32667:419::-;32833:4;32871:2;32860:9;32856:18;32848:26;;32920:9;32914:4;32910:20;32906:1;32895:9;32891:17;32884:47;32948:131;33074:4;32948:131;:::i;:::-;32940:139;;32667:419;;;:::o;33092:171::-;33232:23;33228:1;33220:6;33216:14;33209:47;33092:171;:::o;33269:366::-;33411:3;33432:67;33496:2;33491:3;33432:67;:::i;:::-;33425:74;;33508:93;33597:3;33508:93;:::i;:::-;33626:2;33621:3;33617:12;33610:19;;33269:366;;;:::o;33641:419::-;33807:4;33845:2;33834:9;33830:18;33822:26;;33894:9;33888:4;33884:20;33880:1;33869:9;33865:17;33858:47;33922:131;34048:4;33922:131;:::i;:::-;33914:139;;33641:419;;;:::o;34066:148::-;34168:11;34205:3;34190:18;;34066:148;;;;:::o;34220:141::-;34269:4;34292:3;34284:11;;34315:3;34312:1;34305:14;34349:4;34346:1;34336:18;34328:26;;34220:141;;;:::o;34391:845::-;34494:3;34531:5;34525:12;34560:36;34586:9;34560:36;:::i;:::-;34612:89;34694:6;34689:3;34612:89;:::i;:::-;34605:96;;34732:1;34721:9;34717:17;34748:1;34743:137;;;;34894:1;34889:341;;;;34710:520;;34743:137;34827:4;34823:9;34812;34808:25;34803:3;34796:38;34863:6;34858:3;34854:16;34847:23;;34743:137;;34889:341;34956:38;34988:5;34956:38;:::i;:::-;35016:1;35030:154;35044:6;35041:1;35038:13;35030:154;;;35118:7;35112:14;35108:1;35103:3;35099:11;35092:35;35168:1;35159:7;35155:15;35144:26;;35066:4;35063:1;35059:12;35054:17;;35030:154;;;35213:6;35208:3;35204:16;35197:23;;34896:334;;34710:520;;34498:738;;34391:845;;;;:::o;35242:377::-;35348:3;35376:39;35409:5;35376:39;:::i;:::-;35431:89;35513:6;35508:3;35431:89;:::i;:::-;35424:96;;35529:52;35574:6;35569:3;35562:4;35555:5;35551:16;35529:52;:::i;:::-;35606:6;35601:3;35597:16;35590:23;;35352:267;35242:377;;;;:::o;35625:589::-;35850:3;35872:92;35960:3;35951:6;35872:92;:::i;:::-;35865:99;;35981:95;36072:3;36063:6;35981:95;:::i;:::-;35974:102;;36093:95;36184:3;36175:6;36093:95;:::i;:::-;36086:102;;36205:3;36198:10;;35625:589;;;;;;:::o;36220:125::-;36286:7;36315:24;36333:5;36315:24;:::i;:::-;36304:35;;36220:125;;;:::o;36351:180::-;36453:53;36500:5;36453:53;:::i;:::-;36446:5;36443:64;36433:92;;36521:1;36518;36511:12;36433:92;36351:180;:::o;36537:201::-;36623:5;36654:6;36648:13;36639:22;;36670:62;36726:5;36670:62;:::i;:::-;36537:201;;;;:::o;36744:409::-;36843:6;36892:2;36880:9;36871:7;36867:23;36863:32;36860:119;;;36898:79;;:::i;:::-;36860:119;37018:1;37043:93;37128:7;37119:6;37108:9;37104:22;37043:93;:::i;:::-;37033:103;;36989:157;36744:409;;;;:::o;37159:225::-;37299:34;37295:1;37287:6;37283:14;37276:58;37368:8;37363:2;37355:6;37351:15;37344:33;37159:225;:::o;37390:366::-;37532:3;37553:67;37617:2;37612:3;37553:67;:::i;:::-;37546:74;;37629:93;37718:3;37629:93;:::i;:::-;37747:2;37742:3;37738:12;37731:19;;37390:366;;;:::o;37762:419::-;37928:4;37966:2;37955:9;37951:18;37943:26;;38015:9;38009:4;38005:20;38001:1;37990:9;37986:17;37979:47;38043:131;38169:4;38043:131;:::i;:::-;38035:139;;37762:419;;;:::o;38187:237::-;38327:34;38323:1;38315:6;38311:14;38304:58;38396:20;38391:2;38383:6;38379:15;38372:45;38187:237;:::o;38430:366::-;38572:3;38593:67;38657:2;38652:3;38593:67;:::i;:::-;38586:74;;38669:93;38758:3;38669:93;:::i;:::-;38787:2;38782:3;38778:12;38771:19;;38430:366;;;:::o;38802:419::-;38968:4;39006:2;38995:9;38991:18;38983:26;;39055:9;39049:4;39045:20;39041:1;39030:9;39026:17;39019:47;39083:131;39209:4;39083:131;:::i;:::-;39075:139;;38802:419;;;:::o;39227:225::-;39367:34;39363:1;39355:6;39351:14;39344:58;39436:8;39431:2;39423:6;39419:15;39412:33;39227:225;:::o;39458:366::-;39600:3;39621:67;39685:2;39680:3;39621:67;:::i;:::-;39614:74;;39697:93;39786:3;39697:93;:::i;:::-;39815:2;39810:3;39806:12;39799:19;;39458:366;;;:::o;39830:419::-;39996:4;40034:2;40023:9;40019:18;40011:26;;40083:9;40077:4;40073:20;40069:1;40058:9;40054:17;40047:47;40111:131;40237:4;40111:131;:::i;:::-;40103:139;;39830:419;;;:::o;40255:224::-;40395:34;40391:1;40383:6;40379:14;40372:58;40464:7;40459:2;40451:6;40447:15;40440:32;40255:224;:::o;40485:366::-;40627:3;40648:67;40712:2;40707:3;40648:67;:::i;:::-;40641:74;;40724:93;40813:3;40724:93;:::i;:::-;40842:2;40837:3;40833:12;40826:19;;40485:366;;;:::o;40857:419::-;41023:4;41061:2;41050:9;41046:18;41038:26;;41110:9;41104:4;41100:20;41096:1;41085:9;41081:17;41074:47;41138:131;41264:4;41138:131;:::i;:::-;41130:139;;40857:419;;;:::o;41282:229::-;41422:34;41418:1;41410:6;41406:14;41399:58;41491:12;41486:2;41478:6;41474:15;41467:37;41282:229;:::o;41517:366::-;41659:3;41680:67;41744:2;41739:3;41680:67;:::i;:::-;41673:74;;41756:93;41845:3;41756:93;:::i;:::-;41874:2;41869:3;41865:12;41858:19;;41517:366;;;:::o;41889:419::-;42055:4;42093:2;42082:9;42078:18;42070:26;;42142:9;42136:4;42132:20;42128:1;42117:9;42113:17;42106:47;42170:131;42296:4;42170:131;:::i;:::-;42162:139;;41889:419;;;:::o;42314:171::-;42353:3;42376:24;42394:5;42376:24;:::i;:::-;42367:33;;42422:4;42415:5;42412:15;42409:41;;;42430:18;;:::i;:::-;42409:41;42477:1;42470:5;42466:13;42459:20;;42314:171;;;:::o;43528:98::-;43579:6;43613:5;43607:12;43597:22;;43528:98;;;:::o;43632:168::-;43715:11;43749:6;43744:3;43737:19;43789:4;43784:3;43780:14;43765:29;;43632:168;;;;:::o;43806:360::-;43892:3;43920:38;43952:5;43920:38;:::i;:::-;43974:70;44037:6;44032:3;43974:70;:::i;:::-;43967:77;;44053:52;44098:6;44093:3;44086:4;44079:5;44075:16;44053:52;:::i;:::-;44130:29;44152:6;44130:29;:::i;:::-;44125:3;44121:39;44114:46;;43896:270;43806:360;;;;:::o;44172:640::-;44367:4;44405:3;44394:9;44390:19;44382:27;;44419:71;44487:1;44476:9;44472:17;44463:6;44419:71;:::i;:::-;44500:72;44568:2;44557:9;44553:18;44544:6;44500:72;:::i;:::-;44582;44650:2;44639:9;44635:18;44626:6;44582:72;:::i;:::-;44701:9;44695:4;44691:20;44686:2;44675:9;44671:18;44664:48;44729:76;44800:4;44791:6;44729:76;:::i;:::-;44721:84;;44172:640;;;;;;;:::o;44818:141::-;44874:5;44905:6;44899:13;44890:22;;44921:32;44947:5;44921:32;:::i;:::-;44818:141;;;;:::o;44965:349::-;45034:6;45083:2;45071:9;45062:7;45058:23;45054:32;45051:119;;;45089:79;;:::i;:::-;45051:119;45209:1;45234:63;45289:7;45280:6;45269:9;45265:22;45234:63;:::i;:::-;45224:73;;45180:127;44965:349;;;;:::o;45320:180::-;45368:77;45365:1;45358:88;45465:4;45462:1;45455:15;45489:4;45486:1;45479:15;45506:185;45546:1;45563:20;45581:1;45563:20;:::i;:::-;45558:25;;45597:20;45615:1;45597:20;:::i;:::-;45592:25;;45636:1;45626:35;;45641:18;;:::i;:::-;45626:35;45683:1;45680;45676:9;45671:14;;45506:185;;;;:::o;45697:191::-;45737:4;45757:20;45775:1;45757:20;:::i;:::-;45752:25;;45791:20;45809:1;45791:20;:::i;:::-;45786:25;;45830:1;45827;45824:8;45821:34;;;45835:18;;:::i;:::-;45821:34;45880:1;45877;45873:9;45865:17;;45697:191;;;;:::o;45894:176::-;45926:1;45943:20;45961:1;45943:20;:::i;:::-;45938:25;;45977:20;45995:1;45977:20;:::i;:::-;45972:25;;46016:1;46006:35;;46021:18;;:::i;:::-;46006:35;46062:1;46059;46055:9;46050:14;;45894:176;;;;:::o;46076:180::-;46124:77;46121:1;46114:88;46221:4;46218:1;46211:15;46245:4;46242:1;46235:15;46262:220;46402:34;46398:1;46390:6;46386:14;46379:58;46471:3;46466:2;46458:6;46454:15;46447:28;46262:220;:::o;46488:366::-;46630:3;46651:67;46715:2;46710:3;46651:67;:::i;:::-;46644:74;;46727:93;46816:3;46727:93;:::i;:::-;46845:2;46840:3;46836:12;46829:19;;46488:366;;;:::o;46860:419::-;47026:4;47064:2;47053:9;47049:18;47041:26;;47113:9;47107:4;47103:20;47099:1;47088:9;47084:17;47077:47;47141:131;47267:4;47141:131;:::i;:::-;47133:139;;46860:419;;;:::o;47285:179::-;47425:31;47421:1;47413:6;47409:14;47402:55;47285:179;:::o;47470:366::-;47612:3;47633:67;47697:2;47692:3;47633:67;:::i;:::-;47626:74;;47709:93;47798:3;47709:93;:::i;:::-;47827:2;47822:3;47818:12;47811:19;;47470:366;;;:::o;47842:419::-;48008:4;48046:2;48035:9;48031:18;48023:26;;48095:9;48089:4;48085:20;48081:1;48070:9;48066:17;48059:47;48123:131;48249:4;48123:131;:::i;:::-;48115:139;;47842:419;;;:::o;48267:222::-;48407:34;48403:1;48395:6;48391:14;48384:58;48476:5;48471:2;48463:6;48459:15;48452:30;48267:222;:::o;48495:366::-;48637:3;48658:67;48722:2;48717:3;48658:67;:::i;:::-;48651:74;;48734:93;48823:3;48734:93;:::i;:::-;48852:2;48847:3;48843:12;48836:19;;48495:366;;;:::o;48867:419::-;49033:4;49071:2;49060:9;49056:18;49048:26;;49120:9;49114:4;49110:20;49106:1;49095:9;49091:17;49084:47;49148:131;49274:4;49148:131;:::i;:::-;49140:139;;48867:419;;;:::o;49292:118::-;49329:7;49369:34;49362:5;49358:46;49347:57;;49292:118;;;:::o;49416:273::-;49456:3;49475:20;49493:1;49475:20;:::i;:::-;49470:25;;49509:20;49527:1;49509:20;:::i;:::-;49504:25;;49631:1;49595:34;49591:42;49588:1;49585:49;49582:75;;;49637:18;;:::i;:::-;49582:75;49681:1;49678;49674:9;49667:16;;49416:273;;;;:::o

Swarm Source

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