ETH Price: $2,989.81 (+3.71%)
Gas: 2 Gwei

Token

Bloodshed Bears TreeHouse (BSBTH)
 

Overview

Max Total Supply

7,000 BSBTH

Holders

568

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
soggygravy.eth
Balance
9 BSBTH
0xe5fd5ec4695b93d7e43f5d96657a535e0ff499bd
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BloodShedBearsTreeHouse

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-26
*/

// SPDX-License-Identifier: GPL-3.0

/*
 ______     __                            __           __                      __
|_   _ \   [  |                          |  ]         [  |                    |  ]
  | |_) |   | |    .--.     .--.     .--.| |   .--.    | |--.    .---.    .--.| |
  |  __'.   | |  / .'`\ \ / .'`\ \ / /'`\' |  ( (`\]   | .-. |  / /__\\ / /'`\' |
 _| |__) |  | |  | \__. | | \__. | | \__/  |   `'.'.   | | | |  | \__., | \__/  |
|_______/  [___]  '.__.'   '.__.'   '.__.;__] [\__) ) [___]|__]  '.__.'  '.__.;__]
                      ________
                      ___  __ )_____ ______ _________________
                      __  __  |_  _ \_  __ `/__  ___/__  ___/
                      _  /_/ / /  __// /_/ / _  /    _(__  )
                      /_____/  \___/ \__,_/  /_/     /____/
*/

pragma solidity ^0.8.0;


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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;


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

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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


pragma solidity ^0.8.0;

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

abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    string private _name;
    string private _symbol;
    address[] internal _owners;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
        interfaceId == type(IERC721).interfaceId ||
        interfaceId == type(IERC721Metadata).interfaceId ||
        super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        uint count = 0;
        uint length = _owners.length;
        for( uint i = 0; i < length; ++i ){
            if( owner == _owners[i] ){
                ++count;
            }
        }
        delete length;
        return count;
    }
    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;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721P.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);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }
    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);
    }
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    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);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    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);
    }
    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");
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721P.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    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"
        );
    }
    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);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721P.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721P.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);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721P.ownerOf(tokenId), to, tokenId);
    }
    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;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.10;

abstract contract ERC721Enum is ERC721P, IERC721Enumerable {
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) {
        require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint count;
        for( uint i; i < _owners.length; ++i ){
            if( owner == _owners[i] ){
                if( count == index )
                    return i;
                else
                    ++count;
            }
        }
        require(false, "ERC721Enum: owner ioob");
    }
    function tokensOfOwner(address owner) public view returns (uint256[] memory) {
        require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokenIds;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob");
        return index;
    }
}

pragma solidity ^0.8.0;

interface LinkTokenInterface {
    function allowance(address owner, address spender) external view returns (uint256 remaining);

    function approve(address spender, uint256 value) external returns (bool success);

    function balanceOf(address owner) external view returns (uint256 balance);

    function decimals() external view returns (uint8 decimalPlaces);

    function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);

    function increaseApproval(address spender, uint256 subtractedValue) external;

    function name() external view returns (string memory tokenName);

    function symbol() external view returns (string memory tokenSymbol);

    function totalSupply() external view returns (uint256 totalTokensIssued);

    function transfer(address to, uint256 value) external returns (bool success);

    function transferAndCall(
        address to,
        uint256 value,
        bytes calldata data
    ) external returns (bool success);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool success);
}

pragma solidity ^0.8.0;

contract VRFRequestIDBase {
    /**
     * @notice returns the seed which is actually input to the VRF coordinator
   *
   * @dev To prevent repetition of VRF output due to repetition of the
   * @dev user-supplied seed, that seed is combined in a hash with the
   * @dev user-specific nonce, and the address of the consuming contract. The
   * @dev risk of repetition is mostly mitigated by inclusion of a blockhash in
   * @dev the final seed, but the nonce does protect against repetition in
   * @dev requests which are included in a single block.
   *
   * @param _userSeed VRF seed input provided by user
   * @param _requester Address of the requesting contract
   * @param _nonce User-specific nonce at the time of the request
   */
    function makeVRFInputSeed(
        bytes32 _keyHash,
        uint256 _userSeed,
        address _requester,
        uint256 _nonce
    ) internal pure returns (uint256) {
        return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce)));
    }

    /**
     * @notice Returns the id for this request
   * @param _keyHash The serviceAgreement ID to be used for this request
   * @param _vRFInputSeed The seed to be passed directly to the VRF
   * @return The id for this request
   *
   * @dev Note that _vRFInputSeed is not the seed passed by the consuming
   * @dev contract, but the one generated by makeVRFInputSeed
   */
    function makeRequestId(bytes32 _keyHash, uint256 _vRFInputSeed) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed));
    }
}

pragma solidity ^0.8.0;

/** ****************************************************************************
 * @notice Interface for contracts using VRF randomness
 * *****************************************************************************
 * @dev PURPOSE
 *
 * @dev Reggie the Random Oracle (not his real job) wants to provide randomness
 * @dev to Vera the verifier in such a way that Vera can be sure he's not
 * @dev making his output up to suit himself. Reggie provides Vera a public key
 * @dev to which he knows the secret key. Each time Vera provides a seed to
 * @dev Reggie, he gives back a value which is computed completely
 * @dev deterministically from the seed and the secret key.
 *
 * @dev Reggie provides a proof by which Vera can verify that the output was
 * @dev correctly computed once Reggie tells it to her, but without that proof,
 * @dev the output is indistinguishable to her from a uniform random sample
 * @dev from the output space.
 *
 * @dev The purpose of this contract is to make it easy for unrelated contracts
 * @dev to talk to Vera the verifier about the work Reggie is doing, to provide
 * @dev simple access to a verifiable source of randomness.
 * *****************************************************************************
 * @dev USAGE
 *
 * @dev Calling contracts must inherit from VRFConsumerBase, and can
 * @dev initialize VRFConsumerBase's attributes in their constructor as
 * @dev shown:
 *
 * @dev   contract VRFConsumer {
 * @dev     constructor(<other arguments>, address _vrfCoordinator, address _link)
 * @dev       VRFConsumerBase(_vrfCoordinator, _link) public {
 * @dev         <initialization with other arguments goes here>
 * @dev       }
 * @dev   }
 *
 * @dev The oracle will have given you an ID for the VRF keypair they have
 * @dev committed to (let's call it keyHash), and have told you the minimum LINK
 * @dev price for VRF service. Make sure your contract has sufficient LINK, and
 * @dev call requestRandomness(keyHash, fee, seed), where seed is the input you
 * @dev want to generate randomness from.
 *
 * @dev Once the VRFCoordinator has received and validated the oracle's response
 * @dev to your request, it will call your contract's fulfillRandomness method.
 *
 * @dev The randomness argument to fulfillRandomness is the actual random value
 * @dev generated from your seed.
 *
 * @dev The requestId argument is generated from the keyHash and the seed by
 * @dev makeRequestId(keyHash, seed). If your contract could have concurrent
 * @dev requests open, you can use the requestId to track which seed is
 * @dev associated with which randomness. See VRFRequestIDBase.sol for more
 * @dev details. (See "SECURITY CONSIDERATIONS" for principles to keep in mind,
 * @dev if your contract could have multiple requests in flight simultaneously.)
 *
 * @dev Colliding `requestId`s are cryptographically impossible as long as seeds
 * @dev differ. (Which is critical to making unpredictable randomness! See the
 * @dev next section.)
 *
 * *****************************************************************************
 * @dev SECURITY CONSIDERATIONS
 *
 * @dev A method with the ability to call your fulfillRandomness method directly
 * @dev could spoof a VRF response with any random value, so it's critical that
 * @dev it cannot be directly called by anything other than this base contract
 * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method).
 *
 * @dev For your users to trust that your contract's random behavior is free
 * @dev from malicious interference, it's best if you can write it so that all
 * @dev behaviors implied by a VRF response are executed *during* your
 * @dev fulfillRandomness method. If your contract must store the response (or
 * @dev anything derived from it) and use it later, you must ensure that any
 * @dev user-significant behavior which depends on that stored value cannot be
 * @dev manipulated by a subsequent VRF request.
 *
 * @dev Similarly, both miners and the VRF oracle itself have some influence
 * @dev over the order in which VRF responses appear on the blockchain, so if
 * @dev your contract could have multiple VRF requests in flight simultaneously,
 * @dev you must ensure that the order in which the VRF responses arrive cannot
 * @dev be used to manipulate your contract's user-significant behavior.
 *
 * @dev Since the ultimate input to the VRF is mixed with the block hash of the
 * @dev block in which the request is made, user-provided seeds have no impact
 * @dev on its economic security properties. They are only included for API
 * @dev compatability with previous versions of this contract.
 *
 * @dev Since the block hash of the block which contains the requestRandomness
 * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful
 * @dev miner could, in principle, fork the blockchain to evict the block
 * @dev containing the request, forcing the request to be included in a
 * @dev different block with a different hash, and therefore a different input
 * @dev to the VRF. However, such an attack would incur a substantial economic
 * @dev cost. This cost scales with the number of blocks the VRF oracle waits
 * @dev until it calls responds to a request.
 */
abstract contract VRFConsumerBase is VRFRequestIDBase {
    /**
     * @notice fulfillRandomness handles the VRF response. Your contract must
   * @notice implement it. See "SECURITY CONSIDERATIONS" above for important
   * @notice principles to keep in mind when implementing your fulfillRandomness
   * @notice method.
   *
   * @dev VRFConsumerBase expects its subcontracts to have a method with this
   * @dev signature, and will call it once it has verified the proof
   * @dev associated with the randomness. (It is triggered via a call to
   * @dev rawFulfillRandomness, below.)
   *
   * @param requestId The Id initially returned by requestRandomness
   * @param randomness the VRF output
   */
    function fulfillRandomness(bytes32 requestId, uint256 randomness) internal virtual;

    /**
     * @dev In order to keep backwards compatibility we have kept the user
   * seed field around. We remove the use of it because given that the blockhash
   * enters later, it overrides whatever randomness the used seed provides.
   * Given that it adds no security, and can easily lead to misunderstandings,
   * we have removed it from usage and can now provide a simpler API.
   */
    uint256 private constant USER_SEED_PLACEHOLDER = 0;

    /**
     * @notice requestRandomness initiates a request for VRF output given _seed
   *
   * @dev The fulfillRandomness method receives the output, once it's provided
   * @dev by the Oracle, and verified by the vrfCoordinator.
   *
   * @dev The _keyHash must already be registered with the VRFCoordinator, and
   * @dev the _fee must exceed the fee specified during registration of the
   * @dev _keyHash.
   *
   * @dev The _seed parameter is vestigial, and is kept only for API
   * @dev compatibility with older versions. It can't *hurt* to mix in some of
   * @dev your own randomness, here, but it's not necessary because the VRF
   * @dev oracle will mix the hash of the block containing your request into the
   * @dev VRF seed it ultimately uses.
   *
   * @param _keyHash ID of public key against which randomness is generated
   * @param _fee The amount of LINK to send with the request
   *
   * @return requestId unique ID for this request
   *
   * @dev The returned requestId can be used to distinguish responses to
   * @dev concurrent requests. It is passed as the first argument to
   * @dev fulfillRandomness.
   */
    function requestRandomness(bytes32 _keyHash, uint256 _fee) internal returns (bytes32 requestId) {
        LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, USER_SEED_PLACEHOLDER));
        // This is the seed passed to VRFCoordinator. The oracle will mix this with
        // the hash of the block containing this request to obtain the seed/input
        // which is finally passed to the VRF cryptographic machinery.
        uint256 vRFSeed = makeVRFInputSeed(_keyHash, USER_SEED_PLACEHOLDER, address(this), nonces[_keyHash]);
        // nonces[_keyHash] must stay in sync with
        // VRFCoordinator.nonces[_keyHash][this], which was incremented by the above
        // successful LINK.transferAndCall (in VRFCoordinator.randomnessRequest).
        // This provides protection against the user repeating their input seed,
        // which would result in a predictable/duplicate output, if multiple such
        // requests appeared in the same block.
        nonces[_keyHash] = nonces[_keyHash] + 1;
        return makeRequestId(_keyHash, vRFSeed);
    }

    LinkTokenInterface internal immutable LINK;
    address private immutable vrfCoordinator;

    // Nonces for each VRF key from which randomness has been requested.
    //
    // Must stay in sync with VRFCoordinator[_keyHash][this]
    mapping(bytes32 => uint256) /* keyHash */ /* nonce */
    private nonces;

    /**
     * @param _vrfCoordinator address of VRFCoordinator contract
   * @param _link address of LINK token contract
   *
   * @dev https://docs.chain.link/docs/link-token-contracts
   */
    constructor(address _vrfCoordinator, address _link) {
        vrfCoordinator = _vrfCoordinator;
        LINK = LinkTokenInterface(_link);
    }

    // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
    // proof. rawFulfillRandomness then calls fulfillRandomness, after validating
    // the origin of the call
    function rawFulfillRandomness(bytes32 requestId, uint256 randomness) external {
        require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill");
        fulfillRandomness(requestId, randomness);
    }
}

pragma solidity ^0.8.0;

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

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

    bool private _paused;

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

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

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

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

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

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

pragma solidity ^0.8.10;

interface IBloodTokenContract {
    function walletsBalances(address wallet) external view returns (uint256);
    function spend(address owner, uint256 amount) external;
}

interface IGameStats {
    function setHousesLevels(uint256[] calldata tokenIds_, uint256[] calldata levels_) external;
}

