ETH Price: $3,955.89 (+1.52%)
Gas: 7.99 Gwei

Token

Strangers (STRG)
 

Overview

Max Total Supply

1,555 STRG

Holders

546

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
alpha-centauri.eth
Balance
5 STRG
0x541CeeDEd157F6590BeFa1b6A34ab87bEda66AA7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Kojo Marfo into the Metaverse.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Strangers

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


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

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @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 overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


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

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: contracts/Strangers.sol

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;



/**
 * @dev Implementation of Non-Fungible Token Standard (ERC-721)
 * This contract is designed to be ready-to-use and versatile.
 */
contract Strangers is ERC721URIStorage, Ownable, Pausable {

    // General constants
    enum mintTypes {WHITELIST, PUBLIC}
    uint256 public maxItems                       = 5555; // Maximum items in the collection
    uint256 public price                          = 0.2 ether; // Price for minting one NFT
    uint256 public totalSupply;                             // number of NFTs minted thus far
    address internal __walletTreasury;                      // Address of the treasury wallet
    address internal __walletSignature;                     // Address of the signature wallet
    string internal __baseURI;                              // Base URI for the metadata
    string internal __extensionURI                  = ".json";   // Extension of the URI
    mapping(address => uint256[]) internal __ownerToIds;     // mapping from owner to list of owned NFT IDs.
    mapping(uint256 => uint256) internal __idToOwnerIndex;

    // Constants for the whitelist
    uint256 public whitelistMaxMintsPerWallet       = 1;    // Maximum number of mint per wallet
    uint256 public whitelistStartTime               = 1653404400; // UTC timestamp when minting is open
    bool public whitelistIsActive                   = false; // If the mint is active
    mapping(address => uint256) public whitelistAmountMinted; // Keep track of the amount mint during the whitelist

    // Constants for the public sale
    uint256 public publicMaxMintsPerTx              = 2;    // Maximum number of mints per transaction
    bool public publicIsActive                      = false; // If the mint is active

    constructor(
        string memory name_,
        string memory symbol_,
        address walletTreasury_,
        string memory baseURI_
    ) ERC721(name_, symbol_) {
        __baseURI = baseURI_;
        __walletTreasury = walletTreasury_;
    }

    /**
    * Set the new mint per tx allowed
    * @param _type The type of of maximum tx to change
    * @param _newMax The new maximum per tx allowed
    **/
    function setMaxMintsPerTx(uint256 _type, uint256 _newMax) external onlyOwner {
        if (_type == uint256(mintTypes.PUBLIC)) {
            publicMaxMintsPerTx = _newMax;
        }
    }

    /**
    * Set the new mint per wallet allowed
    * @param _type The type of of maximum tx to change
    * @param _newMax The new maximum per tx allowed
    **/
    function setMaxMintsPerWallet(uint256 _type, uint256 _newMax) external onlyOwner {
        if (_type == uint256(mintTypes.WHITELIST)) {
            whitelistMaxMintsPerWallet = _newMax;
        }
    }

    /**
    * Set the new start time
    * @param _type The type of of maximum tx to change
    * @param _startTime The new start time (format: timestamp)
    **/
    function setStartTime(uint256 _type, uint256 _startTime) external onlyOwner {
        if (_type == uint256(mintTypes.WHITELIST)) {
            whitelistStartTime = _startTime;
        }
    }

    /**
    * Set if the mint is active
    * @param _type The type of of maximum tx to change
    * @param _isActive The new state
    **/
    function setIsActive(uint256 _type, bool _isActive) external onlyOwner {
        if (_type == uint256(mintTypes.WHITELIST)) {
            whitelistIsActive = _isActive;
        } else if (_type == uint256(mintTypes.PUBLIC)) {
            publicIsActive = _isActive;
        }
    }

    /**
    * Set the new price
    * @param _price The news eth price
    **/
    function setPrice(uint256 _price) external onlyOwner {
        price = _price;
    }

    /**
    * Set the max item
    * @param _max The new max
    **/
    function setMaxItems(uint256 _max) external onlyOwner {
        maxItems = _max;
    }

    /**
    * Set the new wallet treasury
    * @param _wallet The eth address
    **/
    function setWalletTreasury(address _wallet) external onlyOwner {
        __walletTreasury = _wallet;
    }

    /**
    * Set the new wallet signature
    * @param _wallet The eth address
    **/
    function setWalletSignature(address _wallet) external onlyOwner {
        __walletSignature = _wallet;
    }

    /**
    * Set the new base uri for metadata
    * @param _newBaseURI The new base uri
    **/
    function setBaseURI(string memory _newBaseURI) external onlyOwner {
        __baseURI = _newBaseURI;
    }

    /**
    * Set the new extension of the uri
    * @param _newExtensionURI The new base uri
    **/
    function setExtensionURI(string memory _newExtensionURI) external onlyOwner {
        __extensionURI = _newExtensionURI;
    }

    /**
    * Get the token uri of the metadata for a specific token
    * @param tokenId The token id
    **/
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (bytes(__extensionURI).length == 0){
            return super.tokenURI(tokenId);
        }

        return string(abi.encodePacked(super.tokenURI(tokenId), __extensionURI));
    }

    /**
    * Get the wallet treasury
    **/
    function getWalletTreasury() external view onlyOwner returns (address) {
        return __walletTreasury;
    }

    /**
    * Get the wallet signature
    **/
    function getWalletSignature() external view onlyOwner returns (address) {
        return __walletSignature;
    }

    /**
    * Get all the tokens owned by an address
    **/
    function getTokensOf(address owner) public view returns (uint256[] memory){
        return __ownerToIds[owner];
    }

    /**
    * Mint for the whitelist. We check if the wallet is authorized and how mint it has already done
    * @param numToMint The number of token to mint
    * @param signature The signature
    **/
    function mintWhitelist(uint256 numToMint, bytes memory signature) external payable {
        require(block.timestamp > whitelistStartTime, "minting not open yet");
        require(whitelistIsActive == true, "minting not activated");
        require(verify(signature, msg.sender), "wallet is not whitelisted");
        require(whitelistAmountMinted[msg.sender] + numToMint <= whitelistMaxMintsPerWallet, "too many tokens minted");
        require(msg.value >= price * numToMint, "not enough eth provided");
        require(numToMint > 0, "not enough token to mint");
        require((numToMint + totalSupply) <= maxItems, "would exceed max supply");

        for(uint256 i=totalSupply; i < (totalSupply + numToMint); i++){
            _mint(msg.sender, i+1);
        }

        whitelistAmountMinted[msg.sender] = whitelistAmountMinted[msg.sender] + numToMint;
        totalSupply += numToMint;
    }

    /**
    * Mint for the public.
    * @param numToMint The number of token to mint
    **/
    function mintPublic(uint256 numToMint) external payable whenNotPaused {
        require(publicIsActive == true, "minting not activated");
        require(msg.value >= price * numToMint, "not enough eth provided");
        require(numToMint > 0, "not enough token to mint");
        require((numToMint + totalSupply) <= maxItems, "would exceed max supply");
        require(numToMint <= publicMaxMintsPerTx, "too many tokens per tx");

        for(uint256 i=totalSupply; i < (totalSupply + numToMint); i++){
            _mint(msg.sender, i+1);
        }

        totalSupply += numToMint;
    }

    /**
    * Airdrop
    * @param recipients The list of address to send to
    * @param amounts The amount to send to each of address
    **/
    function airdrop(address[] memory recipients, uint256[] memory amounts) external onlyOwner {
        require(recipients.length == amounts.length, "arrays have different lengths");

        for (uint256 i=0; i < recipients.length; i++){
            for(uint256 j=totalSupply; j < (totalSupply + amounts[i]); j++){
                _mint(recipients[i], j+1);
            }

            totalSupply += amounts[i];
        }
    }

    /**
    * Burns `tokenId`. See {ERC721-_burn}. The caller must own `tokenId` or be an approved operator.
    * @param tokenId The ID of the token to burn
    */
    function burn(uint256 tokenId) public virtual {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved");

        _burn(tokenId);
    }

    /**
    * Withdraw the balance from the contract
    */
    function withdraw() external payable onlyOwner returns (bool success) {
        (success,) = payable(__walletTreasury).call{value: address(this).balance}("");
    }

    /**
    * Verify if the signature is legit
    * @param signature The signature to verify
    * @param target The target address to find
    **/
    function verify(bytes memory signature, address target) public view returns (bool) {
        uint8 v;
        bytes32 r;
        bytes32 s;
        (v, r, s) = splitSignature(signature);
        bytes32 senderHash = keccak256(abi.encodePacked(target));

        //return (owner() == address(ecrecover(senderHash, v, r, s)));
        return (__walletSignature == address(ecrecover(senderHash, v, r, s)));
    }

    /**
    * Split the signature to verify
    * @param signature The signature to verify
    **/
    function splitSignature(bytes memory signature) public pure returns (uint8, bytes32, bytes32) {
        require(signature.length == 65);

        bytes32 r;
        bytes32 s;
        uint8 v;
        assembly {
        // first 32 bytes, after the length prefix
            r := mload(add(signature, 32))
        // second 32 bytes
            s := mload(add(signature, 64))
        // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(signature, 96)))
        }

        return (v, r, s);
    }

    /**
    * Get the base url
    **/
    function _baseURI() internal view override returns (string memory) {
        return __baseURI;
    }

    /**
     * Hook before a token is transfer
     **/
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override {
        if(from != address(0)){
            require(from == ownerOf(tokenId), "not owner");
        }

        if(from == to){
            return;
        }

        uint256 _idToPreviousOwnerIndex = __idToOwnerIndex[tokenId];
        // adding token to array of new owner

        if(to != address(0)){
            __ownerToIds[to].push(tokenId);
            __idToOwnerIndex[tokenId] = __ownerToIds[to].length - 1;
        }

        // remove token from array of previous owner
        if(from != address(0)){
            uint256 _len = __ownerToIds[from].length;
            if(_idToPreviousOwnerIndex < (_len - 1)){
                __ownerToIds[from][_idToPreviousOwnerIndex] = __ownerToIds[from][_len - 1];
            }
            __ownerToIds[from].pop();
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"walletTreasury_","type":"address"},{"internalType":"string","name":"baseURI_","type":"string"}],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getTokensOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWalletSignature","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWalletTreasury","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":[],"name":"maxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToMint","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToMint","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintWhitelist","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":[],"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":"publicIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMaxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newExtensionURI","type":"string"}],"name":"setExtensionURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxItems","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMaxMintsPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMaxMintsPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setWalletSignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setWalletTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","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":"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":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"target","type":"address"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistAmountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMaxMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"}]

