ETH Price: $2,391.44 (-3.48%)

Token

Wulf of Metaverse (WOM)
 

Overview

Max Total Supply

349 WOM

Holders

216

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 WOM
0x97cDAe3b4546984dc1acB14C638504F52ebB68db
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
nft

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-12
*/

// SPDX-License-Identifier: GPL-3.0
// File: @openzeppelin/contracts/utils/Strings.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/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: contracts/creepies.sol



pragma solidity >=0.8.2;
// to enable certain compiler features

//import '@openzeppelin/contracts/token/ERC721/ERC721.sol';









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;
    
    //Mapping para atribuirle un URI para cada token
    mapping(uint256 => string) internal id_to_URI;

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public 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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //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 || getApproved(tokenId) == spender || isApprovedForAll(owner, 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);
    }

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

    /**
     * @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 of token that is not own");
        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);
    }

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

contract nft is ERC721, Ownable {
    using Strings for uint256;

    //amount of tokens that have been minted so far, in total and in presale
    uint256 private numberOfTotalTokens;
    
    //declares the maximum amount of tokens that can be minted, total and in presale
    uint256 private maxTotalTokens;
    uint256 private maxTokensPresale;
    
    //initial part of the URI for the metadata
    string private _currentBaseURI;
        
    //cost of mints depending on state of sale    
    uint private constant mintCostPresale = 0.04 ether;
    uint private constant mintCostPublicSale = 0.075 ether;
    
    //maximum amount of mints allowed per person
    uint256 public constant maxMint = 10;
    
    //the amount of reserved mints that have currently been executed by creator and giveaways
    uint private _reservedMintsTeam = 0;
    uint private _reservedMintsGiveaway = 0;
    
    //the maximum amount of reserved mints allowed for creator and giveaways
    uint private maxReservedMintsTeam = 150;
    uint private maxReservedMintsGiveaway = 150;
    
    //addresses of the different shareholders and owners
    address payable public owner1 = payable(0xD9680987984FaA660f1e45Cd2b6c167df814FED0);
    address payable public owner2 = payable(0x7BDe54C7d6dfB0bCa9b33F6b199AB0ce74426db8);
    address payable public owner3 = payable(0x1A5B79d0Ac61D2bFC8Dc1D1366F6340B01DC3394);
    address payable public dev = payable(0x318cBF186eB13C74533943b054959867eE44eFFE);
    
    //dummy address that we use to sign the mint transaction to make sure it is valid
    address private dummy = 0x80E4929c869102140E69550BBECC20bEd61B080c;
    
    //marks the timestamp of when the respective sales open
    uint256 internal revealTime;

    //amount of mints that each address has executed
    mapping(address => uint256) public mintsPerAddress;
    
    //current state os sale
    enum State {NoSale, Presale, PublicSale}

    //defines the uri for when the NFTs have not been yet revealed
    string public unrevealedURI;
    
    //declaring initial values for variables
    constructor() ERC721('Wulf of Metaverse', 'WOM') {
        numberOfTotalTokens = 0;
        
        //limit to total amount of nfts sold
        maxTotalTokens = 7500;

        //limit of tokens to be sold in presale
        maxTokensPresale = 1500;

        unrevealedURI = "ipfs://QmPjn2aTPBEayzFnXnqrHfk9dr5rbWbzkiDQdf8sbfmkoc/";
    }
    
    //in case somebody accidentaly sends funds or transaction to contract
    receive() payable external {}
    fallback() payable external {
        revert();
    }
    
    //visualize baseURI
    function _baseURI() internal view virtual override returns (string memory) {
        return _currentBaseURI;
    }
    
    //change baseURI in case needed for IPFS
    function changeBaseURI(string memory baseURI_) public onlyOwner {
        _currentBaseURI = baseURI_;
    }

    function changeUnrevealedURI(string memory unrevealedURI_) public onlyOwner {
        unrevealedURI = unrevealedURI_;
    }
    
    //gets the tokenID of NFT to be minted
    function tokenId() internal view returns(uint256) {
        uint currentId = totalSupply();
        bool exists = true;
        while (exists) {
            currentId += 1;
            exists = _exists(currentId);
        }
        
        return currentId;
    }

    //open presale
    function openSale() public onlyOwner {
        require(saleState() == State.NoSale, 'Sale is already Open!');
        revealTime = block.timestamp + 259200;
    }

    //mint a @param number of NFTs in public sale
    function mint(uint256 number) public payable {
        State saleState_ = saleState();
        require(saleState_ != State.NoSale, "Sale in not open yet!");
        require(numberOfTotalTokens + number <= maxTotalTokens - (maxReservedMintsTeam + maxReservedMintsGiveaway - _reservedMintsTeam - _reservedMintsGiveaway), "Not enough NFTs left to mint..");
        require(mintsPerAddress[msg.sender] + number <= maxMint, "Maximum 10 Mints per Address allowed!");
        require(msg.value >= mintCost() * number, "Not sufficient Ether to mint this amount of NFTs");


        for (uint256 i = 0; i < number; i++) {
            uint256 tid = tokenId();
            _safeMint(msg.sender, tid);
            mintsPerAddress[msg.sender] += 1;
            numberOfTotalTokens += 1;
        }
    }
    
    function tokenURI(uint256 tokenId_) public view virtual override returns (string memory) {
        require(_exists(tokenId_), "ERC721Metadata: URI query for nonexistent token");
        
        //check to see that 24 hours have passed since beginning of publicsale launch
        if (revealTime == 0 || block.timestamp < revealTime) {
            return unrevealedURI;
        }
        
        else {
            string memory baseURI = _baseURI();
            return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId_.toString(), '.json')) : "";
        }    
    }
    
    //reserved NFTs for creator
    function reservedMintTeam(uint number, address recipient) public onlyOwner {
        require(_reservedMintsTeam + number <= maxReservedMintsTeam, "Not enough Reserved NFTs left to mint..");

        for (uint i = 0; i < number; i++) {
            _safeMint(recipient, tokenId());
            mintsPerAddress[recipient] += 1;
            numberOfTotalTokens += 1;
            _reservedMintsTeam += 1;
        }    
        
    }
    
    //reserved NFTs for creator
    function reservedMintGiveaway(uint number, address recipient) public onlyOwner {
        require(_reservedMintsGiveaway + number <= maxReservedMintsGiveaway, "Not enough Reserved NFTs left to mint..");

        for (uint i = 0; i < number; i++) {
            _safeMint(recipient, tokenId());
            mintsPerAddress[recipient] += 1;
            numberOfTotalTokens += 1;
            _reservedMintsGiveaway += 1;
        }    
        
    }

    //burn the tokens that have not been sold yet
    function burnTokens() public onlyOwner {
        maxTotalTokens = numberOfTotalTokens;
    }
    
    //se the current account balance
    function accountBalance() public onlyOwner view returns(uint) {
        return address(this).balance;
    }
    
    //retrieve all funds recieved from minting
    function withdraw() public onlyOwner {
        uint256 balance = accountBalance();
        require(balance > 0, 'No Funds to withdraw, Balance is 0');
        
        _withdraw(owner3, (balance * 2375) / 10000);
        _withdraw(owner2, (balance * 2375) / 10000);
        _withdraw(owner1, (balance * 475) / 1000);
        _withdraw(dev, accountBalance()); //to avoid dust eth, gets a little more than 5%
    }
    
    //send the percentage of funds to a shareholder´s wallet
    function _withdraw(address payable account, uint256 amount) internal {
        (bool sent, ) = account.call{value: amount}("");
        require(sent, "Failed to send Ether");
    }
    
    //change the dummy account used for signing transactions
    function changeDummy(address _dummy) public onlyOwner {
        dummy = _dummy;
    }
    
    //see the total amount of tokens that have been minted
    function totalSupply() public view returns(uint) {
        return numberOfTotalTokens;
    }
    
    //to see the total amount of reserved mints left 
    function reservedMintsLeftTeam() public onlyOwner view returns(uint) {
        return maxReservedMintsTeam - _reservedMintsTeam;
    }

    //to see the total amount of reserved mints left 
    function reservedMintsLeftGiveaway() public onlyOwner view returns(uint) {
        return maxReservedMintsGiveaway - _reservedMintsGiveaway;
    }

    //see amount of tokens that are left to mint in presale
    function tokensLeftsInPresale() public view returns(uint) {
        State saleState_ = saleState();
        if (saleState_ == State.Presale || saleState_ == State.NoSale) {
            return maxTokensPresale - numberOfTotalTokens;
        }
        else {
            return 0;
        }
    }
    
    //see current state of sale
    //see the current state of the sale
    function saleState() public view returns(State){
        
        if (revealTime == 0) {
            return State.NoSale;
        }
        else if (numberOfTotalTokens < 1500) {
            return State.Presale;
        }
        else {
            return State.PublicSale;
        }
    }
    
    //gets the cost of current mint
    function mintCost() public view returns(uint) {
        State saleState_ = saleState();
        if (saleState_ == State.NoSale || saleState_ == State.Presale) {
            return mintCostPresale;
        }
        else {
            return mintCostPublicSale;
        }
    }

    //see when NFTs will be revealed
    function timeOfReveal() public view returns(uint256) {
        require(revealTime != 0, 'NFT Reveal Time has not been determined yet!');
        return revealTime;
    }
    
   
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"accountBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dummy","type":"address"}],"name":"changeDummy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"unrevealedURI_","type":"string"}],"name":"changeUnrevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner1","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner2","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner3","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"reservedMintGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"reservedMintTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedMintsLeftGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reservedMintsLeftTeam","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":"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":[],"name":"saleState","outputs":[{"internalType":"enum nft.State","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeOfReveal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensLeftsInPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unrevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600c556000600d556096600e556096600f5573d9680987984faa660f1e45cd2b6c167df814fed0601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737bde54c7d6dfb0bca9b33f6b199ab0ce74426db8601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731a5b79d0ac61d2bfc8dc1d1366f6340b01dc3394601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073318cbf186eb13c74533943b054959867ee44effe601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507380e4929c869102140e69550bbecc20bed61b080c601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001ce57600080fd5b506040518060400160405280601181526020017f57756c66206f66204d65746176657273650000000000000000000000000000008152506040518060400160405280600381526020017f574f4d0000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000253929190620003af565b5080600190805190602001906200026c929190620003af565b5050506200028f62000283620002e160201b60201c565b620002e960201b60201c565b6000600881905550611d4c6009819055506105dc600a8190555060405180606001604052806036815260200162004f246036913960179080519060200190620002da929190620003af565b50620004c4565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003bd906200045f565b90600052602060002090601f016020900481019282620003e157600085556200042d565b82601f10620003fc57805160ff19168380011785556200042d565b828001600101855582156200042d579182015b828111156200042c5782518255916020019190600101906200040f565b5b5090506200043c919062000440565b5090565b5b808211156200045b57600081600090555060010162000441565b5090565b600060028204905060018216806200047857607f821691505b602082108114156200048f576200048e62000495565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614a5080620004d46000396000f3fe60806040526004361061023f5760003560e01c8063715018a61161012e578063b0a1c1c4116100ab578063c87b56dd1161006f578063c87b56dd14610815578063e985e9c514610852578063ec6b353d1461088f578063f2fde38b146108ba578063fccde3e5146108e357610246565b8063b0a1c1c414610742578063b6f36dcf1461076d578063b88d4fde14610798578063bdb4b848146107c1578063c4d8b9df146107ec57610246565b806391cca3db116100f257806391cca3db1461067c57806395d89b41146106a7578063a0712d68146106d2578063a22cb465146106ee578063aa7a911f1461071757610246565b8063715018a6146105b957806373688914146105d05780637501f741146105fb5780637c76f698146106265780638da5cb5b1461065157610246565b80632b0fde68116101bc578063527097251161018057806352709725146104be578063603f4d52146104e95780636352211e146105145780637035bf181461055157806370a082311461057c57610246565b80632b0fde68146103ef5780633023eba61461041857806339a0c6f9146104555780633ccfd60b1461047e57806342842e0e1461049557610246565b8063081812fc11610203578063081812fc1461031e578063095ea7b31461035b578063167ff46f1461038457806318160ddd1461039b57806323b872dd146103c657610246565b80630191a6571461024b57806301ffc9a7146102745780630256547e146102b157806306fdde03146102dc57806308003f781461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613239565b61090c565b005b34801561028057600080fd5b5061029b600480360381019061029691906133fc565b6109cc565b6040516102a89190613a71565b60405180910390f35b3480156102bd57600080fd5b506102c6610aae565b6040516102d39190613de9565b60405180910390f35b3480156102e857600080fd5b506102f1610b41565b6040516102fe9190613aa7565b60405180910390f35b34801561031357600080fd5b5061031c610bd3565b005b34801561032a57600080fd5b506103456004803603810190610340919061349f565b610c5a565b60405161035291906139ef565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d91906133bc565b610cdf565b005b34801561039057600080fd5b50610399610df7565b005b3480156103a757600080fd5b506103b0610ef8565b6040516103bd9190613de9565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e891906132a6565b610f02565b005b3480156103fb57600080fd5b50610416600480360381019061041191906134cc565b610f62565b005b34801561042457600080fd5b5061043f600480360381019061043a9190613239565b6110ef565b60405161044c9190613de9565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613456565b611107565b005b34801561048a57600080fd5b5061049361119d565b005b3480156104a157600080fd5b506104bc60048036038101906104b791906132a6565b611370565b005b3480156104ca57600080fd5b506104d3611390565b6040516104e09190613a0a565b60405180910390f35b3480156104f557600080fd5b506104fe6113b6565b60405161050b9190613a8c565b60405180910390f35b34801561052057600080fd5b5061053b6004803603810190610536919061349f565b6113e8565b60405161054891906139ef565b60405180910390f35b34801561055d57600080fd5b5061056661149a565b6040516105739190613aa7565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190613239565b611528565b6040516105b09190613de9565b60405180910390f35b3480156105c557600080fd5b506105ce6115e0565b005b3480156105dc57600080fd5b506105e5611668565b6040516105f29190613a0a565b60405180910390f35b34801561060757600080fd5b5061061061168e565b60405161061d9190613de9565b60405180910390f35b34801561063257600080fd5b5061063b611693565b6040516106489190613de9565b60405180910390f35b34801561065d57600080fd5b506106666116e2565b60405161067391906139ef565b60405180910390f35b34801561068857600080fd5b5061069161170c565b60405161069e9190613a0a565b60405180910390f35b3480156106b357600080fd5b506106bc611732565b6040516106c99190613aa7565b60405180910390f35b6106ec60048036038101906106e7919061349f565b6117c4565b005b3480156106fa57600080fd5b506107156004803603810190610710919061337c565b611a4c565b005b34801561072357600080fd5b5061072c611bcd565b6040516107399190613de9565b60405180910390f35b34801561074e57600080fd5b50610757611c60565b6040516107649190613de9565b60405180910390f35b34801561077957600080fd5b50610782611ce4565b60405161078f9190613a0a565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba91906132f9565b611d0a565b005b3480156107cd57600080fd5b506107d6611d6c565b6040516107e39190613de9565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190613456565b611df5565b005b34801561082157600080fd5b5061083c6004803603810190610837919061349f565b611e8b565b6040516108499190613aa7565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190613266565b611fdc565b6040516108869190613a71565b60405180910390f35b34801561089b57600080fd5b506108a4612070565b6040516108b19190613de9565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190613239565b6120fa565b005b3480156108ef57600080fd5b5061090a600480360381019061090591906134cc565b6121f2565b005b61091461237f565b73ffffffffffffffffffffffffffffffffffffffff166109326116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613cc9565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa75750610aa682612387565b5b9050919050565b6000610ab861237f565b73ffffffffffffffffffffffffffffffffffffffff16610ad66116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390613cc9565b60405180910390fd5b600d54600f54610b3c9190613fba565b905090565b606060008054610b50906140db565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7c906140db565b8015610bc95780601f10610b9e57610100808354040283529160200191610bc9565b820191906000526020600020905b815481529060010190602001808311610bac57829003601f168201915b5050505050905090565b610bdb61237f565b73ffffffffffffffffffffffffffffffffffffffff16610bf96116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613cc9565b60405180910390fd5b600854600981905550565b6000610c65826123f1565b610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90613ca9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cea826113e8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290613d49565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d7a61237f565b73ffffffffffffffffffffffffffffffffffffffff161480610da95750610da881610da361237f565b611fdc565b5b610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90613be9565b60405180910390fd5b610df2838361245d565b505050565b610dff61237f565b73ffffffffffffffffffffffffffffffffffffffff16610e1d6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90613cc9565b60405180910390fd5b60006002811115610e8757610e86614216565b5b610e8f6113b6565b6002811115610ea157610ea0614216565b5b14610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613bc9565b60405180910390fd5b6203f48042610ef09190613ed9565b601581905550565b6000600854905090565b610f13610f0d61237f565b82612516565b610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613d69565b60405180910390fd5b610f5d8383836125f4565b505050565b610f6a61237f565b73ffffffffffffffffffffffffffffffffffffffff16610f886116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590613cc9565b60405180910390fd5b600f5482600d54610fef9190613ed9565b1115611030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102790613c49565b60405180910390fd5b60005b828110156110ea5761104c82611047612850565b612891565b6001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109c9190613ed9565b925050819055506001600860008282546110b69190613ed9565b925050819055506001600d60008282546110d09190613ed9565b9250508190555080806110e29061413e565b915050611033565b505050565b60166020528060005260406000206000915090505481565b61110f61237f565b73ffffffffffffffffffffffffffffffffffffffff1661112d6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90613cc9565b60405180910390fd5b80600b908051906020019061119992919061304d565b5050565b6111a561237f565b73ffffffffffffffffffffffffffffffffffffffff166111c36116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613cc9565b60405180910390fd5b6000611223611c60565b905060008111611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90613dc9565b60405180910390fd5b6112ae601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166127106109478461129f9190613f60565b6112a99190613f2f565b6128af565b6112f4601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710610947846112e59190613f60565b6112ef9190613f2f565b6128af565b61133a601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e86101db8461132b9190613f60565b6113359190613f2f565b6128af565b61136d601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611368611c60565b6128af565b50565b61138b83838360405180602001604052806000815250611d0a565b505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060155414156113cb57600090506113e5565b6105dc60085410156113e057600190506113e5565b600290505b90565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613c29565b60405180910390fd5b80915050919050565b601780546114a7906140db565b80601f01602080910402602001604051908101604052809291908181526020018280546114d3906140db565b80156115205780601f106114f557610100808354040283529160200191611520565b820191906000526020600020905b81548152906001019060200180831161150357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613c09565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e861237f565b73ffffffffffffffffffffffffffffffffffffffff166116066116e2565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613cc9565b60405180910390fd5b6116666000612960565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a81565b60008060155414156116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190613d29565b60405180910390fd5b601554905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611741906140db565b80601f016020809104026020016040519081016040528092919081815260200182805461176d906140db565b80156117ba5780601f1061178f576101008083540402835291602001916117ba565b820191906000526020600020905b81548152906001019060200180831161179d57829003601f168201915b5050505050905090565b60006117ce6113b6565b9050600060028111156117e4576117e3614216565b5b8160028111156117f7576117f6614216565b5b1415611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90613da9565b60405180910390fd5b600d54600c54600f54600e5461184e9190613ed9565b6118589190613fba565b6118629190613fba565b60095461186f9190613fba565b8260085461187d9190613ed9565b11156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590613b89565b60405180910390fd5b600a82601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461190b9190613ed9565b111561194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613d89565b60405180910390fd5b81611955611d6c565b61195f9190613f60565b3410156119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613c89565b60405180910390fd5b60005b82811015611a475760006119b6612850565b90506119c23382612891565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a129190613ed9565b92505081905550600160086000828254611a2c9190613ed9565b92505081905550508080611a3f9061413e565b9150506119a4565b505050565b611a5461237f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990613b69565b60405180910390fd5b8060056000611acf61237f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b7c61237f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc19190613a71565b60405180910390a35050565b6000611bd761237f565b73ffffffffffffffffffffffffffffffffffffffff16611bf56116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290613cc9565b60405180910390fd5b600c54600e54611c5b9190613fba565b905090565b6000611c6a61237f565b73ffffffffffffffffffffffffffffffffffffffff16611c886116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590613cc9565b60405180910390fd5b47905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d1b611d1561237f565b83612516565b611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613d69565b60405180910390fd5b611d6684848484612a26565b50505050565b600080611d776113b6565b905060006002811115611d8d57611d8c614216565b5b816002811115611da057611d9f614216565b5b1480611dd0575060016002811115611dbb57611dba614216565b5b816002811115611dce57611dcd614216565b5b145b15611de557668e1bc9bf040000915050611df2565b67010a741a462780009150505b90565b611dfd61237f565b73ffffffffffffffffffffffffffffffffffffffff16611e1b6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890613cc9565b60405180910390fd5b8060179080519060200190611e8792919061304d565b5050565b6060611e96826123f1565b611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613d09565b60405180910390fd5b60006015541480611ee7575060155442105b15611f7e5760178054611ef9906140db565b80601f0160208091040260200160405190810160405280929190818152602001828054611f25906140db565b8015611f725780601f10611f4757610100808354040283529160200191611f72565b820191906000526020600020905b815481529060010190602001808311611f5557829003601f168201915b50505050509050611fd7565b6000611f88612a82565b90506000815111611fa85760405180602001604052806000815250611fd3565b80611fb284612b14565b604051602001611fc39291906139ab565b6040516020818303038152906040525b9150505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008061207b6113b6565b90506001600281111561209157612090614216565b5b8160028111156120a4576120a3614216565b5b14806120d45750600060028111156120bf576120be614216565b5b8160028111156120d2576120d1614216565b5b145b156120f157600854600a546120e99190613fba565b9150506120f7565b60009150505b90565b61210261237f565b73ffffffffffffffffffffffffffffffffffffffff166121206116e2565b73ffffffffffffffffffffffffffffffffffffffff1614612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90613cc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90613ae9565b60405180910390fd5b6121ef81612960565b50565b6121fa61237f565b73ffffffffffffffffffffffffffffffffffffffff166122186116e2565b73ffffffffffffffffffffffffffffffffffffffff161461226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590613cc9565b60405180910390fd5b600e5482600c5461227f9190613ed9565b11156122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790613c49565b60405180910390fd5b60005b8281101561237a576122dc826122d7612850565b612891565b6001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232c9190613ed9565b925050819055506001600860008282546123469190613ed9565b925050819055506001600c60008282546123609190613ed9565b9250508190555080806123729061413e565b9150506122c3565b505050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124d0836113e8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612521826123f1565b612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790613ba9565b60405180910390fd5b600061256b836113e8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125da57508373ffffffffffffffffffffffffffffffffffffffff166125c284610c5a565b73ffffffffffffffffffffffffffffffffffffffff16145b806125eb57506125ea8185611fdc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612614826113e8565b73ffffffffffffffffffffffffffffffffffffffff161461266a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266190613ce9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d190613b49565b60405180910390fd5b6126e5838383612c75565b6126f060008261245d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127409190613fba565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127979190613ed9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008061285b610ef8565b90506000600190505b8015612889576001826128779190613ed9565b9150612882826123f1565b9050612864565b819250505090565b6128ab828260405180602001604052806000815250612c7a565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516128d5906139da565b60006040518083038185875af1925050503d8060008114612912576040519150601f19603f3d011682016040523d82523d6000602084013e612917565b606091505b505090508061295b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295290613b29565b60405180910390fd5b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a318484846125f4565b612a3d84848484612cd5565b612a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7390613ac9565b60405180910390fd5b50505050565b6060600b8054612a91906140db565b80601f0160208091040260200160405190810160405280929190818152602001828054612abd906140db565b8015612b0a5780601f10612adf57610100808354040283529160200191612b0a565b820191906000526020600020905b815481529060010190602001808311612aed57829003601f168201915b5050505050905090565b60606000821415612b5c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c70565b600082905060005b60008214612b8e578080612b779061413e565b915050600a82612b879190613f2f565b9150612b64565b60008167ffffffffffffffff811115612baa57612ba96142a3565b5b6040519080825280601f01601f191660200182016040528015612bdc5781602001600182028036833780820191505090505b5090505b60008514612c6957600182612bf59190613fba565b9150600a85612c049190614187565b6030612c109190613ed9565b60f81b818381518110612c2657612c25614274565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c629190613f2f565b9450612be0565b8093505050505b919050565b505050565b612c848383612e6c565b612c916000848484612cd5565b612cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc790613ac9565b60405180910390fd5b505050565b6000612cf68473ffffffffffffffffffffffffffffffffffffffff1661303a565b15612e5f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d1f61237f565b8786866040518563ffffffff1660e01b8152600401612d419493929190613a25565b602060405180830381600087803b158015612d5b57600080fd5b505af1925050508015612d8c57506040513d601f19601f82011682018060405250810190612d899190613429565b60015b612e0f573d8060008114612dbc576040519150601f19603f3d011682016040523d82523d6000602084013e612dc1565b606091505b50600081511415612e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfe90613ac9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e64565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed390613c69565b60405180910390fd5b612ee5816123f1565b15612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c90613b09565b60405180910390fd5b612f3160008383612c75565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f819190613ed9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613059906140db565b90600052602060002090601f01602090048101928261307b57600085556130c2565b82601f1061309457805160ff19168380011785556130c2565b828001600101855582156130c2579182015b828111156130c15782518255916020019190600101906130a6565b5b5090506130cf91906130d3565b5090565b5b808211156130ec5760008160009055506001016130d4565b5090565b60006131036130fe84613e29565b613e04565b90508281526020810184848401111561311f5761311e6142d7565b5b61312a848285614099565b509392505050565b600061314561314084613e5a565b613e04565b905082815260208101848484011115613161576131606142d7565b5b61316c848285614099565b509392505050565b600081359050613183816149be565b92915050565b600081359050613198816149d5565b92915050565b6000813590506131ad816149ec565b92915050565b6000815190506131c2816149ec565b92915050565b600082601f8301126131dd576131dc6142d2565b5b81356131ed8482602086016130f0565b91505092915050565b600082601f83011261320b5761320a6142d2565b5b813561321b848260208601613132565b91505092915050565b60008135905061323381614a03565b92915050565b60006020828403121561324f5761324e6142e1565b5b600061325d84828501613174565b91505092915050565b6000806040838503121561327d5761327c6142e1565b5b600061328b85828601613174565b925050602061329c85828601613174565b9150509250929050565b6000806000606084860312156132bf576132be6142e1565b5b60006132cd86828701613174565b93505060206132de86828701613174565b92505060406132ef86828701613224565b9150509250925092565b60008060008060808587031215613313576133126142e1565b5b600061332187828801613174565b945050602061333287828801613174565b935050604061334387828801613224565b925050606085013567ffffffffffffffff811115613364576133636142dc565b5b613370878288016131c8565b91505092959194509250565b60008060408385031215613393576133926142e1565b5b60006133a185828601613174565b92505060206133b285828601613189565b9150509250929050565b600080604083850312156133d3576133d26142e1565b5b60006133e185828601613174565b92505060206133f285828601613224565b9150509250929050565b600060208284031215613412576134116142e1565b5b60006134208482850161319e565b91505092915050565b60006020828403121561343f5761343e6142e1565b5b600061344d848285016131b3565b91505092915050565b60006020828403121561346c5761346b6142e1565b5b600082013567ffffffffffffffff81111561348a576134896142dc565b5b613496848285016131f6565b91505092915050565b6000602082840312156134b5576134b46142e1565b5b60006134c384828501613224565b91505092915050565b600080604083850312156134e3576134e26142e1565b5b60006134f185828601613224565b925050602061350285828601613174565b9150509250929050565b61351581614000565b82525050565b61352481613fee565b82525050565b61353381614012565b82525050565b600061354482613e8b565b61354e8185613ea1565b935061355e8185602086016140a8565b613567816142e6565b840191505092915050565b61357b81614087565b82525050565b600061358c82613e96565b6135968185613ebd565b93506135a68185602086016140a8565b6135af816142e6565b840191505092915050565b60006135c582613e96565b6135cf8185613ece565b93506135df8185602086016140a8565b80840191505092915050565b60006135f8603283613ebd565b9150613603826142f7565b604082019050919050565b600061361b602683613ebd565b915061362682614346565b604082019050919050565b600061363e601c83613ebd565b915061364982614395565b602082019050919050565b6000613661601483613ebd565b915061366c826143be565b602082019050919050565b6000613684602483613ebd565b915061368f826143e7565b604082019050919050565b60006136a7601983613ebd565b91506136b282614436565b602082019050919050565b60006136ca601e83613ebd565b91506136d58261445f565b602082019050919050565b60006136ed602c83613ebd565b91506136f882614488565b604082019050919050565b6000613710601583613ebd565b915061371b826144d7565b602082019050919050565b6000613733603883613ebd565b915061373e82614500565b604082019050919050565b6000613756602a83613ebd565b91506137618261454f565b604082019050919050565b6000613779602983613ebd565b91506137848261459e565b604082019050919050565b600061379c602783613ebd565b91506137a7826145ed565b604082019050919050565b60006137bf602083613ebd565b91506137ca8261463c565b602082019050919050565b60006137e2603083613ebd565b91506137ed82614665565b604082019050919050565b6000613805602c83613ebd565b9150613810826146b4565b604082019050919050565b6000613828600583613ece565b915061383382614703565b600582019050919050565b600061384b602083613ebd565b91506138568261472c565b602082019050919050565b600061386e602983613ebd565b915061387982614755565b604082019050919050565b6000613891602f83613ebd565b915061389c826147a4565b604082019050919050565b60006138b4602c83613ebd565b91506138bf826147f3565b604082019050919050565b60006138d7602183613ebd565b91506138e282614842565b604082019050919050565b60006138fa600083613eb2565b915061390582614891565b600082019050919050565b600061391d603183613ebd565b915061392882614894565b604082019050919050565b6000613940602583613ebd565b915061394b826148e3565b604082019050919050565b6000613963601583613ebd565b915061396e82614932565b602082019050919050565b6000613986602283613ebd565b91506139918261495b565b604082019050919050565b6139a58161407d565b82525050565b60006139b782856135ba565b91506139c382846135ba565b91506139ce8261381b565b91508190509392505050565b60006139e5826138ed565b9150819050919050565b6000602082019050613a04600083018461351b565b92915050565b6000602082019050613a1f600083018461350c565b92915050565b6000608082019050613a3a600083018761351b565b613a47602083018661351b565b613a54604083018561399c565b8181036060830152613a668184613539565b905095945050505050565b6000602082019050613a86600083018461352a565b92915050565b6000602082019050613aa16000830184613572565b92915050565b60006020820190508181036000830152613ac18184613581565b905092915050565b60006020820190508181036000830152613ae2816135eb565b9050919050565b60006020820190508181036000830152613b028161360e565b9050919050565b60006020820190508181036000830152613b2281613631565b9050919050565b60006020820190508181036000830152613b4281613654565b9050919050565b60006020820190508181036000830152613b6281613677565b9050919050565b60006020820190508181036000830152613b828161369a565b9050919050565b60006020820190508181036000830152613ba2816136bd565b9050919050565b60006020820190508181036000830152613bc2816136e0565b9050919050565b60006020820190508181036000830152613be281613703565b9050919050565b60006020820190508181036000830152613c0281613726565b9050919050565b60006020820190508181036000830152613c2281613749565b9050919050565b60006020820190508181036000830152613c428161376c565b9050919050565b60006020820190508181036000830152613c628161378f565b9050919050565b60006020820190508181036000830152613c82816137b2565b9050919050565b60006020820190508181036000830152613ca2816137d5565b9050919050565b60006020820190508181036000830152613cc2816137f8565b9050919050565b60006020820190508181036000830152613ce28161383e565b9050919050565b60006020820190508181036000830152613d0281613861565b9050919050565b60006020820190508181036000830152613d2281613884565b9050919050565b60006020820190508181036000830152613d42816138a7565b9050919050565b60006020820190508181036000830152613d62816138ca565b9050919050565b60006020820190508181036000830152613d8281613910565b9050919050565b60006020820190508181036000830152613da281613933565b9050919050565b60006020820190508181036000830152613dc281613956565b9050919050565b60006020820190508181036000830152613de281613979565b9050919050565b6000602082019050613dfe600083018461399c565b92915050565b6000613e0e613e1f565b9050613e1a828261410d565b919050565b6000604051905090565b600067ffffffffffffffff821115613e4457613e436142a3565b5b613e4d826142e6565b9050602081019050919050565b600067ffffffffffffffff821115613e7557613e746142a3565b5b613e7e826142e6565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ee48261407d565b9150613eef8361407d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f2457613f236141b8565b5b828201905092915050565b6000613f3a8261407d565b9150613f458361407d565b925082613f5557613f546141e7565b5b828204905092915050565b6000613f6b8261407d565b9150613f768361407d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613faf57613fae6141b8565b5b828202905092915050565b6000613fc58261407d565b9150613fd08361407d565b925082821015613fe357613fe26141b8565b5b828203905092915050565b6000613ff98261405d565b9050919050565b600061400b8261405d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614058826149aa565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006140928261404a565b9050919050565b82818337600083830152505050565b60005b838110156140c65780820151818401526020810190506140ab565b838111156140d5576000848401525b50505050565b600060028204905060018216806140f357607f821691505b6020821081141561410757614106614245565b5b50919050565b614116826142e6565b810181811067ffffffffffffffff82111715614135576141346142a3565b5b80604052505050565b60006141498261407d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561417c5761417b6141b8565b5b600182019050919050565b60006141928261407d565b915061419d8361407d565b9250826141ad576141ac6141e7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e742e2e0000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f53616c6520697320616c7265616479204f70656e210000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768205265736572766564204e465473206c65667420746f60008201527f206d696e742e2e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f742073756666696369656e7420457468657220746f206d696e742074686960008201527f7320616d6f756e74206f66204e46547300000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e46542052657665616c2054696d6520686173206e6f74206265656e2064657460008201527f65726d696e656420796574210000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d6178696d756d203130204d696e747320706572204164647265737320616c6c60008201527f6f77656421000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520696e206e6f74206f70656e20796574210000000000000000000000600082015250565b7f4e6f2046756e647320746f2077697468647261772c2042616c616e636520697360008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b600381106149bb576149ba614216565b5b50565b6149c781613fee565b81146149d257600080fd5b50565b6149de81614012565b81146149e957600080fd5b50565b6149f58161401e565b8114614a0057600080fd5b50565b614a0c8161407d565b8114614a1757600080fd5b5056fea264697066735822122057344cacf3633fc64ed3dbd6a2006add1c4d534daedb861104dcb96ad33883eb64736f6c63430008070033697066733a2f2f516d506a6e32615450424561797a466e586e717248666b39647235726257627a6b6944516466387362666d6b6f632f

Deployed Bytecode

0x60806040526004361061023f5760003560e01c8063715018a61161012e578063b0a1c1c4116100ab578063c87b56dd1161006f578063c87b56dd14610815578063e985e9c514610852578063ec6b353d1461088f578063f2fde38b146108ba578063fccde3e5146108e357610246565b8063b0a1c1c414610742578063b6f36dcf1461076d578063b88d4fde14610798578063bdb4b848146107c1578063c4d8b9df146107ec57610246565b806391cca3db116100f257806391cca3db1461067c57806395d89b41146106a7578063a0712d68146106d2578063a22cb465146106ee578063aa7a911f1461071757610246565b8063715018a6146105b957806373688914146105d05780637501f741146105fb5780637c76f698146106265780638da5cb5b1461065157610246565b80632b0fde68116101bc578063527097251161018057806352709725146104be578063603f4d52146104e95780636352211e146105145780637035bf181461055157806370a082311461057c57610246565b80632b0fde68146103ef5780633023eba61461041857806339a0c6f9146104555780633ccfd60b1461047e57806342842e0e1461049557610246565b8063081812fc11610203578063081812fc1461031e578063095ea7b31461035b578063167ff46f1461038457806318160ddd1461039b57806323b872dd146103c657610246565b80630191a6571461024b57806301ffc9a7146102745780630256547e146102b157806306fdde03146102dc57806308003f781461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613239565b61090c565b005b34801561028057600080fd5b5061029b600480360381019061029691906133fc565b6109cc565b6040516102a89190613a71565b60405180910390f35b3480156102bd57600080fd5b506102c6610aae565b6040516102d39190613de9565b60405180910390f35b3480156102e857600080fd5b506102f1610b41565b6040516102fe9190613aa7565b60405180910390f35b34801561031357600080fd5b5061031c610bd3565b005b34801561032a57600080fd5b506103456004803603810190610340919061349f565b610c5a565b60405161035291906139ef565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d91906133bc565b610cdf565b005b34801561039057600080fd5b50610399610df7565b005b3480156103a757600080fd5b506103b0610ef8565b6040516103bd9190613de9565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e891906132a6565b610f02565b005b3480156103fb57600080fd5b50610416600480360381019061041191906134cc565b610f62565b005b34801561042457600080fd5b5061043f600480360381019061043a9190613239565b6110ef565b60405161044c9190613de9565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613456565b611107565b005b34801561048a57600080fd5b5061049361119d565b005b3480156104a157600080fd5b506104bc60048036038101906104b791906132a6565b611370565b005b3480156104ca57600080fd5b506104d3611390565b6040516104e09190613a0a565b60405180910390f35b3480156104f557600080fd5b506104fe6113b6565b60405161050b9190613a8c565b60405180910390f35b34801561052057600080fd5b5061053b6004803603810190610536919061349f565b6113e8565b60405161054891906139ef565b60405180910390f35b34801561055d57600080fd5b5061056661149a565b6040516105739190613aa7565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190613239565b611528565b6040516105b09190613de9565b60405180910390f35b3480156105c557600080fd5b506105ce6115e0565b005b3480156105dc57600080fd5b506105e5611668565b6040516105f29190613a0a565b60405180910390f35b34801561060757600080fd5b5061061061168e565b60405161061d9190613de9565b60405180910390f35b34801561063257600080fd5b5061063b611693565b6040516106489190613de9565b60405180910390f35b34801561065d57600080fd5b506106666116e2565b60405161067391906139ef565b60405180910390f35b34801561068857600080fd5b5061069161170c565b60405161069e9190613a0a565b60405180910390f35b3480156106b357600080fd5b506106bc611732565b6040516106c99190613aa7565b60405180910390f35b6106ec60048036038101906106e7919061349f565b6117c4565b005b3480156106fa57600080fd5b506107156004803603810190610710919061337c565b611a4c565b005b34801561072357600080fd5b5061072c611bcd565b6040516107399190613de9565b60405180910390f35b34801561074e57600080fd5b50610757611c60565b6040516107649190613de9565b60405180910390f35b34801561077957600080fd5b50610782611ce4565b60405161078f9190613a0a565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba91906132f9565b611d0a565b005b3480156107cd57600080fd5b506107d6611d6c565b6040516107e39190613de9565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190613456565b611df5565b005b34801561082157600080fd5b5061083c6004803603810190610837919061349f565b611e8b565b6040516108499190613aa7565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190613266565b611fdc565b6040516108869190613a71565b60405180910390f35b34801561089b57600080fd5b506108a4612070565b6040516108b19190613de9565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190613239565b6120fa565b005b3480156108ef57600080fd5b5061090a600480360381019061090591906134cc565b6121f2565b005b61091461237f565b73ffffffffffffffffffffffffffffffffffffffff166109326116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613cc9565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa75750610aa682612387565b5b9050919050565b6000610ab861237f565b73ffffffffffffffffffffffffffffffffffffffff16610ad66116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390613cc9565b60405180910390fd5b600d54600f54610b3c9190613fba565b905090565b606060008054610b50906140db565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7c906140db565b8015610bc95780601f10610b9e57610100808354040283529160200191610bc9565b820191906000526020600020905b815481529060010190602001808311610bac57829003601f168201915b5050505050905090565b610bdb61237f565b73ffffffffffffffffffffffffffffffffffffffff16610bf96116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613cc9565b60405180910390fd5b600854600981905550565b6000610c65826123f1565b610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90613ca9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cea826113e8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290613d49565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d7a61237f565b73ffffffffffffffffffffffffffffffffffffffff161480610da95750610da881610da361237f565b611fdc565b5b610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90613be9565b60405180910390fd5b610df2838361245d565b505050565b610dff61237f565b73ffffffffffffffffffffffffffffffffffffffff16610e1d6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90613cc9565b60405180910390fd5b60006002811115610e8757610e86614216565b5b610e8f6113b6565b6002811115610ea157610ea0614216565b5b14610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613bc9565b60405180910390fd5b6203f48042610ef09190613ed9565b601581905550565b6000600854905090565b610f13610f0d61237f565b82612516565b610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613d69565b60405180910390fd5b610f5d8383836125f4565b505050565b610f6a61237f565b73ffffffffffffffffffffffffffffffffffffffff16610f886116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590613cc9565b60405180910390fd5b600f5482600d54610fef9190613ed9565b1115611030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102790613c49565b60405180910390fd5b60005b828110156110ea5761104c82611047612850565b612891565b6001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109c9190613ed9565b925050819055506001600860008282546110b69190613ed9565b925050819055506001600d60008282546110d09190613ed9565b9250508190555080806110e29061413e565b915050611033565b505050565b60166020528060005260406000206000915090505481565b61110f61237f565b73ffffffffffffffffffffffffffffffffffffffff1661112d6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90613cc9565b60405180910390fd5b80600b908051906020019061119992919061304d565b5050565b6111a561237f565b73ffffffffffffffffffffffffffffffffffffffff166111c36116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613cc9565b60405180910390fd5b6000611223611c60565b905060008111611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90613dc9565b60405180910390fd5b6112ae601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166127106109478461129f9190613f60565b6112a99190613f2f565b6128af565b6112f4601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710610947846112e59190613f60565b6112ef9190613f2f565b6128af565b61133a601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e86101db8461132b9190613f60565b6113359190613f2f565b6128af565b61136d601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611368611c60565b6128af565b50565b61138b83838360405180602001604052806000815250611d0a565b505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060155414156113cb57600090506113e5565b6105dc60085410156113e057600190506113e5565b600290505b90565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613c29565b60405180910390fd5b80915050919050565b601780546114a7906140db565b80601f01602080910402602001604051908101604052809291908181526020018280546114d3906140db565b80156115205780601f106114f557610100808354040283529160200191611520565b820191906000526020600020905b81548152906001019060200180831161150357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613c09565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e861237f565b73ffffffffffffffffffffffffffffffffffffffff166116066116e2565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613cc9565b60405180910390fd5b6116666000612960565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a81565b60008060155414156116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190613d29565b60405180910390fd5b601554905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611741906140db565b80601f016020809104026020016040519081016040528092919081815260200182805461176d906140db565b80156117ba5780601f1061178f576101008083540402835291602001916117ba565b820191906000526020600020905b81548152906001019060200180831161179d57829003601f168201915b5050505050905090565b60006117ce6113b6565b9050600060028111156117e4576117e3614216565b5b8160028111156117f7576117f6614216565b5b1415611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90613da9565b60405180910390fd5b600d54600c54600f54600e5461184e9190613ed9565b6118589190613fba565b6118629190613fba565b60095461186f9190613fba565b8260085461187d9190613ed9565b11156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590613b89565b60405180910390fd5b600a82601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461190b9190613ed9565b111561194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613d89565b60405180910390fd5b81611955611d6c565b61195f9190613f60565b3410156119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613c89565b60405180910390fd5b60005b82811015611a475760006119b6612850565b90506119c23382612891565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a129190613ed9565b92505081905550600160086000828254611a2c9190613ed9565b92505081905550508080611a3f9061413e565b9150506119a4565b505050565b611a5461237f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990613b69565b60405180910390fd5b8060056000611acf61237f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b7c61237f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc19190613a71565b60405180910390a35050565b6000611bd761237f565b73ffffffffffffffffffffffffffffffffffffffff16611bf56116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290613cc9565b60405180910390fd5b600c54600e54611c5b9190613fba565b905090565b6000611c6a61237f565b73ffffffffffffffffffffffffffffffffffffffff16611c886116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590613cc9565b60405180910390fd5b47905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d1b611d1561237f565b83612516565b611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613d69565b60405180910390fd5b611d6684848484612a26565b50505050565b600080611d776113b6565b905060006002811115611d8d57611d8c614216565b5b816002811115611da057611d9f614216565b5b1480611dd0575060016002811115611dbb57611dba614216565b5b816002811115611dce57611dcd614216565b5b145b15611de557668e1bc9bf040000915050611df2565b67010a741a462780009150505b90565b611dfd61237f565b73ffffffffffffffffffffffffffffffffffffffff16611e1b6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890613cc9565b60405180910390fd5b8060179080519060200190611e8792919061304d565b5050565b6060611e96826123f1565b611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613d09565b60405180910390fd5b60006015541480611ee7575060155442105b15611f7e5760178054611ef9906140db565b80601f0160208091040260200160405190810160405280929190818152602001828054611f25906140db565b8015611f725780601f10611f4757610100808354040283529160200191611f72565b820191906000526020600020905b815481529060010190602001808311611f5557829003601f168201915b50505050509050611fd7565b6000611f88612a82565b90506000815111611fa85760405180602001604052806000815250611fd3565b80611fb284612b14565b604051602001611fc39291906139ab565b6040516020818303038152906040525b9150505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008061207b6113b6565b90506001600281111561209157612090614216565b5b8160028111156120a4576120a3614216565b5b14806120d45750600060028111156120bf576120be614216565b5b8160028111156120d2576120d1614216565b5b145b156120f157600854600a546120e99190613fba565b9150506120f7565b60009150505b90565b61210261237f565b73ffffffffffffffffffffffffffffffffffffffff166121206116e2565b73ffffffffffffffffffffffffffffffffffffffff1614612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90613cc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90613ae9565b60405180910390fd5b6121ef81612960565b50565b6121fa61237f565b73ffffffffffffffffffffffffffffffffffffffff166122186116e2565b73ffffffffffffffffffffffffffffffffffffffff161461226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590613cc9565b60405180910390fd5b600e5482600c5461227f9190613ed9565b11156122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790613c49565b60405180910390fd5b60005b8281101561237a576122dc826122d7612850565b612891565b6001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232c9190613ed9565b925050819055506001600860008282546123469190613ed9565b925050819055506001600c60008282546123609190613ed9565b9250508190555080806123729061413e565b9150506122c3565b505050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124d0836113e8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612521826123f1565b612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790613ba9565b60405180910390fd5b600061256b836113e8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125da57508373ffffffffffffffffffffffffffffffffffffffff166125c284610c5a565b73ffffffffffffffffffffffffffffffffffffffff16145b806125eb57506125ea8185611fdc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612614826113e8565b73ffffffffffffffffffffffffffffffffffffffff161461266a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266190613ce9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d190613b49565b60405180910390fd5b6126e5838383612c75565b6126f060008261245d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127409190613fba565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127979190613ed9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008061285b610ef8565b90506000600190505b8015612889576001826128779190613ed9565b9150612882826123f1565b9050612864565b819250505090565b6128ab828260405180602001604052806000815250612c7a565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516128d5906139da565b60006040518083038185875af1925050503d8060008114612912576040519150601f19603f3d011682016040523d82523d6000602084013e612917565b606091505b505090508061295b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295290613b29565b60405180910390fd5b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a318484846125f4565b612a3d84848484612cd5565b612a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7390613ac9565b60405180910390fd5b50505050565b6060600b8054612a91906140db565b80601f0160208091040260200160405190810160405280929190818152602001828054612abd906140db565b8015612b0a5780601f10612adf57610100808354040283529160200191612b0a565b820191906000526020600020905b815481529060010190602001808311612aed57829003601f168201915b5050505050905090565b60606000821415612b5c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c70565b600082905060005b60008214612b8e578080612b779061413e565b915050600a82612b879190613f2f565b9150612b64565b60008167ffffffffffffffff811115612baa57612ba96142a3565b5b6040519080825280601f01601f191660200182016040528015612bdc5781602001600182028036833780820191505090505b5090505b60008514612c6957600182612bf59190613fba565b9150600a85612c049190614187565b6030612c109190613ed9565b60f81b818381518110612c2657612c25614274565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c629190613f2f565b9450612be0565b8093505050505b919050565b505050565b612c848383612e6c565b612c916000848484612cd5565b612cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc790613ac9565b60405180910390fd5b505050565b6000612cf68473ffffffffffffffffffffffffffffffffffffffff1661303a565b15612e5f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d1f61237f565b8786866040518563ffffffff1660e01b8152600401612d419493929190613a25565b602060405180830381600087803b158015612d5b57600080fd5b505af1925050508015612d8c57506040513d601f19601f82011682018060405250810190612d899190613429565b60015b612e0f573d8060008114612dbc576040519150601f19603f3d011682016040523d82523d6000602084013e612dc1565b606091505b50600081511415612e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfe90613ac9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e64565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed390613c69565b60405180910390fd5b612ee5816123f1565b15612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c90613b09565b60405180910390fd5b612f3160008383612c75565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f819190613ed9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613059906140db565b90600052602060002090601f01602090048101928261307b57600085556130c2565b82601f1061309457805160ff19168380011785556130c2565b828001600101855582156130c2579182015b828111156130c15782518255916020019190600101906130a6565b5b5090506130cf91906130d3565b5090565b5b808211156130ec5760008160009055506001016130d4565b5090565b60006131036130fe84613e29565b613e04565b90508281526020810184848401111561311f5761311e6142d7565b5b61312a848285614099565b509392505050565b600061314561314084613e5a565b613e04565b905082815260208101848484011115613161576131606142d7565b5b61316c848285614099565b509392505050565b600081359050613183816149be565b92915050565b600081359050613198816149d5565b92915050565b6000813590506131ad816149ec565b92915050565b6000815190506131c2816149ec565b92915050565b600082601f8301126131dd576131dc6142d2565b5b81356131ed8482602086016130f0565b91505092915050565b600082601f83011261320b5761320a6142d2565b5b813561321b848260208601613132565b91505092915050565b60008135905061323381614a03565b92915050565b60006020828403121561324f5761324e6142e1565b5b600061325d84828501613174565b91505092915050565b6000806040838503121561327d5761327c6142e1565b5b600061328b85828601613174565b925050602061329c85828601613174565b9150509250929050565b6000806000606084860312156132bf576132be6142e1565b5b60006132cd86828701613174565b93505060206132de86828701613174565b92505060406132ef86828701613224565b9150509250925092565b60008060008060808587031215613313576133126142e1565b5b600061332187828801613174565b945050602061333287828801613174565b935050604061334387828801613224565b925050606085013567ffffffffffffffff811115613364576133636142dc565b5b613370878288016131c8565b91505092959194509250565b60008060408385031215613393576133926142e1565b5b60006133a185828601613174565b92505060206133b285828601613189565b9150509250929050565b600080604083850312156133d3576133d26142e1565b5b60006133e185828601613174565b92505060206133f285828601613224565b9150509250929050565b600060208284031215613412576134116142e1565b5b60006134208482850161319e565b91505092915050565b60006020828403121561343f5761343e6142e1565b5b600061344d848285016131b3565b91505092915050565b60006020828403121561346c5761346b6142e1565b5b600082013567ffffffffffffffff81111561348a576134896142dc565b5b613496848285016131f6565b91505092915050565b6000602082840312156134b5576134b46142e1565b5b60006134c384828501613224565b91505092915050565b600080604083850312156134e3576134e26142e1565b5b60006134f185828601613224565b925050602061350285828601613174565b9150509250929050565b61351581614000565b82525050565b61352481613fee565b82525050565b61353381614012565b82525050565b600061354482613e8b565b61354e8185613ea1565b935061355e8185602086016140a8565b613567816142e6565b840191505092915050565b61357b81614087565b82525050565b600061358c82613e96565b6135968185613ebd565b93506135a68185602086016140a8565b6135af816142e6565b840191505092915050565b60006135c582613e96565b6135cf8185613ece565b93506135df8185602086016140a8565b80840191505092915050565b60006135f8603283613ebd565b9150613603826142f7565b604082019050919050565b600061361b602683613ebd565b915061362682614346565b604082019050919050565b600061363e601c83613ebd565b915061364982614395565b602082019050919050565b6000613661601483613ebd565b915061366c826143be565b602082019050919050565b6000613684602483613ebd565b915061368f826143e7565b604082019050919050565b60006136a7601983613ebd565b91506136b282614436565b602082019050919050565b60006136ca601e83613ebd565b91506136d58261445f565b602082019050919050565b60006136ed602c83613ebd565b91506136f882614488565b604082019050919050565b6000613710601583613ebd565b915061371b826144d7565b602082019050919050565b6000613733603883613ebd565b915061373e82614500565b604082019050919050565b6000613756602a83613ebd565b91506137618261454f565b604082019050919050565b6000613779602983613ebd565b91506137848261459e565b604082019050919050565b600061379c602783613ebd565b91506137a7826145ed565b604082019050919050565b60006137bf602083613ebd565b91506137ca8261463c565b602082019050919050565b60006137e2603083613ebd565b91506137ed82614665565b604082019050919050565b6000613805602c83613ebd565b9150613810826146b4565b604082019050919050565b6000613828600583613ece565b915061383382614703565b600582019050919050565b600061384b602083613ebd565b91506138568261472c565b602082019050919050565b600061386e602983613ebd565b915061387982614755565b604082019050919050565b6000613891602f83613ebd565b915061389c826147a4565b604082019050919050565b60006138b4602c83613ebd565b91506138bf826147f3565b604082019050919050565b60006138d7602183613ebd565b91506138e282614842565b604082019050919050565b60006138fa600083613eb2565b915061390582614891565b600082019050919050565b600061391d603183613ebd565b915061392882614894565b604082019050919050565b6000613940602583613ebd565b915061394b826148e3565b604082019050919050565b6000613963601583613ebd565b915061396e82614932565b602082019050919050565b6000613986602283613ebd565b91506139918261495b565b604082019050919050565b6139a58161407d565b82525050565b60006139b782856135ba565b91506139c382846135ba565b91506139ce8261381b565b91508190509392505050565b60006139e5826138ed565b9150819050919050565b6000602082019050613a04600083018461351b565b92915050565b6000602082019050613a1f600083018461350c565b92915050565b6000608082019050613a3a600083018761351b565b613a47602083018661351b565b613a54604083018561399c565b8181036060830152613a668184613539565b905095945050505050565b6000602082019050613a86600083018461352a565b92915050565b6000602082019050613aa16000830184613572565b92915050565b60006020820190508181036000830152613ac18184613581565b905092915050565b60006020820190508181036000830152613ae2816135eb565b9050919050565b60006020820190508181036000830152613b028161360e565b9050919050565b60006020820190508181036000830152613b2281613631565b9050919050565b60006020820190508181036000830152613b4281613654565b9050919050565b60006020820190508181036000830152613b6281613677565b9050919050565b60006020820190508181036000830152613b828161369a565b9050919050565b60006020820190508181036000830152613ba2816136bd565b9050919050565b60006020820190508181036000830152613bc2816136e0565b9050919050565b60006020820190508181036000830152613be281613703565b9050919050565b60006020820190508181036000830152613c0281613726565b9050919050565b60006020820190508181036000830152613c2281613749565b9050919050565b60006020820190508181036000830152613c428161376c565b9050919050565b60006020820190508181036000830152613c628161378f565b9050919050565b60006020820190508181036000830152613c82816137b2565b9050919050565b60006020820190508181036000830152613ca2816137d5565b9050919050565b60006020820190508181036000830152613cc2816137f8565b9050919050565b60006020820190508181036000830152613ce28161383e565b9050919050565b60006020820190508181036000830152613d0281613861565b9050919050565b60006020820190508181036000830152613d2281613884565b9050919050565b60006020820190508181036000830152613d42816138a7565b9050919050565b60006020820190508181036000830152613d62816138ca565b9050919050565b60006020820190508181036000830152613d8281613910565b9050919050565b60006020820190508181036000830152613da281613933565b9050919050565b60006020820190508181036000830152613dc281613956565b9050919050565b60006020820190508181036000830152613de281613979565b9050919050565b6000602082019050613dfe600083018461399c565b92915050565b6000613e0e613e1f565b9050613e1a828261410d565b919050565b6000604051905090565b600067ffffffffffffffff821115613e4457613e436142a3565b5b613e4d826142e6565b9050602081019050919050565b600067ffffffffffffffff821115613e7557613e746142a3565b5b613e7e826142e6565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ee48261407d565b9150613eef8361407d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f2457613f236141b8565b5b828201905092915050565b6000613f3a8261407d565b9150613f458361407d565b925082613f5557613f546141e7565b5b828204905092915050565b6000613f6b8261407d565b9150613f768361407d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613faf57613fae6141b8565b5b828202905092915050565b6000613fc58261407d565b9150613fd08361407d565b925082821015613fe357613fe26141b8565b5b828203905092915050565b6000613ff98261405d565b9050919050565b600061400b8261405d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614058826149aa565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006140928261404a565b9050919050565b82818337600083830152505050565b60005b838110156140c65780820151818401526020810190506140ab565b838111156140d5576000848401525b50505050565b600060028204905060018216806140f357607f821691505b6020821081141561410757614106614245565b5b50919050565b614116826142e6565b810181811067ffffffffffffffff82111715614135576141346142a3565b5b80604052505050565b60006141498261407d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561417c5761417b6141b8565b5b600182019050919050565b60006141928261407d565b915061419d8361407d565b9250826141ad576141ac6141e7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e742e2e0000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f53616c6520697320616c7265616479204f70656e210000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768205265736572766564204e465473206c65667420746f60008201527f206d696e742e2e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f742073756666696369656e7420457468657220746f206d696e742074686960008201527f7320616d6f756e74206f66204e46547300000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e46542052657665616c2054696d6520686173206e6f74206265656e2064657460008201527f65726d696e656420796574210000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d6178696d756d203130204d696e747320706572204164647265737320616c6c60008201527f6f77656421000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520696e206e6f74206f70656e20796574210000000000000000000000600082015250565b7f4e6f2046756e647320746f2077697468647261772c2042616c616e636520697360008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b600381106149bb576149ba614216565b5b50565b6149c781613fee565b81146149d257600080fd5b50565b6149de81614012565b81146149e957600080fd5b50565b6149f58161401e565b8114614a0057600080fd5b50565b614a0c8161407d565b8114614a1757600080fd5b5056fea264697066735822122057344cacf3633fc64ed3dbd6a2006add1c4d534daedb861104dcb96ad33883eb64736f6c63430008070033

Deployed Bytecode Sourcemap

34788:9209:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37436:8;;;42007:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22903:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42526:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23854:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40942:94;;;;;;;;;;;;;:::i;:::-;;25169:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24692:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38262:165;;;;;;;;;;;;;:::i;:::-;;42166:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26059:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40429:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36632:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37663:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41255:420;;;;;;;;;;;;;:::i;:::-;;26469:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36042:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43131:301;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23548:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36840:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23278:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4591:94;;;;;;;;;;;;;:::i;:::-;;35952:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35476:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43811:172;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3940:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36222:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24023:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38486:803;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25462:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42327:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41086:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36132:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26725:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43481:284;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37780:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39301:600;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25828:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42743:302;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4840:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39946:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42007:87;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42080:6:::1;42072:5;;:14;;;;;;;;;;;;;;;;;;42007:87:::0;:::o;22903:305::-;23005:4;23057:25;23042:40;;;:11;:40;;;;:105;;;;23114:33;23099:48;;;:11;:48;;;;23042:105;:158;;;;23164:36;23188:11;23164:23;:36::i;:::-;23042:158;23022:178;;22903:305;;;:::o;42526:148::-;42593:4;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42644:22:::1;;42617:24;;:49;;;;:::i;:::-;42610:56;;42526:148:::0;:::o;23854:100::-;23908:13;23941:5;23934:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23854:100;:::o;40942:94::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41009:19:::1;;40992:14;:36;;;;40942:94::o:0;25169:221::-;25245:7;25273:16;25281:7;25273;:16::i;:::-;25265:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25358:15;:24;25374:7;25358:24;;;;;;;;;;;;;;;;;;;;;25351:31;;25169:221;;;:::o;24692:411::-;24773:13;24789:23;24804:7;24789:14;:23::i;:::-;24773:39;;24837:5;24831:11;;:2;:11;;;;24823:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24931:5;24915:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24940:37;24957:5;24964:12;:10;:12::i;:::-;24940:16;:37::i;:::-;24915:62;24893:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25074:21;25083:2;25087:7;25074:8;:21::i;:::-;24762:341;24692:411;;:::o;38262:165::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38333:12:::1;38318:27;;;;;;;;:::i;:::-;;:11;:9;:11::i;:::-;:27;;;;;;;;:::i;:::-;;;38310:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38413:6;38395:15;:24;;;;:::i;:::-;38382:10;:37;;;;38262:165::o:0;42166:94::-;42209:4;42233:19;;42226:26;;42166:94;:::o;26059:339::-;26254:41;26273:12;:10;:12::i;:::-;26287:7;26254:18;:41::i;:::-;26246:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26362:28;26372:4;26378:2;26382:7;26362:9;:28::i;:::-;26059:339;;;:::o;40429:454::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40562:24:::1;;40552:6;40527:22;;:31;;;;:::i;:::-;:59;;40519:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;40648:6;40643:219;40664:6;40660:1;:10;40643:219;;;40692:31;40702:9;40713;:7;:9::i;:::-;40692;:31::i;:::-;40768:1;40738:15;:26;40754:9;40738:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;40807:1;40784:19;;:24;;;;;;;:::i;:::-;;;;;;;;40849:1;40823:22;;:27;;;;;;;:::i;:::-;;;;;;;;40672:3;;;;;:::i;:::-;;;;40643:219;;;;40429:454:::0;;:::o;36632:50::-;;;;;;;;;;;;;;;;;:::o;37663:109::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37756:8:::1;37738:15;:26;;;;;;;;;;;;:::i;:::-;;37663:109:::0;:::o;41255:420::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41303:15:::1;41321:16;:14;:16::i;:::-;41303:34;;41366:1;41356:7;:11;41348:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41427:43;41437:6;;;;;;;;;;;41464:5;41456:4;41446:7;:14;;;;:::i;:::-;41445:24;;;;:::i;:::-;41427:9;:43::i;:::-;41481;41491:6;;;;;;;;;;;41518:5;41510:4;41500:7;:14;;;;:::i;:::-;41499:24;;;;:::i;:::-;41481:9;:43::i;:::-;41535:41;41545:6;;;;;;;;;;;41571:4;41564:3;41554:7;:13;;;;:::i;:::-;41553:22;;;;:::i;:::-;41535:9;:41::i;:::-;41587:32;41597:3;;;;;;;;;;;41602:16;:14;:16::i;:::-;41587:9;:32::i;:::-;41292:383;41255:420::o:0;26469:185::-;26607:39;26624:4;26630:2;26634:7;26607:39;;;;;;;;;;;;:16;:39::i;:::-;26469:185;;;:::o;36042:83::-;;;;;;;;;;;;;:::o;43131:301::-;43172:5;43217:1;43203:10;;:15;43199:226;;;43242:12;43235:19;;;;43199:226;43307:4;43285:19;;:26;43281:144;;;43335:13;43328:20;;;;43281:144;43397:16;43390:23;;43131:301;;:::o;23548:239::-;23620:7;23640:13;23656:7;:16;23664:7;23656:16;;;;;;;;;;;;;;;;;;;;;23640:32;;23708:1;23691:19;;:5;:19;;;;23683:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23774:5;23767:12;;;23548:239;;;:::o;36840:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23278:208::-;23350:7;23395:1;23378:19;;:5;:19;;;;23370:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23462:9;:16;23472:5;23462:16;;;;;;;;;;;;;;;;23455:23;;23278:208;;;:::o;4591:94::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4656:21:::1;4674:1;4656:9;:21::i;:::-;4591:94::o:0;35952:83::-;;;;;;;;;;;;;:::o;35476:36::-;35510:2;35476:36;:::o;43811:172::-;43855:7;43897:1;43883:10;;:15;;43875:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;43965:10;;43958:17;;43811:172;:::o;3940:87::-;3986:7;4013:6;;;;;;;;;;;4006:13;;3940:87;:::o;36222:80::-;;;;;;;;;;;;;:::o;24023:104::-;24079:13;24112:7;24105:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24023:104;:::o;38486:803::-;38542:16;38561:11;:9;:11::i;:::-;38542:30;;38605:12;38591:26;;;;;;;;:::i;:::-;;:10;:26;;;;;;;;:::i;:::-;;;;38583:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38783:22;;38762:18;;38735:24;;38712:20;;:47;;;;:::i;:::-;:68;;;;:::i;:::-;:93;;;;:::i;:::-;38694:14;;:112;;;;:::i;:::-;38684:6;38662:19;;:28;;;;:::i;:::-;:144;;38654:187;;;;;;;;;;;;:::i;:::-;;;;;;;;;35510:2;38890:6;38860:15;:27;38876:10;38860:27;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:47;;38852:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38994:6;38981:10;:8;:10::i;:::-;:19;;;;:::i;:::-;38968:9;:32;;38960:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;39073:9;39068:214;39092:6;39088:1;:10;39068:214;;;39120:11;39134:9;:7;:9::i;:::-;39120:23;;39158:26;39168:10;39180:3;39158:9;:26::i;:::-;39230:1;39199:15;:27;39215:10;39199:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;39269:1;39246:19;;:24;;;;;;;:::i;:::-;;;;;;;;39105:177;39100:3;;;;;:::i;:::-;;;;39068:214;;;;38531:758;38486:803;:::o;25462:295::-;25577:12;:10;:12::i;:::-;25565:24;;:8;:24;;;;25557:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25677:8;25632:18;:32;25651:12;:10;:12::i;:::-;25632:32;;;;;;;;;;;;;;;:42;25665:8;25632:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25730:8;25701:48;;25716:12;:10;:12::i;:::-;25701:48;;;25740:8;25701:48;;;;;;:::i;:::-;;;;;;;;25462:295;;:::o;42327:136::-;42390:4;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42437:18:::1;;42414:20;;:41;;;;:::i;:::-;42407:48;;42327:136:::0;:::o;41086:109::-;41142:4;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41166:21:::1;41159:28;;41086:109:::0;:::o;36132:83::-;;;;;;;;;;;;;:::o;26725:328::-;26900:41;26919:12;:10;:12::i;:::-;26933:7;26900:18;:41::i;:::-;26892:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27006:39;27020:4;27026:2;27030:7;27039:5;27006:13;:39::i;:::-;26725:328;;;;:::o;43481:284::-;43521:4;43538:16;43557:11;:9;:11::i;:::-;43538:30;;43597:12;43583:26;;;;;;;;:::i;:::-;;:10;:26;;;;;;;;:::i;:::-;;;:57;;;;43627:13;43613:27;;;;;;;;:::i;:::-;;:10;:27;;;;;;;;:::i;:::-;;;43583:57;43579:179;;;35342:10;43657:22;;;;;43579:179;35402:11;43721:25;;;43481:284;;:::o;37780:125::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37883:14:::1;37867:13;:30;;;;;;;;;;;;:::i;:::-;;37780:125:::0;:::o;39301:600::-;39375:13;39409:17;39417:8;39409:7;:17::i;:::-;39401:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39604:1;39590:10;;:15;:47;;;;39627:10;;39609:15;:28;39590:47;39586:304;;;39661:13;39654:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39586:304;39726:21;39750:10;:8;:10::i;:::-;39726:34;;39806:1;39788:7;39782:21;:25;:96;;;;;;;;;;;;;;;;;39834:7;39843:19;:8;:17;:19::i;:::-;39817:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39782:96;39775:103;;;39301:600;;;;:::o;25828:164::-;25925:4;25949:18;:25;25968:5;25949:25;;;;;;;;;;;;;;;:35;25975:8;25949:35;;;;;;;;;;;;;;;;;;;;;;;;;25942:42;;25828:164;;;;:::o;42743:302::-;42795:4;42812:16;42831:11;:9;:11::i;:::-;42812:30;;42871:13;42857:27;;;;;;;;:::i;:::-;;:10;:27;;;;;;;;:::i;:::-;;;:57;;;;42902:12;42888:26;;;;;;;;:::i;:::-;;:10;:26;;;;;;;;:::i;:::-;;;42857:57;42853:185;;;42957:19;;42938:16;;:38;;;;:::i;:::-;42931:45;;;;;42853:185;43025:1;43018:8;;;42743:302;;:::o;4840:192::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4949:1:::1;4929:22;;:8;:22;;;;4921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5005:19;5015:8;5005:9;:19::i;:::-;4840:192:::0;:::o;39946:438::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40071:20:::1;;40061:6;40040:18;;:27;;;;:::i;:::-;:51;;40032:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;40153:6;40148:215;40169:6;40165:1;:10;40148:215;;;40197:31;40207:9;40218;:7;:9::i;:::-;40197;:31::i;:::-;40273:1;40243:15;:26;40259:9;40243:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;40312:1;40289:19;;:24;;;;;;;:::i;:::-;;;;;;;;40350:1;40328:18;;:23;;;;;;;:::i;:::-;;;;;;;;40177:3;;;;;:::i;:::-;;;;40148:215;;;;39946:438:::0;;:::o;2728:98::-;2781:7;2808:10;2801:17;;2728:98;:::o;15926:157::-;16011:4;16050:25;16035:40;;;:11;:40;;;;16028:47;;15926:157;;;:::o;28563:127::-;28628:4;28680:1;28652:30;;:7;:16;28660:7;28652:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28645:37;;28563:127;;;:::o;32545:174::-;32647:2;32620:15;:24;32636:7;32620:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32703:7;32699:2;32665:46;;32674:23;32689:7;32674:14;:23::i;:::-;32665:46;;;;;;;;;;;;32545:174;;:::o;28857:348::-;28950:4;28975:16;28983:7;28975;:16::i;:::-;28967:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29051:13;29067:23;29082:7;29067:14;:23::i;:::-;29051:39;;29120:5;29109:16;;:7;:16;;;:51;;;;29153:7;29129:31;;:20;29141:7;29129:11;:20::i;:::-;:31;;;29109:51;:87;;;;29164:32;29181:5;29188:7;29164:16;:32::i;:::-;29109:87;29101:96;;;28857:348;;;;:::o;31849:578::-;32008:4;31981:31;;:23;31996:7;31981:14;:23::i;:::-;:31;;;31973:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32091:1;32077:16;;:2;:16;;;;32069:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32147:39;32168:4;32174:2;32178:7;32147:20;:39::i;:::-;32251:29;32268:1;32272:7;32251:8;:29::i;:::-;32312:1;32293:9;:15;32303:4;32293:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32341:1;32324:9;:13;32334:2;32324:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32372:2;32353:7;:16;32361:7;32353:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32411:7;32407:2;32392:27;;32401:4;32392:27;;;;;;;;;;;;31849:578;;;:::o;37961:273::-;38002:7;38022:14;38039:13;:11;:13::i;:::-;38022:30;;38063:11;38077:4;38063:18;;38092:98;38099:6;38092:98;;;38135:1;38122:14;;;;;:::i;:::-;;;38160:18;38168:9;38160:7;:18::i;:::-;38151:27;;38092:98;;;38217:9;38210:16;;;;37961:273;:::o;29547:110::-;29623:26;29633:2;29637:7;29623:26;;;;;;;;;;;;:9;:26::i;:::-;29547:110;;:::o;41750:183::-;41831:9;41846:7;:12;;41866:6;41846:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41830:47;;;41896:4;41888:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;41819:114;41750:183;;:::o;5040:173::-;5096:16;5115:6;;;;;;;;;;;5096:25;;5141:8;5132:6;;:17;;;;;;;;;;;;;;;;;;5196:8;5165:40;;5186:8;5165:40;;;;;;;;;;;;5085:128;5040:173;:::o;27935:315::-;28092:28;28102:4;28108:2;28112:7;28092:9;:28::i;:::-;28139:48;28162:4;28168:2;28172:7;28181:5;28139:22;:48::i;:::-;28131:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27935:315;;;;:::o;37489:116::-;37549:13;37582:15;37575:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37489:116;:::o;344:723::-;400:13;630:1;621:5;:10;617:53;;;648:10;;;;;;;;;;;;;;;;;;;;;617:53;680:12;695:5;680:20;;711:14;736:78;751:1;743:4;:9;736:78;;769:8;;;;;:::i;:::-;;;;800:2;792:10;;;;;:::i;:::-;;;736:78;;;824:19;856:6;846:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;824:39;;874:154;890:1;881:5;:10;874:154;;918:1;908:11;;;;;:::i;:::-;;;985:2;977:5;:10;;;;:::i;:::-;964:2;:24;;;;:::i;:::-;951:39;;934:6;941;934:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1014:2;1005:11;;;;;:::i;:::-;;;874:154;;;1052:6;1038:21;;;;;344:723;;;;:::o;34655:126::-;;;;:::o;29884:321::-;30014:18;30020:2;30024:7;30014:5;:18::i;:::-;30065:54;30096:1;30100:2;30104:7;30113:5;30065:22;:54::i;:::-;30043:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29884:321;;;:::o;33284:799::-;33439:4;33460:15;:2;:13;;;:15::i;:::-;33456:620;;;33512:2;33496:36;;;33533:12;:10;:12::i;:::-;33547:4;33553:7;33562:5;33496:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33492:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33755:1;33738:6;:13;:18;33734:272;;;33781:60;;;;;;;;;;:::i;:::-;;;;;;;;33734:272;33956:6;33950:13;33941:6;33937:2;33933:15;33926:38;33492:529;33629:41;;;33619:51;;;:6;:51;;;;33612:58;;;;;33456:620;34060:4;34053:11;;33284:799;;;;;;;:::o;30541:382::-;30635:1;30621:16;;:2;:16;;;;30613:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30694:16;30702:7;30694;:16::i;:::-;30693:17;30685:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30756:45;30785:1;30789:2;30793:7;30756:20;:45::i;:::-;30831:1;30814:9;:13;30824:2;30814:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30862:2;30843:7;:16;30851:7;30843:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30907:7;30903:2;30882:33;;30899:1;30882:33;;;;;;;;;;;;30541:382;;:::o;5986:387::-;6046:4;6254:12;6321:7;6309:20;6301:28;;6364:1;6357:4;:8;6350:15;;;5986:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:474::-;7226:6;7234;7283:2;7271:9;7262:7;7258:23;7254:32;7251:119;;;7289:79;;:::i;:::-;7251:119;7409:1;7434:53;7479:7;7470:6;7459:9;7455:22;7434:53;:::i;:::-;7424:63;;7380:117;7536:2;7562:53;7607:7;7598:6;7587:9;7583:22;7562:53;:::i;:::-;7552:63;;7507:118;7158:474;;;;;:::o;7638:142::-;7741:32;7767:5;7741:32;:::i;:::-;7736:3;7729:45;7638:142;;:::o;7786:118::-;7873:24;7891:5;7873:24;:::i;:::-;7868:3;7861:37;7786:118;;:::o;7910:109::-;7991:21;8006:5;7991:21;:::i;:::-;7986:3;7979:34;7910:109;;:::o;8025:360::-;8111:3;8139:38;8171:5;8139:38;:::i;:::-;8193:70;8256:6;8251:3;8193:70;:::i;:::-;8186:77;;8272:52;8317:6;8312:3;8305:4;8298:5;8294:16;8272:52;:::i;:::-;8349:29;8371:6;8349:29;:::i;:::-;8344:3;8340:39;8333:46;;8115:270;8025:360;;;;:::o;8391:147::-;8486:45;8525:5;8486:45;:::i;:::-;8481:3;8474:58;8391:147;;:::o;8544:364::-;8632:3;8660:39;8693:5;8660:39;:::i;:::-;8715:71;8779:6;8774:3;8715:71;:::i;:::-;8708:78;;8795:52;8840:6;8835:3;8828:4;8821:5;8817:16;8795:52;:::i;:::-;8872:29;8894:6;8872:29;:::i;:::-;8867:3;8863:39;8856:46;;8636:272;8544:364;;;;:::o;8914:377::-;9020:3;9048:39;9081:5;9048:39;:::i;:::-;9103:89;9185:6;9180:3;9103:89;:::i;:::-;9096:96;;9201:52;9246:6;9241:3;9234:4;9227:5;9223:16;9201:52;:::i;:::-;9278:6;9273:3;9269:16;9262:23;;9024:267;8914:377;;;;:::o;9297:366::-;9439:3;9460:67;9524:2;9519:3;9460:67;:::i;:::-;9453:74;;9536:93;9625:3;9536:93;:::i;:::-;9654:2;9649:3;9645:12;9638:19;;9297:366;;;:::o;9669:::-;9811:3;9832:67;9896:2;9891:3;9832:67;:::i;:::-;9825:74;;9908:93;9997:3;9908:93;:::i;:::-;10026:2;10021:3;10017:12;10010:19;;9669:366;;;:::o;10041:::-;10183:3;10204:67;10268:2;10263:3;10204:67;:::i;:::-;10197:74;;10280:93;10369:3;10280:93;:::i;:::-;10398:2;10393:3;10389:12;10382:19;;10041:366;;;:::o;10413:::-;10555:3;10576:67;10640:2;10635:3;10576:67;:::i;:::-;10569:74;;10652:93;10741:3;10652:93;:::i;:::-;10770:2;10765:3;10761:12;10754:19;;10413:366;;;:::o;10785:::-;10927:3;10948:67;11012:2;11007:3;10948:67;:::i;:::-;10941:74;;11024:93;11113:3;11024:93;:::i;:::-;11142:2;11137:3;11133:12;11126:19;;10785:366;;;:::o;11157:::-;11299:3;11320:67;11384:2;11379:3;11320:67;:::i;:::-;11313:74;;11396:93;11485:3;11396:93;:::i;:::-;11514:2;11509:3;11505:12;11498:19;;11157:366;;;:::o;11529:::-;11671:3;11692:67;11756:2;11751:3;11692:67;:::i;:::-;11685:74;;11768:93;11857:3;11768:93;:::i;:::-;11886:2;11881:3;11877:12;11870:19;;11529:366;;;:::o;11901:::-;12043:3;12064:67;12128:2;12123:3;12064:67;:::i;:::-;12057:74;;12140:93;12229:3;12140:93;:::i;:::-;12258:2;12253:3;12249:12;12242:19;;11901:366;;;:::o;12273:::-;12415:3;12436:67;12500:2;12495:3;12436:67;:::i;:::-;12429:74;;12512:93;12601:3;12512:93;:::i;:::-;12630:2;12625:3;12621:12;12614:19;;12273:366;;;:::o;12645:::-;12787:3;12808:67;12872:2;12867:3;12808:67;:::i;:::-;12801:74;;12884:93;12973:3;12884:93;:::i;:::-;13002:2;12997:3;12993:12;12986:19;;12645:366;;;:::o;13017:::-;13159:3;13180:67;13244:2;13239:3;13180:67;:::i;:::-;13173:74;;13256:93;13345:3;13256:93;:::i;:::-;13374:2;13369:3;13365:12;13358:19;;13017:366;;;:::o;13389:::-;13531:3;13552:67;13616:2;13611:3;13552:67;:::i;:::-;13545:74;;13628:93;13717:3;13628:93;:::i;:::-;13746:2;13741:3;13737:12;13730:19;;13389:366;;;:::o;13761:::-;13903:3;13924:67;13988:2;13983:3;13924:67;:::i;:::-;13917:74;;14000:93;14089:3;14000:93;:::i;:::-;14118:2;14113:3;14109:12;14102:19;;13761:366;;;:::o;14133:::-;14275:3;14296:67;14360:2;14355:3;14296:67;:::i;:::-;14289:74;;14372:93;14461:3;14372:93;:::i;:::-;14490:2;14485:3;14481:12;14474:19;;14133:366;;;:::o;14505:::-;14647:3;14668:67;14732:2;14727:3;14668:67;:::i;:::-;14661:74;;14744:93;14833:3;14744:93;:::i;:::-;14862:2;14857:3;14853:12;14846:19;;14505:366;;;:::o;14877:::-;15019:3;15040:67;15104:2;15099:3;15040:67;:::i;:::-;15033:74;;15116:93;15205:3;15116:93;:::i;:::-;15234:2;15229:3;15225:12;15218:19;;14877:366;;;:::o;15249:400::-;15409:3;15430:84;15512:1;15507:3;15430:84;:::i;:::-;15423:91;;15523:93;15612:3;15523:93;:::i;:::-;15641:1;15636:3;15632:11;15625:18;;15249:400;;;:::o;15655:366::-;15797:3;15818:67;15882:2;15877:3;15818:67;:::i;:::-;15811:74;;15894:93;15983:3;15894:93;:::i;:::-;16012:2;16007:3;16003:12;15996:19;;15655:366;;;:::o;16027:::-;16169:3;16190:67;16254:2;16249:3;16190:67;:::i;:::-;16183:74;;16266:93;16355:3;16266:93;:::i;:::-;16384:2;16379:3;16375:12;16368:19;;16027:366;;;:::o;16399:::-;16541:3;16562:67;16626:2;16621:3;16562:67;:::i;:::-;16555:74;;16638:93;16727:3;16638:93;:::i;:::-;16756:2;16751:3;16747:12;16740:19;;16399:366;;;:::o;16771:::-;16913:3;16934:67;16998:2;16993:3;16934:67;:::i;:::-;16927:74;;17010:93;17099:3;17010:93;:::i;:::-;17128:2;17123:3;17119:12;17112:19;;16771:366;;;:::o;17143:::-;17285:3;17306:67;17370:2;17365:3;17306:67;:::i;:::-;17299:74;;17382:93;17471:3;17382:93;:::i;:::-;17500:2;17495:3;17491:12;17484:19;;17143:366;;;:::o;17515:398::-;17674:3;17695:83;17776:1;17771:3;17695:83;:::i;:::-;17688:90;;17787:93;17876:3;17787:93;:::i;:::-;17905:1;17900:3;17896:11;17889:18;;17515:398;;;:::o;17919:366::-;18061:3;18082:67;18146:2;18141:3;18082:67;:::i;:::-;18075:74;;18158:93;18247:3;18158:93;:::i;:::-;18276:2;18271:3;18267:12;18260:19;;17919:366;;;:::o;18291:::-;18433:3;18454:67;18518:2;18513:3;18454:67;:::i;:::-;18447:74;;18530:93;18619:3;18530:93;:::i;:::-;18648:2;18643:3;18639:12;18632:19;;18291:366;;;:::o;18663:::-;18805:3;18826:67;18890:2;18885:3;18826:67;:::i;:::-;18819:74;;18902:93;18991:3;18902:93;:::i;:::-;19020:2;19015:3;19011:12;19004:19;;18663:366;;;:::o;19035:::-;19177:3;19198:67;19262:2;19257:3;19198:67;:::i;:::-;19191:74;;19274:93;19363:3;19274:93;:::i;:::-;19392:2;19387:3;19383:12;19376:19;;19035:366;;;:::o;19407:118::-;19494:24;19512:5;19494:24;:::i;:::-;19489:3;19482:37;19407:118;;:::o;19531:701::-;19812:3;19834:95;19925:3;19916:6;19834:95;:::i;:::-;19827:102;;19946:95;20037:3;20028:6;19946:95;:::i;:::-;19939:102;;20058:148;20202:3;20058:148;:::i;:::-;20051:155;;20223:3;20216:10;;19531:701;;;;;:::o;20238:379::-;20422:3;20444:147;20587:3;20444:147;:::i;:::-;20437:154;;20608:3;20601:10;;20238:379;;;:::o;20623:222::-;20716:4;20754:2;20743:9;20739:18;20731:26;;20767:71;20835:1;20824:9;20820:17;20811:6;20767:71;:::i;:::-;20623:222;;;;:::o;20851:254::-;20960:4;20998:2;20987:9;20983:18;20975:26;;21011:87;21095:1;21084:9;21080:17;21071:6;21011:87;:::i;:::-;20851:254;;;;:::o;21111:640::-;21306:4;21344:3;21333:9;21329:19;21321:27;;21358:71;21426:1;21415:9;21411:17;21402:6;21358:71;:::i;:::-;21439:72;21507:2;21496:9;21492:18;21483:6;21439:72;:::i;:::-;21521;21589:2;21578:9;21574:18;21565:6;21521:72;:::i;:::-;21640:9;21634:4;21630:20;21625:2;21614:9;21610:18;21603:48;21668:76;21739:4;21730:6;21668:76;:::i;:::-;21660:84;;21111:640;;;;;;;:::o;21757:210::-;21844:4;21882:2;21871:9;21867:18;21859:26;;21895:65;21957:1;21946:9;21942:17;21933:6;21895:65;:::i;:::-;21757:210;;;;:::o;21973:238::-;22074:4;22112:2;22101:9;22097:18;22089:26;;22125:79;22201:1;22190:9;22186:17;22177:6;22125:79;:::i;:::-;21973:238;;;;:::o;22217:313::-;22330:4;22368:2;22357:9;22353:18;22345:26;;22417:9;22411:4;22407:20;22403:1;22392:9;22388:17;22381:47;22445:78;22518:4;22509:6;22445:78;:::i;:::-;22437:86;;22217:313;;;;:::o;22536:419::-;22702:4;22740:2;22729:9;22725:18;22717:26;;22789:9;22783:4;22779:20;22775:1;22764:9;22760:17;22753:47;22817:131;22943:4;22817:131;:::i;:::-;22809:139;;22536:419;;;:::o;22961:::-;23127:4;23165:2;23154:9;23150:18;23142:26;;23214:9;23208:4;23204:20;23200:1;23189:9;23185:17;23178:47;23242:131;23368:4;23242:131;:::i;:::-;23234:139;;22961:419;;;:::o;23386:::-;23552:4;23590:2;23579:9;23575:18;23567:26;;23639:9;23633:4;23629:20;23625:1;23614:9;23610:17;23603:47;23667:131;23793:4;23667:131;:::i;:::-;23659:139;;23386:419;;;:::o;23811:::-;23977:4;24015:2;24004:9;24000:18;23992:26;;24064:9;24058:4;24054:20;24050:1;24039:9;24035:17;24028:47;24092:131;24218:4;24092:131;:::i;:::-;24084:139;;23811:419;;;:::o;24236:::-;24402:4;24440:2;24429:9;24425:18;24417:26;;24489:9;24483:4;24479:20;24475:1;24464:9;24460:17;24453:47;24517:131;24643:4;24517:131;:::i;:::-;24509:139;;24236:419;;;:::o;24661:::-;24827:4;24865:2;24854:9;24850:18;24842:26;;24914:9;24908:4;24904:20;24900:1;24889:9;24885:17;24878:47;24942:131;25068:4;24942:131;:::i;:::-;24934:139;;24661:419;;;:::o;25086:::-;25252:4;25290:2;25279:9;25275:18;25267:26;;25339:9;25333:4;25329:20;25325:1;25314:9;25310:17;25303:47;25367:131;25493:4;25367:131;:::i;:::-;25359:139;;25086:419;;;:::o;25511:::-;25677:4;25715:2;25704:9;25700:18;25692:26;;25764:9;25758:4;25754:20;25750:1;25739:9;25735:17;25728:47;25792:131;25918:4;25792:131;:::i;:::-;25784:139;;25511:419;;;:::o;25936:::-;26102:4;26140:2;26129:9;26125:18;26117:26;;26189:9;26183:4;26179:20;26175:1;26164:9;26160:17;26153:47;26217:131;26343:4;26217:131;:::i;:::-;26209:139;;25936:419;;;:::o;26361:::-;26527:4;26565:2;26554:9;26550:18;26542:26;;26614:9;26608:4;26604:20;26600:1;26589:9;26585:17;26578:47;26642:131;26768:4;26642:131;:::i;:::-;26634:139;;26361:419;;;:::o;26786:::-;26952:4;26990:2;26979:9;26975:18;26967:26;;27039:9;27033:4;27029:20;27025:1;27014:9;27010:17;27003:47;27067:131;27193:4;27067:131;:::i;:::-;27059:139;;26786:419;;;:::o;27211:::-;27377:4;27415:2;27404:9;27400:18;27392:26;;27464:9;27458:4;27454:20;27450:1;27439:9;27435:17;27428:47;27492:131;27618:4;27492:131;:::i;:::-;27484:139;;27211:419;;;:::o;27636:::-;27802:4;27840:2;27829:9;27825:18;27817:26;;27889:9;27883:4;27879:20;27875:1;27864:9;27860:17;27853:47;27917:131;28043:4;27917:131;:::i;:::-;27909:139;;27636:419;;;:::o;28061:::-;28227:4;28265:2;28254:9;28250:18;28242:26;;28314:9;28308:4;28304:20;28300:1;28289:9;28285:17;28278:47;28342:131;28468:4;28342:131;:::i;:::-;28334:139;;28061:419;;;:::o;28486:::-;28652:4;28690:2;28679:9;28675:18;28667:26;;28739:9;28733:4;28729:20;28725:1;28714:9;28710:17;28703:47;28767:131;28893:4;28767:131;:::i;:::-;28759:139;;28486:419;;;:::o;28911:::-;29077:4;29115:2;29104:9;29100:18;29092:26;;29164:9;29158:4;29154:20;29150:1;29139:9;29135:17;29128:47;29192:131;29318:4;29192:131;:::i;:::-;29184:139;;28911:419;;;:::o;29336:::-;29502:4;29540:2;29529:9;29525:18;29517:26;;29589:9;29583:4;29579:20;29575:1;29564:9;29560:17;29553:47;29617:131;29743:4;29617:131;:::i;:::-;29609:139;;29336:419;;;:::o;29761:::-;29927:4;29965:2;29954:9;29950:18;29942:26;;30014:9;30008:4;30004:20;30000:1;29989:9;29985:17;29978:47;30042:131;30168:4;30042:131;:::i;:::-;30034:139;;29761:419;;;:::o;30186:::-;30352:4;30390:2;30379:9;30375:18;30367:26;;30439:9;30433:4;30429:20;30425:1;30414:9;30410:17;30403:47;30467:131;30593:4;30467:131;:::i;:::-;30459:139;;30186:419;;;:::o;30611:::-;30777:4;30815:2;30804:9;30800:18;30792:26;;30864:9;30858:4;30854:20;30850:1;30839:9;30835:17;30828:47;30892:131;31018:4;30892:131;:::i;:::-;30884:139;;30611:419;;;:::o;31036:::-;31202:4;31240:2;31229:9;31225:18;31217:26;;31289:9;31283:4;31279:20;31275:1;31264:9;31260:17;31253:47;31317:131;31443:4;31317:131;:::i;:::-;31309:139;;31036:419;;;:::o;31461:::-;31627:4;31665:2;31654:9;31650:18;31642:26;;31714:9;31708:4;31704:20;31700:1;31689:9;31685:17;31678:47;31742:131;31868:4;31742:131;:::i;:::-;31734:139;;31461:419;;;:::o;31886:::-;32052:4;32090:2;32079:9;32075:18;32067:26;;32139:9;32133:4;32129:20;32125:1;32114:9;32110:17;32103:47;32167:131;32293:4;32167:131;:::i;:::-;32159:139;;31886:419;;;:::o;32311:::-;32477:4;32515:2;32504:9;32500:18;32492:26;;32564:9;32558:4;32554:20;32550:1;32539:9;32535:17;32528:47;32592:131;32718:4;32592:131;:::i;:::-;32584:139;;32311:419;;;:::o;32736:::-;32902:4;32940:2;32929:9;32925:18;32917:26;;32989:9;32983:4;32979:20;32975:1;32964:9;32960:17;32953:47;33017:131;33143:4;33017:131;:::i;:::-;33009:139;;32736:419;;;:::o;33161:222::-;33254:4;33292:2;33281:9;33277:18;33269:26;;33305:71;33373:1;33362:9;33358:17;33349:6;33305:71;:::i;:::-;33161:222;;;;:::o;33389:129::-;33423:6;33450:20;;:::i;:::-;33440:30;;33479:33;33507:4;33499:6;33479:33;:::i;:::-;33389:129;;;:::o;33524:75::-;33557:6;33590:2;33584:9;33574:19;;33524:75;:::o;33605:307::-;33666:4;33756:18;33748:6;33745:30;33742:56;;;33778:18;;:::i;:::-;33742:56;33816:29;33838:6;33816:29;:::i;:::-;33808:37;;33900:4;33894;33890:15;33882:23;;33605:307;;;:::o;33918:308::-;33980:4;34070:18;34062:6;34059:30;34056:56;;;34092:18;;:::i;:::-;34056:56;34130:29;34152:6;34130:29;:::i;:::-;34122:37;;34214:4;34208;34204:15;34196:23;;33918:308;;;:::o;34232:98::-;34283:6;34317:5;34311:12;34301:22;;34232:98;;;:::o;34336:99::-;34388:6;34422:5;34416:12;34406:22;;34336:99;;;:::o;34441:168::-;34524:11;34558:6;34553:3;34546:19;34598:4;34593:3;34589:14;34574:29;;34441:168;;;;:::o;34615:147::-;34716:11;34753:3;34738:18;;34615:147;;;;:::o;34768:169::-;34852:11;34886:6;34881:3;34874:19;34926:4;34921:3;34917:14;34902:29;;34768:169;;;;:::o;34943:148::-;35045:11;35082:3;35067:18;;34943:148;;;;:::o;35097:305::-;35137:3;35156:20;35174:1;35156:20;:::i;:::-;35151:25;;35190:20;35208:1;35190:20;:::i;:::-;35185:25;;35344:1;35276:66;35272:74;35269:1;35266:81;35263:107;;;35350:18;;:::i;:::-;35263:107;35394:1;35391;35387:9;35380:16;;35097:305;;;;:::o;35408:185::-;35448:1;35465:20;35483:1;35465:20;:::i;:::-;35460:25;;35499:20;35517:1;35499:20;:::i;:::-;35494:25;;35538:1;35528:35;;35543:18;;:::i;:::-;35528:35;35585:1;35582;35578:9;35573:14;;35408:185;;;;:::o;35599:348::-;35639:7;35662:20;35680:1;35662:20;:::i;:::-;35657:25;;35696:20;35714:1;35696:20;:::i;:::-;35691:25;;35884:1;35816:66;35812:74;35809:1;35806:81;35801:1;35794:9;35787:17;35783:105;35780:131;;;35891:18;;:::i;:::-;35780:131;35939:1;35936;35932:9;35921:20;;35599:348;;;;:::o;35953:191::-;35993:4;36013:20;36031:1;36013:20;:::i;:::-;36008:25;;36047:20;36065:1;36047:20;:::i;:::-;36042:25;;36086:1;36083;36080:8;36077:34;;;36091:18;;:::i;:::-;36077:34;36136:1;36133;36129:9;36121:17;;35953:191;;;;:::o;36150:96::-;36187:7;36216:24;36234:5;36216:24;:::i;:::-;36205:35;;36150:96;;;:::o;36252:104::-;36297:7;36326:24;36344:5;36326:24;:::i;:::-;36315:35;;36252:104;;;:::o;36362:90::-;36396:7;36439:5;36432:13;36425:21;36414:32;;36362:90;;;:::o;36458:149::-;36494:7;36534:66;36527:5;36523:78;36512:89;;36458:149;;;:::o;36613:131::-;36660:7;36689:5;36678:16;;36695:43;36732:5;36695:43;:::i;:::-;36613:131;;;:::o;36750:126::-;36787:7;36827:42;36820:5;36816:54;36805:65;;36750:126;;;:::o;36882:77::-;36919:7;36948:5;36937:16;;36882:77;;;:::o;36965:131::-;37023:9;37056:34;37084:5;37056:34;:::i;:::-;37043:47;;36965:131;;;:::o;37102:154::-;37186:6;37181:3;37176;37163:30;37248:1;37239:6;37234:3;37230:16;37223:27;37102:154;;;:::o;37262:307::-;37330:1;37340:113;37354:6;37351:1;37348:13;37340:113;;;37439:1;37434:3;37430:11;37424:18;37420:1;37415:3;37411:11;37404:39;37376:2;37373:1;37369:10;37364:15;;37340:113;;;37471:6;37468:1;37465:13;37462:101;;;37551:1;37542:6;37537:3;37533:16;37526:27;37462:101;37311:258;37262:307;;;:::o;37575:320::-;37619:6;37656:1;37650:4;37646:12;37636:22;;37703:1;37697:4;37693:12;37724:18;37714:81;;37780:4;37772:6;37768:17;37758:27;;37714:81;37842:2;37834:6;37831:14;37811:18;37808:38;37805:84;;;37861:18;;:::i;:::-;37805:84;37626:269;37575:320;;;:::o;37901:281::-;37984:27;38006:4;37984:27;:::i;:::-;37976:6;37972:40;38114:6;38102:10;38099:22;38078:18;38066:10;38063:34;38060:62;38057:88;;;38125:18;;:::i;:::-;38057:88;38165:10;38161:2;38154:22;37944:238;37901:281;;:::o;38188:233::-;38227:3;38250:24;38268:5;38250:24;:::i;:::-;38241:33;;38296:66;38289:5;38286:77;38283:103;;;38366:18;;:::i;:::-;38283:103;38413:1;38406:5;38402:13;38395:20;;38188:233;;;:::o;38427:176::-;38459:1;38476:20;38494:1;38476:20;:::i;:::-;38471:25;;38510:20;38528:1;38510:20;:::i;:::-;38505:25;;38549:1;38539:35;;38554:18;;:::i;:::-;38539:35;38595:1;38592;38588:9;38583:14;;38427:176;;;;:::o;38609:180::-;38657:77;38654:1;38647:88;38754:4;38751:1;38744:15;38778:4;38775:1;38768:15;38795:180;38843:77;38840:1;38833:88;38940:4;38937:1;38930:15;38964:4;38961:1;38954:15;38981:180;39029:77;39026:1;39019:88;39126:4;39123:1;39116:15;39150:4;39147:1;39140:15;39167:180;39215:77;39212:1;39205:88;39312:4;39309:1;39302:15;39336:4;39333:1;39326:15;39353:180;39401:77;39398:1;39391:88;39498:4;39495:1;39488:15;39522:4;39519:1;39512:15;39539:180;39587:77;39584:1;39577:88;39684:4;39681:1;39674:15;39708:4;39705:1;39698:15;39725:117;39834:1;39831;39824:12;39848:117;39957:1;39954;39947:12;39971:117;40080:1;40077;40070:12;40094:117;40203:1;40200;40193:12;40217:102;40258:6;40309:2;40305:7;40300:2;40293:5;40289:14;40285:28;40275:38;;40217:102;;;:::o;40325:237::-;40465:34;40461:1;40453:6;40449:14;40442:58;40534:20;40529:2;40521:6;40517:15;40510:45;40325:237;:::o;40568:225::-;40708:34;40704:1;40696:6;40692:14;40685:58;40777:8;40772:2;40764:6;40760:15;40753:33;40568:225;:::o;40799:178::-;40939:30;40935:1;40927:6;40923:14;40916:54;40799:178;:::o;40983:170::-;41123:22;41119:1;41111:6;41107:14;41100:46;40983:170;:::o;41159:223::-;41299:34;41295:1;41287:6;41283:14;41276:58;41368:6;41363:2;41355:6;41351:15;41344:31;41159:223;:::o;41388:175::-;41528:27;41524:1;41516:6;41512:14;41505:51;41388:175;:::o;41569:180::-;41709:32;41705:1;41697:6;41693:14;41686:56;41569:180;:::o;41755:231::-;41895:34;41891:1;41883:6;41879:14;41872:58;41964:14;41959:2;41951:6;41947:15;41940:39;41755:231;:::o;41992:171::-;42132:23;42128:1;42120:6;42116:14;42109:47;41992:171;:::o;42169:243::-;42309:34;42305:1;42297:6;42293:14;42286:58;42378:26;42373:2;42365:6;42361:15;42354:51;42169:243;:::o;42418:229::-;42558:34;42554:1;42546:6;42542:14;42535:58;42627:12;42622:2;42614:6;42610:15;42603:37;42418:229;:::o;42653:228::-;42793:34;42789:1;42781:6;42777:14;42770:58;42862:11;42857:2;42849:6;42845:15;42838:36;42653:228;:::o;42887:226::-;43027:34;43023:1;43015:6;43011:14;43004:58;43096:9;43091:2;43083:6;43079:15;43072:34;42887:226;:::o;43119:182::-;43259:34;43255:1;43247:6;43243:14;43236:58;43119:182;:::o;43307:235::-;43447:34;43443:1;43435:6;43431:14;43424:58;43516:18;43511:2;43503:6;43499:15;43492:43;43307:235;:::o;43548:231::-;43688:34;43684:1;43676:6;43672:14;43665:58;43757:14;43752:2;43744:6;43740:15;43733:39;43548:231;:::o;43785:155::-;43925:7;43921:1;43913:6;43909:14;43902:31;43785:155;:::o;43946:182::-;44086:34;44082:1;44074:6;44070:14;44063:58;43946:182;:::o;44134:228::-;44274:34;44270:1;44262:6;44258:14;44251:58;44343:11;44338:2;44330:6;44326:15;44319:36;44134:228;:::o;44368:234::-;44508:34;44504:1;44496:6;44492:14;44485:58;44577:17;44572:2;44564:6;44560:15;44553:42;44368:234;:::o;44608:231::-;44748:34;44744:1;44736:6;44732:14;44725:58;44817:14;44812:2;44804:6;44800:15;44793:39;44608:231;:::o;44845:220::-;44985:34;44981:1;44973:6;44969:14;44962:58;45054:3;45049:2;45041:6;45037:15;45030:28;44845:220;:::o;45071:114::-;;:::o;45191:236::-;45331:34;45327:1;45319:6;45315:14;45308:58;45400:19;45395:2;45387:6;45383:15;45376:44;45191:236;:::o;45433:224::-;45573:34;45569:1;45561:6;45557:14;45550:58;45642:7;45637:2;45629:6;45625:15;45618:32;45433:224;:::o;45663:171::-;45803:23;45799:1;45791:6;45787:14;45780:47;45663:171;:::o;45840:221::-;45980:34;45976:1;45968:6;45964:14;45957:58;46049:4;46044:2;46036:6;46032:15;46025:29;45840:221;:::o;46067:115::-;46150:1;46143:5;46140:12;46130:46;;46156:18;;:::i;:::-;46130:46;46067:115;:::o;46188:122::-;46261:24;46279:5;46261:24;:::i;:::-;46254:5;46251:35;46241:63;;46300:1;46297;46290:12;46241:63;46188:122;:::o;46316:116::-;46386:21;46401:5;46386:21;:::i;:::-;46379:5;46376:32;46366:60;;46422:1;46419;46412:12;46366:60;46316:116;:::o;46438:120::-;46510:23;46527:5;46510:23;:::i;:::-;46503:5;46500:34;46490:62;;46548:1;46545;46538:12;46490:62;46438:120;:::o;46564:122::-;46637:24;46655:5;46637:24;:::i;:::-;46630:5;46627:35;46617:63;;46676:1;46673;46666:12;46617:63;46564:122;:::o

Swarm Source

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