ETH Price: $3,510.24 (+4.64%)

Token

FREE SHIT. Literally. (FREESHIT)
 

Overview

Max Total Supply

3,258 FREESHIT

Holders

862

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 FREESHIT
0x015cbf965f50e6347577c47e7bacc664052ce751
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

FREE SHIT. LITERALLY is a NFT token

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FREESHIT

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

pragma solidity ^0.8.4;

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

library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

    function reset(Counter storage counter) internal {
        counter._value = 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;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IBMBuds{
    function balanceOf(address userAddress) external view returns (uint256);
}

contract FREESHIT is ERC721, Ownable
{
    IBMBuds public BMBuds;

    using Counters for Counters.Counter;
    using SafeMath for uint256;
    using Address for uint256;

    uint256 public price = 0 ether;
    uint256 public maxSupply = 6969;

    string private baseURI;
    string public baseExtension = ".json";
    string public notRevealedURI;

    bool public mintOpen = false;
    bool public revealToken = false;

    mapping(address => uint256) balanceOfAddress;
    mapping(address => uint256) OgBalanceOfAddress;

    Counters.Counter private _tokenSupply;

    constructor(string memory _notRevealedURI) ERC721("FREE SHIT. Literally.", "FREESHIT")  {
        notRevealedURI = _notRevealedURI;
    }

    function totalSupply() public view returns (uint256) {
        return _tokenSupply.current();
    }

    function mintBulk(uint256 numberOfMints, address mintAddress) public payable onlyOwner{
        uint256 supply = _tokenSupply.current();
       for(uint256 i = 1; i <= numberOfMints; i++){
            _safeMint(mintAddress, supply + i);
            _tokenSupply.increment();
        }
    }
    
    function mint(uint256 numberOfMints) public payable{
        uint256 supply = _tokenSupply.current();

        if(balanceOfAddress[msg.sender] == 0){
            require(BMBuds.balanceOf(msg.sender) > 0, "Does not own Bear Market Buds");
            OgBalanceOfAddress[msg.sender] = BMBuds.balanceOf(msg.sender) + 1;
            balanceOfAddress[msg.sender] = BMBuds.balanceOf(msg.sender) + 1;
        }

        if(BMBuds.balanceOf(msg.sender) > OgBalanceOfAddress[msg.sender]){
            balanceOfAddress[msg.sender] = (BMBuds.balanceOf(msg.sender) - OgBalanceOfAddress[msg.sender]) + 1;
            OgBalanceOfAddress[msg.sender] = balanceOfAddress[msg.sender];
        }

        require(mintOpen, "Sale Needs To Be Active");
        require(balanceOfAddress[msg.sender] > 1, "No more Free Shits to claim");
        require((balanceOf(msg.sender) + numberOfMints) <= BMBuds.balanceOf(msg.sender), "Cannot claim more than Bear Market Buds owned!");
        require(supply.add(numberOfMints) <= maxSupply, "Payment exceeds total supply");

       for(uint256 i = 1; i <= numberOfMints; i++){
            _safeMint(msg.sender, supply + i);
            _tokenSupply.increment();
            balanceOfAddress[msg.sender] =  balanceOfAddress[msg.sender] - 1;
        }
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        if(revealToken == false) {
            return notRevealedURI;
        }

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

    function linkBMBuds(address _BMBudsAddress) external onlyOwner(){
        BMBuds = IBMBuds(_BMBudsAddress);
    }

    function toggleSale() public onlyOwner {
        mintOpen = !mintOpen;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function setbaseURI(string memory setBaseURI) public onlyOwner{
        baseURI = setBaseURI;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedURI = _notRevealedURI;
    }

    function reveal() public onlyOwner {
        revealToken = true;
    }

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_notRevealedURI","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":"BMBuds","outputs":[{"internalType":"contract IBMBuds","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_BMBudsAddress","type":"address"}],"name":"linkBMBuds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"},{"internalType":"address","name":"mintAddress","type":"address"}],"name":"mintBulk","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"setBaseURI","type":"string"}],"name":"setbaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600855611b396009556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200005c92919062000274565b506000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff021916908315150217905550348015620000a057600080fd5b5060405162004a4b38038062004a4b8339818101604052810190620000c69190620003a2565b6040518060400160405280601581526020017f4652454520534849542e204c69746572616c6c792e00000000000000000000008152506040518060400160405280600881526020017f465245455348495400000000000000000000000000000000000000000000000081525081600090805190602001906200014a92919062000274565b5080600190805190602001906200016392919062000274565b505050620001866200017a620001a660201b60201c565b620001ae60201b60201c565b80600c90805190602001906200019e92919062000274565b505062000577565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002829062000488565b90600052602060002090601f016020900481019282620002a65760008555620002f2565b82601f10620002c157805160ff1916838001178555620002f2565b82800160010185558215620002f2579182015b82811115620002f1578251825591602001919060010190620002d4565b5b50905062000301919062000305565b5090565b5b808211156200032057600081600090555060010162000306565b5090565b60006200033b62000335846200041c565b620003f3565b9050828152602081018484840111156200035a576200035962000557565b5b6200036784828562000452565b509392505050565b600082601f83011262000387576200038662000552565b5b81516200039984826020860162000324565b91505092915050565b600060208284031215620003bb57620003ba62000561565b5b600082015167ffffffffffffffff811115620003dc57620003db6200055c565b5b620003ea848285016200036f565b91505092915050565b6000620003ff62000412565b90506200040d8282620004be565b919050565b6000604051905090565b600067ffffffffffffffff8211156200043a576200043962000523565b5b620004458262000566565b9050602081019050919050565b60005b838110156200047257808201518184015260208101905062000455565b8381111562000482576000848401525b50505050565b60006002820490506001821680620004a157607f821691505b60208210811415620004b857620004b7620004f4565b5b50919050565b620004c98262000566565b810181811067ffffffffffffffff82111715620004eb57620004ea62000523565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6144c480620005876000396000f3fe6080604052600436106101e35760003560e01c80637225038011610102578063b88d4fde11610095578063e306277711610064578063e30627771461067a578063e985e9c5146106a5578063f2c4ce1e146106e2578063f2fde38b1461070b576101e3565b8063b88d4fde146105be578063c6682862146105e7578063c87b56dd14610612578063d5abeb011461064f576101e3565b8063a035b1fe116100d1578063a035b1fe14610537578063a0712d6814610562578063a22cb4651461057e578063a475b5dd146105a7576101e3565b8063722503801461049f5780637d8966e4146104ca5780638da5cb5b146104e157806395d89b411461050c576101e3565b8063319050601161017a5780636352211e116101495780636352211e146103f257806370a082311461042f578063715018a61461046c57806371e7e4fb14610483576101e3565b8063319050601461035e5780633ccfd60b1461038957806342842e0e146103a05780634a44f379146103c9576101e3565b806312c60ec7116101b657806312c60ec7146102b657806318160ddd146102df57806323b872dd1461030a57806324bbd04914610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a919061314f565b610734565b60405161021c9190613761565b60405180910390f35b34801561023157600080fd5b5061023a610816565b6040516102479190613797565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906131f2565b6108a8565b60405161028491906136fa565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061310f565b61092d565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190612f8c565b610a45565b005b3480156102eb57600080fd5b506102f4610b05565b6040516103019190613a59565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190612ff9565b610b16565b005b34801561033f57600080fd5b50610348610b76565b6040516103559190613761565b60405180910390f35b34801561036a57600080fd5b50610373610b89565b6040516103809190613761565b60405180910390f35b34801561039557600080fd5b5061039e610b9c565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190612ff9565b610c67565b005b3480156103d557600080fd5b506103f060048036038101906103eb91906131a9565b610c87565b005b3480156103fe57600080fd5b50610419600480360381019061041491906131f2565b610d1d565b60405161042691906136fa565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612f8c565b610dcf565b6040516104639190613a59565b60405180910390f35b34801561047857600080fd5b50610481610e87565b005b61049d6004803603810190610498919061324c565b610f0f565b005b3480156104ab57600080fd5b506104b4610fdf565b6040516104c19190613797565b60405180910390f35b3480156104d657600080fd5b506104df61106d565b005b3480156104ed57600080fd5b506104f6611115565b60405161050391906136fa565b60405180910390f35b34801561051857600080fd5b5061052161113f565b60405161052e9190613797565b60405180910390f35b34801561054357600080fd5b5061054c6111d1565b6040516105599190613a59565b60405180910390f35b61057c600480360381019061057791906131f2565b6111d7565b005b34801561058a57600080fd5b506105a560048036038101906105a091906130cf565b611ac4565b005b3480156105b357600080fd5b506105bc611c45565b005b3480156105ca57600080fd5b506105e560048036038101906105e0919061304c565b611cde565b005b3480156105f357600080fd5b506105fc611d40565b6040516106099190613797565b60405180910390f35b34801561061e57600080fd5b50610639600480360381019061063491906131f2565b611dce565b6040516106469190613797565b60405180910390f35b34801561065b57600080fd5b50610664611f27565b6040516106719190613a59565b60405180910390f35b34801561068657600080fd5b5061068f611f2d565b60405161069c919061377c565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190612fb9565b611f53565b6040516106d99190613761565b60405180910390f35b3480156106ee57600080fd5b50610709600480360381019061070491906131a9565b611fe7565b005b34801561071757600080fd5b50610732600480360381019061072d9190612f8c565b61207d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ff57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061080f575061080e82612175565b5b9050919050565b60606000805461082590613cfa565b80601f016020809104026020016040519081016040528092919081815260200182805461085190613cfa565b801561089e5780601f106108735761010080835404028352916020019161089e565b820191906000526020600020905b81548152906001019060200180831161088157829003601f168201915b5050505050905090565b60006108b3826121df565b6108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990613959565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061093882610d1d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a0906139f9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c861224b565b73ffffffffffffffffffffffffffffffffffffffff1614806109f757506109f6816109f161224b565b611f53565b5b610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d906138d9565b60405180910390fd5b610a408383612253565b505050565b610a4d61224b565b73ffffffffffffffffffffffffffffffffffffffff16610a6b611115565b73ffffffffffffffffffffffffffffffffffffffff1614610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890613979565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b11601061230c565b905090565b610b27610b2161224b565b8261231a565b610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90613a39565b60405180910390fd5b610b718383836123f8565b505050565b600d60009054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b610ba461224b565b73ffffffffffffffffffffffffffffffffffffffff16610bc2611115565b73ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90613979565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c63573d6000803e3d6000fd5b5050565b610c8283838360405180602001604052806000815250611cde565b505050565b610c8f61224b565b73ffffffffffffffffffffffffffffffffffffffff16610cad611115565b73ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613979565b60405180910390fd5b80600a9080519060200190610d19929190612d8b565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90613919565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906138f9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e8f61224b565b73ffffffffffffffffffffffffffffffffffffffff16610ead611115565b73ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90613979565b60405180910390fd5b610f0d6000612654565b565b610f1761224b565b73ffffffffffffffffffffffffffffffffffffffff16610f35611115565b73ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290613979565b60405180910390fd5b6000610f97601061230c565b90506000600190505b838111610fd957610fbc838284610fb79190613b53565b61271a565b610fc66010612738565b8080610fd190613d5d565b915050610fa0565b50505050565b600c8054610fec90613cfa565b80601f016020809104026020016040519081016040528092919081815260200182805461101890613cfa565b80156110655780601f1061103a57610100808354040283529160200191611065565b820191906000526020600020905b81548152906001019060200180831161104857829003601f168201915b505050505081565b61107561224b565b73ffffffffffffffffffffffffffffffffffffffff16611093611115565b73ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613979565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114e90613cfa565b80601f016020809104026020016040519081016040528092919081815260200182805461117a90613cfa565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b5050505050905090565b60085481565b60006111e3601061230c565b90506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561150f576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161128a91906136fa565b60206040518083038186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da919061321f565b1161131a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611311906139d9565b60405180910390fd5b6001600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161137791906136fa565b60206040518083038186803b15801561138f57600080fd5b505afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c7919061321f565b6113d19190613b53565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161147191906136fa565b60206040518083038186803b15801561148957600080fd5b505afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c1919061321f565b6114cb9190613b53565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016115aa91906136fa565b60206040518083038186803b1580156115c257600080fd5b505afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa919061321f565b11156117c8576001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161169d91906136fa565b60206040518083038186803b1580156116b557600080fd5b505afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed919061321f565b6116f79190613bda565b6117019190613b53565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600d60009054906101000a900460ff16611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90613819565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090613a19565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016118f491906136fa565b60206040518083038186803b15801561190c57600080fd5b505afa158015611920573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611944919061321f565b8261194e33610dcf565b6119589190613b53565b1115611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613899565b60405180910390fd5b6009546119af838361274e90919063ffffffff16565b11156119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e790613879565b60405180910390fd5b6000600190505b828111611abf57611a13338284611a0e9190613b53565b61271a565b611a1d6010612738565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a699190613bda565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611ab790613d5d565b9150506119f7565b505050565b611acc61224b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613859565b60405180910390fd5b8060056000611b4761224b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bf461224b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c399190613761565b60405180910390a35050565b611c4d61224b565b73ffffffffffffffffffffffffffffffffffffffff16611c6b611115565b73ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613979565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b611cef611ce961224b565b8361231a565b611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613a39565b60405180910390fd5b611d3a84848484612764565b50505050565b600b8054611d4d90613cfa565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7990613cfa565b8015611dc65780601f10611d9b57610100808354040283529160200191611dc6565b820191906000526020600020905b815481529060010190602001808311611da957829003601f168201915b505050505081565b6060611dd9826121df565b611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f906139b9565b60405180910390fd5b60001515600d60019054906101000a900460ff1615151415611ec657600c8054611e4190613cfa565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6d90613cfa565b8015611eba5780601f10611e8f57610100808354040283529160200191611eba565b820191906000526020600020905b815481529060010190602001808311611e9d57829003601f168201915b50505050509050611f22565b6000611ed06127c0565b90506000815111611ef05760405180602001604052806000815250611f1e565b80611efa84612852565b600b604051602001611f0e939291906136c9565b6040516020818303038152906040525b9150505b919050565b60095481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fef61224b565b73ffffffffffffffffffffffffffffffffffffffff1661200d611115565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90613979565b60405180910390fd5b80600c9080519060200190612079929190612d8b565b5050565b61208561224b565b73ffffffffffffffffffffffffffffffffffffffff166120a3611115565b73ffffffffffffffffffffffffffffffffffffffff16146120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090613979565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612160906137d9565b60405180910390fd5b61217281612654565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122c683610d1d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612325826121df565b612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b906138b9565b60405180910390fd5b600061236f83610d1d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123de57508373ffffffffffffffffffffffffffffffffffffffff166123c6846108a8565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ef57506123ee8185611f53565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661241882610d1d565b73ffffffffffffffffffffffffffffffffffffffff161461246e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246590613999565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d590613839565b60405180910390fd5b6124e98383836129b3565b6124f4600082612253565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125449190613bda565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259b9190613b53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127348282604051806020016040528060008152506129b8565b5050565b6001816000016000828254019250508190555050565b6000818361275c9190613b53565b905092915050565b61276f8484846123f8565b61277b84848484612a13565b6127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b1906137b9565b60405180910390fd5b50505050565b6060600a80546127cf90613cfa565b80601f01602080910402602001604051908101604052809291908181526020018280546127fb90613cfa565b80156128485780601f1061281d57610100808354040283529160200191612848565b820191906000526020600020905b81548152906001019060200180831161282b57829003601f168201915b5050505050905090565b6060600082141561289a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129ae565b600082905060005b600082146128cc5780806128b590613d5d565b915050600a826128c59190613ba9565b91506128a2565b60008167ffffffffffffffff8111156128e8576128e7613e93565b5b6040519080825280601f01601f19166020018201604052801561291a5781602001600182028036833780820191505090505b5090505b600085146129a7576001826129339190613bda565b9150600a856129429190613da6565b603061294e9190613b53565b60f81b81838151811061296457612963613e64565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129a09190613ba9565b945061291e565b8093505050505b919050565b505050565b6129c28383612baa565b6129cf6000848484612a13565b612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a05906137b9565b60405180910390fd5b505050565b6000612a348473ffffffffffffffffffffffffffffffffffffffff16612d78565b15612b9d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a5d61224b565b8786866040518563ffffffff1660e01b8152600401612a7f9493929190613715565b602060405180830381600087803b158015612a9957600080fd5b505af1925050508015612aca57506040513d601f19601f82011682018060405250810190612ac7919061317c565b60015b612b4d573d8060008114612afa576040519150601f19603f3d011682016040523d82523d6000602084013e612aff565b606091505b50600081511415612b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3c906137b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ba2565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1190613939565b60405180910390fd5b612c23816121df565b15612c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5a906137f9565b60405180910390fd5b612c6f600083836129b3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cbf9190613b53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d9790613cfa565b90600052602060002090601f016020900481019282612db95760008555612e00565b82601f10612dd257805160ff1916838001178555612e00565b82800160010185558215612e00579182015b82811115612dff578251825591602001919060010190612de4565b5b509050612e0d9190612e11565b5090565b5b80821115612e2a576000816000905550600101612e12565b5090565b6000612e41612e3c84613a99565b613a74565b905082815260208101848484011115612e5d57612e5c613ec7565b5b612e68848285613cb8565b509392505050565b6000612e83612e7e84613aca565b613a74565b905082815260208101848484011115612e9f57612e9e613ec7565b5b612eaa848285613cb8565b509392505050565b600081359050612ec181614432565b92915050565b600081359050612ed681614449565b92915050565b600081359050612eeb81614460565b92915050565b600081519050612f0081614460565b92915050565b600082601f830112612f1b57612f1a613ec2565b5b8135612f2b848260208601612e2e565b91505092915050565b600082601f830112612f4957612f48613ec2565b5b8135612f59848260208601612e70565b91505092915050565b600081359050612f7181614477565b92915050565b600081519050612f8681614477565b92915050565b600060208284031215612fa257612fa1613ed1565b5b6000612fb084828501612eb2565b91505092915050565b60008060408385031215612fd057612fcf613ed1565b5b6000612fde85828601612eb2565b9250506020612fef85828601612eb2565b9150509250929050565b60008060006060848603121561301257613011613ed1565b5b600061302086828701612eb2565b935050602061303186828701612eb2565b925050604061304286828701612f62565b9150509250925092565b6000806000806080858703121561306657613065613ed1565b5b600061307487828801612eb2565b945050602061308587828801612eb2565b935050604061309687828801612f62565b925050606085013567ffffffffffffffff8111156130b7576130b6613ecc565b5b6130c387828801612f06565b91505092959194509250565b600080604083850312156130e6576130e5613ed1565b5b60006130f485828601612eb2565b925050602061310585828601612ec7565b9150509250929050565b6000806040838503121561312657613125613ed1565b5b600061313485828601612eb2565b925050602061314585828601612f62565b9150509250929050565b60006020828403121561316557613164613ed1565b5b600061317384828501612edc565b91505092915050565b60006020828403121561319257613191613ed1565b5b60006131a084828501612ef1565b91505092915050565b6000602082840312156131bf576131be613ed1565b5b600082013567ffffffffffffffff8111156131dd576131dc613ecc565b5b6131e984828501612f34565b91505092915050565b60006020828403121561320857613207613ed1565b5b600061321684828501612f62565b91505092915050565b60006020828403121561323557613234613ed1565b5b600061324384828501612f77565b91505092915050565b6000806040838503121561326357613262613ed1565b5b600061327185828601612f62565b925050602061328285828601612eb2565b9150509250929050565b61329581613c0e565b82525050565b6132a481613c20565b82525050565b60006132b582613b10565b6132bf8185613b26565b93506132cf818560208601613cc7565b6132d881613ed6565b840191505092915050565b6132ec81613c82565b82525050565b60006132fd82613b1b565b6133078185613b37565b9350613317818560208601613cc7565b61332081613ed6565b840191505092915050565b600061333682613b1b565b6133408185613b48565b9350613350818560208601613cc7565b80840191505092915050565b6000815461336981613cfa565b6133738186613b48565b9450600182166000811461338e576001811461339f576133d2565b60ff198316865281860193506133d2565b6133a885613afb565b60005b838110156133ca578154818901526001820191506020810190506133ab565b838801955050505b50505092915050565b60006133e8603283613b37565b91506133f382613ee7565b604082019050919050565b600061340b602683613b37565b915061341682613f36565b604082019050919050565b600061342e601c83613b37565b915061343982613f85565b602082019050919050565b6000613451601783613b37565b915061345c82613fae565b602082019050919050565b6000613474602483613b37565b915061347f82613fd7565b604082019050919050565b6000613497601983613b37565b91506134a282614026565b602082019050919050565b60006134ba601c83613b37565b91506134c58261404f565b602082019050919050565b60006134dd602e83613b37565b91506134e882614078565b604082019050919050565b6000613500602c83613b37565b915061350b826140c7565b604082019050919050565b6000613523603883613b37565b915061352e82614116565b604082019050919050565b6000613546602a83613b37565b915061355182614165565b604082019050919050565b6000613569602983613b37565b9150613574826141b4565b604082019050919050565b600061358c602083613b37565b915061359782614203565b602082019050919050565b60006135af602c83613b37565b91506135ba8261422c565b604082019050919050565b60006135d2602083613b37565b91506135dd8261427b565b602082019050919050565b60006135f5602983613b37565b9150613600826142a4565b604082019050919050565b6000613618602f83613b37565b9150613623826142f3565b604082019050919050565b600061363b601d83613b37565b915061364682614342565b602082019050919050565b600061365e602183613b37565b91506136698261436b565b604082019050919050565b6000613681601b83613b37565b915061368c826143ba565b602082019050919050565b60006136a4603183613b37565b91506136af826143e3565b604082019050919050565b6136c381613c78565b82525050565b60006136d5828661332b565b91506136e1828561332b565b91506136ed828461335c565b9150819050949350505050565b600060208201905061370f600083018461328c565b92915050565b600060808201905061372a600083018761328c565b613737602083018661328c565b61374460408301856136ba565b818103606083015261375681846132aa565b905095945050505050565b6000602082019050613776600083018461329b565b92915050565b600060208201905061379160008301846132e3565b92915050565b600060208201905081810360008301526137b181846132f2565b905092915050565b600060208201905081810360008301526137d2816133db565b9050919050565b600060208201905081810360008301526137f2816133fe565b9050919050565b6000602082019050818103600083015261381281613421565b9050919050565b6000602082019050818103600083015261383281613444565b9050919050565b6000602082019050818103600083015261385281613467565b9050919050565b600060208201905081810360008301526138728161348a565b9050919050565b60006020820190508181036000830152613892816134ad565b9050919050565b600060208201905081810360008301526138b2816134d0565b9050919050565b600060208201905081810360008301526138d2816134f3565b9050919050565b600060208201905081810360008301526138f281613516565b9050919050565b6000602082019050818103600083015261391281613539565b9050919050565b600060208201905081810360008301526139328161355c565b9050919050565b600060208201905081810360008301526139528161357f565b9050919050565b60006020820190508181036000830152613972816135a2565b9050919050565b60006020820190508181036000830152613992816135c5565b9050919050565b600060208201905081810360008301526139b2816135e8565b9050919050565b600060208201905081810360008301526139d28161360b565b9050919050565b600060208201905081810360008301526139f28161362e565b9050919050565b60006020820190508181036000830152613a1281613651565b9050919050565b60006020820190508181036000830152613a3281613674565b9050919050565b60006020820190508181036000830152613a5281613697565b9050919050565b6000602082019050613a6e60008301846136ba565b92915050565b6000613a7e613a8f565b9050613a8a8282613d2c565b919050565b6000604051905090565b600067ffffffffffffffff821115613ab457613ab3613e93565b5b613abd82613ed6565b9050602081019050919050565b600067ffffffffffffffff821115613ae557613ae4613e93565b5b613aee82613ed6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b5e82613c78565b9150613b6983613c78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9e57613b9d613dd7565b5b828201905092915050565b6000613bb482613c78565b9150613bbf83613c78565b925082613bcf57613bce613e06565b5b828204905092915050565b6000613be582613c78565b9150613bf083613c78565b925082821015613c0357613c02613dd7565b5b828203905092915050565b6000613c1982613c58565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c8d82613c94565b9050919050565b6000613c9f82613ca6565b9050919050565b6000613cb182613c58565b9050919050565b82818337600083830152505050565b60005b83811015613ce5578082015181840152602081019050613cca565b83811115613cf4576000848401525b50505050565b60006002820490506001821680613d1257607f821691505b60208210811415613d2657613d25613e35565b5b50919050565b613d3582613ed6565b810181811067ffffffffffffffff82111715613d5457613d53613e93565b5b80604052505050565b6000613d6882613c78565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9b57613d9a613dd7565b5b600182019050919050565b6000613db182613c78565b9150613dbc83613c78565b925082613dcc57613dcb613e06565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65204e6565647320546f20426520416374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b7f43616e6e6f7420636c61696d206d6f7265207468616e2042656172204d61726b60008201527f65742042756473206f776e656421000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f446f6573206e6f74206f776e2042656172204d61726b65742042756473000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f7265204672656520536869747320746f20636c61696d0000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61443b81613c0e565b811461444657600080fd5b50565b61445281613c20565b811461445d57600080fd5b50565b61446981613c2c565b811461447457600080fd5b50565b61448081613c78565b811461448b57600080fd5b5056fea2646970667358221220f13f2269c24375dc9590f800633358b1218be4158c26e85e6c26bcf3c101788064736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d63514e59585a6a7157764145316379397656576e706b6e767a4a77757a6f31517a6a3954336e51514e6676630000000000000000000000

Deployed Bytecode

0x6080604052600436106101e35760003560e01c80637225038011610102578063b88d4fde11610095578063e306277711610064578063e30627771461067a578063e985e9c5146106a5578063f2c4ce1e146106e2578063f2fde38b1461070b576101e3565b8063b88d4fde146105be578063c6682862146105e7578063c87b56dd14610612578063d5abeb011461064f576101e3565b8063a035b1fe116100d1578063a035b1fe14610537578063a0712d6814610562578063a22cb4651461057e578063a475b5dd146105a7576101e3565b8063722503801461049f5780637d8966e4146104ca5780638da5cb5b146104e157806395d89b411461050c576101e3565b8063319050601161017a5780636352211e116101495780636352211e146103f257806370a082311461042f578063715018a61461046c57806371e7e4fb14610483576101e3565b8063319050601461035e5780633ccfd60b1461038957806342842e0e146103a05780634a44f379146103c9576101e3565b806312c60ec7116101b657806312c60ec7146102b657806318160ddd146102df57806323b872dd1461030a57806324bbd04914610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a919061314f565b610734565b60405161021c9190613761565b60405180910390f35b34801561023157600080fd5b5061023a610816565b6040516102479190613797565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906131f2565b6108a8565b60405161028491906136fa565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061310f565b61092d565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190612f8c565b610a45565b005b3480156102eb57600080fd5b506102f4610b05565b6040516103019190613a59565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190612ff9565b610b16565b005b34801561033f57600080fd5b50610348610b76565b6040516103559190613761565b60405180910390f35b34801561036a57600080fd5b50610373610b89565b6040516103809190613761565b60405180910390f35b34801561039557600080fd5b5061039e610b9c565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190612ff9565b610c67565b005b3480156103d557600080fd5b506103f060048036038101906103eb91906131a9565b610c87565b005b3480156103fe57600080fd5b50610419600480360381019061041491906131f2565b610d1d565b60405161042691906136fa565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612f8c565b610dcf565b6040516104639190613a59565b60405180910390f35b34801561047857600080fd5b50610481610e87565b005b61049d6004803603810190610498919061324c565b610f0f565b005b3480156104ab57600080fd5b506104b4610fdf565b6040516104c19190613797565b60405180910390f35b3480156104d657600080fd5b506104df61106d565b005b3480156104ed57600080fd5b506104f6611115565b60405161050391906136fa565b60405180910390f35b34801561051857600080fd5b5061052161113f565b60405161052e9190613797565b60405180910390f35b34801561054357600080fd5b5061054c6111d1565b6040516105599190613a59565b60405180910390f35b61057c600480360381019061057791906131f2565b6111d7565b005b34801561058a57600080fd5b506105a560048036038101906105a091906130cf565b611ac4565b005b3480156105b357600080fd5b506105bc611c45565b005b3480156105ca57600080fd5b506105e560048036038101906105e0919061304c565b611cde565b005b3480156105f357600080fd5b506105fc611d40565b6040516106099190613797565b60405180910390f35b34801561061e57600080fd5b50610639600480360381019061063491906131f2565b611dce565b6040516106469190613797565b60405180910390f35b34801561065b57600080fd5b50610664611f27565b6040516106719190613a59565b60405180910390f35b34801561068657600080fd5b5061068f611f2d565b60405161069c919061377c565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190612fb9565b611f53565b6040516106d99190613761565b60405180910390f35b3480156106ee57600080fd5b50610709600480360381019061070491906131a9565b611fe7565b005b34801561071757600080fd5b50610732600480360381019061072d9190612f8c565b61207d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ff57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061080f575061080e82612175565b5b9050919050565b60606000805461082590613cfa565b80601f016020809104026020016040519081016040528092919081815260200182805461085190613cfa565b801561089e5780601f106108735761010080835404028352916020019161089e565b820191906000526020600020905b81548152906001019060200180831161088157829003601f168201915b5050505050905090565b60006108b3826121df565b6108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990613959565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061093882610d1d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a0906139f9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c861224b565b73ffffffffffffffffffffffffffffffffffffffff1614806109f757506109f6816109f161224b565b611f53565b5b610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d906138d9565b60405180910390fd5b610a408383612253565b505050565b610a4d61224b565b73ffffffffffffffffffffffffffffffffffffffff16610a6b611115565b73ffffffffffffffffffffffffffffffffffffffff1614610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890613979565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b11601061230c565b905090565b610b27610b2161224b565b8261231a565b610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90613a39565b60405180910390fd5b610b718383836123f8565b505050565b600d60009054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b610ba461224b565b73ffffffffffffffffffffffffffffffffffffffff16610bc2611115565b73ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90613979565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c63573d6000803e3d6000fd5b5050565b610c8283838360405180602001604052806000815250611cde565b505050565b610c8f61224b565b73ffffffffffffffffffffffffffffffffffffffff16610cad611115565b73ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613979565b60405180910390fd5b80600a9080519060200190610d19929190612d8b565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90613919565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906138f9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e8f61224b565b73ffffffffffffffffffffffffffffffffffffffff16610ead611115565b73ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90613979565b60405180910390fd5b610f0d6000612654565b565b610f1761224b565b73ffffffffffffffffffffffffffffffffffffffff16610f35611115565b73ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290613979565b60405180910390fd5b6000610f97601061230c565b90506000600190505b838111610fd957610fbc838284610fb79190613b53565b61271a565b610fc66010612738565b8080610fd190613d5d565b915050610fa0565b50505050565b600c8054610fec90613cfa565b80601f016020809104026020016040519081016040528092919081815260200182805461101890613cfa565b80156110655780601f1061103a57610100808354040283529160200191611065565b820191906000526020600020905b81548152906001019060200180831161104857829003601f168201915b505050505081565b61107561224b565b73ffffffffffffffffffffffffffffffffffffffff16611093611115565b73ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613979565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114e90613cfa565b80601f016020809104026020016040519081016040528092919081815260200182805461117a90613cfa565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b5050505050905090565b60085481565b60006111e3601061230c565b90506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561150f576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161128a91906136fa565b60206040518083038186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da919061321f565b1161131a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611311906139d9565b60405180910390fd5b6001600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161137791906136fa565b60206040518083038186803b15801561138f57600080fd5b505afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c7919061321f565b6113d19190613b53565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161147191906136fa565b60206040518083038186803b15801561148957600080fd5b505afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c1919061321f565b6114cb9190613b53565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016115aa91906136fa565b60206040518083038186803b1580156115c257600080fd5b505afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa919061321f565b11156117c8576001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161169d91906136fa565b60206040518083038186803b1580156116b557600080fd5b505afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed919061321f565b6116f79190613bda565b6117019190613b53565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600d60009054906101000a900460ff16611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90613819565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090613a19565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016118f491906136fa565b60206040518083038186803b15801561190c57600080fd5b505afa158015611920573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611944919061321f565b8261194e33610dcf565b6119589190613b53565b1115611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613899565b60405180910390fd5b6009546119af838361274e90919063ffffffff16565b11156119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e790613879565b60405180910390fd5b6000600190505b828111611abf57611a13338284611a0e9190613b53565b61271a565b611a1d6010612738565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a699190613bda565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611ab790613d5d565b9150506119f7565b505050565b611acc61224b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613859565b60405180910390fd5b8060056000611b4761224b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bf461224b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c399190613761565b60405180910390a35050565b611c4d61224b565b73ffffffffffffffffffffffffffffffffffffffff16611c6b611115565b73ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613979565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b611cef611ce961224b565b8361231a565b611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613a39565b60405180910390fd5b611d3a84848484612764565b50505050565b600b8054611d4d90613cfa565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7990613cfa565b8015611dc65780601f10611d9b57610100808354040283529160200191611dc6565b820191906000526020600020905b815481529060010190602001808311611da957829003601f168201915b505050505081565b6060611dd9826121df565b611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f906139b9565b60405180910390fd5b60001515600d60019054906101000a900460ff1615151415611ec657600c8054611e4190613cfa565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6d90613cfa565b8015611eba5780601f10611e8f57610100808354040283529160200191611eba565b820191906000526020600020905b815481529060010190602001808311611e9d57829003601f168201915b50505050509050611f22565b6000611ed06127c0565b90506000815111611ef05760405180602001604052806000815250611f1e565b80611efa84612852565b600b604051602001611f0e939291906136c9565b6040516020818303038152906040525b9150505b919050565b60095481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fef61224b565b73ffffffffffffffffffffffffffffffffffffffff1661200d611115565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90613979565b60405180910390fd5b80600c9080519060200190612079929190612d8b565b5050565b61208561224b565b73ffffffffffffffffffffffffffffffffffffffff166120a3611115565b73ffffffffffffffffffffffffffffffffffffffff16146120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090613979565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612160906137d9565b60405180910390fd5b61217281612654565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122c683610d1d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612325826121df565b612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b906138b9565b60405180910390fd5b600061236f83610d1d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123de57508373ffffffffffffffffffffffffffffffffffffffff166123c6846108a8565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ef57506123ee8185611f53565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661241882610d1d565b73ffffffffffffffffffffffffffffffffffffffff161461246e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246590613999565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d590613839565b60405180910390fd5b6124e98383836129b3565b6124f4600082612253565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125449190613bda565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259b9190613b53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127348282604051806020016040528060008152506129b8565b5050565b6001816000016000828254019250508190555050565b6000818361275c9190613b53565b905092915050565b61276f8484846123f8565b61277b84848484612a13565b6127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b1906137b9565b60405180910390fd5b50505050565b6060600a80546127cf90613cfa565b80601f01602080910402602001604051908101604052809291908181526020018280546127fb90613cfa565b80156128485780601f1061281d57610100808354040283529160200191612848565b820191906000526020600020905b81548152906001019060200180831161282b57829003601f168201915b5050505050905090565b6060600082141561289a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129ae565b600082905060005b600082146128cc5780806128b590613d5d565b915050600a826128c59190613ba9565b91506128a2565b60008167ffffffffffffffff8111156128e8576128e7613e93565b5b6040519080825280601f01601f19166020018201604052801561291a5781602001600182028036833780820191505090505b5090505b600085146129a7576001826129339190613bda565b9150600a856129429190613da6565b603061294e9190613b53565b60f81b81838151811061296457612963613e64565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129a09190613ba9565b945061291e565b8093505050505b919050565b505050565b6129c28383612baa565b6129cf6000848484612a13565b612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a05906137b9565b60405180910390fd5b505050565b6000612a348473ffffffffffffffffffffffffffffffffffffffff16612d78565b15612b9d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a5d61224b565b8786866040518563ffffffff1660e01b8152600401612a7f9493929190613715565b602060405180830381600087803b158015612a9957600080fd5b505af1925050508015612aca57506040513d601f19601f82011682018060405250810190612ac7919061317c565b60015b612b4d573d8060008114612afa576040519150601f19603f3d011682016040523d82523d6000602084013e612aff565b606091505b50600081511415612b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3c906137b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ba2565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1190613939565b60405180910390fd5b612c23816121df565b15612c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5a906137f9565b60405180910390fd5b612c6f600083836129b3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cbf9190613b53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d9790613cfa565b90600052602060002090601f016020900481019282612db95760008555612e00565b82601f10612dd257805160ff1916838001178555612e00565b82800160010185558215612e00579182015b82811115612dff578251825591602001919060010190612de4565b5b509050612e0d9190612e11565b5090565b5b80821115612e2a576000816000905550600101612e12565b5090565b6000612e41612e3c84613a99565b613a74565b905082815260208101848484011115612e5d57612e5c613ec7565b5b612e68848285613cb8565b509392505050565b6000612e83612e7e84613aca565b613a74565b905082815260208101848484011115612e9f57612e9e613ec7565b5b612eaa848285613cb8565b509392505050565b600081359050612ec181614432565b92915050565b600081359050612ed681614449565b92915050565b600081359050612eeb81614460565b92915050565b600081519050612f0081614460565b92915050565b600082601f830112612f1b57612f1a613ec2565b5b8135612f2b848260208601612e2e565b91505092915050565b600082601f830112612f4957612f48613ec2565b5b8135612f59848260208601612e70565b91505092915050565b600081359050612f7181614477565b92915050565b600081519050612f8681614477565b92915050565b600060208284031215612fa257612fa1613ed1565b5b6000612fb084828501612eb2565b91505092915050565b60008060408385031215612fd057612fcf613ed1565b5b6000612fde85828601612eb2565b9250506020612fef85828601612eb2565b9150509250929050565b60008060006060848603121561301257613011613ed1565b5b600061302086828701612eb2565b935050602061303186828701612eb2565b925050604061304286828701612f62565b9150509250925092565b6000806000806080858703121561306657613065613ed1565b5b600061307487828801612eb2565b945050602061308587828801612eb2565b935050604061309687828801612f62565b925050606085013567ffffffffffffffff8111156130b7576130b6613ecc565b5b6130c387828801612f06565b91505092959194509250565b600080604083850312156130e6576130e5613ed1565b5b60006130f485828601612eb2565b925050602061310585828601612ec7565b9150509250929050565b6000806040838503121561312657613125613ed1565b5b600061313485828601612eb2565b925050602061314585828601612f62565b9150509250929050565b60006020828403121561316557613164613ed1565b5b600061317384828501612edc565b91505092915050565b60006020828403121561319257613191613ed1565b5b60006131a084828501612ef1565b91505092915050565b6000602082840312156131bf576131be613ed1565b5b600082013567ffffffffffffffff8111156131dd576131dc613ecc565b5b6131e984828501612f34565b91505092915050565b60006020828403121561320857613207613ed1565b5b600061321684828501612f62565b91505092915050565b60006020828403121561323557613234613ed1565b5b600061324384828501612f77565b91505092915050565b6000806040838503121561326357613262613ed1565b5b600061327185828601612f62565b925050602061328285828601612eb2565b9150509250929050565b61329581613c0e565b82525050565b6132a481613c20565b82525050565b60006132b582613b10565b6132bf8185613b26565b93506132cf818560208601613cc7565b6132d881613ed6565b840191505092915050565b6132ec81613c82565b82525050565b60006132fd82613b1b565b6133078185613b37565b9350613317818560208601613cc7565b61332081613ed6565b840191505092915050565b600061333682613b1b565b6133408185613b48565b9350613350818560208601613cc7565b80840191505092915050565b6000815461336981613cfa565b6133738186613b48565b9450600182166000811461338e576001811461339f576133d2565b60ff198316865281860193506133d2565b6133a885613afb565b60005b838110156133ca578154818901526001820191506020810190506133ab565b838801955050505b50505092915050565b60006133e8603283613b37565b91506133f382613ee7565b604082019050919050565b600061340b602683613b37565b915061341682613f36565b604082019050919050565b600061342e601c83613b37565b915061343982613f85565b602082019050919050565b6000613451601783613b37565b915061345c82613fae565b602082019050919050565b6000613474602483613b37565b915061347f82613fd7565b604082019050919050565b6000613497601983613b37565b91506134a282614026565b602082019050919050565b60006134ba601c83613b37565b91506134c58261404f565b602082019050919050565b60006134dd602e83613b37565b91506134e882614078565b604082019050919050565b6000613500602c83613b37565b915061350b826140c7565b604082019050919050565b6000613523603883613b37565b915061352e82614116565b604082019050919050565b6000613546602a83613b37565b915061355182614165565b604082019050919050565b6000613569602983613b37565b9150613574826141b4565b604082019050919050565b600061358c602083613b37565b915061359782614203565b602082019050919050565b60006135af602c83613b37565b91506135ba8261422c565b604082019050919050565b60006135d2602083613b37565b91506135dd8261427b565b602082019050919050565b60006135f5602983613b37565b9150613600826142a4565b604082019050919050565b6000613618602f83613b37565b9150613623826142f3565b604082019050919050565b600061363b601d83613b37565b915061364682614342565b602082019050919050565b600061365e602183613b37565b91506136698261436b565b604082019050919050565b6000613681601b83613b37565b915061368c826143ba565b602082019050919050565b60006136a4603183613b37565b91506136af826143e3565b604082019050919050565b6136c381613c78565b82525050565b60006136d5828661332b565b91506136e1828561332b565b91506136ed828461335c565b9150819050949350505050565b600060208201905061370f600083018461328c565b92915050565b600060808201905061372a600083018761328c565b613737602083018661328c565b61374460408301856136ba565b818103606083015261375681846132aa565b905095945050505050565b6000602082019050613776600083018461329b565b92915050565b600060208201905061379160008301846132e3565b92915050565b600060208201905081810360008301526137b181846132f2565b905092915050565b600060208201905081810360008301526137d2816133db565b9050919050565b600060208201905081810360008301526137f2816133fe565b9050919050565b6000602082019050818103600083015261381281613421565b9050919050565b6000602082019050818103600083015261383281613444565b9050919050565b6000602082019050818103600083015261385281613467565b9050919050565b600060208201905081810360008301526138728161348a565b9050919050565b60006020820190508181036000830152613892816134ad565b9050919050565b600060208201905081810360008301526138b2816134d0565b9050919050565b600060208201905081810360008301526138d2816134f3565b9050919050565b600060208201905081810360008301526138f281613516565b9050919050565b6000602082019050818103600083015261391281613539565b9050919050565b600060208201905081810360008301526139328161355c565b9050919050565b600060208201905081810360008301526139528161357f565b9050919050565b60006020820190508181036000830152613972816135a2565b9050919050565b60006020820190508181036000830152613992816135c5565b9050919050565b600060208201905081810360008301526139b2816135e8565b9050919050565b600060208201905081810360008301526139d28161360b565b9050919050565b600060208201905081810360008301526139f28161362e565b9050919050565b60006020820190508181036000830152613a1281613651565b9050919050565b60006020820190508181036000830152613a3281613674565b9050919050565b60006020820190508181036000830152613a5281613697565b9050919050565b6000602082019050613a6e60008301846136ba565b92915050565b6000613a7e613a8f565b9050613a8a8282613d2c565b919050565b6000604051905090565b600067ffffffffffffffff821115613ab457613ab3613e93565b5b613abd82613ed6565b9050602081019050919050565b600067ffffffffffffffff821115613ae557613ae4613e93565b5b613aee82613ed6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b5e82613c78565b9150613b6983613c78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9e57613b9d613dd7565b5b828201905092915050565b6000613bb482613c78565b9150613bbf83613c78565b925082613bcf57613bce613e06565b5b828204905092915050565b6000613be582613c78565b9150613bf083613c78565b925082821015613c0357613c02613dd7565b5b828203905092915050565b6000613c1982613c58565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c8d82613c94565b9050919050565b6000613c9f82613ca6565b9050919050565b6000613cb182613c58565b9050919050565b82818337600083830152505050565b60005b83811015613ce5578082015181840152602081019050613cca565b83811115613cf4576000848401525b50505050565b60006002820490506001821680613d1257607f821691505b60208210811415613d2657613d25613e35565b5b50919050565b613d3582613ed6565b810181811067ffffffffffffffff82111715613d5457613d53613e93565b5b80604052505050565b6000613d6882613c78565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9b57613d9a613dd7565b5b600182019050919050565b6000613db182613c78565b9150613dbc83613c78565b925082613dcc57613dcb613e06565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65204e6565647320546f20426520416374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b7f43616e6e6f7420636c61696d206d6f7265207468616e2042656172204d61726b60008201527f65742042756473206f776e656421000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f446f6573206e6f74206f776e2042656172204d61726b65742042756473000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f7265204672656520536869747320746f20636c61696d0000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61443b81613c0e565b811461444657600080fd5b50565b61445281613c20565b811461445d57600080fd5b50565b61446981613c2c565b811461447457600080fd5b50565b61448081613c78565b811461448b57600080fd5b5056fea2646970667358221220f13f2269c24375dc9590f800633358b1218be4158c26e85e6c26bcf3c101788064736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d63514e59585a6a7157764145316379397656576e706b6e767a4a77757a6f31517a6a3954336e51514e6676630000000000000000000000

-----Decoded View---------------
Arg [0] : _notRevealedURI (string): ipfs://QmcQNYXZjqWvAE1cy9vVWnpknvzJwuzo1Qzj9T3nQQNfvc

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [2] : 697066733a2f2f516d63514e59585a6a7157764145316379397656576e706b6e
Arg [3] : 767a4a77757a6f31517a6a3954336e51514e6676630000000000000000000000


Deployed Bytecode Sourcemap

39120:3760:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25211:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26156:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27715:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27238:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42084:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39865:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28605:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39491:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39526:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42732:143;;;;;;;;;;;;;:::i;:::-;;29015:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42409:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25850:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25580:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38388:94;;;;;;;;;;;;;:::i;:::-;;39974:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39454:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42207:78;;;;;;;;;;;;;:::i;:::-;;37737:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26325:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39304:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40282:1298;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28008:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42652:72;;;;;;;;;;;;;:::i;:::-;;29271:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39410:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41588:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39341:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39165:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28374:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42518:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38637:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25211:305;25313:4;25365:25;25350:40;;;:11;:40;;;;:105;;;;25422:33;25407:48;;;:11;:48;;;;25350:105;:158;;;;25472:36;25496:11;25472:23;:36::i;:::-;25350:158;25330:178;;25211:305;;;:::o;26156:100::-;26210:13;26243:5;26236:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26156:100;:::o;27715:221::-;27791:7;27819:16;27827:7;27819;:16::i;:::-;27811:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27904:15;:24;27920:7;27904:24;;;;;;;;;;;;;;;;;;;;;27897:31;;27715:221;;;:::o;27238:411::-;27319:13;27335:23;27350:7;27335:14;:23::i;:::-;27319:39;;27383:5;27377:11;;:2;:11;;;;27369:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27477:5;27461:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27486:37;27503:5;27510:12;:10;:12::i;:::-;27486:16;:37::i;:::-;27461:62;27439:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27620:21;27629:2;27633:7;27620:8;:21::i;:::-;27308:341;27238:411;;:::o;42084:115::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42176:14:::1;42159:6;;:32;;;;;;;;;;;;;;;;;;42084:115:::0;:::o;39865:101::-;39909:7;39936:22;:12;:20;:22::i;:::-;39929:29;;39865:101;:::o;28605:339::-;28800:41;28819:12;:10;:12::i;:::-;28833:7;28800:18;:41::i;:::-;28792:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28908:28;28918:4;28924:2;28928:7;28908:9;:28::i;:::-;28605:339;;;:::o;39491:28::-;;;;;;;;;;;;;:::o;39526:31::-;;;;;;;;;;;;;:::o;42732:143::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42780:15:::1;42798:21;42780:39;;42838:10;42830:28;;:37;42859:7;42830:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42769:106;42732:143::o:0;29015:185::-;29153:39;29170:4;29176:2;29180:7;29153:39;;;;;;;;;;;;:16;:39::i;:::-;29015:185;;;:::o;42409:101::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42492:10:::1;42482:7;:20;;;;;;;;;;;;:::i;:::-;;42409:101:::0;:::o;25850:239::-;25922:7;25942:13;25958:7;:16;25966:7;25958:16;;;;;;;;;;;;;;;;;;;;;25942:32;;26010:1;25993:19;;:5;:19;;;;25985:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26076:5;26069:12;;;25850:239;;;:::o;25580:208::-;25652:7;25697:1;25680:19;;:5;:19;;;;25672:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25764:9;:16;25774:5;25764:16;;;;;;;;;;;;;;;;25757:23;;25580:208;;;:::o;38388:94::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38453:21:::1;38471:1;38453:9;:21::i;:::-;38388:94::o:0;39974:296::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40071:14:::1;40088:22;:12;:20;:22::i;:::-;40071:39;;40124:9;40136:1;40124:13;;40120:143;40144:13;40139:1;:18;40120:143;;40178:34;40188:11;40210:1;40201:6;:10;;;;:::i;:::-;40178:9;:34::i;:::-;40227:24;:12;:22;:24::i;:::-;40159:3;;;;;:::i;:::-;;;;40120:143;;;;40060:210;39974:296:::0;;:::o;39454:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42207:78::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42269:8:::1;;;;;;;;;;;42268:9;42257:8;;:20;;;;;;;;;;;;;;;;;;42207:78::o:0;37737:87::-;37783:7;37810:6;;;;;;;;;;;37803:13;;37737:87;:::o;26325:104::-;26381:13;26414:7;26407:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26325:104;:::o;39304:30::-;;;;:::o;40282:1298::-;40344:14;40361:22;:12;:20;:22::i;:::-;40344:39;;40431:1;40399:16;:28;40416:10;40399:28;;;;;;;;;;;;;;;;:33;40396:296;;;40487:1;40456:6;;;;;;;;;;;:16;;;40473:10;40456:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;40448:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;40601:1;40570:6;;;;;;;;;;;:16;;;40587:10;40570:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;;;:::i;:::-;40537:18;:30;40556:10;40537:30;;;;;;;;;;;;;;;:65;;;;40679:1;40648:6;;;;;;;;;;;:16;;;40665:10;40648:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;;;:::i;:::-;40617:16;:28;40634:10;40617:28;;;;;;;;;;;;;;;:63;;;;40396:296;40738:18;:30;40757:10;40738:30;;;;;;;;;;;;;;;;40707:6;;;;;;;;;;;:16;;;40724:10;40707:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;40704:266;;;40881:1;40847:18;:30;40866:10;40847:30;;;;;;;;;;;;;;;;40816:6;;;;;;;;;;;:16;;;40833:10;40816:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;40815:67;;;;:::i;:::-;40784:16;:28;40801:10;40784:28;;;;;;;;;;;;;;;:98;;;;40930:16;:28;40947:10;40930:28;;;;;;;;;;;;;;;;40897:18;:30;40916:10;40897:30;;;;;;;;;;;;;;;:61;;;;40704:266;40990:8;;;;;;;;;;;40982:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;41076:1;41045:16;:28;41062:10;41045:28;;;;;;;;;;;;;;;;:32;41037:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41171:6;;;;;;;;;;;:16;;;41188:10;41171:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41153:13;41129:21;41139:10;41129:9;:21::i;:::-;:37;;;;:::i;:::-;41128:71;;41120:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;41298:9;;41269:25;41280:13;41269:6;:10;;:25;;;;:::i;:::-;:38;;41261:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;41356:9;41368:1;41356:13;;41352:221;41376:13;41371:1;:18;41352:221;;41410:33;41420:10;41441:1;41432:6;:10;;;;:::i;:::-;41410:9;:33::i;:::-;41458:24;:12;:22;:24::i;:::-;41560:1;41529:16;:28;41546:10;41529:28;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;41497:16;:28;41514:10;41497:28;;;;;;;;;;;;;;;:64;;;;41391:3;;;;;:::i;:::-;;;;41352:221;;;;40333:1247;40282:1298;:::o;28008:295::-;28123:12;:10;:12::i;:::-;28111:24;;:8;:24;;;;28103:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28223:8;28178:18;:32;28197:12;:10;:12::i;:::-;28178:32;;;;;;;;;;;;;;;:42;28211:8;28178:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28276:8;28247:48;;28262:12;:10;:12::i;:::-;28247:48;;;28286:8;28247:48;;;;;;:::i;:::-;;;;;;;;28008:295;;:::o;42652:72::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42712:4:::1;42698:11;;:18;;;;;;;;;;;;;;;;;;42652:72::o:0;29271:328::-;29446:41;29465:12;:10;:12::i;:::-;29479:7;29446:18;:41::i;:::-;29438:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29552:39;29566:4;29572:2;29576:7;29585:5;29552:13;:39::i;:::-;29271:328;;;;:::o;39410:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41588:488::-;41661:13;41695:16;41703:7;41695;:16::i;:::-;41687:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41794:5;41779:20;;:11;;;;;;;;;;;:20;;;41776:73;;;41823:14;41816:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41776:73;41861:28;41892:10;:8;:10::i;:::-;41861:41;;41951:1;41926:14;41920:28;:32;:148;;;;;;;;;;;;;;;;;41992:14;42008:25;42025:7;42008:16;:25::i;:::-;42035:13;41975:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41920:148;41913:155;;;41588:488;;;;:::o;39341:31::-;;;;:::o;39165:21::-;;;;;;;;;;;;;:::o;28374:164::-;28471:4;28495:18;:25;28514:5;28495:25;;;;;;;;;;;;;;;:35;28521:8;28495:35;;;;;;;;;;;;;;;;;;;;;;;;;28488:42;;28374:164;;;;:::o;42518:126::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42621:15:::1;42604:14;:32;;;;;;;;;;;;:::i;:::-;;42518:126:::0;:::o;38637:192::-;37968:12;:10;:12::i;:::-;37957:23;;:7;:5;:7::i;:::-;:23;;;37949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38746:1:::1;38726:22;;:8;:22;;;;38718:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38802:19;38812:8;38802:9;:19::i;:::-;38637:192:::0;:::o;12438:157::-;12523:4;12562:25;12547:40;;;:11;:40;;;;12540:47;;12438:157;;;:::o;31109:127::-;31174:4;31226:1;31198:30;;:7;:16;31206:7;31198:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31191:37;;31109:127;;;:::o;3011:98::-;3064:7;3091:10;3084:17;;3011:98;:::o;35091:174::-;35193:2;35166:15;:24;35182:7;35166:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35249:7;35245:2;35211:46;;35220:23;35235:7;35220:14;:23::i;:::-;35211:46;;;;;;;;;;;;35091:174;;:::o;2385:114::-;2450:7;2477;:14;;;2470:21;;2385:114;;;:::o;31403:348::-;31496:4;31521:16;31529:7;31521;:16::i;:::-;31513:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31597:13;31613:23;31628:7;31613:14;:23::i;:::-;31597:39;;31666:5;31655:16;;:7;:16;;;:51;;;;31699:7;31675:31;;:20;31687:7;31675:11;:20::i;:::-;:31;;;31655:51;:87;;;;31710:32;31727:5;31734:7;31710:16;:32::i;:::-;31655:87;31647:96;;;31403:348;;;;:::o;34395:578::-;34554:4;34527:31;;:23;34542:7;34527:14;:23::i;:::-;:31;;;34519:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34637:1;34623:16;;:2;:16;;;;34615:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34693:39;34714:4;34720:2;34724:7;34693:20;:39::i;:::-;34797:29;34814:1;34818:7;34797:8;:29::i;:::-;34858:1;34839:9;:15;34849:4;34839:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34887:1;34870:9;:13;34880:2;34870:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34918:2;34899:7;:16;34907:7;34899:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34957:7;34953:2;34938:27;;34947:4;34938:27;;;;;;;;;;;;34395:578;;;:::o;38837:173::-;38893:16;38912:6;;;;;;;;;;;38893:25;;38938:8;38929:6;;:17;;;;;;;;;;;;;;;;;;38993:8;38962:40;;38983:8;38962:40;;;;;;;;;;;;38882:128;38837:173;:::o;32093:110::-;32169:26;32179:2;32183:7;32169:26;;;;;;;;;;;;:9;:26::i;:::-;32093:110;;:::o;2507:127::-;2614:1;2596:7;:14;;;:19;;;;;;;;;;;2507:127;:::o;20071:98::-;20129:7;20160:1;20156;:5;;;;:::i;:::-;20149:12;;20071:98;;;;:::o;30481:315::-;30638:28;30648:4;30654:2;30658:7;30638:9;:28::i;:::-;30685:48;30708:4;30714:2;30718:7;30727:5;30685:22;:48::i;:::-;30677:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30481:315;;;;:::o;42293:108::-;42353:13;42386:7;42379:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42293:108;:::o;215:723::-;271:13;501:1;492:5;:10;488:53;;;519:10;;;;;;;;;;;;;;;;;;;;;488:53;551:12;566:5;551:20;;582:14;607:78;622:1;614:4;:9;607:78;;640:8;;;;;:::i;:::-;;;;671:2;663:10;;;;;:::i;:::-;;;607:78;;;695:19;727:6;717:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;695:39;;745:154;761:1;752:5;:10;745:154;;789:1;779:11;;;;;:::i;:::-;;;856:2;848:5;:10;;;;:::i;:::-;835:2;:24;;;;:::i;:::-;822:39;;805:6;812;805:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;885:2;876:11;;;;;:::i;:::-;;;745:154;;;923:6;909:21;;;;;215:723;;;;:::o;37201:126::-;;;;:::o;32430:321::-;32560:18;32566:2;32570:7;32560:5;:18::i;:::-;32611:54;32642:1;32646:2;32650:7;32659:5;32611:22;:54::i;:::-;32589:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32430:321;;;:::o;35830:799::-;35985:4;36006:15;:2;:13;;;:15::i;:::-;36002:620;;;36058:2;36042:36;;;36079:12;:10;:12::i;:::-;36093:4;36099:7;36108:5;36042:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36038:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36301:1;36284:6;:13;:18;36280:272;;;36327:60;;;;;;;;;;:::i;:::-;;;;;;;;36280:272;36502:6;36496:13;36487:6;36483:2;36479:15;36472:38;36038:529;36175:41;;;36165:51;;;:6;:51;;;;36158:58;;;;;36002:620;36606:4;36599:11;;35830:799;;;;;;;:::o;33087:382::-;33181:1;33167:16;;:2;:16;;;;33159:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33240:16;33248:7;33240;:16::i;:::-;33239:17;33231:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33302:45;33331:1;33335:2;33339:7;33302:20;:45::i;:::-;33377:1;33360:9;:13;33370:2;33360:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33408:2;33389:7;:16;33397:7;33389:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33453:7;33449:2;33428:33;;33445:1;33428:33;;;;;;;;;;;;33087:382;;:::o;3835:387::-;3895:4;4103:12;4170:7;4158:20;4150:28;;4213:1;4206:4;:8;4199:15;;;3835:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5289:474;;;;;:::o;5769:327::-;5827:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:119;;;5882:79;;:::i;:::-;5844:119;6002:1;6027:52;6071:7;6062:6;6051:9;6047:22;6027:52;:::i;:::-;6017:62;;5973:116;5769:327;;;;:::o;6102:349::-;6171:6;6220:2;6208:9;6199:7;6195:23;6191:32;6188:119;;;6226:79;;:::i;:::-;6188:119;6346:1;6371:63;6426:7;6417:6;6406:9;6402:22;6371:63;:::i;:::-;6361:73;;6317:127;6102:349;;;;:::o;6457:509::-;6526:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:119;;;6581:79;;:::i;:::-;6543:119;6729:1;6718:9;6714:17;6701:31;6759:18;6751:6;6748:30;6745:117;;;6781:79;;:::i;:::-;6745:117;6886:63;6941:7;6932:6;6921:9;6917:22;6886:63;:::i;:::-;6876:73;;6672:287;6457:509;;;;:::o;6972:329::-;7031:6;7080:2;7068:9;7059:7;7055:23;7051:32;7048:119;;;7086:79;;:::i;:::-;7048:119;7206:1;7231:53;7276:7;7267:6;7256:9;7252:22;7231:53;:::i;:::-;7221:63;;7177:117;6972:329;;;;:::o;7307:351::-;7377:6;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:64;7633:7;7624:6;7613:9;7609:22;7577:64;:::i;:::-;7567:74;;7523:128;7307:351;;;;:::o;7664:474::-;7732:6;7740;7789:2;7777:9;7768:7;7764:23;7760:32;7757:119;;;7795:79;;:::i;:::-;7757:119;7915:1;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7886:117;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;7664:474;;;;;:::o;8144:118::-;8231:24;8249:5;8231:24;:::i;:::-;8226:3;8219:37;8144:118;;:::o;8268:109::-;8349:21;8364:5;8349:21;:::i;:::-;8344:3;8337:34;8268:109;;:::o;8383:360::-;8469:3;8497:38;8529:5;8497:38;:::i;:::-;8551:70;8614:6;8609:3;8551:70;:::i;:::-;8544:77;;8630:52;8675:6;8670:3;8663:4;8656:5;8652:16;8630:52;:::i;:::-;8707:29;8729:6;8707:29;:::i;:::-;8702:3;8698:39;8691:46;;8473:270;8383:360;;;;:::o;8749:163::-;8852:53;8899:5;8852:53;:::i;:::-;8847:3;8840:66;8749:163;;:::o;8918:364::-;9006:3;9034:39;9067:5;9034:39;:::i;:::-;9089:71;9153:6;9148:3;9089:71;:::i;:::-;9082:78;;9169:52;9214:6;9209:3;9202:4;9195:5;9191:16;9169:52;:::i;:::-;9246:29;9268:6;9246:29;:::i;:::-;9241:3;9237:39;9230:46;;9010:272;8918:364;;;;:::o;9288:377::-;9394:3;9422:39;9455:5;9422:39;:::i;:::-;9477:89;9559:6;9554:3;9477:89;:::i;:::-;9470:96;;9575:52;9620:6;9615:3;9608:4;9601:5;9597:16;9575:52;:::i;:::-;9652:6;9647:3;9643:16;9636:23;;9398:267;9288:377;;;;:::o;9695:845::-;9798:3;9835:5;9829:12;9864:36;9890:9;9864:36;:::i;:::-;9916:89;9998:6;9993:3;9916:89;:::i;:::-;9909:96;;10036:1;10025:9;10021:17;10052:1;10047:137;;;;10198:1;10193:341;;;;10014:520;;10047:137;10131:4;10127:9;10116;10112:25;10107:3;10100:38;10167:6;10162:3;10158:16;10151:23;;10047:137;;10193:341;10260:38;10292:5;10260:38;:::i;:::-;10320:1;10334:154;10348:6;10345:1;10342:13;10334:154;;;10422:7;10416:14;10412:1;10407:3;10403:11;10396:35;10472:1;10463:7;10459:15;10448:26;;10370:4;10367:1;10363:12;10358:17;;10334:154;;;10517:6;10512:3;10508:16;10501:23;;10200:334;;10014:520;;9802:738;;9695:845;;;;:::o;10546:366::-;10688:3;10709:67;10773:2;10768:3;10709:67;:::i;:::-;10702:74;;10785:93;10874:3;10785:93;:::i;:::-;10903:2;10898:3;10894:12;10887:19;;10546:366;;;:::o;10918:::-;11060:3;11081:67;11145:2;11140:3;11081:67;:::i;:::-;11074:74;;11157:93;11246:3;11157:93;:::i;:::-;11275:2;11270:3;11266:12;11259:19;;10918:366;;;:::o;11290:::-;11432:3;11453:67;11517:2;11512:3;11453:67;:::i;:::-;11446:74;;11529:93;11618:3;11529:93;:::i;:::-;11647:2;11642:3;11638:12;11631:19;;11290:366;;;:::o;11662:::-;11804:3;11825:67;11889:2;11884:3;11825:67;:::i;:::-;11818:74;;11901:93;11990:3;11901:93;:::i;:::-;12019:2;12014:3;12010:12;12003:19;;11662:366;;;:::o;12034:::-;12176:3;12197:67;12261:2;12256:3;12197:67;:::i;:::-;12190:74;;12273:93;12362:3;12273:93;:::i;:::-;12391:2;12386:3;12382:12;12375:19;;12034:366;;;:::o;12406:::-;12548:3;12569:67;12633:2;12628:3;12569:67;:::i;:::-;12562:74;;12645:93;12734:3;12645:93;:::i;:::-;12763:2;12758:3;12754:12;12747:19;;12406:366;;;:::o;12778:::-;12920:3;12941:67;13005:2;13000:3;12941:67;:::i;:::-;12934:74;;13017:93;13106:3;13017:93;:::i;:::-;13135:2;13130:3;13126:12;13119:19;;12778:366;;;:::o;13150:::-;13292:3;13313:67;13377:2;13372:3;13313:67;:::i;:::-;13306:74;;13389:93;13478:3;13389:93;:::i;:::-;13507:2;13502:3;13498:12;13491:19;;13150:366;;;:::o;13522:::-;13664:3;13685:67;13749:2;13744:3;13685:67;:::i;:::-;13678:74;;13761:93;13850:3;13761:93;:::i;:::-;13879:2;13874:3;13870:12;13863:19;;13522:366;;;:::o;13894:::-;14036:3;14057:67;14121:2;14116:3;14057:67;:::i;:::-;14050:74;;14133:93;14222:3;14133:93;:::i;:::-;14251:2;14246:3;14242:12;14235:19;;13894:366;;;:::o;14266:::-;14408:3;14429:67;14493:2;14488:3;14429:67;:::i;:::-;14422:74;;14505:93;14594:3;14505:93;:::i;:::-;14623:2;14618:3;14614:12;14607:19;;14266:366;;;:::o;14638:::-;14780:3;14801:67;14865:2;14860:3;14801:67;:::i;:::-;14794:74;;14877:93;14966:3;14877:93;:::i;:::-;14995:2;14990:3;14986:12;14979:19;;14638:366;;;:::o;15010:::-;15152:3;15173:67;15237:2;15232:3;15173:67;:::i;:::-;15166:74;;15249:93;15338:3;15249:93;:::i;:::-;15367:2;15362:3;15358:12;15351:19;;15010:366;;;:::o;15382:::-;15524:3;15545:67;15609:2;15604:3;15545:67;:::i;:::-;15538:74;;15621:93;15710:3;15621:93;:::i;:::-;15739:2;15734:3;15730:12;15723:19;;15382:366;;;:::o;15754:::-;15896:3;15917:67;15981:2;15976:3;15917:67;:::i;:::-;15910:74;;15993:93;16082:3;15993:93;:::i;:::-;16111:2;16106:3;16102:12;16095:19;;15754:366;;;:::o;16126:::-;16268:3;16289:67;16353:2;16348:3;16289:67;:::i;:::-;16282:74;;16365:93;16454:3;16365:93;:::i;:::-;16483:2;16478:3;16474:12;16467:19;;16126:366;;;:::o;16498:::-;16640:3;16661:67;16725:2;16720:3;16661:67;:::i;:::-;16654:74;;16737:93;16826:3;16737:93;:::i;:::-;16855:2;16850:3;16846:12;16839:19;;16498:366;;;:::o;16870:::-;17012:3;17033:67;17097:2;17092:3;17033:67;:::i;:::-;17026:74;;17109:93;17198:3;17109:93;:::i;:::-;17227:2;17222:3;17218:12;17211:19;;16870:366;;;:::o;17242:::-;17384:3;17405:67;17469:2;17464:3;17405:67;:::i;:::-;17398:74;;17481:93;17570:3;17481:93;:::i;:::-;17599:2;17594:3;17590:12;17583:19;;17242:366;;;:::o;17614:::-;17756:3;17777:67;17841:2;17836:3;17777:67;:::i;:::-;17770:74;;17853:93;17942:3;17853:93;:::i;:::-;17971:2;17966:3;17962:12;17955:19;;17614:366;;;:::o;17986:::-;18128:3;18149:67;18213:2;18208:3;18149:67;:::i;:::-;18142:74;;18225:93;18314:3;18225:93;:::i;:::-;18343:2;18338:3;18334:12;18327:19;;17986:366;;;:::o;18358:118::-;18445:24;18463:5;18445:24;:::i;:::-;18440:3;18433:37;18358:118;;:::o;18482:589::-;18707:3;18729:95;18820:3;18811:6;18729:95;:::i;:::-;18722:102;;18841:95;18932:3;18923:6;18841:95;:::i;:::-;18834:102;;18953:92;19041:3;19032:6;18953:92;:::i;:::-;18946:99;;19062:3;19055:10;;18482:589;;;;;;:::o;19077:222::-;19170:4;19208:2;19197:9;19193:18;19185:26;;19221:71;19289:1;19278:9;19274:17;19265:6;19221:71;:::i;:::-;19077:222;;;;:::o;19305:640::-;19500:4;19538:3;19527:9;19523:19;19515:27;;19552:71;19620:1;19609:9;19605:17;19596:6;19552:71;:::i;:::-;19633:72;19701:2;19690:9;19686:18;19677:6;19633:72;:::i;:::-;19715;19783:2;19772:9;19768:18;19759:6;19715:72;:::i;:::-;19834:9;19828:4;19824:20;19819:2;19808:9;19804:18;19797:48;19862:76;19933:4;19924:6;19862:76;:::i;:::-;19854:84;;19305:640;;;;;;;:::o;19951:210::-;20038:4;20076:2;20065:9;20061:18;20053:26;;20089:65;20151:1;20140:9;20136:17;20127:6;20089:65;:::i;:::-;19951:210;;;;:::o;20167:254::-;20276:4;20314:2;20303:9;20299:18;20291:26;;20327:87;20411:1;20400:9;20396:17;20387:6;20327:87;:::i;:::-;20167:254;;;;:::o;20427:313::-;20540:4;20578:2;20567:9;20563:18;20555:26;;20627:9;20621:4;20617:20;20613:1;20602:9;20598:17;20591:47;20655:78;20728:4;20719:6;20655:78;:::i;:::-;20647:86;;20427:313;;;;:::o;20746:419::-;20912:4;20950:2;20939:9;20935:18;20927:26;;20999:9;20993:4;20989:20;20985:1;20974:9;20970:17;20963:47;21027:131;21153:4;21027:131;:::i;:::-;21019:139;;20746:419;;;:::o;21171:::-;21337:4;21375:2;21364:9;21360:18;21352:26;;21424:9;21418:4;21414:20;21410:1;21399:9;21395:17;21388:47;21452:131;21578:4;21452:131;:::i;:::-;21444:139;;21171:419;;;:::o;21596:::-;21762:4;21800:2;21789:9;21785:18;21777:26;;21849:9;21843:4;21839:20;21835:1;21824:9;21820:17;21813:47;21877:131;22003:4;21877:131;:::i;:::-;21869:139;;21596:419;;;:::o;22021:::-;22187:4;22225:2;22214:9;22210:18;22202:26;;22274:9;22268:4;22264:20;22260:1;22249:9;22245:17;22238:47;22302:131;22428:4;22302:131;:::i;:::-;22294:139;;22021:419;;;:::o;22446:::-;22612:4;22650:2;22639:9;22635:18;22627:26;;22699:9;22693:4;22689:20;22685:1;22674:9;22670:17;22663:47;22727:131;22853:4;22727:131;:::i;:::-;22719:139;;22446:419;;;:::o;22871:::-;23037:4;23075:2;23064:9;23060:18;23052:26;;23124:9;23118:4;23114:20;23110:1;23099:9;23095:17;23088:47;23152:131;23278:4;23152:131;:::i;:::-;23144:139;;22871:419;;;:::o;23296:::-;23462:4;23500:2;23489:9;23485:18;23477:26;;23549:9;23543:4;23539:20;23535:1;23524:9;23520:17;23513:47;23577:131;23703:4;23577:131;:::i;:::-;23569:139;;23296:419;;;:::o;23721:::-;23887:4;23925:2;23914:9;23910:18;23902:26;;23974:9;23968:4;23964:20;23960:1;23949:9;23945:17;23938:47;24002:131;24128:4;24002:131;:::i;:::-;23994:139;;23721:419;;;:::o;24146:::-;24312:4;24350:2;24339:9;24335:18;24327:26;;24399:9;24393:4;24389:20;24385:1;24374:9;24370:17;24363:47;24427:131;24553:4;24427:131;:::i;:::-;24419:139;;24146:419;;;:::o;24571:::-;24737:4;24775:2;24764:9;24760:18;24752:26;;24824:9;24818:4;24814:20;24810:1;24799:9;24795:17;24788:47;24852:131;24978:4;24852:131;:::i;:::-;24844:139;;24571:419;;;:::o;24996:::-;25162:4;25200:2;25189:9;25185:18;25177:26;;25249:9;25243:4;25239:20;25235:1;25224:9;25220:17;25213:47;25277:131;25403:4;25277:131;:::i;:::-;25269:139;;24996:419;;;:::o;25421:::-;25587:4;25625:2;25614:9;25610:18;25602:26;;25674:9;25668:4;25664:20;25660:1;25649:9;25645:17;25638:47;25702:131;25828:4;25702:131;:::i;:::-;25694:139;;25421:419;;;:::o;25846:::-;26012:4;26050:2;26039:9;26035:18;26027:26;;26099:9;26093:4;26089:20;26085:1;26074:9;26070:17;26063:47;26127:131;26253:4;26127:131;:::i;:::-;26119:139;;25846:419;;;:::o;26271:::-;26437:4;26475:2;26464:9;26460:18;26452:26;;26524:9;26518:4;26514:20;26510:1;26499:9;26495:17;26488:47;26552:131;26678:4;26552:131;:::i;:::-;26544:139;;26271:419;;;:::o;26696:::-;26862:4;26900:2;26889:9;26885:18;26877:26;;26949:9;26943:4;26939:20;26935:1;26924:9;26920:17;26913:47;26977:131;27103:4;26977:131;:::i;:::-;26969:139;;26696:419;;;:::o;27121:::-;27287:4;27325:2;27314:9;27310:18;27302:26;;27374:9;27368:4;27364:20;27360:1;27349:9;27345:17;27338:47;27402:131;27528:4;27402:131;:::i;:::-;27394:139;;27121:419;;;:::o;27546:::-;27712:4;27750:2;27739:9;27735:18;27727:26;;27799:9;27793:4;27789:20;27785:1;27774:9;27770:17;27763:47;27827:131;27953:4;27827:131;:::i;:::-;27819:139;;27546:419;;;:::o;27971:::-;28137:4;28175:2;28164:9;28160:18;28152:26;;28224:9;28218:4;28214:20;28210:1;28199:9;28195:17;28188:47;28252:131;28378:4;28252:131;:::i;:::-;28244:139;;27971:419;;;:::o;28396:::-;28562:4;28600:2;28589:9;28585:18;28577:26;;28649:9;28643:4;28639:20;28635:1;28624:9;28620:17;28613:47;28677:131;28803:4;28677:131;:::i;:::-;28669:139;;28396:419;;;:::o;28821:::-;28987:4;29025:2;29014:9;29010:18;29002:26;;29074:9;29068:4;29064:20;29060:1;29049:9;29045:17;29038:47;29102:131;29228:4;29102:131;:::i;:::-;29094:139;;28821:419;;;:::o;29246:::-;29412:4;29450:2;29439:9;29435:18;29427:26;;29499:9;29493:4;29489:20;29485:1;29474:9;29470:17;29463:47;29527:131;29653:4;29527:131;:::i;:::-;29519:139;;29246:419;;;:::o;29671:222::-;29764:4;29802:2;29791:9;29787:18;29779:26;;29815:71;29883:1;29872:9;29868:17;29859:6;29815:71;:::i;:::-;29671:222;;;;:::o;29899:129::-;29933:6;29960:20;;:::i;:::-;29950:30;;29989:33;30017:4;30009:6;29989:33;:::i;:::-;29899:129;;;:::o;30034:75::-;30067:6;30100:2;30094:9;30084:19;;30034:75;:::o;30115:307::-;30176:4;30266:18;30258:6;30255:30;30252:56;;;30288:18;;:::i;:::-;30252:56;30326:29;30348:6;30326:29;:::i;:::-;30318:37;;30410:4;30404;30400:15;30392:23;;30115:307;;;:::o;30428:308::-;30490:4;30580:18;30572:6;30569:30;30566:56;;;30602:18;;:::i;:::-;30566:56;30640:29;30662:6;30640:29;:::i;:::-;30632:37;;30724:4;30718;30714:15;30706:23;;30428:308;;;:::o;30742:141::-;30791:4;30814:3;30806:11;;30837:3;30834:1;30827:14;30871:4;30868:1;30858:18;30850:26;;30742:141;;;:::o;30889:98::-;30940:6;30974:5;30968:12;30958:22;;30889:98;;;:::o;30993:99::-;31045:6;31079:5;31073:12;31063:22;;30993:99;;;:::o;31098:168::-;31181:11;31215:6;31210:3;31203:19;31255:4;31250:3;31246:14;31231:29;;31098:168;;;;:::o;31272:169::-;31356:11;31390:6;31385:3;31378:19;31430:4;31425:3;31421:14;31406:29;;31272:169;;;;:::o;31447:148::-;31549:11;31586:3;31571:18;;31447:148;;;;:::o;31601:305::-;31641:3;31660:20;31678:1;31660:20;:::i;:::-;31655:25;;31694:20;31712:1;31694:20;:::i;:::-;31689:25;;31848:1;31780:66;31776:74;31773:1;31770:81;31767:107;;;31854:18;;:::i;:::-;31767:107;31898:1;31895;31891:9;31884:16;;31601:305;;;;:::o;31912:185::-;31952:1;31969:20;31987:1;31969:20;:::i;:::-;31964:25;;32003:20;32021:1;32003:20;:::i;:::-;31998:25;;32042:1;32032:35;;32047:18;;:::i;:::-;32032:35;32089:1;32086;32082:9;32077:14;;31912:185;;;;:::o;32103:191::-;32143:4;32163:20;32181:1;32163:20;:::i;:::-;32158:25;;32197:20;32215:1;32197:20;:::i;:::-;32192:25;;32236:1;32233;32230:8;32227:34;;;32241:18;;:::i;:::-;32227:34;32286:1;32283;32279:9;32271:17;;32103:191;;;;:::o;32300:96::-;32337:7;32366:24;32384:5;32366:24;:::i;:::-;32355:35;;32300:96;;;:::o;32402:90::-;32436:7;32479:5;32472:13;32465:21;32454:32;;32402:90;;;:::o;32498:149::-;32534:7;32574:66;32567:5;32563:78;32552:89;;32498:149;;;:::o;32653:126::-;32690:7;32730:42;32723:5;32719:54;32708:65;;32653:126;;;:::o;32785:77::-;32822:7;32851:5;32840:16;;32785:77;;;:::o;32868:142::-;32934:9;32967:37;32998:5;32967:37;:::i;:::-;32954:50;;32868:142;;;:::o;33016:126::-;33066:9;33099:37;33130:5;33099:37;:::i;:::-;33086:50;;33016:126;;;:::o;33148:113::-;33198:9;33231:24;33249:5;33231:24;:::i;:::-;33218:37;;33148:113;;;:::o;33267:154::-;33351:6;33346:3;33341;33328:30;33413:1;33404:6;33399:3;33395:16;33388:27;33267:154;;;:::o;33427:307::-;33495:1;33505:113;33519:6;33516:1;33513:13;33505:113;;;33604:1;33599:3;33595:11;33589:18;33585:1;33580:3;33576:11;33569:39;33541:2;33538:1;33534:10;33529:15;;33505:113;;;33636:6;33633:1;33630:13;33627:101;;;33716:1;33707:6;33702:3;33698:16;33691:27;33627:101;33476:258;33427:307;;;:::o;33740:320::-;33784:6;33821:1;33815:4;33811:12;33801:22;;33868:1;33862:4;33858:12;33889:18;33879:81;;33945:4;33937:6;33933:17;33923:27;;33879:81;34007:2;33999:6;33996:14;33976:18;33973:38;33970:84;;;34026:18;;:::i;:::-;33970:84;33791:269;33740:320;;;:::o;34066:281::-;34149:27;34171:4;34149:27;:::i;:::-;34141:6;34137:40;34279:6;34267:10;34264:22;34243:18;34231:10;34228:34;34225:62;34222:88;;;34290:18;;:::i;:::-;34222:88;34330:10;34326:2;34319:22;34109:238;34066:281;;:::o;34353:233::-;34392:3;34415:24;34433:5;34415:24;:::i;:::-;34406:33;;34461:66;34454:5;34451:77;34448:103;;;34531:18;;:::i;:::-;34448:103;34578:1;34571:5;34567:13;34560:20;;34353:233;;;:::o;34592:176::-;34624:1;34641:20;34659:1;34641:20;:::i;:::-;34636:25;;34675:20;34693:1;34675:20;:::i;:::-;34670:25;;34714:1;34704:35;;34719:18;;:::i;:::-;34704:35;34760:1;34757;34753:9;34748:14;;34592:176;;;;:::o;34774:180::-;34822:77;34819:1;34812:88;34919:4;34916:1;34909:15;34943:4;34940:1;34933:15;34960:180;35008:77;35005:1;34998:88;35105:4;35102:1;35095:15;35129:4;35126:1;35119:15;35146:180;35194:77;35191:1;35184:88;35291:4;35288:1;35281:15;35315:4;35312:1;35305:15;35332:180;35380:77;35377:1;35370:88;35477:4;35474:1;35467:15;35501:4;35498:1;35491:15;35518:180;35566:77;35563:1;35556:88;35663:4;35660:1;35653:15;35687:4;35684:1;35677:15;35704:117;35813:1;35810;35803:12;35827:117;35936:1;35933;35926:12;35950:117;36059:1;36056;36049:12;36073:117;36182:1;36179;36172:12;36196:102;36237:6;36288:2;36284:7;36279:2;36272:5;36268:14;36264:28;36254:38;;36196:102;;;:::o;36304:237::-;36444:34;36440:1;36432:6;36428:14;36421:58;36513:20;36508:2;36500:6;36496:15;36489:45;36304:237;:::o;36547:225::-;36687:34;36683:1;36675:6;36671:14;36664:58;36756:8;36751:2;36743:6;36739:15;36732:33;36547:225;:::o;36778:178::-;36918:30;36914:1;36906:6;36902:14;36895:54;36778:178;:::o;36962:173::-;37102:25;37098:1;37090:6;37086:14;37079:49;36962:173;:::o;37141:223::-;37281:34;37277:1;37269:6;37265:14;37258:58;37350:6;37345:2;37337:6;37333:15;37326:31;37141:223;:::o;37370:175::-;37510:27;37506:1;37498:6;37494:14;37487:51;37370:175;:::o;37551:178::-;37691:30;37687:1;37679:6;37675:14;37668:54;37551:178;:::o;37735:233::-;37875:34;37871:1;37863:6;37859:14;37852:58;37944:16;37939:2;37931:6;37927:15;37920:41;37735:233;:::o;37974:231::-;38114:34;38110:1;38102:6;38098:14;38091:58;38183:14;38178:2;38170:6;38166:15;38159:39;37974:231;:::o;38211:243::-;38351:34;38347:1;38339:6;38335:14;38328:58;38420:26;38415:2;38407:6;38403:15;38396:51;38211:243;:::o;38460:229::-;38600:34;38596:1;38588:6;38584:14;38577:58;38669:12;38664:2;38656:6;38652:15;38645:37;38460:229;:::o;38695:228::-;38835:34;38831:1;38823:6;38819:14;38812:58;38904:11;38899:2;38891:6;38887:15;38880:36;38695:228;:::o;38929:182::-;39069:34;39065:1;39057:6;39053:14;39046:58;38929:182;:::o;39117:231::-;39257:34;39253:1;39245:6;39241:14;39234:58;39326:14;39321:2;39313:6;39309:15;39302:39;39117:231;:::o;39354:182::-;39494:34;39490:1;39482:6;39478:14;39471:58;39354:182;:::o;39542:228::-;39682:34;39678:1;39670:6;39666:14;39659:58;39751:11;39746:2;39738:6;39734:15;39727:36;39542:228;:::o;39776:234::-;39916:34;39912:1;39904:6;39900:14;39893:58;39985:17;39980:2;39972:6;39968:15;39961:42;39776:234;:::o;40016:179::-;40156:31;40152:1;40144:6;40140:14;40133:55;40016:179;:::o;40201:220::-;40341:34;40337:1;40329:6;40325:14;40318:58;40410:3;40405:2;40397:6;40393:15;40386:28;40201:220;:::o;40427:177::-;40567:29;40563:1;40555:6;40551:14;40544:53;40427:177;:::o;40610:236::-;40750:34;40746:1;40738:6;40734:14;40727:58;40819:19;40814:2;40806:6;40802:15;40795:44;40610:236;:::o;40852:122::-;40925:24;40943:5;40925:24;:::i;:::-;40918:5;40915:35;40905:63;;40964:1;40961;40954:12;40905:63;40852:122;:::o;40980:116::-;41050:21;41065:5;41050:21;:::i;:::-;41043:5;41040:32;41030:60;;41086:1;41083;41076:12;41030:60;40980:116;:::o;41102:120::-;41174:23;41191:5;41174:23;:::i;:::-;41167:5;41164:34;41154:62;;41212:1;41209;41202:12;41154:62;41102:120;:::o;41228:122::-;41301:24;41319:5;41301:24;:::i;:::-;41294:5;41291:35;41281:63;;41340:1;41337;41330:12;41281:63;41228:122;:::o

Swarm Source

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