ETH Price: $2,526.20 (-0.26%)

Token

WallStreetWolves (WSW)
 

Overview

Max Total Supply

1,406 WSW

Holders

651

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 WSW
0x73a1bc2c753cdf47cd1be6b3f00cfe1ec05abbb0
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:
WallStreetWolves

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

// SPDX-License-Identifier: MIT

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: node_modules\openzeppelin-solidity\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: node_modules\openzeppelin-solidity\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: node_modules\openzeppelin-solidity\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: node_modules\openzeppelin-solidity\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;
        // solhint-disable-next-line no-inline-assembly
        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"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: node_modules\openzeppelin-solidity\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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: node_modules\openzeppelin-solidity\contracts\utils\Strings.sol

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: node_modules\openzeppelin-solidity\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: node_modules\openzeppelin-solidity\contracts\token\ERC721\ERC721.sol

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 {}
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC721\extensions\IERC721Enumerable.sol

pragma solidity ^0.8.0;

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

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

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

// File: openzeppelin-solidity\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;
    address private _creator;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        _creator = msgSender;
        emit OwnershipTransferred(address(0), 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() || _creator == _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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: openzeppelin-solidity\contracts\token\ERC721\extensions\ERC721Enumerable.sol

pragma solidity ^0.8.0;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721.balanceOf(owner),
            "ERC721Enumerable: owner index out of bounds"
        );
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721Enumerable.totalSupply(),
            "ERC721Enumerable: global index out of bounds"
        );
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId)
        private
    {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts\lib\Counters.sol

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        {
            counter._value = value - 1;
        }
    }
}

pragma solidity ^0.8.0;

