ETH Price: $3,148.02 (+0.92%)
Gas: 2 Gwei

Token

Happy Lions Circle (THLC)
 

Overview

Max Total Supply

383 THLC

Holders

215

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 THLC
0x45e253df2d0f2766ad326ff39fe8873436ae6d16
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
THLC

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity ^0.8.0;
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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

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

pragma solidity ^0.8.0;
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);
}

pragma solidity ^0.8.0;
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);
}

pragma solidity ^0.8.0;
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;
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;
}

pragma solidity ^0.8.0;
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);
}

pragma solidity ^0.8.0;
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);
}

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

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

pragma solidity ^0.8.0;
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

pragma solidity ^0.8.0;
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;


    string public _baseURI;
    /**
     * @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 base = baseURI();
        return bytes(base).length > 0 ? string(abi.encodePacked(base, tokenId.toString())) : "";
    }

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

    /**
     * @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 {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

pragma solidity ^0.8.0;
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();
    }
}

pragma solidity ^0.8.0;
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}


pragma solidity ^0.8.0;
contract  THLC  is ERC721Enumerable, Ownable {
    using SafeMath for uint256;

    struct userAddress {
        address userAddress;
        uint counter;
    }

    uint public constant _TOTALSUPPLY   = 7777;
    uint private tokenId                = 1;
    address freeFlowAddress             = 0x5B588e36FF358D4376A76FB163fd69Da02A2A9a5;
    address developerAddress            = 0x785178F8b4a67f05813d11B1A5322c193156bA60;
    bool public isSalePaused            = true;

    uint256 public preSalePrice         = 0.05 ether;
    uint public preSaleSupply           = 600;
    uint public preSaleMaxQuantity      = 2;
    mapping(address => userAddress) public _preSaleAddresses;
    mapping(address => bool) public _preSaleAddressExist;

    uint256 public publicSaleprice      = 0.077 ether;
    uint public publicSaleSupply        = 7177;
    uint public publicSaleMaxQuantity   = 20;

    constructor(string memory baseURI) ERC721("Happy Lions Circle", "THLC")  {
        setBaseURI(baseURI);
    }
    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseURI = baseURI;
    }
    
    function totalsupply() private view returns (uint) {
        return tokenId;
    }

    modifier isSaleOpen {
        require(totalSupply() < _TOTALSUPPLY, "Sale Ended");
        _;
    }

    // Set Price Functions For PreSale & Public
    function setPublicPrice(uint256 _newPrice) public onlyOwner() {
        publicSaleprice = _newPrice;
    }
    function setPreSaleOnePrice(uint256 _newPrice) public onlyOwner() {
        preSalePrice = _newPrice;
    }

    // Flip Status Functions For Sale
    function flipPauseStatus() public onlyOwner {
        isSalePaused = !isSalePaused;
    }

    // Set Max Quantity Functions For PreSale & Public
    function setPublicSaleMaxQuantity(uint256 _quantity) public onlyOwner {
        publicSaleMaxQuantity =_quantity;
    }
    function setPreSaleMaxQuantity(uint256 _quantity) public onlyOwner {
        preSaleMaxQuantity =_quantity;
    }

    // Set Price Functions For PreSale & Public
    function getPublicPrice(uint256 _quantity) public view returns (uint256) { 
        return _quantity * publicSaleprice;
    }
    function getPreSalePrice(uint256 _quantity) public view returns (uint256) { 
        return _quantity * preSalePrice;
    }

    // Mint Functions For PreSale & Public
    function mint(uint chosenAmount) public payable isSaleOpen {
        require(_TOTALSUPPLY >= chosenAmount, "Chosen amount is greater than supply");
        require(isSalePaused == false, "Sale is not active at the moment");
        require(totalSupply() + chosenAmount <= _TOTALSUPPLY, "Quantity must be lesser then MaxSupply");
        require(chosenAmount <= publicSaleMaxQuantity && chosenAmount > 0, "Chosen Amount Should be greater then 0 and less then max quantity");
        require(publicSaleprice.mul(chosenAmount) == msg.value, "Sent ether value is incorrect");
        for (uint i = 0; i < chosenAmount; i++) {
            _safeMint(msg.sender, totalsupply());
            tokenId++;
        }
    }
    function whiteListMint(bytes32[] calldata _merkleProof, bytes32 merkleRoot, uint chosenAmount) public payable isSaleOpen {
        if (_preSaleAddressExist[msg.sender] == false) {
            _preSaleAddresses[msg.sender] = userAddress({
                userAddress: msg.sender,
                counter: 0
            });
            _preSaleAddressExist[msg.sender] = true;
        }
        require(_TOTALSUPPLY >= chosenAmount, "Chosen amount is greater than supply");
        require(chosenAmount > 0, "Number Of Tokens Can Not Be Less Than Or Equal To 0");
        require(isSalePaused == false, "Sale is not active at the moment");
        require(chosenAmount <= publicSaleMaxQuantity && chosenAmount > 0, "Chosen Amount Should be greater then 0 and less then max quantity");
        require(_preSaleAddresses[msg.sender].counter + chosenAmount <= preSaleMaxQuantity, "Quantity Must Be Lesser Than Max Supply");
        require(preSalePrice.mul(chosenAmount) == msg.value, "Sent Ether Value Is Incorrect");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Invalid Proof");
        for (uint i = 0; i < chosenAmount; i++) {
            _safeMint(msg.sender, totalsupply());
            tokenId++;
        }
        _preSaleAddresses[msg.sender].counter += chosenAmount;
    }


    function tokensOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 count = balanceOf(_owner);
        uint256[] memory result = new uint256[](count);
        for (uint256 index = 0; index < count; index++) {
            result[index] = tokenOfOwnerByIndex(_owner, index);
        }
        return result;
    }

    function withdraw() public onlyOwner {
        uint totalBalance       = address(this).balance;
        uint ownerBalance       = totalBalance * 98 / 100;
        uint remainingBalance   = totalBalance * 2 / 100;
        uint developerBalance   = remainingBalance * 85 / 100;
        uint freeFLowBalance    = remainingBalance * 15 / 100;
        
        payable(msg.sender).transfer(ownerBalance);
        payable(developerAddress).transfer(developerBalance);
        payable(freeFlowAddress).transfer(freeFLowBalance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_TOTALSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_preSaleAddressExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_preSaleAddresses","outputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPreSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPublicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMaxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"uint256","name":"_quantity","type":"uint256"}],"name":"setPreSaleMaxQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPreSaleOnePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setPublicSaleMaxQuantity","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"whiteListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600c55735b588e36ff358d4376a76fb163fd69da02a2a9a5600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073785178f8b4a67f05813d11b1a5322c193156ba60600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60146101000a81548160ff02191690831515021790555066b1a2bc2ec50000600f5561025860105560026011556701118f178fb48000601455611c0960155560146016553480156200010857600080fd5b50604051620058713803806200587183398181016040528101906200012e9190620004a2565b6040518060400160405280601281526020017f4861707079204c696f6e7320436972636c6500000000000000000000000000008152506040518060400160405280600481526020017f54484c43000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001b292919062000374565b508060019080519060200190620001cb92919062000374565b5050506000620001e06200029760201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000290816200029f60201b60201c565b50620006fa565b600033905090565b620002af6200029760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d56200034a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000325906200051a565b60405180910390fd5b80600690805190602001906200034692919062000374565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200038290620005e2565b90600052602060002090601f016020900481019282620003a65760008555620003f2565b82601f10620003c157805160ff1916838001178555620003f2565b82800160010185558215620003f2579182015b82811115620003f1578251825591602001919060010190620003d4565b5b50905062000401919062000405565b5090565b5b808211156200042057600081600090555060010162000406565b5090565b60006200043b620004358462000565565b6200053c565b9050828152602081018484840111156200045a5762000459620006b1565b5b62000467848285620005ac565b509392505050565b600082601f830112620004875762000486620006ac565b5b81516200049984826020860162000424565b91505092915050565b600060208284031215620004bb57620004ba620006bb565b5b600082015167ffffffffffffffff811115620004dc57620004db620006b6565b5b620004ea848285016200046f565b91505092915050565b6000620005026020836200059b565b91506200050f82620006d1565b602082019050919050565b600060208201905081810360008301526200053581620004f3565b9050919050565b6000620005486200055b565b905062000556828262000618565b919050565b6000604051905090565b600067ffffffffffffffff8211156200058357620005826200067d565b5b6200058e82620006c0565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005cc578082015181840152602081019050620005af565b83811115620005dc576000848401525b50505050565b60006002820490506001821680620005fb57607f821691505b602082108114156200061257620006116200064e565b5b50919050565b6200062382620006c0565b810181811067ffffffffffffffff821117156200064557620006446200067d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615167806200070a6000396000f3fe6080604052600436106102445760003560e01c80636352211e11610139578063b88d4fde116100b6578063db4568e21161007a578063db4568e2146108ab578063e757c17d146108d6578063e985e9c514610901578063f2fde38b1461093e578063f3c7fbbb14610967578063fa62884c146109a457610244565b8063b88d4fde146107d5578063c6275255146107fe578063c87b56dd14610827578063cbfd14a214610864578063d628945f1461088f57610244565b806395d89b41116100fd57806395d89b41146106fd5780639e21dabb14610728578063a0712d6814610765578063a22cb46514610781578063b33ee278146107aa57610244565b80636352211e146105f057806370a082311461062d578063743976a01461066a5780638462151c146106955780638da5cb5b146106d257610244565b80632922c1ec116101c75780633ccfd60b1161018b5780633ccfd60b1461051f57806342842e0e146105365780634f6ccce71461055f57806355f804b31461059c5780635c381dda146105c557610244565b80632922c1ec146104285780632e055bcc146104515780632f745c591461047c57806330a3f446146104b957806331ba3dfc146104f657610244565b8063095ea7b31161020e578063095ea7b31461035757806309f29f921461038057806318160ddd146103ab5780631f9443ca146103d657806323b872dd146103ff57610244565b80628ca81614610249578062b0e7031461027457806301ffc9a7146102b257806306fdde03146102ef578063081812fc1461031a575b600080fd5b34801561025557600080fd5b5061025e6109bb565b60405161026b9190614043565b60405180910390f35b34801561028057600080fd5b5061029b6004803603810190610296919061370b565b6109ce565b6040516102a9929190613ff8565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613942565b610a12565b6040516102e69190614043565b60405180910390f35b3480156102fb57600080fd5b50610304610a8c565b604051610311919061405e565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c91906139e5565b610b1e565b60405161034e9190613f91565b60405180910390f35b34801561036357600080fd5b5061037e6004803603810190610379919061388e565b610ba3565b005b34801561038c57600080fd5b50610395610cbb565b6040516103a29190614400565b60405180910390f35b3480156103b757600080fd5b506103c0610cc1565b6040516103cd9190614400565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f891906139e5565b610cce565b005b34801561040b57600080fd5b5061042660048036038101906104219190613778565b610d54565b005b34801561043457600080fd5b5061044f600480360381019061044a91906139e5565b610db4565b005b34801561045d57600080fd5b50610466610e3a565b6040516104739190614400565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061388e565b610e40565b6040516104b09190614400565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db91906139e5565b610ee5565b6040516104ed9190614400565b60405180910390f35b34801561050257600080fd5b5061051d600480360381019061051891906139e5565b610efc565b005b34801561052b57600080fd5b50610534610f82565b005b34801561054257600080fd5b5061055d60048036038101906105589190613778565b611197565b005b34801561056b57600080fd5b50610586600480360381019061058191906139e5565b6111b7565b6040516105939190614400565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be919061399c565b611228565b005b3480156105d157600080fd5b506105da6112be565b6040516105e79190614400565b60405180910390f35b3480156105fc57600080fd5b50610617600480360381019061061291906139e5565b6112c4565b6040516106249190613f91565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f919061370b565b611376565b6040516106619190614400565b60405180910390f35b34801561067657600080fd5b5061067f61142e565b60405161068c919061405e565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b7919061370b565b6114bc565b6040516106c99190614021565b60405180910390f35b3480156106de57600080fd5b506106e761156a565b6040516106f49190613f91565b60405180910390f35b34801561070957600080fd5b50610712611594565b60405161071f919061405e565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a91906139e5565b611626565b60405161075c9190614400565b60405180910390f35b61077f600480360381019061077a91906139e5565b61163d565b005b34801561078d57600080fd5b506107a860048036038101906107a3919061384e565b61186c565b005b3480156107b657600080fd5b506107bf6119ed565b6040516107cc9190614400565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906137cb565b6119f3565b005b34801561080a57600080fd5b50610825600480360381019061082091906139e5565b611a55565b005b34801561083357600080fd5b5061084e600480360381019061084991906139e5565b611adb565b60405161085b919061405e565b60405180910390f35b34801561087057600080fd5b50610879611b82565b6040516108869190614400565b60405180910390f35b6108a960048036038101906108a491906138ce565b611b88565b005b3480156108b757600080fd5b506108c06120b9565b6040516108cd9190614400565b60405180910390f35b3480156108e257600080fd5b506108eb6120bf565b6040516108f89190614400565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190613738565b6120c5565b6040516109359190614043565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061370b565b612159565b005b34801561097357600080fd5b5061098e6004803603810190610989919061370b565b612251565b60405161099b9190614043565b60405180910390f35b3480156109b057600080fd5b506109b9612271565b005b600e60149054906101000a900460ff1681565b60126020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a855750610a8482612319565b5b9050919050565b606060008054610a9b906146f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac7906146f3565b8015610b145780601f10610ae957610100808354040283529160200191610b14565b820191906000526020600020905b815481529060010190602001808311610af757829003601f168201915b5050505050905090565b6000610b29826123fb565b610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f90614280565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bae826112c4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690614320565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c3e612467565b73ffffffffffffffffffffffffffffffffffffffff161480610c6d5750610c6c81610c67612467565b6120c5565b5b610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca3906141c0565b60405180910390fd5b610cb6838361246f565b505050565b60115481565b6000600980549050905090565b610cd6612467565b73ffffffffffffffffffffffffffffffffffffffff16610cf461156a565b73ffffffffffffffffffffffffffffffffffffffff1614610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d41906142a0565b60405180910390fd5b8060168190555050565b610d65610d5f612467565b82612528565b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614340565b60405180910390fd5b610daf838383612606565b505050565b610dbc612467565b73ffffffffffffffffffffffffffffffffffffffff16610dda61156a565b73ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e27906142a0565b60405180910390fd5b8060118190555050565b60105481565b6000610e4b83611376565b8210610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390614080565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060145482610ef591906145a5565b9050919050565b610f04612467565b73ffffffffffffffffffffffffffffffffffffffff16610f2261156a565b73ffffffffffffffffffffffffffffffffffffffff1614610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906142a0565b60405180910390fd5b80600f8190555050565b610f8a612467565b73ffffffffffffffffffffffffffffffffffffffff16610fa861156a565b73ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff5906142a0565b60405180910390fd5b60004790506000606460628361101491906145a5565b61101e9190614574565b90506000606460028461103191906145a5565b61103b9190614574565b90506000606460558361104e91906145a5565b6110589190614574565b905060006064600f8461106b91906145a5565b6110759190614574565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156110bd573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611126573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561118f573d6000803e3d6000fd5b505050505050565b6111b2838383604051806020016040528060008152506119f3565b505050565b60006111c1610cc1565b8210611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614360565b60405180910390fd5b60098281548110611216576112156148b0565b5b90600052602060002001549050919050565b611230612467565b73ffffffffffffffffffffffffffffffffffffffff1661124e61156a565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b906142a0565b60405180910390fd5b80600690805190602001906112ba9291906134b4565b5050565b60145481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490614220565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614200565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6006805461143b906146f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611467906146f3565b80156114b45780601f10611489576101008083540402835291602001916114b4565b820191906000526020600020905b81548152906001019060200180831161149757829003601f168201915b505050505081565b606060006114c983611376565b905060008167ffffffffffffffff8111156114e7576114e66148df565b5b6040519080825280602002602001820160405280156115155781602001602082028036833780820191505090505b50905060005b8281101561155f5761152d8582610e40565b8282815181106115405761153f6148b0565b5b602002602001018181525050808061155790614756565b91505061151b565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115a3906146f3565b80601f01602080910402602001604051908101604052809291908181526020018280546115cf906146f3565b801561161c5780601f106115f15761010080835404028352916020019161161c565b820191906000526020600020905b8154815290600101906020018083116115ff57829003601f168201915b5050505050905090565b6000600f548261163691906145a5565b9050919050565b611e61611648610cc1565b10611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f90614180565b60405180910390fd5b80611e6110156116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c4906140c0565b60405180910390fd5b60001515600e60149054906101000a900460ff16151514611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906143e0565b60405180910390fd5b611e618161172f610cc1565b611739919061451e565b111561177a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611771906142c0565b60405180910390fd5b601654811115801561178c5750600081115b6117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906143c0565b60405180910390fd5b346117e18260145461286290919063ffffffff16565b14611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890614240565b60405180910390fd5b60005b818110156118685761183d33611838612878565b612882565b600c600081548092919061185090614756565b9190505550808061186090614756565b915050611824565b5050565b611874612467565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990614140565b60405180910390fd5b80600560006118ef612467565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661199c612467565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119e19190614043565b60405180910390a35050565b60165481565b611a046119fe612467565b83612528565b611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a90614340565b60405180910390fd5b611a4f848484846128a0565b50505050565b611a5d612467565b73ffffffffffffffffffffffffffffffffffffffff16611a7b61156a565b73ffffffffffffffffffffffffffffffffffffffff1614611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac8906142a0565b60405180910390fd5b8060148190555050565b6060611ae6826123fb565b611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90614300565b60405180910390fd5b6000611b2f6128fc565b90506000815111611b4f5760405180602001604052806000815250611b7a565b80611b598461298e565b604051602001611b6a929190613f6d565b6040516020818303038152906040525b915050919050565b60155481565b611e61611b93610cc1565b10611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614180565b60405180910390fd5b60001515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611d445760405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101559050506001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80611e611015611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d80906140c0565b60405180910390fd5b60008111611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc3906141a0565b60405180910390fd5b60001515600e60149054906101000a900460ff16151514611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e19906143e0565b60405180910390fd5b6016548111158015611e345750600081115b611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a906143c0565b60405180910390fd5b60115481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611ec4919061451e565b1115611f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efc906141e0565b60405180910390fd5b34611f1b82600f5461286290919063ffffffff16565b14611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f52906143a0565b60405180910390fd5b600033604051602001611f6e9190613f52565b604051602081830303815290604052805190602001209050611fd2858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508483612aef565b612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890614380565b60405180910390fd5b60005b828110156120585761202d33612028612878565b612882565b600c600081548092919061204090614756565b9190505550808061205090614756565b915050612014565b5081601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546120ab919061451e565b925050819055505050505050565b611e6181565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612161612467565b73ffffffffffffffffffffffffffffffffffffffff1661217f61156a565b73ffffffffffffffffffffffffffffffffffffffff16146121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc906142a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c906140e0565b60405180910390fd5b61224e81612b06565b50565b60136020528060005260406000206000915054906101000a900460ff1681565b612279612467565b73ffffffffffffffffffffffffffffffffffffffff1661229761156a565b73ffffffffffffffffffffffffffffffffffffffff16146122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e4906142a0565b60405180910390fd5b600e60149054906101000a900460ff1615600e60146101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123e457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123f457506123f382612bcc565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124e2836112c4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612533826123fb565b612572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256990614160565b60405180910390fd5b600061257d836112c4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125ec57508373ffffffffffffffffffffffffffffffffffffffff166125d484610b1e565b73ffffffffffffffffffffffffffffffffffffffff16145b806125fd57506125fc81856120c5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612626826112c4565b73ffffffffffffffffffffffffffffffffffffffff161461267c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612673906142e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e390614120565b60405180910390fd5b6126f7838383612c36565b61270260008261246f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461275291906145ff565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127a9919061451e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000818361287091906145a5565b905092915050565b6000600c54905090565b61289c828260405180602001604052806000815250612d4a565b5050565b6128ab848484612606565b6128b784848484612da5565b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906140a0565b60405180910390fd5b50505050565b60606006805461290b906146f3565b80601f0160208091040260200160405190810160405280929190818152602001828054612937906146f3565b80156129845780601f1061295957610100808354040283529160200191612984565b820191906000526020600020905b81548152906001019060200180831161296757829003601f168201915b5050505050905090565b606060008214156129d6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aea565b600082905060005b60008214612a085780806129f190614756565b915050600a82612a019190614574565b91506129de565b60008167ffffffffffffffff811115612a2457612a236148df565b5b6040519080825280601f01601f191660200182016040528015612a565781602001600182028036833780820191505090505b5090505b60008514612ae357600182612a6f91906145ff565b9150600a85612a7e91906147c3565b6030612a8a919061451e565b60f81b818381518110612aa057612a9f6148b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612adc9190614574565b9450612a5a565b8093505050505b919050565b600082612afc8584612f3c565b1490509392505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c41838383612fb1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c8457612c7f81612fb6565b612cc3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cc257612cc18382612fff565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0657612d018161316c565b612d45565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d4457612d43828261323d565b5b5b505050565b612d5483836132bc565b612d616000848484612da5565b612da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d97906140a0565b60405180910390fd5b505050565b6000612dc68473ffffffffffffffffffffffffffffffffffffffff1661348a565b15612f2f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612def612467565b8786866040518563ffffffff1660e01b8152600401612e119493929190613fac565b602060405180830381600087803b158015612e2b57600080fd5b505af1925050508015612e5c57506040513d601f19601f82011682018060405250810190612e59919061396f565b60015b612edf573d8060008114612e8c576040519150601f19603f3d011682016040523d82523d6000602084013e612e91565b606091505b50600081511415612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece906140a0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f34565b600190505b949350505050565b60008082905060005b8451811015612fa6576000858281518110612f6357612f626148b0565b5b60200260200101519050808311612f8557612f7e838261349d565b9250612f92565b612f8f818461349d565b92505b508080612f9e90614756565b915050612f45565b508091505092915050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161300c84611376565b61301691906145ff565b90506000600860008481526020019081526020016000205490508181146130fb576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061318091906145ff565b90506000600a60008481526020019081526020016000205490506000600983815481106131b0576131af6148b0565b5b9060005260206000200154905080600983815481106131d2576131d16148b0565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061322157613220614881565b5b6001900381819060005260206000200160009055905550505050565b600061324883611376565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561332c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332390614260565b60405180910390fd5b613335816123fb565b15613375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336c90614100565b60405180910390fd5b61338160008383612c36565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d1919061451e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b600082600052816020526040600020905092915050565b8280546134c0906146f3565b90600052602060002090601f0160209004810192826134e25760008555613529565b82601f106134fb57805160ff1916838001178555613529565b82800160010185558215613529579182015b8281111561352857825182559160200191906001019061350d565b5b509050613536919061353a565b5090565b5b8082111561355357600081600090555060010161353b565b5090565b600061356a61356584614440565b61441b565b9050828152602081018484840111156135865761358561491d565b5b6135918482856146b1565b509392505050565b60006135ac6135a784614471565b61441b565b9050828152602081018484840111156135c8576135c761491d565b5b6135d38482856146b1565b509392505050565b6000813590506135ea816150be565b92915050565b60008083601f84011261360657613605614913565b5b8235905067ffffffffffffffff8111156136235761362261490e565b5b60208301915083602082028301111561363f5761363e614918565b5b9250929050565b600081359050613655816150d5565b92915050565b60008135905061366a816150ec565b92915050565b60008135905061367f81615103565b92915050565b60008151905061369481615103565b92915050565b600082601f8301126136af576136ae614913565b5b81356136bf848260208601613557565b91505092915050565b600082601f8301126136dd576136dc614913565b5b81356136ed848260208601613599565b91505092915050565b6000813590506137058161511a565b92915050565b60006020828403121561372157613720614927565b5b600061372f848285016135db565b91505092915050565b6000806040838503121561374f5761374e614927565b5b600061375d858286016135db565b925050602061376e858286016135db565b9150509250929050565b60008060006060848603121561379157613790614927565b5b600061379f868287016135db565b93505060206137b0868287016135db565b92505060406137c1868287016136f6565b9150509250925092565b600080600080608085870312156137e5576137e4614927565b5b60006137f3878288016135db565b9450506020613804878288016135db565b9350506040613815878288016136f6565b925050606085013567ffffffffffffffff81111561383657613835614922565b5b6138428782880161369a565b91505092959194509250565b6000806040838503121561386557613864614927565b5b6000613873858286016135db565b925050602061388485828601613646565b9150509250929050565b600080604083850312156138a5576138a4614927565b5b60006138b3858286016135db565b92505060206138c4858286016136f6565b9150509250929050565b600080600080606085870312156138e8576138e7614927565b5b600085013567ffffffffffffffff81111561390657613905614922565b5b613912878288016135f0565b945094505060206139258782880161365b565b9250506040613936878288016136f6565b91505092959194509250565b60006020828403121561395857613957614927565b5b600061396684828501613670565b91505092915050565b60006020828403121561398557613984614927565b5b600061399384828501613685565b91505092915050565b6000602082840312156139b2576139b1614927565b5b600082013567ffffffffffffffff8111156139d0576139cf614922565b5b6139dc848285016136c8565b91505092915050565b6000602082840312156139fb576139fa614927565b5b6000613a09848285016136f6565b91505092915050565b6000613a1e8383613f34565b60208301905092915050565b613a3381614633565b82525050565b613a4a613a4582614633565b61479f565b82525050565b6000613a5b826144b2565b613a6581856144e0565b9350613a70836144a2565b8060005b83811015613aa1578151613a888882613a12565b9750613a93836144d3565b925050600181019050613a74565b5085935050505092915050565b613ab781614645565b82525050565b6000613ac8826144bd565b613ad281856144f1565b9350613ae28185602086016146c0565b613aeb8161492c565b840191505092915050565b6000613b01826144c8565b613b0b8185614502565b9350613b1b8185602086016146c0565b613b248161492c565b840191505092915050565b6000613b3a826144c8565b613b448185614513565b9350613b548185602086016146c0565b80840191505092915050565b6000613b6d602b83614502565b9150613b788261494a565b604082019050919050565b6000613b90603283614502565b9150613b9b82614999565b604082019050919050565b6000613bb3602483614502565b9150613bbe826149e8565b604082019050919050565b6000613bd6602683614502565b9150613be182614a37565b604082019050919050565b6000613bf9601c83614502565b9150613c0482614a86565b602082019050919050565b6000613c1c602483614502565b9150613c2782614aaf565b604082019050919050565b6000613c3f601983614502565b9150613c4a82614afe565b602082019050919050565b6000613c62602c83614502565b9150613c6d82614b27565b604082019050919050565b6000613c85600a83614502565b9150613c9082614b76565b602082019050919050565b6000613ca8603383614502565b9150613cb382614b9f565b604082019050919050565b6000613ccb603883614502565b9150613cd682614bee565b604082019050919050565b6000613cee602783614502565b9150613cf982614c3d565b604082019050919050565b6000613d11602a83614502565b9150613d1c82614c8c565b604082019050919050565b6000613d34602983614502565b9150613d3f82614cdb565b604082019050919050565b6000613d57601d83614502565b9150613d6282614d2a565b602082019050919050565b6000613d7a602083614502565b9150613d8582614d53565b602082019050919050565b6000613d9d602c83614502565b9150613da882614d7c565b604082019050919050565b6000613dc0602083614502565b9150613dcb82614dcb565b602082019050919050565b6000613de3602683614502565b9150613dee82614df4565b604082019050919050565b6000613e06602983614502565b9150613e1182614e43565b604082019050919050565b6000613e29602f83614502565b9150613e3482614e92565b604082019050919050565b6000613e4c602183614502565b9150613e5782614ee1565b604082019050919050565b6000613e6f603183614502565b9150613e7a82614f30565b604082019050919050565b6000613e92602c83614502565b9150613e9d82614f7f565b604082019050919050565b6000613eb5600d83614502565b9150613ec082614fce565b602082019050919050565b6000613ed8601d83614502565b9150613ee382614ff7565b602082019050919050565b6000613efb604183614502565b9150613f0682615020565b606082019050919050565b6000613f1e602083614502565b9150613f2982615095565b602082019050919050565b613f3d816146a7565b82525050565b613f4c816146a7565b82525050565b6000613f5e8284613a39565b60148201915081905092915050565b6000613f798285613b2f565b9150613f858284613b2f565b91508190509392505050565b6000602082019050613fa66000830184613a2a565b92915050565b6000608082019050613fc16000830187613a2a565b613fce6020830186613a2a565b613fdb6040830185613f43565b8181036060830152613fed8184613abd565b905095945050505050565b600060408201905061400d6000830185613a2a565b61401a6020830184613f43565b9392505050565b6000602082019050818103600083015261403b8184613a50565b905092915050565b60006020820190506140586000830184613aae565b92915050565b600060208201905081810360008301526140788184613af6565b905092915050565b6000602082019050818103600083015261409981613b60565b9050919050565b600060208201905081810360008301526140b981613b83565b9050919050565b600060208201905081810360008301526140d981613ba6565b9050919050565b600060208201905081810360008301526140f981613bc9565b9050919050565b6000602082019050818103600083015261411981613bec565b9050919050565b6000602082019050818103600083015261413981613c0f565b9050919050565b6000602082019050818103600083015261415981613c32565b9050919050565b6000602082019050818103600083015261417981613c55565b9050919050565b6000602082019050818103600083015261419981613c78565b9050919050565b600060208201905081810360008301526141b981613c9b565b9050919050565b600060208201905081810360008301526141d981613cbe565b9050919050565b600060208201905081810360008301526141f981613ce1565b9050919050565b6000602082019050818103600083015261421981613d04565b9050919050565b6000602082019050818103600083015261423981613d27565b9050919050565b6000602082019050818103600083015261425981613d4a565b9050919050565b6000602082019050818103600083015261427981613d6d565b9050919050565b6000602082019050818103600083015261429981613d90565b9050919050565b600060208201905081810360008301526142b981613db3565b9050919050565b600060208201905081810360008301526142d981613dd6565b9050919050565b600060208201905081810360008301526142f981613df9565b9050919050565b6000602082019050818103600083015261431981613e1c565b9050919050565b6000602082019050818103600083015261433981613e3f565b9050919050565b6000602082019050818103600083015261435981613e62565b9050919050565b6000602082019050818103600083015261437981613e85565b9050919050565b6000602082019050818103600083015261439981613ea8565b9050919050565b600060208201905081810360008301526143b981613ecb565b9050919050565b600060208201905081810360008301526143d981613eee565b9050919050565b600060208201905081810360008301526143f981613f11565b9050919050565b60006020820190506144156000830184613f43565b92915050565b6000614425614436565b90506144318282614725565b919050565b6000604051905090565b600067ffffffffffffffff82111561445b5761445a6148df565b5b6144648261492c565b9050602081019050919050565b600067ffffffffffffffff82111561448c5761448b6148df565b5b6144958261492c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614529826146a7565b9150614534836146a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614569576145686147f4565b5b828201905092915050565b600061457f826146a7565b915061458a836146a7565b92508261459a57614599614823565b5b828204905092915050565b60006145b0826146a7565b91506145bb836146a7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145f4576145f36147f4565b5b828202905092915050565b600061460a826146a7565b9150614615836146a7565b925082821015614628576146276147f4565b5b828203905092915050565b600061463e82614687565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146de5780820151818401526020810190506146c3565b838111156146ed576000848401525b50505050565b6000600282049050600182168061470b57607f821691505b6020821081141561471f5761471e614852565b5b50919050565b61472e8261492c565b810181811067ffffffffffffffff8211171561474d5761474c6148df565b5b80604052505050565b6000614761826146a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614794576147936147f4565b5b600182019050919050565b60006147aa826147b1565b9050919050565b60006147bc8261493d565b9050919050565b60006147ce826146a7565b91506147d9836146a7565b9250826147e9576147e8614823565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f43686f73656e20616d6f756e742069732067726561746572207468616e20737560008201527f70706c7900000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f53616c6520456e64656400000000000000000000000000000000000000000000600082015250565b7f4e756d626572204f6620546f6b656e732043616e204e6f74204265204c65737360008201527f205468616e204f7220457175616c20546f203000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f5175616e74697479204d757374204265204c6573736572205468616e204d617860008201527f20537570706c7900000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e76616c69642050726f6f6600000000000000000000000000000000000000600082015250565b7f53656e742045746865722056616c756520497320496e636f7272656374000000600082015250565b7f43686f73656e20416d6f756e742053686f756c6420626520677265617465722060008201527f7468656e203020616e64206c657373207468656e206d6178207175616e74697460208201527f7900000000000000000000000000000000000000000000000000000000000000604082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6150c781614633565b81146150d257600080fd5b50565b6150de81614645565b81146150e957600080fd5b50565b6150f581614651565b811461510057600080fd5b50565b61510c8161465b565b811461511757600080fd5b50565b615123816146a7565b811461512e57600080fd5b5056fea2646970667358221220d7285af48f434356431be5f35edd0095d5ba4117870e1ddab5f7b99a4a3fc73164736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f74686c632d6261636b656e642e6865726f6b756170702e636f6d2f6170692f6c696f6e732f00000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102445760003560e01c80636352211e11610139578063b88d4fde116100b6578063db4568e21161007a578063db4568e2146108ab578063e757c17d146108d6578063e985e9c514610901578063f2fde38b1461093e578063f3c7fbbb14610967578063fa62884c146109a457610244565b8063b88d4fde146107d5578063c6275255146107fe578063c87b56dd14610827578063cbfd14a214610864578063d628945f1461088f57610244565b806395d89b41116100fd57806395d89b41146106fd5780639e21dabb14610728578063a0712d6814610765578063a22cb46514610781578063b33ee278146107aa57610244565b80636352211e146105f057806370a082311461062d578063743976a01461066a5780638462151c146106955780638da5cb5b146106d257610244565b80632922c1ec116101c75780633ccfd60b1161018b5780633ccfd60b1461051f57806342842e0e146105365780634f6ccce71461055f57806355f804b31461059c5780635c381dda146105c557610244565b80632922c1ec146104285780632e055bcc146104515780632f745c591461047c57806330a3f446146104b957806331ba3dfc146104f657610244565b8063095ea7b31161020e578063095ea7b31461035757806309f29f921461038057806318160ddd146103ab5780631f9443ca146103d657806323b872dd146103ff57610244565b80628ca81614610249578062b0e7031461027457806301ffc9a7146102b257806306fdde03146102ef578063081812fc1461031a575b600080fd5b34801561025557600080fd5b5061025e6109bb565b60405161026b9190614043565b60405180910390f35b34801561028057600080fd5b5061029b6004803603810190610296919061370b565b6109ce565b6040516102a9929190613ff8565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613942565b610a12565b6040516102e69190614043565b60405180910390f35b3480156102fb57600080fd5b50610304610a8c565b604051610311919061405e565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c91906139e5565b610b1e565b60405161034e9190613f91565b60405180910390f35b34801561036357600080fd5b5061037e6004803603810190610379919061388e565b610ba3565b005b34801561038c57600080fd5b50610395610cbb565b6040516103a29190614400565b60405180910390f35b3480156103b757600080fd5b506103c0610cc1565b6040516103cd9190614400565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f891906139e5565b610cce565b005b34801561040b57600080fd5b5061042660048036038101906104219190613778565b610d54565b005b34801561043457600080fd5b5061044f600480360381019061044a91906139e5565b610db4565b005b34801561045d57600080fd5b50610466610e3a565b6040516104739190614400565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061388e565b610e40565b6040516104b09190614400565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db91906139e5565b610ee5565b6040516104ed9190614400565b60405180910390f35b34801561050257600080fd5b5061051d600480360381019061051891906139e5565b610efc565b005b34801561052b57600080fd5b50610534610f82565b005b34801561054257600080fd5b5061055d60048036038101906105589190613778565b611197565b005b34801561056b57600080fd5b50610586600480360381019061058191906139e5565b6111b7565b6040516105939190614400565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be919061399c565b611228565b005b3480156105d157600080fd5b506105da6112be565b6040516105e79190614400565b60405180910390f35b3480156105fc57600080fd5b50610617600480360381019061061291906139e5565b6112c4565b6040516106249190613f91565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f919061370b565b611376565b6040516106619190614400565b60405180910390f35b34801561067657600080fd5b5061067f61142e565b60405161068c919061405e565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b7919061370b565b6114bc565b6040516106c99190614021565b60405180910390f35b3480156106de57600080fd5b506106e761156a565b6040516106f49190613f91565b60405180910390f35b34801561070957600080fd5b50610712611594565b60405161071f919061405e565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a91906139e5565b611626565b60405161075c9190614400565b60405180910390f35b61077f600480360381019061077a91906139e5565b61163d565b005b34801561078d57600080fd5b506107a860048036038101906107a3919061384e565b61186c565b005b3480156107b657600080fd5b506107bf6119ed565b6040516107cc9190614400565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906137cb565b6119f3565b005b34801561080a57600080fd5b50610825600480360381019061082091906139e5565b611a55565b005b34801561083357600080fd5b5061084e600480360381019061084991906139e5565b611adb565b60405161085b919061405e565b60405180910390f35b34801561087057600080fd5b50610879611b82565b6040516108869190614400565b60405180910390f35b6108a960048036038101906108a491906138ce565b611b88565b005b3480156108b757600080fd5b506108c06120b9565b6040516108cd9190614400565b60405180910390f35b3480156108e257600080fd5b506108eb6120bf565b6040516108f89190614400565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190613738565b6120c5565b6040516109359190614043565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061370b565b612159565b005b34801561097357600080fd5b5061098e6004803603810190610989919061370b565b612251565b60405161099b9190614043565b60405180910390f35b3480156109b057600080fd5b506109b9612271565b005b600e60149054906101000a900460ff1681565b60126020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a855750610a8482612319565b5b9050919050565b606060008054610a9b906146f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac7906146f3565b8015610b145780601f10610ae957610100808354040283529160200191610b14565b820191906000526020600020905b815481529060010190602001808311610af757829003601f168201915b5050505050905090565b6000610b29826123fb565b610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f90614280565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bae826112c4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690614320565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c3e612467565b73ffffffffffffffffffffffffffffffffffffffff161480610c6d5750610c6c81610c67612467565b6120c5565b5b610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca3906141c0565b60405180910390fd5b610cb6838361246f565b505050565b60115481565b6000600980549050905090565b610cd6612467565b73ffffffffffffffffffffffffffffffffffffffff16610cf461156a565b73ffffffffffffffffffffffffffffffffffffffff1614610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d41906142a0565b60405180910390fd5b8060168190555050565b610d65610d5f612467565b82612528565b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614340565b60405180910390fd5b610daf838383612606565b505050565b610dbc612467565b73ffffffffffffffffffffffffffffffffffffffff16610dda61156a565b73ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e27906142a0565b60405180910390fd5b8060118190555050565b60105481565b6000610e4b83611376565b8210610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390614080565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060145482610ef591906145a5565b9050919050565b610f04612467565b73ffffffffffffffffffffffffffffffffffffffff16610f2261156a565b73ffffffffffffffffffffffffffffffffffffffff1614610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906142a0565b60405180910390fd5b80600f8190555050565b610f8a612467565b73ffffffffffffffffffffffffffffffffffffffff16610fa861156a565b73ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff5906142a0565b60405180910390fd5b60004790506000606460628361101491906145a5565b61101e9190614574565b90506000606460028461103191906145a5565b61103b9190614574565b90506000606460558361104e91906145a5565b6110589190614574565b905060006064600f8461106b91906145a5565b6110759190614574565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156110bd573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611126573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561118f573d6000803e3d6000fd5b505050505050565b6111b2838383604051806020016040528060008152506119f3565b505050565b60006111c1610cc1565b8210611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614360565b60405180910390fd5b60098281548110611216576112156148b0565b5b90600052602060002001549050919050565b611230612467565b73ffffffffffffffffffffffffffffffffffffffff1661124e61156a565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b906142a0565b60405180910390fd5b80600690805190602001906112ba9291906134b4565b5050565b60145481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490614220565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614200565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6006805461143b906146f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611467906146f3565b80156114b45780601f10611489576101008083540402835291602001916114b4565b820191906000526020600020905b81548152906001019060200180831161149757829003601f168201915b505050505081565b606060006114c983611376565b905060008167ffffffffffffffff8111156114e7576114e66148df565b5b6040519080825280602002602001820160405280156115155781602001602082028036833780820191505090505b50905060005b8281101561155f5761152d8582610e40565b8282815181106115405761153f6148b0565b5b602002602001018181525050808061155790614756565b91505061151b565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115a3906146f3565b80601f01602080910402602001604051908101604052809291908181526020018280546115cf906146f3565b801561161c5780601f106115f15761010080835404028352916020019161161c565b820191906000526020600020905b8154815290600101906020018083116115ff57829003601f168201915b5050505050905090565b6000600f548261163691906145a5565b9050919050565b611e61611648610cc1565b10611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f90614180565b60405180910390fd5b80611e6110156116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c4906140c0565b60405180910390fd5b60001515600e60149054906101000a900460ff16151514611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906143e0565b60405180910390fd5b611e618161172f610cc1565b611739919061451e565b111561177a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611771906142c0565b60405180910390fd5b601654811115801561178c5750600081115b6117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906143c0565b60405180910390fd5b346117e18260145461286290919063ffffffff16565b14611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890614240565b60405180910390fd5b60005b818110156118685761183d33611838612878565b612882565b600c600081548092919061185090614756565b9190505550808061186090614756565b915050611824565b5050565b611874612467565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990614140565b60405180910390fd5b80600560006118ef612467565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661199c612467565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119e19190614043565b60405180910390a35050565b60165481565b611a046119fe612467565b83612528565b611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a90614340565b60405180910390fd5b611a4f848484846128a0565b50505050565b611a5d612467565b73ffffffffffffffffffffffffffffffffffffffff16611a7b61156a565b73ffffffffffffffffffffffffffffffffffffffff1614611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac8906142a0565b60405180910390fd5b8060148190555050565b6060611ae6826123fb565b611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90614300565b60405180910390fd5b6000611b2f6128fc565b90506000815111611b4f5760405180602001604052806000815250611b7a565b80611b598461298e565b604051602001611b6a929190613f6d565b6040516020818303038152906040525b915050919050565b60155481565b611e61611b93610cc1565b10611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614180565b60405180910390fd5b60001515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611d445760405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101559050506001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80611e611015611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d80906140c0565b60405180910390fd5b60008111611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc3906141a0565b60405180910390fd5b60001515600e60149054906101000a900460ff16151514611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e19906143e0565b60405180910390fd5b6016548111158015611e345750600081115b611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a906143c0565b60405180910390fd5b60115481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611ec4919061451e565b1115611f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efc906141e0565b60405180910390fd5b34611f1b82600f5461286290919063ffffffff16565b14611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f52906143a0565b60405180910390fd5b600033604051602001611f6e9190613f52565b604051602081830303815290604052805190602001209050611fd2858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508483612aef565b612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890614380565b60405180910390fd5b60005b828110156120585761202d33612028612878565b612882565b600c600081548092919061204090614756565b9190505550808061205090614756565b915050612014565b5081601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546120ab919061451e565b925050819055505050505050565b611e6181565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612161612467565b73ffffffffffffffffffffffffffffffffffffffff1661217f61156a565b73ffffffffffffffffffffffffffffffffffffffff16146121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc906142a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c906140e0565b60405180910390fd5b61224e81612b06565b50565b60136020528060005260406000206000915054906101000a900460ff1681565b612279612467565b73ffffffffffffffffffffffffffffffffffffffff1661229761156a565b73ffffffffffffffffffffffffffffffffffffffff16146122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e4906142a0565b60405180910390fd5b600e60149054906101000a900460ff1615600e60146101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123e457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123f457506123f382612bcc565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124e2836112c4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612533826123fb565b612572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256990614160565b60405180910390fd5b600061257d836112c4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125ec57508373ffffffffffffffffffffffffffffffffffffffff166125d484610b1e565b73ffffffffffffffffffffffffffffffffffffffff16145b806125fd57506125fc81856120c5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612626826112c4565b73ffffffffffffffffffffffffffffffffffffffff161461267c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612673906142e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e390614120565b60405180910390fd5b6126f7838383612c36565b61270260008261246f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461275291906145ff565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127a9919061451e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000818361287091906145a5565b905092915050565b6000600c54905090565b61289c828260405180602001604052806000815250612d4a565b5050565b6128ab848484612606565b6128b784848484612da5565b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906140a0565b60405180910390fd5b50505050565b60606006805461290b906146f3565b80601f0160208091040260200160405190810160405280929190818152602001828054612937906146f3565b80156129845780601f1061295957610100808354040283529160200191612984565b820191906000526020600020905b81548152906001019060200180831161296757829003601f168201915b5050505050905090565b606060008214156129d6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aea565b600082905060005b60008214612a085780806129f190614756565b915050600a82612a019190614574565b91506129de565b60008167ffffffffffffffff811115612a2457612a236148df565b5b6040519080825280601f01601f191660200182016040528015612a565781602001600182028036833780820191505090505b5090505b60008514612ae357600182612a6f91906145ff565b9150600a85612a7e91906147c3565b6030612a8a919061451e565b60f81b818381518110612aa057612a9f6148b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612adc9190614574565b9450612a5a565b8093505050505b919050565b600082612afc8584612f3c565b1490509392505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c41838383612fb1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c8457612c7f81612fb6565b612cc3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cc257612cc18382612fff565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0657612d018161316c565b612d45565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d4457612d43828261323d565b5b5b505050565b612d5483836132bc565b612d616000848484612da5565b612da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d97906140a0565b60405180910390fd5b505050565b6000612dc68473ffffffffffffffffffffffffffffffffffffffff1661348a565b15612f2f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612def612467565b8786866040518563ffffffff1660e01b8152600401612e119493929190613fac565b602060405180830381600087803b158015612e2b57600080fd5b505af1925050508015612e5c57506040513d601f19601f82011682018060405250810190612e59919061396f565b60015b612edf573d8060008114612e8c576040519150601f19603f3d011682016040523d82523d6000602084013e612e91565b606091505b50600081511415612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece906140a0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f34565b600190505b949350505050565b60008082905060005b8451811015612fa6576000858281518110612f6357612f626148b0565b5b60200260200101519050808311612f8557612f7e838261349d565b9250612f92565b612f8f818461349d565b92505b508080612f9e90614756565b915050612f45565b508091505092915050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161300c84611376565b61301691906145ff565b90506000600860008481526020019081526020016000205490508181146130fb576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061318091906145ff565b90506000600a60008481526020019081526020016000205490506000600983815481106131b0576131af6148b0565b5b9060005260206000200154905080600983815481106131d2576131d16148b0565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061322157613220614881565b5b6001900381819060005260206000200160009055905550505050565b600061324883611376565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561332c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332390614260565b60405180910390fd5b613335816123fb565b15613375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336c90614100565b60405180910390fd5b61338160008383612c36565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d1919061451e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b600082600052816020526040600020905092915050565b8280546134c0906146f3565b90600052602060002090601f0160209004810192826134e25760008555613529565b82601f106134fb57805160ff1916838001178555613529565b82800160010185558215613529579182015b8281111561352857825182559160200191906001019061350d565b5b509050613536919061353a565b5090565b5b8082111561355357600081600090555060010161353b565b5090565b600061356a61356584614440565b61441b565b9050828152602081018484840111156135865761358561491d565b5b6135918482856146b1565b509392505050565b60006135ac6135a784614471565b61441b565b9050828152602081018484840111156135c8576135c761491d565b5b6135d38482856146b1565b509392505050565b6000813590506135ea816150be565b92915050565b60008083601f84011261360657613605614913565b5b8235905067ffffffffffffffff8111156136235761362261490e565b5b60208301915083602082028301111561363f5761363e614918565b5b9250929050565b600081359050613655816150d5565b92915050565b60008135905061366a816150ec565b92915050565b60008135905061367f81615103565b92915050565b60008151905061369481615103565b92915050565b600082601f8301126136af576136ae614913565b5b81356136bf848260208601613557565b91505092915050565b600082601f8301126136dd576136dc614913565b5b81356136ed848260208601613599565b91505092915050565b6000813590506137058161511a565b92915050565b60006020828403121561372157613720614927565b5b600061372f848285016135db565b91505092915050565b6000806040838503121561374f5761374e614927565b5b600061375d858286016135db565b925050602061376e858286016135db565b9150509250929050565b60008060006060848603121561379157613790614927565b5b600061379f868287016135db565b93505060206137b0868287016135db565b92505060406137c1868287016136f6565b9150509250925092565b600080600080608085870312156137e5576137e4614927565b5b60006137f3878288016135db565b9450506020613804878288016135db565b9350506040613815878288016136f6565b925050606085013567ffffffffffffffff81111561383657613835614922565b5b6138428782880161369a565b91505092959194509250565b6000806040838503121561386557613864614927565b5b6000613873858286016135db565b925050602061388485828601613646565b9150509250929050565b600080604083850312156138a5576138a4614927565b5b60006138b3858286016135db565b92505060206138c4858286016136f6565b9150509250929050565b600080600080606085870312156138e8576138e7614927565b5b600085013567ffffffffffffffff81111561390657613905614922565b5b613912878288016135f0565b945094505060206139258782880161365b565b9250506040613936878288016136f6565b91505092959194509250565b60006020828403121561395857613957614927565b5b600061396684828501613670565b91505092915050565b60006020828403121561398557613984614927565b5b600061399384828501613685565b91505092915050565b6000602082840312156139b2576139b1614927565b5b600082013567ffffffffffffffff8111156139d0576139cf614922565b5b6139dc848285016136c8565b91505092915050565b6000602082840312156139fb576139fa614927565b5b6000613a09848285016136f6565b91505092915050565b6000613a1e8383613f34565b60208301905092915050565b613a3381614633565b82525050565b613a4a613a4582614633565b61479f565b82525050565b6000613a5b826144b2565b613a6581856144e0565b9350613a70836144a2565b8060005b83811015613aa1578151613a888882613a12565b9750613a93836144d3565b925050600181019050613a74565b5085935050505092915050565b613ab781614645565b82525050565b6000613ac8826144bd565b613ad281856144f1565b9350613ae28185602086016146c0565b613aeb8161492c565b840191505092915050565b6000613b01826144c8565b613b0b8185614502565b9350613b1b8185602086016146c0565b613b248161492c565b840191505092915050565b6000613b3a826144c8565b613b448185614513565b9350613b548185602086016146c0565b80840191505092915050565b6000613b6d602b83614502565b9150613b788261494a565b604082019050919050565b6000613b90603283614502565b9150613b9b82614999565b604082019050919050565b6000613bb3602483614502565b9150613bbe826149e8565b604082019050919050565b6000613bd6602683614502565b9150613be182614a37565b604082019050919050565b6000613bf9601c83614502565b9150613c0482614a86565b602082019050919050565b6000613c1c602483614502565b9150613c2782614aaf565b604082019050919050565b6000613c3f601983614502565b9150613c4a82614afe565b602082019050919050565b6000613c62602c83614502565b9150613c6d82614b27565b604082019050919050565b6000613c85600a83614502565b9150613c9082614b76565b602082019050919050565b6000613ca8603383614502565b9150613cb382614b9f565b604082019050919050565b6000613ccb603883614502565b9150613cd682614bee565b604082019050919050565b6000613cee602783614502565b9150613cf982614c3d565b604082019050919050565b6000613d11602a83614502565b9150613d1c82614c8c565b604082019050919050565b6000613d34602983614502565b9150613d3f82614cdb565b604082019050919050565b6000613d57601d83614502565b9150613d6282614d2a565b602082019050919050565b6000613d7a602083614502565b9150613d8582614d53565b602082019050919050565b6000613d9d602c83614502565b9150613da882614d7c565b604082019050919050565b6000613dc0602083614502565b9150613dcb82614dcb565b602082019050919050565b6000613de3602683614502565b9150613dee82614df4565b604082019050919050565b6000613e06602983614502565b9150613e1182614e43565b604082019050919050565b6000613e29602f83614502565b9150613e3482614e92565b604082019050919050565b6000613e4c602183614502565b9150613e5782614ee1565b604082019050919050565b6000613e6f603183614502565b9150613e7a82614f30565b604082019050919050565b6000613e92602c83614502565b9150613e9d82614f7f565b604082019050919050565b6000613eb5600d83614502565b9150613ec082614fce565b602082019050919050565b6000613ed8601d83614502565b9150613ee382614ff7565b602082019050919050565b6000613efb604183614502565b9150613f0682615020565b606082019050919050565b6000613f1e602083614502565b9150613f2982615095565b602082019050919050565b613f3d816146a7565b82525050565b613f4c816146a7565b82525050565b6000613f5e8284613a39565b60148201915081905092915050565b6000613f798285613b2f565b9150613f858284613b2f565b91508190509392505050565b6000602082019050613fa66000830184613a2a565b92915050565b6000608082019050613fc16000830187613a2a565b613fce6020830186613a2a565b613fdb6040830185613f43565b8181036060830152613fed8184613abd565b905095945050505050565b600060408201905061400d6000830185613a2a565b61401a6020830184613f43565b9392505050565b6000602082019050818103600083015261403b8184613a50565b905092915050565b60006020820190506140586000830184613aae565b92915050565b600060208201905081810360008301526140788184613af6565b905092915050565b6000602082019050818103600083015261409981613b60565b9050919050565b600060208201905081810360008301526140b981613b83565b9050919050565b600060208201905081810360008301526140d981613ba6565b9050919050565b600060208201905081810360008301526140f981613bc9565b9050919050565b6000602082019050818103600083015261411981613bec565b9050919050565b6000602082019050818103600083015261413981613c0f565b9050919050565b6000602082019050818103600083015261415981613c32565b9050919050565b6000602082019050818103600083015261417981613c55565b9050919050565b6000602082019050818103600083015261419981613c78565b9050919050565b600060208201905081810360008301526141b981613c9b565b9050919050565b600060208201905081810360008301526141d981613cbe565b9050919050565b600060208201905081810360008301526141f981613ce1565b9050919050565b6000602082019050818103600083015261421981613d04565b9050919050565b6000602082019050818103600083015261423981613d27565b9050919050565b6000602082019050818103600083015261425981613d4a565b9050919050565b6000602082019050818103600083015261427981613d6d565b9050919050565b6000602082019050818103600083015261429981613d90565b9050919050565b600060208201905081810360008301526142b981613db3565b9050919050565b600060208201905081810360008301526142d981613dd6565b9050919050565b600060208201905081810360008301526142f981613df9565b9050919050565b6000602082019050818103600083015261431981613e1c565b9050919050565b6000602082019050818103600083015261433981613e3f565b9050919050565b6000602082019050818103600083015261435981613e62565b9050919050565b6000602082019050818103600083015261437981613e85565b9050919050565b6000602082019050818103600083015261439981613ea8565b9050919050565b600060208201905081810360008301526143b981613ecb565b9050919050565b600060208201905081810360008301526143d981613eee565b9050919050565b600060208201905081810360008301526143f981613f11565b9050919050565b60006020820190506144156000830184613f43565b92915050565b6000614425614436565b90506144318282614725565b919050565b6000604051905090565b600067ffffffffffffffff82111561445b5761445a6148df565b5b6144648261492c565b9050602081019050919050565b600067ffffffffffffffff82111561448c5761448b6148df565b5b6144958261492c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614529826146a7565b9150614534836146a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614569576145686147f4565b5b828201905092915050565b600061457f826146a7565b915061458a836146a7565b92508261459a57614599614823565b5b828204905092915050565b60006145b0826146a7565b91506145bb836146a7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145f4576145f36147f4565b5b828202905092915050565b600061460a826146a7565b9150614615836146a7565b925082821015614628576146276147f4565b5b828203905092915050565b600061463e82614687565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146de5780820151818401526020810190506146c3565b838111156146ed576000848401525b50505050565b6000600282049050600182168061470b57607f821691505b6020821081141561471f5761471e614852565b5b50919050565b61472e8261492c565b810181811067ffffffffffffffff8211171561474d5761474c6148df565b5b80604052505050565b6000614761826146a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614794576147936147f4565b5b600182019050919050565b60006147aa826147b1565b9050919050565b60006147bc8261493d565b9050919050565b60006147ce826146a7565b91506147d9836146a7565b9250826147e9576147e8614823565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f43686f73656e20616d6f756e742069732067726561746572207468616e20737560008201527f70706c7900000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f53616c6520456e64656400000000000000000000000000000000000000000000600082015250565b7f4e756d626572204f6620546f6b656e732043616e204e6f74204265204c65737360008201527f205468616e204f7220457175616c20546f203000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f5175616e74697479204d757374204265204c6573736572205468616e204d617860008201527f20537570706c7900000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e76616c69642050726f6f6600000000000000000000000000000000000000600082015250565b7f53656e742045746865722056616c756520497320496e636f7272656374000000600082015250565b7f43686f73656e20416d6f756e742053686f756c6420626520677265617465722060008201527f7468656e203020616e64206c657373207468656e206d6178207175616e74697460208201527f7900000000000000000000000000000000000000000000000000000000000000604082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6150c781614633565b81146150d257600080fd5b50565b6150de81614645565b81146150e957600080fd5b50565b6150f581614651565b811461510057600080fd5b50565b61510c8161465b565b811461511757600080fd5b50565b615123816146a7565b811461512e57600080fd5b5056fea2646970667358221220d7285af48f434356431be5f35edd0095d5ba4117870e1ddab5f7b99a4a3fc73164736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f74686c632d6261636b656e642e6865726f6b756170702e636f6d2f6170692f6c696f6e732f00000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://thlc-backend.herokuapp.com/api/lions/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [2] : 68747470733a2f2f74686c632d6261636b656e642e6865726f6b756170702e63
Arg [3] : 6f6d2f6170692f6c696f6e732f00000000000000000000000000000000000000


Deployed Bytecode Sourcemap

47528:5455:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47972:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48172:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;39501:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27690:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29244:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28767:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48126:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40141:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49358:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30134:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49485:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48078:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39809:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49657:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49047:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52443:537;;;;;;;;;;;;;:::i;:::-;;30544:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40331:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48573:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48296:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27384:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27114:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26412:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52089:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24534:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27859:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49790:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49967:720;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29537:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48401:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30800:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48933:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28034:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48352:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50693:1386;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47703:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48023:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29903:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25334:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48235:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49203:91;;;;;;;;;;;;;:::i;:::-;;47972:42;;;;;;;;;;;;;:::o;48172:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39501:224::-;39603:4;39642:35;39627:50;;;:11;:50;;;;:90;;;;39681:36;39705:11;39681:23;:36::i;:::-;39627:90;39620:97;;39501:224;;;:::o;27690:100::-;27744:13;27777:5;27770:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27690:100;:::o;29244:221::-;29320:7;29348:16;29356:7;29348;:16::i;:::-;29340:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29433:15;:24;29449:7;29433:24;;;;;;;;;;;;;;;;;;;;;29426:31;;29244:221;;;:::o;28767:411::-;28848:13;28864:23;28879:7;28864:14;:23::i;:::-;28848:39;;28912:5;28906:11;;:2;:11;;;;28898:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29006:5;28990:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29015:37;29032:5;29039:12;:10;:12::i;:::-;29015:16;:37::i;:::-;28990:62;28968:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29149:21;29158:2;29162:7;29149:8;:21::i;:::-;28837:341;28767:411;;:::o;48126:39::-;;;;:::o;40141:113::-;40202:7;40229:10;:17;;;;40222:24;;40141:113;:::o;49358:121::-;24765:12;:10;:12::i;:::-;24754:23;;:7;:5;:7::i;:::-;:23;;;24746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49462:9:::1;49439:21;:32;;;;49358:121:::0;:::o;30134:339::-;30329:41;30348:12;:10;:12::i;:::-;30362:7;30329:18;:41::i;:::-;30321:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30437:28;30447:4;30453:2;30457:7;30437:9;:28::i;:::-;30134:339;;;:::o;49485:115::-;24765:12;:10;:12::i;:::-;24754:23;;:7;:5;:7::i;:::-;:23;;;24746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49583:9:::1;49563:18;:29;;;;49485:115:::0;:::o;48078:41::-;;;;:::o;39809:256::-;39906:7;39942:23;39959:5;39942:16;:23::i;:::-;39934:5;:31;39926:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40031:12;:19;40044:5;40031:19;;;;;;;;;;;;;;;:26;40051:5;40031:26;;;;;;;;;;;;40024:33;;39809:256;;;;:::o;49657:127::-;49721:7;49761:15;;49749:9;:27;;;;:::i;:::-;49742:34;;49657:127;;;:::o;49047:109::-;24765:12;:10;:12::i;:::-;24754:23;;:7;:5;:7::i;:::-;:23;;;24746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49139:9:::1;49124:12;:24;;;;49047:109:::0;:::o;52443:537::-;24765:12;:10;:12::i;:::-;24754:23;;:7;:5;:7::i;:::-;:23;;;24746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52491:17:::1;52517:21;52491:47;;52549:17;52595:3;52590:2;52575:12;:17;;;;:::i;:::-;:23;;;;:::i;:::-;52549:49;;52609:21;52654:3;52650:1;52635:12;:16;;;;:::i;:::-;:22;;;;:::i;:::-;52609:48;;52668:21;52718:3;52713:2;52694:16;:21;;;;:::i;:::-;:27;;;;:::i;:::-;52668:53;;52732:20;52782:3;52777:2;52758:16;:21;;;;:::i;:::-;:27;;;;:::i;:::-;52732:53;;52814:10;52806:28;;:42;52835:12;52806:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52867:16;;;;;;;;;;;52859:34;;:52;52894:16;52859:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52930:15;;;;;;;;;;;52922:33;;:50;52956:15;52922:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52480:500;;;;;52443:537::o:0;30544:185::-;30682:39;30699:4;30705:2;30709:7;30682:39;;;;;;;;;;;;:16;:39::i;:::-;30544:185;;;:::o;40331:233::-;40406:7;40442:30;:28;:30::i;:::-;40434:5;:38;40426:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40539:10;40550:5;40539:17;;;;;;;;:::i;:::-;;;;;;;;;;40532:24;;40331:233;;;:::o;48573:97::-;24765:12;:10;:12::i;:::-;24754:23;;:7;:5;:7::i;:::-;:23;;;24746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48655:7:::1;48644:8;:18;;;;;;;;;;;;:::i;:::-;;48573:97:::0;:::o;48296:49::-;;;;:::o;27384:239::-;27456:7;27476:13;27492:7;:16;27500:7;27492:16;;;;;;;;;;;;;;;;;;;;;27476:32;;27544:1;27527:19;;:5;:19;;;;27519:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27610:5;27603:12;;;27384:239;;;:::o;27114:208::-;27186:7;27231:1;27214:19;;:5;:19;;;;27206:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27298:9;:16;27308:5;27298:16;;;;;;;;;;;;;;;;27291:23;;27114:208;;;:::o;26412:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52089:346::-;52149:16;52178:13;52194:17;52204:6;52194:9;:17::i;:::-;52178:33;;52222:23;52262:5;52248:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52222:46;;52284:13;52279:125;52311:5;52303;:13;52279:125;;;52358:34;52378:6;52386:5;52358:19;:34::i;:::-;52342:6;52349:5;52342:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;52318:7;;;;;:::i;:::-;;;;52279:125;;;;52421:6;52414:13;;;;52089:346;;;:::o;24534:87::-;24580:7;24607:6;;;;;;;;;;;24600:13;;24534:87;:::o;27859:104::-;27915:13;27948:7;27941:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27859:104;:::o;49790:125::-;49855:7;49895:12;;49883:9;:24;;;;:::i;:::-;49876:31;;49790:125;;;:::o;49967:720::-;47741:4;48813:13;:11;:13::i;:::-;:28;48805:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;50061:12:::1;47741:4;50045:28;;50037:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50149:5;50133:21;;:12;;;;;;;;;;;:21;;;50125:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47741:4;50226:12;50210:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:44;;50202:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;50332:21;;50316:12;:37;;:57;;;;;50372:1;50357:12;:16;50316:57;50308:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;50499:9;50462:33;50482:12;50462:15;;:19;;:33;;;;:::i;:::-;:46;50454:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;50558:6;50553:127;50574:12;50570:1;:16;50553:127;;;50608:36;50618:10;50630:13;:11;:13::i;:::-;50608:9;:36::i;:::-;50659:7;;:9;;;;;;;;;:::i;:::-;;;;;;50588:3;;;;;:::i;:::-;;;;50553:127;;;;49967:720:::0;:::o;29537:295::-;29652:12;:10;:12::i;:::-;29640:24;;:8;:24;;;;29632:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29752:8;29707:18;:32;29726:12;:10;:12::i;:::-;29707:32;;;;;;;;;;;;;;;:42;29740:8;29707:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29805:8;29776:48;;29791:12;:10;:12::i;:::-;29776:48;;;29815:8;29776:48;;;;;;:::i;:::-;;;;;;;;29537:295;;:::o;48401:40::-;;;;:::o;30800:328::-;30975:41;30994:12;:10;:12::i;:::-;31008:7;30975:18;:41::i;:::-;30967:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31081:39;31095:4;31101:2;31105:7;31114:5;31081:13;:39::i;:::-;30800:328;;;;:::o;48933:108::-;24765:12;:10;:12::i;:::-;24754:23;;:7;:5;:7::i;:::-;:23;;;24746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49024:9:::1;49006:15;:27;;;;48933:108:::0;:::o;28034:324::-;28107:13;28141:16;28149:7;28141;:16::i;:::-;28133:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28222:18;28243:9;:7;:9::i;:::-;28222:30;;28291:1;28276:4;28270:18;:22;:80;;;;;;;;;;;;;;;;;28319:4;28325:18;:7;:16;:18::i;:::-;28302:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28270:80;28263:87;;;28034:324;;;:::o;48352:42::-;;;;:::o;50693:1386::-;47741:4;48813:13;:11;:13::i;:::-;:28;48805:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;50865:5:::1;50829:41;;:20;:32;50850:10;50829:32;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;50825:259;;;50919:99;;;;;;;;50963:10;50919:99;;;;;;51001:1;50919:99;;::::0;50887:17:::1;:29;50905:10;50887:29;;;;;;;;;;;;;;;:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51068:4;51033:20;:32;51054:10;51033:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;50825:259;51118:12;47741:4;51102:28;;51094:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;51205:1;51190:12;:16;51182:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51297:5;51281:21;;:12;;;;;;;;;;;:21;;;51273:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51374:21;;51358:12;:37;;:57;;;;;51414:1;51399:12;:16;51358:57;51350:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;51560:18;;51544:12;51504:17;:29;51522:10;51504:29;;;;;;;;;;;;;;;:37;;;:52;;;;:::i;:::-;:74;;51496:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;51675:9;51641:30;51658:12;51641;;:16;;:30;;;;:::i;:::-;:43;51633:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;51729:12;51771:10;51754:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;51744:39;;;;;;51729:54;;51802:50;51821:12;;51802:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51835:10;51847:4;51802:18;:50::i;:::-;51794:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51886:6;51881:127;51902:12;51898:1;:16;51881:127;;;51936:36;51946:10;51958:13;:11;:13::i;:::-;51936:9;:36::i;:::-;51987:7;;:9;;;;;;;;;:::i;:::-;;;;;;51916:3;;;;;:::i;:::-;;;;51881:127;;;;52059:12;52018:17;:29;52036:10;52018:29;;;;;;;;;;;;;;;:37;;;:53;;;;;;;:::i;:::-;;;;;;;;50814:1265;50693:1386:::0;;;;:::o;47703:42::-;47741:4;47703:42;:::o;48023:48::-;;;;:::o;29903:164::-;30000:4;30024:18;:25;30043:5;30024:25;;;;;;;;;;;;;;;:35;30050:8;30024:35;;;;;;;;;;;;;;;;;;;;;;;;;30017:42;;29903:164;;;;:::o;25334:192::-;24765:12;:10;:12::i;:::-;24754:23;;:7;:5;:7::i;:::-;:23;;;24746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25443:1:::1;25423:22;;:8;:22;;;;25415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25499:19;25509:8;25499:9;:19::i;:::-;25334:192:::0;:::o;48235:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;49203:91::-;24765:12;:10;:12::i;:::-;24754:23;;:7;:5;:7::i;:::-;:23;;;24746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49274:12:::1;;;;;;;;;;;49273:13;49258:12;;:28;;;;;;;;;;;;;;;;;;49203:91::o:0;26745:305::-;26847:4;26899:25;26884:40;;;:11;:40;;;;:105;;;;26956:33;26941:48;;;:11;:48;;;;26884:105;:158;;;;27006:36;27030:11;27006:23;:36::i;:::-;26884:158;26864:178;;26745:305;;;:::o;32638:127::-;32703:4;32755:1;32727:30;;:7;:16;32735:7;32727:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32720:37;;32638:127;;;:::o;23794:98::-;23847:7;23874:10;23867:17;;23794:98;:::o;36620:174::-;36722:2;36695:15;:24;36711:7;36695:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36778:7;36774:2;36740:46;;36749:23;36764:7;36749:14;:23::i;:::-;36740:46;;;;;;;;;;;;36620:174;;:::o;32932:348::-;33025:4;33050:16;33058:7;33050;:16::i;:::-;33042:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33126:13;33142:23;33157:7;33142:14;:23::i;:::-;33126:39;;33195:5;33184:16;;:7;:16;;;:51;;;;33228:7;33204:31;;:20;33216:7;33204:11;:20::i;:::-;:31;;;33184:51;:87;;;;33239:32;33256:5;33263:7;33239:16;:32::i;:::-;33184:87;33176:96;;;32932:348;;;;:::o;35924:578::-;36083:4;36056:31;;:23;36071:7;36056:14;:23::i;:::-;:31;;;36048:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36166:1;36152:16;;:2;:16;;;;36144:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36222:39;36243:4;36249:2;36253:7;36222:20;:39::i;:::-;36326:29;36343:1;36347:7;36326:8;:29::i;:::-;36387:1;36368:9;:15;36378:4;36368:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36416:1;36399:9;:13;36409:2;36399:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36447:2;36428:7;:16;36436:7;36428:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36486:7;36482:2;36467:27;;36476:4;36467:27;;;;;;;;;;;;35924:578;;;:::o;3149:98::-;3207:7;3238:1;3234;:5;;;;:::i;:::-;3227:12;;3149:98;;;;:::o;48682:84::-;48727:4;48751:7;;48744:14;;48682:84;:::o;33622:110::-;33698:26;33708:2;33712:7;33698:26;;;;;;;;;;;;:9;:26::i;:::-;33622:110;;:::o;32010:315::-;32167:28;32177:4;32183:2;32187:7;32167:9;:28::i;:::-;32214:48;32237:4;32243:2;32247:7;32256:5;32214:22;:48::i;:::-;32206:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32010:315;;;;:::o;28606:99::-;28656:13;28689:8;28682:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28606:99;:::o;6789:723::-;6845:13;7075:1;7066:5;:10;7062:53;;;7093:10;;;;;;;;;;;;;;;;;;;;;7062:53;7125:12;7140:5;7125:20;;7156:14;7181:78;7196:1;7188:4;:9;7181:78;;7214:8;;;;;:::i;:::-;;;;7245:2;7237:10;;;;;:::i;:::-;;;7181:78;;;7269:19;7301:6;7291:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7269:39;;7319:154;7335:1;7326:5;:10;7319:154;;7363:1;7353:11;;;;;:::i;:::-;;;7430:2;7422:5;:10;;;;:::i;:::-;7409:2;:24;;;;:::i;:::-;7396:39;;7379:6;7386;7379:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7459:2;7450:11;;;;;:::i;:::-;;;7319:154;;;7497:6;7483:21;;;;;6789:723;;;;:::o;46035:190::-;46160:4;46213;46184:25;46197:5;46204:4;46184:12;:25::i;:::-;:33;46177:40;;46035:190;;;;;:::o;25534:173::-;25590:16;25609:6;;;;;;;;;;;25590:25;;25635:8;25626:6;;:17;;;;;;;;;;;;;;;;;;25690:8;25659:40;;25680:8;25659:40;;;;;;;;;;;;25579:128;25534:173;:::o;17644:157::-;17729:4;17768:25;17753:40;;;:11;:40;;;;17746:47;;17644:157;;;:::o;41177:589::-;41321:45;41348:4;41354:2;41358:7;41321:26;:45::i;:::-;41399:1;41383:18;;:4;:18;;;41379:187;;;41418:40;41450:7;41418:31;:40::i;:::-;41379:187;;;41488:2;41480:10;;:4;:10;;;41476:90;;41507:47;41540:4;41546:7;41507:32;:47::i;:::-;41476:90;41379:187;41594:1;41580:16;;:2;:16;;;41576:183;;;41613:45;41650:7;41613:36;:45::i;:::-;41576:183;;;41686:4;41680:10;;:2;:10;;;41676:83;;41707:40;41735:2;41739:7;41707:27;:40::i;:::-;41676:83;41576:183;41177:589;;;:::o;33959:321::-;34089:18;34095:2;34099:7;34089:5;:18::i;:::-;34140:54;34171:1;34175:2;34179:7;34188:5;34140:22;:54::i;:::-;34118:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33959:321;;;:::o;37359:803::-;37514:4;37535:15;:2;:13;;;:15::i;:::-;37531:624;;;37587:2;37571:36;;;37608:12;:10;:12::i;:::-;37622:4;37628:7;37637:5;37571:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37567:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37834:1;37817:6;:13;:18;37813:272;;;37860:60;;;;;;;;;;:::i;:::-;;;;;;;;37813:272;38035:6;38029:13;38020:6;38016:2;38012:15;38005:38;37567:533;37704:45;;;37694:55;;;:6;:55;;;;37687:62;;;;;37531:624;38139:4;38132:11;;37359:803;;;;;;;:::o;46587:675::-;46670:7;46690:20;46713:4;46690:27;;46733:9;46728:497;46752:5;:12;46748:1;:16;46728:497;;;46786:20;46809:5;46815:1;46809:8;;;;;;;;:::i;:::-;;;;;;;;46786:31;;46852:12;46836;:28;46832:382;;46979:42;46994:12;47008;46979:14;:42::i;:::-;46964:57;;46832:382;;;47156:42;47171:12;47185;47156:14;:42::i;:::-;47141:57;;46832:382;46771:454;46766:3;;;;;:::i;:::-;;;;46728:497;;;;47242:12;47235:19;;;46587:675;;;;:::o;38734:126::-;;;;:::o;42489:164::-;42593:10;:17;;;;42566:15;:24;42582:7;42566:24;;;;;;;;;;;:44;;;;42621:10;42637:7;42621:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42489:164;:::o;43280:988::-;43546:22;43596:1;43571:22;43588:4;43571:16;:22::i;:::-;:26;;;;:::i;:::-;43546:51;;43608:18;43629:17;:26;43647:7;43629:26;;;;;;;;;;;;43608:47;;43776:14;43762:10;:28;43758:328;;43807:19;43829:12;:18;43842:4;43829:18;;;;;;;;;;;;;;;:34;43848:14;43829:34;;;;;;;;;;;;43807:56;;43913:11;43880:12;:18;43893:4;43880:18;;;;;;;;;;;;;;;:30;43899:10;43880:30;;;;;;;;;;;:44;;;;44030:10;43997:17;:30;44015:11;43997:30;;;;;;;;;;;:43;;;;43792:294;43758:328;44182:17;:26;44200:7;44182:26;;;;;;;;;;;44175:33;;;44226:12;:18;44239:4;44226:18;;;;;;;;;;;;;;;:34;44245:14;44226:34;;;;;;;;;;;44219:41;;;43361:907;;43280:988;;:::o;44563:1079::-;44816:22;44861:1;44841:10;:17;;;;:21;;;;:::i;:::-;44816:46;;44873:18;44894:15;:24;44910:7;44894:24;;;;;;;;;;;;44873:45;;45245:19;45267:10;45278:14;45267:26;;;;;;;;:::i;:::-;;;;;;;;;;45245:48;;45331:11;45306:10;45317;45306:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45442:10;45411:15;:28;45427:11;45411:28;;;;;;;;;;;:41;;;;45583:15;:24;45599:7;45583:24;;;;;;;;;;;45576:31;;;45618:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44634:1008;;;44563:1079;:::o;42067:221::-;42152:14;42169:20;42186:2;42169:16;:20::i;:::-;42152:37;;42227:7;42200:12;:16;42213:2;42200:16;;;;;;;;;;;;;;;:24;42217:6;42200:24;;;;;;;;;;;:34;;;;42274:6;42245:17;:26;42263:7;42245:26;;;;;;;;;;;:35;;;;42141:147;42067:221;;:::o;34616:382::-;34710:1;34696:16;;:2;:16;;;;34688:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34769:16;34777:7;34769;:16::i;:::-;34768:17;34760:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34831:45;34860:1;34864:2;34868:7;34831:20;:45::i;:::-;34906:1;34889:9;:13;34899:2;34889:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34937:2;34918:7;:16;34926:7;34918:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34982:7;34978:2;34957:33;;34974:1;34957:33;;;;;;;;;;;;34616:382;;:::o;9183:387::-;9243:4;9451:12;9518:7;9506:20;9498:28;;9561:1;9554:4;:8;9547:15;;;9183:387;;;:::o;47270:224::-;47338:13;47401:1;47395:4;47388:15;47430:1;47424:4;47417:15;47471:4;47465;47455:21;47446:30;;47270:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:849::-;6460:6;6468;6476;6484;6533:2;6521:9;6512:7;6508:23;6504:32;6501:119;;;6539:79;;:::i;:::-;6501:119;6687:1;6676:9;6672:17;6659:31;6717:18;6709:6;6706:30;6703:117;;;6739:79;;:::i;:::-;6703:117;6852:80;6924:7;6915:6;6904:9;6900:22;6852:80;:::i;:::-;6834:98;;;;6630:312;6981:2;7007:53;7052:7;7043:6;7032:9;7028:22;7007:53;:::i;:::-;6997:63;;6952:118;7109:2;7135:53;7180:7;7171:6;7160:9;7156:22;7135:53;:::i;:::-;7125:63;;7080:118;6356:849;;;;;;;:::o;7211:327::-;7269:6;7318:2;7306:9;7297:7;7293:23;7289:32;7286:119;;;7324:79;;:::i;:::-;7286:119;7444:1;7469:52;7513:7;7504:6;7493:9;7489:22;7469:52;:::i;:::-;7459:62;;7415:116;7211:327;;;;:::o;7544:349::-;7613:6;7662:2;7650:9;7641:7;7637:23;7633:32;7630:119;;;7668:79;;:::i;:::-;7630:119;7788:1;7813:63;7868:7;7859:6;7848:9;7844:22;7813:63;:::i;:::-;7803:73;;7759:127;7544:349;;;;:::o;7899:509::-;7968:6;8017:2;8005:9;7996:7;7992:23;7988:32;7985:119;;;8023:79;;:::i;:::-;7985:119;8171:1;8160:9;8156:17;8143:31;8201:18;8193:6;8190:30;8187:117;;;8223:79;;:::i;:::-;8187:117;8328:63;8383:7;8374:6;8363:9;8359:22;8328:63;:::i;:::-;8318:73;;8114:287;7899:509;;;;:::o;8414:329::-;8473:6;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8414:329;;;;:::o;8749:179::-;8818:10;8839:46;8881:3;8873:6;8839:46;:::i;:::-;8917:4;8912:3;8908:14;8894:28;;8749:179;;;;:::o;8934:118::-;9021:24;9039:5;9021:24;:::i;:::-;9016:3;9009:37;8934:118;;:::o;9058:157::-;9163:45;9183:24;9201:5;9183:24;:::i;:::-;9163:45;:::i;:::-;9158:3;9151:58;9058:157;;:::o;9251:732::-;9370:3;9399:54;9447:5;9399:54;:::i;:::-;9469:86;9548:6;9543:3;9469:86;:::i;:::-;9462:93;;9579:56;9629:5;9579:56;:::i;:::-;9658:7;9689:1;9674:284;9699:6;9696:1;9693:13;9674:284;;;9775:6;9769:13;9802:63;9861:3;9846:13;9802:63;:::i;:::-;9795:70;;9888:60;9941:6;9888:60;:::i;:::-;9878:70;;9734:224;9721:1;9718;9714:9;9709:14;;9674:284;;;9678:14;9974:3;9967:10;;9375:608;;;9251:732;;;;:::o;9989:109::-;10070:21;10085:5;10070:21;:::i;:::-;10065:3;10058:34;9989:109;;:::o;10104:360::-;10190:3;10218:38;10250:5;10218:38;:::i;:::-;10272:70;10335:6;10330:3;10272:70;:::i;:::-;10265:77;;10351:52;10396:6;10391:3;10384:4;10377:5;10373:16;10351:52;:::i;:::-;10428:29;10450:6;10428:29;:::i;:::-;10423:3;10419:39;10412:46;;10194:270;10104:360;;;;:::o;10470:364::-;10558:3;10586:39;10619:5;10586:39;:::i;:::-;10641:71;10705:6;10700:3;10641:71;:::i;:::-;10634:78;;10721:52;10766:6;10761:3;10754:4;10747:5;10743:16;10721:52;:::i;:::-;10798:29;10820:6;10798:29;:::i;:::-;10793:3;10789:39;10782:46;;10562:272;10470:364;;;;:::o;10840:377::-;10946:3;10974:39;11007:5;10974:39;:::i;:::-;11029:89;11111:6;11106:3;11029:89;:::i;:::-;11022:96;;11127:52;11172:6;11167:3;11160:4;11153:5;11149:16;11127:52;:::i;:::-;11204:6;11199:3;11195:16;11188:23;;10950:267;10840:377;;;;:::o;11223:366::-;11365:3;11386:67;11450:2;11445:3;11386:67;:::i;:::-;11379:74;;11462:93;11551:3;11462:93;:::i;:::-;11580:2;11575:3;11571:12;11564:19;;11223:366;;;:::o;11595:::-;11737:3;11758:67;11822:2;11817:3;11758:67;:::i;:::-;11751:74;;11834:93;11923:3;11834:93;:::i;:::-;11952:2;11947:3;11943:12;11936:19;;11595:366;;;:::o;11967:::-;12109:3;12130:67;12194:2;12189:3;12130:67;:::i;:::-;12123:74;;12206:93;12295:3;12206:93;:::i;:::-;12324:2;12319:3;12315:12;12308:19;;11967:366;;;:::o;12339:::-;12481:3;12502:67;12566:2;12561:3;12502:67;:::i;:::-;12495:74;;12578:93;12667:3;12578:93;:::i;:::-;12696:2;12691:3;12687:12;12680:19;;12339:366;;;:::o;12711:::-;12853:3;12874:67;12938:2;12933:3;12874:67;:::i;:::-;12867:74;;12950:93;13039:3;12950:93;:::i;:::-;13068:2;13063:3;13059:12;13052:19;;12711:366;;;:::o;13083:::-;13225:3;13246:67;13310:2;13305:3;13246:67;:::i;:::-;13239:74;;13322:93;13411:3;13322:93;:::i;:::-;13440:2;13435:3;13431:12;13424:19;;13083:366;;;:::o;13455:::-;13597:3;13618:67;13682:2;13677:3;13618:67;:::i;:::-;13611:74;;13694:93;13783:3;13694:93;:::i;:::-;13812:2;13807:3;13803:12;13796:19;;13455:366;;;:::o;13827:::-;13969:3;13990:67;14054:2;14049:3;13990:67;:::i;:::-;13983:74;;14066:93;14155:3;14066:93;:::i;:::-;14184:2;14179:3;14175:12;14168:19;;13827:366;;;:::o;14199:::-;14341:3;14362:67;14426:2;14421:3;14362:67;:::i;:::-;14355:74;;14438:93;14527:3;14438:93;:::i;:::-;14556:2;14551:3;14547:12;14540:19;;14199:366;;;:::o;14571:::-;14713:3;14734:67;14798:2;14793:3;14734:67;:::i;:::-;14727:74;;14810:93;14899:3;14810:93;:::i;:::-;14928:2;14923:3;14919:12;14912:19;;14571:366;;;:::o;14943:::-;15085:3;15106:67;15170:2;15165:3;15106:67;:::i;:::-;15099:74;;15182:93;15271:3;15182:93;:::i;:::-;15300:2;15295:3;15291:12;15284:19;;14943:366;;;:::o;15315:::-;15457:3;15478:67;15542:2;15537:3;15478:67;:::i;:::-;15471:74;;15554:93;15643:3;15554:93;:::i;:::-;15672:2;15667:3;15663:12;15656:19;;15315:366;;;:::o;15687:::-;15829:3;15850:67;15914:2;15909:3;15850:67;:::i;:::-;15843:74;;15926:93;16015:3;15926:93;:::i;:::-;16044:2;16039:3;16035:12;16028:19;;15687:366;;;:::o;16059:::-;16201:3;16222:67;16286:2;16281:3;16222:67;:::i;:::-;16215:74;;16298:93;16387:3;16298:93;:::i;:::-;16416:2;16411:3;16407:12;16400:19;;16059:366;;;:::o;16431:::-;16573:3;16594:67;16658:2;16653:3;16594:67;:::i;:::-;16587:74;;16670:93;16759:3;16670:93;:::i;:::-;16788:2;16783:3;16779:12;16772:19;;16431:366;;;:::o;16803:::-;16945:3;16966:67;17030:2;17025:3;16966:67;:::i;:::-;16959:74;;17042:93;17131:3;17042:93;:::i;:::-;17160:2;17155:3;17151:12;17144:19;;16803:366;;;:::o;17175:::-;17317:3;17338:67;17402:2;17397:3;17338:67;:::i;:::-;17331:74;;17414:93;17503:3;17414:93;:::i;:::-;17532:2;17527:3;17523:12;17516:19;;17175:366;;;:::o;17547:::-;17689:3;17710:67;17774:2;17769:3;17710:67;:::i;:::-;17703:74;;17786:93;17875:3;17786:93;:::i;:::-;17904:2;17899:3;17895:12;17888:19;;17547:366;;;:::o;17919:::-;18061:3;18082:67;18146:2;18141:3;18082:67;:::i;:::-;18075:74;;18158:93;18247:3;18158:93;:::i;:::-;18276:2;18271:3;18267:12;18260:19;;17919:366;;;:::o;18291:::-;18433:3;18454:67;18518:2;18513:3;18454:67;:::i;:::-;18447:74;;18530:93;18619:3;18530:93;:::i;:::-;18648:2;18643:3;18639:12;18632:19;;18291:366;;;:::o;18663:::-;18805:3;18826:67;18890:2;18885:3;18826:67;:::i;:::-;18819:74;;18902:93;18991:3;18902:93;:::i;:::-;19020:2;19015:3;19011:12;19004:19;;18663:366;;;:::o;19035:::-;19177:3;19198:67;19262:2;19257:3;19198:67;:::i;:::-;19191:74;;19274:93;19363:3;19274:93;:::i;:::-;19392:2;19387:3;19383:12;19376:19;;19035:366;;;:::o;19407:::-;19549:3;19570:67;19634:2;19629:3;19570:67;:::i;:::-;19563:74;;19646:93;19735:3;19646:93;:::i;:::-;19764:2;19759:3;19755:12;19748:19;;19407:366;;;:::o;19779:::-;19921:3;19942:67;20006:2;20001:3;19942:67;:::i;:::-;19935:74;;20018:93;20107:3;20018:93;:::i;:::-;20136:2;20131:3;20127:12;20120:19;;19779:366;;;:::o;20151:::-;20293:3;20314:67;20378:2;20373:3;20314:67;:::i;:::-;20307:74;;20390:93;20479:3;20390:93;:::i;:::-;20508:2;20503:3;20499:12;20492:19;;20151:366;;;:::o;20523:::-;20665:3;20686:67;20750:2;20745:3;20686:67;:::i;:::-;20679:74;;20762:93;20851:3;20762:93;:::i;:::-;20880:2;20875:3;20871:12;20864:19;;20523:366;;;:::o;20895:::-;21037:3;21058:67;21122:2;21117:3;21058:67;:::i;:::-;21051:74;;21134:93;21223:3;21134:93;:::i;:::-;21252:2;21247:3;21243:12;21236:19;;20895:366;;;:::o;21267:::-;21409:3;21430:67;21494:2;21489:3;21430:67;:::i;:::-;21423:74;;21506:93;21595:3;21506:93;:::i;:::-;21624:2;21619:3;21615:12;21608:19;;21267:366;;;:::o;21639:108::-;21716:24;21734:5;21716:24;:::i;:::-;21711:3;21704:37;21639:108;;:::o;21753:118::-;21840:24;21858:5;21840:24;:::i;:::-;21835:3;21828:37;21753:118;;:::o;21877:256::-;21989:3;22004:75;22075:3;22066:6;22004:75;:::i;:::-;22104:2;22099:3;22095:12;22088:19;;22124:3;22117:10;;21877:256;;;;:::o;22139:435::-;22319:3;22341:95;22432:3;22423:6;22341:95;:::i;:::-;22334:102;;22453:95;22544:3;22535:6;22453:95;:::i;:::-;22446:102;;22565:3;22558:10;;22139:435;;;;;:::o;22580:222::-;22673:4;22711:2;22700:9;22696:18;22688:26;;22724:71;22792:1;22781:9;22777:17;22768:6;22724:71;:::i;:::-;22580:222;;;;:::o;22808:640::-;23003:4;23041:3;23030:9;23026:19;23018:27;;23055:71;23123:1;23112:9;23108:17;23099:6;23055:71;:::i;:::-;23136:72;23204:2;23193:9;23189:18;23180:6;23136:72;:::i;:::-;23218;23286:2;23275:9;23271:18;23262:6;23218:72;:::i;:::-;23337:9;23331:4;23327:20;23322:2;23311:9;23307:18;23300:48;23365:76;23436:4;23427:6;23365:76;:::i;:::-;23357:84;;22808:640;;;;;;;:::o;23454:332::-;23575:4;23613:2;23602:9;23598:18;23590:26;;23626:71;23694:1;23683:9;23679:17;23670:6;23626:71;:::i;:::-;23707:72;23775:2;23764:9;23760:18;23751:6;23707:72;:::i;:::-;23454:332;;;;;:::o;23792:373::-;23935:4;23973:2;23962:9;23958:18;23950:26;;24022:9;24016:4;24012:20;24008:1;23997:9;23993:17;23986:47;24050:108;24153:4;24144:6;24050:108;:::i;:::-;24042:116;;23792:373;;;;:::o;24171:210::-;24258:4;24296:2;24285:9;24281:18;24273:26;;24309:65;24371:1;24360:9;24356:17;24347:6;24309:65;:::i;:::-;24171:210;;;;:::o;24387:313::-;24500:4;24538:2;24527:9;24523:18;24515:26;;24587:9;24581:4;24577:20;24573:1;24562:9;24558:17;24551:47;24615:78;24688:4;24679:6;24615:78;:::i;:::-;24607:86;;24387:313;;;;:::o;24706:419::-;24872:4;24910:2;24899:9;24895:18;24887:26;;24959:9;24953:4;24949:20;24945:1;24934:9;24930:17;24923:47;24987:131;25113:4;24987:131;:::i;:::-;24979:139;;24706:419;;;:::o;25131:::-;25297:4;25335:2;25324:9;25320:18;25312:26;;25384:9;25378:4;25374:20;25370:1;25359:9;25355:17;25348:47;25412:131;25538:4;25412:131;:::i;:::-;25404:139;;25131:419;;;:::o;25556:::-;25722:4;25760:2;25749:9;25745:18;25737:26;;25809:9;25803:4;25799:20;25795:1;25784:9;25780:17;25773:47;25837:131;25963:4;25837:131;:::i;:::-;25829:139;;25556:419;;;:::o;25981:::-;26147:4;26185:2;26174:9;26170:18;26162:26;;26234:9;26228:4;26224:20;26220:1;26209:9;26205:17;26198:47;26262:131;26388:4;26262:131;:::i;:::-;26254:139;;25981:419;;;:::o;26406:::-;26572:4;26610:2;26599:9;26595:18;26587:26;;26659:9;26653:4;26649:20;26645:1;26634:9;26630:17;26623:47;26687:131;26813:4;26687:131;:::i;:::-;26679:139;;26406:419;;;:::o;26831:::-;26997:4;27035:2;27024:9;27020:18;27012:26;;27084:9;27078:4;27074:20;27070:1;27059:9;27055:17;27048:47;27112:131;27238:4;27112:131;:::i;:::-;27104:139;;26831:419;;;:::o;27256:::-;27422:4;27460:2;27449:9;27445:18;27437:26;;27509:9;27503:4;27499:20;27495:1;27484:9;27480:17;27473:47;27537:131;27663:4;27537:131;:::i;:::-;27529:139;;27256:419;;;:::o;27681:::-;27847:4;27885:2;27874:9;27870:18;27862:26;;27934:9;27928:4;27924:20;27920:1;27909:9;27905:17;27898:47;27962:131;28088:4;27962:131;:::i;:::-;27954:139;;27681:419;;;:::o;28106:::-;28272:4;28310:2;28299:9;28295:18;28287:26;;28359:9;28353:4;28349:20;28345:1;28334:9;28330:17;28323:47;28387:131;28513:4;28387:131;:::i;:::-;28379:139;;28106:419;;;:::o;28531:::-;28697:4;28735:2;28724:9;28720:18;28712:26;;28784:9;28778:4;28774:20;28770:1;28759:9;28755:17;28748:47;28812:131;28938:4;28812:131;:::i;:::-;28804:139;;28531:419;;;:::o;28956:::-;29122:4;29160:2;29149:9;29145:18;29137:26;;29209:9;29203:4;29199:20;29195:1;29184:9;29180:17;29173:47;29237:131;29363:4;29237:131;:::i;:::-;29229:139;;28956:419;;;:::o;29381:::-;29547:4;29585:2;29574:9;29570:18;29562:26;;29634:9;29628:4;29624:20;29620:1;29609:9;29605:17;29598:47;29662:131;29788:4;29662:131;:::i;:::-;29654:139;;29381:419;;;:::o;29806:::-;29972:4;30010:2;29999:9;29995:18;29987:26;;30059:9;30053:4;30049:20;30045:1;30034:9;30030:17;30023:47;30087:131;30213:4;30087:131;:::i;:::-;30079:139;;29806:419;;;:::o;30231:::-;30397:4;30435:2;30424:9;30420:18;30412:26;;30484:9;30478:4;30474:20;30470:1;30459:9;30455:17;30448:47;30512:131;30638:4;30512:131;:::i;:::-;30504:139;;30231:419;;;:::o;30656:::-;30822:4;30860:2;30849:9;30845:18;30837:26;;30909:9;30903:4;30899:20;30895:1;30884:9;30880:17;30873:47;30937:131;31063:4;30937:131;:::i;:::-;30929:139;;30656:419;;;:::o;31081:::-;31247:4;31285:2;31274:9;31270:18;31262:26;;31334:9;31328:4;31324:20;31320:1;31309:9;31305:17;31298:47;31362:131;31488:4;31362:131;:::i;:::-;31354:139;;31081:419;;;:::o;31506:::-;31672:4;31710:2;31699:9;31695:18;31687:26;;31759:9;31753:4;31749:20;31745:1;31734:9;31730:17;31723:47;31787:131;31913:4;31787:131;:::i;:::-;31779:139;;31506:419;;;:::o;31931:::-;32097:4;32135:2;32124:9;32120:18;32112:26;;32184:9;32178:4;32174:20;32170:1;32159:9;32155:17;32148:47;32212:131;32338:4;32212:131;:::i;:::-;32204:139;;31931:419;;;:::o;32356:::-;32522:4;32560:2;32549:9;32545:18;32537:26;;32609:9;32603:4;32599:20;32595:1;32584:9;32580:17;32573:47;32637:131;32763:4;32637:131;:::i;:::-;32629:139;;32356:419;;;:::o;32781:::-;32947:4;32985:2;32974:9;32970:18;32962:26;;33034:9;33028:4;33024:20;33020:1;33009:9;33005:17;32998:47;33062:131;33188:4;33062:131;:::i;:::-;33054:139;;32781:419;;;:::o;33206:::-;33372:4;33410:2;33399:9;33395:18;33387:26;;33459:9;33453:4;33449:20;33445:1;33434:9;33430:17;33423:47;33487:131;33613:4;33487:131;:::i;:::-;33479:139;;33206:419;;;:::o;33631:::-;33797:4;33835:2;33824:9;33820:18;33812:26;;33884:9;33878:4;33874:20;33870:1;33859:9;33855:17;33848:47;33912:131;34038:4;33912:131;:::i;:::-;33904:139;;33631:419;;;:::o;34056:::-;34222:4;34260:2;34249:9;34245:18;34237:26;;34309:9;34303:4;34299:20;34295:1;34284:9;34280:17;34273:47;34337:131;34463:4;34337:131;:::i;:::-;34329:139;;34056:419;;;:::o;34481:::-;34647:4;34685:2;34674:9;34670:18;34662:26;;34734:9;34728:4;34724:20;34720:1;34709:9;34705:17;34698:47;34762:131;34888:4;34762:131;:::i;:::-;34754:139;;34481:419;;;:::o;34906:::-;35072:4;35110:2;35099:9;35095:18;35087:26;;35159:9;35153:4;35149:20;35145:1;35134:9;35130:17;35123:47;35187:131;35313:4;35187:131;:::i;:::-;35179:139;;34906:419;;;:::o;35331:::-;35497:4;35535:2;35524:9;35520:18;35512:26;;35584:9;35578:4;35574:20;35570:1;35559:9;35555:17;35548:47;35612:131;35738:4;35612:131;:::i;:::-;35604:139;;35331:419;;;:::o;35756:::-;35922:4;35960:2;35949:9;35945:18;35937:26;;36009:9;36003:4;35999:20;35995:1;35984:9;35980:17;35973:47;36037:131;36163:4;36037:131;:::i;:::-;36029:139;;35756:419;;;:::o;36181:::-;36347:4;36385:2;36374:9;36370:18;36362:26;;36434:9;36428:4;36424:20;36420:1;36409:9;36405:17;36398:47;36462:131;36588:4;36462:131;:::i;:::-;36454:139;;36181:419;;;:::o;36606:222::-;36699:4;36737:2;36726:9;36722:18;36714:26;;36750:71;36818:1;36807:9;36803:17;36794:6;36750:71;:::i;:::-;36606:222;;;;:::o;36834:129::-;36868:6;36895:20;;:::i;:::-;36885:30;;36924:33;36952:4;36944:6;36924:33;:::i;:::-;36834:129;;;:::o;36969:75::-;37002:6;37035:2;37029:9;37019:19;;36969:75;:::o;37050:307::-;37111:4;37201:18;37193:6;37190:30;37187:56;;;37223:18;;:::i;:::-;37187:56;37261:29;37283:6;37261:29;:::i;:::-;37253:37;;37345:4;37339;37335:15;37327:23;;37050:307;;;:::o;37363:308::-;37425:4;37515:18;37507:6;37504:30;37501:56;;;37537:18;;:::i;:::-;37501:56;37575:29;37597:6;37575:29;:::i;:::-;37567:37;;37659:4;37653;37649:15;37641:23;;37363:308;;;:::o;37677:132::-;37744:4;37767:3;37759:11;;37797:4;37792:3;37788:14;37780:22;;37677:132;;;:::o;37815:114::-;37882:6;37916:5;37910:12;37900:22;;37815:114;;;:::o;37935:98::-;37986:6;38020:5;38014:12;38004:22;;37935:98;;;:::o;38039:99::-;38091:6;38125:5;38119:12;38109:22;;38039:99;;;:::o;38144:113::-;38214:4;38246;38241:3;38237:14;38229:22;;38144:113;;;:::o;38263:184::-;38362:11;38396:6;38391:3;38384:19;38436:4;38431:3;38427:14;38412:29;;38263:184;;;;:::o;38453:168::-;38536:11;38570:6;38565:3;38558:19;38610:4;38605:3;38601:14;38586:29;;38453:168;;;;:::o;38627:169::-;38711:11;38745:6;38740:3;38733:19;38785:4;38780:3;38776:14;38761:29;;38627:169;;;;:::o;38802:148::-;38904:11;38941:3;38926:18;;38802:148;;;;:::o;38956:305::-;38996:3;39015:20;39033:1;39015:20;:::i;:::-;39010:25;;39049:20;39067:1;39049:20;:::i;:::-;39044:25;;39203:1;39135:66;39131:74;39128:1;39125:81;39122:107;;;39209:18;;:::i;:::-;39122:107;39253:1;39250;39246:9;39239:16;;38956:305;;;;:::o;39267:185::-;39307:1;39324:20;39342:1;39324:20;:::i;:::-;39319:25;;39358:20;39376:1;39358:20;:::i;:::-;39353:25;;39397:1;39387:35;;39402:18;;:::i;:::-;39387:35;39444:1;39441;39437:9;39432:14;;39267:185;;;;:::o;39458:348::-;39498:7;39521:20;39539:1;39521:20;:::i;:::-;39516:25;;39555:20;39573:1;39555:20;:::i;:::-;39550:25;;39743:1;39675:66;39671:74;39668:1;39665:81;39660:1;39653:9;39646:17;39642:105;39639:131;;;39750:18;;:::i;:::-;39639:131;39798:1;39795;39791:9;39780:20;;39458:348;;;;:::o;39812:191::-;39852:4;39872:20;39890:1;39872:20;:::i;:::-;39867:25;;39906:20;39924:1;39906:20;:::i;:::-;39901:25;;39945:1;39942;39939:8;39936:34;;;39950:18;;:::i;:::-;39936:34;39995:1;39992;39988:9;39980:17;;39812:191;;;;:::o;40009:96::-;40046:7;40075:24;40093:5;40075:24;:::i;:::-;40064:35;;40009:96;;;:::o;40111:90::-;40145:7;40188:5;40181:13;40174:21;40163:32;;40111:90;;;:::o;40207:77::-;40244:7;40273:5;40262:16;;40207:77;;;:::o;40290:149::-;40326:7;40366:66;40359:5;40355:78;40344:89;;40290:149;;;:::o;40445:126::-;40482:7;40522:42;40515:5;40511:54;40500:65;;40445:126;;;:::o;40577:77::-;40614:7;40643:5;40632:16;;40577:77;;;:::o;40660:154::-;40744:6;40739:3;40734;40721:30;40806:1;40797:6;40792:3;40788:16;40781:27;40660:154;;;:::o;40820:307::-;40888:1;40898:113;40912:6;40909:1;40906:13;40898:113;;;40997:1;40992:3;40988:11;40982:18;40978:1;40973:3;40969:11;40962:39;40934:2;40931:1;40927:10;40922:15;;40898:113;;;41029:6;41026:1;41023:13;41020:101;;;41109:1;41100:6;41095:3;41091:16;41084:27;41020:101;40869:258;40820:307;;;:::o;41133:320::-;41177:6;41214:1;41208:4;41204:12;41194:22;;41261:1;41255:4;41251:12;41282:18;41272:81;;41338:4;41330:6;41326:17;41316:27;;41272:81;41400:2;41392:6;41389:14;41369:18;41366:38;41363:84;;;41419:18;;:::i;:::-;41363:84;41184:269;41133:320;;;:::o;41459:281::-;41542:27;41564:4;41542:27;:::i;:::-;41534:6;41530:40;41672:6;41660:10;41657:22;41636:18;41624:10;41621:34;41618:62;41615:88;;;41683:18;;:::i;:::-;41615:88;41723:10;41719:2;41712:22;41502:238;41459:281;;:::o;41746:233::-;41785:3;41808:24;41826:5;41808:24;:::i;:::-;41799:33;;41854:66;41847:5;41844:77;41841:103;;;41924:18;;:::i;:::-;41841:103;41971:1;41964:5;41960:13;41953:20;;41746:233;;;:::o;41985:100::-;42024:7;42053:26;42073:5;42053:26;:::i;:::-;42042:37;;41985:100;;;:::o;42091:94::-;42130:7;42159:20;42173:5;42159:20;:::i;:::-;42148:31;;42091:94;;;:::o;42191:176::-;42223:1;42240:20;42258:1;42240:20;:::i;:::-;42235:25;;42274:20;42292:1;42274:20;:::i;:::-;42269:25;;42313:1;42303:35;;42318:18;;:::i;:::-;42303:35;42359:1;42356;42352:9;42347:14;;42191:176;;;;:::o;42373:180::-;42421:77;42418:1;42411:88;42518:4;42515:1;42508:15;42542:4;42539:1;42532:15;42559:180;42607:77;42604:1;42597:88;42704:4;42701:1;42694:15;42728:4;42725:1;42718:15;42745:180;42793:77;42790:1;42783:88;42890:4;42887:1;42880:15;42914:4;42911:1;42904:15;42931:180;42979:77;42976:1;42969:88;43076:4;43073:1;43066:15;43100:4;43097:1;43090:15;43117:180;43165:77;43162:1;43155:88;43262:4;43259:1;43252:15;43286:4;43283:1;43276:15;43303:180;43351:77;43348:1;43341:88;43448:4;43445:1;43438:15;43472:4;43469:1;43462:15;43489:117;43598:1;43595;43588:12;43612:117;43721:1;43718;43711:12;43735:117;43844:1;43841;43834:12;43858:117;43967:1;43964;43957:12;43981:117;44090:1;44087;44080:12;44104:117;44213:1;44210;44203:12;44227:102;44268:6;44319:2;44315:7;44310:2;44303:5;44299:14;44295:28;44285:38;;44227:102;;;:::o;44335:94::-;44368:8;44416:5;44412:2;44408:14;44387:35;;44335:94;;;:::o;44435:230::-;44575:34;44571:1;44563:6;44559:14;44552:58;44644:13;44639:2;44631:6;44627:15;44620:38;44435:230;:::o;44671:237::-;44811:34;44807:1;44799:6;44795:14;44788:58;44880:20;44875:2;44867:6;44863:15;44856:45;44671:237;:::o;44914:223::-;45054:34;45050:1;45042:6;45038:14;45031:58;45123:6;45118:2;45110:6;45106:15;45099:31;44914:223;:::o;45143:225::-;45283:34;45279:1;45271:6;45267:14;45260:58;45352:8;45347:2;45339:6;45335:15;45328:33;45143:225;:::o;45374:178::-;45514:30;45510:1;45502:6;45498:14;45491:54;45374:178;:::o;45558:223::-;45698:34;45694:1;45686:6;45682:14;45675:58;45767:6;45762:2;45754:6;45750:15;45743:31;45558:223;:::o;45787:175::-;45927:27;45923:1;45915:6;45911:14;45904:51;45787:175;:::o;45968:231::-;46108:34;46104:1;46096:6;46092:14;46085:58;46177:14;46172:2;46164:6;46160:15;46153:39;45968:231;:::o;46205:160::-;46345:12;46341:1;46333:6;46329:14;46322:36;46205:160;:::o;46371:238::-;46511:34;46507:1;46499:6;46495:14;46488:58;46580:21;46575:2;46567:6;46563:15;46556:46;46371:238;:::o;46615:243::-;46755:34;46751:1;46743:6;46739:14;46732:58;46824:26;46819:2;46811:6;46807:15;46800:51;46615:243;:::o;46864:226::-;47004:34;47000:1;46992:6;46988:14;46981:58;47073:9;47068:2;47060:6;47056:15;47049:34;46864:226;:::o;47096:229::-;47236:34;47232:1;47224:6;47220:14;47213:58;47305:12;47300:2;47292:6;47288:15;47281:37;47096:229;:::o;47331:228::-;47471:34;47467:1;47459:6;47455:14;47448:58;47540:11;47535:2;47527:6;47523:15;47516:36;47331:228;:::o;47565:179::-;47705:31;47701:1;47693:6;47689:14;47682:55;47565:179;:::o;47750:182::-;47890:34;47886:1;47878:6;47874:14;47867:58;47750:182;:::o;47938:231::-;48078:34;48074:1;48066:6;48062:14;48055:58;48147:14;48142:2;48134:6;48130:15;48123:39;47938:231;:::o;48175:182::-;48315:34;48311:1;48303:6;48299:14;48292:58;48175:182;:::o;48363:225::-;48503:34;48499:1;48491:6;48487:14;48480:58;48572:8;48567:2;48559:6;48555:15;48548:33;48363:225;:::o;48594:228::-;48734:34;48730:1;48722:6;48718:14;48711:58;48803:11;48798:2;48790:6;48786:15;48779:36;48594:228;:::o;48828:234::-;48968:34;48964:1;48956:6;48952:14;48945:58;49037:17;49032:2;49024:6;49020:15;49013:42;48828:234;:::o;49068:220::-;49208:34;49204:1;49196:6;49192:14;49185:58;49277:3;49272:2;49264:6;49260:15;49253:28;49068:220;:::o;49294:236::-;49434:34;49430:1;49422:6;49418:14;49411:58;49503:19;49498:2;49490:6;49486:15;49479:44;49294:236;:::o;49536:231::-;49676:34;49672:1;49664:6;49660:14;49653:58;49745:14;49740:2;49732:6;49728:15;49721:39;49536:231;:::o;49773:163::-;49913:15;49909:1;49901:6;49897:14;49890:39;49773:163;:::o;49942:179::-;50082:31;50078:1;50070:6;50066:14;50059:55;49942:179;:::o;50127:289::-;50267:34;50263:1;50255:6;50251:14;50244:58;50336:34;50331:2;50323:6;50319:15;50312:59;50405:3;50400:2;50392:6;50388:15;50381:28;50127:289;:::o;50422:182::-;50562:34;50558:1;50550:6;50546:14;50539:58;50422:182;:::o;50610:122::-;50683:24;50701:5;50683:24;:::i;:::-;50676:5;50673:35;50663:63;;50722:1;50719;50712:12;50663:63;50610:122;:::o;50738:116::-;50808:21;50823:5;50808:21;:::i;:::-;50801:5;50798:32;50788:60;;50844:1;50841;50834:12;50788:60;50738:116;:::o;50860:122::-;50933:24;50951:5;50933:24;:::i;:::-;50926:5;50923:35;50913:63;;50972:1;50969;50962:12;50913:63;50860:122;:::o;50988:120::-;51060:23;51077:5;51060:23;:::i;:::-;51053:5;51050:34;51040:62;;51098:1;51095;51088:12;51040:62;50988:120;:::o;51114:122::-;51187:24;51205:5;51187:24;:::i;:::-;51180:5;51177:35;51167:63;;51226:1;51223;51216:12;51167:63;51114:122;:::o

Swarm Source

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