contract BloodShedBearsTreeHouse is ERC721Enum, VRFConsumerBase, Ownable, Pausable {
    using Strings for uint256;

    //sale settings
    uint256 constant private maxSupply = 7000;
    uint256 private teamReserveAvailableMints = 100;
    uint256 private cost = 50000 ether;
    address public bloodTokenContract = 0x0000000000000000000000000000000000000000;
    address public gameStatsContract = 0x0000000000000000000000000000000000000000;

    string private baseURI;

    uint256 private vrfFee;
    bytes32 private vrfKeyHash;

    uint256 private seed;

    event SeedFulfilled();

    constructor(
        string memory initBaseURI_,
        address vrfCoordinatorAddr_,
        address linkTokenAddr_,
        bytes32 vrfKeyHash_,
        uint256 fee_
    )
    VRFConsumerBase(vrfCoordinatorAddr_, linkTokenAddr_)
    ERC721P("Bloodshed Bears TreeHouse", "BSBTH") {
        setBaseURI(initBaseURI_);
        vrfKeyHash = vrfKeyHash_;
        vrfFee = fee_;
       pause();
    }

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

    function setBloodTokenContract(address contractAddress_) public onlyOwner {
        bloodTokenContract = contractAddress_;
    }

    function setGameStatsContract(address contractAddress_) public onlyOwner {
        gameStatsContract = contractAddress_;
    }

    function setCost(uint256 _newCost) external onlyOwner {
        cost = _newCost;
    }

    function mint(uint256 mintAmount_) external payable whenNotPaused {
        require(seed != 0, "Seed not set");

        uint256 totalSupply = totalSupply();

        require(totalSupply + mintAmount_ <= maxSupply, "TOO MANY");
        require(IBloodTokenContract(bloodTokenContract).walletsBalances(msg.sender) >= mintAmount_ * cost, "NOT ENOUGH");

        IBloodTokenContract(bloodTokenContract).spend(msg.sender, mintAmount_ * cost);

        uint256[] memory tokens = new uint256[](mintAmount_);
        uint256[] memory levels = new uint256[](mintAmount_);

        for (uint256 i = 0; i < mintAmount_; i++) {
            tokens[i] = totalSupply + i;
            levels[i] = generateHouseLevel(totalSupply + i) + 1;
            _safeMint(msg.sender, totalSupply + i);
        }

        IGameStats(gameStatsContract).setHousesLevels(tokens, levels);

        delete totalSupply;
        delete tokens;
        delete levels;
    }

    function tokenURI(uint256 _tokenId) external view virtual override returns (string memory) {
        require(_exists(_tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();

        return bytes(currentBaseURI).length > 0	? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : "";
    }

    function reserve(address _to, uint256 _reserveAmount) public onlyOwner {
        require(seed != 0, "Seed not set");
        uint256 supply = totalSupply();
        require(
            _reserveAmount > 0 && _reserveAmount <= teamReserveAvailableMints,
            "Not enough reserve left for team"
        );

        uint256[] memory tokens = new uint256[](_reserveAmount);
        uint256[] memory levels = new uint256[](_reserveAmount);
        for (uint256 i = 0; i < _reserveAmount; i++) {
            tokens[i] = supply + i;
            levels[i] = generateHouseLevel(supply + i) + 1;
            _safeMint(_to, supply + i);
        }

        IGameStats(gameStatsContract).setHousesLevels(tokens, levels);

        teamReserveAvailableMints -= _reserveAmount;

        delete supply;
        delete tokens;
        delete levels;
    }

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

    function isOwnerOfBatch(uint256[] calldata tokenIds_, address address_) external view returns (bool) {
        bool ownership = true;

        for (uint256 i = 0; i < tokenIds_.length; ++i) {
            ownership = ownership && (ownerOf(tokenIds_[i]) == address_);
        }

        return ownership;
    }

    function generateHouseLevel(uint256 tokenId) public view returns (uint256) {
        return uint256(keccak256(abi.encodePacked(seed, tokenId, tx.origin, blockhash(block.number - 1), block.timestamp))) % 3;
    }

    function initSeedGeneration() public onlyOwner returns (bytes32 requestId) {
        require(LINK.balanceOf(address(this)) >= vrfFee, "Not enough LINK");
        return requestRandomness(vrfKeyHash, vrfFee);
    }

    function fulfillRandomness(bytes32, uint256 randomness) internal override {
        seed = randomness;
        emit SeedFulfilled();
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"initBaseURI_","type":"string"},{"internalType":"address","name":"vrfCoordinatorAddr_","type":"address"},{"internalType":"address","name":"linkTokenAddr_","type":"address"},{"internalType":"bytes32","name":"vrfKeyHash_","type":"bytes32"},{"internalType":"uint256","name":"fee_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"SeedFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"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":"bloodTokenContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameStatsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"generateHouseLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initSeedGeneration","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","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":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"address","name":"address_","type":"address"}],"name":"isOwnerOfBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"uint256","name":"randomness","type":"uint256"}],"name":"rawFulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress_","type":"address"}],"name":"setBloodTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress_","type":"address"}],"name":"setGameStatsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526064600755690a968163f0a57b4000006008556000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a857600080fd5b5060405162005af938038062005af98339818101604052810190620000ce91906200088a565b83836040518060400160405280601981526020017f426c6f6f64736865642042656172732054726565486f757365000000000000008152506040518060400160405280600581526020017f425342544800000000000000000000000000000000000000000000000000000081525081600090805190602001906200015492919062000562565b5080600190805190602001906200016d92919062000562565b5050508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505050620001fa620001ee6200024f60201b60201c565b6200025760201b60201c565b6000600660146101000a81548160ff02191690831515021790555062000226856200031d60201b60201c565b81600d8190555080600c8190555062000244620003c860201b60201c565b505050505062000ab9565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200032d6200024f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003536200046960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a39062000992565b60405180910390fd5b80600b9080519060200190620003c492919062000562565b5050565b620003d86200024f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003fe6200046960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000457576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044e9062000992565b60405180910390fd5b620004676200049360201b60201c565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004a36200054b60201b60201c565b15620004e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004dd9062000a04565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620005326200024f60201b60201c565b60405162000541919062000a37565b60405180910390a1565b6000600660149054906101000a900460ff16905090565b828054620005709062000a83565b90600052602060002090601f016020900481019282620005945760008555620005e0565b82601f10620005af57805160ff1916838001178555620005e0565b82800160010185558215620005e0579182015b82811115620005df578251825591602001919060010190620005c2565b5b509050620005ef9190620005f3565b5090565b5b808211156200060e576000816000905550600101620005f4565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200067b8262000630565b810181811067ffffffffffffffff821117156200069d576200069c62000641565b5b80604052505050565b6000620006b262000612565b9050620006c0828262000670565b919050565b600067ffffffffffffffff821115620006e357620006e262000641565b5b620006ee8262000630565b9050602081019050919050565b60005b838110156200071b578082015181840152602081019050620006fe565b838111156200072b576000848401525b50505050565b6000620007486200074284620006c5565b620006a6565b9050828152602081018484840111156200076757620007666200062b565b5b62000774848285620006fb565b509392505050565b600082601f83011262000794576200079362000626565b5b8151620007a684826020860162000731565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007dc82620007af565b9050919050565b620007ee81620007cf565b8114620007fa57600080fd5b50565b6000815190506200080e81620007e3565b92915050565b6000819050919050565b620008298162000814565b81146200083557600080fd5b50565b60008151905062000849816200081e565b92915050565b6000819050919050565b62000864816200084f565b81146200087057600080fd5b50565b600081519050620008848162000859565b92915050565b600080600080600060a08688031215620008a957620008a86200061c565b5b600086015167ffffffffffffffff811115620008ca57620008c962000621565b5b620008d8888289016200077c565b9550506020620008eb88828901620007fd565b9450506040620008fe88828901620007fd565b9350506060620009118882890162000838565b9250506080620009248882890162000873565b9150509295509295909350565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200097a60208362000931565b9150620009878262000942565b602082019050919050565b60006020820190508181036000830152620009ad816200096b565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000620009ec60108362000931565b9150620009f982620009b4565b602082019050919050565b6000602082019050818103600083015262000a1f81620009dd565b9050919050565b62000a3181620007cf565b82525050565b600060208201905062000a4e600083018462000a26565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a9c57607f821691505b6020821081141562000ab35762000ab262000a54565b5b50919050565b60805160a05161500c62000aed600039600081816115510152612b68015260008181611d790152612b2c015261500c6000f3fe6080604052600436106102045760003560e01c806370a0823111610118578063a0712d68116100a0578063c5b4451a1161006f578063c5b4451a14610756578063c87b56dd14610781578063cc47a40b146107be578063e985e9c5146107e7578063f2fde38b1461082457610204565b8063a0712d68146106bd578063a22cb465146106d9578063ada670e714610702578063b88d4fde1461072d57610204565b80638462151c116100e75780638462151c146105d65780638da5cb5b1461061357806394985ddd1461063e57806395d89b41146106675780639b355c201461069257610204565b806370a0823114610542578063715018a61461057f5780637f9a62dc146105965780638456cb59146105bf57610204565b80633f4ba83a1161019b57806355f804b31161016a57806355f804b31461044b5780635c975abb146104745780635e0891421461049f5780636352211e146104c85780636f9bdf651461050557610204565b80633f4ba83a146103a557806342842e0e146103bc57806344a0d68a146103e55780634f6ccce71461040e57610204565b806318160ddd116101d757806318160ddd146102d757806322baa7391461030257806323b872dd1461033f5780632f745c591461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906133d9565b61084d565b60405161023d9190613421565b60405180910390f35b34801561025257600080fd5b5061025b6108c7565b60405161026891906134d5565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061352d565b610959565b6040516102a5919061359b565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906135e2565b6109de565b005b3480156102e357600080fd5b506102ec610af6565b6040516102f99190613631565b60405180910390f35b34801561030e57600080fd5b506103296004803603810190610324919061352d565b610b03565b6040516103369190613631565b60405180910390f35b34801561034b57600080fd5b506103666004803603810190610361919061364c565b610b59565b005b34801561037457600080fd5b5061038f600480360381019061038a91906135e2565b610bb9565b60405161039c9190613631565b60405180910390f35b3480156103b157600080fd5b506103ba610d02565b005b3480156103c857600080fd5b506103e360048036038101906103de919061364c565b610d88565b005b3480156103f157600080fd5b5061040c6004803603810190610407919061352d565b610da8565b005b34801561041a57600080fd5b506104356004803603810190610430919061352d565b610e2e565b6040516104429190613631565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d91906137d4565b610e81565b005b34801561048057600080fd5b50610489610f17565b6040516104969190613421565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061381d565b610f2e565b005b3480156104d457600080fd5b506104ef60048036038101906104ea919061352d565b610fee565b6040516104fc919061359b565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906138aa565b6110ab565b6040516105399190613421565b60405180910390f35b34801561054e57600080fd5b506105696004803603810190610564919061381d565b611138565b6040516105769190613631565b60405180910390f35b34801561058b57600080fd5b5061059461125e565b005b3480156105a257600080fd5b506105bd60048036038101906105b8919061381d565b6112e6565b005b3480156105cb57600080fd5b506105d46113a6565b005b3480156105e257600080fd5b506105fd60048036038101906105f8919061381d565b61142c565b60405161060a91906139c8565b60405180910390f35b34801561061f57600080fd5b50610628611525565b604051610635919061359b565b60405180910390f35b34801561064a57600080fd5b5061066560048036038101906106609190613a20565b61154f565b005b34801561067357600080fd5b5061067c6115eb565b60405161068991906134d5565b60405180910390f35b34801561069e57600080fd5b506106a761167d565b6040516106b4919061359b565b60405180910390f35b6106d760048036038101906106d2919061352d565b6116a3565b005b3480156106e557600080fd5b5061070060048036038101906106fb9190613a8c565b611aed565b005b34801561070e57600080fd5b50610717611c6e565b604051610724919061359b565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613b6d565b611c94565b005b34801561076257600080fd5b5061076b611cf6565b6040516107789190613bff565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a3919061352d565b611e65565b6040516107b591906134d5565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e091906135e2565b611f0c565b005b3480156107f357600080fd5b5061080e60048036038101906108099190613c1a565b61221e565b60405161081b9190613421565b60405180910390f35b34801561083057600080fd5b5061084b6004803603810190610846919061381d565b6122b2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c057506108bf826123aa565b5b9050919050565b6060600080546108d690613c89565b80601f016020809104026020016040519081016040528092919081815260200182805461090290613c89565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b60006109648261248c565b6109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90613d2d565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e982610fee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190613dbf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a79612514565b73ffffffffffffffffffffffffffffffffffffffff161480610aa85750610aa781610aa2612514565b61221e565b5b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90613e51565b60405180910390fd5b610af1838361251c565b505050565b6000600280549050905090565b60006003600e548332600143610b199190613ea0565b4042604051602001610b2f959493929190613f5e565b6040516020818303038152906040528051906020012060001c610b529190613fec565b9050919050565b610b6a610b64612514565b826125d5565b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba09061408f565b60405180910390fd5b610bb48383836126b3565b505050565b6000610bc483611138565b8210610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc906140fb565b60405180910390fd5b6000805b600280549050811015610cb85760028181548110610c2a57610c2961411b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610ca75783821415610c9a578092505050610cfc565b81610ca49061414a565b91505b80610cb19061414a565b9050610c09565b506000610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906140fb565b60405180910390fd5b505b92915050565b610d0a612514565b73ffffffffffffffffffffffffffffffffffffffff16610d28611525565b73ffffffffffffffffffffffffffffffffffffffff1614610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d75906141df565b60405180910390fd5b610d8661286c565b565b610da383838360405180602001604052806000815250611c94565b505050565b610db0612514565b73ffffffffffffffffffffffffffffffffffffffff16610dce611525565b73ffffffffffffffffffffffffffffffffffffffff1614610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b906141df565b60405180910390fd5b8060088190555050565b6000610e38610af6565b8210610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e709061424b565b60405180910390fd5b819050919050565b610e89612514565b73ffffffffffffffffffffffffffffffffffffffff16610ea7611525565b73ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef4906141df565b60405180910390fd5b80600b9080519060200190610f139291906132ca565b5050565b6000600660149054906101000a900460ff16905090565b610f36612514565b73ffffffffffffffffffffffffffffffffffffffff16610f54611525565b73ffffffffffffffffffffffffffffffffffffffff1614610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1906141df565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600283815481106110055761100461411b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611099906142dd565b60405180910390fd5b80915050919050565b6000806001905060005b8585905081101561112c5781801561111957508373ffffffffffffffffffffffffffffffffffffffff166111018787848181106110f5576110f461411b565b5b90506020020135610fee565b73ffffffffffffffffffffffffffffffffffffffff16145b9150806111259061414a565b90506110b5565b50809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061436f565b60405180910390fd5b600080600280549050905060005b8181101561124f57600281815481106111d3576111d261411b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561123e578261123b9061414a565b92505b806112489061414a565b90506111b7565b50600090508192505050919050565b611266612514565b73ffffffffffffffffffffffffffffffffffffffff16611284611525565b73ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d1906141df565b60405180910390fd5b6112e4600061290e565b565b6112ee612514565b73ffffffffffffffffffffffffffffffffffffffff1661130c611525565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611359906141df565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113ae612514565b73ffffffffffffffffffffffffffffffffffffffff166113cc611525565b73ffffffffffffffffffffffffffffffffffffffff1614611422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611419906141df565b60405180910390fd5b61142a6129d4565b565b606061143782611138565b600010611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906140fb565b60405180910390fd5b600061148483611138565b905060008167ffffffffffffffff8111156114a2576114a16136a9565b5b6040519080825280602002602001820160405280156114d05781602001602082028036833780820191505090505b50905060005b8281101561151a576114e88582610bb9565b8282815181106114fb576114fa61411b565b5b60200260200101818152505080806115129061414a565b9150506114d6565b508092505050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d4906143db565b60405180910390fd5b6115e78282612a77565b5050565b6060600180546115fa90613c89565b80601f016020809104026020016040519081016040528092919081815260200182805461162690613c89565b80156116735780601f1061164857610100808354040283529160200191611673565b820191906000526020600020905b81548152906001019060200180831161165657829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ab610f17565b156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290614447565b60405180910390fd5b6000600e541415611731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611728906144b3565b60405180910390fd5b600061173b610af6565b9050611b58828261174c91906144d3565b111561178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490614575565b60405180910390fd5b6008548261179b9190614595565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663590a4d6a336040518263ffffffff1660e01b81526004016117f6919061359b565b602060405180830381865afa158015611813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118379190614604565b1015611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f9061467d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af7d6ca333600854856118c59190614595565b6040518363ffffffff1660e01b81526004016118e292919061469d565b600060405180830381600087803b1580156118fc57600080fd5b505af1158015611910573d6000803e3d6000fd5b5050505060008267ffffffffffffffff8111156119305761192f6136a9565b5b60405190808252806020026020018201604052801561195e5781602001602082028036833780820191505090505b50905060008367ffffffffffffffff81111561197d5761197c6136a9565b5b6040519080825280602002602001820160405280156119ab5781602001602082028036833780820191505090505b50905060005b84811015611a4b5780846119c591906144d3565b8382815181106119d8576119d761411b565b5b60200260200101818152505060016119fa82866119f591906144d3565b610b03565b611a0491906144d3565b828281518110611a1757611a1661411b565b5b602002602001018181525050611a38338286611a3391906144d3565b612aae565b8080611a439061414a565b9150506119b1565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367e8ae6a83836040518363ffffffff1660e01b8152600401611aa99291906146c6565b600060405180830381600087803b158015611ac357600080fd5b505af1158015611ad7573d6000803e3d6000fd5b5050505060009250606091506060905050505050565b611af5612514565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90614749565b60405180910390fd5b8060046000611b70612514565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c1d612514565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c629190613421565b60405180910390a35050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ca5611c9f612514565b836125d5565b611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb9061408f565b60405180910390fd5b611cf084848484612acc565b50505050565b6000611d00612514565b73ffffffffffffffffffffffffffffffffffffffff16611d1e611525565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906141df565b60405180910390fd5b600c547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611dd0919061359b565b602060405180830381865afa158015611ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e119190614604565b1015611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e49906147b5565b60405180910390fd5b611e60600d54600c54612b28565b905090565b6060611e708261248c565b611eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea690614847565b60405180910390fd5b6000611eb9612c7b565b90506000815111611ed95760405180602001604052806000815250611f04565b80611ee384612d0d565b604051602001611ef49291906148ef565b6040516020818303038152906040525b915050919050565b611f14612514565b73ffffffffffffffffffffffffffffffffffffffff16611f32611525565b73ffffffffffffffffffffffffffffffffffffffff1614611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f906141df565b60405180910390fd5b6000600e541415611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc5906144b3565b60405180910390fd5b6000611fd8610af6565b9050600082118015611fec57506007548211155b61202b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120229061496a565b60405180910390fd5b60008267ffffffffffffffff811115612047576120466136a9565b5b6040519080825280602002602001820160405280156120755781602001602082028036833780820191505090505b50905060008367ffffffffffffffff811115612094576120936136a9565b5b6040519080825280602002602001820160405280156120c25781602001602082028036833780820191505090505b50905060005b848110156121625780846120dc91906144d3565b8382815181106120ef576120ee61411b565b5b6020026020010181815250506001612111828661210c91906144d3565b610b03565b61211b91906144d3565b82828151811061212e5761212d61411b565b5b60200260200101818152505061214f86828661214a91906144d3565b612aae565b808061215a9061414a565b9150506120c8565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367e8ae6a83836040518363ffffffff1660e01b81526004016121c09291906146c6565b600060405180830381600087803b1580156121da57600080fd5b505af11580156121ee573d6000803e3d6000fd5b5050505083600760008282546122049190613ea0565b925050819055506000925060609150606090505050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122ba612514565b73ffffffffffffffffffffffffffffffffffffffff166122d8611525565b73ffffffffffffffffffffffffffffffffffffffff161461232e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612325906141df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612395906149fc565b60405180910390fd5b6123a78161290e565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061247557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612485575061248482612e6e565b5b9050919050565b60006002805490508210801561250d5750600073ffffffffffffffffffffffffffffffffffffffff16600283815481106124c9576124c861411b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661258f83610fee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125e08261248c565b61261f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261690614a8e565b60405180910390fd5b600061262a83610fee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061269957508373ffffffffffffffffffffffffffffffffffffffff1661268184610959565b73ffffffffffffffffffffffffffffffffffffffff16145b806126aa57506126a9818561221e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126d382610fee565b73ffffffffffffffffffffffffffffffffffffffff1614612729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272090614b20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279090614bb2565b60405180910390fd5b6127a4838383612ed8565b6127af60008261251c565b81600282815481106127c4576127c361411b565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612874610f17565b6128b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128aa90614c1e565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128f7612514565b604051612904919061359b565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129dc610f17565b15612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1390614447565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a60612514565b604051612a6d919061359b565b60405180910390a1565b80600e819055507f0db1519ec32f10575cf08e612ef5575c94d9c26112d8439b084c223e8b0b103160405160405180910390a15050565b612ac8828260405180602001604052806000815250612edd565b5050565b612ad78484846126b3565b612ae384848484612f38565b612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614cb0565b60405180910390fd5b50505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634000aea07f000000000000000000000000000000000000000000000000000000000000000084866000604051602001612b9c929190614cd0565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612bc993929190614d4e565b6020604051808303816000875af1158015612be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0c9190614da1565b506000612c2f8460003060056000898152602001908152602001600020546130c0565b905060016005600086815260200190815260200160002054612c5191906144d3565b6005600086815260200190815260200160002081905550612c7284826130fc565b91505092915050565b6060600b8054612c8a90613c89565b80601f0160208091040260200160405190810160405280929190818152602001828054612cb690613c89565b8015612d035780601f10612cd857610100808354040283529160200191612d03565b820191906000526020600020905b815481529060010190602001808311612ce657829003601f168201915b5050505050905090565b60606000821415612d55576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e69565b600082905060005b60008214612d87578080612d709061414a565b915050600a82612d809190614dce565b9150612d5d565b60008167ffffffffffffffff811115612da357612da26136a9565b5b6040519080825280601f01601f191660200182016040528015612dd55781602001600182028036833780820191505090505b5090505b60008514612e6257600182612dee9190613ea0565b9150600a85612dfd9190613fec565b6030612e0991906144d3565b60f81b818381518110612e1f57612e1e61411b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e5b9190614dce565b9450612dd9565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b612ee7838361312f565b612ef46000848484612f38565b612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614cb0565b60405180910390fd5b505050565b6000612f598473ffffffffffffffffffffffffffffffffffffffff166132b7565b156130b3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f82612514565b8786866040518563ffffffff1660e01b8152600401612fa49493929190614dff565b6020604051808303816000875af1925050508015612fe057506040513d601f19601f82011682018060405250810190612fdd9190614e60565b60015b613063573d8060008114613010576040519150601f19603f3d011682016040523d82523d6000602084013e613015565b606091505b5060008151141561305b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305290614cb0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b8565b600190505b949350505050565b6000848484846040516020016130d99493929190614e8d565b6040516020818303038152906040528051906020012060001c9050949350505050565b60008282604051602001613111929190614ed2565b60405160208183030381529060405280519060200120905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319690614f4a565b60405180910390fd5b6131a88161248c565b156131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90614fb6565b60405180910390fd5b6131f460008383612ed8565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546132d690613c89565b90600052602060002090601f0160209004810192826132f8576000855561333f565b82601f1061331157805160ff191683800117855561333f565b8280016001018555821561333f579182015b8281111561333e578251825591602001919060010190613323565b5b50905061334c9190613350565b5090565b5b80821115613369576000816000905550600101613351565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133b681613381565b81146133c157600080fd5b50565b6000813590506133d3816133ad565b92915050565b6000602082840312156133ef576133ee613377565b5b60006133fd848285016133c4565b91505092915050565b60008115159050919050565b61341b81613406565b82525050565b60006020820190506134366000830184613412565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561347657808201518184015260208101905061345b565b83811115613485576000848401525b50505050565b6000601f19601f8301169050919050565b60006134a78261343c565b6134b18185613447565b93506134c1818560208601613458565b6134ca8161348b565b840191505092915050565b600060208201905081810360008301526134ef818461349c565b905092915050565b6000819050919050565b61350a816134f7565b811461351557600080fd5b50565b60008135905061352781613501565b92915050565b60006020828403121561354357613542613377565b5b600061355184828501613518565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135858261355a565b9050919050565b6135958161357a565b82525050565b60006020820190506135b0600083018461358c565b92915050565b6135bf8161357a565b81146135ca57600080fd5b50565b6000813590506135dc816135b6565b92915050565b600080604083850312156135f9576135f8613377565b5b6000613607858286016135cd565b925050602061361885828601613518565b9150509250929050565b61362b816134f7565b82525050565b60006020820190506136466000830184613622565b92915050565b60008060006060848603121561366557613664613377565b5b6000613673868287016135cd565b9350506020613684868287016135cd565b925050604061369586828701613518565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136e18261348b565b810181811067ffffffffffffffff82111715613700576136ff6136a9565b5b80604052505050565b600061371361336d565b905061371f82826136d8565b919050565b600067ffffffffffffffff82111561373f5761373e6136a9565b5b6137488261348b565b9050602081019050919050565b82818337600083830152505050565b600061377761377284613724565b613709565b905082815260208101848484011115613793576137926136a4565b5b61379e848285613755565b509392505050565b600082601f8301126137bb576137ba61369f565b5b81356137cb848260208601613764565b91505092915050565b6000602082840312156137ea576137e9613377565b5b600082013567ffffffffffffffff8111156138085761380761337c565b5b613814848285016137a6565b91505092915050565b60006020828403121561383357613832613377565b5b6000613841848285016135cd565b91505092915050565b600080fd5b600080fd5b60008083601f84011261386a5761386961369f565b5b8235905067ffffffffffffffff8111156138875761388661384a565b5b6020830191508360208202830111156138a3576138a261384f565b5b9250929050565b6000806000604084860312156138c3576138c2613377565b5b600084013567ffffffffffffffff8111156138e1576138e061337c565b5b6138ed86828701613854565b93509350506020613900868287016135cd565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61393f816134f7565b82525050565b60006139518383613936565b60208301905092915050565b6000602082019050919050565b60006139758261390a565b61397f8185613915565b935061398a83613926565b8060005b838110156139bb5781516139a28882613945565b97506139ad8361395d565b92505060018101905061398e565b5085935050505092915050565b600060208201905081810360008301526139e2818461396a565b905092915050565b6000819050919050565b6139fd816139ea565b8114613a0857600080fd5b50565b600081359050613a1a816139f4565b92915050565b60008060408385031215613a3757613a36613377565b5b6000613a4585828601613a0b565b9250506020613a5685828601613518565b9150509250929050565b613a6981613406565b8114613a7457600080fd5b50565b600081359050613a8681613a60565b92915050565b60008060408385031215613aa357613aa2613377565b5b6000613ab1858286016135cd565b9250506020613ac285828601613a77565b9150509250929050565b600067ffffffffffffffff821115613ae757613ae66136a9565b5b613af08261348b565b9050602081019050919050565b6000613b10613b0b84613acc565b613709565b905082815260208101848484011115613b2c57613b2b6136a4565b5b613b37848285613755565b509392505050565b600082601f830112613b5457613b5361369f565b5b8135613b64848260208601613afd565b91505092915050565b60008060008060808587031215613b8757613b86613377565b5b6000613b95878288016135cd565b9450506020613ba6878288016135cd565b9350506040613bb787828801613518565b925050606085013567ffffffffffffffff811115613bd857613bd761337c565b5b613be487828801613b3f565b91505092959194509250565b613bf9816139ea565b82525050565b6000602082019050613c146000830184613bf0565b92915050565b60008060408385031215613c3157613c30613377565b5b6000613c3f858286016135cd565b9250506020613c50858286016135cd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ca157607f821691505b60208210811415613cb557613cb4613c5a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d17602c83613447565b9150613d2282613cbb565b604082019050919050565b60006020820190508181036000830152613d4681613d0a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613da9602183613447565b9150613db482613d4d565b604082019050919050565b60006020820190508181036000830152613dd881613d9c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613e3b603883613447565b9150613e4682613ddf565b604082019050919050565b60006020820190508181036000830152613e6a81613e2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eab826134f7565b9150613eb6836134f7565b925082821015613ec957613ec8613e71565b5b828203905092915050565b6000819050919050565b613eef613eea826134f7565b613ed4565b82525050565b60008160601b9050919050565b6000613f0d82613ef5565b9050919050565b6000613f1f82613f02565b9050919050565b613f37613f328261357a565b613f14565b82525050565b6000819050919050565b613f58613f53826139ea565b613f3d565b82525050565b6000613f6a8288613ede565b602082019150613f7a8287613ede565b602082019150613f8a8286613f26565b601482019150613f9a8285613f47565b602082019150613faa8284613ede565b6020820191508190509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ff7826134f7565b9150614002836134f7565b92508261401257614011613fbd565b5b828206905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614079603183613447565b91506140848261401d565b604082019050919050565b600060208201905081810360008301526140a88161406c565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b60006140e5601683613447565b91506140f0826140af565b602082019050919050565b60006020820190508181036000830152614114816140d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614155826134f7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561418857614187613e71565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141c9602083613447565b91506141d482614193565b602082019050919050565b600060208201905081810360008301526141f8816141bc565b9050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000614235601783613447565b9150614240826141ff565b602082019050919050565b6000602082019050818103600083015261426481614228565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006142c7602983613447565b91506142d28261426b565b604082019050919050565b600060208201905081810360008301526142f6816142ba565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614359602a83613447565b9150614364826142fd565b604082019050919050565b600060208201905081810360008301526143888161434c565b9050919050565b7f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00600082015250565b60006143c5601f83613447565b91506143d08261438f565b602082019050919050565b600060208201905081810360008301526143f4816143b8565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614431601083613447565b915061443c826143fb565b602082019050919050565b6000602082019050818103600083015261446081614424565b9050919050565b7f53656564206e6f74207365740000000000000000000000000000000000000000600082015250565b600061449d600c83613447565b91506144a882614467565b602082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b60006144de826134f7565b91506144e9836134f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561451e5761451d613e71565b5b828201905092915050565b7f544f4f204d414e59000000000000000000000000000000000000000000000000600082015250565b600061455f600883613447565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a0826134f7565b91506145ab836134f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e4576145e3613e71565b5b828202905092915050565b6000815190506145fe81613501565b92915050565b60006020828403121561461a57614619613377565b5b6000614628848285016145ef565b91505092915050565b7f4e4f5420454e4f55474800000000000000000000000000000000000000000000600082015250565b6000614667600a83613447565b915061467282614631565b602082019050919050565b600060208201905081810360008301526146968161465a565b9050919050565b60006040820190506146b2600083018561358c565b6146bf6020830184613622565b9392505050565b600060408201905081810360008301526146e0818561396a565b905081810360208301526146f4818461396a565b90509392505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614733601983613447565b915061473e826146fd565b602082019050919050565b6000602082019050818103600083015261476281614726565b9050919050565b7f4e6f7420656e6f756768204c494e4b0000000000000000000000000000000000600082015250565b600061479f600f83613447565b91506147aa82614769565b602082019050919050565b600060208201905081810360008301526147ce81614792565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614831602183613447565b915061483c826147d5565b604082019050919050565b6000602082019050818103600083015261486081614824565b9050919050565b600081905092915050565b600061487d8261343c565b6148878185614867565b9350614897818560208601613458565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006148d9600583614867565b91506148e4826148a3565b600582019050919050565b60006148fb8285614872565b91506149078284614872565b9150614912826148cc565b91508190509392505050565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b6000614954602083613447565b915061495f8261491e565b602082019050919050565b6000602082019050818103600083015261498381614947565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149e6602683613447565b91506149f18261498a565b604082019050919050565b60006020820190508181036000830152614a15816149d9565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614a78602c83613447565b9150614a8382614a1c565b604082019050919050565b60006020820190508181036000830152614aa781614a6b565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614b0a602983613447565b9150614b1582614aae565b604082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b9c602483613447565b9150614ba782614b40565b604082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614c08601483613447565b9150614c1382614bd2565b602082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614c9a603283613447565b9150614ca582614c3e565b604082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b6000604082019050614ce56000830185613bf0565b614cf26020830184613622565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000614d2082614cf9565b614d2a8185614d04565b9350614d3a818560208601613458565b614d438161348b565b840191505092915050565b6000606082019050614d63600083018661358c565b614d706020830185613622565b8181036040830152614d828184614d15565b9050949350505050565b600081519050614d9b81613a60565b92915050565b600060208284031215614db757614db6613377565b5b6000614dc584828501614d8c565b91505092915050565b6000614dd9826134f7565b9150614de4836134f7565b925082614df457614df3613fbd565b5b828204905092915050565b6000608082019050614e14600083018761358c565b614e21602083018661358c565b614e2e6040830185613622565b8181036060830152614e408184614d15565b905095945050505050565b600081519050614e5a816133ad565b92915050565b600060208284031215614e7657614e75613377565b5b6000614e8484828501614e4b565b91505092915050565b6000608082019050614ea26000830187613bf0565b614eaf6020830186613622565b614ebc604083018561358c565b614ec96060830184613622565b95945050505050565b6000614ede8285613f47565b602082019150614eee8284613ede565b6020820191508190509392505050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f34602083613447565b9150614f3f82614efe565b602082019050919050565b60006020820190508181036000830152614f6381614f27565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614fa0601c83613447565b9150614fab82614f6a565b602082019050919050565b60006020820190508181036000830152614fcf81614f93565b905091905056fea2646970667358221220696bdb78382c7a14ea81d06eb4036d68bffbdc4815090279780520c095dee3d564736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb7952000000000000000000000000514910771af9ca656af840dff83e8264ecf986caaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af4450000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f626c6f6f642d736865642d62656172732d747265652d686f7573652f6d657461646174612f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102045760003560e01c806370a0823111610118578063a0712d68116100a0578063c5b4451a1161006f578063c5b4451a14610756578063c87b56dd14610781578063cc47a40b146107be578063e985e9c5146107e7578063f2fde38b1461082457610204565b8063a0712d68146106bd578063a22cb465146106d9578063ada670e714610702578063b88d4fde1461072d57610204565b80638462151c116100e75780638462151c146105d65780638da5cb5b1461061357806394985ddd1461063e57806395d89b41146106675780639b355c201461069257610204565b806370a0823114610542578063715018a61461057f5780637f9a62dc146105965780638456cb59146105bf57610204565b80633f4ba83a1161019b57806355f804b31161016a57806355f804b31461044b5780635c975abb146104745780635e0891421461049f5780636352211e146104c85780636f9bdf651461050557610204565b80633f4ba83a146103a557806342842e0e146103bc57806344a0d68a146103e55780634f6ccce71461040e57610204565b806318160ddd116101d757806318160ddd146102d757806322baa7391461030257806323b872dd1461033f5780632f745c591461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906133d9565b61084d565b60405161023d9190613421565b60405180910390f35b34801561025257600080fd5b5061025b6108c7565b60405161026891906134d5565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061352d565b610959565b6040516102a5919061359b565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906135e2565b6109de565b005b3480156102e357600080fd5b506102ec610af6565b6040516102f99190613631565b60405180910390f35b34801561030e57600080fd5b506103296004803603810190610324919061352d565b610b03565b6040516103369190613631565b60405180910390f35b34801561034b57600080fd5b506103666004803603810190610361919061364c565b610b59565b005b34801561037457600080fd5b5061038f600480360381019061038a91906135e2565b610bb9565b60405161039c9190613631565b60405180910390f35b3480156103b157600080fd5b506103ba610d02565b005b3480156103c857600080fd5b506103e360048036038101906103de919061364c565b610d88565b005b3480156103f157600080fd5b5061040c6004803603810190610407919061352d565b610da8565b005b34801561041a57600080fd5b506104356004803603810190610430919061352d565b610e2e565b6040516104429190613631565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d91906137d4565b610e81565b005b34801561048057600080fd5b50610489610f17565b6040516104969190613421565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061381d565b610f2e565b005b3480156104d457600080fd5b506104ef60048036038101906104ea919061352d565b610fee565b6040516104fc919061359b565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906138aa565b6110ab565b6040516105399190613421565b60405180910390f35b34801561054e57600080fd5b506105696004803603810190610564919061381d565b611138565b6040516105769190613631565b60405180910390f35b34801561058b57600080fd5b5061059461125e565b005b3480156105a257600080fd5b506105bd60048036038101906105b8919061381d565b6112e6565b005b3480156105cb57600080fd5b506105d46113a6565b005b3480156105e257600080fd5b506105fd60048036038101906105f8919061381d565b61142c565b60405161060a91906139c8565b60405180910390f35b34801561061f57600080fd5b50610628611525565b604051610635919061359b565b60405180910390f35b34801561064a57600080fd5b5061066560048036038101906106609190613a20565b61154f565b005b34801561067357600080fd5b5061067c6115eb565b60405161068991906134d5565b60405180910390f35b34801561069e57600080fd5b506106a761167d565b6040516106b4919061359b565b60405180910390f35b6106d760048036038101906106d2919061352d565b6116a3565b005b3480156106e557600080fd5b5061070060048036038101906106fb9190613a8c565b611aed565b005b34801561070e57600080fd5b50610717611c6e565b604051610724919061359b565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613b6d565b611c94565b005b34801561076257600080fd5b5061076b611cf6565b6040516107789190613bff565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a3919061352d565b611e65565b6040516107b591906134d5565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e091906135e2565b611f0c565b005b3480156107f357600080fd5b5061080e60048036038101906108099190613c1a565b61221e565b60405161081b9190613421565b60405180910390f35b34801561083057600080fd5b5061084b6004803603810190610846919061381d565b6122b2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c057506108bf826123aa565b5b9050919050565b6060600080546108d690613c89565b80601f016020809104026020016040519081016040528092919081815260200182805461090290613c89565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b60006109648261248c565b6109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90613d2d565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e982610fee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190613dbf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a79612514565b73ffffffffffffffffffffffffffffffffffffffff161480610aa85750610aa781610aa2612514565b61221e565b5b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90613e51565b60405180910390fd5b610af1838361251c565b505050565b6000600280549050905090565b60006003600e548332600143610b199190613ea0565b4042604051602001610b2f959493929190613f5e565b6040516020818303038152906040528051906020012060001c610b529190613fec565b9050919050565b610b6a610b64612514565b826125d5565b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba09061408f565b60405180910390fd5b610bb48383836126b3565b505050565b6000610bc483611138565b8210610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc906140fb565b60405180910390fd5b6000805b600280549050811015610cb85760028181548110610c2a57610c2961411b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610ca75783821415610c9a578092505050610cfc565b81610ca49061414a565b91505b80610cb19061414a565b9050610c09565b506000610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906140fb565b60405180910390fd5b505b92915050565b610d0a612514565b73ffffffffffffffffffffffffffffffffffffffff16610d28611525565b73ffffffffffffffffffffffffffffffffffffffff1614610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d75906141df565b60405180910390fd5b610d8661286c565b565b610da383838360405180602001604052806000815250611c94565b505050565b610db0612514565b73ffffffffffffffffffffffffffffffffffffffff16610dce611525565b73ffffffffffffffffffffffffffffffffffffffff1614610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b906141df565b60405180910390fd5b8060088190555050565b6000610e38610af6565b8210610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e709061424b565b60405180910390fd5b819050919050565b610e89612514565b73ffffffffffffffffffffffffffffffffffffffff16610ea7611525565b73ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef4906141df565b60405180910390fd5b80600b9080519060200190610f139291906132ca565b5050565b6000600660149054906101000a900460ff16905090565b610f36612514565b73ffffffffffffffffffffffffffffffffffffffff16610f54611525565b73ffffffffffffffffffffffffffffffffffffffff1614610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1906141df565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600283815481106110055761100461411b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611099906142dd565b60405180910390fd5b80915050919050565b6000806001905060005b8585905081101561112c5781801561111957508373ffffffffffffffffffffffffffffffffffffffff166111018787848181106110f5576110f461411b565b5b90506020020135610fee565b73ffffffffffffffffffffffffffffffffffffffff16145b9150806111259061414a565b90506110b5565b50809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061436f565b60405180910390fd5b600080600280549050905060005b8181101561124f57600281815481106111d3576111d261411b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561123e578261123b9061414a565b92505b806112489061414a565b90506111b7565b50600090508192505050919050565b611266612514565b73ffffffffffffffffffffffffffffffffffffffff16611284611525565b73ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d1906141df565b60405180910390fd5b6112e4600061290e565b565b6112ee612514565b73ffffffffffffffffffffffffffffffffffffffff1661130c611525565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611359906141df565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113ae612514565b73ffffffffffffffffffffffffffffffffffffffff166113cc611525565b73ffffffffffffffffffffffffffffffffffffffff1614611422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611419906141df565b60405180910390fd5b61142a6129d4565b565b606061143782611138565b600010611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906140fb565b60405180910390fd5b600061148483611138565b905060008167ffffffffffffffff8111156114a2576114a16136a9565b5b6040519080825280602002602001820160405280156114d05781602001602082028036833780820191505090505b50905060005b8281101561151a576114e88582610bb9565b8282815181106114fb576114fa61411b565b5b60200260200101818152505080806115129061414a565b9150506114d6565b508092505050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb795273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d4906143db565b60405180910390fd5b6115e78282612a77565b5050565b6060600180546115fa90613c89565b80601f016020809104026020016040519081016040528092919081815260200182805461162690613c89565b80156116735780601f1061164857610100808354040283529160200191611673565b820191906000526020600020905b81548152906001019060200180831161165657829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ab610f17565b156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290614447565b60405180910390fd5b6000600e541415611731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611728906144b3565b60405180910390fd5b600061173b610af6565b9050611b58828261174c91906144d3565b111561178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490614575565b60405180910390fd5b6008548261179b9190614595565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663590a4d6a336040518263ffffffff1660e01b81526004016117f6919061359b565b602060405180830381865afa158015611813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118379190614604565b1015611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f9061467d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af7d6ca333600854856118c59190614595565b6040518363ffffffff1660e01b81526004016118e292919061469d565b600060405180830381600087803b1580156118fc57600080fd5b505af1158015611910573d6000803e3d6000fd5b5050505060008267ffffffffffffffff8111156119305761192f6136a9565b5b60405190808252806020026020018201604052801561195e5781602001602082028036833780820191505090505b50905060008367ffffffffffffffff81111561197d5761197c6136a9565b5b6040519080825280602002602001820160405280156119ab5781602001602082028036833780820191505090505b50905060005b84811015611a4b5780846119c591906144d3565b8382815181106119d8576119d761411b565b5b60200260200101818152505060016119fa82866119f591906144d3565b610b03565b611a0491906144d3565b828281518110611a1757611a1661411b565b5b602002602001018181525050611a38338286611a3391906144d3565b612aae565b8080611a439061414a565b9150506119b1565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367e8ae6a83836040518363ffffffff1660e01b8152600401611aa99291906146c6565b600060405180830381600087803b158015611ac357600080fd5b505af1158015611ad7573d6000803e3d6000fd5b5050505060009250606091506060905050505050565b611af5612514565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90614749565b60405180910390fd5b8060046000611b70612514565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c1d612514565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c629190613421565b60405180910390a35050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ca5611c9f612514565b836125d5565b611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb9061408f565b60405180910390fd5b611cf084848484612acc565b50505050565b6000611d00612514565b73ffffffffffffffffffffffffffffffffffffffff16611d1e611525565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906141df565b60405180910390fd5b600c547f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611dd0919061359b565b602060405180830381865afa158015611ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e119190614604565b1015611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e49906147b5565b60405180910390fd5b611e60600d54600c54612b28565b905090565b6060611e708261248c565b611eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea690614847565b60405180910390fd5b6000611eb9612c7b565b90506000815111611ed95760405180602001604052806000815250611f04565b80611ee384612d0d565b604051602001611ef49291906148ef565b6040516020818303038152906040525b915050919050565b611f14612514565b73ffffffffffffffffffffffffffffffffffffffff16611f32611525565b73ffffffffffffffffffffffffffffffffffffffff1614611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f906141df565b60405180910390fd5b6000600e541415611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc5906144b3565b60405180910390fd5b6000611fd8610af6565b9050600082118015611fec57506007548211155b61202b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120229061496a565b60405180910390fd5b60008267ffffffffffffffff811115612047576120466136a9565b5b6040519080825280602002602001820160405280156120755781602001602082028036833780820191505090505b50905060008367ffffffffffffffff811115612094576120936136a9565b5b6040519080825280602002602001820160405280156120c25781602001602082028036833780820191505090505b50905060005b848110156121625780846120dc91906144d3565b8382815181106120ef576120ee61411b565b5b6020026020010181815250506001612111828661210c91906144d3565b610b03565b61211b91906144d3565b82828151811061212e5761212d61411b565b5b60200260200101818152505061214f86828661214a91906144d3565b612aae565b808061215a9061414a565b9150506120c8565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367e8ae6a83836040518363ffffffff1660e01b81526004016121c09291906146c6565b600060405180830381600087803b1580156121da57600080fd5b505af11580156121ee573d6000803e3d6000fd5b5050505083600760008282546122049190613ea0565b925050819055506000925060609150606090505050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122ba612514565b73ffffffffffffffffffffffffffffffffffffffff166122d8611525565b73ffffffffffffffffffffffffffffffffffffffff161461232e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612325906141df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612395906149fc565b60405180910390fd5b6123a78161290e565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061247557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612485575061248482612e6e565b5b9050919050565b60006002805490508210801561250d5750600073ffffffffffffffffffffffffffffffffffffffff16600283815481106124c9576124c861411b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661258f83610fee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125e08261248c565b61261f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261690614a8e565b60405180910390fd5b600061262a83610fee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061269957508373ffffffffffffffffffffffffffffffffffffffff1661268184610959565b73ffffffffffffffffffffffffffffffffffffffff16145b806126aa57506126a9818561221e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126d382610fee565b73ffffffffffffffffffffffffffffffffffffffff1614612729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272090614b20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279090614bb2565b60405180910390fd5b6127a4838383612ed8565b6127af60008261251c565b81600282815481106127c4576127c361411b565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612874610f17565b6128b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128aa90614c1e565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128f7612514565b604051612904919061359b565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129dc610f17565b15612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1390614447565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a60612514565b604051612a6d919061359b565b60405180910390a1565b80600e819055507f0db1519ec32f10575cf08e612ef5575c94d9c26112d8439b084c223e8b0b103160405160405180910390a15050565b612ac8828260405180602001604052806000815250612edd565b5050565b612ad78484846126b3565b612ae384848484612f38565b612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614cb0565b60405180910390fd5b50505050565b60007f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca73ffffffffffffffffffffffffffffffffffffffff16634000aea07f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb795284866000604051602001612b9c929190614cd0565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612bc993929190614d4e565b6020604051808303816000875af1158015612be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0c9190614da1565b506000612c2f8460003060056000898152602001908152602001600020546130c0565b905060016005600086815260200190815260200160002054612c5191906144d3565b6005600086815260200190815260200160002081905550612c7284826130fc565b91505092915050565b6060600b8054612c8a90613c89565b80601f0160208091040260200160405190810160405280929190818152602001828054612cb690613c89565b8015612d035780601f10612cd857610100808354040283529160200191612d03565b820191906000526020600020905b815481529060010190602001808311612ce657829003601f168201915b5050505050905090565b60606000821415612d55576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e69565b600082905060005b60008214612d87578080612d709061414a565b915050600a82612d809190614dce565b9150612d5d565b60008167ffffffffffffffff811115612da357612da26136a9565b5b6040519080825280601f01601f191660200182016040528015612dd55781602001600182028036833780820191505090505b5090505b60008514612e6257600182612dee9190613ea0565b9150600a85612dfd9190613fec565b6030612e0991906144d3565b60f81b818381518110612e1f57612e1e61411b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e5b9190614dce565b9450612dd9565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b612ee7838361312f565b612ef46000848484612f38565b612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614cb0565b60405180910390fd5b505050565b6000612f598473ffffffffffffffffffffffffffffffffffffffff166132b7565b156130b3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f82612514565b8786866040518563ffffffff1660e01b8152600401612fa49493929190614dff565b6020604051808303816000875af1925050508015612fe057506040513d601f19601f82011682018060405250810190612fdd9190614e60565b60015b613063573d8060008114613010576040519150601f19603f3d011682016040523d82523d6000602084013e613015565b606091505b5060008151141561305b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305290614cb0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b8565b600190505b949350505050565b6000848484846040516020016130d99493929190614e8d565b6040516020818303038152906040528051906020012060001c9050949350505050565b60008282604051602001613111929190614ed2565b60405160208183030381529060405280519060200120905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319690614f4a565b60405180910390fd5b6131a88161248c565b156131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90614fb6565b60405180910390fd5b6131f460008383612ed8565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546132d690613c89565b90600052602060002090601f0160209004810192826132f8576000855561333f565b82601f1061331157805160ff191683800117855561333f565b8280016001018555821561333f579182015b8281111561333e578251825591602001919060010190613323565b5b50905061334c9190613350565b5090565b5b80821115613369576000816000905550600101613351565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133b681613381565b81146133c157600080fd5b50565b6000813590506133d3816133ad565b92915050565b6000602082840312156133ef576133ee613377565b5b60006133fd848285016133c4565b91505092915050565b60008115159050919050565b61341b81613406565b82525050565b60006020820190506134366000830184613412565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561347657808201518184015260208101905061345b565b83811115613485576000848401525b50505050565b6000601f19601f8301169050919050565b60006134a78261343c565b6134b18185613447565b93506134c1818560208601613458565b6134ca8161348b565b840191505092915050565b600060208201905081810360008301526134ef818461349c565b905092915050565b6000819050919050565b61350a816134f7565b811461351557600080fd5b50565b60008135905061352781613501565b92915050565b60006020828403121561354357613542613377565b5b600061355184828501613518565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135858261355a565b9050919050565b6135958161357a565b82525050565b60006020820190506135b0600083018461358c565b92915050565b6135bf8161357a565b81146135ca57600080fd5b50565b6000813590506135dc816135b6565b92915050565b600080604083850312156135f9576135f8613377565b5b6000613607858286016135cd565b925050602061361885828601613518565b9150509250929050565b61362b816134f7565b82525050565b60006020820190506136466000830184613622565b92915050565b60008060006060848603121561366557613664613377565b5b6000613673868287016135cd565b9350506020613684868287016135cd565b925050604061369586828701613518565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136e18261348b565b810181811067ffffffffffffffff82111715613700576136ff6136a9565b5b80604052505050565b600061371361336d565b905061371f82826136d8565b919050565b600067ffffffffffffffff82111561373f5761373e6136a9565b5b6137488261348b565b9050602081019050919050565b82818337600083830152505050565b600061377761377284613724565b613709565b905082815260208101848484011115613793576137926136a4565b5b61379e848285613755565b509392505050565b600082601f8301126137bb576137ba61369f565b5b81356137cb848260208601613764565b91505092915050565b6000602082840312156137ea576137e9613377565b5b600082013567ffffffffffffffff8111156138085761380761337c565b5b613814848285016137a6565b91505092915050565b60006020828403121561383357613832613377565b5b6000613841848285016135cd565b91505092915050565b600080fd5b600080fd5b60008083601f84011261386a5761386961369f565b5b8235905067ffffffffffffffff8111156138875761388661384a565b5b6020830191508360208202830111156138a3576138a261384f565b5b9250929050565b6000806000604084860312156138c3576138c2613377565b5b600084013567ffffffffffffffff8111156138e1576138e061337c565b5b6138ed86828701613854565b93509350506020613900868287016135cd565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61393f816134f7565b82525050565b60006139518383613936565b60208301905092915050565b6000602082019050919050565b60006139758261390a565b61397f8185613915565b935061398a83613926565b8060005b838110156139bb5781516139a28882613945565b97506139ad8361395d565b92505060018101905061398e565b5085935050505092915050565b600060208201905081810360008301526139e2818461396a565b905092915050565b6000819050919050565b6139fd816139ea565b8114613a0857600080fd5b50565b600081359050613a1a816139f4565b92915050565b60008060408385031215613a3757613a36613377565b5b6000613a4585828601613a0b565b9250506020613a5685828601613518565b9150509250929050565b613a6981613406565b8114613a7457600080fd5b50565b600081359050613a8681613a60565b92915050565b60008060408385031215613aa357613aa2613377565b5b6000613ab1858286016135cd565b9250506020613ac285828601613a77565b9150509250929050565b600067ffffffffffffffff821115613ae757613ae66136a9565b5b613af08261348b565b9050602081019050919050565b6000613b10613b0b84613acc565b613709565b905082815260208101848484011115613b2c57613b2b6136a4565b5b613b37848285613755565b509392505050565b600082601f830112613b5457613b5361369f565b5b8135613b64848260208601613afd565b91505092915050565b60008060008060808587031215613b8757613b86613377565b5b6000613b95878288016135cd565b9450506020613ba6878288016135cd565b9350506040613bb787828801613518565b925050606085013567ffffffffffffffff811115613bd857613bd761337c565b5b613be487828801613b3f565b91505092959194509250565b613bf9816139ea565b82525050565b6000602082019050613c146000830184613bf0565b92915050565b60008060408385031215613c3157613c30613377565b5b6000613c3f858286016135cd565b9250506020613c50858286016135cd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ca157607f821691505b60208210811415613cb557613cb4613c5a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d17602c83613447565b9150613d2282613cbb565b604082019050919050565b60006020820190508181036000830152613d4681613d0a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613da9602183613447565b9150613db482613d4d565b604082019050919050565b60006020820190508181036000830152613dd881613d9c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613e3b603883613447565b9150613e4682613ddf565b604082019050919050565b60006020820190508181036000830152613e6a81613e2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eab826134f7565b9150613eb6836134f7565b925082821015613ec957613ec8613e71565b5b828203905092915050565b6000819050919050565b613eef613eea826134f7565b613ed4565b82525050565b60008160601b9050919050565b6000613f0d82613ef5565b9050919050565b6000613f1f82613f02565b9050919050565b613f37613f328261357a565b613f14565b82525050565b6000819050919050565b613f58613f53826139ea565b613f3d565b82525050565b6000613f6a8288613ede565b602082019150613f7a8287613ede565b602082019150613f8a8286613f26565b601482019150613f9a8285613f47565b602082019150613faa8284613ede565b6020820191508190509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ff7826134f7565b9150614002836134f7565b92508261401257614011613fbd565b5b828206905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614079603183613447565b91506140848261401d565b604082019050919050565b600060208201905081810360008301526140a88161406c565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b60006140e5601683613447565b91506140f0826140af565b602082019050919050565b60006020820190508181036000830152614114816140d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614155826134f7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561418857614187613e71565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141c9602083613447565b91506141d482614193565b602082019050919050565b600060208201905081810360008301526141f8816141bc565b9050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000614235601783613447565b9150614240826141ff565b602082019050919050565b6000602082019050818103600083015261426481614228565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006142c7602983613447565b91506142d28261426b565b604082019050919050565b600060208201905081810360008301526142f6816142ba565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614359602a83613447565b9150614364826142fd565b604082019050919050565b600060208201905081810360008301526143888161434c565b9050919050565b7f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00600082015250565b60006143c5601f83613447565b91506143d08261438f565b602082019050919050565b600060208201905081810360008301526143f4816143b8565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614431601083613447565b915061443c826143fb565b602082019050919050565b6000602082019050818103600083015261446081614424565b9050919050565b7f53656564206e6f74207365740000000000000000000000000000000000000000600082015250565b600061449d600c83613447565b91506144a882614467565b602082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b60006144de826134f7565b91506144e9836134f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561451e5761451d613e71565b5b828201905092915050565b7f544f4f204d414e59000000000000000000000000000000000000000000000000600082015250565b600061455f600883613447565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a0826134f7565b91506145ab836134f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e4576145e3613e71565b5b828202905092915050565b6000815190506145fe81613501565b92915050565b60006020828403121561461a57614619613377565b5b6000614628848285016145ef565b91505092915050565b7f4e4f5420454e4f55474800000000000000000000000000000000000000000000600082015250565b6000614667600a83613447565b915061467282614631565b602082019050919050565b600060208201905081810360008301526146968161465a565b9050919050565b60006040820190506146b2600083018561358c565b6146bf6020830184613622565b9392505050565b600060408201905081810360008301526146e0818561396a565b905081810360208301526146f4818461396a565b90509392505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614733601983613447565b915061473e826146fd565b602082019050919050565b6000602082019050818103600083015261476281614726565b9050919050565b7f4e6f7420656e6f756768204c494e4b0000000000000000000000000000000000600082015250565b600061479f600f83613447565b91506147aa82614769565b602082019050919050565b600060208201905081810360008301526147ce81614792565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614831602183613447565b915061483c826147d5565b604082019050919050565b6000602082019050818103600083015261486081614824565b9050919050565b600081905092915050565b600061487d8261343c565b6148878185614867565b9350614897818560208601613458565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006148d9600583614867565b91506148e4826148a3565b600582019050919050565b60006148fb8285614872565b91506149078284614872565b9150614912826148cc565b91508190509392505050565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b6000614954602083613447565b915061495f8261491e565b602082019050919050565b6000602082019050818103600083015261498381614947565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149e6602683613447565b91506149f18261498a565b604082019050919050565b60006020820190508181036000830152614a15816149d9565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614a78602c83613447565b9150614a8382614a1c565b604082019050919050565b60006020820190508181036000830152614aa781614a6b565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614b0a602983613447565b9150614b1582614aae565b604082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b9c602483613447565b9150614ba782614b40565b604082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614c08601483613447565b9150614c1382614bd2565b602082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614c9a603283613447565b9150614ca582614c3e565b604082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b6000604082019050614ce56000830185613bf0565b614cf26020830184613622565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000614d2082614cf9565b614d2a8185614d04565b9350614d3a818560208601613458565b614d438161348b565b840191505092915050565b6000606082019050614d63600083018661358c565b614d706020830185613622565b8181036040830152614d828184614d15565b9050949350505050565b600081519050614d9b81613a60565b92915050565b600060208284031215614db757614db6613377565b5b6000614dc584828501614d8c565b91505092915050565b6000614dd9826134f7565b9150614de4836134f7565b925082614df457614df3613fbd565b5b828204905092915050565b6000608082019050614e14600083018761358c565b614e21602083018661358c565b614e2e6040830185613622565b8181036060830152614e408184614d15565b905095945050505050565b600081519050614e5a816133ad565b92915050565b600060208284031215614e7657614e75613377565b5b6000614e8484828501614e4b565b91505092915050565b6000608082019050614ea26000830187613bf0565b614eaf6020830186613622565b614ebc604083018561358c565b614ec96060830184613622565b95945050505050565b6000614ede8285613f47565b602082019150614eee8284613ede565b6020820191508190509392505050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f34602083613447565b9150614f3f82614efe565b602082019050919050565b60006020820190508181036000830152614f6381614f27565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614fa0601c83613447565b9150614fab82614f6a565b602082019050919050565b60006020820190508181036000830152614fcf81614f93565b905091905056fea2646970667358221220696bdb78382c7a14ea81d06eb4036d68bffbdc4815090279780520c095dee3d564736f6c634300080a0033

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