contract WallStreetWolves is ERC721Enumerable, Ownable {
    using Counters for Counters.Counter;
    using Strings for uint256;

    address[24] private _PaymentAddressList = [
        0x75279CB1ad892BC28AD3B76247bFD0313F3e8125,
        0xc7eF4e34deb3AF2fa077A93e2aB723aD3d25307E,
        0x0C96B19cd47aB6821B4862e773020514Af97BA31,
        0x8ea1eDbcFe2DfA00BE4e263083E2168C90d65D23,
        0x2f7e31b403c5049DD57BAEAc074dA277141ABc33,
        0x270a130Fa174B6bae83D234B839a8D4E8077aE3c,
        0x1CC76429fA40f49CA211256A5A55dc3096073F90,
        0x2b93a439FC7c0eEf3E545C6bd64eEb1C76386E2b,
        0x6e01a1fC44d4987E13a10E099257B3EA2AB78FA7,
        0xd520C00C1192C7Ee983D6e6D4E78a01A3CA885c1,
        0x93EEf14c08FF2483A39712e1CE8A9aC8F0FeBC2b,
        0xeaC0E6741593Ff182d5997FB3B1ca982b61A76C9,
        0x244b32f4550124EbD0B647b79367CC9c08fa62bc,
        0x9eBcEA65A37C15a8C20f25c1ff9Ba254aEeA0bC5,
        0xEff40FF123d59B6F829dA715Dce9FeB283Dee46C,
        0xCBB1eb253d51d1a9dDc4078830e070559AA9130f,
        0x8eAa6d601Cc8E440afb4b4F039D3cBd37C387479,
        0x1694fFc6C8553E723caFdb48B5E649d7B07353ab,
        0x952314793e37558e11BfC6E2A5dC8B253eb2CE70,
        0xc4092B7b29BF1f6300F787d948E858285F67AF18,
        0x7DD3919Dbf52B333a2b50e1e7C57eee3C789e329,
        0x1257fD3321BAdba6828b58bAB72403a4146B6d11,
        0xe7D68532475c77Bd394dA6ca0eD7F0130aE0adf2,
        0x53C2833B6Ba81D6a5ad10d2EeFA2fBC8d1DAb4A0
    ];

    uint256 [24] _PaymentPercentList = [
        500,
        100,
        100,
        400,
        500,
        1200,
        100,
        100,
        83,
        83,
        84,
        250,
        500,
        500,
        500,
        500,
        900,
        100,
        500,
        500,
        500,
        500,
        1000,
        500
    ];
    
    uint256 public WSW_MAX = 10000;
    uint256 public PRESALE_PRICE = 0.05 ether;
    uint256 public PUBLIC_PRICE = 0.06 ether;
    uint256 private PRESALE_HOURS = 24 hours;
    uint256 private REVEAL_DELAY_HOURS = 24 hours;
    uint256 public PURCHASE_LIMIT = 3;
    uint256 public PRESALE_MINT_LIMIT = 9;
    uint256 public SUPER_PRESALE_MINT_LIMIT = 1;
    uint256 public PUBLIC_MINT_LIMIT = 9;
    
    mapping(address => uint256) private _mappingPublicMintCount;
    bool private _enableOnChainWhiteList = false;
    mapping(address => bool) private _mappingWhiteList;
    mapping(address => uint256) private _mappingPresaleMintCount;
    
    bool private _enableOnChainDiamondList = true;
    mapping(address => bool) private _mappingDiamondList;
    mapping(address => uint256) private _mappingSuperPresaleMintCount;

    uint256 private _activeDateTime;
    
    string private _tokenBaseURI = "";
    string private _revealURI = "";
    
    Counters.Counter private _publicWSW;

    constructor() ERC721("WallStreetWolves", "WSW") {}

    function setActiveDateTime(uint256 activeDateTime) external onlyOwner {
        _activeDateTime = activeDateTime;
    }

    function setPresaleHours (uint256 presaleHours) external onlyOwner {
        PRESALE_HOURS = presaleHours;
    }

    function setRevealDelayHours (uint256 revealDelayHours) external onlyOwner {
        REVEAL_DELAY_HOURS = revealDelayHours;
    }

    function setMintPrice(uint256 presaleMintPrice, uint256 publicMintPrice) external onlyOwner {
        PRESALE_PRICE = presaleMintPrice;
        PUBLIC_PRICE = publicMintPrice;
    }

    function setMaxLimit(uint256 maxLimit) external onlyOwner {
        WSW_MAX = maxLimit;
    }

    function setPurchaseLimit(uint256 purchaseLimit, uint256 presaleMintLimit, uint256 superPresaleMintLimit, uint256 publicMintLimit) external onlyOwner {
        PURCHASE_LIMIT = purchaseLimit;
        PRESALE_MINT_LIMIT = presaleMintLimit;
        SUPER_PRESALE_MINT_LIMIT = superPresaleMintLimit;
        PUBLIC_MINT_LIMIT = publicMintLimit;
    }

    function setFilterMode(bool bEnableOnChainWhiteList, bool bEnableOnChainDiamondList) external onlyOwner {
        _enableOnChainWhiteList = bEnableOnChainWhiteList;
        _enableOnChainDiamondList = bEnableOnChainDiamondList;
    }

    function setWhiteList(address[] memory whiteListAddress, bool bEnable) external onlyOwner {
        for (uint256 i = 0; i < whiteListAddress.length; i++) {
            _mappingWhiteList[whiteListAddress[i]] = bEnable;
        }
    }

    function setDiamondList(address[] memory whiteListAddress, bool bEnable) external onlyOwner {
        for (uint256 i = 0; i < whiteListAddress.length; i++) {
            _mappingDiamondList[whiteListAddress[i]] = bEnable;
        }
    }

    function isWhiteListed(address addr) public view returns (bool) {
        return _mappingWhiteList[addr];
    }

    function isDiamondListed(address addr) public view returns (bool) {
        return _mappingDiamondList[addr];
    }



    function PRICE() public view returns (uint256) {
        require(block.timestamp > _activeDateTime - PRESALE_HOURS , "Mint is not activated");

        if (block.timestamp < _activeDateTime) {
            return PRESALE_PRICE;
        } else {
            return PUBLIC_PRICE;
        }
    }

    function setRevealURI(string memory revealURI) external onlyOwner {
        _revealURI = revealURI;
    }

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

    function airdrop(address to, uint256 numberOfTokens) external onlyOwner {
        for (uint256 i = 0; i < numberOfTokens; i++) {
            uint256 tokenId = _publicWSW.current();

            if (_publicWSW.current() < WSW_MAX) {
                _publicWSW.increment();
                if (!_exists(tokenId)) _safeMint(to, tokenId);
            }
        }
    }

    function airdropToMultiple(address[] memory airdropAddress, uint256 numberOfTokens) external onlyOwner {
        for (uint256 k = 0; k < airdropAddress.length; k++) {
            for (uint256 i = 0; i < numberOfTokens; i++) {
                uint256 tokenId = _publicWSW.current();

                if (_publicWSW.current() < WSW_MAX) {
                    _publicWSW.increment();
                    if (!_exists(tokenId)) _safeMint(airdropAddress[k], tokenId);
                }
            }
        }
    }

    function airdropSpecial(address to, uint256 tokenId) external onlyOwner {
        require(!_exists(tokenId), "Token already exist");
        _safeMint(to, tokenId);
    }

    function purchaseDiamondList(uint256 numberOfTokens) external {
        require(_publicWSW.current() < WSW_MAX,"Purchase would exceed WSW_MAX");
        
        if (msg.sender != owner()) {
            if (_enableOnChainDiamondList == true) {
                require(_mappingDiamondList[msg.sender] == true, "Not registered to Super WhiteList");   
            }
            require(numberOfTokens <= PURCHASE_LIMIT,"Can only mint up to purchase limit");
            _mappingSuperPresaleMintCount[msg.sender] = _mappingSuperPresaleMintCount[msg.sender] + numberOfTokens;
            require(_mappingSuperPresaleMintCount[msg.sender] <= SUPER_PRESALE_MINT_LIMIT,"Overflow for SUPER_PRESALE_MINT_LIMIT");
        }

        for (uint256 i = 0; i < numberOfTokens; i++) {
            uint256 tokenId = _publicWSW.current();

            if (_publicWSW.current() < WSW_MAX) {
                _publicWSW.increment();
                if (!_exists(tokenId)) _safeMint(msg.sender, tokenId);
            }
        }
    }

    function purchase(uint256 numberOfTokens) external payable {
        require(_publicWSW.current() < WSW_MAX,"Purchase would exceed WSW_MAX");

        if (msg.sender != owner()) {
            require(numberOfTokens <= PURCHASE_LIMIT,"Can only mint up to purchase limit");
            require(PRICE() * numberOfTokens <= msg.value,"ETH amount is not sufficient");

            if (block.timestamp < _activeDateTime) {
                if (_enableOnChainWhiteList == true) {
                    require(_mappingWhiteList[msg.sender] == true, "Not registered to WhiteList");   
                }
                _mappingPresaleMintCount[msg.sender] = _mappingPresaleMintCount[msg.sender] + numberOfTokens;
                require(block.timestamp > _activeDateTime - PRESALE_HOURS , "Mint is not activated for presale");
                require(_mappingPresaleMintCount[msg.sender] <= PRESALE_MINT_LIMIT,"Overflow for PRESALE_MINT_LIMIT");
            } else {
                _mappingPublicMintCount[msg.sender] = _mappingPublicMintCount[msg.sender] + numberOfTokens;
                require(_mappingPublicMintCount[msg.sender] <= PUBLIC_MINT_LIMIT,"Overflow for PUBLIC_MINT_LIMIT");
            }
        }

        for (uint256 i = 0; i < numberOfTokens; i++) {
            uint256 tokenId = _publicWSW.current();

            if (_publicWSW.current() < WSW_MAX) {
                _publicWSW.increment();
                if (!_exists(tokenId)) _safeMint(msg.sender, tokenId);
            }
        }
    }

    function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory)
    {
        require(_exists(tokenId), "Token does not exist");

        if (_activeDateTime + REVEAL_DELAY_HOURS < block.timestamp) {
            return string(abi.encodePacked(_tokenBaseURI, tokenId.toString()));
        }

        return _revealURI;
    }

    function withdraw() external onlyOwner {
        uint256 currentbalance = address(this).balance;

        for (uint256 i = 0 ; i < 24 ; i++) {
            uint256 amount = currentbalance * _PaymentPercentList[i] / 10000;
            payable(_PaymentAddressList[i]).transfer(amount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PRESALE_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PURCHASE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPER_PRESALE_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WSW_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"airdropSpecial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropAddress","type":"address[]"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdropToMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isDiamondListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"purchaseDiamondList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"activeDateTime","type":"uint256"}],"name":"setActiveDateTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whiteListAddress","type":"address[]"},{"internalType":"bool","name":"bEnable","type":"bool"}],"name":"setDiamondList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bEnableOnChainWhiteList","type":"bool"},{"internalType":"bool","name":"bEnableOnChainDiamondList","type":"bool"}],"name":"setFilterMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxLimit","type":"uint256"}],"name":"setMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleMintPrice","type":"uint256"},{"internalType":"uint256","name":"publicMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleHours","type":"uint256"}],"name":"setPresaleHours","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"purchaseLimit","type":"uint256"},{"internalType":"uint256","name":"presaleMintLimit","type":"uint256"},{"internalType":"uint256","name":"superPresaleMintLimit","type":"uint256"},{"internalType":"uint256","name":"publicMintLimit","type":"uint256"}],"name":"setPurchaseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"revealDelayHours","type":"uint256"}],"name":"setRevealDelayHours","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"revealURI","type":"string"}],"name":"setRevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whiteListAddress","type":"address[]"},{"internalType":"bool","name":"bEnable","type":"bool"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518061030001604052807375279cb1ad892bc28ad3b76247bfd0313f3e812573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173c7ef4e34deb3af2fa077a93e2ab723ad3d25307e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001730c96b19cd47ab6821b4862e773020514af97ba3173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738ea1edbcfe2dfa00be4e263083e2168c90d65d2373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001732f7e31b403c5049dd57baeac074da277141abc3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173270a130fa174b6bae83d234b839a8d4e8077ae3c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731cc76429fa40f49ca211256a5a55dc3096073f9073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001732b93a439fc7c0eef3e545c6bd64eeb1c76386e2b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001736e01a1fc44d4987e13a10e099257b3ea2ab78fa773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173d520c00c1192c7ee983d6e6d4e78a01a3ca885c173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017393eef14c08ff2483a39712e1ce8a9ac8f0febc2b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173eac0e6741593ff182d5997fb3b1ca982b61a76c973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173244b32f4550124ebd0b647b79367cc9c08fa62bc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001739ebcea65a37c15a8c20f25c1ff9ba254aeea0bc573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173eff40ff123d59b6f829da715dce9feb283dee46c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173cbb1eb253d51d1a9ddc4078830e070559aa9130f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738eaa6d601cc8e440afb4b4f039d3cbd37c38747973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731694ffc6c8553e723cafdb48b5e649d7b07353ab73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173952314793e37558e11bfc6e2a5dc8b253eb2ce7073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173c4092b7b29bf1f6300f787d948e858285f67af1873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737dd3919dbf52b333a2b50e1e7c57eee3c789e32973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731257fd3321badba6828b58bab72403a4146b6d1173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173e7d68532475c77bd394da6ca0ed7f0130ae0adf273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017353c2833b6ba81d6a5ad10d2eefa2fbc8d1dab4a073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600c906018620006b092919062000a57565b506040518061030001604052806101f461ffff168152602001606461ffff168152602001606461ffff16815260200161019061ffff1681526020016101f461ffff1681526020016104b061ffff168152602001606461ffff168152602001606461ffff168152602001605361ffff168152602001605361ffff168152602001605461ffff16815260200160fa61ffff1681526020016101f461ffff1681526020016101f461ffff1681526020016101f461ffff1681526020016101f461ffff16815260200161038461ffff168152602001606461ffff1681526020016101f461ffff1681526020016101f461ffff1681526020016101f461ffff1681526020016101f461ffff1681526020016103e861ffff1681526020016101f461ffff168152506024906018620007e492919062000ad9565b50612710603c5566b1a2bc2ec50000603d5566d529ae9e860000603e5562015180603f556201518060405560036041556009604255600160435560096044556000604660006101000a81548160ff0219169083151502179055506001604960006101000a81548160ff02191690831515021790555060405180602001604052806000815250604d90805190602001906200088092919062000b24565b5060405180602001604052806000815250604e9080519060200190620008a892919062000b24565b50348015620008b657600080fd5b506040518060400160405280601081526020017f57616c6c537472656574576f6c766573000000000000000000000000000000008152506040518060400160405280600381526020017f575357000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200093b92919062000b24565b5080600190805190602001906200095492919062000b24565b50505060006200096962000a4f60201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000c39565b600033905090565b826018810192821562000ac6579160200282015b8281111562000ac55782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000a6b565b5b50905062000ad5919062000bb5565b5090565b826018810192821562000b11579160200282015b8281111562000b10578251829061ffff1690559160200191906001019062000aed565b5b50905062000b20919062000bb5565b5090565b82805462000b329062000bd4565b90600052602060002090601f01602090048101928262000b56576000855562000ba2565b82601f1062000b7157805160ff191683800117855562000ba2565b8280016001018555821562000ba2579182015b8281111562000ba157825182559160200191906001019062000b84565b5b50905062000bb1919062000bb5565b5090565b5b8082111562000bd057600081600090555060010162000bb6565b5090565b6000600282049050600182168062000bed57607f821691505b6020821081141562000c045762000c0362000c0a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615f248062000c496000396000f3fe60806040526004361061027d5760003560e01c8063856de9701161014f578063bfbe8e66116100c1578063e985e9c51161007a578063e985e9c51461098e578063ed508357146109cb578063efef39a1146109f4578063f2fde38b14610a10578063f392a4d614610a39578063f5ebec8014610a645761027d565b8063bfbe8e6614610882578063c87b56dd146108ab578063d75e6110146108e8578063e0ca014f14610913578063e43f696e1461093c578063e6220770146109655761027d565b8063a22cb46511610113578063a22cb4651461078a578063a811a37b146107b3578063b44302a3146107dc578063b88d4fde14610805578063bceae77b1461082e578063bf8bcee4146108595761027d565b8063856de970146106b75780638ba4cc3c146106e05780638d859f3e146107095780638da5cb5b1461073457806395d89b411461075f5761027d565b8063326c2a4c116101f357806362dc6e21116101ac57806362dc6e2114610593578063632bd295146105be5780636352211e146105e95780636f9170f61461062657806370a0823114610663578063715018a6146106a05761027d565b8063326c2a4c146104995780633ccfd60b146104c257806342842e0e146104d95780634f6ccce71461050257806355f804b31461053f578063611f3f10146105685761027d565b806317b5d8901161024557806317b5d8901461037957806318160ddd146103a257806322adb25d146103cd57806323b872dd146103f657806328bcff111461041f5780632f745c591461045c5761027d565b806301ffc9a7146102825780630442bfa8146102bf57806306fdde03146102e8578063081812fc14610313578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190614730565b610a8f565b6040516102b69190614e78565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190614800565b610b09565b005b3480156102f457600080fd5b506102fd610bf6565b60405161030a9190614e93565b60405180910390f35b34801561031f57600080fd5b5061033a600480360381019061033591906147d3565b610c88565b6040516103479190614e11565b60405180910390f35b34801561035c57600080fd5b50610377600480360381019061037291906145f8565b610d0d565b005b34801561038557600080fd5b506103a0600480360381019061039b9190614840565b610e25565b005b3480156103ae57600080fd5b506103b7610f22565b6040516103c49190615255565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190614638565b610f2f565b005b34801561040257600080fd5b5061041d600480360381019061041891906144e2565b61109f565b005b34801561042b57600080fd5b5061044660048036038101906104419190614475565b6110ff565b6040516104539190614e78565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e91906145f8565b611155565b6040516104909190615255565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb91906147d3565b6111fa565b005b3480156104ce57600080fd5b506104d76114f0565b005b3480156104e557600080fd5b5061050060048036038101906104fb91906144e2565b6116a2565b005b34801561050e57600080fd5b50610529600480360381019061052491906147d3565b6116c2565b6040516105369190615255565b60405180910390f35b34801561054b57600080fd5b506105666004803603810190610561919061478a565b611733565b005b34801561057457600080fd5b5061057d611828565b60405161058a9190615255565b60405180910390f35b34801561059f57600080fd5b506105a861182e565b6040516105b59190615255565b60405180910390f35b3480156105ca57600080fd5b506105d3611834565b6040516105e09190615255565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b91906147d3565b61183a565b60405161061d9190614e11565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190614475565b6118ec565b60405161065a9190614e78565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190614475565b611942565b6040516106979190615255565b60405180910390f35b3480156106ac57600080fd5b506106b56119fa565b005b3480156106c357600080fd5b506106de60048036038101906106d991906145f8565b611b96565b005b3480156106ec57600080fd5b50610707600480360381019061070291906145f8565b611cc8565b005b34801561071557600080fd5b5061071e611e0b565b60405161072b9190615255565b60405180910390f35b34801561074057600080fd5b50610749611e7b565b6040516107569190614e11565b60405180910390f35b34801561076b57600080fd5b50610774611ea5565b6040516107819190614e93565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac91906145b8565b611f37565b005b3480156107bf57600080fd5b506107da60048036038101906107d5919061478a565b6120b8565b005b3480156107e857600080fd5b5061080360048036038101906107fe91906147d3565b6121ad565b005b34801561081157600080fd5b5061082c60048036038101906108279190614535565b612292565b005b34801561083a57600080fd5b506108436122f4565b6040516108509190615255565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b91906147d3565b6122fa565b005b34801561088e57600080fd5b506108a960048036038101906108a491906147d3565b6123df565b005b3480156108b757600080fd5b506108d260048036038101906108cd91906147d3565b6124c4565b6040516108df9190614e93565b60405180910390f35b3480156108f457600080fd5b506108fd6125ea565b60405161090a9190615255565b60405180910390f35b34801561091f57600080fd5b5061093a600480360381019061093591906146f0565b6125f0565b005b34801561094857600080fd5b50610963600480360381019061095e9190614638565b612703565b005b34801561097157600080fd5b5061098c600480360381019061098791906147d3565b612873565b005b34801561099a57600080fd5b506109b560048036038101906109b091906144a2565b612958565b6040516109c29190614e78565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190614694565b6129ec565b005b610a0e6004803603810190610a0991906147d3565b612b69565b005b348015610a1c57600080fd5b50610a376004803603810190610a329190614475565b613027565b005b348015610a4557600080fd5b50610a4e613232565b604051610a5b9190615255565b60405180910390f35b348015610a7057600080fd5b50610a79613238565b604051610a869190615255565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b025750610b018261323e565b5b9050919050565b610b11613320565b73ffffffffffffffffffffffffffffffffffffffff16610b2f611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480610ba55750610b54613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90615175565b60405180910390fd5b81603d8190555080603e819055505050565b606060008054610c0590615546565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3190615546565b8015610c7e5780601f10610c5357610100808354040283529160200191610c7e565b820191906000526020600020905b815481529060010190602001808311610c6157829003601f168201915b5050505050905090565b6000610c9382613328565b610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc990615155565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d188261183a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906151f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da8613320565b73ffffffffffffffffffffffffffffffffffffffff161480610dd75750610dd681610dd1613320565b612958565b5b610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d906150b5565b60405180910390fd5b610e208383613394565b505050565b610e2d613320565b73ffffffffffffffffffffffffffffffffffffffff16610e4b611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480610ec15750610e70613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790615175565b60405180910390fd5b8360418190555082604281905550816043819055508060448190555050505050565b6000600880549050905090565b610f37613320565b73ffffffffffffffffffffffffffffffffffffffff16610f55611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480610fcb5750610f7a613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190615175565b60405180910390fd5b60005b825181101561109a5781604a600085848151811061102e5761102d6156df565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611092906155a9565b91505061100d565b505050565b6110b06110aa613320565b8261344d565b6110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690615215565b60405180910390fd5b6110fa83838361352b565b505050565b6000604a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061116083611942565b82106111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890614ed5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b603c54611207604f613787565b10611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90615035565b60405180910390fd5b61124f611e7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114895760011515604960009054906101000a900460ff16151514156113315760011515604a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132790614fd5565b60405180910390fd5b5b604154811115611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d906151b5565b60405180910390fd5b80604b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c1919061537b565b604b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604354604b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147f90615095565b60405180910390fd5b5b60005b818110156114ec5760006114a0604f613787565b9050603c546114af604f613787565b10156114d8576114bf604f613795565b6114c881613328565b6114d7576114d633826137b4565b5b5b5080806114e4906155a9565b91505061148c565b5050565b6114f8613320565b73ffffffffffffffffffffffffffffffffffffffff16611516611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061158c575061153b613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290615175565b60405180910390fd5b600047905060005b601881101561169e576000612710602483601881106115f5576115f46156df565b5b0154846116029190615402565b61160c91906153d1565b9050600c8260188110611622576116216156df565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611689573d6000803e3d6000fd5b50508080611696906155a9565b9150506115d3565b5050565b6116bd83838360405180602001604052806000815250612292565b505050565b60006116cc610f22565b821061170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490615235565b60405180910390fd5b60088281548110611721576117206156df565b5b90600052602060002001549050919050565b61173b613320565b73ffffffffffffffffffffffffffffffffffffffff16611759611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614806117cf575061177e613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590615175565b60405180910390fd5b80604d90805190602001906118249291906141eb565b5050565b603e5481565b603d5481565b60435481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da906150f5565b60405180910390fd5b80915050919050565b6000604760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906150d5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a02613320565b73ffffffffffffffffffffffffffffffffffffffff16611a20611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480611a965750611a45613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90615175565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b9e613320565b73ffffffffffffffffffffffffffffffffffffffff16611bbc611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480611c325750611be1613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6890615175565b60405180910390fd5b611c7a81613328565b15611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190614f75565b60405180910390fd5b611cc482826137b4565b5050565b611cd0613320565b73ffffffffffffffffffffffffffffffffffffffff16611cee611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480611d645750611d13613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90615175565b60405180910390fd5b60005b81811015611e06576000611dba604f613787565b9050603c54611dc9604f613787565b1015611df257611dd9604f613795565b611de281613328565b611df157611df084826137b4565b5b5b508080611dfe906155a9565b915050611da6565b505050565b6000603f54604c54611e1d919061545c565b4211611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590614f55565b60405180910390fd5b604c54421015611e7257603d549050611e78565b603e5490505b90565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611eb490615546565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee090615546565b8015611f2d5780601f10611f0257610100808354040283529160200191611f2d565b820191906000526020600020905b815481529060010190602001808311611f1057829003601f168201915b5050505050905090565b611f3f613320565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490614fb5565b60405180910390fd5b8060056000611fba613320565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612067613320565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120ac9190614e78565b60405180910390a35050565b6120c0613320565b73ffffffffffffffffffffffffffffffffffffffff166120de611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614806121545750612103613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90615175565b60405180910390fd5b80604e90805190602001906121a99291906141eb565b5050565b6121b5613320565b73ffffffffffffffffffffffffffffffffffffffff166121d3611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061224957506121f8613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90615175565b60405180910390fd5b80603f8190555050565b6122a361229d613320565b8361344d565b6122e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d990615215565b60405180910390fd5b6122ee848484846137d2565b50505050565b60445481565b612302613320565b73ffffffffffffffffffffffffffffffffffffffff16612320611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614806123965750612345613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc90615175565b60405180910390fd5b80603c8190555050565b6123e7613320565b73ffffffffffffffffffffffffffffffffffffffff16612405611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061247b575061242a613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6124ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b190615175565b60405180910390fd5b8060408190555050565b60606124cf82613328565b61250e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250590614ff5565b60405180910390fd5b42604054604c5461251f919061537b565b101561255757604d6125308361382e565b604051602001612541929190614ded565b60405160208183030381529060405290506125e5565b604e805461256490615546565b80601f016020809104026020016040519081016040528092919081815260200182805461259090615546565b80156125dd5780601f106125b2576101008083540402835291602001916125dd565b820191906000526020600020905b8154815290600101906020018083116125c057829003601f168201915b505050505090505b919050565b60415481565b6125f8613320565b73ffffffffffffffffffffffffffffffffffffffff16612616611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061268c575061263b613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6126cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c290615175565b60405180910390fd5b81604660006101000a81548160ff02191690831515021790555080604960006101000a81548160ff0219169083151502179055505050565b61270b613320565b73ffffffffffffffffffffffffffffffffffffffff16612729611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061279f575061274e613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6127de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d590615175565b60405180910390fd5b60005b825181101561286e578160476000858481518110612802576128016156df565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612866906155a9565b9150506127e1565b505050565b61287b613320565b73ffffffffffffffffffffffffffffffffffffffff16612899611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061290f57506128be613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590615175565b60405180910390fd5b80604c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129f4613320565b73ffffffffffffffffffffffffffffffffffffffff16612a12611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480612a885750612a37613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abe90615175565b60405180910390fd5b60005b8251811015612b645760005b82811015612b50576000612aea604f613787565b9050603c54612af9604f613787565b1015612b3c57612b09604f613795565b612b1281613328565b612b3b57612b3a858481518110612b2c57612b2b6156df565b5b6020026020010151826137b4565b5b5b508080612b48906155a9565b915050612ad6565b508080612b5c906155a9565b915050612aca565b505050565b603c54612b76604f613787565b10612bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bad90615035565b60405180910390fd5b612bbe611e7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fc057604154811115612c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2c906151b5565b60405180910390fd5b3481612c3f611e0b565b612c499190615402565b1115612c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8190615015565b60405180910390fd5b604c54421015612eac5760011515604660009054906101000a900460ff1615151415612d445760011515604760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a906151d5565b60405180910390fd5b5b80604860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8f919061537b565b604860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550603f54604c54612de2919061545c565b4211612e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1a90615075565b60405180910390fd5b604254604860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9e90614eb5565b60405180910390fd5b612fbf565b80604560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef7919061537b565b604560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604454604560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb590615115565b60405180910390fd5b5b5b60005b81811015613023576000612fd7604f613787565b9050603c54612fe6604f613787565b101561300f57612ff6604f613795565b612fff81613328565b61300e5761300d33826137b4565b5b5b50808061301b906155a9565b915050612fc3565b5050565b61302f613320565b73ffffffffffffffffffffffffffffffffffffffff1661304d611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614806130c35750613072613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f990615175565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316990614f15565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603c5481565b60425481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061330957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061331957506133188261398f565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166134078361183a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061345882613328565b613497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348e90615055565b60405180910390fd5b60006134a28361183a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061351157508373ffffffffffffffffffffffffffffffffffffffff166134f984610c88565b73ffffffffffffffffffffffffffffffffffffffff16145b8061352257506135218185612958565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661354b8261183a565b73ffffffffffffffffffffffffffffffffffffffff16146135a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359890615195565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360890614f95565b60405180910390fd5b61361c8383836139f9565b613627600082613394565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613677919061545c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136ce919061537b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b60018160000160008282546137aa919061537b565b9250508190555050565b6137ce828260405180602001604052806000815250613b0d565b5050565b6137dd84848461352b565b6137e984848484613b68565b613828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381f90614ef5565b60405180910390fd5b50505050565b60606000821415613876576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061398a565b600082905060005b600082146138a8578080613891906155a9565b915050600a826138a191906153d1565b915061387e565b60008167ffffffffffffffff8111156138c4576138c361570e565b5b6040519080825280601f01601f1916602001820160405280156138f65781602001600182028036833780820191505090505b5090505b600085146139835760018261390f919061545c565b9150600a8561391e91906155f2565b603061392a919061537b565b60f81b8183815181106139405761393f6156df565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561397c91906153d1565b94506138fa565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613a04838383613cff565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a4757613a4281613d04565b613a86565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613a8557613a848382613d4d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ac957613ac481613eba565b613b08565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613b0757613b068282613f8b565b5b5b505050565b613b17838361400a565b613b246000848484613b68565b613b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5a90614ef5565b60405180910390fd5b505050565b6000613b898473ffffffffffffffffffffffffffffffffffffffff166141d8565b15613cf2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613bb2613320565b8786866040518563ffffffff1660e01b8152600401613bd49493929190614e2c565b602060405180830381600087803b158015613bee57600080fd5b505af1925050508015613c1f57506040513d601f19601f82011682018060405250810190613c1c919061475d565b60015b613ca2573d8060008114613c4f576040519150601f19603f3d011682016040523d82523d6000602084013e613c54565b606091505b50600081511415613c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9190614ef5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613cf7565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613d5a84611942565b613d64919061545c565b9050600060076000848152602001908152602001600020549050818114613e49576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613ece919061545c565b9050600060096000848152602001908152602001600020549050600060088381548110613efe57613efd6156df565b5b906000526020600020015490508060088381548110613f2057613f1f6156df565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613f6f57613f6e6156b0565b5b6001900381819060005260206000200160009055905550505050565b6000613f9683611942565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561407a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407190615135565b60405180910390fd5b61408381613328565b156140c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140ba90614f35565b60405180910390fd5b6140cf600083836139f9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461411f919061537b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546141f790615546565b90600052602060002090601f0160209004810192826142195760008555614260565b82601f1061423257805160ff1916838001178555614260565b82800160010185558215614260579182015b8281111561425f578251825591602001919060010190614244565b5b50905061426d9190614271565b5090565b5b8082111561428a576000816000905550600101614272565b5090565b60006142a161429c84615295565b615270565b905080838252602082019050828560208602820111156142c4576142c3615742565b5b60005b858110156142f457816142da8882614382565b8452602084019350602083019250506001810190506142c7565b5050509392505050565b600061431161430c846152c1565b615270565b90508281526020810184848401111561432d5761432c615747565b5b614338848285615504565b509392505050565b600061435361434e846152f2565b615270565b90508281526020810184848401111561436f5761436e615747565b5b61437a848285615504565b509392505050565b60008135905061439181615e92565b92915050565b600082601f8301126143ac576143ab61573d565b5b81356143bc84826020860161428e565b91505092915050565b6000813590506143d481615ea9565b92915050565b6000813590506143e981615ec0565b92915050565b6000815190506143fe81615ec0565b92915050565b600082601f8301126144195761441861573d565b5b81356144298482602086016142fe565b91505092915050565b600082601f8301126144475761444661573d565b5b8135614457848260208601614340565b91505092915050565b60008135905061446f81615ed7565b92915050565b60006020828403121561448b5761448a615751565b5b600061449984828501614382565b91505092915050565b600080604083850312156144b9576144b8615751565b5b60006144c785828601614382565b92505060206144d885828601614382565b9150509250929050565b6000806000606084860312156144fb576144fa615751565b5b600061450986828701614382565b935050602061451a86828701614382565b925050604061452b86828701614460565b9150509250925092565b6000806000806080858703121561454f5761454e615751565b5b600061455d87828801614382565b945050602061456e87828801614382565b935050604061457f87828801614460565b925050606085013567ffffffffffffffff8111156145a05761459f61574c565b5b6145ac87828801614404565b91505092959194509250565b600080604083850312156145cf576145ce615751565b5b60006145dd85828601614382565b92505060206145ee858286016143c5565b9150509250929050565b6000806040838503121561460f5761460e615751565b5b600061461d85828601614382565b925050602061462e85828601614460565b9150509250929050565b6000806040838503121561464f5761464e615751565b5b600083013567ffffffffffffffff81111561466d5761466c61574c565b5b61467985828601614397565b925050602061468a858286016143c5565b9150509250929050565b600080604083850312156146ab576146aa615751565b5b600083013567ffffffffffffffff8111156146c9576146c861574c565b5b6146d585828601614397565b92505060206146e685828601614460565b9150509250929050565b6000806040838503121561470757614706615751565b5b6000614715858286016143c5565b9250506020614726858286016143c5565b9150509250929050565b60006020828403121561474657614745615751565b5b6000614754848285016143da565b91505092915050565b60006020828403121561477357614772615751565b5b6000614781848285016143ef565b91505092915050565b6000602082840312156147a05761479f615751565b5b600082013567ffffffffffffffff8111156147be576147bd61574c565b5b6147ca84828501614432565b91505092915050565b6000602082840312156147e9576147e8615751565b5b60006147f784828501614460565b91505092915050565b6000806040838503121561481757614816615751565b5b600061482585828601614460565b925050602061483685828601614460565b9150509250929050565b6000806000806080858703121561485a57614859615751565b5b600061486887828801614460565b945050602061487987828801614460565b935050604061488a87828801614460565b925050606061489b87828801614460565b91505092959194509250565b6148b081615490565b82525050565b6148bf816154a2565b82525050565b60006148d082615338565b6148da818561534e565b93506148ea818560208601615513565b6148f381615756565b840191505092915050565b600061490982615343565b614913818561535f565b9350614923818560208601615513565b61492c81615756565b840191505092915050565b600061494282615343565b61494c8185615370565b935061495c818560208601615513565b80840191505092915050565b6000815461497581615546565b61497f8186615370565b9450600182166000811461499a57600181146149ab576149de565b60ff198316865281860193506149de565b6149b485615323565b60005b838110156149d6578154818901526001820191506020810190506149b7565b838801955050505b50505092915050565b60006149f4601f8361535f565b91506149ff82615767565b602082019050919050565b6000614a17602b8361535f565b9150614a2282615790565b604082019050919050565b6000614a3a60328361535f565b9150614a45826157df565b604082019050919050565b6000614a5d60268361535f565b9150614a688261582e565b604082019050919050565b6000614a80601c8361535f565b9150614a8b8261587d565b602082019050919050565b6000614aa360158361535f565b9150614aae826158a6565b602082019050919050565b6000614ac660138361535f565b9150614ad1826158cf565b602082019050919050565b6000614ae960248361535f565b9150614af4826158f8565b604082019050919050565b6000614b0c60198361535f565b9150614b1782615947565b602082019050919050565b6000614b2f60218361535f565b9150614b3a82615970565b604082019050919050565b6000614b5260148361535f565b9150614b5d826159bf565b602082019050919050565b6000614b75601c8361535f565b9150614b80826159e8565b602082019050919050565b6000614b98601d8361535f565b9150614ba382615a11565b602082019050919050565b6000614bbb602c8361535f565b9150614bc682615a3a565b604082019050919050565b6000614bde60218361535f565b9150614be982615a89565b604082019050919050565b6000614c0160258361535f565b9150614c0c82615ad8565b604082019050919050565b6000614c2460388361535f565b9150614c2f82615b27565b604082019050919050565b6000614c47602a8361535f565b9150614c5282615b76565b604082019050919050565b6000614c6a60298361535f565b9150614c7582615bc5565b604082019050919050565b6000614c8d601e8361535f565b9150614c9882615c14565b602082019050919050565b6000614cb060208361535f565b9150614cbb82615c3d565b602082019050919050565b6000614cd3602c8361535f565b9150614cde82615c66565b604082019050919050565b6000614cf660208361535f565b9150614d0182615cb5565b602082019050919050565b6000614d1960298361535f565b9150614d2482615cde565b604082019050919050565b6000614d3c60228361535f565b9150614d4782615d2d565b604082019050919050565b6000614d5f601b8361535f565b9150614d6a82615d7c565b602082019050919050565b6000614d8260218361535f565b9150614d8d82615da5565b604082019050919050565b6000614da560318361535f565b9150614db082615df4565b604082019050919050565b6000614dc8602c8361535f565b9150614dd382615e43565b604082019050919050565b614de7816154fa565b82525050565b6000614df98285614968565b9150614e058284614937565b91508190509392505050565b6000602082019050614e2660008301846148a7565b92915050565b6000608082019050614e4160008301876148a7565b614e4e60208301866148a7565b614e5b6040830185614dde565b8181036060830152614e6d81846148c5565b905095945050505050565b6000602082019050614e8d60008301846148b6565b92915050565b60006020820190508181036000830152614ead81846148fe565b905092915050565b60006020820190508181036000830152614ece816149e7565b9050919050565b60006020820190508181036000830152614eee81614a0a565b9050919050565b60006020820190508181036000830152614f0e81614a2d565b9050919050565b60006020820190508181036000830152614f2e81614a50565b9050919050565b60006020820190508181036000830152614f4e81614a73565b9050919050565b60006020820190508181036000830152614f6e81614a96565b9050919050565b60006020820190508181036000830152614f8e81614ab9565b9050919050565b60006020820190508181036000830152614fae81614adc565b9050919050565b60006020820190508181036000830152614fce81614aff565b9050919050565b60006020820190508181036000830152614fee81614b22565b9050919050565b6000602082019050818103600083015261500e81614b45565b9050919050565b6000602082019050818103600083015261502e81614b68565b9050919050565b6000602082019050818103600083015261504e81614b8b565b9050919050565b6000602082019050818103600083015261506e81614bae565b9050919050565b6000602082019050818103600083015261508e81614bd1565b9050919050565b600060208201905081810360008301526150ae81614bf4565b9050919050565b600060208201905081810360008301526150ce81614c17565b9050919050565b600060208201905081810360008301526150ee81614c3a565b9050919050565b6000602082019050818103600083015261510e81614c5d565b9050919050565b6000602082019050818103600083015261512e81614c80565b9050919050565b6000602082019050818103600083015261514e81614ca3565b9050919050565b6000602082019050818103600083015261516e81614cc6565b9050919050565b6000602082019050818103600083015261518e81614ce9565b9050919050565b600060208201905081810360008301526151ae81614d0c565b9050919050565b600060208201905081810360008301526151ce81614d2f565b9050919050565b600060208201905081810360008301526151ee81614d52565b9050919050565b6000602082019050818103600083015261520e81614d75565b9050919050565b6000602082019050818103600083015261522e81614d98565b9050919050565b6000602082019050818103600083015261524e81614dbb565b9050919050565b600060208201905061526a6000830184614dde565b92915050565b600061527a61528b565b90506152868282615578565b919050565b6000604051905090565b600067ffffffffffffffff8211156152b0576152af61570e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156152dc576152db61570e565b5b6152e582615756565b9050602081019050919050565b600067ffffffffffffffff82111561530d5761530c61570e565b5b61531682615756565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615386826154fa565b9150615391836154fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153c6576153c5615623565b5b828201905092915050565b60006153dc826154fa565b91506153e7836154fa565b9250826153f7576153f6615652565b5b828204905092915050565b600061540d826154fa565b9150615418836154fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561545157615450615623565b5b828202905092915050565b6000615467826154fa565b9150615472836154fa565b92508282101561548557615484615623565b5b828203905092915050565b600061549b826154da565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615531578082015181840152602081019050615516565b83811115615540576000848401525b50505050565b6000600282049050600182168061555e57607f821691505b6020821081141561557257615571615681565b5b50919050565b61558182615756565b810181811067ffffffffffffffff821117156155a05761559f61570e565b5b80604052505050565b60006155b4826154fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155e7576155e6615623565b5b600182019050919050565b60006155fd826154fa565b9150615608836154fa565b92508261561857615617615652565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f766572666c6f7720666f722050524553414c455f4d494e545f4c494d495400600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e74206973206e6f74206163746976617465640000000000000000000000600082015250565b7f546f6b656e20616c726561647920657869737400000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f74207265676973746572656420746f2053757065722057686974654c697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b7f45544820616d6f756e74206973206e6f742073756666696369656e7400000000600082015250565b7f507572636861736520776f756c6420657863656564205753575f4d4158000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74206973206e6f742061637469766174656420666f722070726573616c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f766572666c6f7720666f722053555045525f50524553414c455f4d494e545f60008201527f4c494d4954000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d49540000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420757020746f207075726368617365206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74207265676973746572656420746f2057686974654c6973740000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b615e9b81615490565b8114615ea657600080fd5b50565b615eb2816154a2565b8114615ebd57600080fd5b50565b615ec9816154ae565b8114615ed457600080fd5b50565b615ee0816154fa565b8114615eeb57600080fd5b5056fea264697066735822122097dc5c7c9ccafb7d714df5f75711ad0d8533f25d1586514c406aa90d06377ffb64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061027d5760003560e01c8063856de9701161014f578063bfbe8e66116100c1578063e985e9c51161007a578063e985e9c51461098e578063ed508357146109cb578063efef39a1146109f4578063f2fde38b14610a10578063f392a4d614610a39578063f5ebec8014610a645761027d565b8063bfbe8e6614610882578063c87b56dd146108ab578063d75e6110146108e8578063e0ca014f14610913578063e43f696e1461093c578063e6220770146109655761027d565b8063a22cb46511610113578063a22cb4651461078a578063a811a37b146107b3578063b44302a3146107dc578063b88d4fde14610805578063bceae77b1461082e578063bf8bcee4146108595761027d565b8063856de970146106b75780638ba4cc3c146106e05780638d859f3e146107095780638da5cb5b1461073457806395d89b411461075f5761027d565b8063326c2a4c116101f357806362dc6e21116101ac57806362dc6e2114610593578063632bd295146105be5780636352211e146105e95780636f9170f61461062657806370a0823114610663578063715018a6146106a05761027d565b8063326c2a4c146104995780633ccfd60b146104c257806342842e0e146104d95780634f6ccce71461050257806355f804b31461053f578063611f3f10146105685761027d565b806317b5d8901161024557806317b5d8901461037957806318160ddd146103a257806322adb25d146103cd57806323b872dd146103f657806328bcff111461041f5780632f745c591461045c5761027d565b806301ffc9a7146102825780630442bfa8146102bf57806306fdde03146102e8578063081812fc14610313578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190614730565b610a8f565b6040516102b69190614e78565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190614800565b610b09565b005b3480156102f457600080fd5b506102fd610bf6565b60405161030a9190614e93565b60405180910390f35b34801561031f57600080fd5b5061033a600480360381019061033591906147d3565b610c88565b6040516103479190614e11565b60405180910390f35b34801561035c57600080fd5b50610377600480360381019061037291906145f8565b610d0d565b005b34801561038557600080fd5b506103a0600480360381019061039b9190614840565b610e25565b005b3480156103ae57600080fd5b506103b7610f22565b6040516103c49190615255565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190614638565b610f2f565b005b34801561040257600080fd5b5061041d600480360381019061041891906144e2565b61109f565b005b34801561042b57600080fd5b5061044660048036038101906104419190614475565b6110ff565b6040516104539190614e78565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e91906145f8565b611155565b6040516104909190615255565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb91906147d3565b6111fa565b005b3480156104ce57600080fd5b506104d76114f0565b005b3480156104e557600080fd5b5061050060048036038101906104fb91906144e2565b6116a2565b005b34801561050e57600080fd5b50610529600480360381019061052491906147d3565b6116c2565b6040516105369190615255565b60405180910390f35b34801561054b57600080fd5b506105666004803603810190610561919061478a565b611733565b005b34801561057457600080fd5b5061057d611828565b60405161058a9190615255565b60405180910390f35b34801561059f57600080fd5b506105a861182e565b6040516105b59190615255565b60405180910390f35b3480156105ca57600080fd5b506105d3611834565b6040516105e09190615255565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b91906147d3565b61183a565b60405161061d9190614e11565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190614475565b6118ec565b60405161065a9190614e78565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190614475565b611942565b6040516106979190615255565b60405180910390f35b3480156106ac57600080fd5b506106b56119fa565b005b3480156106c357600080fd5b506106de60048036038101906106d991906145f8565b611b96565b005b3480156106ec57600080fd5b50610707600480360381019061070291906145f8565b611cc8565b005b34801561071557600080fd5b5061071e611e0b565b60405161072b9190615255565b60405180910390f35b34801561074057600080fd5b50610749611e7b565b6040516107569190614e11565b60405180910390f35b34801561076b57600080fd5b50610774611ea5565b6040516107819190614e93565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac91906145b8565b611f37565b005b3480156107bf57600080fd5b506107da60048036038101906107d5919061478a565b6120b8565b005b3480156107e857600080fd5b5061080360048036038101906107fe91906147d3565b6121ad565b005b34801561081157600080fd5b5061082c60048036038101906108279190614535565b612292565b005b34801561083a57600080fd5b506108436122f4565b6040516108509190615255565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b91906147d3565b6122fa565b005b34801561088e57600080fd5b506108a960048036038101906108a491906147d3565b6123df565b005b3480156108b757600080fd5b506108d260048036038101906108cd91906147d3565b6124c4565b6040516108df9190614e93565b60405180910390f35b3480156108f457600080fd5b506108fd6125ea565b60405161090a9190615255565b60405180910390f35b34801561091f57600080fd5b5061093a600480360381019061093591906146f0565b6125f0565b005b34801561094857600080fd5b50610963600480360381019061095e9190614638565b612703565b005b34801561097157600080fd5b5061098c600480360381019061098791906147d3565b612873565b005b34801561099a57600080fd5b506109b560048036038101906109b091906144a2565b612958565b6040516109c29190614e78565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190614694565b6129ec565b005b610a0e6004803603810190610a0991906147d3565b612b69565b005b348015610a1c57600080fd5b50610a376004803603810190610a329190614475565b613027565b005b348015610a4557600080fd5b50610a4e613232565b604051610a5b9190615255565b60405180910390f35b348015610a7057600080fd5b50610a79613238565b604051610a869190615255565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b025750610b018261323e565b5b9050919050565b610b11613320565b73ffffffffffffffffffffffffffffffffffffffff16610b2f611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480610ba55750610b54613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90615175565b60405180910390fd5b81603d8190555080603e819055505050565b606060008054610c0590615546565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3190615546565b8015610c7e5780601f10610c5357610100808354040283529160200191610c7e565b820191906000526020600020905b815481529060010190602001808311610c6157829003601f168201915b5050505050905090565b6000610c9382613328565b610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc990615155565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d188261183a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906151f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da8613320565b73ffffffffffffffffffffffffffffffffffffffff161480610dd75750610dd681610dd1613320565b612958565b5b610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d906150b5565b60405180910390fd5b610e208383613394565b505050565b610e2d613320565b73ffffffffffffffffffffffffffffffffffffffff16610e4b611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480610ec15750610e70613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790615175565b60405180910390fd5b8360418190555082604281905550816043819055508060448190555050505050565b6000600880549050905090565b610f37613320565b73ffffffffffffffffffffffffffffffffffffffff16610f55611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480610fcb5750610f7a613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190615175565b60405180910390fd5b60005b825181101561109a5781604a600085848151811061102e5761102d6156df565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611092906155a9565b91505061100d565b505050565b6110b06110aa613320565b8261344d565b6110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690615215565b60405180910390fd5b6110fa83838361352b565b505050565b6000604a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061116083611942565b82106111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890614ed5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b603c54611207604f613787565b10611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90615035565b60405180910390fd5b61124f611e7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114895760011515604960009054906101000a900460ff16151514156113315760011515604a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132790614fd5565b60405180910390fd5b5b604154811115611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d906151b5565b60405180910390fd5b80604b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c1919061537b565b604b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604354604b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147f90615095565b60405180910390fd5b5b60005b818110156114ec5760006114a0604f613787565b9050603c546114af604f613787565b10156114d8576114bf604f613795565b6114c881613328565b6114d7576114d633826137b4565b5b5b5080806114e4906155a9565b91505061148c565b5050565b6114f8613320565b73ffffffffffffffffffffffffffffffffffffffff16611516611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061158c575061153b613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290615175565b60405180910390fd5b600047905060005b601881101561169e576000612710602483601881106115f5576115f46156df565b5b0154846116029190615402565b61160c91906153d1565b9050600c8260188110611622576116216156df565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611689573d6000803e3d6000fd5b50508080611696906155a9565b9150506115d3565b5050565b6116bd83838360405180602001604052806000815250612292565b505050565b60006116cc610f22565b821061170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490615235565b60405180910390fd5b60088281548110611721576117206156df565b5b90600052602060002001549050919050565b61173b613320565b73ffffffffffffffffffffffffffffffffffffffff16611759611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614806117cf575061177e613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590615175565b60405180910390fd5b80604d90805190602001906118249291906141eb565b5050565b603e5481565b603d5481565b60435481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da906150f5565b60405180910390fd5b80915050919050565b6000604760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906150d5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a02613320565b73ffffffffffffffffffffffffffffffffffffffff16611a20611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480611a965750611a45613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90615175565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b9e613320565b73ffffffffffffffffffffffffffffffffffffffff16611bbc611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480611c325750611be1613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6890615175565b60405180910390fd5b611c7a81613328565b15611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190614f75565b60405180910390fd5b611cc482826137b4565b5050565b611cd0613320565b73ffffffffffffffffffffffffffffffffffffffff16611cee611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480611d645750611d13613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90615175565b60405180910390fd5b60005b81811015611e06576000611dba604f613787565b9050603c54611dc9604f613787565b1015611df257611dd9604f613795565b611de281613328565b611df157611df084826137b4565b5b5b508080611dfe906155a9565b915050611da6565b505050565b6000603f54604c54611e1d919061545c565b4211611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590614f55565b60405180910390fd5b604c54421015611e7257603d549050611e78565b603e5490505b90565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611eb490615546565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee090615546565b8015611f2d5780601f10611f0257610100808354040283529160200191611f2d565b820191906000526020600020905b815481529060010190602001808311611f1057829003601f168201915b5050505050905090565b611f3f613320565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490614fb5565b60405180910390fd5b8060056000611fba613320565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612067613320565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120ac9190614e78565b60405180910390a35050565b6120c0613320565b73ffffffffffffffffffffffffffffffffffffffff166120de611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614806121545750612103613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90615175565b60405180910390fd5b80604e90805190602001906121a99291906141eb565b5050565b6121b5613320565b73ffffffffffffffffffffffffffffffffffffffff166121d3611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061224957506121f8613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90615175565b60405180910390fd5b80603f8190555050565b6122a361229d613320565b8361344d565b6122e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d990615215565b60405180910390fd5b6122ee848484846137d2565b50505050565b60445481565b612302613320565b73ffffffffffffffffffffffffffffffffffffffff16612320611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614806123965750612345613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc90615175565b60405180910390fd5b80603c8190555050565b6123e7613320565b73ffffffffffffffffffffffffffffffffffffffff16612405611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061247b575061242a613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6124ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b190615175565b60405180910390fd5b8060408190555050565b60606124cf82613328565b61250e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250590614ff5565b60405180910390fd5b42604054604c5461251f919061537b565b101561255757604d6125308361382e565b604051602001612541929190614ded565b60405160208183030381529060405290506125e5565b604e805461256490615546565b80601f016020809104026020016040519081016040528092919081815260200182805461259090615546565b80156125dd5780601f106125b2576101008083540402835291602001916125dd565b820191906000526020600020905b8154815290600101906020018083116125c057829003601f168201915b505050505090505b919050565b60415481565b6125f8613320565b73ffffffffffffffffffffffffffffffffffffffff16612616611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061268c575061263b613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6126cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c290615175565b60405180910390fd5b81604660006101000a81548160ff02191690831515021790555080604960006101000a81548160ff0219169083151502179055505050565b61270b613320565b73ffffffffffffffffffffffffffffffffffffffff16612729611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061279f575061274e613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6127de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d590615175565b60405180910390fd5b60005b825181101561286e578160476000858481518110612802576128016156df565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612866906155a9565b9150506127e1565b505050565b61287b613320565b73ffffffffffffffffffffffffffffffffffffffff16612899611e7b565b73ffffffffffffffffffffffffffffffffffffffff16148061290f57506128be613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590615175565b60405180910390fd5b80604c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129f4613320565b73ffffffffffffffffffffffffffffffffffffffff16612a12611e7b565b73ffffffffffffffffffffffffffffffffffffffff161480612a885750612a37613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abe90615175565b60405180910390fd5b60005b8251811015612b645760005b82811015612b50576000612aea604f613787565b9050603c54612af9604f613787565b1015612b3c57612b09604f613795565b612b1281613328565b612b3b57612b3a858481518110612b2c57612b2b6156df565b5b6020026020010151826137b4565b5b5b508080612b48906155a9565b915050612ad6565b508080612b5c906155a9565b915050612aca565b505050565b603c54612b76604f613787565b10612bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bad90615035565b60405180910390fd5b612bbe611e7b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fc057604154811115612c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2c906151b5565b60405180910390fd5b3481612c3f611e0b565b612c499190615402565b1115612c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8190615015565b60405180910390fd5b604c54421015612eac5760011515604660009054906101000a900460ff1615151415612d445760011515604760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a906151d5565b60405180910390fd5b5b80604860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8f919061537b565b604860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550603f54604c54612de2919061545c565b4211612e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1a90615075565b60405180910390fd5b604254604860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9e90614eb5565b60405180910390fd5b612fbf565b80604560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef7919061537b565b604560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604454604560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb590615115565b60405180910390fd5b5b5b60005b81811015613023576000612fd7604f613787565b9050603c54612fe6604f613787565b101561300f57612ff6604f613795565b612fff81613328565b61300e5761300d33826137b4565b5b5b50808061301b906155a9565b915050612fc3565b5050565b61302f613320565b73ffffffffffffffffffffffffffffffffffffffff1661304d611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614806130c35750613072613320565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f990615175565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316990614f15565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603c5481565b60425481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061330957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061331957506133188261398f565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166134078361183a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061345882613328565b613497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348e90615055565b60405180910390fd5b60006134a28361183a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061351157508373ffffffffffffffffffffffffffffffffffffffff166134f984610c88565b73ffffffffffffffffffffffffffffffffffffffff16145b8061352257506135218185612958565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661354b8261183a565b73ffffffffffffffffffffffffffffffffffffffff16146135a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359890615195565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360890614f95565b60405180910390fd5b61361c8383836139f9565b613627600082613394565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613677919061545c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136ce919061537b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b60018160000160008282546137aa919061537b565b9250508190555050565b6137ce828260405180602001604052806000815250613b0d565b5050565b6137dd84848461352b565b6137e984848484613b68565b613828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381f90614ef5565b60405180910390fd5b50505050565b60606000821415613876576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061398a565b600082905060005b600082146138a8578080613891906155a9565b915050600a826138a191906153d1565b915061387e565b60008167ffffffffffffffff8111156138c4576138c361570e565b5b6040519080825280601f01601f1916602001820160405280156138f65781602001600182028036833780820191505090505b5090505b600085146139835760018261390f919061545c565b9150600a8561391e91906155f2565b603061392a919061537b565b60f81b8183815181106139405761393f6156df565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561397c91906153d1565b94506138fa565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613a04838383613cff565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a4757613a4281613d04565b613a86565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613a8557613a848382613d4d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ac957613ac481613eba565b613b08565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613b0757613b068282613f8b565b5b5b505050565b613b17838361400a565b613b246000848484613b68565b613b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5a90614ef5565b60405180910390fd5b505050565b6000613b898473ffffffffffffffffffffffffffffffffffffffff166141d8565b15613cf2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613bb2613320565b8786866040518563ffffffff1660e01b8152600401613bd49493929190614e2c565b602060405180830381600087803b158015613bee57600080fd5b505af1925050508015613c1f57506040513d601f19601f82011682018060405250810190613c1c919061475d565b60015b613ca2573d8060008114613c4f576040519150601f19603f3d011682016040523d82523d6000602084013e613c54565b606091505b50600081511415613c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9190614ef5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613cf7565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613d5a84611942565b613d64919061545c565b9050600060076000848152602001908152602001600020549050818114613e49576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613ece919061545c565b9050600060096000848152602001908152602001600020549050600060088381548110613efe57613efd6156df565b5b906000526020600020015490508060088381548110613f2057613f1f6156df565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613f6f57613f6e6156b0565b5b6001900381819060005260206000200160009055905550505050565b6000613f9683611942565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561407a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407190615135565b60405180910390fd5b61408381613328565b156140c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140ba90614f35565b60405180910390fd5b6140cf600083836139f9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461411f919061537b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546141f790615546565b90600052602060002090601f0160209004810192826142195760008555614260565b82601f1061423257805160ff1916838001178555614260565b82800160010185558215614260579182015b8281111561425f578251825591602001919060010190614244565b5b50905061426d9190614271565b5090565b5b8082111561428a576000816000905550600101614272565b5090565b60006142a161429c84615295565b615270565b905080838252602082019050828560208602820111156142c4576142c3615742565b5b60005b858110156142f457816142da8882614382565b8452602084019350602083019250506001810190506142c7565b5050509392505050565b600061431161430c846152c1565b615270565b90508281526020810184848401111561432d5761432c615747565b5b614338848285615504565b509392505050565b600061435361434e846152f2565b615270565b90508281526020810184848401111561436f5761436e615747565b5b61437a848285615504565b509392505050565b60008135905061439181615e92565b92915050565b600082601f8301126143ac576143ab61573d565b5b81356143bc84826020860161428e565b91505092915050565b6000813590506143d481615ea9565b92915050565b6000813590506143e981615ec0565b92915050565b6000815190506143fe81615ec0565b92915050565b600082601f8301126144195761441861573d565b5b81356144298482602086016142fe565b91505092915050565b600082601f8301126144475761444661573d565b5b8135614457848260208601614340565b91505092915050565b60008135905061446f81615ed7565b92915050565b60006020828403121561448b5761448a615751565b5b600061449984828501614382565b91505092915050565b600080604083850312156144b9576144b8615751565b5b60006144c785828601614382565b92505060206144d885828601614382565b9150509250929050565b6000806000606084860312156144fb576144fa615751565b5b600061450986828701614382565b935050602061451a86828701614382565b925050604061452b86828701614460565b9150509250925092565b6000806000806080858703121561454f5761454e615751565b5b600061455d87828801614382565b945050602061456e87828801614382565b935050604061457f87828801614460565b925050606085013567ffffffffffffffff8111156145a05761459f61574c565b5b6145ac87828801614404565b91505092959194509250565b600080604083850312156145cf576145ce615751565b5b60006145dd85828601614382565b92505060206145ee858286016143c5565b9150509250929050565b6000806040838503121561460f5761460e615751565b5b600061461d85828601614382565b925050602061462e85828601614460565b9150509250929050565b6000806040838503121561464f5761464e615751565b5b600083013567ffffffffffffffff81111561466d5761466c61574c565b5b61467985828601614397565b925050602061468a858286016143c5565b9150509250929050565b600080604083850312156146ab576146aa615751565b5b600083013567ffffffffffffffff8111156146c9576146c861574c565b5b6146d585828601614397565b92505060206146e685828601614460565b9150509250929050565b6000806040838503121561470757614706615751565b5b6000614715858286016143c5565b9250506020614726858286016143c5565b9150509250929050565b60006020828403121561474657614745615751565b5b6000614754848285016143da565b91505092915050565b60006020828403121561477357614772615751565b5b6000614781848285016143ef565b91505092915050565b6000602082840312156147a05761479f615751565b5b600082013567ffffffffffffffff8111156147be576147bd61574c565b5b6147ca84828501614432565b91505092915050565b6000602082840312156147e9576147e8615751565b5b60006147f784828501614460565b91505092915050565b6000806040838503121561481757614816615751565b5b600061482585828601614460565b925050602061483685828601614460565b9150509250929050565b6000806000806080858703121561485a57614859615751565b5b600061486887828801614460565b945050602061487987828801614460565b935050604061488a87828801614460565b925050606061489b87828801614460565b91505092959194509250565b6148b081615490565b82525050565b6148bf816154a2565b82525050565b60006148d082615338565b6148da818561534e565b93506148ea818560208601615513565b6148f381615756565b840191505092915050565b600061490982615343565b614913818561535f565b9350614923818560208601615513565b61492c81615756565b840191505092915050565b600061494282615343565b61494c8185615370565b935061495c818560208601615513565b80840191505092915050565b6000815461497581615546565b61497f8186615370565b9450600182166000811461499a57600181146149ab576149de565b60ff198316865281860193506149de565b6149b485615323565b60005b838110156149d6578154818901526001820191506020810190506149b7565b838801955050505b50505092915050565b60006149f4601f8361535f565b91506149ff82615767565b602082019050919050565b6000614a17602b8361535f565b9150614a2282615790565b604082019050919050565b6000614a3a60328361535f565b9150614a45826157df565b604082019050919050565b6000614a5d60268361535f565b9150614a688261582e565b604082019050919050565b6000614a80601c8361535f565b9150614a8b8261587d565b602082019050919050565b6000614aa360158361535f565b9150614aae826158a6565b602082019050919050565b6000614ac660138361535f565b9150614ad1826158cf565b602082019050919050565b6000614ae960248361535f565b9150614af4826158f8565b604082019050919050565b6000614b0c60198361535f565b9150614b1782615947565b602082019050919050565b6000614b2f60218361535f565b9150614b3a82615970565b604082019050919050565b6000614b5260148361535f565b9150614b5d826159bf565b602082019050919050565b6000614b75601c8361535f565b9150614b80826159e8565b602082019050919050565b6000614b98601d8361535f565b9150614ba382615a11565b602082019050919050565b6000614bbb602c8361535f565b9150614bc682615a3a565b604082019050919050565b6000614bde60218361535f565b9150614be982615a89565b604082019050919050565b6000614c0160258361535f565b9150614c0c82615ad8565b604082019050919050565b6000614c2460388361535f565b9150614c2f82615b27565b604082019050919050565b6000614c47602a8361535f565b9150614c5282615b76565b604082019050919050565b6000614c6a60298361535f565b9150614c7582615bc5565b604082019050919050565b6000614c8d601e8361535f565b9150614c9882615c14565b602082019050919050565b6000614cb060208361535f565b9150614cbb82615c3d565b602082019050919050565b6000614cd3602c8361535f565b9150614cde82615c66565b604082019050919050565b6000614cf660208361535f565b9150614d0182615cb5565b602082019050919050565b6000614d1960298361535f565b9150614d2482615cde565b604082019050919050565b6000614d3c60228361535f565b9150614d4782615d2d565b604082019050919050565b6000614d5f601b8361535f565b9150614d6a82615d7c565b602082019050919050565b6000614d8260218361535f565b9150614d8d82615da5565b604082019050919050565b6000614da560318361535f565b9150614db082615df4565b604082019050919050565b6000614dc8602c8361535f565b9150614dd382615e43565b604082019050919050565b614de7816154fa565b82525050565b6000614df98285614968565b9150614e058284614937565b91508190509392505050565b6000602082019050614e2660008301846148a7565b92915050565b6000608082019050614e4160008301876148a7565b614e4e60208301866148a7565b614e5b6040830185614dde565b8181036060830152614e6d81846148c5565b905095945050505050565b6000602082019050614e8d60008301846148b6565b92915050565b60006020820190508181036000830152614ead81846148fe565b905092915050565b60006020820190508181036000830152614ece816149e7565b9050919050565b60006020820190508181036000830152614eee81614a0a565b9050919050565b60006020820190508181036000830152614f0e81614a2d565b9050919050565b60006020820190508181036000830152614f2e81614a50565b9050919050565b60006020820190508181036000830152614f4e81614a73565b9050919050565b60006020820190508181036000830152614f6e81614a96565b9050919050565b60006020820190508181036000830152614f8e81614ab9565b9050919050565b60006020820190508181036000830152614fae81614adc565b9050919050565b60006020820190508181036000830152614fce81614aff565b9050919050565b60006020820190508181036000830152614fee81614b22565b9050919050565b6000602082019050818103600083015261500e81614b45565b9050919050565b6000602082019050818103600083015261502e81614b68565b9050919050565b6000602082019050818103600083015261504e81614b8b565b9050919050565b6000602082019050818103600083015261506e81614bae565b9050919050565b6000602082019050818103600083015261508e81614bd1565b9050919050565b600060208201905081810360008301526150ae81614bf4565b9050919050565b600060208201905081810360008301526150ce81614c17565b9050919050565b600060208201905081810360008301526150ee81614c3a565b9050919050565b6000602082019050818103600083015261510e81614c5d565b9050919050565b6000602082019050818103600083015261512e81614c80565b9050919050565b6000602082019050818103600083015261514e81614ca3565b9050919050565b6000602082019050818103600083015261516e81614cc6565b9050919050565b6000602082019050818103600083015261518e81614ce9565b9050919050565b600060208201905081810360008301526151ae81614d0c565b9050919050565b600060208201905081810360008301526151ce81614d2f565b9050919050565b600060208201905081810360008301526151ee81614d52565b9050919050565b6000602082019050818103600083015261520e81614d75565b9050919050565b6000602082019050818103600083015261522e81614d98565b9050919050565b6000602082019050818103600083015261524e81614dbb565b9050919050565b600060208201905061526a6000830184614dde565b92915050565b600061527a61528b565b90506152868282615578565b919050565b6000604051905090565b600067ffffffffffffffff8211156152b0576152af61570e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156152dc576152db61570e565b5b6152e582615756565b9050602081019050919050565b600067ffffffffffffffff82111561530d5761530c61570e565b5b61531682615756565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615386826154fa565b9150615391836154fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153c6576153c5615623565b5b828201905092915050565b60006153dc826154fa565b91506153e7836154fa565b9250826153f7576153f6615652565b5b828204905092915050565b600061540d826154fa565b9150615418836154fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561545157615450615623565b5b828202905092915050565b6000615467826154fa565b9150615472836154fa565b92508282101561548557615484615623565b5b828203905092915050565b600061549b826154da565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615531578082015181840152602081019050615516565b83811115615540576000848401525b50505050565b6000600282049050600182168061555e57607f821691505b6020821081141561557257615571615681565b5b50919050565b61558182615756565b810181811067ffffffffffffffff821117156155a05761559f61570e565b5b80604052505050565b60006155b4826154fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155e7576155e6615623565b5b600182019050919050565b60006155fd826154fa565b9150615608836154fa565b92508261561857615617615652565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f766572666c6f7720666f722050524553414c455f4d494e545f4c494d495400600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e74206973206e6f74206163746976617465640000000000000000000000600082015250565b7f546f6b656e20616c726561647920657869737400000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f74207265676973746572656420746f2053757065722057686974654c697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b7f45544820616d6f756e74206973206e6f742073756666696369656e7400000000600082015250565b7f507572636861736520776f756c6420657863656564205753575f4d4158000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74206973206e6f742061637469766174656420666f722070726573616c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f766572666c6f7720666f722053555045525f50524553414c455f4d494e545f60008201527f4c494d4954000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d49540000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420757020746f207075726368617365206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74207265676973746572656420746f2057686974654c6973740000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b615e9b81615490565b8114615ea657600080fd5b50565b615eb2816154a2565b8114615ebd57600080fd5b50565b615ec9816154ae565b8114615ed457600080fd5b50565b615ee0816154fa565b8114615eeb57600080fd5b5056fea264697066735822122097dc5c7c9ccafb7d714df5f75711ad0d8533f25d1586514c406aa90d06377ffb64736f6c63430008070033

Deployed Bytecode Sourcemap

46971:9844:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39256:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50294:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22885:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24467:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23990:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50589:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40059:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51438:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25526:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51808:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39640:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53563:1033;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56507:305;;;;;;;;;;;;;:::i;:::-;;25973:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40249:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52360:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48914:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48866:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49144:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22492:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51687:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22135:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37735:148;;;;;;;;;;;;;:::i;:::-;;53382:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52472:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51937:300;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37019:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23054:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24847:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52245:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50033:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26229:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49194:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50486:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50155:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56143:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49060:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50949:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51193:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49904:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25245:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52853:521;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54604:1531;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38038:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48829:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49100:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39256:300;39403:4;39460:35;39445:50;;;:11;:50;;;;:103;;;;39512:36;39536:11;39512:23;:36::i;:::-;39445:103;39425:123;;39256:300;;;:::o;50294:184::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;50413:16:::1;50397:13;:32;;;;50455:15;50440:12;:30;;;;50294:184:::0;;:::o;22885:100::-;22939:13;22972:5;22965:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22885:100;:::o;24467:308::-;24588:7;24635:16;24643:7;24635;:16::i;:::-;24613:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24743:15;:24;24759:7;24743:24;;;;;;;;;;;;;;;;;;;;;24736:31;;24467:308;;;:::o;23990:411::-;24071:13;24087:23;24102:7;24087:14;:23::i;:::-;24071:39;;24135:5;24129:11;;:2;:11;;;;24121:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24229:5;24213:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24238:37;24255:5;24262:12;:10;:12::i;:::-;24238:16;:37::i;:::-;24213:62;24191:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24372:21;24381:2;24385:7;24372:8;:21::i;:::-;24060:341;23990:411;;:::o;50589:352::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;50767:13:::1;50750:14;:30;;;;50812:16;50791:18;:37;;;;50866:21;50839:24;:48;;;;50918:15;50898:17;:35;;;;50589:352:::0;;;;:::o;40059:113::-;40120:7;40147:10;:17;;;;40140:24;;40059:113;:::o;51438:241::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;51546:9:::1;51541:131;51565:16;:23;51561:1;:27;51541:131;;;51653:7;51610:19;:40;51630:16;51647:1;51630:19;;;;;;;;:::i;:::-;;;;;;;;51610:40;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;51590:3;;;;;:::i;:::-;;;;51541:131;;;;51438:241:::0;;:::o;25526:376::-;25735:41;25754:12;:10;:12::i;:::-;25768:7;25735:18;:41::i;:::-;25713:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25866:28;25876:4;25882:2;25886:7;25866:9;:28::i;:::-;25526:376;;;:::o;51808:117::-;51868:4;51892:19;:25;51912:4;51892:25;;;;;;;;;;;;;;;;;;;;;;;;;51885:32;;51808:117;;;:::o;39640:343::-;39782:7;39837:23;39854:5;39837:16;:23::i;:::-;39829:5;:31;39807:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;39949:12;:19;39962:5;39949:19;;;;;;;;;;;;;;;:26;39969:5;39949:26;;;;;;;;;;;;39942:33;;39640:343;;;;:::o;53563:1033::-;53667:7;;53644:20;:10;:18;:20::i;:::-;:30;53636:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;53746:7;:5;:7::i;:::-;53732:21;;:10;:21;;;53728:558;;53803:4;53774:33;;:25;;;;;;;;;;;:33;;;53770:162;;;53871:4;53836:39;;:19;:31;53856:10;53836:31;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;53828:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;53770:162;53972:14;;53954;:32;;53946:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;54127:14;54083:29;:41;54113:10;54083:41;;;;;;;;;;;;;;;;:58;;;;:::i;:::-;54039:29;:41;54069:10;54039:41;;;;;;;;;;;;;;;:102;;;;54209:24;;54164:29;:41;54194:10;54164:41;;;;;;;;;;;;;;;;:69;;54156:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;53728:558;54303:9;54298:291;54322:14;54318:1;:18;54298:291;;;54358:15;54376:20;:10;:18;:20::i;:::-;54358:38;;54440:7;;54417:20;:10;:18;:20::i;:::-;:30;54413:165;;;54468:22;:10;:20;:22::i;:::-;54514:16;54522:7;54514;:16::i;:::-;54509:53;;54532:30;54542:10;54554:7;54532:9;:30::i;:::-;54509:53;54413:165;54343:246;54338:3;;;;;:::i;:::-;;;;54298:291;;;;53563:1033;:::o;56507:305::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;56557:22:::1;56582:21;56557:46;;56621:9;56616:189;56641:2;56637:1;:6;56616:189;;;56666:14;56725:5;56700:19;56720:1;56700:22;;;;;;;:::i;:::-;;;;56683:14;:39;;;;:::i;:::-;:47;;;;:::i;:::-;56666:64;;56753:19;56773:1;56753:22;;;;;;;:::i;:::-;;;;;;;;;;;;;56745:40;;:48;56786:6;56745:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56651:154;56646:3;;;;;:::i;:::-;;;;56616:189;;;;56546:266;56507:305::o:0;25973:185::-;26111:39;26128:4;26134:2;26138:7;26111:39;;;;;;;;;;;;:16;:39::i;:::-;25973:185;;;:::o;40249:320::-;40369:7;40424:30;:28;:30::i;:::-;40416:5;:38;40394:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;40544:10;40555:5;40544:17;;;;;;;;:::i;:::-;;;;;;;;;;40537:24;;40249:320;;;:::o;52360:104::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;52449:7:::1;52433:13;:23;;;;;;;;;;;;:::i;:::-;;52360:104:::0;:::o;48914:40::-;;;;:::o;48866:41::-;;;;:::o;49144:43::-;;;;:::o;22492:326::-;22609:7;22634:13;22650:7;:16;22658:7;22650:16;;;;;;;;;;;;;;;;;;;;;22634:32;;22716:1;22699:19;;:5;:19;;;;22677:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;22805:5;22798:12;;;22492:326;;;:::o;51687:113::-;51745:4;51769:17;:23;51787:4;51769:23;;;;;;;;;;;;;;;;;;;;;;;;;51762:30;;51687:113;;;:::o;22135:295::-;22252:7;22316:1;22299:19;;:5;:19;;;;22277:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;22406:9;:16;22416:5;22406:16;;;;;;;;;;;;;;;;22399:23;;22135:295;;;:::o;37735:148::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;37842:1:::1;37805:40;;37826:6;;;;;;;;;;;37805:40;;;;;;;;;;;;37873:1;37856:6;;:19;;;;;;;;;;;;;;;;;;37735:148::o:0;53382:173::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;53474:16:::1;53482:7;53474;:16::i;:::-;53473:17;53465:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;53525:22;53535:2;53539:7;53525:9;:22::i;:::-;53382:173:::0;;:::o;52472:373::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;52560:9:::1;52555:283;52579:14;52575:1;:18;52555:283;;;52615:15;52633:20;:10;:18;:20::i;:::-;52615:38;;52697:7;;52674:20;:10;:18;:20::i;:::-;:30;52670:157;;;52725:22;:10;:20;:22::i;:::-;52771:16;52779:7;52771;:16::i;:::-;52766:45;;52789:22;52799:2;52803:7;52789:9;:22::i;:::-;52766:45;52670:157;52600:238;52595:3;;;;;:::i;:::-;;;;52555:283;;;;52472:373:::0;;:::o;51937:300::-;51975:7;52039:13;;52021:15;;:31;;;;:::i;:::-;52003:15;:49;51995:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;52114:15;;52096;:33;52092:138;;;52153:13;;52146:20;;;;52092:138;52206:12;;52199:19;;51937:300;;:::o;37019:87::-;37065:7;37092:6;;;;;;;;;;;37085:13;;37019:87;:::o;23054:104::-;23110:13;23143:7;23136:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23054:104;:::o;24847:327::-;24994:12;:10;:12::i;:::-;24982:24;;:8;:24;;;;24974:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25094:8;25049:18;:32;25068:12;:10;:12::i;:::-;25049:32;;;;;;;;;;;;;;;:42;25082:8;25049:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25147:8;25118:48;;25133:12;:10;:12::i;:::-;25118:48;;;25157:8;25118:48;;;;;;:::i;:::-;;;;;;;;24847:327;;:::o;52245:107::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;52335:9:::1;52322:10;:22;;;;;;;;;;;;:::i;:::-;;52245:107:::0;:::o;50033:114::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;50127:12:::1;50111:13;:28;;;;50033:114:::0;:::o;26229:365::-;26418:41;26437:12;:10;:12::i;:::-;26451:7;26418:18;:41::i;:::-;26396:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26547:39;26561:4;26567:2;26571:7;26580:5;26547:13;:39::i;:::-;26229:365;;;;:::o;49194:36::-;;;;:::o;50486:95::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;50565:8:::1;50555:7;:18;;;;50486:95:::0;:::o;50155:131::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;50262:16:::1;50241:18;:37;;;;50155:131:::0;:::o;56143:356::-;56216:13;56255:16;56263:7;56255;:16::i;:::-;56247:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;56352:15;56331:18;;56313:15;;:36;;;;:::i;:::-;:54;56309:153;;;56415:13;56430:18;:7;:16;:18::i;:::-;56398:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56384:66;;;;56309:153;56481:10;56474:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56143:356;;;;:::o;49060:33::-;;;;:::o;50949:236::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;51090:23:::1;51064;;:49;;;;;;;;;;;;;;;;;;51152:25;51124;;:53;;;;;;;;;;;;;;;;;;50949:236:::0;;:::o;51193:237::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;51299:9:::1;51294:129;51318:16;:23;51314:1;:27;51294:129;;;51404:7;51363:17;:38;51381:16;51398:1;51381:19;;;;;;;;:::i;:::-;;;;;;;;51363:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;51343:3;;;;;:::i;:::-;;;;51294:129;;;;51193:237:::0;;:::o;49904:121::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;50003:14:::1;49985:15;:32;;;;49904:121:::0;:::o;25245:214::-;25387:4;25416:18;:25;25435:5;25416:25;;;;;;;;;;;;;;;:35;25442:8;25416:35;;;;;;;;;;;;;;;;;;;;;;;;;25409:42;;25245:214;;;;:::o;52853:521::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;52972:9:::1;52967:400;52991:14;:21;52987:1;:25;52967:400;;;53039:9;53034:322;53058:14;53054:1;:18;53034:322;;;53098:15;53116:20;:10;:18;:20::i;:::-;53098:38;;53184:7;;53161:20;:10;:18;:20::i;:::-;:30;53157:184;;;53216:22;:10;:20;:22::i;:::-;53266:16;53274:7;53266;:16::i;:::-;53261:60;;53284:37;53294:14;53309:1;53294:17;;;;;;;;:::i;:::-;;;;;;;;53313:7;53284:9;:37::i;:::-;53261:60;53157:184;53079:277;53074:3;;;;;:::i;:::-;;;;53034:322;;;;53014:3;;;;;:::i;:::-;;;;52967:400;;;;52853:521:::0;;:::o;54604:1531::-;54705:7;;54682:20;:10;:18;:20::i;:::-;:30;54674:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;54776:7;:5;:7::i;:::-;54762:21;;:10;:21;;;54758:1067;;54826:14;;54808;:32;;54800:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;54929:9;54911:14;54901:7;:5;:7::i;:::-;:24;;;;:::i;:::-;:37;;54893:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;55009:15;;54991;:33;54987:827;;;55076:4;55049:31;;:23;;;;;;;;;;;:31;;;55045:160;;;55146:4;55113:37;;:17;:29;55131:10;55113:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;55105:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;55045:160;55301:14;55262:24;:36;55287:10;55262:36;;;;;;;;;;;;;;;;:53;;;;:::i;:::-;55223:24;:36;55248:10;55223:36;;;;;;;;;;;;;;;:92;;;;55378:13;;55360:15;;:31;;;;:::i;:::-;55342:15;:49;55334:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;55497:18;;55457:24;:36;55482:10;55457:36;;;;;;;;;;;;;;;;:58;;55449:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;54987:827;;;55667:14;55629:23;:35;55653:10;55629:35;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;55591:23;:35;55615:10;55591:35;;;;;;;;;;;;;;;:90;;;;55747:17;;55708:23;:35;55732:10;55708:35;;;;;;;;;;;;;;;;:56;;55700:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;54987:827;54758:1067;55842:9;55837:291;55861:14;55857:1;:18;55837:291;;;55897:15;55915:20;:10;:18;:20::i;:::-;55897:38;;55979:7;;55956:20;:10;:18;:20::i;:::-;:30;55952:165;;;56007:22;:10;:20;:22::i;:::-;56053:16;56061:7;56053;:16::i;:::-;56048:53;;56071:30;56081:10;56093:7;56071:9;:30::i;:::-;56048:53;55952:165;55882:246;55877:3;;;;;:::i;:::-;;;;55837:291;;;;54604:1531;:::o;38038:281::-;37264:12;:10;:12::i;:::-;37253:23;;:7;:5;:7::i;:::-;:23;;;:51;;;;37292:12;:10;:12::i;:::-;37280:24;;:8;;;;;;;;;;;:24;;;37253:51;37231:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;38161:1:::1;38141:22;;:8;:22;;;;38119:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;38274:8;38245:38;;38266:6;;;;;;;;;;;38245:38;;;;;;;;;;;;38303:8;38294:6;;:17;;;;;;;;;;;;;;;;;;38038:281:::0;:::o;48829:30::-;;;;:::o;49100:37::-;;;;:::o;21716:355::-;21863:4;21920:25;21905:40;;;:11;:40;;;;:105;;;;21977:33;21962:48;;;:11;:48;;;;21905:105;:158;;;;22027:36;22051:11;22027:23;:36::i;:::-;21905:158;21885:178;;21716:355;;;:::o;16895:98::-;16948:7;16975:10;16968:17;;16895:98;:::o;28141:127::-;28206:4;28258:1;28230:30;;:7;:16;28238:7;28230:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28223:37;;28141:127;;;:::o;32264:174::-;32366:2;32339:15;:24;32355:7;32339:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32422:7;32418:2;32384:46;;32393:23;32408:7;32393:14;:23::i;:::-;32384:46;;;;;;;;;;;;32264:174;;:::o;28435:452::-;28564:4;28608:16;28616:7;28608;:16::i;:::-;28586:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28707:13;28723:23;28738:7;28723:14;:23::i;:::-;28707:39;;28776:5;28765:16;;:7;:16;;;:64;;;;28822:7;28798:31;;:20;28810:7;28798:11;:20::i;:::-;:31;;;28765:64;:113;;;;28846:32;28863:5;28870:7;28846:16;:32::i;:::-;28765:113;28757:122;;;28435:452;;;;:::o;31531:615::-;31704:4;31677:31;;:23;31692:7;31677:14;:23::i;:::-;:31;;;31655:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;31810:1;31796:16;;:2;:16;;;;31788:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31866:39;31887:4;31893:2;31897:7;31866:20;:39::i;:::-;31970:29;31987:1;31991:7;31970:8;:29::i;:::-;32031:1;32012:9;:15;32022:4;32012:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32060:1;32043:9;:13;32053:2;32043:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32091:2;32072:7;:16;32080:7;32072:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32130:7;32126:2;32111:27;;32120:4;32111:27;;;;;;;;;;;;31531:615;;;:::o;46465:114::-;46530:7;46557;:14;;;46550:21;;46465:114;;;:::o;46587:117::-;46684:1;46666:7;:14;;;:19;;;;;;;:::i;:::-;;;;;;;;46587:117;:::o;29229:110::-;29305:26;29315:2;29319:7;29305:26;;;;;;;;;;;;:9;:26::i;:::-;29229:110;;:::o;27476:352::-;27633:28;27643:4;27649:2;27653:7;27633:9;:28::i;:::-;27694:48;27717:4;27723:2;27727:7;27736:5;27694:22;:48::i;:::-;27672:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;27476:352;;;;:::o;17567:723::-;17623:13;17853:1;17844:5;:10;17840:53;;;17871:10;;;;;;;;;;;;;;;;;;;;;17840:53;17903:12;17918:5;17903:20;;17934:14;17959:78;17974:1;17966:4;:9;17959:78;;17992:8;;;;;:::i;:::-;;;;18023:2;18015:10;;;;;:::i;:::-;;;17959:78;;;18047:19;18079:6;18069:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18047:39;;18097:154;18113:1;18104:5;:10;18097:154;;18141:1;18131:11;;;;;:::i;:::-;;;18208:2;18200:5;:10;;;;:::i;:::-;18187:2;:24;;;;:::i;:::-;18174:39;;18157:6;18164;18157:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18237:2;18228:11;;;;;:::i;:::-;;;18097:154;;;18275:6;18261:21;;;;;17567:723;;;;:::o;20167:207::-;20297:4;20341:25;20326:40;;;:11;:40;;;;20319:47;;20167:207;;;:::o;41182:589::-;41326:45;41353:4;41359:2;41363:7;41326:26;:45::i;:::-;41404:1;41388:18;;:4;:18;;;41384:187;;;41423:40;41455:7;41423:31;:40::i;:::-;41384:187;;;41493:2;41485:10;;:4;:10;;;41481:90;;41512:47;41545:4;41551:7;41512:32;:47::i;:::-;41481:90;41384:187;41599:1;41585:16;;:2;:16;;;41581:183;;;41618:45;41655:7;41618:36;:45::i;:::-;41581:183;;;41691:4;41685:10;;:2;:10;;;41681:83;;41712:40;41740:2;41744:7;41712:27;:40::i;:::-;41681:83;41581:183;41182:589;;;:::o;29566:321::-;29696:18;29702:2;29706:7;29696:5;:18::i;:::-;29747:54;29778:1;29782:2;29786:7;29795:5;29747:22;:54::i;:::-;29725:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29566:321;;;:::o;33003:1053::-;33158:4;33179:15;:2;:13;;;:15::i;:::-;33175:874;;;33248:2;33232:36;;;33291:12;:10;:12::i;:::-;33326:4;33353:7;33383:5;33232:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33211:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33611:1;33594:6;:13;:18;33590:389;;;33637:108;;;;;;;;;;:::i;:::-;;;;;;;;33590:389;33929:6;33923:13;33914:6;33910:2;33906:15;33899:38;33211:783;33481:45;;;33471:55;;;:6;:55;;;;33464:62;;;;;33175:874;34033:4;34026:11;;33003:1053;;;;;;;:::o;34669:126::-;;;;:::o;42494:164::-;42598:10;:17;;;;42571:15;:24;42587:7;42571:24;;;;;;;;;;;:44;;;;42626:10;42642:7;42626:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42494:164;:::o;43285:1002::-;43565:22;43615:1;43590:22;43607:4;43590:16;:22::i;:::-;:26;;;;:::i;:::-;43565:51;;43627:18;43648:17;:26;43666:7;43648:26;;;;;;;;;;;;43627:47;;43795:14;43781:10;:28;43777:328;;43826:19;43848:12;:18;43861:4;43848:18;;;;;;;;;;;;;;;:34;43867:14;43848:34;;;;;;;;;;;;43826:56;;43932:11;43899:12;:18;43912:4;43899:18;;;;;;;;;;;;;;;:30;43918:10;43899:30;;;;;;;;;;;:44;;;;44049:10;44016:17;:30;44034:11;44016:30;;;;;;;;;;;:43;;;;43811:294;43777:328;44201:17;:26;44219:7;44201:26;;;;;;;;;;;44194:33;;;44245:12;:18;44258:4;44245:18;;;;;;;;;;;;;;;:34;44264:14;44245:34;;;;;;;;;;;44238:41;;;43380:907;;43285:1002;;:::o;44582:1079::-;44835:22;44880:1;44860:10;:17;;;;:21;;;;:::i;:::-;44835:46;;44892:18;44913:15;:24;44929:7;44913:24;;;;;;;;;;;;44892:45;;45264:19;45286:10;45297:14;45286:26;;;;;;;;:::i;:::-;;;;;;;;;;45264:48;;45350:11;45325:10;45336;45325:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45461:10;45430:15;:28;45446:11;45430:28;;;;;;;;;;;:41;;;;45602:15;:24;45618:7;45602:24;;;;;;;;;;;45595:31;;;45637:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44653:1008;;;44582:1079;:::o;42072:221::-;42157:14;42174:20;42191:2;42174:16;:20::i;:::-;42157:37;;42232:7;42205:12;:16;42218:2;42205:16;;;;;;;;;;;;;;;:24;42222:6;42205:24;;;;;;;;;;;:34;;;;42279:6;42250:17;:26;42268:7;42250:26;;;;;;;;;;;:35;;;;42146:147;42072:221;;:::o;30223:382::-;30317:1;30303:16;;:2;:16;;;;30295:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30376:16;30384:7;30376;:16::i;:::-;30375:17;30367:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30438:45;30467:1;30471:2;30475:7;30438:20;:45::i;:::-;30513:1;30496:9;:13;30506:2;30496:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30544:2;30525:7;:16;30533:7;30525:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30589:7;30585:2;30564:33;;30581:1;30564:33;;;;;;;;;;;;30223:382;;:::o;8294:444::-;8354:4;8562:12;8686:7;8674:20;8666:28;;8729:1;8722:4;:8;8715:15;;;8294:444;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:678::-;6848:6;6856;6905:2;6893:9;6884:7;6880:23;6876:32;6873:119;;;6911:79;;:::i;:::-;6873:119;7059:1;7048:9;7044:17;7031:31;7089:18;7081:6;7078:30;7075:117;;;7111:79;;:::i;:::-;7075:117;7216:78;7286:7;7277:6;7266:9;7262:22;7216:78;:::i;:::-;7206:88;;7002:302;7343:2;7369:50;7411:7;7402:6;7391:9;7387:22;7369:50;:::i;:::-;7359:60;;7314:115;6758:678;;;;;:::o;7442:684::-;7535:6;7543;7592:2;7580:9;7571:7;7567:23;7563:32;7560:119;;;7598:79;;:::i;:::-;7560:119;7746:1;7735:9;7731:17;7718:31;7776:18;7768:6;7765:30;7762:117;;;7798:79;;:::i;:::-;7762:117;7903:78;7973:7;7964:6;7953:9;7949:22;7903:78;:::i;:::-;7893:88;;7689:302;8030:2;8056:53;8101:7;8092:6;8081:9;8077:22;8056:53;:::i;:::-;8046:63;;8001:118;7442:684;;;;;:::o;8132:462::-;8194:6;8202;8251:2;8239:9;8230:7;8226:23;8222:32;8219:119;;;8257:79;;:::i;:::-;8219:119;8377:1;8402:50;8444:7;8435:6;8424:9;8420:22;8402:50;:::i;:::-;8392:60;;8348:114;8501:2;8527:50;8569:7;8560:6;8549:9;8545:22;8527:50;:::i;:::-;8517:60;;8472:115;8132:462;;;;;:::o;8600:327::-;8658:6;8707:2;8695:9;8686:7;8682:23;8678:32;8675:119;;;8713:79;;:::i;:::-;8675:119;8833:1;8858:52;8902:7;8893:6;8882:9;8878:22;8858:52;:::i;:::-;8848:62;;8804:116;8600:327;;;;:::o;8933:349::-;9002:6;9051:2;9039:9;9030:7;9026:23;9022:32;9019:119;;;9057:79;;:::i;:::-;9019:119;9177:1;9202:63;9257:7;9248:6;9237:9;9233:22;9202:63;:::i;:::-;9192:73;;9148:127;8933:349;;;;:::o;9288:509::-;9357:6;9406:2;9394:9;9385:7;9381:23;9377:32;9374:119;;;9412:79;;:::i;:::-;9374:119;9560:1;9549:9;9545:17;9532:31;9590:18;9582:6;9579:30;9576:117;;;9612:79;;:::i;:::-;9576:117;9717:63;9772:7;9763:6;9752:9;9748:22;9717:63;:::i;:::-;9707:73;;9503:287;9288:509;;;;:::o;9803:329::-;9862:6;9911:2;9899:9;9890:7;9886:23;9882:32;9879:119;;;9917:79;;:::i;:::-;9879:119;10037:1;10062:53;10107:7;10098:6;10087:9;10083:22;10062:53;:::i;:::-;10052:63;;10008:117;9803:329;;;;:::o;10138:474::-;10206:6;10214;10263:2;10251:9;10242:7;10238:23;10234:32;10231:119;;;10269:79;;:::i;:::-;10231:119;10389:1;10414:53;10459:7;10450:6;10439:9;10435:22;10414:53;:::i;:::-;10404:63;;10360:117;10516:2;10542:53;10587:7;10578:6;10567:9;10563:22;10542:53;:::i;:::-;10532:63;;10487:118;10138:474;;;;;:::o;10618:765::-;10704:6;10712;10720;10728;10777:3;10765:9;10756:7;10752:23;10748:33;10745:120;;;10784:79;;:::i;:::-;10745:120;10904:1;10929:53;10974:7;10965:6;10954:9;10950:22;10929:53;:::i;:::-;10919:63;;10875:117;11031:2;11057:53;11102:7;11093:6;11082:9;11078:22;11057:53;:::i;:::-;11047:63;;11002:118;11159:2;11185:53;11230:7;11221:6;11210:9;11206:22;11185:53;:::i;:::-;11175:63;;11130:118;11287:2;11313:53;11358:7;11349:6;11338:9;11334:22;11313:53;:::i;:::-;11303:63;;11258:118;10618:765;;;;;;;:::o;11389:118::-;11476:24;11494:5;11476:24;:::i;:::-;11471:3;11464:37;11389:118;;:::o;11513:109::-;11594:21;11609:5;11594:21;:::i;:::-;11589:3;11582:34;11513:109;;:::o;11628:360::-;11714:3;11742:38;11774:5;11742:38;:::i;:::-;11796:70;11859:6;11854:3;11796:70;:::i;:::-;11789:77;;11875:52;11920:6;11915:3;11908:4;11901:5;11897:16;11875:52;:::i;:::-;11952:29;11974:6;11952:29;:::i;:::-;11947:3;11943:39;11936:46;;11718:270;11628:360;;;;:::o;11994:364::-;12082:3;12110:39;12143:5;12110:39;:::i;:::-;12165:71;12229:6;12224:3;12165:71;:::i;:::-;12158:78;;12245:52;12290:6;12285:3;12278:4;12271:5;12267:16;12245:52;:::i;:::-;12322:29;12344:6;12322:29;:::i;:::-;12317:3;12313:39;12306:46;;12086:272;11994:364;;;;:::o;12364:377::-;12470:3;12498:39;12531:5;12498:39;:::i;:::-;12553:89;12635:6;12630:3;12553:89;:::i;:::-;12546:96;;12651:52;12696:6;12691:3;12684:4;12677:5;12673:16;12651:52;:::i;:::-;12728:6;12723:3;12719:16;12712:23;;12474:267;12364:377;;;;:::o;12771:845::-;12874:3;12911:5;12905:12;12940:36;12966:9;12940:36;:::i;:::-;12992:89;13074:6;13069:3;12992:89;:::i;:::-;12985:96;;13112:1;13101:9;13097:17;13128:1;13123:137;;;;13274:1;13269:341;;;;13090:520;;13123:137;13207:4;13203:9;13192;13188:25;13183:3;13176:38;13243:6;13238:3;13234:16;13227:23;;13123:137;;13269:341;13336:38;13368:5;13336:38;:::i;:::-;13396:1;13410:154;13424:6;13421:1;13418:13;13410:154;;;13498:7;13492:14;13488:1;13483:3;13479:11;13472:35;13548:1;13539:7;13535:15;13524:26;;13446:4;13443:1;13439:12;13434:17;;13410:154;;;13593:6;13588:3;13584:16;13577:23;;13276:334;;13090:520;;12878:738;;12771:845;;;;:::o;13622:366::-;13764:3;13785:67;13849:2;13844:3;13785:67;:::i;:::-;13778:74;;13861:93;13950:3;13861:93;:::i;:::-;13979:2;13974:3;13970:12;13963:19;;13622:366;;;:::o;13994:::-;14136:3;14157:67;14221:2;14216:3;14157:67;:::i;:::-;14150:74;;14233:93;14322:3;14233:93;:::i;:::-;14351:2;14346:3;14342:12;14335:19;;13994:366;;;:::o;14366:::-;14508:3;14529:67;14593:2;14588:3;14529:67;:::i;:::-;14522:74;;14605:93;14694:3;14605:93;:::i;:::-;14723:2;14718:3;14714:12;14707:19;;14366:366;;;:::o;14738:::-;14880:3;14901:67;14965:2;14960:3;14901:67;:::i;:::-;14894:74;;14977:93;15066:3;14977:93;:::i;:::-;15095:2;15090:3;15086:12;15079:19;;14738:366;;;:::o;15110:::-;15252:3;15273:67;15337:2;15332:3;15273:67;:::i;:::-;15266:74;;15349:93;15438:3;15349:93;:::i;:::-;15467:2;15462:3;15458:12;15451:19;;15110:366;;;:::o;15482:::-;15624:3;15645:67;15709:2;15704:3;15645:67;:::i;:::-;15638:74;;15721:93;15810:3;15721:93;:::i;:::-;15839:2;15834:3;15830:12;15823:19;;15482:366;;;:::o;15854:::-;15996:3;16017:67;16081:2;16076:3;16017:67;:::i;:::-;16010:74;;16093:93;16182:3;16093:93;:::i;:::-;16211:2;16206:3;16202:12;16195:19;;15854:366;;;:::o;16226:::-;16368:3;16389:67;16453:2;16448:3;16389:67;:::i;:::-;16382:74;;16465:93;16554:3;16465:93;:::i;:::-;16583:2;16578:3;16574:12;16567:19;;16226:366;;;:::o;16598:::-;16740:3;16761:67;16825:2;16820:3;16761:67;:::i;:::-;16754:74;;16837:93;16926:3;16837:93;:::i;:::-;16955:2;16950:3;16946:12;16939:19;;16598:366;;;:::o;16970:::-;17112:3;17133:67;17197:2;17192:3;17133:67;:::i;:::-;17126:74;;17209:93;17298:3;17209:93;:::i;:::-;17327:2;17322:3;17318:12;17311:19;;16970:366;;;:::o;17342:::-;17484:3;17505:67;17569:2;17564:3;17505:67;:::i;:::-;17498:74;;17581:93;17670:3;17581:93;:::i;:::-;17699:2;17694:3;17690:12;17683:19;;17342:366;;;:::o;17714:::-;17856:3;17877:67;17941:2;17936:3;17877:67;:::i;:::-;17870:74;;17953:93;18042:3;17953:93;:::i;:::-;18071:2;18066:3;18062:12;18055:19;;17714:366;;;:::o;18086:::-;18228:3;18249:67;18313:2;18308:3;18249:67;:::i;:::-;18242:74;;18325:93;18414:3;18325:93;:::i;:::-;18443:2;18438:3;18434:12;18427:19;;18086:366;;;:::o;18458:::-;18600:3;18621:67;18685:2;18680:3;18621:67;:::i;:::-;18614:74;;18697:93;18786:3;18697:93;:::i;:::-;18815:2;18810:3;18806:12;18799:19;;18458:366;;;:::o;18830:::-;18972:3;18993:67;19057:2;19052:3;18993:67;:::i;:::-;18986:74;;19069:93;19158:3;19069:93;:::i;:::-;19187:2;19182:3;19178:12;19171:19;;18830:366;;;:::o;19202:::-;19344:3;19365:67;19429:2;19424:3;19365:67;:::i;:::-;19358:74;;19441:93;19530:3;19441:93;:::i;:::-;19559:2;19554:3;19550:12;19543:19;;19202:366;;;:::o;19574:::-;19716:3;19737:67;19801:2;19796:3;19737:67;:::i;:::-;19730:74;;19813:93;19902:3;19813:93;:::i;:::-;19931:2;19926:3;19922:12;19915:19;;19574:366;;;:::o;19946:::-;20088:3;20109:67;20173:2;20168:3;20109:67;:::i;:::-;20102:74;;20185:93;20274:3;20185:93;:::i;:::-;20303:2;20298:3;20294:12;20287:19;;19946:366;;;:::o;20318:::-;20460:3;20481:67;20545:2;20540:3;20481:67;:::i;:::-;20474:74;;20557:93;20646:3;20557:93;:::i;:::-;20675:2;20670:3;20666:12;20659:19;;20318:366;;;:::o;20690:::-;20832:3;20853:67;20917:2;20912:3;20853:67;:::i;:::-;20846:74;;20929:93;21018:3;20929:93;:::i;:::-;21047:2;21042:3;21038:12;21031:19;;20690:366;;;:::o;21062:::-;21204:3;21225:67;21289:2;21284:3;21225:67;:::i;:::-;21218:74;;21301:93;21390:3;21301:93;:::i;:::-;21419:2;21414:3;21410:12;21403:19;;21062:366;;;:::o;21434:::-;21576:3;21597:67;21661:2;21656:3;21597:67;:::i;:::-;21590:74;;21673:93;21762:3;21673:93;:::i;:::-;21791:2;21786:3;21782:12;21775:19;;21434:366;;;:::o;21806:::-;21948:3;21969:67;22033:2;22028:3;21969:67;:::i;:::-;21962:74;;22045:93;22134:3;22045:93;:::i;:::-;22163:2;22158:3;22154:12;22147:19;;21806:366;;;:::o;22178:::-;22320:3;22341:67;22405:2;22400:3;22341:67;:::i;:::-;22334:74;;22417:93;22506:3;22417:93;:::i;:::-;22535:2;22530:3;22526:12;22519:19;;22178:366;;;:::o;22550:::-;22692:3;22713:67;22777:2;22772:3;22713:67;:::i;:::-;22706:74;;22789:93;22878:3;22789:93;:::i;:::-;22907:2;22902:3;22898:12;22891:19;;22550:366;;;:::o;22922:::-;23064:3;23085:67;23149:2;23144:3;23085:67;:::i;:::-;23078:74;;23161:93;23250:3;23161:93;:::i;:::-;23279:2;23274:3;23270:12;23263:19;;22922:366;;;:::o;23294:::-;23436:3;23457:67;23521:2;23516:3;23457:67;:::i;:::-;23450:74;;23533:93;23622:3;23533:93;:::i;:::-;23651:2;23646:3;23642:12;23635:19;;23294:366;;;:::o;23666:::-;23808:3;23829:67;23893:2;23888:3;23829:67;:::i;:::-;23822:74;;23905:93;23994:3;23905:93;:::i;:::-;24023:2;24018:3;24014:12;24007:19;;23666:366;;;:::o;24038:::-;24180:3;24201:67;24265:2;24260:3;24201:67;:::i;:::-;24194:74;;24277:93;24366:3;24277:93;:::i;:::-;24395:2;24390:3;24386:12;24379:19;;24038:366;;;:::o;24410:118::-;24497:24;24515:5;24497:24;:::i;:::-;24492:3;24485:37;24410:118;;:::o;24534:429::-;24711:3;24733:92;24821:3;24812:6;24733:92;:::i;:::-;24726:99;;24842:95;24933:3;24924:6;24842:95;:::i;:::-;24835:102;;24954:3;24947:10;;24534:429;;;;;:::o;24969:222::-;25062:4;25100:2;25089:9;25085:18;25077:26;;25113:71;25181:1;25170:9;25166:17;25157:6;25113:71;:::i;:::-;24969:222;;;;:::o;25197:640::-;25392:4;25430:3;25419:9;25415:19;25407:27;;25444:71;25512:1;25501:9;25497:17;25488:6;25444:71;:::i;:::-;25525:72;25593:2;25582:9;25578:18;25569:6;25525:72;:::i;:::-;25607;25675:2;25664:9;25660:18;25651:6;25607:72;:::i;:::-;25726:9;25720:4;25716:20;25711:2;25700:9;25696:18;25689:48;25754:76;25825:4;25816:6;25754:76;:::i;:::-;25746:84;;25197:640;;;;;;;:::o;25843:210::-;25930:4;25968:2;25957:9;25953:18;25945:26;;25981:65;26043:1;26032:9;26028:17;26019:6;25981:65;:::i;:::-;25843:210;;;;:::o;26059:313::-;26172:4;26210:2;26199:9;26195:18;26187:26;;26259:9;26253:4;26249:20;26245:1;26234:9;26230:17;26223:47;26287:78;26360:4;26351:6;26287:78;:::i;:::-;26279:86;;26059:313;;;;:::o;26378:419::-;26544:4;26582:2;26571:9;26567:18;26559:26;;26631:9;26625:4;26621:20;26617:1;26606:9;26602:17;26595:47;26659:131;26785:4;26659:131;:::i;:::-;26651:139;;26378:419;;;:::o;26803:::-;26969:4;27007:2;26996:9;26992:18;26984:26;;27056:9;27050:4;27046:20;27042:1;27031:9;27027:17;27020:47;27084:131;27210:4;27084:131;:::i;:::-;27076:139;;26803:419;;;:::o;27228:::-;27394:4;27432:2;27421:9;27417:18;27409:26;;27481:9;27475:4;27471:20;27467:1;27456:9;27452:17;27445:47;27509:131;27635:4;27509:131;:::i;:::-;27501:139;;27228:419;;;:::o;27653:::-;27819:4;27857:2;27846:9;27842:18;27834:26;;27906:9;27900:4;27896:20;27892:1;27881:9;27877:17;27870:47;27934:131;28060:4;27934:131;:::i;:::-;27926:139;;27653:419;;;:::o;28078:::-;28244:4;28282:2;28271:9;28267:18;28259:26;;28331:9;28325:4;28321:20;28317:1;28306:9;28302:17;28295:47;28359:131;28485:4;28359:131;:::i;:::-;28351:139;;28078:419;;;:::o;28503:::-;28669:4;28707:2;28696:9;28692:18;28684:26;;28756:9;28750:4;28746:20;28742:1;28731:9;28727:17;28720:47;28784:131;28910:4;28784:131;:::i;:::-;28776:139;;28503:419;;;:::o;28928:::-;29094:4;29132:2;29121:9;29117:18;29109:26;;29181:9;29175:4;29171:20;29167:1;29156:9;29152:17;29145:47;29209:131;29335:4;29209:131;:::i;:::-;29201:139;;28928:419;;;:::o;29353:::-;29519:4;29557:2;29546:9;29542:18;29534:26;;29606:9;29600:4;29596:20;29592:1;29581:9;29577:17;29570:47;29634:131;29760:4;29634:131;:::i;:::-;29626:139;;29353:419;;;:::o;29778:::-;29944:4;29982:2;29971:9;29967:18;29959:26;;30031:9;30025:4;30021:20;30017:1;30006:9;30002:17;29995:47;30059:131;30185:4;30059:131;:::i;:::-;30051:139;;29778:419;;;:::o;30203:::-;30369:4;30407:2;30396:9;30392:18;30384:26;;30456:9;30450:4;30446:20;30442:1;30431:9;30427:17;30420:47;30484:131;30610:4;30484:131;:::i;:::-;30476:139;;30203:419;;;:::o;30628:::-;30794:4;30832:2;30821:9;30817:18;30809:26;;30881:9;30875:4;30871:20;30867:1;30856:9;30852:17;30845:47;30909:131;31035:4;30909:131;:::i;:::-;30901:139;;30628:419;;;:::o;31053:::-;31219:4;31257:2;31246:9;31242:18;31234:26;;31306:9;31300:4;31296:20;31292:1;31281:9;31277:17;31270:47;31334:131;31460:4;31334:131;:::i;:::-;31326:139;;31053:419;;;:::o;31478:::-;31644:4;31682:2;31671:9;31667:18;31659:26;;31731:9;31725:4;31721:20;31717:1;31706:9;31702:17;31695:47;31759:131;31885:4;31759:131;:::i;:::-;31751:139;;31478:419;;;:::o;31903:::-;32069:4;32107:2;32096:9;32092:18;32084:26;;32156:9;32150:4;32146:20;32142:1;32131:9;32127:17;32120:47;32184:131;32310:4;32184:131;:::i;:::-;32176:139;;31903:419;;;:::o;32328:::-;32494:4;32532:2;32521:9;32517:18;32509:26;;32581:9;32575:4;32571:20;32567:1;32556:9;32552:17;32545:47;32609:131;32735:4;32609:131;:::i;:::-;32601:139;;32328:419;;;:::o;32753:::-;32919:4;32957:2;32946:9;32942:18;32934:26;;33006:9;33000:4;32996:20;32992:1;32981:9;32977:17;32970:47;33034:131;33160:4;33034:131;:::i;:::-;33026:139;;32753:419;;;:::o;33178:::-;33344:4;33382:2;33371:9;33367:18;33359:26;;33431:9;33425:4;33421:20;33417:1;33406:9;33402:17;33395:47;33459:131;33585:4;33459:131;:::i;:::-;33451:139;;33178:419;;;:::o;33603:::-;33769:4;33807:2;33796:9;33792:18;33784:26;;33856:9;33850:4;33846:20;33842:1;33831:9;33827:17;33820:47;33884:131;34010:4;33884:131;:::i;:::-;33876:139;;33603:419;;;:::o;34028:::-;34194:4;34232:2;34221:9;34217:18;34209:26;;34281:9;34275:4;34271:20;34267:1;34256:9;34252:17;34245:47;34309:131;34435:4;34309:131;:::i;:::-;34301:139;;34028:419;;;:::o;34453:::-;34619:4;34657:2;34646:9;34642:18;34634:26;;34706:9;34700:4;34696:20;34692:1;34681:9;34677:17;34670:47;34734:131;34860:4;34734:131;:::i;:::-;34726:139;;34453:419;;;:::o;34878:::-;35044:4;35082:2;35071:9;35067:18;35059:26;;35131:9;35125:4;35121:20;35117:1;35106:9;35102:17;35095:47;35159:131;35285:4;35159:131;:::i;:::-;35151:139;;34878:419;;;:::o;35303:::-;35469:4;35507:2;35496:9;35492:18;35484:26;;35556:9;35550:4;35546:20;35542:1;35531:9;35527:17;35520:47;35584:131;35710:4;35584:131;:::i;:::-;35576:139;;35303:419;;;:::o;35728:::-;35894:4;35932:2;35921:9;35917:18;35909:26;;35981:9;35975:4;35971:20;35967:1;35956:9;35952:17;35945:47;36009:131;36135:4;36009:131;:::i;:::-;36001:139;;35728:419;;;:::o;36153:::-;36319:4;36357:2;36346:9;36342:18;36334:26;;36406:9;36400:4;36396:20;36392:1;36381:9;36377:17;36370:47;36434:131;36560:4;36434:131;:::i;:::-;36426:139;;36153:419;;;:::o;36578:::-;36744:4;36782:2;36771:9;36767:18;36759:26;;36831:9;36825:4;36821:20;36817:1;36806:9;36802:17;36795:47;36859:131;36985:4;36859:131;:::i;:::-;36851:139;;36578:419;;;:::o;37003:::-;37169:4;37207:2;37196:9;37192:18;37184:26;;37256:9;37250:4;37246:20;37242:1;37231:9;37227:17;37220:47;37284:131;37410:4;37284:131;:::i;:::-;37276:139;;37003:419;;;:::o;37428:::-;37594:4;37632:2;37621:9;37617:18;37609:26;;37681:9;37675:4;37671:20;37667:1;37656:9;37652:17;37645:47;37709:131;37835:4;37709:131;:::i;:::-;37701:139;;37428:419;;;:::o;37853:::-;38019:4;38057:2;38046:9;38042:18;38034:26;;38106:9;38100:4;38096:20;38092:1;38081:9;38077:17;38070:47;38134:131;38260:4;38134:131;:::i;:::-;38126:139;;37853:419;;;:::o;38278:::-;38444:4;38482:2;38471:9;38467:18;38459:26;;38531:9;38525:4;38521:20;38517:1;38506:9;38502:17;38495:47;38559:131;38685:4;38559:131;:::i;:::-;38551:139;;38278:419;;;:::o;38703:222::-;38796:4;38834:2;38823:9;38819:18;38811:26;;38847:71;38915:1;38904:9;38900:17;38891:6;38847:71;:::i;:::-;38703:222;;;;:::o;38931:129::-;38965:6;38992:20;;:::i;:::-;38982:30;;39021:33;39049:4;39041:6;39021:33;:::i;:::-;38931:129;;;:::o;39066:75::-;39099:6;39132:2;39126:9;39116:19;;39066:75;:::o;39147:311::-;39224:4;39314:18;39306:6;39303:30;39300:56;;;39336:18;;:::i;:::-;39300:56;39386:4;39378:6;39374:17;39366:25;;39446:4;39440;39436:15;39428:23;;39147:311;;;:::o;39464:307::-;39525:4;39615:18;39607:6;39604:30;39601:56;;;39637:18;;:::i;:::-;39601:56;39675:29;39697:6;39675:29;:::i;:::-;39667:37;;39759:4;39753;39749:15;39741:23;;39464:307;;;:::o;39777:308::-;39839:4;39929:18;39921:6;39918:30;39915:56;;;39951:18;;:::i;:::-;39915:56;39989:29;40011:6;39989:29;:::i;:::-;39981:37;;40073:4;40067;40063:15;40055:23;;39777:308;;;:::o;40091:141::-;40140:4;40163:3;40155:11;;40186:3;40183:1;40176:14;40220:4;40217:1;40207:18;40199:26;;40091:141;;;:::o;40238:98::-;40289:6;40323:5;40317:12;40307:22;;40238:98;;;:::o;40342:99::-;40394:6;40428:5;40422:12;40412:22;;40342:99;;;:::o;40447:168::-;40530:11;40564:6;40559:3;40552:19;40604:4;40599:3;40595:14;40580:29;;40447:168;;;;:::o;40621:169::-;40705:11;40739:6;40734:3;40727:19;40779:4;40774:3;40770:14;40755:29;;40621:169;;;;:::o;40796:148::-;40898:11;40935:3;40920:18;;40796:148;;;;:::o;40950:305::-;40990:3;41009:20;41027:1;41009:20;:::i;:::-;41004:25;;41043:20;41061:1;41043:20;:::i;:::-;41038:25;;41197:1;41129:66;41125:74;41122:1;41119:81;41116:107;;;41203:18;;:::i;:::-;41116:107;41247:1;41244;41240:9;41233:16;;40950:305;;;;:::o;41261:185::-;41301:1;41318:20;41336:1;41318:20;:::i;:::-;41313:25;;41352:20;41370:1;41352:20;:::i;:::-;41347:25;;41391:1;41381:35;;41396:18;;:::i;:::-;41381:35;41438:1;41435;41431:9;41426:14;;41261:185;;;;:::o;41452:348::-;41492:7;41515:20;41533:1;41515:20;:::i;:::-;41510:25;;41549:20;41567:1;41549:20;:::i;:::-;41544:25;;41737:1;41669:66;41665:74;41662:1;41659:81;41654:1;41647:9;41640:17;41636:105;41633:131;;;41744:18;;:::i;:::-;41633:131;41792:1;41789;41785:9;41774:20;;41452:348;;;;:::o;41806:191::-;41846:4;41866:20;41884:1;41866:20;:::i;:::-;41861:25;;41900:20;41918:1;41900:20;:::i;:::-;41895:25;;41939:1;41936;41933:8;41930:34;;;41944:18;;:::i;:::-;41930:34;41989:1;41986;41982:9;41974:17;;41806:191;;;;:::o;42003:96::-;42040:7;42069:24;42087:5;42069:24;:::i;:::-;42058:35;;42003:96;;;:::o;42105:90::-;42139:7;42182:5;42175:13;42168:21;42157:32;;42105:90;;;:::o;42201:149::-;42237:7;42277:66;42270:5;42266:78;42255:89;;42201:149;;;:::o;42356:126::-;42393:7;42433:42;42426:5;42422:54;42411:65;;42356:126;;;:::o;42488:77::-;42525:7;42554:5;42543:16;;42488:77;;;:::o;42571:154::-;42655:6;42650:3;42645;42632:30;42717:1;42708:6;42703:3;42699:16;42692:27;42571:154;;;:::o;42731:307::-;42799:1;42809:113;42823:6;42820:1;42817:13;42809:113;;;42908:1;42903:3;42899:11;42893:18;42889:1;42884:3;42880:11;42873:39;42845:2;42842:1;42838:10;42833:15;;42809:113;;;42940:6;42937:1;42934:13;42931:101;;;43020:1;43011:6;43006:3;43002:16;42995:27;42931:101;42780:258;42731:307;;;:::o;43044:320::-;43088:6;43125:1;43119:4;43115:12;43105:22;;43172:1;43166:4;43162:12;43193:18;43183:81;;43249:4;43241:6;43237:17;43227:27;;43183:81;43311:2;43303:6;43300:14;43280:18;43277:38;43274:84;;;43330:18;;:::i;:::-;43274:84;43095:269;43044:320;;;:::o;43370:281::-;43453:27;43475:4;43453:27;:::i;:::-;43445:6;43441:40;43583:6;43571:10;43568:22;43547:18;43535:10;43532:34;43529:62;43526:88;;;43594:18;;:::i;:::-;43526:88;43634:10;43630:2;43623:22;43413:238;43370:281;;:::o;43657:233::-;43696:3;43719:24;43737:5;43719:24;:::i;:::-;43710:33;;43765:66;43758:5;43755:77;43752:103;;;43835:18;;:::i;:::-;43752:103;43882:1;43875:5;43871:13;43864:20;;43657:233;;;:::o;43896:176::-;43928:1;43945:20;43963:1;43945:20;:::i;:::-;43940:25;;43979:20;43997:1;43979:20;:::i;:::-;43974:25;;44018:1;44008:35;;44023:18;;:::i;:::-;44008:35;44064:1;44061;44057:9;44052:14;;43896:176;;;;:::o;44078:180::-;44126:77;44123:1;44116:88;44223:4;44220:1;44213:15;44247:4;44244:1;44237:15;44264:180;44312:77;44309:1;44302:88;44409:4;44406:1;44399:15;44433:4;44430:1;44423:15;44450:180;44498:77;44495:1;44488:88;44595:4;44592:1;44585:15;44619:4;44616:1;44609:15;44636:180;44684:77;44681:1;44674:88;44781:4;44778:1;44771:15;44805:4;44802:1;44795:15;44822:180;44870:77;44867:1;44860:88;44967:4;44964:1;44957:15;44991:4;44988:1;44981:15;45008:180;45056:77;45053:1;45046:88;45153:4;45150:1;45143:15;45177:4;45174:1;45167:15;45194:117;45303:1;45300;45293:12;45317:117;45426:1;45423;45416:12;45440:117;45549:1;45546;45539:12;45563:117;45672:1;45669;45662:12;45686:117;45795:1;45792;45785:12;45809:102;45850:6;45901:2;45897:7;45892:2;45885:5;45881:14;45877:28;45867:38;;45809:102;;;:::o;45917:181::-;46057:33;46053:1;46045:6;46041:14;46034:57;45917:181;:::o;46104:230::-;46244:34;46240:1;46232:6;46228:14;46221:58;46313:13;46308:2;46300:6;46296:15;46289:38;46104:230;:::o;46340:237::-;46480:34;46476:1;46468:6;46464:14;46457:58;46549:20;46544:2;46536:6;46532:15;46525:45;46340:237;:::o;46583:225::-;46723:34;46719:1;46711:6;46707:14;46700:58;46792:8;46787:2;46779:6;46775:15;46768:33;46583:225;:::o;46814:178::-;46954:30;46950:1;46942:6;46938:14;46931:54;46814:178;:::o;46998:171::-;47138:23;47134:1;47126:6;47122:14;47115:47;46998:171;:::o;47175:169::-;47315:21;47311:1;47303:6;47299:14;47292:45;47175:169;:::o;47350:223::-;47490:34;47486:1;47478:6;47474:14;47467:58;47559:6;47554:2;47546:6;47542:15;47535:31;47350:223;:::o;47579:175::-;47719:27;47715:1;47707:6;47703:14;47696:51;47579:175;:::o;47760:220::-;47900:34;47896:1;47888:6;47884:14;47877:58;47969:3;47964:2;47956:6;47952:15;47945:28;47760:220;:::o;47986:170::-;48126:22;48122:1;48114:6;48110:14;48103:46;47986:170;:::o;48162:178::-;48302:30;48298:1;48290:6;48286:14;48279:54;48162:178;:::o;48346:179::-;48486:31;48482:1;48474:6;48470:14;48463:55;48346:179;:::o;48531:231::-;48671:34;48667:1;48659:6;48655:14;48648:58;48740:14;48735:2;48727:6;48723:15;48716:39;48531:231;:::o;48768:220::-;48908:34;48904:1;48896:6;48892:14;48885:58;48977:3;48972:2;48964:6;48960:15;48953:28;48768:220;:::o;48994:224::-;49134:34;49130:1;49122:6;49118:14;49111:58;49203:7;49198:2;49190:6;49186:15;49179:32;48994:224;:::o;49224:243::-;49364:34;49360:1;49352:6;49348:14;49341:58;49433:26;49428:2;49420:6;49416:15;49409:51;49224:243;:::o;49473:229::-;49613:34;49609:1;49601:6;49597:14;49590:58;49682:12;49677:2;49669:6;49665:15;49658:37;49473:229;:::o;49708:228::-;49848:34;49844:1;49836:6;49832:14;49825:58;49917:11;49912:2;49904:6;49900:15;49893:36;49708:228;:::o;49942:180::-;50082:32;50078:1;50070:6;50066:14;50059:56;49942:180;:::o;50128:182::-;50268:34;50264:1;50256:6;50252:14;50245:58;50128:182;:::o;50316:231::-;50456:34;50452:1;50444:6;50440:14;50433:58;50525:14;50520:2;50512:6;50508:15;50501:39;50316:231;:::o;50553:182::-;50693:34;50689:1;50681:6;50677:14;50670:58;50553:182;:::o;50741:228::-;50881:34;50877:1;50869:6;50865:14;50858:58;50950:11;50945:2;50937:6;50933:15;50926:36;50741:228;:::o;50975:221::-;51115:34;51111:1;51103:6;51099:14;51092:58;51184:4;51179:2;51171:6;51167:15;51160:29;50975:221;:::o;51202:177::-;51342:29;51338:1;51330:6;51326:14;51319:53;51202:177;:::o;51385:220::-;51525:34;51521:1;51513:6;51509:14;51502:58;51594:3;51589:2;51581:6;51577:15;51570:28;51385:220;:::o;51611:236::-;51751:34;51747:1;51739:6;51735:14;51728:58;51820:19;51815:2;51807:6;51803:15;51796:44;51611:236;:::o;51853:231::-;51993:34;51989:1;51981:6;51977:14;51970:58;52062:14;52057:2;52049:6;52045:15;52038:39;51853:231;:::o;52090:122::-;52163:24;52181:5;52163:24;:::i;:::-;52156:5;52153:35;52143:63;;52202:1;52199;52192:12;52143:63;52090:122;:::o;52218:116::-;52288:21;52303:5;52288:21;:::i;:::-;52281:5;52278:32;52268:60;;52324:1;52321;52314:12;52268:60;52218:116;:::o;52340:120::-;52412:23;52429:5;52412:23;:::i;:::-;52405:5;52402:34;52392:62;;52450:1;52447;52440:12;52392:62;52340:120;:::o;52466:122::-;52539:24;52557:5;52539:24;:::i;:::-;52532:5;52529:35;52519:63;;52578:1;52575;52568:12;52519:63;52466:122;:::o

Swarm Source

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