60806040526115b36008556702c68af0bb1400006009556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e90805190602001906200006392919062000282565b50600160115563628cf2f06012556000601360006101000a81548160ff02191690831515021790555060026015556000601660006101000a81548160ff021916908315150217905550348015620000b957600080fd5b50604051620060ce380380620060ce8339818101604052810190620000df919062000534565b83838160009080519060200190620000f992919062000282565b5080600190805190602001906200011292919062000282565b5050506200013562000129620001b460201b60201c565b620001bc60201b60201c565b6000600760146101000a81548160ff02191690831515021790555080600d90805190602001906200016892919062000282565b5081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000668565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002909062000632565b90600052602060002090601f016020900481019282620002b4576000855562000300565b82601f10620002cf57805160ff191683800117855562000300565b8280016001018555821562000300579182015b82811115620002ff578251825591602001919060010190620002e2565b5b5090506200030f919062000313565b5090565b5b808211156200032e57600081600090555060010162000314565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200039b8262000350565b810181811067ffffffffffffffff82111715620003bd57620003bc62000361565b5b80604052505050565b6000620003d262000332565b9050620003e0828262000390565b919050565b600067ffffffffffffffff82111562000403576200040262000361565b5b6200040e8262000350565b9050602081019050919050565b60005b838110156200043b5780820151818401526020810190506200041e565b838111156200044b576000848401525b50505050565b6000620004686200046284620003e5565b620003c6565b9050828152602081018484840111156200048757620004866200034b565b5b620004948482856200041b565b509392505050565b600082601f830112620004b457620004b362000346565b5b8151620004c684826020860162000451565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004fc82620004cf565b9050919050565b6200050e81620004ef565b81146200051a57600080fd5b50565b6000815190506200052e8162000503565b92915050565b600080600080608085870312156200055157620005506200033c565b5b600085015167ffffffffffffffff81111562000572576200057162000341565b5b62000580878288016200049c565b945050602085015167ffffffffffffffff811115620005a457620005a362000341565b5b620005b2878288016200049c565b9350506040620005c5878288016200051d565b925050606085015167ffffffffffffffff811115620005e957620005e862000341565b5b620005f7878288016200049c565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200064b57607f821691505b6020821081141562000662576200066162000603565b5b50919050565b615a5680620006786000396000f3fe60806040526004361061027d5760003560e01c8063719971bc1161014f578063b88d4fde116100c1578063db02ae321161007a578063db02ae3214610992578063e2356f0b146109bb578063e2e13e60146109e4578063e985e9c514610a0d578063efd0cbf914610a4a578063f2fde38b14610a665761027d565b8063b88d4fde14610886578063ba278e08146108af578063c3bb8c64146108d8578063c714e89c14610901578063c87b56dd1461092a578063d04d3f82146109675761027d565b806395d89b411161011357806395d89b41146107815780639f41554a146107ac5780639f704cb0146107c8578063a035b1fe146107f3578063a22cb4651461081e578063a7bb5803146108475761027d565b8063719971bc146106ac5780637c7b605c146106d75780638da5cb5b1461070257806391b7f5ed1461072d5780639292caaf146107565761027d565b80633c010a3e116101f35780635c975abb116101ac5780635c975abb1461059e5780636352211e146105c957806365bc6c1314610606578063672434821461062f57806370a0823114610658578063715018a6146106955761027d565b80633c010a3e1461049d5780633ccfd60b146104c85780633d3ac1b5146104e657806342842e0e1461052357806342966c681461054c57806355f804b3146105755761027d565b80630986b210116102455780630986b2101461037b57806318160ddd146103b85780631f457c4d146103e35780631fe70d6f1461040c57806323b872dd146104375780632ccdac50146104605761027d565b806301ffc9a714610282578063033a02d6146102bf57806306fdde03146102ea578063081812fc14610315578063095ea7b314610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613b21565b610a8f565b6040516102b69190613b69565b60405180910390f35b3480156102cb57600080fd5b506102d4610b71565b6040516102e19190613b69565b60405180910390f35b3480156102f657600080fd5b506102ff610b84565b60405161030c9190613c1d565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190613c75565b610c16565b6040516103499190613ce3565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613d2a565b610c9b565b005b34801561038757600080fd5b506103a2600480360381019061039d9190613d6a565b610db3565b6040516103af9190613e55565b60405180910390f35b3480156103c457600080fd5b506103cd610e4a565b6040516103da9190613e86565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613ea1565b610e50565b005b34801561041857600080fd5b50610421610ef2565b60405161042e9190613b69565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190613ee1565b610f05565b005b34801561046c57600080fd5b5061048760048036038101906104829190613d6a565b610f65565b6040516104949190613e86565b60405180910390f35b3480156104a957600080fd5b506104b2610f7d565b6040516104bf9190613e86565b60405180910390f35b6104d0610f83565b6040516104dd9190613b69565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190614069565b611092565b60405161051a9190613b69565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190613ee1565b611183565b005b34801561055857600080fd5b50610573600480360381019061056e9190613c75565b6111a3565b005b34801561058157600080fd5b5061059c60048036038101906105979190614166565b6111ff565b005b3480156105aa57600080fd5b506105b3611295565b6040516105c09190613b69565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613c75565b6112ac565b6040516105fd9190613ce3565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613d6a565b61135e565b005b34801561063b57600080fd5b506106566004803603810190610651919061433a565b61141e565b005b34801561066457600080fd5b5061067f600480360381019061067a9190613d6a565b6115b0565b60405161068c9190613e86565b60405180910390f35b3480156106a157600080fd5b506106aa611668565b005b3480156106b857600080fd5b506106c16116f0565b6040516106ce9190613ce3565b60405180910390f35b3480156106e357600080fd5b506106ec611796565b6040516106f99190613ce3565b60405180910390f35b34801561070e57600080fd5b5061071761183c565b6040516107249190613ce3565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613c75565b611866565b005b34801561076257600080fd5b5061076b6118ec565b6040516107789190613e86565b60405180910390f35b34801561078d57600080fd5b506107966118f2565b6040516107a39190613c1d565b60405180910390f35b6107c660048036038101906107c191906143b2565b611984565b005b3480156107d457600080fd5b506107dd611ccd565b6040516107ea9190613e86565b60405180910390f35b3480156107ff57600080fd5b50610808611cd3565b6040516108159190613e86565b60405180910390f35b34801561082a57600080fd5b506108456004803603810190610840919061443a565b611cd9565b005b34801561085357600080fd5b5061086e6004803603810190610869919061447a565b611cef565b60405161087d939291906144f8565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061452f565b611d32565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190613ea1565b611d94565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190614166565b611e37565b005b34801561090d57600080fd5b5061092860048036038101906109239190613c75565b611ecd565b005b34801561093657600080fd5b50610951600480360381019061094c9190613c75565b611f53565b60405161095e9190613c1d565b60405180910390f35b34801561097357600080fd5b5061097c611faf565b6040516109899190613e86565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613ea1565b611fb5565b005b3480156109c757600080fd5b506109e260048036038101906109dd91906145b2565b612058565b005b3480156109f057600080fd5b50610a0b6004803603810190610a069190613d6a565b612148565b005b348015610a1957600080fd5b50610a346004803603810190610a2f91906145f2565b612208565b604051610a419190613b69565b60405180910390f35b610a646004803603810190610a5f9190613c75565b61229c565b005b348015610a7257600080fd5b50610a8d6004803603810190610a889190613d6a565b6124c7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6a5750610b69826125bf565b5b9050919050565b601660009054906101000a900460ff1681565b606060008054610b9390614661565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbf90614661565b8015610c0c5780601f10610be157610100808354040283529160200191610c0c565b820191906000526020600020905b815481529060010190602001808311610bef57829003601f168201915b5050505050905090565b6000610c2182612629565b610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790614705565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ca6826112ac565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90614797565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d36612695565b73ffffffffffffffffffffffffffffffffffffffff161480610d655750610d6481610d5f612695565b612208565b5b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614829565b60405180910390fd5b610dae838361269d565b505050565b6060600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610e3e57602002820191906000526020600020905b815481526020019060010190808311610e2a575b50505050509050919050565b600a5481565b610e58612695565b73ffffffffffffffffffffffffffffffffffffffff16610e7661183c565b73ffffffffffffffffffffffffffffffffffffffff1614610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec390614895565b60405180910390fd5b600180811115610edf57610ede6148b5565b5b821415610eee57806015819055505b5050565b601360009054906101000a900460ff1681565b610f16610f10612695565b82612756565b610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90614956565b60405180910390fd5b610f60838383612834565b505050565b60146020528060005260406000206000915090505481565b60085481565b6000610f8d612695565b73ffffffffffffffffffffffffffffffffffffffff16610fab61183c565b73ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890614895565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611047906149a7565b60006040518083038185875af1925050503d8060008114611084576040519150601f19603f3d011682016040523d82523d6000602084013e611089565b606091505b50508091505090565b6000806000806110a186611cef565b8093508194508295505050506000856040516020016110c09190614a04565b604051602081830303815290604052805190602001209050600181858585604051600081526020016040526040516110fb9493929190614a1f565b6020604051602081039080840390855afa15801561111d573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161494505050505092915050565b61119e83838360405180602001604052806000815250611d32565b505050565b6111b46111ae612695565b82612756565b6111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90614ab0565b60405180910390fd5b6111fc81612a9b565b50565b611207612695565b73ffffffffffffffffffffffffffffffffffffffff1661122561183c565b73ffffffffffffffffffffffffffffffffffffffff161461127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290614895565b60405180910390fd5b80600d90805190602001906112919291906139d2565b5050565b6000600760149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90614b42565b60405180910390fd5b80915050919050565b611366612695565b73ffffffffffffffffffffffffffffffffffffffff1661138461183c565b73ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190614895565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611426612695565b73ffffffffffffffffffffffffffffffffffffffff1661144461183c565b73ffffffffffffffffffffffffffffffffffffffff161461149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190614895565b60405180910390fd5b80518251146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590614bae565b60405180910390fd5b60005b82518110156115ab576000600a5490505b82828151811061150557611504614bce565b5b6020026020010151600a5461151a9190614c2c565b8110156115645761155184838151811061153757611536614bce565b5b602002602001015160018361154c9190614c2c565b612aee565b808061155c90614c82565b9150506114f2565b5081818151811061157857611577614bce565b5b6020026020010151600a60008282546115919190614c2c565b9250508190555080806115a390614c82565b9150506114e1565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890614d3d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611670612695565b73ffffffffffffffffffffffffffffffffffffffff1661168e61183c565b73ffffffffffffffffffffffffffffffffffffffff16146116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90614895565b60405180910390fd5b6116ee6000612cc8565b565b60006116fa612695565b73ffffffffffffffffffffffffffffffffffffffff1661171861183c565b73ffffffffffffffffffffffffffffffffffffffff161461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176590614895565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006117a0612695565b73ffffffffffffffffffffffffffffffffffffffff166117be61183c565b73ffffffffffffffffffffffffffffffffffffffff1614611814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180b90614895565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61186e612695565b73ffffffffffffffffffffffffffffffffffffffff1661188c61183c565b73ffffffffffffffffffffffffffffffffffffffff16146118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990614895565b60405180910390fd5b8060098190555050565b60125481565b60606001805461190190614661565b80601f016020809104026020016040519081016040528092919081815260200182805461192d90614661565b801561197a5780601f1061194f5761010080835404028352916020019161197a565b820191906000526020600020905b81548152906001019060200180831161195d57829003601f168201915b5050505050905090565b60125442116119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bf90614da9565b60405180910390fd5b60011515601360009054906101000a900460ff16151514611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590614e15565b60405180910390fd5b611a288133611092565b611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e90614e81565b60405180910390fd5b60115482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab59190614c2c565b1115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed90614eed565b60405180910390fd5b81600954611b049190614f0d565b341015611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90614fb3565b60405180910390fd5b60008211611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b809061501f565b60405180910390fd5b600854600a5483611b9a9190614c2c565b1115611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd29061508b565b60405180910390fd5b6000600a5490505b82600a54611bf19190614c2c565b811015611c2157611c0e33600183611c099190614c2c565b612aee565b8080611c1990614c82565b915050611be3565b5081601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6d9190614c2c565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a6000828254611cc29190614c2c565b925050819055505050565b60115481565b60095481565b611ceb611ce4612695565b8383612d8e565b5050565b60008060006041845114611d0257600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b611d43611d3d612695565b83612756565b611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614956565b60405180910390fd5b611d8e84848484612efb565b50505050565b611d9c612695565b73ffffffffffffffffffffffffffffffffffffffff16611dba61183c565b73ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790614895565b60405180910390fd5b60006001811115611e2457611e236148b5565b5b821415611e3357806012819055505b5050565b611e3f612695565b73ffffffffffffffffffffffffffffffffffffffff16611e5d61183c565b73ffffffffffffffffffffffffffffffffffffffff1614611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa90614895565b60405180910390fd5b80600e9080519060200190611ec99291906139d2565b5050565b611ed5612695565b73ffffffffffffffffffffffffffffffffffffffff16611ef361183c565b73ffffffffffffffffffffffffffffffffffffffff1614611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090614895565b60405180910390fd5b8060088190555050565b60606000600e8054611f6490614661565b90501415611f7c57611f7582612f57565b9050611faa565b611f8582612f57565b600e604051602001611f9892919061517b565b60405160208183030381529060405290505b919050565b60155481565b611fbd612695565b73ffffffffffffffffffffffffffffffffffffffff16611fdb61183c565b73ffffffffffffffffffffffffffffffffffffffff1614612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202890614895565b60405180910390fd5b60006001811115612045576120446148b5565b5b82141561205457806011819055505b5050565b612060612695565b73ffffffffffffffffffffffffffffffffffffffff1661207e61183c565b73ffffffffffffffffffffffffffffffffffffffff16146120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90614895565b60405180910390fd5b600060018111156120e8576120e76148b5565b5b82141561210e5780601360006101000a81548160ff021916908315150217905550612144565b600180811115612121576121206148b5565b5b8214156121435780601660006101000a81548160ff0219169083151502179055505b5b5050565b612150612695565b73ffffffffffffffffffffffffffffffffffffffff1661216e61183c565b73ffffffffffffffffffffffffffffffffffffffff16146121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90614895565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122a4611295565b156122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db906151eb565b60405180910390fd5b60011515601660009054906101000a900460ff1615151461233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233190614e15565b60405180910390fd5b806009546123489190614f0d565b34101561238a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238190614fb3565b60405180910390fd5b600081116123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c49061501f565b60405180910390fd5b600854600a54826123de9190614c2c565b111561241f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124169061508b565b60405180910390fd5b601554811115612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90615257565b60405180910390fd5b6000600a5490505b81600a5461247a9190614c2c565b8110156124aa57612497336001836124929190614c2c565b612aee565b80806124a290614c82565b91505061246c565b5080600a60008282546124bd9190614c2c565b9250508190555050565b6124cf612695565b73ffffffffffffffffffffffffffffffffffffffff166124ed61183c565b73ffffffffffffffffffffffffffffffffffffffff1614612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90614895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa906152e9565b60405180910390fd5b6125bc81612cc8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612710836112ac565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061276182612629565b6127a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127979061537b565b60405180910390fd5b60006127ab836112ac565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127ed57506127ec8185612208565b5b8061282b57508373ffffffffffffffffffffffffffffffffffffffff1661281384610c16565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612854826112ac565b73ffffffffffffffffffffffffffffffffffffffff16146128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a19061540d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561291a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129119061549f565b60405180910390fd5b6129258383836130a9565b61293060008261269d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461298091906154bf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129d79190614c2c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a9683838361346b565b505050565b612aa481613470565b6000600660008381526020019081526020016000208054612ac490614661565b905014612aeb57600660008281526020019081526020016000206000612aea9190613a58565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b559061553f565b60405180910390fd5b612b6781612629565b15612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e906155ab565b60405180910390fd5b612bb3600083836130a9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c039190614c2c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cc46000838361346b565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df490615617565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612eee9190613b69565b60405180910390a3505050565b612f06848484612834565b612f128484848461358d565b612f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f48906156a9565b60405180910390fd5b50505050565b6060612f6282612629565b612fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f989061573b565b60405180910390fd5b6000600660008481526020019081526020016000208054612fc190614661565b80601f0160208091040260200160405190810160405280929190818152602001828054612fed90614661565b801561303a5780601f1061300f5761010080835404028352916020019161303a565b820191906000526020600020905b81548152906001019060200180831161301d57829003601f168201915b50505050509050600061304b613715565b90506000815114156130615781925050506130a4565b60008251111561309657808260405160200161307e92919061575b565b604051602081830303815290604052925050506130a4565b61309f846137a7565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613154576130e6816112ac565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314a906157cb565b60405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318d57613466565b600060106000838152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146132a657600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061328e91906154bf565b60106000848152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613464576000600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060018161332e91906154bf565b8210156133fd57600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018261338191906154bf565b8154811061339257613391614bce565b5b9060005260206000200154600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106133ee576133ed614bce565b5b90600052602060002001819055505b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061344c5761344b6157eb565b5b60019003818190600052602060002001600090559055505b505b505050565b505050565b600061347b826112ac565b9050613489816000846130a9565b61349460008361269d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134e491906154bf565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135898160008461346b565b5050565b60006135ae8473ffffffffffffffffffffffffffffffffffffffff1661384e565b15613708578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135d7612695565b8786866040518563ffffffff1660e01b81526004016135f9949392919061586f565b6020604051808303816000875af192505050801561363557506040513d601f19601f8201168201806040525081019061363291906158d0565b60015b6136b8573d8060008114613665576040519150601f19603f3d011682016040523d82523d6000602084013e61366a565b606091505b506000815114156136b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a7906156a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061370d565b600190505b949350505050565b6060600d805461372490614661565b80601f016020809104026020016040519081016040528092919081815260200182805461375090614661565b801561379d5780601f106137725761010080835404028352916020019161379d565b820191906000526020600020905b81548152906001019060200180831161378057829003601f168201915b5050505050905090565b60606137b282612629565b6137f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e89061596f565b60405180910390fd5b60006137fb613715565b9050600081511161381b5760405180602001604052806000815250613846565b8061382584613871565b60405160200161383692919061575b565b6040516020818303038152906040525b915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156138b9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506139cd565b600082905060005b600082146138eb5780806138d490614c82565b915050600a826138e491906159be565b91506138c1565b60008167ffffffffffffffff81111561390757613906613f3e565b5b6040519080825280601f01601f1916602001820160405280156139395781602001600182028036833780820191505090505b5090505b600085146139c65760018261395291906154bf565b9150600a8561396191906159ef565b603061396d9190614c2c565b60f81b81838151811061398357613982614bce565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139bf91906159be565b945061393d565b8093505050505b919050565b8280546139de90614661565b90600052602060002090601f016020900481019282613a005760008555613a47565b82601f10613a1957805160ff1916838001178555613a47565b82800160010185558215613a47579182015b82811115613a46578251825591602001919060010190613a2b565b5b509050613a549190613a98565b5090565b508054613a6490614661565b6000825580601f10613a765750613a95565b601f016020900490600052602060002090810190613a949190613a98565b5b50565b5b80821115613ab1576000816000905550600101613a99565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613afe81613ac9565b8114613b0957600080fd5b50565b600081359050613b1b81613af5565b92915050565b600060208284031215613b3757613b36613abf565b5b6000613b4584828501613b0c565b91505092915050565b60008115159050919050565b613b6381613b4e565b82525050565b6000602082019050613b7e6000830184613b5a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bbe578082015181840152602081019050613ba3565b83811115613bcd576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bef82613b84565b613bf98185613b8f565b9350613c09818560208601613ba0565b613c1281613bd3565b840191505092915050565b60006020820190508181036000830152613c378184613be4565b905092915050565b6000819050919050565b613c5281613c3f565b8114613c5d57600080fd5b50565b600081359050613c6f81613c49565b92915050565b600060208284031215613c8b57613c8a613abf565b5b6000613c9984828501613c60565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ccd82613ca2565b9050919050565b613cdd81613cc2565b82525050565b6000602082019050613cf86000830184613cd4565b92915050565b613d0781613cc2565b8114613d1257600080fd5b50565b600081359050613d2481613cfe565b92915050565b60008060408385031215613d4157613d40613abf565b5b6000613d4f85828601613d15565b9250506020613d6085828601613c60565b9150509250929050565b600060208284031215613d8057613d7f613abf565b5b6000613d8e84828501613d15565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dcc81613c3f565b82525050565b6000613dde8383613dc3565b60208301905092915050565b6000602082019050919050565b6000613e0282613d97565b613e0c8185613da2565b9350613e1783613db3565b8060005b83811015613e48578151613e2f8882613dd2565b9750613e3a83613dea565b925050600181019050613e1b565b5085935050505092915050565b60006020820190508181036000830152613e6f8184613df7565b905092915050565b613e8081613c3f565b82525050565b6000602082019050613e9b6000830184613e77565b92915050565b60008060408385031215613eb857613eb7613abf565b5b6000613ec685828601613c60565b9250506020613ed785828601613c60565b9150509250929050565b600080600060608486031215613efa57613ef9613abf565b5b6000613f0886828701613d15565b9350506020613f1986828701613d15565b9250506040613f2a86828701613c60565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f7682613bd3565b810181811067ffffffffffffffff82111715613f9557613f94613f3e565b5b80604052505050565b6000613fa8613ab5565b9050613fb48282613f6d565b919050565b600067ffffffffffffffff821115613fd457613fd3613f3e565b5b613fdd82613bd3565b9050602081019050919050565b82818337600083830152505050565b600061400c61400784613fb9565b613f9e565b90508281526020810184848401111561402857614027613f39565b5b614033848285613fea565b509392505050565b600082601f8301126140505761404f613f34565b5b8135614060848260208601613ff9565b91505092915050565b600080604083850312156140805761407f613abf565b5b600083013567ffffffffffffffff81111561409e5761409d613ac4565b5b6140aa8582860161403b565b92505060206140bb85828601613d15565b9150509250929050565b600067ffffffffffffffff8211156140e0576140df613f3e565b5b6140e982613bd3565b9050602081019050919050565b6000614109614104846140c5565b613f9e565b90508281526020810184848401111561412557614124613f39565b5b614130848285613fea565b509392505050565b600082601f83011261414d5761414c613f34565b5b813561415d8482602086016140f6565b91505092915050565b60006020828403121561417c5761417b613abf565b5b600082013567ffffffffffffffff81111561419a57614199613ac4565b5b6141a684828501614138565b91505092915050565b600067ffffffffffffffff8211156141ca576141c9613f3e565b5b602082029050602081019050919050565b600080fd5b60006141f36141ee846141af565b613f9e565b90508083825260208201905060208402830185811115614216576142156141db565b5b835b8181101561423f578061422b8882613d15565b845260208401935050602081019050614218565b5050509392505050565b600082601f83011261425e5761425d613f34565b5b813561426e8482602086016141e0565b91505092915050565b600067ffffffffffffffff82111561429257614291613f3e565b5b602082029050602081019050919050565b60006142b66142b184614277565b613f9e565b905080838252602082019050602084028301858111156142d9576142d86141db565b5b835b8181101561430257806142ee8882613c60565b8452602084019350506020810190506142db565b5050509392505050565b600082601f83011261432157614320613f34565b5b81356143318482602086016142a3565b91505092915050565b6000806040838503121561435157614350613abf565b5b600083013567ffffffffffffffff81111561436f5761436e613ac4565b5b61437b85828601614249565b925050602083013567ffffffffffffffff81111561439c5761439b613ac4565b5b6143a88582860161430c565b9150509250929050565b600080604083850312156143c9576143c8613abf565b5b60006143d785828601613c60565b925050602083013567ffffffffffffffff8111156143f8576143f7613ac4565b5b6144048582860161403b565b9150509250929050565b61441781613b4e565b811461442257600080fd5b50565b6000813590506144348161440e565b92915050565b6000806040838503121561445157614450613abf565b5b600061445f85828601613d15565b925050602061447085828601614425565b9150509250929050565b6000602082840312156144905761448f613abf565b5b600082013567ffffffffffffffff8111156144ae576144ad613ac4565b5b6144ba8482850161403b565b91505092915050565b600060ff82169050919050565b6144d9816144c3565b82525050565b6000819050919050565b6144f2816144df565b82525050565b600060608201905061450d60008301866144d0565b61451a60208301856144e9565b61452760408301846144e9565b949350505050565b6000806000806080858703121561454957614548613abf565b5b600061455787828801613d15565b945050602061456887828801613d15565b935050604061457987828801613c60565b925050606085013567ffffffffffffffff81111561459a57614599613ac4565b5b6145a68782880161403b565b91505092959194509250565b600080604083850312156145c9576145c8613abf565b5b60006145d785828601613c60565b92505060206145e885828601614425565b9150509250929050565b6000806040838503121561460957614608613abf565b5b600061461785828601613d15565b925050602061462885828601613d15565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061467957607f821691505b6020821081141561468d5761468c614632565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146ef602c83613b8f565b91506146fa82614693565b604082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614781602183613b8f565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614813603883613b8f565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061487f602083613b8f565b915061488a82614849565b602082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614940603183613b8f565b915061494b826148e4565b604082019050919050565b6000602082019050818103600083015261496f81614933565b9050919050565b600081905092915050565b50565b6000614991600083614976565b915061499c82614981565b600082019050919050565b60006149b282614984565b9150819050919050565b60008160601b9050919050565b60006149d4826149bc565b9050919050565b60006149e6826149c9565b9050919050565b6149fe6149f982613cc2565b6149db565b82525050565b6000614a1082846149ed565b60148201915081905092915050565b6000608082019050614a3460008301876144e9565b614a4160208301866144d0565b614a4e60408301856144e9565b614a5b60608301846144e9565b95945050505050565b7f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564600082015250565b6000614a9a602083613b8f565b9150614aa582614a64565b602082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614b2c602983613b8f565b9150614b3782614ad0565b604082019050919050565b60006020820190508181036000830152614b5b81614b1f565b9050919050565b7f617272617973206861766520646966666572656e74206c656e67746873000000600082015250565b6000614b98601d83613b8f565b9150614ba382614b62565b602082019050919050565b60006020820190508181036000830152614bc781614b8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c3782613c3f565b9150614c4283613c3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7757614c76614bfd565b5b828201905092915050565b6000614c8d82613c3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cc057614cbf614bfd565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614d27602a83613b8f565b9150614d3282614ccb565b604082019050919050565b60006020820190508181036000830152614d5681614d1a565b9050919050565b7f6d696e74696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614d93601483613b8f565b9150614d9e82614d5d565b602082019050919050565b60006020820190508181036000830152614dc281614d86565b9050919050565b7f6d696e74696e67206e6f74206163746976617465640000000000000000000000600082015250565b6000614dff601583613b8f565b9150614e0a82614dc9565b602082019050919050565b60006020820190508181036000830152614e2e81614df2565b9050919050565b7f77616c6c6574206973206e6f742077686974656c697374656400000000000000600082015250565b6000614e6b601983613b8f565b9150614e7682614e35565b602082019050919050565b60006020820190508181036000830152614e9a81614e5e565b9050919050565b7f746f6f206d616e7920746f6b656e73206d696e74656400000000000000000000600082015250565b6000614ed7601683613b8f565b9150614ee282614ea1565b602082019050919050565b60006020820190508181036000830152614f0681614eca565b9050919050565b6000614f1882613c3f565b9150614f2383613c3f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f5c57614f5b614bfd565b5b828202905092915050565b7f6e6f7420656e6f756768206574682070726f7669646564000000000000000000600082015250565b6000614f9d601783613b8f565b9150614fa882614f67565b602082019050919050565b60006020820190508181036000830152614fcc81614f90565b9050919050565b7f6e6f7420656e6f75676820746f6b656e20746f206d696e740000000000000000600082015250565b6000615009601883613b8f565b915061501482614fd3565b602082019050919050565b6000602082019050818103600083015261503881614ffc565b9050919050565b7f776f756c6420657863656564206d617820737570706c79000000000000000000600082015250565b6000615075601783613b8f565b91506150808261503f565b602082019050919050565b600060208201905081810360008301526150a481615068565b9050919050565b600081905092915050565b60006150c182613b84565b6150cb81856150ab565b93506150db818560208601613ba0565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461510981614661565b61511381866150ab565b9450600182166000811461512e576001811461513f57615172565b60ff19831686528186019350615172565b615148856150e7565b60005b8381101561516a5781548189015260018201915060208101905061514b565b838801955050505b50505092915050565b600061518782856150b6565b915061519382846150fc565b91508190509392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006151d5601083613b8f565b91506151e08261519f565b602082019050919050565b60006020820190508181036000830152615204816151c8565b9050919050565b7f746f6f206d616e7920746f6b656e732070657220747800000000000000000000600082015250565b6000615241601683613b8f565b915061524c8261520b565b602082019050919050565b6000602082019050818103600083015261527081615234565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152d3602683613b8f565b91506152de82615277565b604082019050919050565b60006020820190508181036000830152615302816152c6565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615365602c83613b8f565b915061537082615309565b604082019050919050565b6000602082019050818103600083015261539481615358565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006153f7602583613b8f565b91506154028261539b565b604082019050919050565b60006020820190508181036000830152615426816153ea565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615489602483613b8f565b91506154948261542d565b604082019050919050565b600060208201905081810360008301526154b88161547c565b9050919050565b60006154ca82613c3f565b91506154d583613c3f565b9250828210156154e8576154e7614bfd565b5b828203905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615529602083613b8f565b9150615534826154f3565b602082019050919050565b600060208201905081810360008301526155588161551c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615595601c83613b8f565b91506155a08261555f565b602082019050919050565b600060208201905081810360008301526155c481615588565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615601601983613b8f565b915061560c826155cb565b602082019050919050565b60006020820190508181036000830152615630816155f4565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615693603283613b8f565b915061569e82615637565b604082019050919050565b600060208201905081810360008301526156c281615686565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000615725603183613b8f565b9150615730826156c9565b604082019050919050565b6000602082019050818103600083015261575481615718565b9050919050565b600061576782856150b6565b915061577382846150b6565b91508190509392505050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006157b5600983613b8f565b91506157c08261577f565b602082019050919050565b600060208201905081810360008301526157e4816157a8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006158418261581a565b61584b8185615825565b935061585b818560208601613ba0565b61586481613bd3565b840191505092915050565b60006080820190506158846000830187613cd4565b6158916020830186613cd4565b61589e6040830185613e77565b81810360608301526158b08184615836565b905095945050505050565b6000815190506158ca81613af5565b92915050565b6000602082840312156158e6576158e5613abf565b5b60006158f4848285016158bb565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615959602f83613b8f565b9150615964826158fd565b604082019050919050565b600060208201905081810360008301526159888161594c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159c982613c3f565b91506159d483613c3f565b9250826159e4576159e361598f565b5b828204905092915050565b60006159fa82613c3f565b9150615a0583613c3f565b925082615a1557615a1461598f565b5b82820690509291505056fea264697066735822122063e76e5b8319309ff0695a8aba3a9ca74ea9566ddf375cc146ebea7237e468f564736f6c634300080c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000009721ecf4f571b109d215a91c10ef2a5f469fd9b100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000009537472616e676572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453545247000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656966666577656f7936723561636e727533717475706f7270753771756778626a736a6c74766561377378337477636a68757a646c792f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c8063719971bc1161014f578063b88d4fde116100c1578063db02ae321161007a578063db02ae3214610992578063e2356f0b146109bb578063e2e13e60146109e4578063e985e9c514610a0d578063efd0cbf914610a4a578063f2fde38b14610a665761027d565b8063b88d4fde14610886578063ba278e08146108af578063c3bb8c64146108d8578063c714e89c14610901578063c87b56dd1461092a578063d04d3f82146109675761027d565b806395d89b411161011357806395d89b41146107815780639f41554a146107ac5780639f704cb0146107c8578063a035b1fe146107f3578063a22cb4651461081e578063a7bb5803146108475761027d565b8063719971bc146106ac5780637c7b605c146106d75780638da5cb5b1461070257806391b7f5ed1461072d5780639292caaf146107565761027d565b80633c010a3e116101f35780635c975abb116101ac5780635c975abb1461059e5780636352211e146105c957806365bc6c1314610606578063672434821461062f57806370a0823114610658578063715018a6146106955761027d565b80633c010a3e1461049d5780633ccfd60b146104c85780633d3ac1b5146104e657806342842e0e1461052357806342966c681461054c57806355f804b3146105755761027d565b80630986b210116102455780630986b2101461037b57806318160ddd146103b85780631f457c4d146103e35780631fe70d6f1461040c57806323b872dd146104375780632ccdac50146104605761027d565b806301ffc9a714610282578063033a02d6146102bf57806306fdde03146102ea578063081812fc14610315578063095ea7b314610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613b21565b610a8f565b6040516102b69190613b69565b60405180910390f35b3480156102cb57600080fd5b506102d4610b71565b6040516102e19190613b69565b60405180910390f35b3480156102f657600080fd5b506102ff610b84565b60405161030c9190613c1d565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190613c75565b610c16565b6040516103499190613ce3565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613d2a565b610c9b565b005b34801561038757600080fd5b506103a2600480360381019061039d9190613d6a565b610db3565b6040516103af9190613e55565b60405180910390f35b3480156103c457600080fd5b506103cd610e4a565b6040516103da9190613e86565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613ea1565b610e50565b005b34801561041857600080fd5b50610421610ef2565b60405161042e9190613b69565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190613ee1565b610f05565b005b34801561046c57600080fd5b5061048760048036038101906104829190613d6a565b610f65565b6040516104949190613e86565b60405180910390f35b3480156104a957600080fd5b506104b2610f7d565b6040516104bf9190613e86565b60405180910390f35b6104d0610f83565b6040516104dd9190613b69565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190614069565b611092565b60405161051a9190613b69565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190613ee1565b611183565b005b34801561055857600080fd5b50610573600480360381019061056e9190613c75565b6111a3565b005b34801561058157600080fd5b5061059c60048036038101906105979190614166565b6111ff565b005b3480156105aa57600080fd5b506105b3611295565b6040516105c09190613b69565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613c75565b6112ac565b6040516105fd9190613ce3565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613d6a565b61135e565b005b34801561063b57600080fd5b506106566004803603810190610651919061433a565b61141e565b005b34801561066457600080fd5b5061067f600480360381019061067a9190613d6a565b6115b0565b60405161068c9190613e86565b60405180910390f35b3480156106a157600080fd5b506106aa611668565b005b3480156106b857600080fd5b506106c16116f0565b6040516106ce9190613ce3565b60405180910390f35b3480156106e357600080fd5b506106ec611796565b6040516106f99190613ce3565b60405180910390f35b34801561070e57600080fd5b5061071761183c565b6040516107249190613ce3565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613c75565b611866565b005b34801561076257600080fd5b5061076b6118ec565b6040516107789190613e86565b60405180910390f35b34801561078d57600080fd5b506107966118f2565b6040516107a39190613c1d565b60405180910390f35b6107c660048036038101906107c191906143b2565b611984565b005b3480156107d457600080fd5b506107dd611ccd565b6040516107ea9190613e86565b60405180910390f35b3480156107ff57600080fd5b50610808611cd3565b6040516108159190613e86565b60405180910390f35b34801561082a57600080fd5b506108456004803603810190610840919061443a565b611cd9565b005b34801561085357600080fd5b5061086e6004803603810190610869919061447a565b611cef565b60405161087d939291906144f8565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061452f565b611d32565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190613ea1565b611d94565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190614166565b611e37565b005b34801561090d57600080fd5b5061092860048036038101906109239190613c75565b611ecd565b005b34801561093657600080fd5b50610951600480360381019061094c9190613c75565b611f53565b60405161095e9190613c1d565b60405180910390f35b34801561097357600080fd5b5061097c611faf565b6040516109899190613e86565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613ea1565b611fb5565b005b3480156109c757600080fd5b506109e260048036038101906109dd91906145b2565b612058565b005b3480156109f057600080fd5b50610a0b6004803603810190610a069190613d6a565b612148565b005b348015610a1957600080fd5b50610a346004803603810190610a2f91906145f2565b612208565b604051610a419190613b69565b60405180910390f35b610a646004803603810190610a5f9190613c75565b61229c565b005b348015610a7257600080fd5b50610a8d6004803603810190610a889190613d6a565b6124c7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6a5750610b69826125bf565b5b9050919050565b601660009054906101000a900460ff1681565b606060008054610b9390614661565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbf90614661565b8015610c0c5780601f10610be157610100808354040283529160200191610c0c565b820191906000526020600020905b815481529060010190602001808311610bef57829003601f168201915b5050505050905090565b6000610c2182612629565b610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790614705565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ca6826112ac565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90614797565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d36612695565b73ffffffffffffffffffffffffffffffffffffffff161480610d655750610d6481610d5f612695565b612208565b5b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614829565b60405180910390fd5b610dae838361269d565b505050565b6060600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610e3e57602002820191906000526020600020905b815481526020019060010190808311610e2a575b50505050509050919050565b600a5481565b610e58612695565b73ffffffffffffffffffffffffffffffffffffffff16610e7661183c565b73ffffffffffffffffffffffffffffffffffffffff1614610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec390614895565b60405180910390fd5b600180811115610edf57610ede6148b5565b5b821415610eee57806015819055505b5050565b601360009054906101000a900460ff1681565b610f16610f10612695565b82612756565b610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90614956565b60405180910390fd5b610f60838383612834565b505050565b60146020528060005260406000206000915090505481565b60085481565b6000610f8d612695565b73ffffffffffffffffffffffffffffffffffffffff16610fab61183c565b73ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890614895565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611047906149a7565b60006040518083038185875af1925050503d8060008114611084576040519150601f19603f3d011682016040523d82523d6000602084013e611089565b606091505b50508091505090565b6000806000806110a186611cef565b8093508194508295505050506000856040516020016110c09190614a04565b604051602081830303815290604052805190602001209050600181858585604051600081526020016040526040516110fb9493929190614a1f565b6020604051602081039080840390855afa15801561111d573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161494505050505092915050565b61119e83838360405180602001604052806000815250611d32565b505050565b6111b46111ae612695565b82612756565b6111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90614ab0565b60405180910390fd5b6111fc81612a9b565b50565b611207612695565b73ffffffffffffffffffffffffffffffffffffffff1661122561183c565b73ffffffffffffffffffffffffffffffffffffffff161461127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290614895565b60405180910390fd5b80600d90805190602001906112919291906139d2565b5050565b6000600760149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90614b42565b60405180910390fd5b80915050919050565b611366612695565b73ffffffffffffffffffffffffffffffffffffffff1661138461183c565b73ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190614895565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611426612695565b73ffffffffffffffffffffffffffffffffffffffff1661144461183c565b73ffffffffffffffffffffffffffffffffffffffff161461149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190614895565b60405180910390fd5b80518251146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590614bae565b60405180910390fd5b60005b82518110156115ab576000600a5490505b82828151811061150557611504614bce565b5b6020026020010151600a5461151a9190614c2c565b8110156115645761155184838151811061153757611536614bce565b5b602002602001015160018361154c9190614c2c565b612aee565b808061155c90614c82565b9150506114f2565b5081818151811061157857611577614bce565b5b6020026020010151600a60008282546115919190614c2c565b9250508190555080806115a390614c82565b9150506114e1565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890614d3d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611670612695565b73ffffffffffffffffffffffffffffffffffffffff1661168e61183c565b73ffffffffffffffffffffffffffffffffffffffff16146116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90614895565b60405180910390fd5b6116ee6000612cc8565b565b60006116fa612695565b73ffffffffffffffffffffffffffffffffffffffff1661171861183c565b73ffffffffffffffffffffffffffffffffffffffff161461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176590614895565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006117a0612695565b73ffffffffffffffffffffffffffffffffffffffff166117be61183c565b73ffffffffffffffffffffffffffffffffffffffff1614611814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180b90614895565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61186e612695565b73ffffffffffffffffffffffffffffffffffffffff1661188c61183c565b73ffffffffffffffffffffffffffffffffffffffff16146118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990614895565b60405180910390fd5b8060098190555050565b60125481565b60606001805461190190614661565b80601f016020809104026020016040519081016040528092919081815260200182805461192d90614661565b801561197a5780601f1061194f5761010080835404028352916020019161197a565b820191906000526020600020905b81548152906001019060200180831161195d57829003601f168201915b5050505050905090565b60125442116119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bf90614da9565b60405180910390fd5b60011515601360009054906101000a900460ff16151514611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590614e15565b60405180910390fd5b611a288133611092565b611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e90614e81565b60405180910390fd5b60115482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab59190614c2c565b1115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed90614eed565b60405180910390fd5b81600954611b049190614f0d565b341015611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90614fb3565b60405180910390fd5b60008211611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b809061501f565b60405180910390fd5b600854600a5483611b9a9190614c2c565b1115611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd29061508b565b60405180910390fd5b6000600a5490505b82600a54611bf19190614c2c565b811015611c2157611c0e33600183611c099190614c2c565b612aee565b8080611c1990614c82565b915050611be3565b5081601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6d9190614c2c565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a6000828254611cc29190614c2c565b925050819055505050565b60115481565b60095481565b611ceb611ce4612695565b8383612d8e565b5050565b60008060006041845114611d0257600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b611d43611d3d612695565b83612756565b611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614956565b60405180910390fd5b611d8e84848484612efb565b50505050565b611d9c612695565b73ffffffffffffffffffffffffffffffffffffffff16611dba61183c565b73ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790614895565b60405180910390fd5b60006001811115611e2457611e236148b5565b5b821415611e3357806012819055505b5050565b611e3f612695565b73ffffffffffffffffffffffffffffffffffffffff16611e5d61183c565b73ffffffffffffffffffffffffffffffffffffffff1614611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa90614895565b60405180910390fd5b80600e9080519060200190611ec99291906139d2565b5050565b611ed5612695565b73ffffffffffffffffffffffffffffffffffffffff16611ef361183c565b73ffffffffffffffffffffffffffffffffffffffff1614611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090614895565b60405180910390fd5b8060088190555050565b60606000600e8054611f6490614661565b90501415611f7c57611f7582612f57565b9050611faa565b611f8582612f57565b600e604051602001611f9892919061517b565b60405160208183030381529060405290505b919050565b60155481565b611fbd612695565b73ffffffffffffffffffffffffffffffffffffffff16611fdb61183c565b73ffffffffffffffffffffffffffffffffffffffff1614612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202890614895565b60405180910390fd5b60006001811115612045576120446148b5565b5b82141561205457806011819055505b5050565b612060612695565b73ffffffffffffffffffffffffffffffffffffffff1661207e61183c565b73ffffffffffffffffffffffffffffffffffffffff16146120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90614895565b60405180910390fd5b600060018111156120e8576120e76148b5565b5b82141561210e5780601360006101000a81548160ff021916908315150217905550612144565b600180811115612121576121206148b5565b5b8214156121435780601660006101000a81548160ff0219169083151502179055505b5b5050565b612150612695565b73ffffffffffffffffffffffffffffffffffffffff1661216e61183c565b73ffffffffffffffffffffffffffffffffffffffff16146121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90614895565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122a4611295565b156122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db906151eb565b60405180910390fd5b60011515601660009054906101000a900460ff1615151461233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233190614e15565b60405180910390fd5b806009546123489190614f0d565b34101561238a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238190614fb3565b60405180910390fd5b600081116123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c49061501f565b60405180910390fd5b600854600a54826123de9190614c2c565b111561241f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124169061508b565b60405180910390fd5b601554811115612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90615257565b60405180910390fd5b6000600a5490505b81600a5461247a9190614c2c565b8110156124aa57612497336001836124929190614c2c565b612aee565b80806124a290614c82565b91505061246c565b5080600a60008282546124bd9190614c2c565b9250508190555050565b6124cf612695565b73ffffffffffffffffffffffffffffffffffffffff166124ed61183c565b73ffffffffffffffffffffffffffffffffffffffff1614612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90614895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa906152e9565b60405180910390fd5b6125bc81612cc8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612710836112ac565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061276182612629565b6127a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127979061537b565b60405180910390fd5b60006127ab836112ac565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127ed57506127ec8185612208565b5b8061282b57508373ffffffffffffffffffffffffffffffffffffffff1661281384610c16565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612854826112ac565b73ffffffffffffffffffffffffffffffffffffffff16146128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a19061540d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561291a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129119061549f565b60405180910390fd5b6129258383836130a9565b61293060008261269d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461298091906154bf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129d79190614c2c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a9683838361346b565b505050565b612aa481613470565b6000600660008381526020019081526020016000208054612ac490614661565b905014612aeb57600660008281526020019081526020016000206000612aea9190613a58565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b559061553f565b60405180910390fd5b612b6781612629565b15612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e906155ab565b60405180910390fd5b612bb3600083836130a9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c039190614c2c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cc46000838361346b565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df490615617565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612eee9190613b69565b60405180910390a3505050565b612f06848484612834565b612f128484848461358d565b612f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f48906156a9565b60405180910390fd5b50505050565b6060612f6282612629565b612fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f989061573b565b60405180910390fd5b6000600660008481526020019081526020016000208054612fc190614661565b80601f0160208091040260200160405190810160405280929190818152602001828054612fed90614661565b801561303a5780601f1061300f5761010080835404028352916020019161303a565b820191906000526020600020905b81548152906001019060200180831161301d57829003601f168201915b50505050509050600061304b613715565b90506000815114156130615781925050506130a4565b60008251111561309657808260405160200161307e92919061575b565b604051602081830303815290604052925050506130a4565b61309f846137a7565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613154576130e6816112ac565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314a906157cb565b60405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318d57613466565b600060106000838152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146132a657600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061328e91906154bf565b60106000848152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613464576000600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060018161332e91906154bf565b8210156133fd57600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018261338191906154bf565b8154811061339257613391614bce565b5b9060005260206000200154600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106133ee576133ed614bce565b5b90600052602060002001819055505b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061344c5761344b6157eb565b5b60019003818190600052602060002001600090559055505b505b505050565b505050565b600061347b826112ac565b9050613489816000846130a9565b61349460008361269d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134e491906154bf565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135898160008461346b565b5050565b60006135ae8473ffffffffffffffffffffffffffffffffffffffff1661384e565b15613708578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135d7612695565b8786866040518563ffffffff1660e01b81526004016135f9949392919061586f565b6020604051808303816000875af192505050801561363557506040513d601f19601f8201168201806040525081019061363291906158d0565b60015b6136b8573d8060008114613665576040519150601f19603f3d011682016040523d82523d6000602084013e61366a565b606091505b506000815114156136b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a7906156a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061370d565b600190505b949350505050565b6060600d805461372490614661565b80601f016020809104026020016040519081016040528092919081815260200182805461375090614661565b801561379d5780601f106137725761010080835404028352916020019161379d565b820191906000526020600020905b81548152906001019060200180831161378057829003601f168201915b5050505050905090565b60606137b282612629565b6137f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e89061596f565b60405180910390fd5b60006137fb613715565b9050600081511161381b5760405180602001604052806000815250613846565b8061382584613871565b60405160200161383692919061575b565b6040516020818303038152906040525b915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156138b9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506139cd565b600082905060005b600082146138eb5780806138d490614c82565b915050600a826138e491906159be565b91506138c1565b60008167ffffffffffffffff81111561390757613906613f3e565b5b6040519080825280601f01601f1916602001820160405280156139395781602001600182028036833780820191505090505b5090505b600085146139c65760018261395291906154bf565b9150600a8561396191906159ef565b603061396d9190614c2c565b60f81b81838151811061398357613982614bce565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139bf91906159be565b945061393d565b8093505050505b919050565b8280546139de90614661565b90600052602060002090601f016020900481019282613a005760008555613a47565b82601f10613a1957805160ff1916838001178555613a47565b82800160010185558215613a47579182015b82811115613a46578251825591602001919060010190613a2b565b5b509050613a549190613a98565b5090565b508054613a6490614661565b6000825580601f10613a765750613a95565b601f016020900490600052602060002090810190613a949190613a98565b5b50565b5b80821115613ab1576000816000905550600101613a99565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613afe81613ac9565b8114613b0957600080fd5b50565b600081359050613b1b81613af5565b92915050565b600060208284031215613b3757613b36613abf565b5b6000613b4584828501613b0c565b91505092915050565b60008115159050919050565b613b6381613b4e565b82525050565b6000602082019050613b7e6000830184613b5a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bbe578082015181840152602081019050613ba3565b83811115613bcd576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bef82613b84565b613bf98185613b8f565b9350613c09818560208601613ba0565b613c1281613bd3565b840191505092915050565b60006020820190508181036000830152613c378184613be4565b905092915050565b6000819050919050565b613c5281613c3f565b8114613c5d57600080fd5b50565b600081359050613c6f81613c49565b92915050565b600060208284031215613c8b57613c8a613abf565b5b6000613c9984828501613c60565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ccd82613ca2565b9050919050565b613cdd81613cc2565b82525050565b6000602082019050613cf86000830184613cd4565b92915050565b613d0781613cc2565b8114613d1257600080fd5b50565b600081359050613d2481613cfe565b92915050565b60008060408385031215613d4157613d40613abf565b5b6000613d4f85828601613d15565b9250506020613d6085828601613c60565b9150509250929050565b600060208284031215613d8057613d7f613abf565b5b6000613d8e84828501613d15565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dcc81613c3f565b82525050565b6000613dde8383613dc3565b60208301905092915050565b6000602082019050919050565b6000613e0282613d97565b613e0c8185613da2565b9350613e1783613db3565b8060005b83811015613e48578151613e2f8882613dd2565b9750613e3a83613dea565b925050600181019050613e1b565b5085935050505092915050565b60006020820190508181036000830152613e6f8184613df7565b905092915050565b613e8081613c3f565b82525050565b6000602082019050613e9b6000830184613e77565b92915050565b60008060408385031215613eb857613eb7613abf565b5b6000613ec685828601613c60565b9250506020613ed785828601613c60565b9150509250929050565b600080600060608486031215613efa57613ef9613abf565b5b6000613f0886828701613d15565b9350506020613f1986828701613d15565b9250506040613f2a86828701613c60565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f7682613bd3565b810181811067ffffffffffffffff82111715613f9557613f94613f3e565b5b80604052505050565b6000613fa8613ab5565b9050613fb48282613f6d565b919050565b600067ffffffffffffffff821115613fd457613fd3613f3e565b5b613fdd82613bd3565b9050602081019050919050565b82818337600083830152505050565b600061400c61400784613fb9565b613f9e565b90508281526020810184848401111561402857614027613f39565b5b614033848285613fea565b509392505050565b600082601f8301126140505761404f613f34565b5b8135614060848260208601613ff9565b91505092915050565b600080604083850312156140805761407f613abf565b5b600083013567ffffffffffffffff81111561409e5761409d613ac4565b5b6140aa8582860161403b565b92505060206140bb85828601613d15565b9150509250929050565b600067ffffffffffffffff8211156140e0576140df613f3e565b5b6140e982613bd3565b9050602081019050919050565b6000614109614104846140c5565b613f9e565b90508281526020810184848401111561412557614124613f39565b5b614130848285613fea565b509392505050565b600082601f83011261414d5761414c613f34565b5b813561415d8482602086016140f6565b91505092915050565b60006020828403121561417c5761417b613abf565b5b600082013567ffffffffffffffff81111561419a57614199613ac4565b5b6141a684828501614138565b91505092915050565b600067ffffffffffffffff8211156141ca576141c9613f3e565b5b602082029050602081019050919050565b600080fd5b60006141f36141ee846141af565b613f9e565b90508083825260208201905060208402830185811115614216576142156141db565b5b835b8181101561423f578061422b8882613d15565b845260208401935050602081019050614218565b5050509392505050565b600082601f83011261425e5761425d613f34565b5b813561426e8482602086016141e0565b91505092915050565b600067ffffffffffffffff82111561429257614291613f3e565b5b602082029050602081019050919050565b60006142b66142b184614277565b613f9e565b905080838252602082019050602084028301858111156142d9576142d86141db565b5b835b8181101561430257806142ee8882613c60565b8452602084019350506020810190506142db565b5050509392505050565b600082601f83011261432157614320613f34565b5b81356143318482602086016142a3565b91505092915050565b6000806040838503121561435157614350613abf565b5b600083013567ffffffffffffffff81111561436f5761436e613ac4565b5b61437b85828601614249565b925050602083013567ffffffffffffffff81111561439c5761439b613ac4565b5b6143a88582860161430c565b9150509250929050565b600080604083850312156143c9576143c8613abf565b5b60006143d785828601613c60565b925050602083013567ffffffffffffffff8111156143f8576143f7613ac4565b5b6144048582860161403b565b9150509250929050565b61441781613b4e565b811461442257600080fd5b50565b6000813590506144348161440e565b92915050565b6000806040838503121561445157614450613abf565b5b600061445f85828601613d15565b925050602061447085828601614425565b9150509250929050565b6000602082840312156144905761448f613abf565b5b600082013567ffffffffffffffff8111156144ae576144ad613ac4565b5b6144ba8482850161403b565b91505092915050565b600060ff82169050919050565b6144d9816144c3565b82525050565b6000819050919050565b6144f2816144df565b82525050565b600060608201905061450d60008301866144d0565b61451a60208301856144e9565b61452760408301846144e9565b949350505050565b6000806000806080858703121561454957614548613abf565b5b600061455787828801613d15565b945050602061456887828801613d15565b935050604061457987828801613c60565b925050606085013567ffffffffffffffff81111561459a57614599613ac4565b5b6145a68782880161403b565b91505092959194509250565b600080604083850312156145c9576145c8613abf565b5b60006145d785828601613c60565b92505060206145e885828601614425565b9150509250929050565b6000806040838503121561460957614608613abf565b5b600061461785828601613d15565b925050602061462885828601613d15565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061467957607f821691505b6020821081141561468d5761468c614632565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146ef602c83613b8f565b91506146fa82614693565b604082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614781602183613b8f565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614813603883613b8f565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061487f602083613b8f565b915061488a82614849565b602082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614940603183613b8f565b915061494b826148e4565b604082019050919050565b6000602082019050818103600083015261496f81614933565b9050919050565b600081905092915050565b50565b6000614991600083614976565b915061499c82614981565b600082019050919050565b60006149b282614984565b9150819050919050565b60008160601b9050919050565b60006149d4826149bc565b9050919050565b60006149e6826149c9565b9050919050565b6149fe6149f982613cc2565b6149db565b82525050565b6000614a1082846149ed565b60148201915081905092915050565b6000608082019050614a3460008301876144e9565b614a4160208301866144d0565b614a4e60408301856144e9565b614a5b60608301846144e9565b95945050505050565b7f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564600082015250565b6000614a9a602083613b8f565b9150614aa582614a64565b602082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614b2c602983613b8f565b9150614b3782614ad0565b604082019050919050565b60006020820190508181036000830152614b5b81614b1f565b9050919050565b7f617272617973206861766520646966666572656e74206c656e67746873000000600082015250565b6000614b98601d83613b8f565b9150614ba382614b62565b602082019050919050565b60006020820190508181036000830152614bc781614b8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c3782613c3f565b9150614c4283613c3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7757614c76614bfd565b5b828201905092915050565b6000614c8d82613c3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cc057614cbf614bfd565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614d27602a83613b8f565b9150614d3282614ccb565b604082019050919050565b60006020820190508181036000830152614d5681614d1a565b9050919050565b7f6d696e74696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614d93601483613b8f565b9150614d9e82614d5d565b602082019050919050565b60006020820190508181036000830152614dc281614d86565b9050919050565b7f6d696e74696e67206e6f74206163746976617465640000000000000000000000600082015250565b6000614dff601583613b8f565b9150614e0a82614dc9565b602082019050919050565b60006020820190508181036000830152614e2e81614df2565b9050919050565b7f77616c6c6574206973206e6f742077686974656c697374656400000000000000600082015250565b6000614e6b601983613b8f565b9150614e7682614e35565b602082019050919050565b60006020820190508181036000830152614e9a81614e5e565b9050919050565b7f746f6f206d616e7920746f6b656e73206d696e74656400000000000000000000600082015250565b6000614ed7601683613b8f565b9150614ee282614ea1565b602082019050919050565b60006020820190508181036000830152614f0681614eca565b9050919050565b6000614f1882613c3f565b9150614f2383613c3f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f5c57614f5b614bfd565b5b828202905092915050565b7f6e6f7420656e6f756768206574682070726f7669646564000000000000000000600082015250565b6000614f9d601783613b8f565b9150614fa882614f67565b602082019050919050565b60006020820190508181036000830152614fcc81614f90565b9050919050565b7f6e6f7420656e6f75676820746f6b656e20746f206d696e740000000000000000600082015250565b6000615009601883613b8f565b915061501482614fd3565b602082019050919050565b6000602082019050818103600083015261503881614ffc565b9050919050565b7f776f756c6420657863656564206d617820737570706c79000000000000000000600082015250565b6000615075601783613b8f565b91506150808261503f565b602082019050919050565b600060208201905081810360008301526150a481615068565b9050919050565b600081905092915050565b60006150c182613b84565b6150cb81856150ab565b93506150db818560208601613ba0565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461510981614661565b61511381866150ab565b9450600182166000811461512e576001811461513f57615172565b60ff19831686528186019350615172565b615148856150e7565b60005b8381101561516a5781548189015260018201915060208101905061514b565b838801955050505b50505092915050565b600061518782856150b6565b915061519382846150fc565b91508190509392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006151d5601083613b8f565b91506151e08261519f565b602082019050919050565b60006020820190508181036000830152615204816151c8565b9050919050565b7f746f6f206d616e7920746f6b656e732070657220747800000000000000000000600082015250565b6000615241601683613b8f565b915061524c8261520b565b602082019050919050565b6000602082019050818103600083015261527081615234565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152d3602683613b8f565b91506152de82615277565b604082019050919050565b60006020820190508181036000830152615302816152c6565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615365602c83613b8f565b915061537082615309565b604082019050919050565b6000602082019050818103600083015261539481615358565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006153f7602583613b8f565b91506154028261539b565b604082019050919050565b60006020820190508181036000830152615426816153ea565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615489602483613b8f565b91506154948261542d565b604082019050919050565b600060208201905081810360008301526154b88161547c565b9050919050565b60006154ca82613c3f565b91506154d583613c3f565b9250828210156154e8576154e7614bfd565b5b828203905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615529602083613b8f565b9150615534826154f3565b602082019050919050565b600060208201905081810360008301526155588161551c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615595601c83613b8f565b91506155a08261555f565b602082019050919050565b600060208201905081810360008301526155c481615588565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615601601983613b8f565b915061560c826155cb565b602082019050919050565b60006020820190508181036000830152615630816155f4565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615693603283613b8f565b915061569e82615637565b604082019050919050565b600060208201905081810360008301526156c281615686565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000615725603183613b8f565b9150615730826156c9565b604082019050919050565b6000602082019050818103600083015261575481615718565b9050919050565b600061576782856150b6565b915061577382846150b6565b91508190509392505050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006157b5600983613b8f565b91506157c08261577f565b602082019050919050565b600060208201905081810360008301526157e4816157a8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006158418261581a565b61584b8185615825565b935061585b818560208601613ba0565b61586481613bd3565b840191505092915050565b60006080820190506158846000830187613cd4565b6158916020830186613cd4565b61589e6040830185613e77565b81810360608301526158b08184615836565b905095945050505050565b6000815190506158ca81613af5565b92915050565b6000602082840312156158e6576158e5613abf565b5b60006158f4848285016158bb565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615959602f83613b8f565b9150615964826158fd565b604082019050919050565b600060208201905081810360008301526159888161594c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159c982613c3f565b91506159d483613c3f565b9250826159e4576159e361598f565b5b828204905092915050565b60006159fa82613c3f565b9150615a0583613c3f565b925082615a1557615a1461598f565b5b82820690509291505056fea264697066735822122063e76e5b8319309ff0695a8aba3a9ca74ea9566ddf375cc146ebea7237e468f564736f6c634300080c0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000009721ecf4f571b109d215a91c10ef2a5f469fd9b100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000009537472616e676572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453545247000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656966666577656f7936723561636e727533717475706f7270753771756778626a736a6c74766561377378337477636a68757a646c792f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Strangers
Arg [1] : symbol_ (string): STRG
Arg [2] : walletTreasury_ (address): 0x9721ecf4f571B109D215A91C10Ef2A5F469fd9B1
Arg [3] : baseURI_ (string): ipfs://bafybeiffeweoy6r5acnru3qtuporpu7qugxbjsjltvea7sx3twcjhuzdly/

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000009721ecf4f571b109d215a91c10ef2a5f469fd9b1
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 537472616e676572730000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 5354524700000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [9] : 697066733a2f2f6261667962656966666577656f7936723561636e7275337174
Arg [10] : 75706f7270753771756778626a736a6c74766561377378337477636a68757a64
Arg [11] : 6c792f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