00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb7952000000000000000000000000514910771af9ca656af840dff83e8264ecf986caaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af4450000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f626c6f6f642d736865642d62656172732d747265652d686f7573652f6d657461646174612f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : initBaseURI_ (string): https://storage.googleapis.com/blood-shed-bears-tree-house/metadata/
Arg [1] : vrfCoordinatorAddr_ (address): 0xf0d54349aDdcf704F77AE15b96510dEA15cb7952
Arg [2] : linkTokenAddr_ (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [3] : vrfKeyHash_ (bytes32): 0xaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445
Arg [4] : fee_ (uint256): 2000000000000000000

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb7952
Arg [2] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [3] : aa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445
Arg [4] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [6] : 68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f62
Arg [7] : 6c6f6f642d736865642d62656172732d747265652d686f7573652f6d65746164
Arg [8] : 6174612f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49531:4898:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32713:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26804:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27438:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27020:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33874:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53696:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28136:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32944:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54359:65;;;;;;;;;;;;;:::i;:::-;;28481:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50958:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33990:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53260:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48012:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50822:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26559:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53372:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26131:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3201:94;;;;;;;;;;;;;:::i;:::-;;50684:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54290:61;;;;;;;;;;;;;:::i;:::-;;33450:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2550:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46775:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26910:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49819:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51054:960;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27665:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49904:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28672:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53917:216;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52022:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52385:867;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27966:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3450:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32713:225;32816:4;32855:35;32840:50;;;:11;:50;;;;:90;;;;32894:36;32918:11;32894:23;:36::i;:::-;32840:90;32833:97;;32713:225;;;:::o;26804:100::-;26858:13;26891:5;26884:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26804:100;:::o;27438:221::-;27514:7;27542:16;27550:7;27542;:16::i;:::-;27534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27627:15;:24;27643:7;27627:24;;;;;;;;;;;;;;;;;;;;;27620:31;;27438:221;;;:::o;27020:412::-;27101:13;27117:24;27133:7;27117:15;:24::i;:::-;27101:40;;27166:5;27160:11;;:2;:11;;;;27152:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27260:5;27244:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27269:37;27286:5;27293:12;:10;:12::i;:::-;27269:16;:37::i;:::-;27244:62;27222:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27403:21;27412:2;27416:7;27403:8;:21::i;:::-;27090:342;27020:412;;:::o;33874:110::-;33935:7;33962;:14;;;;33955:21;;33874:110;:::o;53696:213::-;53762:7;53900:1;53824:4;;53830:7;53839:9;53875:1;53860:12;:16;;;;:::i;:::-;53850:27;53879:15;53807:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53797:99;;;;;;53789:108;;:112;;;;:::i;:::-;53782:119;;53696:213;;;:::o;28136:339::-;28331:41;28350:12;:10;:12::i;:::-;28364:7;28331:18;:41::i;:::-;28323:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28439:28;28449:4;28455:2;28459:7;28439:9;:28::i;:::-;28136:339;;;:::o;32944:500::-;33033:15;33077:24;33095:5;33077:17;:24::i;:::-;33069:5;:32;33061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33139:10;33165:6;33160:226;33177:7;:14;;;;33173:1;:18;33160:226;;;33226:7;33234:1;33226:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33217:19;;:5;:19;;;33213:162;;;33270:5;33261;:14;33257:102;;;33306:1;33299:8;;;;;;33257:102;33352:7;;;;:::i;:::-;;;33213:162;33193:3;;;;:::i;:::-;;;33160:226;;;;33404:5;33396:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33050:394;32944:500;;;;;:::o;54359:65::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54406:10:::1;:8;:10::i;:::-;54359:65::o:0;28481:185::-;28619:39;28636:4;28642:2;28646:7;28619:39;;;;;;;;;;;;:16;:39::i;:::-;28481:185;;;:::o;50958:88::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51030:8:::1;51023:4;:15;;;;50958:88:::0;:::o;33990:194::-;34065:7;34101:24;:22;:24::i;:::-;34093:5;:32;34085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34171:5;34164:12;;33990:194;;;:::o;53260:104::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53345:11:::1;53335:7;:21;;;;;;;;;;;;:::i;:::-;;53260:104:::0;:::o;48012:86::-;48059:4;48083:7;;;;;;;;;;;48076:14;;48012:86;:::o;50822:128::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50926:16:::1;50906:17;;:36;;;;;;;;;;;;;;;;;;50822:128:::0;:::o;26559:239::-;26631:7;26651:13;26667:7;26675;26667:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26651:32;;26719:1;26702:19;;:5;:19;;;;26694:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26785:5;26778:12;;;26559:239;;;:::o;53372:316::-;53467:4;53484:14;53501:4;53484:21;;53523:9;53518:134;53542:9;;:16;;53538:1;:20;53518:134;;;53592:9;:48;;;;;53631:8;53606:33;;:21;53614:9;;53624:1;53614:12;;;;;;;:::i;:::-;;;;;;;;53606:7;:21::i;:::-;:33;;;53592:48;53580:60;;53560:3;;;;:::i;:::-;;;53518:134;;;;53671:9;53664:16;;;53372:316;;;;;:::o;26131:422::-;26203:7;26248:1;26231:19;;:5;:19;;;;26223:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26308:10;26333:11;26347:7;:14;;;;26333:28;;26377:6;26372:127;26393:6;26389:1;:10;26372:127;;;26434:7;26442:1;26434:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26425:19;;:5;:19;;;26421:67;;;26465:7;;;;:::i;:::-;;;26421:67;26401:3;;;;:::i;:::-;;;26372:127;;;;26509:13;;;26540:5;26533:12;;;;26131:422;;;:::o;3201:94::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3266:21:::1;3284:1;3266:9;:21::i;:::-;3201:94::o:0;50684:130::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50790:16:::1;50769:18;;:37;;;;;;;;;;;;;;;;;;50684:130:::0;:::o;54290:61::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54335:8:::1;:6;:8::i;:::-;54290:61::o:0;33450:418::-;33509:16;33550:24;33568:5;33550:17;:24::i;:::-;33546:1;:28;33538:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33612:18;33633:16;33643:5;33633:9;:16::i;:::-;33612:37;;33660:25;33702:10;33688:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33660:53;;33729:9;33724:111;33748:10;33744:1;:14;33724:111;;;33794:29;33814:5;33821:1;33794:19;:29::i;:::-;33780:8;33789:1;33780:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;33760:3;;;;;:::i;:::-;;;;33724:111;;;;33852:8;33845:15;;;;33450:418;;;:::o;2550:87::-;2596:7;2623:6;;;;;;;;;;;2616:13;;2550:87;:::o;46775:220::-;46886:14;46872:28;;:10;:28;;;46864:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;46947:40;46965:9;46976:10;46947:17;:40::i;:::-;46775:220;;:::o;26910:104::-;26966:13;26999:7;26992:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26910:104;:::o;49819:78::-;;;;;;;;;;;;;:::o;51054:960::-;48338:8;:6;:8::i;:::-;48337:9;48329:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51147:1:::1;51139:4;;:9;;51131:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;51178:19;51200:13;:11;:13::i;:::-;51178:35;;49713:4;51248:11;51234;:25;;;;:::i;:::-;:38;;51226:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51389:4;;51375:11;:18;;;;:::i;:::-;51324;;;;;;;;;;;51304:55;;;51360:10;51304:67;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:89;;51296:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;51441:18;;;;;;;;;;;51421:45;;;51467:10;51493:4;;51479:11;:18;;;;:::i;:::-;51421:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51511:23;51551:11;51537:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51511:52;;51574:23;51614:11;51600:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51574:52;;51644:9;51639:215;51663:11;51659:1;:15;51639:215;;;51722:1;51708:11;:15;;;;:::i;:::-;51696:6;51703:1;51696:9;;;;;;;;:::i;:::-;;;;;;;:27;;;::::0;::::1;51788:1;51750:35;51783:1;51769:11;:15;;;;:::i;:::-;51750:18;:35::i;:::-;:39;;;;:::i;:::-;51738:6;51745:1;51738:9;;;;;;;;:::i;:::-;;;;;;;:51;;;::::0;::::1;51804:38;51814:10;51840:1;51826:11;:15;;;;:::i;:::-;51804:9;:38::i;:::-;51676:3;;;;;:::i;:::-;;;;51639:215;;;;51877:17;;;;;;;;;;;51866:45;;;51912:6;51920;51866:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51940:18;;;51969:13;;;51993;;;51120:894;;;51054:960:::0;:::o;27665:295::-;27780:12;:10;:12::i;:::-;27768:24;;:8;:24;;;;27760:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27880:8;27835:18;:32;27854:12;:10;:12::i;:::-;27835:32;;;;;;;;;;;;;;;:42;27868:8;27835:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27933:8;27904:48;;27919:12;:10;:12::i;:::-;27904:48;;;27943:8;27904:48;;;;;;:::i;:::-;;;;;;;;27665:295;;:::o;49904:77::-;;;;;;;;;;;;;:::o;28672:328::-;28847:41;28866:12;:10;:12::i;:::-;28880:7;28847:18;:41::i;:::-;28839:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28953:39;28967:4;28973:2;28977:7;28986:5;28953:13;:39::i;:::-;28672:328;;;;:::o;53917:216::-;53973:17;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54044:6:::1;;54011:4;:14;;;54034:4;54011:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;54003:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;54088:37;54106:10;;54118:6;;54088:17;:37::i;:::-;54081:44;;53917:216:::0;:::o;52022:355::-;52098:13;52132:17;52140:8;52132:7;:17::i;:::-;52124:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52198:28;52229:10;:8;:10::i;:::-;52198:41;;52290:1;52265:14;52259:28;:32;:110;;;;;;;;;;;;;;;;;52318:14;52334:19;:8;:17;:19::i;:::-;52301:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52259:110;52252:117;;;52022:355;;;:::o;52385:867::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52483:1:::1;52475:4;;:9;;52467:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;52512:14;52529:13;:11;:13::i;:::-;52512:30;;52592:1;52575:14;:18;:65;;;;;52615:25;;52597:14;:43;;52575:65;52553:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;52713:23;52753:14;52739:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52713:55;;52779:23;52819:14;52805:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52779:55;;52850:9;52845:196;52869:14;52865:1;:18;52845:196;;;52926:1;52917:6;:10;;;;:::i;:::-;52905:6;52912:1;52905:9;;;;;;;;:::i;:::-;;;;;;;:22;;;::::0;::::1;52987:1;52954:30;52982:1;52973:6;:10;;;;:::i;:::-;52954:18;:30::i;:::-;:34;;;;:::i;:::-;52942:6;52949:1;52942:9;;;;;;;;:::i;:::-;;;;;;;:46;;;::::0;::::1;53003:26;53013:3;53027:1;53018:6;:10;;;;:::i;:::-;53003:9;:26::i;:::-;52885:3;;;;;:::i;:::-;;;;52845:196;;;;53064:17;;;;;;;;;;;53053:45;;;53099:6;53107;53053:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53156:14;53127:25;;:43;;;;;;;:::i;:::-;;;;;;;;53183:13;;;53207;;;53231;;;52456:796;;;52385:867:::0;;:::o;27966:164::-;28063:4;28087:18;:25;28106:5;28087:25;;;;;;;;;;;;;;;:35;28113:8;28087:35;;;;;;;;;;;;;;;;;;;;;;;;;28080:42;;27966:164;;;;:::o;3450:192::-;2781:12;:10;:12::i;:::-;2770:23;;:7;:5;:7::i;:::-;:23;;;2762:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3559:1:::1;3539:22;;:8;:22;;;;3531:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3615:19;3625:8;3615:9;:19::i;:::-;3450:192:::0;:::o;25832:293::-;25934:4;25982:25;25967:40;;;:11;:40;;;;:101;;;;26035:33;26020:48;;;:11;:48;;;;25967:101;:150;;;;26081:36;26105:11;26081:23;:36::i;:::-;25967:150;25951:166;;25832:293;;;:::o;29327:155::-;29392:4;29426:7;:14;;;;29416:7;:24;:58;;;;;29472:1;29444:30;;:7;29452;29444:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;29416:58;29409:65;;29327:155;;;:::o;1399:98::-;1452:7;1479:10;1472:17;;1399:98;:::o;31500:175::-;31602:2;31575:15;:24;31591:7;31575:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31659:7;31655:2;31620:47;;31629:24;31645:7;31629:15;:24::i;:::-;31620:47;;;;;;;;;;;;31500:175;;:::o;29488:349::-;29581:4;29606:16;29614:7;29606;:16::i;:::-;29598:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29682:13;29698:24;29714:7;29698:15;:24::i;:::-;29682:40;;29752:5;29741:16;;:7;:16;;;:51;;;;29785:7;29761:31;;:20;29773:7;29761:11;:20::i;:::-;:31;;;29741:51;:87;;;;29796:32;29813:5;29820:7;29796:16;:32::i;:::-;29741:87;29733:96;;;29488:349;;;;:::o;30977:517::-;31137:4;31109:32;;:24;31125:7;31109:15;:24::i;:::-;:32;;;31101:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;31220:1;31206:16;;:2;:16;;;;31198:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31276:39;31297:4;31303:2;31307:7;31276:20;:39::i;:::-;31380:29;31397:1;31401:7;31380:8;:29::i;:::-;31439:2;31420:7;31428;31420:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31478:7;31474:2;31459:27;;31468:4;31459:27;;;;;;;;;;;;30977:517;;;:::o;49071:120::-;48615:8;:6;:8::i;:::-;48607:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;49140:5:::1;49130:7;;:15;;;;;;;;;;;;;;;;;;49161:22;49170:12;:10;:12::i;:::-;49161:22;;;;;;:::i;:::-;;;;;;;;49071:120::o:0;3650:173::-;3706:16;3725:6;;;;;;;;;;;3706:25;;3751:8;3742:6;;:17;;;;;;;;;;;;;;;;;;3806:8;3775:40;;3796:8;3775:40;;;;;;;;;;;;3695:128;3650:173;:::o;48812:118::-;48338:8;:6;:8::i;:::-;48337:9;48329:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;48882:4:::1;48872:7;;:14;;;;;;;;;;;;;;;;;;48902:20;48909:12;:10;:12::i;:::-;48902:20;;;;;;:::i;:::-;;;;;;;;48812:118::o:0;54141:141::-;54233:10;54226:4;:17;;;;54259:15;;;;;;;;;;54141:141;;:::o;29843:110::-;29919:26;29929:2;29933:7;29919:26;;;;;;;;;;;;:9;:26::i;:::-;29843:110;;:::o;29006:315::-;29163:28;29173:4;29179:2;29183:7;29163:9;:28::i;:::-;29210:48;29233:4;29239:2;29243:7;29252:5;29210:22;:48::i;:::-;29202:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29006:315;;;;:::o;44802:1088::-;44879:17;44909:4;:20;;;44930:14;44946:4;44963:8;43626:1;44952:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44909:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45247:15;45265:82;45282:8;43626:1;45323:4;45330:6;:16;45337:8;45330:16;;;;;;;;;;;;45265;:82::i;:::-;45247:100;;45831:1;45812:6;:16;45819:8;45812:16;;;;;;;;;;;;:20;;;;:::i;:::-;45793:6;:16;45800:8;45793:16;;;;;;;;;;;:39;;;;45850:32;45864:8;45874:7;45850:13;:32::i;:::-;45843:39;;;44802:1088;;;;:::o;50577:99::-;50628:13;50661:7;50654:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50577:99;:::o;4083:723::-;4139:13;4369:1;4360:5;:10;4356:53;;;4387:10;;;;;;;;;;;;;;;;;;;;;4356:53;4419:12;4434:5;4419:20;;4450:14;4475:78;4490:1;4482:4;:9;4475:78;;4508:8;;;;;:::i;:::-;;;;4539:2;4531:10;;;;;:::i;:::-;;;4475:78;;;4563:19;4595:6;4585:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4563:39;;4613:154;4629:1;4620:5;:10;4613:154;;4657:1;4647:11;;;;;:::i;:::-;;;4724:2;4716:5;:10;;;;:::i;:::-;4703:2;:24;;;;:::i;:::-;4690:39;;4673:6;4680;4673:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4753:2;4744:11;;;;;:::i;:::-;;;4613:154;;;4791:6;4777:21;;;;;4083:723;;;;:::o;25185:157::-;25270:4;25309:25;25294:40;;;:11;:40;;;;25287:47;;25185:157;;;:::o;32486:126::-;;;;:::o;29959:321::-;30089:18;30095:2;30099:7;30089:5;:18::i;:::-;30140:54;30171:1;30175:2;30179:7;30188:5;30140:22;:54::i;:::-;30118:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29959:321;;;:::o;31681:799::-;31836:4;31857:15;:2;:13;;;:15::i;:::-;31853:620;;;31909:2;31893:36;;;31930:12;:10;:12::i;:::-;31944:4;31950:7;31959:5;31893:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31889:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32152:1;32135:6;:13;:18;32131:272;;;32178:60;;;;;;;;;;:::i;:::-;;;;;;;;32131:272;32353:6;32347:13;32338:6;32334:2;32330:15;32323:38;31889:529;32026:41;;;32016:51;;;:6;:51;;;;32009:58;;;;;31853:620;32457:4;32450:11;;31681:799;;;;;;;:::o;36170:271::-;36335:7;36391:8;36401:9;36412:10;36424:6;36380:51;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36370:62;;;;;;36362:71;;36355:78;;36170:271;;;;;;:::o;36838:174::-;36925:7;36979:8;36989:13;36962:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36952:52;;;;;;36945:59;;36838:174;;;;:::o;30286:346::-;30380:1;30366:16;;:2;:16;;;;30358:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30439:16;30447:7;30439;:16::i;:::-;30438:17;30430:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30501:45;30530:1;30534:2;30538:7;30501:20;:45::i;:::-;30557:7;30570:2;30557:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30616:7;30612:2;30591:33;;30608:1;30591:33;;;;;;;;;;;;30286:346;;:::o;17127:387::-;17187:4;17395:12;17462:7;17450:20;17442:28;;17505:1;17498:4;:8;17491:15;;;17127:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:117::-;8980:1;8977;8970:12;8994:117;9103:1;9100;9093:12;9134:568;9207:8;9217:6;9267:3;9260:4;9252:6;9248:17;9244:27;9234:122;;9275:79;;:::i;:::-;9234:122;9388:6;9375:20;9365:30;;9418:18;9410:6;9407:30;9404:117;;;9440:79;;:::i;:::-;9404:117;9554:4;9546:6;9542:17;9530:29;;9608:3;9600:4;9592:6;9588:17;9578:8;9574:32;9571:41;9568:128;;;9615:79;;:::i;:::-;9568:128;9134:568;;;;;:::o;9708:704::-;9803:6;9811;9819;9868:2;9856:9;9847:7;9843:23;9839:32;9836:119;;;9874:79;;:::i;:::-;9836:119;10022:1;10011:9;10007:17;9994:31;10052:18;10044:6;10041:30;10038:117;;;10074:79;;:::i;:::-;10038:117;10187:80;10259:7;10250:6;10239:9;10235:22;10187:80;:::i;:::-;10169:98;;;;9965:312;10316:2;10342:53;10387:7;10378:6;10367:9;10363:22;10342:53;:::i;:::-;10332:63;;10287:118;9708:704;;;;;:::o;10418:114::-;10485:6;10519:5;10513:12;10503:22;;10418:114;;;:::o;10538:184::-;10637:11;10671:6;10666:3;10659:19;10711:4;10706:3;10702:14;10687:29;;10538:184;;;;:::o;10728:132::-;10795:4;10818:3;10810:11;;10848:4;10843:3;10839:14;10831:22;;10728:132;;;:::o;10866:108::-;10943:24;10961:5;10943:24;:::i;:::-;10938:3;10931:37;10866:108;;:::o;10980:179::-;11049:10;11070:46;11112:3;11104:6;11070:46;:::i;:::-;11148:4;11143:3;11139:14;11125:28;;10980:179;;;;:::o;11165:113::-;11235:4;11267;11262:3;11258:14;11250:22;;11165:113;;;:::o;11314:732::-;11433:3;11462:54;11510:5;11462:54;:::i;:::-;11532:86;11611:6;11606:3;11532:86;:::i;:::-;11525:93;;11642:56;11692:5;11642:56;:::i;:::-;11721:7;11752:1;11737:284;11762:6;11759:1;11756:13;11737:284;;;11838:6;11832:13;11865:63;11924:3;11909:13;11865:63;:::i;:::-;11858:70;;11951:60;12004:6;11951:60;:::i;:::-;11941:70;;11797:224;11784:1;11781;11777:9;11772:14;;11737:284;;;11741:14;12037:3;12030:10;;11438:608;;;11314:732;;;;:::o;12052:373::-;12195:4;12233:2;12222:9;12218:18;12210:26;;12282:9;12276:4;12272:20;12268:1;12257:9;12253:17;12246:47;12310:108;12413:4;12404:6;12310:108;:::i;:::-;12302:116;;12052:373;;;;:::o;12431:77::-;12468:7;12497:5;12486:16;;12431:77;;;:::o;12514:122::-;12587:24;12605:5;12587:24;:::i;:::-;12580:5;12577:35;12567:63;;12626:1;12623;12616:12;12567:63;12514:122;:::o;12642:139::-;12688:5;12726:6;12713:20;12704:29;;12742:33;12769:5;12742:33;:::i;:::-;12642:139;;;;:::o;12787:474::-;12855:6;12863;12912:2;12900:9;12891:7;12887:23;12883:32;12880:119;;;12918:79;;:::i;:::-;12880:119;13038:1;13063:53;13108:7;13099:6;13088:9;13084:22;13063:53;:::i;:::-;13053:63;;13009:117;13165:2;13191:53;13236:7;13227:6;13216:9;13212:22;13191:53;:::i;:::-;13181:63;;13136:118;12787:474;;;;;:::o;13267:116::-;13337:21;13352:5;13337:21;:::i;:::-;13330:5;13327:32;13317:60;;13373:1;13370;13363:12;13317:60;13267:116;:::o;13389:133::-;13432:5;13470:6;13457:20;13448:29;;13486:30;13510:5;13486:30;:::i;:::-;13389:133;;;;:::o;13528:468::-;13593:6;13601;13650:2;13638:9;13629:7;13625:23;13621:32;13618:119;;;13656:79;;:::i;:::-;13618:119;13776:1;13801:53;13846:7;13837:6;13826:9;13822:22;13801:53;:::i;:::-;13791:63;;13747:117;13903:2;13929:50;13971:7;13962:6;13951:9;13947:22;13929:50;:::i;:::-;13919:60;;13874:115;13528:468;;;;;:::o;14002:307::-;14063:4;14153:18;14145:6;14142:30;14139:56;;;14175:18;;:::i;:::-;14139:56;14213:29;14235:6;14213:29;:::i;:::-;14205:37;;14297:4;14291;14287:15;14279:23;;14002:307;;;:::o;14315:410::-;14392:5;14417:65;14433:48;14474:6;14433:48;:::i;:::-;14417:65;:::i;:::-;14408:74;;14505:6;14498:5;14491:21;14543:4;14536:5;14532:16;14581:3;14572:6;14567:3;14563:16;14560:25;14557:112;;;14588:79;;:::i;:::-;14557:112;14678:41;14712:6;14707:3;14702;14678:41;:::i;:::-;14398:327;14315:410;;;;;:::o;14744:338::-;14799:5;14848:3;14841:4;14833:6;14829:17;14825:27;14815:122;;14856:79;;:::i;:::-;14815:122;14973:6;14960:20;14998:78;15072:3;15064:6;15057:4;15049:6;15045:17;14998:78;:::i;:::-;14989:87;;14805:277;14744:338;;;;:::o;15088:943::-;15183:6;15191;15199;15207;15256:3;15244:9;15235:7;15231:23;15227:33;15224:120;;;15263:79;;:::i;:::-;15224:120;15383:1;15408:53;15453:7;15444:6;15433:9;15429:22;15408:53;:::i;:::-;15398:63;;15354:117;15510:2;15536:53;15581:7;15572:6;15561:9;15557:22;15536:53;:::i;:::-;15526:63;;15481:118;15638:2;15664:53;15709:7;15700:6;15689:9;15685:22;15664:53;:::i;:::-;15654:63;;15609:118;15794:2;15783:9;15779:18;15766:32;15825:18;15817:6;15814:30;15811:117;;;15847:79;;:::i;:::-;15811:117;15952:62;16006:7;15997:6;15986:9;15982:22;15952:62;:::i;:::-;15942:72;;15737:287;15088:943;;;;;;;:::o;16037:118::-;16124:24;16142:5;16124:24;:::i;:::-;16119:3;16112:37;16037:118;;:::o;16161:222::-;16254:4;16292:2;16281:9;16277:18;16269:26;;16305:71;16373:1;16362:9;16358:17;16349:6;16305:71;:::i;:::-;16161:222;;;;:::o;16389:474::-;16457:6;16465;16514:2;16502:9;16493:7;16489:23;16485:32;16482:119;;;16520:79;;:::i;:::-;16482:119;16640:1;16665:53;16710:7;16701:6;16690:9;16686:22;16665:53;:::i;:::-;16655:63;;16611:117;16767:2;16793:53;16838:7;16829:6;16818:9;16814:22;16793:53;:::i;:::-;16783:63;;16738:118;16389:474;;;;;:::o;16869:180::-;16917:77;16914:1;16907:88;17014:4;17011:1;17004:15;17038:4;17035:1;17028:15;17055:320;17099:6;17136:1;17130:4;17126:12;17116:22;;17183:1;17177:4;17173:12;17204:18;17194:81;;17260:4;17252:6;17248:17;17238:27;;17194:81;17322:2;17314:6;17311:14;17291:18;17288:38;17285:84;;;17341:18;;:::i;:::-;17285:84;17106:269;17055:320;;;:::o;17381:231::-;17521:34;17517:1;17509:6;17505:14;17498:58;17590:14;17585:2;17577:6;17573:15;17566:39;17381:231;:::o;17618:366::-;17760:3;17781:67;17845:2;17840:3;17781:67;:::i;:::-;17774:74;;17857:93;17946:3;17857:93;:::i;:::-;17975:2;17970:3;17966:12;17959:19;;17618:366;;;:::o;17990:419::-;18156:4;18194:2;18183:9;18179:18;18171:26;;18243:9;18237:4;18233:20;18229:1;18218:9;18214:17;18207:47;18271:131;18397:4;18271:131;:::i;:::-;18263:139;;17990:419;;;:::o;18415:220::-;18555:34;18551:1;18543:6;18539:14;18532:58;18624:3;18619:2;18611:6;18607:15;18600:28;18415:220;:::o;18641:366::-;18783:3;18804:67;18868:2;18863:3;18804:67;:::i;:::-;18797:74;;18880:93;18969:3;18880:93;:::i;:::-;18998:2;18993:3;18989:12;18982:19;;18641:366;;;:::o;19013:419::-;19179:4;19217:2;19206:9;19202:18;19194:26;;19266:9;19260:4;19256:20;19252:1;19241:9;19237:17;19230:47;19294:131;19420:4;19294:131;:::i;:::-;19286:139;;19013:419;;;:::o;19438:243::-;19578:34;19574:1;19566:6;19562:14;19555:58;19647:26;19642:2;19634:6;19630:15;19623:51;19438:243;:::o;19687:366::-;19829:3;19850:67;19914:2;19909:3;19850:67;:::i;:::-;19843:74;;19926:93;20015:3;19926:93;:::i;:::-;20044:2;20039:3;20035:12;20028:19;;19687:366;;;:::o;20059:419::-;20225:4;20263:2;20252:9;20248:18;20240:26;;20312:9;20306:4;20302:20;20298:1;20287:9;20283:17;20276:47;20340:131;20466:4;20340:131;:::i;:::-;20332:139;;20059:419;;;:::o;20484:180::-;20532:77;20529:1;20522:88;20629:4;20626:1;20619:15;20653:4;20650:1;20643:15;20670:191;20710:4;20730:20;20748:1;20730:20;:::i;:::-;20725:25;;20764:20;20782:1;20764:20;:::i;:::-;20759:25;;20803:1;20800;20797:8;20794:34;;;20808:18;;:::i;:::-;20794:34;20853:1;20850;20846:9;20838:17;;20670:191;;;;:::o;20867:79::-;20906:7;20935:5;20924:16;;20867:79;;;:::o;20952:157::-;21057:45;21077:24;21095:5;21077:24;:::i;:::-;21057:45;:::i;:::-;21052:3;21045:58;20952:157;;:::o;21115:94::-;21148:8;21196:5;21192:2;21188:14;21167:35;;21115:94;;;:::o;21215:::-;21254:7;21283:20;21297:5;21283:20;:::i;:::-;21272:31;;21215:94;;;:::o;21315:100::-;21354:7;21383:26;21403:5;21383:26;:::i;:::-;21372:37;;21315:100;;;:::o;21421:157::-;21526:45;21546:24;21564:5;21546:24;:::i;:::-;21526:45;:::i;:::-;21521:3;21514:58;21421:157;;:::o;21584:79::-;21623:7;21652:5;21641:16;;21584:79;;;:::o;21669:157::-;21774:45;21794:24;21812:5;21794:24;:::i;:::-;21774:45;:::i;:::-;21769:3;21762:58;21669:157;;:::o;21832:820::-;22056:3;22071:75;22142:3;22133:6;22071:75;:::i;:::-;22171:2;22166:3;22162:12;22155:19;;22184:75;22255:3;22246:6;22184:75;:::i;:::-;22284:2;22279:3;22275:12;22268:19;;22297:75;22368:3;22359:6;22297:75;:::i;:::-;22397:2;22392:3;22388:12;22381:19;;22410:75;22481:3;22472:6;22410:75;:::i;:::-;22510:2;22505:3;22501:12;22494:19;;22523:75;22594:3;22585:6;22523:75;:::i;:::-;22623:2;22618:3;22614:12;22607:19;;22643:3;22636:10;;21832:820;;;;;;;;:::o;22658:180::-;22706:77;22703:1;22696:88;22803:4;22800:1;22793:15;22827:4;22824:1;22817:15;22844:176;22876:1;22893:20;22911:1;22893:20;:::i;:::-;22888:25;;22927:20;22945:1;22927:20;:::i;:::-;22922:25;;22966:1;22956:35;;22971:18;;:::i;:::-;22956:35;23012:1;23009;23005:9;23000:14;;22844:176;;;;:::o;23026:236::-;23166:34;23162:1;23154:6;23150:14;23143:58;23235:19;23230:2;23222:6;23218:15;23211:44;23026:236;:::o;23268:366::-;23410:3;23431:67;23495:2;23490:3;23431:67;:::i;:::-;23424:74;;23507:93;23596:3;23507:93;:::i;:::-;23625:2;23620:3;23616:12;23609:19;;23268:366;;;:::o;23640:419::-;23806:4;23844:2;23833:9;23829:18;23821:26;;23893:9;23887:4;23883:20;23879:1;23868:9;23864:17;23857:47;23921:131;24047:4;23921:131;:::i;:::-;23913:139;;23640:419;;;:::o;24065:172::-;24205:24;24201:1;24193:6;24189:14;24182:48;24065:172;:::o;24243:366::-;24385:3;24406:67;24470:2;24465:3;24406:67;:::i;:::-;24399:74;;24482:93;24571:3;24482:93;:::i;:::-;24600:2;24595:3;24591:12;24584:19;;24243:366;;;:::o;24615:419::-;24781:4;24819:2;24808:9;24804:18;24796:26;;24868:9;24862:4;24858:20;24854:1;24843:9;24839:17;24832:47;24896:131;25022:4;24896:131;:::i;:::-;24888:139;;24615:419;;;:::o;25040:180::-;25088:77;25085:1;25078:88;25185:4;25182:1;25175:15;25209:4;25206:1;25199:15;25226:233;25265:3;25288:24;25306:5;25288:24;:::i;:::-;25279:33;;25334:66;25327:5;25324:77;25321:103;;;25404:18;;:::i;:::-;25321:103;25451:1;25444:5;25440:13;25433:20;;25226:233;;;:::o;25465:182::-;25605:34;25601:1;25593:6;25589:14;25582:58;25465:182;:::o;25653:366::-;25795:3;25816:67;25880:2;25875:3;25816:67;:::i;:::-;25809:74;;25892:93;25981:3;25892:93;:::i;:::-;26010:2;26005:3;26001:12;25994:19;;25653:366;;;:::o;26025:419::-;26191:4;26229:2;26218:9;26214:18;26206:26;;26278:9;26272:4;26268:20;26264:1;26253:9;26249:17;26242:47;26306:131;26432:4;26306:131;:::i;:::-;26298:139;;26025:419;;;:::o;26450:173::-;26590:25;26586:1;26578:6;26574:14;26567:49;26450:173;:::o;26629:366::-;26771:3;26792:67;26856:2;26851:3;26792:67;:::i;:::-;26785:74;;26868:93;26957:3;26868:93;:::i;:::-;26986:2;26981:3;26977:12;26970:19;;26629:366;;;:::o;27001:419::-;27167:4;27205:2;27194:9;27190:18;27182:26;;27254:9;27248:4;27244:20;27240:1;27229:9;27225:17;27218:47;27282:131;27408:4;27282:131;:::i;:::-;27274:139;;27001:419;;;:::o;27426:228::-;27566:34;27562:1;27554:6;27550:14;27543:58;27635:11;27630:2;27622:6;27618:15;27611:36;27426:228;:::o;27660:366::-;27802:3;27823:67;27887:2;27882:3;27823:67;:::i;:::-;27816:74;;27899:93;27988:3;27899:93;:::i;:::-;28017:2;28012:3;28008:12;28001:19;;27660:366;;;:::o;28032:419::-;28198:4;28236:2;28225:9;28221:18;28213:26;;28285:9;28279:4;28275:20;28271:1;28260:9;28256:17;28249:47;28313:131;28439:4;28313:131;:::i;:::-;28305:139;;28032:419;;;:::o;28457:229::-;28597:34;28593:1;28585:6;28581:14;28574:58;28666:12;28661:2;28653:6;28649:15;28642:37;28457:229;:::o;28692:366::-;28834:3;28855:67;28919:2;28914:3;28855:67;:::i;:::-;28848:74;;28931:93;29020:3;28931:93;:::i;:::-;29049:2;29044:3;29040:12;29033:19;;28692:366;;;:::o;29064:419::-;29230:4;29268:2;29257:9;29253:18;29245:26;;29317:9;29311:4;29307:20;29303:1;29292:9;29288:17;29281:47;29345:131;29471:4;29345:131;:::i;:::-;29337:139;;29064:419;;;:::o;29489:181::-;29629:33;29625:1;29617:6;29613:14;29606:57;29489:181;:::o;29676:366::-;29818:3;29839:67;29903:2;29898:3;29839:67;:::i;:::-;29832:74;;29915:93;30004:3;29915:93;:::i;:::-;30033:2;30028:3;30024:12;30017:19;;29676:366;;;:::o;30048:419::-;30214:4;30252:2;30241:9;30237:18;30229:26;;30301:9;30295:4;30291:20;30287:1;30276:9;30272:17;30265:47;30329:131;30455:4;30329:131;:::i;:::-;30321:139;;30048:419;;;:::o;30473:166::-;30613:18;30609:1;30601:6;30597:14;30590:42;30473:166;:::o;30645:366::-;30787:3;30808:67;30872:2;30867:3;30808:67;:::i;:::-;30801:74;;30884:93;30973:3;30884:93;:::i;:::-;31002:2;30997:3;30993:12;30986:19;;30645:366;;;:::o;31017:419::-;31183:4;31221:2;31210:9;31206:18;31198:26;;31270:9;31264:4;31260:20;31256:1;31245:9;31241:17;31234:47;31298:131;31424:4;31298:131;:::i;:::-;31290:139;;31017:419;;;:::o;31442:162::-;31582:14;31578:1;31570:6;31566:14;31559:38;31442:162;:::o;31610:366::-;31752:3;31773:67;31837:2;31832:3;31773:67;:::i;:::-;31766:74;;31849:93;31938:3;31849:93;:::i;:::-;31967:2;31962:3;31958:12;31951:19;;31610:366;;;:::o;31982:419::-;32148:4;32186:2;32175:9;32171:18;32163:26;;32235:9;32229:4;32225:20;32221:1;32210:9;32206:17;32199:47;32263:131;32389:4;32263:131;:::i;:::-;32255:139;;31982:419;;;:::o;32407:305::-;32447:3;32466:20;32484:1;32466:20;:::i;:::-;32461:25;;32500:20;32518:1;32500:20;:::i;:::-;32495:25;;32654:1;32586:66;32582:74;32579:1;32576:81;32573:107;;;32660:18;;:::i;:::-;32573:107;32704:1;32701;32697:9;32690:16;;32407:305;;;;:::o;32718:158::-;32858:10;32854:1;32846:6;32842:14;32835:34;32718:158;:::o;32882:365::-;33024:3;33045:66;33109:1;33104:3;33045:66;:::i;:::-;33038:73;;33120:93;33209:3;33120:93;:::i;:::-;33238:2;33233:3;33229:12;33222:19;;32882:365;;;:::o;33253:419::-;33419:4;33457:2;33446:9;33442:18;33434:26;;33506:9;33500:4;33496:20;33492:1;33481:9;33477:17;33470:47;33534:131;33660:4;33534:131;:::i;:::-;33526:139;;33253:419;;;:::o;33678:348::-;33718:7;33741:20;33759:1;33741:20;:::i;:::-;33736:25;;33775:20;33793:1;33775:20;:::i;:::-;33770:25;;33963:1;33895:66;33891:74;33888:1;33885:81;33880:1;33873:9;33866:17;33862:105;33859:131;;;33970:18;;:::i;:::-;33859:131;34018:1;34015;34011:9;34000:20;;33678:348;;;;:::o;34032:143::-;34089:5;34120:6;34114:13;34105:22;;34136:33;34163:5;34136:33;:::i;:::-;34032:143;;;;:::o;34181:351::-;34251:6;34300:2;34288:9;34279:7;34275:23;34271:32;34268:119;;;34306:79;;:::i;:::-;34268:119;34426:1;34451:64;34507:7;34498:6;34487:9;34483:22;34451:64;:::i;:::-;34441:74;;34397:128;34181:351;;;;:::o;34538:160::-;34678:12;34674:1;34666:6;34662:14;34655:36;34538:160;:::o;34704:366::-;34846:3;34867:67;34931:2;34926:3;34867:67;:::i;:::-;34860:74;;34943:93;35032:3;34943:93;:::i;:::-;35061:2;35056:3;35052:12;35045:19;;34704:366;;;:::o;35076:419::-;35242:4;35280:2;35269:9;35265:18;35257:26;;35329:9;35323:4;35319:20;35315:1;35304:9;35300:17;35293:47;35357:131;35483:4;35357:131;:::i;:::-;35349:139;;35076:419;;;:::o;35501:332::-;35622:4;35660:2;35649:9;35645:18;35637:26;;35673:71;35741:1;35730:9;35726:17;35717:6;35673:71;:::i;:::-;35754:72;35822:2;35811:9;35807:18;35798:6;35754:72;:::i;:::-;35501:332;;;;;:::o;35839:634::-;36060:4;36098:2;36087:9;36083:18;36075:26;;36147:9;36141:4;36137:20;36133:1;36122:9;36118:17;36111:47;36175:108;36278:4;36269:6;36175:108;:::i;:::-;36167:116;;36330:9;36324:4;36320:20;36315:2;36304:9;36300:18;36293:48;36358:108;36461:4;36452:6;36358:108;:::i;:::-;36350:116;;35839:634;;;;;:::o;36479:175::-;36619:27;36615:1;36607:6;36603:14;36596:51;36479:175;:::o;36660:366::-;36802:3;36823:67;36887:2;36882:3;36823:67;:::i;:::-;36816:74;;36899:93;36988:3;36899:93;:::i;:::-;37017:2;37012:3;37008:12;37001:19;;36660:366;;;:::o;37032:419::-;37198:4;37236:2;37225:9;37221:18;37213:26;;37285:9;37279:4;37275:20;37271:1;37260:9;37256:17;37249:47;37313:131;37439:4;37313:131;:::i;:::-;37305:139;;37032:419;;;:::o;37457:165::-;37597:17;37593:1;37585:6;37581:14;37574:41;37457:165;:::o;37628:366::-;37770:3;37791:67;37855:2;37850:3;37791:67;:::i;:::-;37784:74;;37867:93;37956:3;37867:93;:::i;:::-;37985:2;37980:3;37976:12;37969:19;;37628:366;;;:::o;38000:419::-;38166:4;38204:2;38193:9;38189:18;38181:26;;38253:9;38247:4;38243:20;38239:1;38228:9;38224:17;38217:47;38281:131;38407:4;38281:131;:::i;:::-;38273:139;;38000:419;;;:::o;38425:220::-;38565:34;38561:1;38553:6;38549:14;38542:58;38634:3;38629:2;38621:6;38617:15;38610:28;38425:220;:::o;38651:366::-;38793:3;38814:67;38878:2;38873:3;38814:67;:::i;:::-;38807:74;;38890:93;38979:3;38890:93;:::i;:::-;39008:2;39003:3;38999:12;38992:19;;38651:366;;;:::o;39023:419::-;39189:4;39227:2;39216:9;39212:18;39204:26;;39276:9;39270:4;39266:20;39262:1;39251:9;39247:17;39240:47;39304:131;39430:4;39304:131;:::i;:::-;39296:139;;39023:419;;;:::o;39448:148::-;39550:11;39587:3;39572:18;;39448:148;;;;:::o;39602:377::-;39708:3;39736:39;39769:5;39736:39;:::i;:::-;39791:89;39873:6;39868:3;39791:89;:::i;:::-;39784:96;;39889:52;39934:6;39929:3;39922:4;39915:5;39911:16;39889:52;:::i;:::-;39966:6;39961:3;39957:16;39950:23;;39712:267;39602:377;;;;:::o;39985:155::-;40125:7;40121:1;40113:6;40109:14;40102:31;39985:155;:::o;40146:400::-;40306:3;40327:84;40409:1;40404:3;40327:84;:::i;:::-;40320:91;;40420:93;40509:3;40420:93;:::i;:::-;40538:1;40533:3;40529:11;40522:18;;40146:400;;;:::o;40552:701::-;40833:3;40855:95;40946:3;40937:6;40855:95;:::i;:::-;40848:102;;40967:95;41058:3;41049:6;40967:95;:::i;:::-;40960:102;;41079:148;41223:3;41079:148;:::i;:::-;41072:155;;41244:3;41237:10;;40552:701;;;;;:::o;41259:182::-;41399:34;41395:1;41387:6;41383:14;41376:58;41259:182;:::o;41447:366::-;41589:3;41610:67;41674:2;41669:3;41610:67;:::i;:::-;41603:74;;41686:93;41775:3;41686:93;:::i;:::-;41804:2;41799:3;41795:12;41788:19;;41447:366;;;:::o;41819:419::-;41985:4;42023:2;42012:9;42008:18;42000:26;;42072:9;42066:4;42062:20;42058:1;42047:9;42043:17;42036:47;42100:131;42226:4;42100:131;:::i;:::-;42092:139;;41819:419;;;:::o;42244:225::-;42384:34;42380:1;42372:6;42368:14;42361:58;42453:8;42448:2;42440:6;42436:15;42429:33;42244:225;:::o;42475:366::-;42617:3;42638:67;42702:2;42697:3;42638:67;:::i;:::-;42631:74;;42714:93;42803:3;42714:93;:::i;:::-;42832:2;42827:3;42823:12;42816:19;;42475:366;;;:::o;42847:419::-;43013:4;43051:2;43040:9;43036:18;43028:26;;43100:9;43094:4;43090:20;43086:1;43075:9;43071:17;43064:47;43128:131;43254:4;43128:131;:::i;:::-;43120:139;;42847:419;;;:::o;43272:231::-;43412:34;43408:1;43400:6;43396:14;43389:58;43481:14;43476:2;43468:6;43464:15;43457:39;43272:231;:::o;43509:366::-;43651:3;43672:67;43736:2;43731:3;43672:67;:::i;:::-;43665:74;;43748:93;43837:3;43748:93;:::i;:::-;43866:2;43861:3;43857:12;43850:19;;43509:366;;;:::o;43881:419::-;44047:4;44085:2;44074:9;44070:18;44062:26;;44134:9;44128:4;44124:20;44120:1;44109:9;44105:17;44098:47;44162:131;44288:4;44162:131;:::i;:::-;44154:139;;43881:419;;;:::o;44306:228::-;44446:34;44442:1;44434:6;44430:14;44423:58;44515:11;44510:2;44502:6;44498:15;44491:36;44306:228;:::o;44540:366::-;44682:3;44703:67;44767:2;44762:3;44703:67;:::i;:::-;44696:74;;44779:93;44868:3;44779:93;:::i;:::-;44897:2;44892:3;44888:12;44881:19;;44540:366;;;:::o;44912:419::-;45078:4;45116:2;45105:9;45101:18;45093:26;;45165:9;45159:4;45155:20;45151:1;45140:9;45136:17;45129:47;45193:131;45319:4;45193:131;:::i;:::-;45185:139;;44912:419;;;:::o;45337:223::-;45477:34;45473:1;45465:6;45461:14;45454:58;45546:6;45541:2;45533:6;45529:15;45522:31;45337:223;:::o;45566:366::-;45708:3;45729:67;45793:2;45788:3;45729:67;:::i;:::-;45722:74;;45805:93;45894:3;45805:93;:::i;:::-;45923:2;45918:3;45914:12;45907:19;;45566:366;;;:::o;45938:419::-;46104:4;46142:2;46131:9;46127:18;46119:26;;46191:9;46185:4;46181:20;46177:1;46166:9;46162:17;46155:47;46219:131;46345:4;46219:131;:::i;:::-;46211:139;;45938:419;;;:::o;46363:170::-;46503:22;46499:1;46491:6;46487:14;46480:46;46363:170;:::o;46539:366::-;46681:3;46702:67;46766:2;46761:3;46702:67;:::i;:::-;46695:74;;46778:93;46867:3;46778:93;:::i;:::-;46896:2;46891:3;46887:12;46880:19;;46539:366;;;:::o;46911:419::-;47077:4;47115:2;47104:9;47100:18;47092:26;;47164:9;47158:4;47154:20;47150:1;47139:9;47135:17;47128:47;47192:131;47318:4;47192:131;:::i;:::-;47184:139;;46911:419;;;:::o;47336:237::-;47476:34;47472:1;47464:6;47460:14;47453:58;47545:20;47540:2;47532:6;47528:15;47521:45;47336:237;:::o;47579:366::-;47721:3;47742:67;47806:2;47801:3;47742:67;:::i;:::-;47735:74;;47818:93;47907:3;47818:93;:::i;:::-;47936:2;47931:3;47927:12;47920:19;;47579:366;;;:::o;47951:419::-;48117:4;48155:2;48144:9;48140:18;48132:26;;48204:9;48198:4;48194:20;48190:1;48179:9;48175:17;48168:47;48232:131;48358:4;48232:131;:::i;:::-;48224:139;;47951:419;;;:::o;48376:332::-;48497:4;48535:2;48524:9;48520:18;48512:26;;48548:71;48616:1;48605:9;48601:17;48592:6;48548:71;:::i;:::-;48629:72;48697:2;48686:9;48682:18;48673:6;48629:72;:::i;:::-;48376:332;;;;;:::o;48714:98::-;48765:6;48799:5;48793:12;48783:22;;48714:98;;;:::o;48818:168::-;48901:11;48935:6;48930:3;48923:19;48975:4;48970:3;48966:14;48951:29;;48818:168;;;;:::o;48992:360::-;49078:3;49106:38;49138:5;49106:38;:::i;:::-;49160:70;49223:6;49218:3;49160:70;:::i;:::-;49153:77;;49239:52;49284:6;49279:3;49272:4;49265:5;49261:16;49239:52;:::i;:::-;49316:29;49338:6;49316:29;:::i;:::-;49311:3;49307:39;49300:46;;49082:270;48992:360;;;;:::o;49358:529::-;49525:4;49563:2;49552:9;49548:18;49540:26;;49576:71;49644:1;49633:9;49629:17;49620:6;49576:71;:::i;:::-;49657:72;49725:2;49714:9;49710:18;49701:6;49657:72;:::i;:::-;49776:9;49770:4;49766:20;49761:2;49750:9;49746:18;49739:48;49804:76;49875:4;49866:6;49804:76;:::i;:::-;49796:84;;49358:529;;;;;;:::o;49893:137::-;49947:5;49978:6;49972:13;49963:22;;49994:30;50018:5;49994:30;:::i;:::-;49893:137;;;;:::o;50036:345::-;50103:6;50152:2;50140:9;50131:7;50127:23;50123:32;50120:119;;;50158:79;;:::i;:::-;50120:119;50278:1;50303:61;50356:7;50347:6;50336:9;50332:22;50303:61;:::i;:::-;50293:71;;50249:125;50036:345;;;;:::o;50387:185::-;50427:1;50444:20;50462:1;50444:20;:::i;:::-;50439:25;;50478:20;50496:1;50478:20;:::i;:::-;50473:25;;50517:1;50507:35;;50522:18;;:::i;:::-;50507:35;50564:1;50561;50557:9;50552:14;;50387:185;;;;:::o;50578:640::-;50773:4;50811:3;50800:9;50796:19;50788:27;;50825:71;50893:1;50882:9;50878:17;50869:6;50825:71;:::i;:::-;50906:72;50974:2;50963:9;50959:18;50950:6;50906:72;:::i;:::-;50988;51056:2;51045:9;51041:18;51032:6;50988:72;:::i;:::-;51107:9;51101:4;51097:20;51092:2;51081:9;51077:18;51070:48;51135:76;51206:4;51197:6;51135:76;:::i;:::-;51127:84;;50578:640;;;;;;;:::o;51224:141::-;51280:5;51311:6;51305:13;51296:22;;51327:32;51353:5;51327:32;:::i;:::-;51224:141;;;;:::o;51371:349::-;51440:6;51489:2;51477:9;51468:7;51464:23;51460:32;51457:119;;;51495:79;;:::i;:::-;51457:119;51615:1;51640:63;51695:7;51686:6;51675:9;51671:22;51640:63;:::i;:::-;51630:73;;51586:127;51371:349;;;;:::o;51726:553::-;51903:4;51941:3;51930:9;51926:19;51918:27;;51955:71;52023:1;52012:9;52008:17;51999:6;51955:71;:::i;:::-;52036:72;52104:2;52093:9;52089:18;52080:6;52036:72;:::i;:::-;52118;52186:2;52175:9;52171:18;52162:6;52118:72;:::i;:::-;52200;52268:2;52257:9;52253:18;52244:6;52200:72;:::i;:::-;51726:553;;;;;;;:::o;52285:397::-;52425:3;52440:75;52511:3;52502:6;52440:75;:::i;:::-;52540:2;52535:3;52531:12;52524:19;;52553:75;52624:3;52615:6;52553:75;:::i;:::-;52653:2;52648:3;52644:12;52637:19;;52673:3;52666:10;;52285:397;;;;;:::o;52688:182::-;52828:34;52824:1;52816:6;52812:14;52805:58;52688:182;:::o;52876:366::-;53018:3;53039:67;53103:2;53098:3;53039:67;:::i;:::-;53032:74;;53115:93;53204:3;53115:93;:::i;:::-;53233:2;53228:3;53224:12;53217:19;;52876:366;;;:::o;53248:419::-;53414:4;53452:2;53441:9;53437:18;53429:26;;53501:9;53495:4;53491:20;53487:1;53476:9;53472:17;53465:47;53529:131;53655:4;53529:131;:::i;:::-;53521:139;;53248:419;;;:::o;53673:178::-;53813:30;53809:1;53801:6;53797:14;53790:54;53673:178;:::o;53857:366::-;53999:3;54020:67;54084:2;54079:3;54020:67;:::i;:::-;54013:74;;54096:93;54185:3;54096:93;:::i;:::-;54214:2;54209:3;54205:12;54198:19;;53857:366;;;:::o;54229:419::-;54395:4;54433:2;54422:9;54418:18;54410:26;;54482:9;54476:4;54472:20;54468:1;54457:9;54453:17;54446:47;54510:131;54636:4;54510:131;:::i;:::-;54502:139;;54229:419;;;:::o

Swarm Source

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