41830:10993:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26465:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43375:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27410:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28970:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28493:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47325:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42150:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43893:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43027:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29720:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43114:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41963:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50304:166;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50632:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30130:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50055:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46151:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4149:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27104:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45931:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49443:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26834:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7048:103;;;;;;;;;;;;;:::i;:::-;;46967:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47138:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6397:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45369:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42922:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27579:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47661:914;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42824:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42057:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29263:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51161:542;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30386:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44643:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46373:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45536:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46624:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43271:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44262:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44991:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45723:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29489:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48681:605;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7306:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26465:305;26567:4;26619:25;26604:40;;;:11;:40;;;;:105;;;;26676:33;26661:48;;;:11;:48;;;;26604:105;:158;;;;26726:36;26750:11;26726:23;:36::i;:::-;26604:158;26584:178;;26465:305;;;:::o;43375:55::-;;;;;;;;;;;;;:::o;27410:100::-;27464:13;27497:5;27490:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27410:100;:::o;28970:221::-;29046:7;29074:16;29082:7;29074;:16::i;:::-;29066:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29159:15;:24;29175:7;29159:24;;;;;;;;;;;;;;;;;;;;;29152:31;;28970:221;;;:::o;28493:411::-;28574:13;28590:23;28605:7;28590:14;:23::i;:::-;28574:39;;28638:5;28632:11;;:2;:11;;;;28624:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28732:5;28716:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28741:37;28758:5;28765:12;:10;:12::i;:::-;28741:16;:37::i;:::-;28716:62;28694:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28875:21;28884:2;28888:7;28875:8;:21::i;:::-;28563:341;28493:411;;:::o;47325:119::-;47382:16;47417:12;:19;47430:5;47417:19;;;;;;;;;;;;;;;47410:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47325:119;;;:::o;42150:26::-;;;;:::o;43893:191::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44002:16:::1;43994:25:::0;::::1;;;;;;;:::i;:::-;;43985:5;:34;43981:96;;;44058:7;44036:19;:29;;;;43981:96;43893:191:::0;;:::o;43027:55::-;;;;;;;;;;;;;:::o;29720:339::-;29915:41;29934:12;:10;:12::i;:::-;29948:7;29915:18;:41::i;:::-;29907:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30023:28;30033:4;30039:2;30043:7;30023:9;:28::i;:::-;29720:339;;;:::o;43114:56::-;;;;;;;;;;;;;;;;;:::o;41963:52::-;;;;:::o;50304:166::-;50360:12;6628;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50406:16:::1;;;;;;;;;;;50398:30;;50436:21;50398:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50385:77;;;;;50304:166:::0;:::o;50632:418::-;50709:4;50726:7;50744:9;50764;50796:25;50811:9;50796:14;:25::i;:::-;50784:37;;;;;;;;;;;;50832:18;50880:6;50863:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;50853:35;;;;;;50832:56;;51010:30;51020:10;51032:1;51035;51038;51010:30;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50981:60;;:17;;;;;;;;;;;:60;;;50973:69;;;;;;50632:418;;;;:::o;30130:185::-;30268:39;30285:4;30291:2;30295:7;30268:39;;;;;;;;;;;;:16;:39::i;:::-;30130:185;;;:::o;50055:178::-;50120:41;50139:12;:10;:12::i;:::-;50153:7;50120:18;:41::i;:::-;50112:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50211:14;50217:7;50211:5;:14::i;:::-;50055:178;:::o;46151:108::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46240:11:::1;46228:9;:23;;;;;;;;;;;;:::i;:::-;;46151:108:::0;:::o;4149:86::-;4196:4;4220:7;;;;;;;;;;;4213:14;;4149:86;:::o;27104:239::-;27176:7;27196:13;27212:7;:16;27220:7;27212:16;;;;;;;;;;;;;;;;;;;;;27196:32;;27264:1;27247:19;;:5;:19;;;;27239:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27330:5;27323:12;;;27104:239;;;:::o;45931:110::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46026:7:::1;46006:17;;:27;;;;;;;;;;;;;;;;;;45931:110:::0;:::o;49443:435::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49574:7:::1;:14;49553:10;:17;:35;49545:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49640:9;49635:236;49657:10;:17;49653:1;:21;49635:236;;;49699:9;49709:11;;49699:21;;49695:123;49741:7;49749:1;49741:10;;;;;;;;:::i;:::-;;;;;;;;49727:11;;:24;;;;:::i;:::-;49722:1;:30;49695:123;;;49777:25;49783:10;49794:1;49783:13;;;;;;;;:::i;:::-;;;;;;;;49800:1;49798;:3;;;;:::i;:::-;49777:5;:25::i;:::-;49754:3;;;;;:::i;:::-;;;;49695:123;;;;49849:7;49857:1;49849:10;;;;;;;;:::i;:::-;;;;;;;;49834:11;;:25;;;;;;;:::i;:::-;;;;;;;;49676:3;;;;;:::i;:::-;;;;49635:236;;;;49443:435:::0;;:::o;26834:208::-;26906:7;26951:1;26934:19;;:5;:19;;;;26926:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27018:9;:16;27028:5;27018:16;;;;;;;;;;;;;;;;27011:23;;26834:208;;;:::o;7048:103::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7113:30:::1;7140:1;7113:18;:30::i;:::-;7048:103::o:0;46967:113::-;47029:7;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47056:16:::1;;;;;;;;;;;47049:23;;46967:113:::0;:::o;47138:115::-;47201:7;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47228:17:::1;;;;;;;;;;;47221:24;;47138:115:::0;:::o;6397:87::-;6443:7;6470:6;;;;;;;;;;;6463:13;;6397:87;:::o;45369:86::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45441:6:::1;45433:5;:14;;;;45369:86:::0;:::o;42922:60::-;;;;:::o;27579:104::-;27635:13;27668:7;27661:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27579:104;:::o;47661:914::-;47781:18;;47763:15;:36;47755:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;47864:4;47843:25;;:17;;;;;;;;;;;:25;;;47835:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;47913:29;47920:9;47931:10;47913:6;:29::i;:::-;47905:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48040:26;;48027:9;47991:21;:33;48013:10;47991:33;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;:75;;47983:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;48133:9;48125:5;;:17;;;;:::i;:::-;48112:9;:30;;48104:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;48201:1;48189:9;:13;48181:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;48279:8;;48263:11;;48251:9;:23;;;;:::i;:::-;48250:37;;48242:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48332:9;48342:11;;48332:21;;48328:111;48374:9;48360:11;;:23;;;;:::i;:::-;48355:1;:29;48328:111;;;48405:22;48411:10;48425:1;48423;:3;;;;:::i;:::-;48405:5;:22::i;:::-;48386:3;;;;;:::i;:::-;;;;48328:111;;;;48523:9;48487:21;:33;48509:10;48487:33;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;48451:21;:33;48473:10;48451:33;;;;;;;;;;;;;;;:81;;;;48558:9;48543:11;;:24;;;;;;;:::i;:::-;;;;;;;;47661:914;;:::o;42824:51::-;;;;:::o;42057:57::-;;;;:::o;29263:155::-;29358:52;29377:12;:10;:12::i;:::-;29391:8;29401;29358:18;:52::i;:::-;29263:155;;:::o;51161:542::-;51230:5;51237:7;51246;51294:2;51274:9;:16;:22;51266:31;;;;;;51310:9;51330;51350:7;51470:2;51459:9;51455:18;51449:25;51444:30;;51542:2;51531:9;51527:18;51521:25;51516:30;;51651:2;51640:9;51636:18;51630:25;51627:1;51622:34;51617:39;;51687:1;51690;51693;51679:16;;;;;;;;;51161:542;;;;;:::o;30386:328::-;30561:41;30580:12;:10;:12::i;:::-;30594:7;30561:18;:41::i;:::-;30553:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30667:39;30681:4;30687:2;30691:7;30700:5;30667:13;:39::i;:::-;30386:328;;;;:::o;44643:195::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44751:19:::1;44743:28;;;;;;;;:::i;:::-;;44734:5;:37;44730:101;;;44809:10;44788:18;:31;;;;44730:101;44643:195:::0;;:::o;46373:128::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46477:16:::1;46460:14;:33;;;;;;;;;;;;:::i;:::-;;46373:128:::0;:::o;45536:88::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45612:4:::1;45601:8;:15;;;;45536:88:::0;:::o;46624:286::-;46697:13;46759:1;46733:14;46727:28;;;;;:::i;:::-;;;:33;46723:95;;;46783:23;46798:7;46783:14;:23::i;:::-;46776:30;;;;46723:95;46861:23;46876:7;46861:14;:23::i;:::-;46886:14;46844:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46830:72;;46624:286;;;;:::o;43271:51::-;;;;:::o;44262:205::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44375:19:::1;44367:28;;;;;;;;:::i;:::-;;44358:5;:37;44354:106;;;44441:7;44412:26;:36;;;;44354:106;44262:205:::0;;:::o;44991:287::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45094:19:::1;45086:28;;;;;;;;:::i;:::-;;45077:5;:37;45073:198;;;45151:9;45131:17;;:29;;;;;;;;;;;;;;;;;;45073:198;;;45199:16;45191:25:::0;::::1;;;;;;;:::i;:::-;;45182:5;:34;45178:93;;;45250:9;45233:14;;:26;;;;;;;;;;;;;;;;;;45178:93;45073:198;44991:287:::0;;:::o;45723:108::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45816:7:::1;45797:16;;:26;;;;;;;;;;;;;;;;;;45723:108:::0;:::o;29489:164::-;29586:4;29610:18;:25;29629:5;29610:25;;;;;;;;;;;;;;;:35;29636:8;29610:35;;;;;;;;;;;;;;;;;;;;;;;;;29603:42;;29489:164;;;;:::o;48681:605::-;4475:8;:6;:8::i;:::-;4474:9;4466:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;48788:4:::1;48770:22;;:14;;;;;;;;;;;:22;;;48762:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48858:9;48850:5;;:17;;;;:::i;:::-;48837:9;:30;;48829:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;48926:1;48914:9;:13;48906:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;49004:8;;48988:11;;48976:9;:23;;;;:::i;:::-;48975:37;;48967:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49072:19;;49059:9;:32;;49051:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49135:9;49145:11;;49135:21;;49131:111;49177:9;49163:11;;:23;;;;:::i;:::-;49158:1;:29;49131:111;;;49208:22;49214:10;49228:1;49226;:3;;;;:::i;:::-;49208:5;:22::i;:::-;49189:3;;;;;:::i;:::-;;;;49131:111;;;;49269:9;49254:11;;:24;;;;;;;:::i;:::-;;;;;;;;48681:605:::0;:::o;7306:201::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7415:1:::1;7395:22;;:8;:22;;;;7387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7471:28;7490:8;7471:18;:28::i;:::-;7306:201:::0;:::o;19204:157::-;19289:4;19328:25;19313:40;;;:11;:40;;;;19306:47;;19204:157;;;:::o;32224:127::-;32289:4;32341:1;32313:30;;:7;:16;32321:7;32313:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32306:37;;32224:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;36370:174::-;36472:2;36445:15;:24;36461:7;36445:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36528:7;36524:2;36490:46;;36499:23;36514:7;36499:14;:23::i;:::-;36490:46;;;;;;;;;;;;36370:174;;:::o;32518:348::-;32611:4;32636:16;32644:7;32636;:16::i;:::-;32628:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32712:13;32728:23;32743:7;32728:14;:23::i;:::-;32712:39;;32781:5;32770:16;;:7;:16;;;:52;;;;32790:32;32807:5;32814:7;32790:16;:32::i;:::-;32770:52;:87;;;;32850:7;32826:31;;:20;32838:7;32826:11;:20::i;:::-;:31;;;32770:87;32762:96;;;32518:348;;;;:::o;35627:625::-;35786:4;35759:31;;:23;35774:7;35759:14;:23::i;:::-;:31;;;35751:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35865:1;35851:16;;:2;:16;;;;35843:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35921:39;35942:4;35948:2;35952:7;35921:20;:39::i;:::-;36025:29;36042:1;36046:7;36025:8;:29::i;:::-;36086:1;36067:9;:15;36077:4;36067:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36115:1;36098:9;:13;36108:2;36098:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36146:2;36127:7;:16;36135:7;36127:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36185:7;36181:2;36166:27;;36175:4;36166:27;;;;;;;;;;;;36206:38;36226:4;36232:2;36236:7;36206:19;:38::i;:::-;35627:625;;;:::o;41372:206::-;41441:20;41453:7;41441:11;:20::i;:::-;41515:1;41484:10;:19;41495:7;41484:19;;;;;;;;;;;41478:33;;;;;:::i;:::-;;;:38;41474:97;;41540:10;:19;41551:7;41540:19;;;;;;;;;;;;41533:26;;;;:::i;:::-;41474:97;41372:206;:::o;34202:439::-;34296:1;34282:16;;:2;:16;;;;34274:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34355:16;34363:7;34355;:16::i;:::-;34354:17;34346:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34417:45;34446:1;34450:2;34454:7;34417:20;:45::i;:::-;34492:1;34475:9;:13;34485:2;34475:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34523:2;34504:7;:16;34512:7;34504:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34568:7;34564:2;34543:33;;34560:1;34543:33;;;;;;;;;;;;34589:44;34617:1;34621:2;34625:7;34589:19;:44::i;:::-;34202:439;;:::o;7667:191::-;7741:16;7760:6;;;;;;;;;;;7741:25;;7786:8;7777:6;;:17;;;;;;;;;;;;;;;;;;7841:8;7810:40;;7831:8;7810:40;;;;;;;;;;;;7730:128;7667:191;:::o;36686:315::-;36841:8;36832:17;;:5;:17;;;;36824:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36928:8;36890:18;:25;36909:5;36890:25;;;;;;;;;;;;;;;:35;36916:8;36890:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36974:8;36952:41;;36967:5;36952:41;;;36984:8;36952:41;;;;;;:::i;:::-;;;;;;;;36686:315;;;:::o;31596:::-;31753:28;31763:4;31769:2;31773:7;31753:9;:28::i;:::-;31800:48;31823:4;31829:2;31833:7;31842:5;31800:22;:48::i;:::-;31792:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31596:315;;;;:::o;40091:679::-;40164:13;40198:16;40206:7;40198;:16::i;:::-;40190:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;40281:23;40307:10;:19;40318:7;40307:19;;;;;;;;;;;40281:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40337:18;40358:10;:8;:10::i;:::-;40337:31;;40466:1;40450:4;40444:18;:23;40440:72;;;40491:9;40484:16;;;;;;40440:72;40642:1;40622:9;40616:23;:27;40612:108;;;40691:4;40697:9;40674:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40660:48;;;;;;40612:108;40739:23;40754:7;40739:14;:23::i;:::-;40732:30;;;;40091:679;;;;:::o;51922:898::-;52043:1;52027:18;;:4;:18;;;52024:95;;52077:16;52085:7;52077;:16::i;:::-;52069:24;;:4;:24;;;52061:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;52024:95;52142:2;52134:10;;:4;:10;;;52131:47;;;52160:7;;52131:47;52190:31;52224:16;:25;52241:7;52224:25;;;;;;;;;;;;52190:59;;52326:1;52312:16;;:2;:16;;;52309:147;;52344:12;:16;52357:2;52344:16;;;;;;;;;;;;;;;52366:7;52344:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52443:1;52417:12;:16;52430:2;52417:16;;;;;;;;;;;;;;;:23;;;;:27;;;;:::i;:::-;52389:16;:25;52406:7;52389:25;;;;;;;;;;;:55;;;;52309:147;52541:1;52525:18;;:4;:18;;;52522:291;;52559:12;52574;:18;52587:4;52574:18;;;;;;;;;;;;;;;:25;;;;52559:40;;52651:1;52644:4;:8;;;;:::i;:::-;52617:23;:36;52614:149;;;52719:12;:18;52732:4;52719:18;;;;;;;;;;;;;;;52745:1;52738:4;:8;;;;:::i;:::-;52719:28;;;;;;;;:::i;:::-;;;;;;;;;;52673:12;:18;52686:4;52673:18;;;;;;;;;;;;;;;52692:23;52673:43;;;;;;;;:::i;:::-;;;;;;;;;:74;;;;52614:149;52777:12;:18;52790:4;52777:18;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52544:269;52522:291;52013:807;51922:898;;;;:::o;39448:125::-;;;;:::o;34870:420::-;34930:13;34946:23;34961:7;34946:14;:23::i;:::-;34930:39;;34982:48;35003:5;35018:1;35022:7;34982:20;:48::i;:::-;35071:29;35088:1;35092:7;35071:8;:29::i;:::-;35133:1;35113:9;:16;35123:5;35113:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;35152:7;:16;35160:7;35152:16;;;;;;;;;;;;35145:23;;;;;;;;;;;35214:7;35210:1;35186:36;;35195:5;35186:36;;;;;;;;;;;;35235:47;35255:5;35270:1;35274:7;35235:19;:47::i;:::-;34919:371;34870:420;:::o;37566:799::-;37721:4;37742:15;:2;:13;;;:15::i;:::-;37738:620;;;37794:2;37778:36;;;37815:12;:10;:12::i;:::-;37829:4;37835:7;37844:5;37778:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37774:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38037:1;38020:6;:13;:18;38016:272;;;38063:60;;;;;;;;;;:::i;:::-;;;;;;;;38016:272;38238:6;38232:13;38223:6;38219:2;38215:15;38208:38;37774:529;37911:41;;;37901:51;;;:6;:51;;;;37894:58;;;;;37738:620;38342:4;38335:11;;37566:799;;;;;;;:::o;51753:102::-;51805:13;51838:9;51831:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51753:102;:::o;27754:334::-;27827:13;27861:16;27869:7;27861;:16::i;:::-;27853:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27942:21;27966:10;:8;:10::i;:::-;27942:34;;28018:1;28000:7;27994:21;:25;:86;;;;;;;;;;;;;;;;;28046:7;28055:18;:7;:16;:18::i;:::-;28029:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27994:86;27987:93;;;27754:334;;;:::o;9098:326::-;9158:4;9415:1;9393:7;:19;;;:23;9386:30;;9098:326;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:329::-;4997:6;5046:2;5034:9;5025:7;5021:23;5017:32;5014:119;;;5052:79;;:::i;:::-;5014:119;5172:1;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5143:117;4938:329;;;;:::o;5273:114::-;5340:6;5374:5;5368:12;5358:22;;5273:114;;;:::o;5393:184::-;5492:11;5526:6;5521:3;5514:19;5566:4;5561:3;5557:14;5542:29;;5393:184;;;;:::o;5583:132::-;5650:4;5673:3;5665:11;;5703:4;5698:3;5694:14;5686:22;;5583:132;;;:::o;5721:108::-;5798:24;5816:5;5798:24;:::i;:::-;5793:3;5786:37;5721:108;;:::o;5835:179::-;5904:10;5925:46;5967:3;5959:6;5925:46;:::i;:::-;6003:4;5998:3;5994:14;5980:28;;5835:179;;;;:::o;6020:113::-;6090:4;6122;6117:3;6113:14;6105:22;;6020:113;;;:::o;6169:732::-;6288:3;6317:54;6365:5;6317:54;:::i;:::-;6387:86;6466:6;6461:3;6387:86;:::i;:::-;6380:93;;6497:56;6547:5;6497:56;:::i;:::-;6576:7;6607:1;6592:284;6617:6;6614:1;6611:13;6592:284;;;6693:6;6687:13;6720:63;6779:3;6764:13;6720:63;:::i;:::-;6713:70;;6806:60;6859:6;6806:60;:::i;:::-;6796:70;;6652:224;6639:1;6636;6632:9;6627:14;;6592:284;;;6596:14;6892:3;6885:10;;6293:608;;;6169:732;;;;:::o;6907:373::-;7050:4;7088:2;7077:9;7073:18;7065:26;;7137:9;7131:4;7127:20;7123:1;7112:9;7108:17;7101:47;7165:108;7268:4;7259:6;7165:108;:::i;:::-;7157:116;;6907:373;;;;:::o;7286:118::-;7373:24;7391:5;7373:24;:::i;:::-;7368:3;7361:37;7286:118;;:::o;7410:222::-;7503:4;7541:2;7530:9;7526:18;7518:26;;7554:71;7622:1;7611:9;7607:17;7598:6;7554:71;:::i;:::-;7410:222;;;;:::o;7638:474::-;7706:6;7714;7763:2;7751:9;7742:7;7738:23;7734:32;7731:119;;;7769:79;;:::i;:::-;7731:119;7889:1;7914:53;7959:7;7950:6;7939:9;7935:22;7914:53;:::i;:::-;7904:63;;7860:117;8016:2;8042:53;8087:7;8078:6;8067:9;8063:22;8042:53;:::i;:::-;8032:63;;7987:118;7638:474;;;;;:::o;8118:619::-;8195:6;8203;8211;8260:2;8248:9;8239:7;8235:23;8231:32;8228:119;;;8266:79;;:::i;:::-;8228:119;8386:1;8411:53;8456:7;8447:6;8436:9;8432:22;8411:53;:::i;:::-;8401:63;;8357:117;8513:2;8539:53;8584:7;8575:6;8564:9;8560:22;8539:53;:::i;:::-;8529:63;;8484:118;8641:2;8667:53;8712:7;8703:6;8692:9;8688:22;8667:53;:::i;:::-;8657:63;;8612:118;8118:619;;;;;:::o;8743:117::-;8852:1;8849;8842:12;8866:117;8975:1;8972;8965:12;8989:180;9037:77;9034:1;9027:88;9134:4;9131:1;9124:15;9158:4;9155:1;9148:15;9175:281;9258:27;9280:4;9258:27;:::i;:::-;9250:6;9246:40;9388:6;9376:10;9373:22;9352:18;9340:10;9337:34;9334:62;9331:88;;;9399:18;;:::i;:::-;9331:88;9439:10;9435:2;9428:22;9218:238;9175:281;;:::o;9462:129::-;9496:6;9523:20;;:::i;:::-;9513:30;;9552:33;9580:4;9572:6;9552:33;:::i;:::-;9462:129;;;:::o;9597:307::-;9658:4;9748:18;9740:6;9737:30;9734:56;;;9770:18;;:::i;:::-;9734:56;9808:29;9830:6;9808:29;:::i;:::-;9800:37;;9892:4;9886;9882:15;9874:23;;9597:307;;;:::o;9910:154::-;9994:6;9989:3;9984;9971:30;10056:1;10047:6;10042:3;10038:16;10031:27;9910:154;;;:::o;10070:410::-;10147:5;10172:65;10188:48;10229:6;10188:48;:::i;:::-;10172:65;:::i;:::-;10163:74;;10260:6;10253:5;10246:21;10298:4;10291:5;10287:16;10336:3;10327:6;10322:3;10318:16;10315:25;10312:112;;;10343:79;;:::i;:::-;10312:112;10433:41;10467:6;10462:3;10457;10433:41;:::i;:::-;10153:327;10070:410;;;;;:::o;10499:338::-;10554:5;10603:3;10596:4;10588:6;10584:17;10580:27;10570:122;;10611:79;;:::i;:::-;10570:122;10728:6;10715:20;10753:78;10827:3;10819:6;10812:4;10804:6;10800:17;10753:78;:::i;:::-;10744:87;;10560:277;10499:338;;;;:::o;10843:652::-;10920:6;10928;10977:2;10965:9;10956:7;10952:23;10948:32;10945:119;;;10983:79;;:::i;:::-;10945:119;11131:1;11120:9;11116:17;11103:31;11161:18;11153:6;11150:30;11147:117;;;11183:79;;:::i;:::-;11147:117;11288:62;11342:7;11333:6;11322:9;11318:22;11288:62;:::i;:::-;11278:72;;11074:286;11399:2;11425:53;11470:7;11461:6;11450:9;11446:22;11425:53;:::i;:::-;11415:63;;11370:118;10843:652;;;;;:::o;11501:308::-;11563:4;11653:18;11645:6;11642:30;11639:56;;;11675:18;;:::i;:::-;11639:56;11713:29;11735:6;11713:29;:::i;:::-;11705:37;;11797:4;11791;11787:15;11779:23;;11501:308;;;:::o;11815:412::-;11893:5;11918:66;11934:49;11976:6;11934:49;:::i;:::-;11918:66;:::i;:::-;11909:75;;12007:6;12000:5;11993:21;12045:4;12038:5;12034:16;12083:3;12074:6;12069:3;12065:16;12062:25;12059:112;;;12090:79;;:::i;:::-;12059:112;12180:41;12214:6;12209:3;12204;12180:41;:::i;:::-;11899:328;11815:412;;;;;:::o;12247:340::-;12303:5;12352:3;12345:4;12337:6;12333:17;12329:27;12319:122;;12360:79;;:::i;:::-;12319:122;12477:6;12464:20;12502:79;12577:3;12569:6;12562:4;12554:6;12550:17;12502:79;:::i;:::-;12493:88;;12309:278;12247:340;;;;:::o;12593:509::-;12662:6;12711:2;12699:9;12690:7;12686:23;12682:32;12679:119;;;12717:79;;:::i;:::-;12679:119;12865:1;12854:9;12850:17;12837:31;12895:18;12887:6;12884:30;12881:117;;;12917:79;;:::i;:::-;12881:117;13022:63;13077:7;13068:6;13057:9;13053:22;13022:63;:::i;:::-;13012:73;;12808:287;12593:509;;;;:::o;13108:311::-;13185:4;13275:18;13267:6;13264:30;13261:56;;;13297:18;;:::i;:::-;13261:56;13347:4;13339:6;13335:17;13327:25;;13407:4;13401;13397:15;13389:23;;13108:311;;;:::o;13425:117::-;13534:1;13531;13524:12;13565:710;13661:5;13686:81;13702:64;13759:6;13702:64;:::i;:::-;13686:81;:::i;:::-;13677:90;;13787:5;13816:6;13809:5;13802:21;13850:4;13843:5;13839:16;13832:23;;13903:4;13895:6;13891:17;13883:6;13879:30;13932:3;13924:6;13921:15;13918:122;;;13951:79;;:::i;:::-;13918:122;14066:6;14049:220;14083:6;14078:3;14075:15;14049:220;;;14158:3;14187:37;14220:3;14208:10;14187:37;:::i;:::-;14182:3;14175:50;14254:4;14249:3;14245:14;14238:21;;14125:144;14109:4;14104:3;14100:14;14093:21;;14049:220;;;14053:21;13667:608;;13565:710;;;;;:::o;14298:370::-;14369:5;14418:3;14411:4;14403:6;14399:17;14395:27;14385:122;;14426:79;;:::i;:::-;14385:122;14543:6;14530:20;14568:94;14658:3;14650:6;14643:4;14635:6;14631:17;14568:94;:::i;:::-;14559:103;;14375:293;14298:370;;;;:::o;14674:311::-;14751:4;14841:18;14833:6;14830:30;14827:56;;;14863:18;;:::i;:::-;14827:56;14913:4;14905:6;14901:17;14893:25;;14973:4;14967;14963:15;14955:23;;14674:311;;;:::o;15008:710::-;15104:5;15129:81;15145:64;15202:6;15145:64;:::i;:::-;15129:81;:::i;:::-;15120:90;;15230:5;15259:6;15252:5;15245:21;15293:4;15286:5;15282:16;15275:23;;15346:4;15338:6;15334:17;15326:6;15322:30;15375:3;15367:6;15364:15;15361:122;;;15394:79;;:::i;:::-;15361:122;15509:6;15492:220;15526:6;15521:3;15518:15;15492:220;;;15601:3;15630:37;15663:3;15651:10;15630:37;:::i;:::-;15625:3;15618:50;15697:4;15692:3;15688:14;15681:21;;15568:144;15552:4;15547:3;15543:14;15536:21;;15492:220;;;15496:21;15110:608;;15008:710;;;;;:::o;15741:370::-;15812:5;15861:3;15854:4;15846:6;15842:17;15838:27;15828:122;;15869:79;;:::i;:::-;15828:122;15986:6;15973:20;16011:94;16101:3;16093:6;16086:4;16078:6;16074:17;16011:94;:::i;:::-;16002:103;;15818:293;15741:370;;;;:::o;16117:894::-;16235:6;16243;16292:2;16280:9;16271:7;16267:23;16263:32;16260:119;;;16298:79;;:::i;:::-;16260:119;16446:1;16435:9;16431:17;16418:31;16476:18;16468:6;16465:30;16462:117;;;16498:79;;:::i;:::-;16462:117;16603:78;16673:7;16664:6;16653:9;16649:22;16603:78;:::i;:::-;16593:88;;16389:302;16758:2;16747:9;16743:18;16730:32;16789:18;16781:6;16778:30;16775:117;;;16811:79;;:::i;:::-;16775:117;16916:78;16986:7;16977:6;16966:9;16962:22;16916:78;:::i;:::-;16906:88;;16701:303;16117:894;;;;;:::o;17017:652::-;17094:6;17102;17151:2;17139:9;17130:7;17126:23;17122:32;17119:119;;;17157:79;;:::i;:::-;17119:119;17277:1;17302:53;17347:7;17338:6;17327:9;17323:22;17302:53;:::i;:::-;17292:63;;17248:117;17432:2;17421:9;17417:18;17404:32;17463:18;17455:6;17452:30;17449:117;;;17485:79;;:::i;:::-;17449:117;17590:62;17644:7;17635:6;17624:9;17620:22;17590:62;:::i;:::-;17580:72;;17375:287;17017:652;;;;;:::o;17675:116::-;17745:21;17760:5;17745:21;:::i;:::-;17738:5;17735:32;17725:60;;17781:1;17778;17771:12;17725:60;17675:116;:::o;17797:133::-;17840:5;17878:6;17865:20;17856:29;;17894:30;17918:5;17894:30;:::i;:::-;17797:133;;;;:::o;17936:468::-;18001:6;18009;18058:2;18046:9;18037:7;18033:23;18029:32;18026:119;;;18064:79;;:::i;:::-;18026:119;18184:1;18209:53;18254:7;18245:6;18234:9;18230:22;18209:53;:::i;:::-;18199:63;;18155:117;18311:2;18337:50;18379:7;18370:6;18359:9;18355:22;18337:50;:::i;:::-;18327:60;;18282:115;17936:468;;;;;:::o;18410:507::-;18478:6;18527:2;18515:9;18506:7;18502:23;18498:32;18495:119;;;18533:79;;:::i;:::-;18495:119;18681:1;18670:9;18666:17;18653:31;18711:18;18703:6;18700:30;18697:117;;;18733:79;;:::i;:::-;18697:117;18838:62;18892:7;18883:6;18872:9;18868:22;18838:62;:::i;:::-;18828:72;;18624:286;18410:507;;;;:::o;18923:86::-;18958:7;18998:4;18991:5;18987:16;18976:27;;18923:86;;;:::o;19015:112::-;19098:22;19114:5;19098:22;:::i;:::-;19093:3;19086:35;19015:112;;:::o;19133:77::-;19170:7;19199:5;19188:16;;19133:77;;;:::o;19216:118::-;19303:24;19321:5;19303:24;:::i;:::-;19298:3;19291:37;19216:118;;:::o;19340:434::-;19485:4;19523:2;19512:9;19508:18;19500:26;;19536:67;19600:1;19589:9;19585:17;19576:6;19536:67;:::i;:::-;19613:72;19681:2;19670:9;19666:18;19657:6;19613:72;:::i;:::-;19695;19763:2;19752:9;19748:18;19739:6;19695:72;:::i;:::-;19340:434;;;;;;:::o;19780:943::-;19875:6;19883;19891;19899;19948:3;19936:9;19927:7;19923:23;19919:33;19916:120;;;19955:79;;:::i;:::-;19916:120;20075:1;20100:53;20145:7;20136:6;20125:9;20121:22;20100:53;:::i;:::-;20090:63;;20046:117;20202:2;20228:53;20273:7;20264:6;20253:9;20249:22;20228:53;:::i;:::-;20218:63;;20173:118;20330:2;20356:53;20401:7;20392:6;20381:9;20377:22;20356:53;:::i;:::-;20346:63;;20301:118;20486:2;20475:9;20471:18;20458:32;20517:18;20509:6;20506:30;20503:117;;;20539:79;;:::i;:::-;20503:117;20644:62;20698:7;20689:6;20678:9;20674:22;20644:62;:::i;:::-;20634:72;;20429:287;19780:943;;;;;;;:::o;20729:468::-;20794:6;20802;20851:2;20839:9;20830:7;20826:23;20822:32;20819:119;;;20857:79;;:::i;:::-;20819:119;20977:1;21002:53;21047:7;21038:6;21027:9;21023:22;21002:53;:::i;:::-;20992:63;;20948:117;21104:2;21130:50;21172:7;21163:6;21152:9;21148:22;21130:50;:::i;:::-;21120:60;;21075:115;20729:468;;;;;:::o;21203:474::-;21271:6;21279;21328:2;21316:9;21307:7;21303:23;21299:32;21296:119;;;21334:79;;:::i;:::-;21296:119;21454:1;21479:53;21524:7;21515:6;21504:9;21500:22;21479:53;:::i;:::-;21469:63;;21425:117;21581:2;21607:53;21652:7;21643:6;21632:9;21628:22;21607:53;:::i;:::-;21597:63;;21552:118;21203:474;;;;;:::o;21683:180::-;21731:77;21728:1;21721:88;21828:4;21825:1;21818:15;21852:4;21849:1;21842:15;21869:320;21913:6;21950:1;21944:4;21940:12;21930:22;;21997:1;21991:4;21987:12;22018:18;22008:81;;22074:4;22066:6;22062:17;22052:27;;22008:81;22136:2;22128:6;22125:14;22105:18;22102:38;22099:84;;;22155:18;;:::i;:::-;22099:84;21920:269;21869:320;;;:::o;22195:231::-;22335:34;22331:1;22323:6;22319:14;22312:58;22404:14;22399:2;22391:6;22387:15;22380:39;22195:231;:::o;22432:366::-;22574:3;22595:67;22659:2;22654:3;22595:67;:::i;:::-;22588:74;;22671:93;22760:3;22671:93;:::i;:::-;22789:2;22784:3;22780:12;22773:19;;22432:366;;;:::o;22804:419::-;22970:4;23008:2;22997:9;22993:18;22985:26;;23057:9;23051:4;23047:20;23043:1;23032:9;23028:17;23021:47;23085:131;23211:4;23085:131;:::i;:::-;23077:139;;22804:419;;;:::o;23229:220::-;23369:34;23365:1;23357:6;23353:14;23346:58;23438:3;23433:2;23425:6;23421:15;23414:28;23229:220;:::o;23455:366::-;23597:3;23618:67;23682:2;23677:3;23618:67;:::i;:::-;23611:74;;23694:93;23783:3;23694:93;:::i;:::-;23812:2;23807:3;23803:12;23796:19;;23455:366;;;:::o;23827:419::-;23993:4;24031:2;24020:9;24016:18;24008:26;;24080:9;24074:4;24070:20;24066:1;24055:9;24051:17;24044:47;24108:131;24234:4;24108:131;:::i;:::-;24100:139;;23827:419;;;:::o;24252:243::-;24392:34;24388:1;24380:6;24376:14;24369:58;24461:26;24456:2;24448:6;24444:15;24437:51;24252:243;:::o;24501:366::-;24643:3;24664:67;24728:2;24723:3;24664:67;:::i;:::-;24657:74;;24740:93;24829:3;24740:93;:::i;:::-;24858:2;24853:3;24849:12;24842:19;;24501:366;;;:::o;24873:419::-;25039:4;25077:2;25066:9;25062:18;25054:26;;25126:9;25120:4;25116:20;25112:1;25101:9;25097:17;25090:47;25154:131;25280:4;25154:131;:::i;:::-;25146:139;;24873:419;;;:::o;25298:182::-;25438:34;25434:1;25426:6;25422:14;25415:58;25298:182;:::o;25486:366::-;25628:3;25649:67;25713:2;25708:3;25649:67;:::i;:::-;25642:74;;25725:93;25814:3;25725:93;:::i;:::-;25843:2;25838:3;25834:12;25827:19;;25486:366;;;:::o;25858:419::-;26024:4;26062:2;26051:9;26047:18;26039:26;;26111:9;26105:4;26101:20;26097:1;26086:9;26082:17;26075:47;26139:131;26265:4;26139:131;:::i;:::-;26131:139;;25858:419;;;:::o;26283:180::-;26331:77;26328:1;26321:88;26428:4;26425:1;26418:15;26452:4;26449:1;26442:15;26469:236;26609:34;26605:1;26597:6;26593:14;26586:58;26678:19;26673:2;26665:6;26661:15;26654:44;26469:236;:::o;26711:366::-;26853:3;26874:67;26938:2;26933:3;26874:67;:::i;:::-;26867:74;;26950:93;27039:3;26950:93;:::i;:::-;27068:2;27063:3;27059:12;27052:19;;26711:366;;;:::o;27083:419::-;27249:4;27287:2;27276:9;27272:18;27264:26;;27336:9;27330:4;27326:20;27322:1;27311:9;27307:17;27300:47;27364:131;27490:4;27364:131;:::i;:::-;27356:139;;27083:419;;;:::o;27508:147::-;27609:11;27646:3;27631:18;;27508:147;;;;:::o;27661:114::-;;:::o;27781:398::-;27940:3;27961:83;28042:1;28037:3;27961:83;:::i;:::-;27954:90;;28053:93;28142:3;28053:93;:::i;:::-;28171:1;28166:3;28162:11;28155:18;;27781:398;;;:::o;28185:379::-;28369:3;28391:147;28534:3;28391:147;:::i;:::-;28384:154;;28555:3;28548:10;;28185:379;;;:::o;28570:94::-;28603:8;28651:5;28647:2;28643:14;28622:35;;28570:94;;;:::o;28670:::-;28709:7;28738:20;28752:5;28738:20;:::i;:::-;28727:31;;28670:94;;;:::o;28770:100::-;28809:7;28838:26;28858:5;28838:26;:::i;:::-;28827:37;;28770:100;;;:::o;28876:157::-;28981:45;29001:24;29019:5;29001:24;:::i;:::-;28981:45;:::i;:::-;28976:3;28969:58;28876:157;;:::o;29039:256::-;29151:3;29166:75;29237:3;29228:6;29166:75;:::i;:::-;29266:2;29261:3;29257:12;29250:19;;29286:3;29279:10;;29039:256;;;;:::o;29301:545::-;29474:4;29512:3;29501:9;29497:19;29489:27;;29526:71;29594:1;29583:9;29579:17;29570:6;29526:71;:::i;:::-;29607:68;29671:2;29660:9;29656:18;29647:6;29607:68;:::i;:::-;29685:72;29753:2;29742:9;29738:18;29729:6;29685:72;:::i;:::-;29767;29835:2;29824:9;29820:18;29811:6;29767:72;:::i;:::-;29301:545;;;;;;;:::o;29852:182::-;29992:34;29988:1;29980:6;29976:14;29969:58;29852:182;:::o;30040:366::-;30182:3;30203:67;30267:2;30262:3;30203:67;:::i;:::-;30196:74;;30279:93;30368:3;30279:93;:::i;:::-;30397:2;30392:3;30388:12;30381:19;;30040:366;;;:::o;30412:419::-;30578:4;30616:2;30605:9;30601:18;30593:26;;30665:9;30659:4;30655:20;30651:1;30640:9;30636:17;30629:47;30693:131;30819:4;30693:131;:::i;:::-;30685:139;;30412:419;;;:::o;30837:228::-;30977:34;30973:1;30965:6;30961:14;30954:58;31046:11;31041:2;31033:6;31029:15;31022:36;30837:228;:::o;31071:366::-;31213:3;31234:67;31298:2;31293:3;31234:67;:::i;:::-;31227:74;;31310:93;31399:3;31310:93;:::i;:::-;31428:2;31423:3;31419:12;31412:19;;31071:366;;;:::o;31443:419::-;31609:4;31647:2;31636:9;31632:18;31624:26;;31696:9;31690:4;31686:20;31682:1;31671:9;31667:17;31660:47;31724:131;31850:4;31724:131;:::i;:::-;31716:139;;31443:419;;;:::o;31868:179::-;32008:31;32004:1;31996:6;31992:14;31985:55;31868:179;:::o;32053:366::-;32195:3;32216:67;32280:2;32275:3;32216:67;:::i;:::-;32209:74;;32292:93;32381:3;32292:93;:::i;:::-;32410:2;32405:3;32401:12;32394:19;;32053:366;;;:::o;32425:419::-;32591:4;32629:2;32618:9;32614:18;32606:26;;32678:9;32672:4;32668:20;32664:1;32653:9;32649:17;32642:47;32706:131;32832:4;32706:131;:::i;:::-;32698:139;;32425:419;;;:::o;32850:180::-;32898:77;32895:1;32888:88;32995:4;32992:1;32985:15;33019:4;33016:1;33009:15;33036:180;33084:77;33081:1;33074:88;33181:4;33178:1;33171:15;33205:4;33202:1;33195:15;33222:305;33262:3;33281:20;33299:1;33281:20;:::i;:::-;33276:25;;33315:20;33333:1;33315:20;:::i;:::-;33310:25;;33469:1;33401:66;33397:74;33394:1;33391:81;33388:107;;;33475:18;;:::i;:::-;33388:107;33519:1;33516;33512:9;33505:16;;33222:305;;;;:::o;33533:233::-;33572:3;33595:24;33613:5;33595:24;:::i;:::-;33586:33;;33641:66;33634:5;33631:77;33628:103;;;33711:18;;:::i;:::-;33628:103;33758:1;33751:5;33747:13;33740:20;;33533:233;;;:::o;33772:229::-;33912:34;33908:1;33900:6;33896:14;33889:58;33981:12;33976:2;33968:6;33964:15;33957:37;33772:229;:::o;34007:366::-;34149:3;34170:67;34234:2;34229:3;34170:67;:::i;:::-;34163:74;;34246:93;34335:3;34246:93;:::i;:::-;34364:2;34359:3;34355:12;34348:19;;34007:366;;;:::o;34379:419::-;34545:4;34583:2;34572:9;34568:18;34560:26;;34632:9;34626:4;34622:20;34618:1;34607:9;34603:17;34596:47;34660:131;34786:4;34660:131;:::i;:::-;34652:139;;34379:419;;;:::o;34804:170::-;34944:22;34940:1;34932:6;34928:14;34921:46;34804:170;:::o;34980:366::-;35122:3;35143:67;35207:2;35202:3;35143:67;:::i;:::-;35136:74;;35219:93;35308:3;35219:93;:::i;:::-;35337:2;35332:3;35328:12;35321:19;;34980:366;;;:::o;35352:419::-;35518:4;35556:2;35545:9;35541:18;35533:26;;35605:9;35599:4;35595:20;35591:1;35580:9;35576:17;35569:47;35633:131;35759:4;35633:131;:::i;:::-;35625:139;;35352:419;;;:::o;35777:171::-;35917:23;35913:1;35905:6;35901:14;35894:47;35777:171;:::o;35954:366::-;36096:3;36117:67;36181:2;36176:3;36117:67;:::i;:::-;36110:74;;36193:93;36282:3;36193:93;:::i;:::-;36311:2;36306:3;36302:12;36295:19;;35954:366;;;:::o;36326:419::-;36492:4;36530:2;36519:9;36515:18;36507:26;;36579:9;36573:4;36569:20;36565:1;36554:9;36550:17;36543:47;36607:131;36733:4;36607:131;:::i;:::-;36599:139;;36326:419;;;:::o;36751:175::-;36891:27;36887:1;36879:6;36875:14;36868:51;36751:175;:::o;36932:366::-;37074:3;37095:67;37159:2;37154:3;37095:67;:::i;:::-;37088:74;;37171:93;37260:3;37171:93;:::i;:::-;37289:2;37284:3;37280:12;37273:19;;36932:366;;;:::o;37304:419::-;37470:4;37508:2;37497:9;37493:18;37485:26;;37557:9;37551:4;37547:20;37543:1;37532:9;37528:17;37521:47;37585:131;37711:4;37585:131;:::i;:::-;37577:139;;37304:419;;;:::o;37729:172::-;37869:24;37865:1;37857:6;37853:14;37846:48;37729:172;:::o;37907:366::-;38049:3;38070:67;38134:2;38129:3;38070:67;:::i;:::-;38063:74;;38146:93;38235:3;38146:93;:::i;:::-;38264:2;38259:3;38255:12;38248:19;;37907:366;;;:::o;38279:419::-;38445:4;38483:2;38472:9;38468:18;38460:26;;38532:9;38526:4;38522:20;38518:1;38507:9;38503:17;38496:47;38560:131;38686:4;38560:131;:::i;:::-;38552:139;;38279:419;;;:::o;38704:348::-;38744:7;38767:20;38785:1;38767:20;:::i;:::-;38762:25;;38801:20;38819:1;38801:20;:::i;:::-;38796:25;;38989:1;38921:66;38917:74;38914:1;38911:81;38906:1;38899:9;38892:17;38888:105;38885:131;;;38996:18;;:::i;:::-;38885:131;39044:1;39041;39037:9;39026:20;;38704:348;;;;:::o;39058:173::-;39198:25;39194:1;39186:6;39182:14;39175:49;39058:173;:::o;39237:366::-;39379:3;39400:67;39464:2;39459:3;39400:67;:::i;:::-;39393:74;;39476:93;39565:3;39476:93;:::i;:::-;39594:2;39589:3;39585:12;39578:19;;39237:366;;;:::o;39609:419::-;39775:4;39813:2;39802:9;39798:18;39790:26;;39862:9;39856:4;39852:20;39848:1;39837:9;39833:17;39826:47;39890:131;40016:4;39890:131;:::i;:::-;39882:139;;39609:419;;;:::o;40034:174::-;40174:26;40170:1;40162:6;40158:14;40151:50;40034:174;:::o;40214:366::-;40356:3;40377:67;40441:2;40436:3;40377:67;:::i;:::-;40370:74;;40453:93;40542:3;40453:93;:::i;:::-;40571:2;40566:3;40562:12;40555:19;;40214:366;;;:::o;40586:419::-;40752:4;40790:2;40779:9;40775:18;40767:26;;40839:9;40833:4;40829:20;40825:1;40814:9;40810:17;40803:47;40867:131;40993:4;40867:131;:::i;:::-;40859:139;;40586:419;;;:::o;41011:173::-;41151:25;41147:1;41139:6;41135:14;41128:49;41011:173;:::o;41190:366::-;41332:3;41353:67;41417:2;41412:3;41353:67;:::i;:::-;41346:74;;41429:93;41518:3;41429:93;:::i;:::-;41547:2;41542:3;41538:12;41531:19;;41190:366;;;:::o;41562:419::-;41728:4;41766:2;41755:9;41751:18;41743:26;;41815:9;41809:4;41805:20;41801:1;41790:9;41786:17;41779:47;41843:131;41969:4;41843:131;:::i;:::-;41835:139;;41562:419;;;:::o;41987:148::-;42089:11;42126:3;42111:18;;41987:148;;;;:::o;42141:377::-;42247:3;42275:39;42308:5;42275:39;:::i;:::-;42330:89;42412:6;42407:3;42330:89;:::i;:::-;42323:96;;42428:52;42473:6;42468:3;42461:4;42454:5;42450:16;42428:52;:::i;:::-;42505:6;42500:3;42496:16;42489:23;;42251:267;42141:377;;;;:::o;42524:141::-;42573:4;42596:3;42588:11;;42619:3;42616:1;42609:14;42653:4;42650:1;42640:18;42632:26;;42524:141;;;:::o;42695:845::-;42798:3;42835:5;42829:12;42864:36;42890:9;42864:36;:::i;:::-;42916:89;42998:6;42993:3;42916:89;:::i;:::-;42909:96;;43036:1;43025:9;43021:17;43052:1;43047:137;;;;43198:1;43193:341;;;;43014:520;;43047:137;43131:4;43127:9;43116;43112:25;43107:3;43100:38;43167:6;43162:3;43158:16;43151:23;;43047:137;;43193:341;43260:38;43292:5;43260:38;:::i;:::-;43320:1;43334:154;43348:6;43345:1;43342:13;43334:154;;;43422:7;43416:14;43412:1;43407:3;43403:11;43396:35;43472:1;43463:7;43459:15;43448:26;;43370:4;43367:1;43363:12;43358:17;;43334:154;;;43517:6;43512:3;43508:16;43501:23;;43200:334;;43014:520;;42802:738;;42695:845;;;;:::o;43546:429::-;43723:3;43745:95;43836:3;43827:6;43745:95;:::i;:::-;43738:102;;43857:92;43945:3;43936:6;43857:92;:::i;:::-;43850:99;;43966:3;43959:10;;43546:429;;;;;:::o;43981:166::-;44121:18;44117:1;44109:6;44105:14;44098:42;43981:166;:::o;44153:366::-;44295:3;44316:67;44380:2;44375:3;44316:67;:::i;:::-;44309:74;;44392:93;44481:3;44392:93;:::i;:::-;44510:2;44505:3;44501:12;44494:19;;44153:366;;;:::o;44525:419::-;44691:4;44729:2;44718:9;44714:18;44706:26;;44778:9;44772:4;44768:20;44764:1;44753:9;44749:17;44742:47;44806:131;44932:4;44806:131;:::i;:::-;44798:139;;44525:419;;;:::o;44950:172::-;45090:24;45086:1;45078:6;45074:14;45067:48;44950:172;:::o;45128:366::-;45270:3;45291:67;45355:2;45350:3;45291:67;:::i;:::-;45284:74;;45367:93;45456:3;45367:93;:::i;:::-;45485:2;45480:3;45476:12;45469:19;;45128:366;;;:::o;45500:419::-;45666:4;45704:2;45693:9;45689:18;45681:26;;45753:9;45747:4;45743:20;45739:1;45728:9;45724:17;45717:47;45781:131;45907:4;45781:131;:::i;:::-;45773:139;;45500:419;;;:::o;45925:225::-;46065:34;46061:1;46053:6;46049:14;46042:58;46134:8;46129:2;46121:6;46117:15;46110:33;45925:225;:::o;46156:366::-;46298:3;46319:67;46383:2;46378:3;46319:67;:::i;:::-;46312:74;;46395:93;46484:3;46395:93;:::i;:::-;46513:2;46508:3;46504:12;46497:19;;46156:366;;;:::o;46528:419::-;46694:4;46732:2;46721:9;46717:18;46709:26;;46781:9;46775:4;46771:20;46767:1;46756:9;46752:17;46745:47;46809:131;46935:4;46809:131;:::i;:::-;46801:139;;46528:419;;;:::o;46953:231::-;47093:34;47089:1;47081:6;47077:14;47070:58;47162:14;47157:2;47149:6;47145:15;47138:39;46953:231;:::o;47190:366::-;47332:3;47353:67;47417:2;47412:3;47353:67;:::i;:::-;47346:74;;47429:93;47518:3;47429:93;:::i;:::-;47547:2;47542:3;47538:12;47531:19;;47190:366;;;:::o;47562:419::-;47728:4;47766:2;47755:9;47751:18;47743:26;;47815:9;47809:4;47805:20;47801:1;47790:9;47786:17;47779:47;47843:131;47969:4;47843:131;:::i;:::-;47835:139;;47562:419;;;:::o;47987:224::-;48127:34;48123:1;48115:6;48111:14;48104:58;48196:7;48191:2;48183:6;48179:15;48172:32;47987:224;:::o;48217:366::-;48359:3;48380:67;48444:2;48439:3;48380:67;:::i;:::-;48373:74;;48456:93;48545:3;48456:93;:::i;:::-;48574:2;48569:3;48565:12;48558:19;;48217:366;;;:::o;48589:419::-;48755:4;48793:2;48782:9;48778:18;48770:26;;48842:9;48836:4;48832:20;48828:1;48817:9;48813:17;48806:47;48870:131;48996:4;48870:131;:::i;:::-;48862:139;;48589:419;;;:::o;49014:223::-;49154:34;49150:1;49142:6;49138:14;49131:58;49223:6;49218:2;49210:6;49206:15;49199:31;49014:223;:::o;49243:366::-;49385:3;49406:67;49470:2;49465:3;49406:67;:::i;:::-;49399:74;;49482:93;49571:3;49482:93;:::i;:::-;49600:2;49595:3;49591:12;49584:19;;49243:366;;;:::o;49615:419::-;49781:4;49819:2;49808:9;49804:18;49796:26;;49868:9;49862:4;49858:20;49854:1;49843:9;49839:17;49832:47;49896:131;50022:4;49896:131;:::i;:::-;49888:139;;49615:419;;;:::o;50040:191::-;50080:4;50100:20;50118:1;50100:20;:::i;:::-;50095:25;;50134:20;50152:1;50134:20;:::i;:::-;50129:25;;50173:1;50170;50167:8;50164:34;;;50178:18;;:::i;:::-;50164:34;50223:1;50220;50216:9;50208:17;;50040:191;;;;:::o;50237:182::-;50377:34;50373:1;50365:6;50361:14;50354:58;50237:182;:::o;50425:366::-;50567:3;50588:67;50652:2;50647:3;50588:67;:::i;:::-;50581:74;;50664:93;50753:3;50664:93;:::i;:::-;50782:2;50777:3;50773:12;50766:19;;50425:366;;;:::o;50797:419::-;50963:4;51001:2;50990:9;50986:18;50978:26;;51050:9;51044:4;51040:20;51036:1;51025:9;51021:17;51014:47;51078:131;51204:4;51078:131;:::i;:::-;51070:139;;50797:419;;;:::o;51222:178::-;51362:30;51358:1;51350:6;51346:14;51339:54;51222:178;:::o;51406:366::-;51548:3;51569:67;51633:2;51628:3;51569:67;:::i;:::-;51562:74;;51645:93;51734:3;51645:93;:::i;:::-;51763:2;51758:3;51754:12;51747:19;;51406:366;;;:::o;51778:419::-;51944:4;51982:2;51971:9;51967:18;51959:26;;52031:9;52025:4;52021:20;52017:1;52006:9;52002:17;51995:47;52059:131;52185:4;52059:131;:::i;:::-;52051:139;;51778:419;;;:::o;52203:175::-;52343:27;52339:1;52331:6;52327:14;52320:51;52203:175;:::o;52384:366::-;52526:3;52547:67;52611:2;52606:3;52547:67;:::i;:::-;52540:74;;52623:93;52712:3;52623:93;:::i;:::-;52741:2;52736:3;52732:12;52725:19;;52384:366;;;:::o;52756:419::-;52922:4;52960:2;52949:9;52945:18;52937:26;;53009:9;53003:4;52999:20;52995:1;52984:9;52980:17;52973:47;53037:131;53163:4;53037:131;:::i;:::-;53029:139;;52756:419;;;:::o;53181:237::-;53321:34;53317:1;53309:6;53305:14;53298:58;53390:20;53385:2;53377:6;53373:15;53366:45;53181:237;:::o;53424:366::-;53566:3;53587:67;53651:2;53646:3;53587:67;:::i;:::-;53580:74;;53663:93;53752:3;53663:93;:::i;:::-;53781:2;53776:3;53772:12;53765:19;;53424:366;;;:::o;53796:419::-;53962:4;54000:2;53989:9;53985:18;53977:26;;54049:9;54043:4;54039:20;54035:1;54024:9;54020:17;54013:47;54077:131;54203:4;54077:131;:::i;:::-;54069:139;;53796:419;;;:::o;54221:236::-;54361:34;54357:1;54349:6;54345:14;54338:58;54430:19;54425:2;54417:6;54413:15;54406:44;54221:236;:::o;54463:366::-;54605:3;54626:67;54690:2;54685:3;54626:67;:::i;:::-;54619:74;;54702:93;54791:3;54702:93;:::i;:::-;54820:2;54815:3;54811:12;54804:19;;54463:366;;;:::o;54835:419::-;55001:4;55039:2;55028:9;55024:18;55016:26;;55088:9;55082:4;55078:20;55074:1;55063:9;55059:17;55052:47;55116:131;55242:4;55116:131;:::i;:::-;55108:139;;54835:419;;;:::o;55260:435::-;55440:3;55462:95;55553:3;55544:6;55462:95;:::i;:::-;55455:102;;55574:95;55665:3;55656:6;55574:95;:::i;:::-;55567:102;;55686:3;55679:10;;55260:435;;;;;:::o;55701:159::-;55841:11;55837:1;55829:6;55825:14;55818:35;55701:159;:::o;55866:365::-;56008:3;56029:66;56093:1;56088:3;56029:66;:::i;:::-;56022:73;;56104:93;56193:3;56104:93;:::i;:::-;56222:2;56217:3;56213:12;56206:19;;55866:365;;;:::o;56237:419::-;56403:4;56441:2;56430:9;56426:18;56418:26;;56490:9;56484:4;56480:20;56476:1;56465:9;56461:17;56454:47;56518:131;56644:4;56518:131;:::i;:::-;56510:139;;56237:419;;;:::o;56662:180::-;56710:77;56707:1;56700:88;56807:4;56804:1;56797:15;56831:4;56828:1;56821:15;56848:98;56899:6;56933:5;56927:12;56917:22;;56848:98;;;:::o;56952:168::-;57035:11;57069:6;57064:3;57057:19;57109:4;57104:3;57100:14;57085:29;;56952:168;;;;:::o;57126:360::-;57212:3;57240:38;57272:5;57240:38;:::i;:::-;57294:70;57357:6;57352:3;57294:70;:::i;:::-;57287:77;;57373:52;57418:6;57413:3;57406:4;57399:5;57395:16;57373:52;:::i;:::-;57450:29;57472:6;57450:29;:::i;:::-;57445:3;57441:39;57434:46;;57216:270;57126:360;;;;:::o;57492:640::-;57687:4;57725:3;57714:9;57710:19;57702:27;;57739:71;57807:1;57796:9;57792:17;57783:6;57739:71;:::i;:::-;57820:72;57888:2;57877:9;57873:18;57864:6;57820:72;:::i;:::-;57902;57970:2;57959:9;57955:18;57946:6;57902:72;:::i;:::-;58021:9;58015:4;58011:20;58006:2;57995:9;57991:18;57984:48;58049:76;58120:4;58111:6;58049:76;:::i;:::-;58041:84;;57492:640;;;;;;;:::o;58138:141::-;58194:5;58225:6;58219:13;58210:22;;58241:32;58267:5;58241:32;:::i;:::-;58138:141;;;;:::o;58285:349::-;58354:6;58403:2;58391:9;58382:7;58378:23;58374:32;58371:119;;;58409:79;;:::i;:::-;58371:119;58529:1;58554:63;58609:7;58600:6;58589:9;58585:22;58554:63;:::i;:::-;58544:73;;58500:127;58285:349;;;;:::o;58640:234::-;58780:34;58776:1;58768:6;58764:14;58757:58;58849:17;58844:2;58836:6;58832:15;58825:42;58640:234;:::o;58880:366::-;59022:3;59043:67;59107:2;59102:3;59043:67;:::i;:::-;59036:74;;59119:93;59208:3;59119:93;:::i;:::-;59237:2;59232:3;59228:12;59221:19;;58880:366;;;:::o;59252:419::-;59418:4;59456:2;59445:9;59441:18;59433:26;;59505:9;59499:4;59495:20;59491:1;59480:9;59476:17;59469:47;59533:131;59659:4;59533:131;:::i;:::-;59525:139;;59252:419;;;:::o;59677:180::-;59725:77;59722:1;59715:88;59822:4;59819:1;59812:15;59846:4;59843:1;59836:15;59863:185;59903:1;59920:20;59938:1;59920:20;:::i;:::-;59915:25;;59954:20;59972:1;59954:20;:::i;:::-;59949:25;;59993:1;59983:35;;59998:18;;:::i;:::-;59983:35;60040:1;60037;60033:9;60028:14;;59863:185;;;;:::o;60054:176::-;60086:1;60103:20;60121:1;60103:20;:::i;:::-;60098:25;;60137:20;60155:1;60137:20;:::i;:::-;60132:25;;60176:1;60166:35;;60181:18;;:::i;:::-;60166:35;60222:1;60219;60215:9;60210:14;;60054:176;;;;:::o

Swarm Source

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