Token b

Overview ERC-721

Total Supply:
2 b

Holders:
2 addresses

Profile Summary

 
Contract:
0x5d12e365c5d48dfc85ca7a5c7dd18792947edba60x5D12e365C5D48dfC85ca7a5c7Dd18792947EdBa6

Balance
0 b
0x0000000000000000000000000000000000000000
Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Breeder

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
 
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
 
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
 
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
 
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
 
    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);
 
    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;
 
    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
 
 
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
 
    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}
 
 
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
pragma solidity ^0.8.0;
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
 
// File: @openzeppelin/contracts/utils/Strings.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
 
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
 
// File: @openzeppelin/contracts/utils/Address.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
 
    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
 
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
 
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
 
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
 
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
 
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
 
 
 
pragma solidity ^0.8.0;
 
 
/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
 
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity ^0.8.0;
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
 
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
 
    // Token name
    string private _name;
 
    // Token symbol
    string private _symbol;
 
    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;
 
    // Mapping owner address to token count
    mapping(address => uint256) private _balances;
 
    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;
 
    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
 
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
 
    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
 
    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
 
    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
 
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
 
    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
 
    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");
 
        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );
 
        _approve(to, tokenId);
    }
 
    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");
 
        return _tokenApprovals[tokenId];
    }
 
    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");
 
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
 
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
 
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
 
        _transfer(from, to, tokenId);
    }
 
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
 
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
 
    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
 
    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
 
    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
 
    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
 
    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
 
        _beforeTokenTransfer(address(0), to, tokenId);
 
        _balances[to] += 1;
        _owners[tokenId] = to;
 
        emit Transfer(address(0), to, tokenId);
    }
 
    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
 
        _beforeTokenTransfer(owner, address(0), tokenId);
 
        // Clear approvals
        _approve(address(0), tokenId);
 
        _balances[owner] -= 1;
        delete _owners[tokenId];
 
        emit Transfer(owner, address(0), tokenId);
    }
 
    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");
 
        _beforeTokenTransfer(from, to, tokenId);
 
        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
 
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
 
        emit Transfer(from, to, tokenId);
    }
 
    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
 
    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
 
    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
 
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
 
 
 
pragma solidity ^0.8.0;
 
 
 
/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
 
    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;
 
    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;
 
    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;
 
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
 
    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }
 
    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }
 
    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }
 
    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);
 
        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }
 
    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }
 
    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }
 
    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).
 
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];
 
        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
 
            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }
 
        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }
 
    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).
 
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];
 
        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];
 
        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
 
        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}
 
 
// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }
 
    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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 making 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 ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
pragma solidity >=0.7.0 <0.9.0;

//interfaces

 interface IBurn {
      function burn(uint256 _amount) external;
 }
  interface IBalance {
      function balanceOf(address owner) external returns (uint256);
  }
  interface IBurner {
      function lootBurn(address owner, uint _id, uint _amount) external;
  }
   interface IOwner {
      function ownerOf(uint256 tokenId) external returns (address);
  }
  

contract Breeder is ERC721Enumerable, Ownable, ReentrancyGuard {
  using SafeERC20 for IERC20;
  using Strings for uint256;
 
  string public baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 10 ether;
  uint256 public maxSupply = 8076;
  uint256 public trueSupply = 0;
  uint256 public maxMintAmount = 1;
  uint256 public blacklistIndex1;
  uint256 public blacklistIndex2;
  uint256 public blacklistIndex3;
  uint256 public genRate1 = 600000000000000000;
  uint256 public genRate2 = 800000000000000000;
  uint256 public genRate3 = 1000000000000000000;
  uint256 public genRate4 = 1200000000000000000;
  uint256 public gen1 = 10;
  uint256 public gen2 = 20;
  uint256 public gen3 = 30;
  uint256 public gen4 = 40;
  uint256 public limitCount = 3;
  uint256 public constant MiniCandy = 0;
  uint256 public constant unBlacklist = 1;
  uint256 public constant jobLvlUp = 2;
  uint256 public constant fusionLvlUp1 = 3;
  uint256 public constant fusionLvlUp2 = 4;
  uint256 public constant fusionLvlUp3 = 5;
  uint256 public constant fusionLvlUp4 = 6;
  bool public paused = false;
  bool public genPaused = false;
  bool public limiter = true; 
  address public chillaContract;
  address public guineaContract;
  address public treasury;
  address public erc20Address;
  address public erc1155Address;
  mapping (uint256 => bool) public blacklist1;
  mapping (uint256 => bool) public blacklist2;
  mapping (uint256 => bool) public blacklist3;
  mapping (uint256 => uint256) public baseLevel;
  mapping (uint256 => uint256) public fusionLevel;
  mapping (uint256 => uint256) public jobLevel;
  mapping (uint256 => uint256) public bred1;
  mapping (uint256 => uint256) public bred2;
  mapping (uint256 => uint256) public bred3;
 
  
  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    address _treasury,
    address _erc20Address,
    address _guineaContract,
    address _chillaContract,
    address _erc1155Address
    
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    treasury = _treasury;
    erc20Address = _erc20Address;
    guineaContract = _guineaContract;
    chillaContract = _chillaContract;
    erc1155Address = _erc1155Address;
  }

 
  // internal

  function calcTax(uint256 _amount, uint256 taxRate) internal pure returns (uint256){
    uint256 taxedAmount;
    taxedAmount = taxRate * _amount / 100;
    return taxedAmount;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  function erc20Burn(uint256 _amount) internal {
      IBurn(erc20Address).burn(_amount);
  }
  function lootBurn(address owner, uint _id, uint _amount) internal{
      IBurner(erc1155Address).lootBurn(owner, _id, _amount);
  }

  function balanceChecker1() internal returns (uint256) {
    uint256  balance;
    IBalance _balance = IBalance(guineaContract);
    return balance = _balance.balanceOf(msg.sender);
  }
   function balanceChecker2() internal returns (uint256) {
    uint256  balance2;
    IBalance _balance2 = IBalance(chillaContract);
    return balance2 = _balance2.balanceOf(msg.sender);
  }

  function erc721Burn(uint256 tokenId) internal {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved");
        _burn(tokenId);
    }
   
 
  // public

  function mintGuinea (uint256 tokenId) public nonReentrant(){
        require(!paused, "the contract is paused");
        require(trueSupply + 1 <= maxSupply, "Max Nfts Minted");
        uint256 supply = totalSupply();
        require(tokenId > 0, "TokenId can't be 0");
        require(supply + 1 <= maxSupply, "max NFT limit exceeded");
        require(IOwner(guineaContract).ownerOf(tokenId) == msg.sender, "Not tokenId owner");
        uint256  balance1 = balanceChecker1();
        uint256  balance2 = balanceChecker2();
        require(balance1 >= 2 || balance2 >= 2 || (balance1 + balance2) >= 2, "Need 2 MiniVerse nfts");
        require(blacklist1[tokenId] == false, "MiniGuinea already breeded must unblacklist");
        if(limiter == true){
        require(bred1[tokenId] < limitCount, "Breed Limited");
        }
        IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), cost + 10 ether * generationCheck(tokenId));
        erc20Burn(calcTax(cost + 10 ether * generationCheck(tokenId), 5));
        IERC20(erc20Address).safeTransfer(treasury, calcTax(cost + 10 ether * generationCheck(tokenId), 95));
        blacklist1[tokenId] = true;
        if (blacklistIndex1 <= tokenId){
            blacklistIndex1 = tokenId;
        }
        for (uint256 i = 1; i <= 1; i++) {
        _safeMint(msg.sender, trueSupply + i);
        baseLevel[trueSupply + i] = 0;
        fusionLevel[trueSupply + i] = 0;
        jobLevel[trueSupply + i] = 1;
        bred1[tokenId]++;
        trueSupply++;
        }
  }

  function mintChilla (uint256 tokenId) public nonReentrant(){
        require(!paused, "the contract is paused");
        require(trueSupply + 1 <= maxSupply, "Max Nfts Minted");
        uint256 supply = totalSupply();
        require(tokenId > 0, "TokenId can't be 0");
        require(supply + 1 <= maxSupply, "max NFT limit exceeded");
        require(IOwner(chillaContract).ownerOf(tokenId) == msg.sender, "Not tokenId owner");
        uint256  balance1 = balanceChecker1();
        uint256  balance2 = balanceChecker2();
        require(balance1 >= 2 || balance2 >= 2 || (balance1 + balance2) >= 2, "Need 2 MiniVerse nfts");
        require(blacklist2[tokenId] == false, "MiniChilla already breeded must unblacklist");
        if(limiter == true){
        require(bred2[tokenId] < limitCount, "Breed Limited");
        }
        IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), cost + 10 ether * generationCheck(tokenId));
        erc20Burn(calcTax(cost + 10 ether * generationCheck(tokenId), 5));
        IERC20(erc20Address).safeTransfer(treasury, calcTax(cost + 10 ether * generationCheck(tokenId), 95));
        blacklist2[tokenId] = true;
        if (blacklistIndex2 <= tokenId){
        blacklistIndex2 = tokenId;
        }
        for (uint256 i = 1; i <= 1; i++) {
        _safeMint(msg.sender, trueSupply + i);
        baseLevel[trueSupply + i] = 0;
        fusionLevel[trueSupply + i] = 0;
        jobLevel[trueSupply + i] = 1;
        bred2[tokenId]++;
        trueSupply++;
        }
    
  }
   function mintFren (uint256 tokenId) public nonReentrant(){
        require(!paused, "the contract is paused");
        require(!genPaused, "the Gen Minting is paused");
        require(trueSupply + 1 <= maxSupply, "Max Nfts Minted");
        uint256 supply = totalSupply();
        require(tokenId > 0, "TokenId can't be 0");
        require(supply + 1 <= maxSupply, "max NFT limit exceeded");
        require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved");
        require(baseLevel[tokenId] >= 12, "need to be atleast baseLevel 12");
        uint256  balance1 = balanceChecker1();
        uint256  balance2 = balanceChecker2();
        uint256  balance3 = balanceOf(msg.sender);
        require(balance1 >= 2 || balance2 >= 2 || balance3 >= 2 || (balance1 + balance2 + balance3) >= 2, "Need 2 MiniVerse nfts");
        require(blacklist3[tokenId] == false, "MiniFren already breeded must unblacklist");
        if(limiter == true){
        require(bred3[tokenId] < limitCount, "Breed Limited");
        }
        IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), cost + 10 ether * generationCheck(tokenId));
        erc20Burn(calcTax(cost + 10 ether * generationCheck(tokenId), 5));
        IERC20(erc20Address).safeTransfer(treasury, calcTax(cost + 10 ether * generationCheck(tokenId), 95));
        blacklist3[tokenId] = true;
        if (blacklistIndex3 <= tokenId){
            blacklistIndex3 = tokenId;
        }
        for (uint256 i = 1; i <= 1; i++) {
        _safeMint(msg.sender, trueSupply + i);
        baseLevel[trueSupply + i] = 0;
        fusionLevel[trueSupply + i] = 0;
        jobLevel[trueSupply + i] = 1;
        bred3[tokenId]++;
        trueSupply++;
        }
    
  }
  function ownerMint(uint256 amount) public onlyOwner{
        for (uint256 i = 1; i <= amount; i++) {
        _safeMint(msg.sender, trueSupply + i);
        baseLevel[trueSupply + i] = 0;
        fusionLevel[trueSupply + i] = 0;
        jobLevel[trueSupply + i] = 1;
        trueSupply++;
        }
  }

  function frenLevelUp(uint256 tokenId) public nonReentrant(){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved");
        uint256 curLevel =  baseLevel[tokenId];
        require(curLevel < 100, "Max Level");
        lootBurn(msg.sender, MiniCandy, levelCandyRate(tokenId));
        IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 1 ether + (levelGenRate(tokenId) * curLevel));
        IERC20(erc20Address).safeTransfer(treasury, calcTax(1 ether + (levelGenRate(tokenId) * curLevel), 95));
        erc20Burn(calcTax(1 ether + (levelGenRate(tokenId) * curLevel), 5));
        baseLevel[tokenId]++;
    
   }

   function jobLevelUp(uint256 tokenId) public nonReentrant(){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved");
        uint256 curLevel =  jobLevel[tokenId];
        require(curLevel < 8, "Max Level");
        lootBurn(msg.sender, jobLvlUp, curLevel);
        jobLevel[tokenId]++;
   }

   function fusionLevelUp(uint256 burning, uint256 leveling) public nonReentrant(){
        require(_isApprovedOrOwner(_msgSender(), burning), "burning is not owner nor approved");
        require(_isApprovedOrOwner(_msgSender(), leveling), "leveling is not owner nor approved");
        
        uint256 curLevel =  fusionLevel[leveling];
        uint256 curBase =  baseLevel[burning];
        if(curLevel == 12){
        revert("Max Level");
        }else if(curLevel < 2){
        require(baseLevel[leveling] >= 25, "baseLevel Must be 25 or higher for leveling");
        require(baseLevel[burning] >= 12, "baseLevel Must be 12 or higher for burning");
        require(generationCheck(leveling) <= generationCheck(burning), "Burning must be higher or equal gen to leveling");
        IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 4 ether + (500000000000000000 * curBase));
        erc20Burn(calcTax(4 ether + (500000000000000000 * curBase), 5));
        IERC20(erc20Address).safeTransfer(treasury, calcTax(4 ether + (500000000000000000 * curBase), 95));
        erc721Burn(burning);
        fusionLevel[leveling]++;
        }else if(curLevel < 4){
        require(baseLevel[leveling] >= 50, "baseLevel Must be 50 or higher for leveling");
        require(baseLevel[burning] >= 25, "baseLevel Must be 25 or higher for burning");
        require(generationCheck(leveling) <= generationCheck(burning), "Burning must be higher or equal gen to leveling");
        IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 1 ether + (500000000000000000 * curBase));
        erc20Burn(calcTax(1 ether + (500000000000000000 * curBase), 5));
        IERC20(erc20Address).safeTransfer(treasury, calcTax(1 ether + (500000000000000000 * curBase), 95));
        erc721Burn(burning);
        fusionLevel[leveling]++;
        }else if(curLevel < 8){
        require(baseLevel[leveling] >= 75, "baseLevel Must be 75 or higher for leveling");
        require(baseLevel[burning] >= 37, "baseLevel Must be 37 or higher for burning");
        require(fusionLevel[burning] == 1, "fusionLevel Must be 1 for burning");
        require(generationCheck(leveling) <= generationCheck(burning), "Burning must be higher or equal gen to leveling");
        IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 1 ether + (500000000000000000 * curBase));
        erc20Burn(calcTax(1 ether + (500000000000000000 * curBase), 5));
        IERC20(erc20Address).safeTransfer(treasury, calcTax(1 ether + (500000000000000000 * curBase), 95));
        erc721Burn(burning);
        fusionLevel[leveling]++;
        }else {
        require(baseLevel[leveling] >= 100, "baseLevel Must be 100 or higher for leveling");
        require(baseLevel[burning] >= 50, "baseLevel Must be 50 or higher for burning");
        require(fusionLevel[burning] == 2, "fusionLevel Must be 2 for burning");
        require(generationCheck(leveling) <= generationCheck(burning), "Burning must be higher or equal gen to leveling");
        IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 1 ether + (500000000000000000 * curBase));
        erc20Burn(calcTax(1 ether + (500000000000000000 * curBase), 5));
        IERC20(erc20Address).safeTransfer(treasury, calcTax(1 ether + (500000000000000000 * curBase), 95));
        erc721Burn(burning);
        fusionLevel[leveling]++;
        }
  }   

   function clearBlacklist1(uint256 tokenId) public nonReentrant(){
       require(IOwner(guineaContract).ownerOf(tokenId) == msg.sender, "Not tokenId owner");
       require(blacklist1[tokenId] == true, "Not Blacklisted");
       lootBurn(msg.sender, unBlacklist, 1);
       blacklist1[tokenId] = false;
    
  }
   function clearBlacklist2(uint256 tokenId) public nonReentrant(){
       require(IOwner(chillaContract).ownerOf(tokenId) == msg.sender, "Not tokenId owner");
       require(blacklist2[tokenId] == true, "Not Blacklisted");
       lootBurn(msg.sender, unBlacklist, 1);
       blacklist2[tokenId] = false;
  }
// generaton blacklist 
   function clearBlacklist3(uint256 tokenId) public nonReentrant(){
       require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved");
       require(blacklist3[tokenId] == true, "Not Blacklisted");
       lootBurn(msg.sender, unBlacklist, 1);
       blacklist3[tokenId] = false;
  }

  //view functions

  function jobLevelCheck(uint256 tokenId) public view returns(uint256 level){
        return jobLevel[tokenId];
  }

   function fusionLevelCheck(uint256 tokenId) public view returns(uint256 level){
        return fusionLevel[tokenId];
  }

   function baseLevelCheck(uint256 tokenId) public view returns(uint256 level){
        return baseLevel[tokenId];
  }

  function generationCheck(uint256 tokenId) public view returns(uint256 gen){
        if(tokenId <= gen1){
        return 1;
        }else if(tokenId <= gen2){
        return 2;
        }else if(tokenId <= gen3){
        return 3;
        }else if(tokenId <= gen4){
        return 4;
        }
   }

   function levelGenRate(uint256 tokenId) public view returns(uint256 rate){
       if(generationCheck(tokenId) == 1){
       return genRate1;
       }else if(generationCheck(tokenId) == 2){
       return genRate2;    
       }else if(generationCheck(tokenId) == 3){
       return genRate3;    
       }else if(generationCheck(tokenId) == 4){
       return genRate4;    
       }
   }

    function levelCandyRate(uint256 tokenId) public view returns(uint256 rate){
       if(baseLevel[tokenId] < 1){
       return 0;
       }else if(baseLevel[tokenId] < 5){
       return 1;    
       }else if(baseLevel[tokenId] < 10){
       return 2;    
       }else if(baseLevel[tokenId] < 15){
       return 3;    
       }else if(baseLevel[tokenId] < 20){
       return 4;    
       }else if(baseLevel[tokenId] < 25){
       return 5;    
       }else if(baseLevel[tokenId] < 30){
       return 6;    
       }else if(baseLevel[tokenId] < 35){
       return 7;    
       }else if(baseLevel[tokenId] < 40){
       return 8;    
       }else if(baseLevel[tokenId] < 45){
       return 9;    
       }else if(baseLevel[tokenId] < 50){
       return 10;    
       }else if(baseLevel[tokenId] < 60){
       return 11;    
       }else if(baseLevel[tokenId] < 70){
       return 12;    
       }else if(baseLevel[tokenId] < 80){
       return 13;    
       }else if(baseLevel[tokenId] < 90){
       return 14;    
       }else {
       return 15;    
       }
   }
 
  function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
        tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
  }
 
  function tokenURI(uint256 tokenId) public view virtual override returns (string memory){
        require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
        
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
            : "";
  }

  function checkBlacklist1(uint256 _tokenId) public view returns (bool) {
        return blacklist1[_tokenId];
  }

  function checkBlacklist2(uint256 _tokenId) public view returns (bool) {
        return blacklist2[_tokenId];
  }

  function checkBlacklist3(uint256 _tokenId) public view returns (bool) {
        return blacklist3[_tokenId];
  } 

  function _isApprovedOrOwnerPublic(address spender, uint256 tokenId) public view returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

  //only owner

   function baselevelMaster (uint256 tokenId, uint256 level) public onlyOwner{ 
       baseLevel[tokenId] = level;
   }

   function joblevelMaster (uint256 tokenId, uint256 level) public onlyOwner{
       jobLevel[tokenId] = level;
   }

    function fuslevelMaster (uint256 tokenId, uint256 level) public onlyOwner{
       fusionLevel[tokenId] = level;
   }

   function setErc20(address _newAddress) public onlyOwner {
    erc20Address = _newAddress;
   }

   function setErc1155(address _newAddress) public onlyOwner {
    erc1155Address = _newAddress;
   }
  
  function setTreasury(address _newAddress) public onlyOwner {
    treasury = _newAddress;
  }

  function setChillaContract(address _newAddress) public onlyOwner {
    chillaContract = _newAddress;
  }
  
  function setGuineaContract(address _newAddress) public onlyOwner {
    guineaContract = _newAddress;
  }

  function setMaxSupply(uint256 _newSupply) public onlyOwner {
    maxSupply = _newSupply;
  }

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

  function setLimitCount(uint256 _new) public onlyOwner {
    limitCount = _new;
  }
 
  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }
 
  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }
 
  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }
  
  function pause(bool _state) public onlyOwner {
    paused = _state;
  }

   function limitSet(bool _state) public onlyOwner {
    limiter = _state;
  }

  function gen1Pause(bool _state) public onlyOwner {
    genPaused = _state;
  }


  function levelSwitchSetter(uint[] memory _newRate) public onlyOwner(){
         require(_newRate.length == 4, "Need 4");
         genRate1 = _newRate[0];
         genRate2 = _newRate[1];
         genRate3 = _newRate[2];
         genRate4 = _newRate[3];

  }

   function genSwitchSetter(uint[] memory _newRate) public onlyOwner(){
         require(_newRate.length == 4, "Need 4");
         gen1 = _newRate[0];
         gen2 = _newRate[1];
         gen3 = _newRate[2];
         gen4 = _newRate[3];

  }
  
  
  function withdraw() public payable onlyOwner {
 
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    
  }

  function withdrawTokens(address _erc20Address, uint256 _amount) external onlyOwner() {
    IERC20(_erc20Address).safeTransfer(msg.sender, _amount);
  }

     function withdrawAllTokens() external onlyOwner() {
        uint256 tokenSupply = IERC20(erc20Address).balanceOf(address(this));
        IERC20(erc20Address).safeTransfer(msg.sender, tokenSupply);
    }
}

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"address","name":"_guineaContract","type":"address"},{"internalType":"address","name":"_chillaContract","type":"address"},{"internalType":"address","name":"_erc1155Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MiniCandy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"_isApprovedOrOwnerPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"baseLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"baseLevelCheck","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"baselevelMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklist1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklist2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklist3","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistIndex1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistIndex2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistIndex3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bred1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bred2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bred3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkBlacklist1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkBlacklist2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkBlacklist3","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chillaContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearBlacklist1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearBlacklist2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearBlacklist3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc1155Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"frenLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fusionLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"fusionLevelCheck","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burning","type":"uint256"},{"internalType":"uint256","name":"leveling","type":"uint256"}],"name":"fusionLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fusionLvlUp1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"fuslevelMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gen1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"gen1Pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gen2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gen3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gen4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genRate1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genRate2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genRate3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genRate4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_newRate","type":"uint256[]"}],"name":"genSwitchSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"generationCheck","outputs":[{"internalType":"uint256","name":"gen","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":"guineaContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"jobLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"jobLevelCheck","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"jobLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"jobLvlUp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"joblevelMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"levelCandyRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"levelGenRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_newRate","type":"uint256[]"}],"name":"levelSwitchSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"limitSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limiter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintChilla","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintFren","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintGuinea","outputs":[],"stateMutability":"nonpayable","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":"amount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setChillaContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setErc1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setGuineaContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"setLimitCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trueSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unBlacklist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600d919062000273565b50678ac7230489e80000600e55611f8c600f5560006010556001601155670853a0d2313c0000601555670b1a2bc2ec500000601655670de0b6b3a76400006017556710a741a462780000601855600a6019556014601a55601e601b8190556028601c556003601d55805462ffffff191662010000179055348015620000ac57600080fd5b5060405162005f7f38038062005f7f833981016040819052620000cf91620003ed565b875188908890620000e890600090602085019062000273565b508051620000fe90600190602084019062000273565b5050506200011b62000115620001a560201b60201c565b620001a9565b6001600b556200012b86620001fb565b602080546001600160a01b039687166001600160a01b0319918216179091556021805495871695821695909517909455601f805493861693851693909317909255601e80549185166301000000026301000000600160b81b031990921691909117905560228054919093169116179055506200052f915050565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b031633146200025a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b80516200026f90600c90602084019062000273565b5050565b8280546200028190620004dc565b90600052602060002090601f016020900481019282620002a55760008555620002f0565b82601f10620002c057805160ff1916838001178555620002f0565b82800160010185558215620002f0579182015b82811115620002f0578251825591602001919060010190620002d3565b50620002fe92915062000302565b5090565b5b80821115620002fe576000815560010162000303565b80516001600160a01b03811681146200033157600080fd5b919050565b600082601f8301126200034857600080fd5b81516001600160401b038082111562000365576200036562000519565b604051601f8301601f19908116603f0116810190828211818310171562000390576200039062000519565b81604052838152602092508683858801011115620003ad57600080fd5b600091505b83821015620003d15785820183015181830184015290820190620003b2565b83821115620003e35760008385830101525b9695505050505050565b600080600080600080600080610100898b0312156200040b57600080fd5b88516001600160401b03808211156200042357600080fd5b620004318c838d0162000336565b995060208b01519150808211156200044857600080fd5b620004568c838d0162000336565b985060408b01519150808211156200046d57600080fd5b506200047c8b828c0162000336565b9650506200048d60608a0162000319565b94506200049d60808a0162000319565b9350620004ad60a08a0162000319565b9250620004bd60c08a0162000319565b9150620004cd60e08a0162000319565b90509295985092959890939650565b600181811c90821680620004f157607f821691505b602082108114156200051357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b615a40806200053f6000396000f3fe6080604052600436106105f95760003560e01c806374b87f671161030e578063ce65851f1161019b578063eb17afd0116100e7578063f36b0b2d116100a0578063f923869d1161007a578063f923869d14611287578063fb671d8d1461129d578063fedbad66146112ca578063ff5edb5e146112e057600080fd5b8063f36b0b2d14611221578063f7c2421b14611241578063f89441211461125757600080fd5b8063eb17afd014611175578063ee9b80a41461118b578063f0941398146111ab578063f0f44260146111c1578063f19e75d4146111e1578063f2fde38b1461120157600080fd5b8063d74c993911610154578063df47ebc01161012e578063df47ebc0146110cc578063e491f8ea146110ec578063e879c5011461110c578063e985e9c51461112c57600080fd5b8063d74c99391461105f578063d7fb5cc11461108c578063da3ef23f146110ac57600080fd5b8063ce65851f14610fbd578063d1cefc5414610fd2578063d4d35a0e14610fe7578063d51b0c6714610ffc578063d5abeb0114611029578063d6178a671461103f57600080fd5b80639a5fc6201161025a578063b177bad811610213578063baea4a24116101ed578063baea4a2414610f3b578063bb07afbe14610f5b578063c668286214610f88578063c87b56dd14610f9d57600080fd5b8063b177bad814610ee6578063b2e2aa3114610efb578063b88d4fde14610f1b57600080fd5b80639a5fc62014610e245780639bed76eb14610e445780639f06549914610e71578063a22cb46514610e86578063a585f92114610ea6578063accb056714610ec657600080fd5b80638a87fd9d116102c75780638df287d6116102a15780638df287d614610dac578063933141bb14610dc257806395d89b4114610def5780639a5210a814610e0457600080fd5b80638a87fd9d14610d4b5780638d15237414610d615780638da5cb5b14610d8e57600080fd5b806374b87f6714610c8f57806377a2068214610caf5780637d9a0da514610cdf5780637f00c7a614610cf55780638686774014610d1557806388bebcf514610d2b57600080fd5b80633ccfd60b1161048c57806355f804b3116103d85780636b9c839b1161039157806370a082311161036b57806370a0823114610c1a57806370a2550814610c3a578063715018a614610c5a57806372dea3fa14610c6f57600080fd5b80636b9c839b14610bc55780636c0360eb14610be55780636f8b44b014610bfa57600080fd5b806355f804b314610b15578063560b87a014610b3557806359edf5ac14610b4b5780635c975abb14610b6b57806361d027b314610b855780636352211e14610ba557600080fd5b806344b9917a116104455780634c692ce51161041f5780634c692ce514610a785780634c89b21814610aa85780634f6ccce714610ad557806350ddfbb514610af557600080fd5b806344b9917a14610a125780634589657d14610a425780634b4e41ee14610a5857600080fd5b80633ccfd60b1461097257806342842e0e1461097a578063432b09541461099a578063438b6300146109b0578063440ea287146109dd57806344a0d68a146109f257600080fd5b80632178d5d41161054b578063276184ae116105045780632e3e3e09116104de5780632e3e3e09146109005780632f745c591461092757806331ed47641461094757806337012df51461095d57600080fd5b8063276184ae146108ab578063280da6fa146108cb5780632b30c45d146108e057600080fd5b80632178d5d4146107d5578063239c70ae1461080557806323b872dd1461081b57806323c66a491461083b57806323d4c2821461086b57806325979c351461088b57600080fd5b806306b091f9116105b8578063095ea7b311610592578063095ea7b31461074f57806313faede61461076f5780631477595a1461079357806318160ddd146107c057600080fd5b806306b091f9146106ed57806306fdde031461070d578063081812fc1461072f57600080fd5b806204a1b1146105fe578062f6dec41461062057806301ffc9a71461064057806302329a291461067557806305142002146106955780630556127f146106cd575b600080fd5b34801561060a57600080fd5b5061061e610619366004615331565b6112ff565b005b34801561062c57600080fd5b5061061e61063b366004615274565b611773565b34801561064c57600080fd5b5061066061065b3660046152ae565b6117b7565b60405190151581526020015b60405180910390f35b34801561068157600080fd5b5061061e610690366004615274565b6117e2565b3480156106a157600080fd5b506022546106b5906001600160a01b031681565b6040516001600160a01b03909116815260200161066c565b3480156106d957600080fd5b5061061e6106e8366004615331565b61181f565b3480156106f957600080fd5b5061061e61070836600461519b565b6118ca565b34801561071957600080fd5b5061072261190c565b60405161066c9190615512565b34801561073b57600080fd5b506106b561074a366004615331565b61199e565b34801561075b57600080fd5b5061061e61076a36600461519b565b611a33565b34801561077b57600080fd5b50610785600e5481565b60405190815260200161066c565b34801561079f57600080fd5b506107856107ae366004615331565b60266020526000908152604090205481565b3480156107cc57600080fd5b50600854610785565b3480156107e157600080fd5b506106606107f0366004615331565b60009081526024602052604090205460ff1690565b34801561081157600080fd5b5061078560115481565b34801561082757600080fd5b5061061e6108363660046150ac565b611b49565b34801561084757600080fd5b50610660610856366004615331565b60236020526000908152604090205460ff1681565b34801561087757600080fd5b5061061e610886366004615274565b611b79565b34801561089757600080fd5b506106606108a636600461519b565b611bbf565b3480156108b757600080fd5b506021546106b5906001600160a01b031681565b3480156108d757600080fd5b5061061e611cb6565b3480156108ec57600080fd5b5061061e6108fb366004615331565b611d79565b34801561090c57600080fd5b50601e546106b590630100000090046001600160a01b031681565b34801561093357600080fd5b5061078561094236600461519b565b611da8565b34801561095357600080fd5b5061078560165481565b34801561096957600080fd5b50610785600481565b61061e611e3e565b34801561098657600080fd5b5061061e6109953660046150ac565b611ed9565b3480156109a657600080fd5b50610785601d5481565b3480156109bc57600080fd5b506109d06109cb366004615039565b611ef4565b60405161066c91906154ce565b3480156109e957600080fd5b50610785600281565b3480156109fe57600080fd5b5061061e610a0d366004615331565b611f96565b348015610a1e57600080fd5b50610660610a2d366004615331565b60009081526023602052604090205460ff1690565b348015610a4e57600080fd5b5061078560195481565b348015610a6457600080fd5b5061061e610a733660046151c7565b611fc5565b348015610a8457600080fd5b50610660610a93366004615331565b60009081526025602052604090205460ff1690565b348015610ab457600080fd5b50610785610ac3366004615331565b60296020526000908152604090205481565b348015610ae157600080fd5b50610785610af0366004615331565b6120b0565b348015610b0157600080fd5b5061061e610b10366004615363565b612143565b348015610b2157600080fd5b5061061e610b303660046152e8565b61217f565b348015610b4157600080fd5b5061078560155481565b348015610b5757600080fd5b5061061e610b66366004615331565b6121bc565b348015610b7757600080fd5b50601e546106609060ff1681565b348015610b9157600080fd5b506020546106b5906001600160a01b031681565b348015610bb157600080fd5b506106b5610bc0366004615331565b61226c565b348015610bd157600080fd5b50610785610be0366004615331565b6122e3565b348015610bf157600080fd5b5061072261232e565b348015610c0657600080fd5b5061061e610c15366004615331565b6123bc565b348015610c2657600080fd5b50610785610c35366004615039565b6123eb565b348015610c4657600080fd5b50610785610c55366004615331565b612472565b348015610c6657600080fd5b5061061e61264b565b348015610c7b57600080fd5b5061061e610c8a366004615363565b612681565b348015610c9b57600080fd5b50601e546106609062010000900460ff1681565b348015610cbb57600080fd5b50610660610cca366004615331565b60256020526000908152604090205460ff1681565b348015610ceb57600080fd5b5061078560175481565b348015610d0157600080fd5b5061061e610d10366004615331565b612e82565b348015610d2157600080fd5b5061078560105481565b348015610d3757600080fd5b5061061e610d46366004615363565b612eb1565b348015610d5757600080fd5b5061078560135481565b348015610d6d57600080fd5b50610785610d7c366004615331565b60009081526026602052604090205490565b348015610d9a57600080fd5b50600a546001600160a01b03166106b5565b348015610db857600080fd5b5061078560185481565b348015610dce57600080fd5b50610785610ddd366004615331565b602a6020526000908152604090205481565b348015610dfb57600080fd5b50610722612eed565b348015610e1057600080fd5b5061061e610e1f366004615331565b612efc565b348015610e3057600080fd5b5061061e610e3f366004615039565b6132c6565b348015610e5057600080fd5b50610785610e5f366004615331565b60286020526000908152604090205481565b348015610e7d57600080fd5b50610785600381565b348015610e9257600080fd5b5061061e610ea136600461516d565b613312565b348015610eb257600080fd5b50601f546106b5906001600160a01b031681565b348015610ed257600080fd5b5061061e610ee13660046151c7565b6133d7565b348015610ef257600080fd5b50610785600081565b348015610f0757600080fd5b5061061e610f16366004615039565b6134c2565b348015610f2757600080fd5b5061061e610f363660046150ed565b613518565b348015610f4757600080fd5b5061061e610f56366004615331565b61354f565b348015610f6757600080fd5b50610785610f76366004615331565b60009081526027602052604090205490565b348015610f9457600080fd5b5061072261367e565b348015610fa957600080fd5b50610722610fb8366004615331565b61368b565b348015610fc957600080fd5b50610785600581565b348015610fde57600080fd5b50610785600681565b348015610ff357600080fd5b50610785600181565b34801561100857600080fd5b50610785611017366004615331565b60009081526028602052604090205490565b34801561103557600080fd5b50610785600f5481565b34801561104b57600080fd5b5061061e61105a366004615331565b613769565b34801561106b57600080fd5b5061078561107a366004615331565b60276020526000908152604090205481565b34801561109857600080fd5b5061061e6110a7366004615039565b613891565b3480156110b857600080fd5b5061061e6110c73660046152e8565b6138dd565b3480156110d857600080fd5b5061061e6110e7366004615331565b61391a565b3480156110f857600080fd5b5061061e611107366004615363565b613d44565b34801561111857600080fd5b50610785611127366004615331565b613d80565b34801561113857600080fd5b50610660611147366004615073565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561118157600080fd5b5061078560125481565b34801561119757600080fd5b5061061e6111a6366004615039565b613de6565b3480156111b757600080fd5b50610785601a5481565b3480156111cd57600080fd5b5061061e6111dc366004615039565b613e32565b3480156111ed57600080fd5b5061061e6111fc366004615331565b613e7e565b34801561120d57600080fd5b5061061e61121c366004615039565b613f61565b34801561122d57600080fd5b5061061e61123c366004615331565b613ff9565b34801561124d57600080fd5b50610785601b5481565b34801561126357600080fd5b50610660611272366004615331565b60246020526000908152604090205460ff1681565b34801561129357600080fd5b5061078560145481565b3480156112a957600080fd5b506107856112b8366004615331565b602b6020526000908152604090205481565b3480156112d657600080fd5b50610785601c5481565b3480156112ec57600080fd5b50601e5461066090610100900460ff1681565b6002600b54141561132b5760405162461bcd60e51b815260040161132290615803565b60405180910390fd5b6002600b55601e5460ff16156113535760405162461bcd60e51b8152600401611322906156fe565b600f5460105461136490600161586b565b11156113825760405162461bcd60e51b8152600401611322906156d5565b600061138d60085490565b9050600082116113af5760405162461bcd60e51b8152600401611322906155c5565b600f546113bd82600161586b565b11156113db5760405162461bcd60e51b815260040161132290615670565b601f546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381600087803b15801561142157600080fd5b505af1158015611435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114599190615056565b6001600160a01b03161461147f5760405162461bcd60e51b815260040161132290615525565b60006114896140fd565b90506000611495614182565b90506002821015806114a8575060028110155b806114bd575060026114ba828461586b565b10155b6114d95760405162461bcd60e51b8152600401611322906155f1565b60008481526023602052604090205460ff161561154c5760405162461bcd60e51b815260206004820152602b60248201527f4d696e694775696e656120616c72656164792062726565646564206d7573742060448201526a1d5b989b1858dadb1a5cdd60aa1b6064820152608401611322565b601e5462010000900460ff1615156001141561159157601d54600085815260296020526040902054106115915760405162461bcd60e51b815260040161132290615620565b6115d2333061159f876122e3565b6115b190678ac7230489e80000615897565b600e546115be919061586b565b6021546001600160a01b03169291906141bf565b61160c6116076115e1866122e3565b6115f390678ac7230489e80000615897565b600e54611600919061586b565b600561422a565b614243565b602054611661906001600160a01b031661164e611628876122e3565b61163a90678ac7230489e80000615897565b600e54611647919061586b565b605f61422a565b6021546001600160a01b031691906142a4565b6000848152602360205260409020805460ff1916600117905560125484106116895760128490555b60015b60018111611767576116ab33826010546116a6919061586b565b6142d4565b600060266000836010546116bf919061586b565b815260200190815260200160002081905550600060276000836010546116e5919061586b565b8152602001908152602001600020819055506001602860008360105461170b919061586b565b815260208082019290925260409081016000908120939093558783526029909152812080549161173a83615934565b90915550506010805490600061174f83615934565b9190505550808061175f90615934565b91505061168c565b50506001600b55505050565b600a546001600160a01b0316331461179d5760405162461bcd60e51b8152600401611322906156a0565b601e80549115156101000261ff0019909216919091179055565b60006001600160e01b0319821663780e9d6360e01b14806117dc57506117dc826142ee565b92915050565b600a546001600160a01b0316331461180c5760405162461bcd60e51b8152600401611322906156a0565b601e805460ff1916911515919091179055565b6002600b5414156118425760405162461bcd60e51b815260040161132290615803565b6002600b55611852335b82611bbf565b61186e5760405162461bcd60e51b81526004016113229061572e565b60008181526025602052604090205460ff1615156001146118a15760405162461bcd60e51b815260040161132290615647565b6118ad3360018061433e565b6000908152602560205260409020805460ff191690556001600b55565b600a546001600160a01b031633146118f45760405162461bcd60e51b8152600401611322906156a0565b6119086001600160a01b03831633836142a4565b5050565b60606000805461191b906158f9565b80601f0160208091040260200160405190810160405280929190818152602001828054611947906158f9565b80156119945780601f1061196957610100808354040283529160200191611994565b820191906000526020600020905b81548152906001019060200180831161197757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316611a175760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401611322565b506000908152600460205260409020546001600160a01b031690565b6000611a3e8261226c565b9050806001600160a01b0316836001600160a01b03161415611aac5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401611322565b336001600160a01b0382161480611ac85750611ac88133611147565b611b3a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401611322565b611b4483836143b0565b505050565b611b523361184c565b611b6e5760405162461bcd60e51b815260040161132290615763565b611b4483838361441e565b600a546001600160a01b03163314611ba35760405162461bcd60e51b8152600401611322906156a0565b601e8054911515620100000262ff000019909216919091179055565b6000818152600260205260408120546001600160a01b0316611c385760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401611322565b6000611c438361226c565b9050806001600160a01b0316846001600160a01b03161480611c7e5750836001600160a01b0316611c738461199e565b6001600160a01b0316145b80611cae57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b600a546001600160a01b03163314611ce05760405162461bcd60e51b8152600401611322906156a0565b6021546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015611d2457600080fd5b505afa158015611d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5c919061534a565b602154909150611d76906001600160a01b031633836142a4565b50565b600a546001600160a01b03163314611da35760405162461bcd60e51b8152600401611322906156a0565b601d55565b6000611db3836123eb565b8210611e155760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401611322565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314611e685760405162461bcd60e51b8152600401611322906156a0565b6000611e7c600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611ec6576040519150601f19603f3d011682016040523d82523d6000602084013e611ecb565b606091505b5050905080611d7657600080fd5b611b4483838360405180602001604052806000815250613518565b60606000611f01836123eb565b905060008167ffffffffffffffff811115611f1e57611f1e6159bb565b604051908082528060200260200182016040528015611f47578160200160208202803683370190505b50905060005b82811015611f8e57611f5f8582611da8565b828281518110611f7157611f716159a5565b602090810291909101015280611f8681615934565b915050611f4d565b509392505050565b600a546001600160a01b03163314611fc05760405162461bcd60e51b8152600401611322906156a0565b600e55565b600a546001600160a01b03163314611fef5760405162461bcd60e51b8152600401611322906156a0565b80516004146120295760405162461bcd60e51b815260206004820152600660248201526513995959080d60d21b6044820152606401611322565b8060008151811061203c5761203c6159a5565b60200260200101516015819055508060018151811061205d5761205d6159a5565b60200260200101516016819055508060028151811061207e5761207e6159a5565b60200260200101516017819055508060038151811061209f5761209f6159a5565b602002602001015160188190555050565b60006120bb60085490565b821061211e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401611322565b60088281548110612131576121316159a5565b90600052602060002001549050919050565b600a546001600160a01b0316331461216d5760405162461bcd60e51b8152600401611322906156a0565b60009182526027602052604090912055565b600a546001600160a01b031633146121a95760405162461bcd60e51b8152600401611322906156a0565b805161190890600c906020840190614f48565b6002600b5414156121df5760405162461bcd60e51b815260040161132290615803565b6002600b556121ed3361184c565b6122095760405162461bcd60e51b81526004016113229061572e565b600081815260286020526040902054600881106122385760405162461bcd60e51b8152600401611322906155a2565b6122443360028361433e565b600082815260286020526040812080549161225e83615934565b90915550506001600b555050565b6000818152600260205260408120546001600160a01b0316806117dc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401611322565b600060195482116122f657506001919050565b601a54821161230757506002919050565b601b54821161231857506003919050565b601c54821161232957506004919050565b919050565b600c805461233b906158f9565b80601f0160208091040260200160405190810160405280929190818152602001828054612367906158f9565b80156123b45780601f10612389576101008083540402835291602001916123b4565b820191906000526020600020905b81548152906001019060200180831161239757829003601f168201915b505050505081565b600a546001600160a01b031633146123e65760405162461bcd60e51b8152600401611322906156a0565b600f55565b60006001600160a01b0382166124565760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401611322565b506001600160a01b031660009081526003602052604090205490565b6000818152602660205260408120546001111561249157506000919050565b600082815260266020526040902054600511156124b057506001919050565b600082815260266020526040902054600a11156124cf57506002919050565b600082815260266020526040902054600f11156124ee57506003919050565b6000828152602660205260409020546014111561250d57506004919050565b6000828152602660205260409020546019111561252c57506005919050565b600082815260266020526040902054601e111561254b57506006919050565b6000828152602660205260409020546023111561256a57506007919050565b6000828152602660205260409020546028111561258957506008919050565b600082815260266020526040902054602d11156125a857506009919050565b600082815260266020526040902054603211156125c75750600a919050565b600082815260266020526040902054603c11156125e65750600b919050565b600082815260266020526040902054604611156126055750600c919050565b600082815260266020526040902054605011156126245750600d919050565b600082815260266020526040902054605a11156126435750600e919050565b50600f919050565b600a546001600160a01b031633146126755760405162461bcd60e51b8152600401611322906156a0565b61267f60006145c9565b565b6002600b5414156126a45760405162461bcd60e51b815260040161132290615803565b6002600b556126b4335b83611bbf565b61270a5760405162461bcd60e51b815260206004820152602160248201527f6275726e696e67206973206e6f74206f776e6572206e6f7220617070726f76656044820152601960fa1b6064820152608401611322565b6127133361184c565b61276a5760405162461bcd60e51b815260206004820152602260248201527f6c6576656c696e67206973206e6f74206f776e6572206e6f7220617070726f76604482015261195960f21b6064820152608401611322565b600081815260276020908152604080832054858452602690925290912054600c8214156127a95760405162461bcd60e51b8152600401611322906155a2565b600282101561297e57600083815260266020526040902054601911156128255760405162461bcd60e51b815260206004820152602b60248201527f626173654c6576656c204d757374206265203235206f7220686967686572206660448201526a6f72206c6576656c696e6760a81b6064820152608401611322565b600084815260266020526040902054600c11156128975760405162461bcd60e51b815260206004820152602a60248201527f626173654c6576656c204d757374206265203132206f722068696768657220666044820152696f72206275726e696e6760b01b6064820152608401611322565b6128a0846122e3565b6128a9846122e3565b11156128c75760405162461bcd60e51b8152600401611322906157b4565b6128f033306128de846706f05b59d3b20000615897565b6115be90673782dace9d90000061586b565b61291a611607612908836706f05b59d3b20000615897565b61160090673782dace9d90000061586b565b602054612951906001600160a01b031661164e61293f846706f05b59d3b20000615897565b61164790673782dace9d90000061586b565b61295a8461461b565b600083815260276020526040812080549161297483615934565b9190505550612e77565b6004821015612b2657600083815260266020526040902054603211156129fa5760405162461bcd60e51b815260206004820152602b60248201527f626173654c6576656c204d757374206265203530206f7220686967686572206660448201526a6f72206c6576656c696e6760a81b6064820152608401611322565b60008481526026602052604090205460191115612a6c5760405162461bcd60e51b815260206004820152602a60248201527f626173654c6576656c204d757374206265203235206f722068696768657220666044820152696f72206275726e696e6760b01b6064820152608401611322565b612a75846122e3565b612a7e846122e3565b1115612a9c5760405162461bcd60e51b8152600401611322906157b4565b612ac53330612ab3846706f05b59d3b20000615897565b6115be90670de0b6b3a764000061586b565b612aef611607612add836706f05b59d3b20000615897565b61160090670de0b6b3a764000061586b565b602054612951906001600160a01b031661164e612b14846706f05b59d3b20000615897565b61164790670de0b6b3a764000061586b565b6008821015612c7c57600083815260266020526040902054604b1115612ba25760405162461bcd60e51b815260206004820152602b60248201527f626173654c6576656c204d757374206265203735206f7220686967686572206660448201526a6f72206c6576656c696e6760a81b6064820152608401611322565b60008481526026602052604090205460251115612c145760405162461bcd60e51b815260206004820152602a60248201527f626173654c6576656c204d757374206265203337206f722068696768657220666044820152696f72206275726e696e6760b01b6064820152608401611322565b600084815260276020526040902054600114612a6c5760405162461bcd60e51b815260206004820152602160248201527f667573696f6e4c6576656c204d757374206265203120666f72206275726e696e6044820152606760f81b6064820152608401611322565b60008381526026602052604090205460641115612cf05760405162461bcd60e51b815260206004820152602c60248201527f626173654c6576656c204d75737420626520313030206f72206869676865722060448201526b666f72206c6576656c696e6760a01b6064820152608401611322565b60008481526026602052604090205460321115612d625760405162461bcd60e51b815260206004820152602a60248201527f626173654c6576656c204d757374206265203530206f722068696768657220666044820152696f72206275726e696e6760b01b6064820152608401611322565b600084815260276020526040902054600214612dca5760405162461bcd60e51b815260206004820152602160248201527f667573696f6e4c6576656c204d757374206265203220666f72206275726e696e6044820152606760f81b6064820152608401611322565b612dd3846122e3565b612ddc846122e3565b1115612dfa5760405162461bcd60e51b8152600401611322906157b4565b612e113330612ab3846706f05b59d3b20000615897565b612e29611607612add836706f05b59d3b20000615897565b602054612e4e906001600160a01b031661164e612b14846706f05b59d3b20000615897565b612e578461461b565b6000838152602760205260408120805491612e7183615934565b91905055505b50506001600b555050565b600a546001600160a01b03163314612eac5760405162461bcd60e51b8152600401611322906156a0565b601155565b600a546001600160a01b03163314612edb5760405162461bcd60e51b8152600401611322906156a0565b60009182526028602052604090912055565b60606001805461191b906158f9565b6002600b541415612f1f5760405162461bcd60e51b815260040161132290615803565b6002600b55601e5460ff1615612f475760405162461bcd60e51b8152600401611322906156fe565b600f54601054612f5890600161586b565b1115612f765760405162461bcd60e51b8152600401611322906156d5565b6000612f8160085490565b905060008211612fa35760405162461bcd60e51b8152600401611322906155c5565b600f54612fb182600161586b565b1115612fcf5760405162461bcd60e51b815260040161132290615670565b601e546040516331a9108f60e11b8152600481018490523391630100000090046001600160a01b031690636352211e90602401602060405180830381600087803b15801561301c57600080fd5b505af1158015613030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130549190615056565b6001600160a01b03161461307a5760405162461bcd60e51b815260040161132290615525565b60006130846140fd565b90506000613090614182565b90506002821015806130a3575060028110155b806130b8575060026130b5828461586b565b10155b6130d45760405162461bcd60e51b8152600401611322906155f1565b60008481526024602052604090205460ff16156131475760405162461bcd60e51b815260206004820152602b60248201527f4d696e694368696c6c6120616c72656164792062726565646564206d7573742060448201526a1d5b989b1858dadb1a5cdd60aa1b6064820152608401611322565b601e5462010000900460ff1615156001141561318c57601d546000858152602a60205260409020541061318c5760405162461bcd60e51b815260040161132290615620565b61319a333061159f876122e3565b6131a96116076115e1866122e3565b6020546131c5906001600160a01b031661164e611628876122e3565b6000848152602460205260409020805460ff1916600117905560135484106131ed5760138490555b60015b600181116117675761320a33826010546116a6919061586b565b6000602660008360105461321e919061586b565b81526020019081526020016000208190555060006027600083601054613244919061586b565b8152602001908152602001600020819055506001602860008360105461326a919061586b565b81526020808201929092526040908101600090812093909355878352602a909152812080549161329983615934565b9091555050601080549060006132ae83615934565b919050555080806132be90615934565b9150506131f0565b600a546001600160a01b031633146132f05760405162461bcd60e51b8152600401611322906156a0565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821633141561336b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401611322565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146134015760405162461bcd60e51b8152600401611322906156a0565b805160041461343b5760405162461bcd60e51b815260206004820152600660248201526513995959080d60d21b6044820152606401611322565b8060008151811061344e5761344e6159a5565b60200260200101516019819055508060018151811061346f5761346f6159a5565b6020026020010151601a8190555080600281518110613490576134906159a5565b6020026020010151601b81905550806003815181106134b1576134b16159a5565b6020026020010151601c8190555050565b600a546001600160a01b031633146134ec5760405162461bcd60e51b8152600401611322906156a0565b601e80546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b613521336126ae565b61353d5760405162461bcd60e51b815260040161132290615763565b61354984848484614649565b50505050565b6002600b5414156135725760405162461bcd60e51b815260040161132290615803565b6002600b55601e546040516331a9108f60e11b8152600481018390523391630100000090046001600160a01b031690636352211e90602401602060405180830381600087803b1580156135c457600080fd5b505af11580156135d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fc9190615056565b6001600160a01b0316146136225760405162461bcd60e51b815260040161132290615525565b60008181526024602052604090205460ff1615156001146136555760405162461bcd60e51b815260040161132290615647565b6136613360018061433e565b6000908152602460205260409020805460ff191690556001600b55565b600d805461233b906158f9565b6000818152600260205260409020546060906001600160a01b031661370a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401611322565b600061371461467c565b905060008151116137345760405180602001604052806000815250613762565b8061373e8461468b565b600d604051602001613752939291906153cd565b6040516020818303038152906040525b9392505050565b6002600b54141561378c5760405162461bcd60e51b815260040161132290615803565b6002600b55601f546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b1580156137d757600080fd5b505af11580156137eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380f9190615056565b6001600160a01b0316146138355760405162461bcd60e51b815260040161132290615525565b60008181526023602052604090205460ff1615156001146138685760405162461bcd60e51b815260040161132290615647565b6138743360018061433e565b6000908152602360205260409020805460ff191690556001600b55565b600a546001600160a01b031633146138bb5760405162461bcd60e51b8152600401611322906156a0565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146139075760405162461bcd60e51b8152600401611322906156a0565b805161190890600d906020840190614f48565b6002600b54141561393d5760405162461bcd60e51b815260040161132290615803565b6002600b55601e5460ff16156139655760405162461bcd60e51b8152600401611322906156fe565b601e54610100900460ff16156139bd5760405162461bcd60e51b815260206004820152601960248201527f7468652047656e204d696e74696e6720697320706175736564000000000000006044820152606401611322565b600f546010546139ce90600161586b565b11156139ec5760405162461bcd60e51b8152600401611322906156d5565b60006139f760085490565b905060008211613a195760405162461bcd60e51b8152600401611322906155c5565b600f54613a2782600161586b565b1115613a455760405162461bcd60e51b815260040161132290615670565b613a4e336126ae565b613a6a5760405162461bcd60e51b81526004016113229061572e565b600082815260266020526040902054600c1115613ac95760405162461bcd60e51b815260206004820152601f60248201527f6e65656420746f2062652061746c6561737420626173654c6576656c203132006044820152606401611322565b6000613ad36140fd565b90506000613adf614182565b90506000613aec336123eb565b9050600283101580613aff575060028210155b80613b0b575060028110155b80613b2b5750600281613b1e848661586b565b613b28919061586b565b10155b613b475760405162461bcd60e51b8152600401611322906155f1565b60008581526025602052604090205460ff1615613bb85760405162461bcd60e51b815260206004820152602960248201527f4d696e694672656e20616c72656164792062726565646564206d75737420756e604482015268189b1858dadb1a5cdd60ba1b6064820152608401611322565b601e5462010000900460ff16151560011415613bfd57601d546000868152602b602052604090205410613bfd5760405162461bcd60e51b815260040161132290615620565b613c0b333061159f886122e3565b613c1a6116076115e1876122e3565b602054613c36906001600160a01b031661164e611628886122e3565b6000858152602560205260409020805460ff191660011790556014548510613c5e5760148590555b60015b60018111613d3757613c7b33826010546116a6919061586b565b60006026600083601054613c8f919061586b565b81526020019081526020016000208190555060006027600083601054613cb5919061586b565b81526020019081526020016000208190555060016028600083601054613cdb919061586b565b81526020808201929092526040908101600090812093909355888352602b9091528120805491613d0a83615934565b909155505060108054906000613d1f83615934565b91905055508080613d2f90615934565b915050613c61565b50506001600b5550505050565b600a546001600160a01b03163314613d6e5760405162461bcd60e51b8152600401611322906156a0565b60009182526026602052604090912055565b6000613d8b826122e3565b60011415613d9b57505060155490565b613da4826122e3565b60021415613db457505060165490565b613dbd826122e3565b60031415613dcd57505060175490565b613dd6826122e3565b6004141561232957505060185490565b600a546001600160a01b03163314613e105760405162461bcd60e51b8152600401611322906156a0565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314613e5c5760405162461bcd60e51b8152600401611322906156a0565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314613ea85760405162461bcd60e51b8152600401611322906156a0565b60015b81811161190857613ec433826010546116a6919061586b565b60006026600083601054613ed8919061586b565b81526020019081526020016000208190555060006027600083601054613efe919061586b565b81526020019081526020016000208190555060016028600083601054613f24919061586b565b81526020019081526020016000208190555060106000815480929190613f4990615934565b91905055508080613f5990615934565b915050613eab565b600a546001600160a01b03163314613f8b5760405162461bcd60e51b8152600401611322906156a0565b6001600160a01b038116613ff05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611322565b611d76816145c9565b6002600b54141561401c5760405162461bcd60e51b815260040161132290615803565b6002600b5561402a3361184c565b6140465760405162461bcd60e51b81526004016113229061572e565b600081815260266020526040902054606481106140755760405162461bcd60e51b8152600401611322906155a2565b61408933600061408485612472565b61433e565b6140a233308361409886613d80565b612ab39190615897565b6020546140c9906001600160a01b031661164e836140bf86613d80565b612b149190615897565b6140e3611607826140d985613d80565b612add9190615897565b600082815260266020526040812080549161225e83615934565b601f546040516370a0823160e01b815233600482015260009182916001600160a01b039091169081906370a08231906024015b602060405180830381600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613762919061534a565b601e546040516370a0823160e01b8152336004820152600091829163010000009091046001600160a01b03169081906370a0823190602401614130565b6040516001600160a01b03808516602483015283166044820152606481018290526135499085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614789565b60008060646142398585615897565b611cae9190615883565b602154604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561428957600080fd5b505af115801561429d573d6000803e3d6000fd5b5050505050565b6040516001600160a01b038316602482015260448101829052611b4490849063a9059cbb60e01b906064016141f3565b61190882826040518060200160405280600081525061485b565b60006001600160e01b031982166380ac58cd60e01b148061431f57506001600160e01b03198216635b5e139f60e01b145b806117dc57506301ffc9a760e01b6001600160e01b03198316146117dc565b60225460405163cb72427360e01b81526001600160a01b03858116600483015260248201859052604482018490529091169063cb72427390606401600060405180830381600087803b15801561439357600080fd5b505af11580156143a7573d6000803e3d6000fd5b50505050505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906143e58261226c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b826001600160a01b03166144318261226c565b6001600160a01b0316146144995760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401611322565b6001600160a01b0382166144fb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401611322565b61450683838361488e565b6145116000826143b0565b6001600160a01b038316600090815260036020526040812080546001929061453a9084906158b6565b90915550506001600160a01b038216600090815260036020526040812080546001929061456890849061586b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6146243361184c565b6146405760405162461bcd60e51b81526004016113229061572e565b611d7681614946565b61465484848461441e565b614660848484846149ed565b6135495760405162461bcd60e51b815260040161132290615550565b6060600c805461191b906158f9565b6060816146af5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156146d957806146c381615934565b91506146d29050600a83615883565b91506146b3565b60008167ffffffffffffffff8111156146f4576146f46159bb565b6040519080825280601f01601f19166020018201604052801561471e576020820181803683370190505b5090505b8415611cae576147336001836158b6565b9150614740600a8661594f565b61474b90603061586b565b60f81b818381518110614760576147606159a5565b60200101906001600160f81b031916908160001a905350614782600a86615883565b9450614722565b60006147de826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614afa9092919063ffffffff16565b805190915015611b4457808060200190518101906147fc9190615291565b611b445760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611322565b6148658383614b09565b61487260008484846149ed565b611b445760405162461bcd60e51b815260040161132290615550565b6001600160a01b0383166148e9576148e481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61490c565b816001600160a01b0316836001600160a01b03161461490c5761490c8382614c57565b6001600160a01b03821661492357611b4481614cf4565b826001600160a01b0316826001600160a01b031614611b4457611b448282614da3565b60006149518261226c565b905061495f8160008461488e565b61496a6000836143b0565b6001600160a01b03811660009081526003602052604081208054600192906149939084906158b6565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b15614aef57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614a31903390899088908890600401615491565b602060405180830381600087803b158015614a4b57600080fd5b505af1925050508015614a7b575060408051601f3d908101601f19168201909252614a78918101906152cb565b60015b614ad5573d808015614aa9576040519150601f19603f3d011682016040523d82523d6000602084013e614aae565b606091505b508051614acd5760405162461bcd60e51b815260040161132290615550565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cae565b506001949350505050565b6060611cae8484600085614de7565b6001600160a01b038216614b5f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401611322565b6000818152600260205260409020546001600160a01b031615614bc45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401611322565b614bd06000838361488e565b6001600160a01b0382166000908152600360205260408120805460019290614bf990849061586b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001614c64846123eb565b614c6e91906158b6565b600083815260076020526040902054909150808214614cc1576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090614d06906001906158b6565b60008381526009602052604081205460088054939450909284908110614d2e57614d2e6159a5565b906000526020600020015490508060088381548110614d4f57614d4f6159a5565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480614d8757614d8761598f565b6001900381819060005260206000200160009055905550505050565b6000614dae836123eb565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b606082471015614e485760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611322565b843b614e965760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611322565b600080866001600160a01b03168587604051614eb291906153b1565b60006040518083038185875af1925050503d8060008114614eef576040519150601f19603f3d011682016040523d82523d6000602084013e614ef4565b606091505b5091509150614f04828286614f0f565b979650505050505050565b60608315614f1e575081613762565b825115614f2e5782518084602001fd5b8160405162461bcd60e51b81526004016113229190615512565b828054614f54906158f9565b90600052602060002090601f016020900481019282614f765760008555614fbc565b82601f10614f8f57805160ff1916838001178555614fbc565b82800160010185558215614fbc579182015b82811115614fbc578251825591602001919060010190614fa1565b50614fc8929150614fcc565b5090565b5b80821115614fc85760008155600101614fcd565b600067ffffffffffffffff831115614ffb57614ffb6159bb565b61500e601f8401601f191660200161583a565b905082815283838301111561502257600080fd5b828260208301376000602084830101529392505050565b60006020828403121561504b57600080fd5b8135613762816159d1565b60006020828403121561506857600080fd5b8151613762816159d1565b6000806040838503121561508657600080fd5b8235615091816159d1565b915060208301356150a1816159d1565b809150509250929050565b6000806000606084860312156150c157600080fd5b83356150cc816159d1565b925060208401356150dc816159d1565b929592945050506040919091013590565b6000806000806080858703121561510357600080fd5b843561510e816159d1565b9350602085013561511e816159d1565b925060408501359150606085013567ffffffffffffffff81111561514157600080fd5b8501601f8101871361515257600080fd5b61516187823560208401614fe1565b91505092959194509250565b6000806040838503121561518057600080fd5b823561518b816159d1565b915060208301356150a1816159e6565b600080604083850312156151ae57600080fd5b82356151b9816159d1565b946020939093013593505050565b600060208083850312156151da57600080fd5b823567ffffffffffffffff808211156151f257600080fd5b818501915085601f83011261520657600080fd5b813581811115615218576152186159bb565b8060051b915061522984830161583a565b8181528481019084860184860187018a101561524457600080fd5b600095505b83861015615267578035835260019590950194918601918601615249565b5098975050505050505050565b60006020828403121561528657600080fd5b8135613762816159e6565b6000602082840312156152a357600080fd5b8151613762816159e6565b6000602082840312156152c057600080fd5b8135613762816159f4565b6000602082840312156152dd57600080fd5b8151613762816159f4565b6000602082840312156152fa57600080fd5b813567ffffffffffffffff81111561531157600080fd5b8201601f8101841361532257600080fd5b611cae84823560208401614fe1565b60006020828403121561534357600080fd5b5035919050565b60006020828403121561535c57600080fd5b5051919050565b6000806040838503121561537657600080fd5b50508035926020909101359150565b6000815180845261539d8160208601602086016158cd565b601f01601f19169290920160200192915050565b600082516153c38184602087016158cd565b9190910192915050565b6000845160206153e08285838a016158cd565b8551918401916153f38184848a016158cd565b8554920191600090600181811c908083168061541057607f831692505b85831081141561542e57634e487b7160e01b85526022600452602485fd5b808015615442576001811461545357615480565b60ff19851688528388019550615480565b60008b81526020902060005b858110156154785781548a82015290840190880161545f565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906154c490830184615385565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615506578351835292840192918401916001016154ea565b50909695505050505050565b6020815260006137626020830184615385565b6020808252601190820152702737ba103a37b5b2b724b21037bbb732b960791b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526009908201526813585e0813195d995b60ba1b604082015260600190565b6020808252601290820152710546f6b656e49642063616e277420626520360741b604082015260600190565b6020808252601590820152744e6565642032204d696e695665727365206e66747360581b604082015260600190565b6020808252600d908201526c109c99595908131a5b5a5d1959609a1b604082015260600190565b6020808252600f908201526e139bdd08109b1858dadb1a5cdd1959608a1b604082015260600190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600f908201526e13585e0813999d1cc8135a5b9d1959608a1b604082015260600190565b6020808252601690820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b6020808252818101527f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602f908201527f4275726e696e67206d75737420626520686967686572206f7220657175616c2060408201526e67656e20746f206c6576656c696e6760881b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715615863576158636159bb565b604052919050565b6000821982111561587e5761587e615963565b500190565b60008261589257615892615979565b500490565b60008160001904831182151516156158b1576158b1615963565b500290565b6000828210156158c8576158c8615963565b500390565b60005b838110156158e85781810151838201526020016158d0565b838111156135495750506000910152565b600181811c9082168061590d57607f821691505b6020821081141561592e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561594857615948615963565b5060010190565b60008261595e5761595e615979565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611d7657600080fd5b8015158114611d7657600080fd5b6001600160e01b031981168114611d7657600080fdfea2646970667358221220d985b84eccc946ae41fc3a4f827dae1ecde26d567c38c756d296bdad666e31f364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000fea5420b39256a9bec47b138b22f011444e96f12000000000000000000000000fea5420b39256a9bec47b138b22f011444e96f1200000000000000000000000059128480e6767d2ec0e811e78ccb538c4433310d00000000000000000000000036fb71bcd8e07f33f7d284b0aaea101fb7f12a870000000000000000000000007116dce05810cfa0bf9cef29f42ef955b81bed54000000000000000000000000000000000000000000000000000000000000000162000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012f00000000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000fea5420b39256a9bec47b138b22f011444e96f12000000000000000000000000fea5420b39256a9bec47b138b22f011444e96f1200000000000000000000000059128480e6767d2ec0e811e78ccb538c4433310d00000000000000000000000036fb71bcd8e07f33f7d284b0aaea101fb7f12a870000000000000000000000007116dce05810cfa0bf9cef29f42ef955b81bed54000000000000000000000000000000000000000000000000000000000000000162000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): b
Arg [1] : _symbol (string): b
Arg [2] : _initBaseURI (string): /
Arg [3] : _treasury (address): 0xfea5420b39256a9bec47b138b22f011444e96f12
Arg [4] : _erc20Address (address): 0xfea5420b39256a9bec47b138b22f011444e96f12
Arg [5] : _guineaContract (address): 0x59128480e6767d2ec0e811e78ccb538c4433310d
Arg [6] : _chillaContract (address): 0x36fb71bcd8e07f33f7d284b0aaea101fb7f12a87
Arg [7] : _erc1155Address (address): 0x7116dce05810cfa0bf9cef29f42ef955b81bed54

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [3] : 000000000000000000000000fea5420b39256a9bec47b138b22f011444e96f12
Arg [4] : 000000000000000000000000fea5420b39256a9bec47b138b22f011444e96f12
Arg [5] : 00000000000000000000000059128480e6767d2ec0e811e78ccb538c4433310d
Arg [6] : 00000000000000000000000036fb71bcd8e07f33f7d284b0aaea101fb7f12a87
Arg [7] : 0000000000000000000000007116dce05810cfa0bf9cef29f42ef955b81bed54
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 6200000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 6200000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [13] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

52855:20709:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56351:1552;;;;;;;;;;-1:-1:-1;56351:1552:0;;;;;:::i;:::-;;:::i;:::-;;72417:80;;;;;;;;;;-1:-1:-1;72417:80:0;;;;;:::i;:::-;;:::i;34793:224::-;;;;;;;;;;-1:-1:-1;34793:224:0;;;;;:::i;:::-;;:::i;:::-;;;11132:14:1;;11125:22;11107:41;;11095:2;11080:18;34793:224:0;;;;;;;;72254:73;;;;;;;;;;-1:-1:-1;72254:73:0;;;;;:::i;:::-;;:::i;54182:29::-;;;;;;;;;;-1:-1:-1;54182:29:0;;;;-1:-1:-1;;;;;54182:29:0;;;;;;-1:-1:-1;;;;;8784:32:1;;;8766:51;;8754:2;8739:18;54182:29:0;8620:203:1;66683:313:0;;;;;;;;;;-1:-1:-1;66683:313:0;;;;;:::i;:::-;;:::i;73194:153::-;;;;;;;;;;-1:-1:-1;73194:153:0;;;;;:::i;:::-;;:::i;22636:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24203:222::-;;;;;;;;;;-1:-1:-1;24203:222:0;;;;;:::i;:::-;;:::i;23723:413::-;;;;;;;;;;-1:-1:-1;23723:413:0;;;;;:::i;:::-;;:::i;53055:30::-;;;;;;;;;;;;;;;;;;;31345:25:1;;;31333:2;31318:18;53055:30:0;31199:177:1;54360:45:0;;;;;;;;;;-1:-1:-1;54360:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;35435:113;;;;;;;;;;-1:-1:-1;35523:10:0;:17;35435:113;;70099:114;;;;;;;;;;-1:-1:-1;70099:114:0;;;;;:::i;:::-;70163:4;70187:20;;;:10;:20;;;;;;;;;70099:114;53160:32;;;;;;;;;;;;;;;;25098:340;;;;;;;;;;-1:-1:-1;25098:340:0;;;;;:::i;:::-;;:::i;54216:43::-;;;;;;;;;;-1:-1:-1;54216:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;72334:77;;;;;;;;;;-1:-1:-1;72334:77:0;;;;;:::i;:::-;;:::i;70340:344::-;;;;;;;;;;-1:-1:-1;70340:344:0;;;;;:::i;:::-;;:::i;54150:27::-;;;;;;;;;;-1:-1:-1;54150:27:0;;;;-1:-1:-1;;;;;54150:27:0;;;73356:205;;;;;;;;;;;;;:::i;71805:84::-;;;;;;;;;;-1:-1:-1;71805:84:0;;;;;:::i;:::-;;:::i;54054:29::-;;;;;;;;;;-1:-1:-1;54054:29:0;;;;;;;-1:-1:-1;;;;;54054:29:0;;;35102:256;;;;;;;;;;-1:-1:-1;35102:256:0;;;;;:::i;:::-;;:::i;53351:44::-;;;;;;;;;;;;;;;;53822:40;;;;;;;;;;;;53861:1;53822:40;;73034:154;;;:::i;25510:185::-;;;;;;;;;;-1:-1:-1;25510:185:0;;;;;:::i;:::-;;:::i;53616:29::-;;;;;;;;;;;;;;;;69214:352;;;;;;;;;;-1:-1:-1;69214:352:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;53736:36::-;;;;;;;;;;;;53771:1;53736:36;;71719:80;;;;;;;;;;-1:-1:-1;71719:80:0;;;;;:::i;:::-;;:::i;69979:114::-;;;;;;;;;;-1:-1:-1;69979:114:0;;;;;:::i;:::-;70043:4;70067:20;;;:10;:20;;;;;;;;;69979:114;53500:24;;;;;;;;;;;;;;;;72505:264;;;;;;;;;;-1:-1:-1;72505:264:0;;;;;:::i;:::-;;:::i;70219:114::-;;;;;;;;;;-1:-1:-1;70219:114:0;;;;;:::i;:::-;70283:4;70307:20;;;:10;:20;;;;;;;;;70219:114;54511:41;;;;;;;;;;-1:-1:-1;54511:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;35626:233;;;;;;;;;;-1:-1:-1;35626:233:0;;;;;:::i;:::-;;:::i;70957:118::-;;;;;;;;;;-1:-1:-1;70957:118:0;;;;;:::i;:::-;;:::i;72019:98::-;;;;;;;;;;-1:-1:-1;72019:98:0;;;;;:::i;:::-;;:::i;53302:44::-;;;;;;;;;;;;;;;;62244:336;;;;;;;;;;-1:-1:-1;62244:336:0;;;;;:::i;:::-;;:::i;53957:26::-;;;;;;;;;;-1:-1:-1;53957:26:0;;;;;;;;54122:23;;;;;;;;;;-1:-1:-1;54122:23:0;;;;-1:-1:-1;;;;;54122:23:0;;;22329:239;;;;;;;;;;-1:-1:-1;22329:239:0;;;;;:::i;:::-;;:::i;67397:306::-;;;;;;;;;;-1:-1:-1;67397:306:0;;;;;:::i;:::-;;:::i;52987:21::-;;;;;;;;;;;;;:::i;71619:94::-;;;;;;;;;;-1:-1:-1;71619:94:0;;;;;:::i;:::-;;:::i;22058:208::-;;;;;;;;;;-1:-1:-1;22058:208:0;;;;;:::i;:::-;;:::i;68109:1098::-;;;;;;;;;;-1:-1:-1;68109:1098:0;;;;;:::i;:::-;;:::i;42606:94::-;;;;;;;;;;;;;:::i;62587:3425::-;;;;;;;;;;-1:-1:-1;62587:3425:0;;;;;:::i;:::-;;:::i;54022:26::-;;;;;;;;;;-1:-1:-1;54022:26:0;;;;;;;;;;;54312:43;;;;;;;;;;-1:-1:-1;54312:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;53400:45;;;;;;;;;;;;;;;;71896:116;;;;;;;;;;-1:-1:-1;71896:116:0;;;;;:::i;:::-;;:::i;53126:29::-;;;;;;;;;;;;;;;;70834:115;;;;;;;;;;-1:-1:-1;70834:115:0;;;;;:::i;:::-;;:::i;53232:30::-;;;;;;;;;;;;;;;;67274:117;;;;;;;;;;-1:-1:-1;67274:117:0;;;;;:::i;:::-;67335:13;67367:18;;;:9;:18;;;;;;;67274:117;41953:87;;;;;;;;;;-1:-1:-1;42026:6:0;;-1:-1:-1;;;;;42026:6:0;41953:87;;53450:45;;;;;;;;;;;;;;;;54557:41;;;;;;;;;;-1:-1:-1;54557:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;22806:104;;;;;;;;;;;;;:::i;57909:1554::-;;;;;;;;;;-1:-1:-1;57909:1554:0;;;;;:::i;:::-;;:::i;71507:106::-;;;;;;;;;;-1:-1:-1;71507:106:0;;;;;:::i;:::-;;:::i;54462:44::-;;;;;;;;;;-1:-1:-1;54462:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;53777:40;;;;;;;;;;;;53816:1;53777:40;;24498:296;;;;;;;;;;-1:-1:-1;24498:296:0;;;;;:::i;:::-;;:::i;54088:29::-;;;;;;;;;;-1:-1:-1;54088:29:0;;;;-1:-1:-1;;;;;54088:29:0;;;72776:246;;;;;;;;;;-1:-1:-1;72776:246:0;;;;;:::i;:::-;;:::i;53650:37::-;;;;;;;;;;;;53686:1;53650:37;;71393:106;;;;;;;;;;-1:-1:-1;71393:106:0;;;;;:::i;:::-;;:::i;25767:328::-;;;;;;;;;;-1:-1:-1;25767:328:0;;;;;:::i;:::-;;:::i;66343:310::-;;;;;;;;;;-1:-1:-1;66343:310:0;;;;;:::i;:::-;;:::i;67146:121::-;;;;;;;;;;-1:-1:-1;67146:121:0;;;;;:::i;:::-;67209:13;67241:20;;;:11;:20;;;;;;;67146:121;53013:37;;;;;;;;;;;;;:::i;69573:400::-;;;;;;;;;;-1:-1:-1;69573:400:0;;;;;:::i;:::-;;:::i;53867:40::-;;;;;;;;;;;;53906:1;53867:40;;53912;;;;;;;;;;;;53951:1;53912:40;;53692:39;;;;;;;;;;;;53730:1;53692:39;;67024:115;;;;;;;;;;-1:-1:-1;67024:115:0;;;;;:::i;:::-;67084:13;67116:17;;;:8;:17;;;;;;;67024:115;53090:31;;;;;;;;;;;;;;;;66022:316;;;;;;;;;;-1:-1:-1;66022:316:0;;;;;:::i;:::-;;:::i;54410:47::-;;;;;;;;;;-1:-1:-1;54410:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;71185:100;;;;;;;;;;-1:-1:-1;71185:100:0;;;;;:::i;:::-;;:::i;72124:122::-;;;;;;;;;;-1:-1:-1;72124:122:0;;;;;:::i;:::-;;:::i;59468:1775::-;;;;;;;;;;-1:-1:-1;59468:1775:0;;;;;:::i;:::-;;:::i;70709:118::-;;;;;;;;;;-1:-1:-1;70709:118:0;;;;;:::i;:::-;;:::i;67710:391::-;;;;;;;;;;-1:-1:-1;67710:391:0;;;;;:::i;:::-;;:::i;24866:164::-;;;;;;;;;;-1:-1:-1;24866:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24987:25:0;;;24963:4;24987:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24866:164;53197:30;;;;;;;;;;;;;;;;71082:96;;;;;;;;;;-1:-1:-1;71082:96:0;;;;;:::i;:::-;;:::i;53529:24::-;;;;;;;;;;;;;;;;71293:94;;;;;;;;;;-1:-1:-1;71293:94:0;;;;;:::i;:::-;;:::i;61247:309::-;;;;;;;;;;-1:-1:-1;61247:309:0;;;;;:::i;:::-;;:::i;42856:192::-;;;;;;;;;;-1:-1:-1;42856:192:0;;;;;:::i;:::-;;:::i;61562:675::-;;;;;;;;;;-1:-1:-1;61562:675:0;;;;;:::i;:::-;;:::i;53558:24::-;;;;;;;;;;;;;;;;54264:43;;;;;;;;;;-1:-1:-1;54264:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;53267:30;;;;;;;;;;;;;;;;54603:41;;;;;;;;;;-1:-1:-1;54603:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;53587:24;;;;;;;;;;;;;;;;53988:29;;;;;;;;;;-1:-1:-1;53988:29:0;;;;;;;;;;;56351:1552;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;;;;;;;;;48739:1;49470:7;:18;56430:6:::1;::::0;::::1;;56429:7;56421:42;;;;-1:-1:-1::0;;;56421:42:0::1;;;;;;;:::i;:::-;56500:9;::::0;56482:10:::1;::::0;:14:::1;::::0;56495:1:::1;56482:14;:::i;:::-;:27;;56474:55;;;;-1:-1:-1::0;;;56474:55:0::1;;;;;;;:::i;:::-;56540:14;56557:13;35523:10:::0;:17;;35435:113;56557:13:::1;56540:30;;56599:1;56589:7;:11;56581:42;;;;-1:-1:-1::0;;;56581:42:0::1;;;;;;;:::i;:::-;56656:9;::::0;56642:10:::1;:6:::0;56651:1:::1;56642:10;:::i;:::-;:23;;56634:58;;;;-1:-1:-1::0;;;56634:58:0::1;;;;;;;:::i;:::-;56718:14;::::0;56711:39:::1;::::0;-1:-1:-1;;;56711:39:0;;::::1;::::0;::::1;31345:25:1::0;;;56754:10:0::1;::::0;-1:-1:-1;;;;;56718:14:0::1;::::0;56711:30:::1;::::0;31318:18:1;;56711:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;56711:53:0::1;;56703:83;;;;-1:-1:-1::0;;;56703:83:0::1;;;;;;;:::i;:::-;56797:17;56817;:15;:17::i;:::-;56797:37;;56845:17;56865;:15;:17::i;:::-;56845:37;;56913:1;56901:8;:13;;:30;;;;56930:1;56918:8;:13;;56901:30;:60;;;-1:-1:-1::0;56960:1:0::1;56936:19;56947:8:::0;56936;:19:::1;:::i;:::-;56935:26;;56901:60;56893:94;;;;-1:-1:-1::0;;;56893:94:0::1;;;;;;;:::i;:::-;57006:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:28;56998:84;;;::::0;-1:-1:-1;;;56998:84:0;;20064:2:1;56998:84:0::1;::::0;::::1;20046:21:1::0;20103:2;20083:18;;;20076:30;20142:34;20122:18;;;20115:62;-1:-1:-1;;;20193:18:1;;;20186:41;20244:19;;56998:84:0::1;19862:407:1::0;56998:84:0::1;57096:7;::::0;;;::::1;;;:15;;57107:4;57096:15;57093:95;;;57148:10;::::0;57131:14:::1;::::0;;;:5:::1;:14;::::0;;;;;:27:::1;57123:53;;;;-1:-1:-1::0;;;57123:53:0::1;;;;;;;:::i;:::-;57198:108;57236:10;57256:4;57281:24;57297:7;57281:15;:24::i;:::-;57270:35;::::0;:8:::1;:35;:::i;:::-;57263:4;;:42;;;;:::i;:::-;57205:12;::::0;-1:-1:-1;;;;;57205:12:0::1;::::0;57198:108;;:37:::1;:108::i;:::-;57317:65;57327:54;57353:24;57369:7;57353:15;:24::i;:::-;57342:35;::::0;:8:::1;:35;:::i;:::-;57335:4;;:42;;;;:::i;:::-;57379:1;57327:7;:54::i;:::-;57317:9;:65::i;:::-;57427:8;::::0;57393:100:::1;::::0;-1:-1:-1;;;;;57427:8:0::1;57437:55;57463:24;57479:7:::0;57463:15:::1;:24::i;:::-;57452:35;::::0;:8:::1;:35;:::i;:::-;57445:4;;:42;;;;:::i;:::-;57489:2;57437:7;:55::i;:::-;57400:12;::::0;-1:-1:-1;;;;;57400:12:0::1;::::0;57393:100;:33:::1;:100::i;:::-;57504:19;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;57504:26:0::1;57526:4;57504:26;::::0;;57545:15:::1;::::0;:26;-1:-1:-1;57541:83:0::1;;57587:15;:25:::0;;;57541:83:::1;57651:1;57634:264;57659:1;57654;:6;57634:264;;57678:37;57688:10;57713:1;57700:10;;:14;;;;:::i;:::-;57678:9;:37::i;:::-;57754:1;57726:9;:25;57749:1;57736:10;;:14;;;;:::i;:::-;57726:25;;;;;;;;;;;:29;;;;57796:1;57766:11;:27;57791:1;57778:10;;:14;;;;:::i;:::-;57766:27;;;;;;;;;;;:31;;;;57835:1;57808:8;:24;57830:1;57817:10;;:14;;;;:::i;:::-;57808:24:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;57808:24:0;;;:28;;;;57847:14;;;:5:::1;:14:::0;;;;;:16;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;57874:10:0::1;:12:::0;;;:10:::1;:12;::::0;::::1;:::i;:::-;;;;;;57662:3;;;;;:::i;:::-;;;;57634:264;;;-1:-1:-1::0;;48695:1:0;49649:7;:22;-1:-1:-1;;;56351:1552:0:o;72417:80::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72473:9:::1;:18:::0;;;::::1;;;;-1:-1:-1::0;;72473:18:0;;::::1;::::0;;;::::1;::::0;;72417:80::o;34793:224::-;34895:4;-1:-1:-1;;;;;;34919:50:0;;-1:-1:-1;;;34919:50:0;;:90;;;34973:36;34997:11;34973:23;:36::i;:::-;34912:97;34793:224;-1:-1:-1;;34793:224:0:o;72254:73::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72306:6:::1;:15:::0;;-1:-1:-1;;72306:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;72254:73::o;66683:313::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;66764:41:::1;20231:10:::0;66783:12:::1;66797:7;66764:18;:41::i;:::-;66756:86;;;;-1:-1:-1::0;;;66756:86:0::1;;;;;;;:::i;:::-;66860:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27:::1;66852:55;;;;-1:-1:-1::0;;;66852:55:0::1;;;;;;;:::i;:::-;66917:36;66926:10;53730:1;66951::::0;66917:8:::1;:36::i;:::-;66985:5;66963:19:::0;;;:10:::1;:19;::::0;;;;:27;;-1:-1:-1;;66963:27:0::1;::::0;;;49649:7;:22;66683:313::o;73194:153::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;73286:55:::1;-1:-1:-1::0;;;;;73286:34:0;::::1;73321:10;73333:7:::0;73286:34:::1;:55::i;:::-;73194:153:::0;;:::o;22636:100::-;22690:13;22723:5;22716:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22636:100;:::o;24203:222::-;24279:7;27696:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27696:16:0;24299:73;;;;-1:-1:-1;;;24299:73:0;;22764:2:1;24299:73:0;;;22746:21:1;22803:2;22783:18;;;22776:30;22842:34;22822:18;;;22815:62;-1:-1:-1;;;22893:18:1;;;22886:42;22945:19;;24299:73:0;22562:408:1;24299:73:0;-1:-1:-1;24393:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24393:24:0;;24203:222::o;23723:413::-;23804:13;23820:23;23835:7;23820:14;:23::i;:::-;23804:39;;23868:5;-1:-1:-1;;;;;23862:11:0;:2;-1:-1:-1;;;;;23862:11:0;;;23854:57;;;;-1:-1:-1;;;23854:57:0;;25831:2:1;23854:57:0;;;25813:21:1;25870:2;25850:18;;;25843:30;25909:34;25889:18;;;25882:62;-1:-1:-1;;;25960:18:1;;;25953:31;26001:19;;23854:57:0;25629:397:1;23854:57:0;20231:10;-1:-1:-1;;;;;23947:21:0;;;;:62;;-1:-1:-1;23972:37:0;23989:5;20231:10;24866:164;:::i;23972:37::-;23925:168;;;;-1:-1:-1;;;23925:168:0;;18886:2:1;23925:168:0;;;18868:21:1;18925:2;18905:18;;;18898:30;18964:34;18944:18;;;18937:62;19035:26;19015:18;;;19008:54;19079:19;;23925:168:0;18684:420:1;23925:168:0;24107:21;24116:2;24120:7;24107:8;:21::i;:::-;23793:343;23723:413;;:::o;25098:340::-;25293:41;20231:10;25312:12;20151:98;25293:41;25285:103;;;;-1:-1:-1;;;25285:103:0;;;;;;;:::i;:::-;25402:28;25412:4;25418:2;25422:7;25402:9;:28::i;72334:77::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72389:7:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;72389:16:0;;::::1;::::0;;;::::1;::::0;;72334:77::o;70340:344::-;70429:4;27696:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27696:16:0;70446:73;;;;-1:-1:-1;;;70446:73:0;;17776:2:1;70446:73:0;;;17758:21:1;17815:2;17795:18;;;17788:30;17854:34;17834:18;;;17827:62;-1:-1:-1;;;17905:18:1;;;17898:42;17957:19;;70446:73:0;17574:408:1;70446:73:0;70530:13;70546:23;70561:7;70546:14;:23::i;:::-;70530:39;;70599:5;-1:-1:-1;;;;;70588:16:0;:7;-1:-1:-1;;;;;70588:16:0;;:51;;;;70632:7;-1:-1:-1;;;;;70608:31:0;:20;70620:7;70608:11;:20::i;:::-;-1:-1:-1;;;;;70608:31:0;;70588:51;:87;;;-1:-1:-1;;;;;;24987:25:0;;;24963:4;24987:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;70643:32;70580:96;70340:344;-1:-1:-1;;;;70340:344:0:o;73356:205::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;73446:12:::1;::::0;73439:45:::1;::::0;-1:-1:-1;;;73439:45:0;;73478:4:::1;73439:45;::::0;::::1;8766:51:1::0;73417:19:0::1;::::0;-1:-1:-1;;;;;73446:12:0::1;::::0;73439:30:::1;::::0;8739:18:1;;73439:45:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;73502:12;::::0;73417:67;;-1:-1:-1;73495:58:0::1;::::0;-1:-1:-1;;;;;73502:12:0::1;73529:10;73417:67:::0;73495:33:::1;:58::i;:::-;73406:155;73356:205::o:0;71805:84::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71866:10:::1;:17:::0;71805:84::o;35102:256::-;35199:7;35235:23;35252:5;35235:16;:23::i;:::-;35227:5;:31;35219:87;;;;-1:-1:-1;;;35219:87:0;;12343:2:1;35219:87:0;;;12325:21:1;12382:2;12362:18;;;12355:30;12421:34;12401:18;;;12394:62;-1:-1:-1;;;12472:18:1;;;12465:41;12523:19;;35219:87:0;12141:407:1;35219:87:0;-1:-1:-1;;;;;;35324:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35102:256::o;73034:154::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;73090:7:::1;73111;42026:6:::0;;-1:-1:-1;;;;;42026:6:0;;41953:87;73111:7:::1;-1:-1:-1::0;;;;;73103:21:0::1;73132;73103:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;73089:69;;;73173:2;73165:11;;;::::0;::::1;25510:185:::0;25648:39;25665:4;25671:2;25675:7;25648:39;;;;;;;;;;;;:16;:39::i;69214:352::-;69274:16;69303:23;69329:17;69339:6;69329:9;:17::i;:::-;69303:43;;69357:25;69399:15;69385:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;69385:30:0;;69357:58;;69431:9;69426:109;69446:15;69442:1;:19;69426:109;;;69493:30;69513:6;69521:1;69493:19;:30::i;:::-;69479:8;69488:1;69479:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;69463:3;;;;:::i;:::-;;;;69426:109;;;-1:-1:-1;69552:8:0;69214:352;-1:-1:-1;;;69214:352:0:o;71719:80::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71778:4:::1;:15:::0;71719:80::o;72505:264::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72594:8:::1;:15;72613:1;72594:20;72586:39;;;::::0;-1:-1:-1;;;72586:39:0;;16623:2:1;72586:39:0::1;::::0;::::1;16605:21:1::0;16662:1;16642:18;;;16635:29;-1:-1:-1;;;16680:18:1;;;16673:36;16726:18;;72586:39:0::1;16421:329:1::0;72586:39:0::1;72648:8;72657:1;72648:11;;;;;;;;:::i;:::-;;;;;;;72637:8;:22;;;;72682:8;72691:1;72682:11;;;;;;;;:::i;:::-;;;;;;;72671:8;:22;;;;72716:8;72725:1;72716:11;;;;;;;;:::i;:::-;;;;;;;72705:8;:22;;;;72750:8;72759:1;72750:11;;;;;;;;:::i;:::-;;;;;;;72739:8;:22;;;;72505:264:::0;:::o;35626:233::-;35701:7;35737:30;35523:10;:17;;35435:113;35737:30;35729:5;:38;35721:95;;;;-1:-1:-1;;;35721:95:0;;28641:2:1;35721:95:0;;;28623:21:1;28680:2;28660:18;;;28653:30;28719:34;28699:18;;;28692:62;-1:-1:-1;;;28770:18:1;;;28763:42;28822:19;;35721:95:0;28439:408:1;35721:95:0;35834:10;35845:5;35834:17;;;;;;;;:::i;:::-;;;;;;;;;35827:24;;35626:233;;;:::o;70957:118::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71040:20:::1;::::0;;;:11:::1;:20;::::0;;;;;:28;70957:118::o;72019:98::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72090:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;62244:336::-:0;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;62321:41:::1;20231:10:::0;62340:12:::1;20151:98:::0;62321:41:::1;62313:86;;;;-1:-1:-1::0;;;62313:86:0::1;;;;;;;:::i;:::-;62410:16;62430:17:::0;;;:8:::1;:17;::::0;;;;;62477:1:::1;62466:12:::0;::::1;62458:34;;;;-1:-1:-1::0;;;62458:34:0::1;;;;;;;:::i;:::-;62503:40;62512:10;53771:1;62534:8;62503;:40::i;:::-;62554:17;::::0;;;:8:::1;:17;::::0;;;;:19;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;48695:1:0;49649:7;:22;-1:-1:-1;;62244:336:0:o;22329:239::-;22401:7;22437:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22437:16:0;22472:19;22464:73;;;;-1:-1:-1;;;22464:73:0;;20887:2:1;22464:73:0;;;20869:21:1;20926:2;20906:18;;;20899:30;20965:34;20945:18;;;20938:62;-1:-1:-1;;;21016:18:1;;;21009:39;21065:19;;22464:73:0;20685:405:1;67397:306:0;67459:11;67496:4;;67485:7;:15;67482:215;;-1:-1:-1;67519:1:0;;67397:306;-1:-1:-1;67397:306:0:o;67482:215::-;67551:4;;67540:7;:15;67537:160;;-1:-1:-1;67574:1:0;;67397:306;-1:-1:-1;67397:306:0:o;67537:160::-;67606:4;;67595:7;:15;67592:105;;-1:-1:-1;67629:1:0;;67397:306;-1:-1:-1;67397:306:0:o;67592:105::-;67661:4;;67650:7;:15;67647:50;;-1:-1:-1;67684:1:0;;67397:306;-1:-1:-1;67397:306:0:o;67647:50::-;67397:306;;;:::o;52987:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;71619:94::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71685:9:::1;:22:::0;71619:94::o;22058:208::-;22130:7;-1:-1:-1;;;;;22158:19:0;;22150:74;;;;-1:-1:-1;;;22150:74:0;;20476:2:1;22150:74:0;;;20458:21:1;20515:2;20495:18;;;20488:30;20554:34;20534:18;;;20527:62;-1:-1:-1;;;20605:18:1;;;20598:40;20655:19;;22150:74:0;20274:406:1;22150:74:0;-1:-1:-1;;;;;;22242:16:0;;;;;:9;:16;;;;;;;22058:208::o;68109:1098::-;68170:12;68196:18;;;:9;:18;;;;;;68217:1;-1:-1:-1;68193:1008:0;;;-1:-1:-1;68236:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68193:1008::-;68256:18;;;;:9;:18;;;;;;68277:1;-1:-1:-1;68253:948:0;;;-1:-1:-1;68296:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68253:948::-;68320:18;;;;:9;:18;;;;;;68341:2;-1:-1:-1;68317:884:0;;;-1:-1:-1;68361:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68317:884::-;68385:18;;;;:9;:18;;;;;;68406:2;-1:-1:-1;68382:819:0;;;-1:-1:-1;68426:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68382:819::-;68450:18;;;;:9;:18;;;;;;68471:2;-1:-1:-1;68447:754:0;;;-1:-1:-1;68491:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68447:754::-;68515:18;;;;:9;:18;;;;;;68536:2;-1:-1:-1;68512:689:0;;;-1:-1:-1;68556:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68512:689::-;68580:18;;;;:9;:18;;;;;;68601:2;-1:-1:-1;68577:624:0;;;-1:-1:-1;68621:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68577:624::-;68645:18;;;;:9;:18;;;;;;68666:2;-1:-1:-1;68642:559:0;;;-1:-1:-1;68686:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68642:559::-;68710:18;;;;:9;:18;;;;;;68731:2;-1:-1:-1;68707:494:0;;;-1:-1:-1;68751:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68707:494::-;68775:18;;;;:9;:18;;;;;;68796:2;-1:-1:-1;68772:429:0;;;-1:-1:-1;68816:1:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68772:429::-;68840:18;;;;:9;:18;;;;;;68861:2;-1:-1:-1;68837:364:0;;;-1:-1:-1;68881:2:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68837:364::-;68906:18;;;;:9;:18;;;;;;68927:2;-1:-1:-1;68903:298:0;;;-1:-1:-1;68947:2:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68903:298::-;68972:18;;;;:9;:18;;;;;;68993:2;-1:-1:-1;68969:232:0;;;-1:-1:-1;69013:2:0;;68109:1098;-1:-1:-1;68109:1098:0:o;68969:232::-;69038:18;;;;:9;:18;;;;;;69059:2;-1:-1:-1;69035:166:0;;;-1:-1:-1;69079:2:0;;68109:1098;-1:-1:-1;68109:1098:0:o;69035:166::-;69104:18;;;;:9;:18;;;;;;69125:2;-1:-1:-1;69101:100:0;;;-1:-1:-1;69145:2:0;;68109:1098;-1:-1:-1;68109:1098:0:o;69101:100::-;-1:-1:-1;69184:2:0;;68109:1098;-1:-1:-1;68109:1098:0:o;42606:94::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;42671:21:::1;42689:1;42671:9;:21::i;:::-;42606:94::o:0;62587:3425::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;62685:41:::1;20231:10:::0;62704:12:::1;62718:7;62685:18;:41::i;:::-;62677:87;;;::::0;-1:-1:-1;;;62677:87:0;;26645:2:1;62677:87:0::1;::::0;::::1;26627:21:1::0;26684:2;26664:18;;;26657:30;26723:34;26703:18;;;26696:62;-1:-1:-1;;;26774:18:1;;;26767:31;26815:19;;62677:87:0::1;26443:397:1::0;62677:87:0::1;62783:42;20231:10:::0;62802:12:::1;20151:98:::0;62783:42:::1;62775:89;;;::::0;-1:-1:-1;;;62775:89:0;;30998:2:1;62775:89:0::1;::::0;::::1;30980:21:1::0;31037:2;31017:18;;;31010:30;31076:34;31056:18;;;31049:62;-1:-1:-1;;;31127:18:1;;;31120:32;31169:19;;62775:89:0::1;30796:398:1::0;62775:89:0::1;62885:16;62905:21:::0;;;:11:::1;:21;::::0;;;;;;;;62956:18;;;:9:::1;:18:::0;;;;;;;63000:2:::1;62988:14:::0;::::1;62985:3022;;;63014:19;;-1:-1:-1::0;;;63014:19:0::1;;;;;;;:::i;62985:3022::-;63064:1;63053:8;:12;63050:2957;;;63085:19;::::0;;;:9:::1;:19;::::0;;;;;63108:2:::1;-1:-1:-1::0;63085:25:0::1;63077:81;;;::::0;-1:-1:-1;;;63077:81:0;;14348:2:1;63077:81:0::1;::::0;::::1;14330:21:1::0;14387:2;14367:18;;;14360:30;14426:34;14406:18;;;14399:62;-1:-1:-1;;;14477:18:1;;;14470:41;14528:19;;63077:81:0::1;14146:407:1::0;63077:81:0::1;63177:18;::::0;;;:9:::1;:18;::::0;;;;;63199:2:::1;-1:-1:-1::0;63177:24:0::1;63169:79;;;::::0;-1:-1:-1;;;63169:79:0;;21641:2:1;63169:79:0::1;::::0;::::1;21623:21:1::0;21680:2;21660:18;;;21653:30;21719:34;21699:18;;;21692:62;-1:-1:-1;;;21770:18:1;;;21763:40;21820:19;;63169:79:0::1;21439:406:1::0;63169:79:0::1;63296:24;63312:7;63296:15;:24::i;:::-;63267:25;63283:8;63267:15;:25::i;:::-;:53;;63259:113;;;;-1:-1:-1::0;;;63259:113:0::1;;;;;;;:::i;:::-;63383:106;63421:10;63441:4;63459:28;63480:7:::0;63459:18:::1;:28;:::i;:::-;63448:40;::::0;:7:::1;:40;:::i;63383:106::-;63500:63;63510:52;63529:28;63550:7:::0;63529:18:::1;:28;:::i;:::-;63518:40;::::0;:7:::1;:40;:::i;63500:63::-;63608:8;::::0;63574:98:::1;::::0;-1:-1:-1;;;;;63608:8:0::1;63618:53;63637:28;63658:7:::0;63637:18:::1;:28;:::i;:::-;63626:40;::::0;:7:::1;:40;:::i;63574:98::-;63683:19;63694:7;63683:10;:19::i;:::-;63713:21;::::0;;;:11:::1;:21;::::0;;;;:23;;;::::1;::::0;::::1;:::i;:::-;;;;;;63050:2957;;;63767:1;63756:8;:12;63753:2254;;;63788:19;::::0;;;:9:::1;:19;::::0;;;;;63811:2:::1;-1:-1:-1::0;63788:25:0::1;63780:81;;;::::0;-1:-1:-1;;;63780:81:0;;17364:2:1;63780:81:0::1;::::0;::::1;17346:21:1::0;17403:2;17383:18;;;17376:30;17442:34;17422:18;;;17415:62;-1:-1:-1;;;17493:18:1;;;17486:41;17544:19;;63780:81:0::1;17162:407:1::0;63780:81:0::1;63880:18;::::0;;;:9:::1;:18;::::0;;;;;63902:2:::1;-1:-1:-1::0;63880:24:0::1;63872:79;;;::::0;-1:-1:-1;;;63872:79:0;;23882:2:1;63872:79:0::1;::::0;::::1;23864:21:1::0;23921:2;23901:18;;;23894:30;23960:34;23940:18;;;23933:62;-1:-1:-1;;;24011:18:1;;;24004:40;24061:19;;63872:79:0::1;23680:406:1::0;63872:79:0::1;63999:24;64015:7;63999:15;:24::i;:::-;63970:25;63986:8;63970:15;:25::i;:::-;:53;;63962:113;;;;-1:-1:-1::0;;;63962:113:0::1;;;;;;;:::i;:::-;64086:106;64124:10;64144:4;64162:28;64183:7:::0;64162:18:::1;:28;:::i;:::-;64151:40;::::0;:7:::1;:40;:::i;64086:106::-;64203:63;64213:52;64232:28;64253:7:::0;64232:18:::1;:28;:::i;:::-;64221:40;::::0;:7:::1;:40;:::i;64203:63::-;64311:8;::::0;64277:98:::1;::::0;-1:-1:-1;;;;;64311:8:0::1;64321:53;64340:28;64361:7:::0;64340:18:::1;:28;:::i;:::-;64329:40;::::0;:7:::1;:40;:::i;63753:2254::-;64470:1;64459:8;:12;64456:1551;;;64491:19;::::0;;;:9:::1;:19;::::0;;;;;64514:2:::1;-1:-1:-1::0;64491:25:0::1;64483:81;;;::::0;-1:-1:-1;;;64483:81:0;;11585:2:1;64483:81:0::1;::::0;::::1;11567:21:1::0;11624:2;11604:18;;;11597:30;11663:34;11643:18;;;11636:62;-1:-1:-1;;;11714:18:1;;;11707:41;11765:19;;64483:81:0::1;11383:407:1::0;64483:81:0::1;64583:18;::::0;;;:9:::1;:18;::::0;;;;;64605:2:::1;-1:-1:-1::0;64583:24:0::1;64575:79;;;::::0;-1:-1:-1;;;64575:79:0;;19311:2:1;64575:79:0::1;::::0;::::1;19293:21:1::0;19350:2;19330:18;;;19323:30;19389:34;19369:18;;;19362:62;-1:-1:-1;;;19440:18:1;;;19433:40;19490:19;;64575:79:0::1;19109:406:1::0;64575:79:0::1;64673:20;::::0;;;:11:::1;:20;::::0;;;;;64697:1:::1;64673:25;64665:71;;;::::0;-1:-1:-1;;;64665:71:0;;30596:2:1;64665:71:0::1;::::0;::::1;30578:21:1::0;30635:2;30615:18;;;30608:30;30674:34;30654:18;;;30647:62;-1:-1:-1;;;30725:18:1;;;30718:31;30766:19;;64665:71:0::1;30394:397:1::0;64456:1551:0::1;65260:19;::::0;;;:9:::1;:19;::::0;;;;;65283:3:::1;-1:-1:-1::0;65260:26:0::1;65252:83;;;::::0;-1:-1:-1;;;65252:83:0;;15114:2:1;65252:83:0::1;::::0;::::1;15096:21:1::0;15153:2;15133:18;;;15126:30;15192:34;15172:18;;;15165:62;-1:-1:-1;;;15243:18:1;;;15236:42;15295:19;;65252:83:0::1;14912:408:1::0;65252:83:0::1;65354:18;::::0;;;:9:::1;:18;::::0;;;;;65376:2:::1;-1:-1:-1::0;65354:24:0::1;65346:79;;;::::0;-1:-1:-1;;;65346:79:0;;29825:2:1;65346:79:0::1;::::0;::::1;29807:21:1::0;29864:2;29844:18;;;29837:30;29903:34;29883:18;;;29876:62;-1:-1:-1;;;29954:18:1;;;29947:40;30004:19;;65346:79:0::1;29623:406:1::0;65346:79:0::1;65444:20;::::0;;;:11:::1;:20;::::0;;;;;65468:1:::1;65444:25;65436:71;;;::::0;-1:-1:-1;;;65436:71:0;;27465:2:1;65436:71:0::1;::::0;::::1;27447:21:1::0;27504:2;27484:18;;;27477:30;27543:34;27523:18;;;27516:62;-1:-1:-1;;;27594:18:1;;;27587:31;27635:19;;65436:71:0::1;27263:397:1::0;65436:71:0::1;65555:24;65571:7;65555:15;:24::i;:::-;65526:25;65542:8;65526:15;:25::i;:::-;:53;;65518:113;;;;-1:-1:-1::0;;;65518:113:0::1;;;;;;;:::i;:::-;65642:106;65680:10;65700:4;65718:28;65739:7:::0;65718:18:::1;:28;:::i;65642:106::-;65759:63;65769:52;65788:28;65809:7:::0;65788:18:::1;:28;:::i;65759:63::-;65867:8;::::0;65833:98:::1;::::0;-1:-1:-1;;;;;65867:8:0::1;65877:53;65896:28;65917:7:::0;65896:18:::1;:28;:::i;65833:98::-;65942:19;65953:7;65942:10;:19::i;:::-;65972:21;::::0;;;:11:::1;:21;::::0;;;;:23;;;::::1;::::0;::::1;:::i;:::-;;;;;;64456:1551;-1:-1:-1::0;;48695:1:0;49649:7;:22;-1:-1:-1;;62587:3425:0:o;71896:116::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71973:13:::1;:33:::0;71896:116::o;70834:115::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;70917:17:::1;::::0;;;:8:::1;:17;::::0;;;;;:25;70834:115::o;22806:104::-;22862:13;22895:7;22888:14;;;;;:::i;57909:1554::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;57988:6:::1;::::0;::::1;;57987:7;57979:42;;;;-1:-1:-1::0;;;57979:42:0::1;;;;;;;:::i;:::-;58058:9;::::0;58040:10:::1;::::0;:14:::1;::::0;58053:1:::1;58040:14;:::i;:::-;:27;;58032:55;;;;-1:-1:-1::0;;;58032:55:0::1;;;;;;;:::i;:::-;58098:14;58115:13;35523:10:::0;:17;;35435:113;58115:13:::1;58098:30;;58157:1;58147:7;:11;58139:42;;;;-1:-1:-1::0;;;58139:42:0::1;;;;;;;:::i;:::-;58214:9;::::0;58200:10:::1;:6:::0;58209:1:::1;58200:10;:::i;:::-;:23;;58192:58;;;;-1:-1:-1::0;;;58192:58:0::1;;;;;;;:::i;:::-;58276:14;::::0;58269:39:::1;::::0;-1:-1:-1;;;58269:39:0;;::::1;::::0;::::1;31345:25:1::0;;;58312:10:0::1;::::0;58276:14;;::::1;-1:-1:-1::0;;;;;58276:14:0::1;::::0;58269:30:::1;::::0;31318:18:1;;58269:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;58269:53:0::1;;58261:83;;;;-1:-1:-1::0;;;58261:83:0::1;;;;;;;:::i;:::-;58355:17;58375;:15;:17::i;:::-;58355:37;;58403:17;58423;:15;:17::i;:::-;58403:37;;58471:1;58459:8;:13;;:30;;;;58488:1;58476:8;:13;;58459:30;:60;;;-1:-1:-1::0;58518:1:0::1;58494:19;58505:8:::0;58494;:19:::1;:::i;:::-;58493:26;;58459:60;58451:94;;;;-1:-1:-1::0;;;58451:94:0::1;;;;;;;:::i;:::-;58564:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:28;58556:84;;;::::0;-1:-1:-1;;;58556:84:0;;26233:2:1;58556:84:0::1;::::0;::::1;26215:21:1::0;26272:2;26252:18;;;26245:30;26311:34;26291:18;;;26284:62;-1:-1:-1;;;26362:18:1;;;26355:41;26413:19;;58556:84:0::1;26031:407:1::0;58556:84:0::1;58654:7;::::0;;;::::1;;;:15;;58665:4;58654:15;58651:95;;;58706:10;::::0;58689:14:::1;::::0;;;:5:::1;:14;::::0;;;;;:27:::1;58681:53;;;;-1:-1:-1::0;;;58681:53:0::1;;;;;;;:::i;:::-;58756:108;58794:10;58814:4;58839:24;58855:7;58839:15;:24::i;58756:108::-;58875:65;58885:54;58911:24;58927:7;58911:15;:24::i;58875:65::-;58985:8;::::0;58951:100:::1;::::0;-1:-1:-1;;;;;58985:8:0::1;58995:55;59021:24;59037:7:::0;59021:15:::1;:24::i;58951:100::-;59062:19;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;59062:26:0::1;59084:4;59062:26;::::0;;59103:15:::1;::::0;:26;-1:-1:-1;59099:79:0::1;;59141:15;:25:::0;;;59099:79:::1;59205:1;59188:264;59213:1;59208;:6;59188:264;;59232:37;59242:10;59267:1;59254:10;;:14;;;;:::i;59232:37::-;59308:1;59280:9;:25;59303:1;59290:10;;:14;;;;:::i;:::-;59280:25;;;;;;;;;;;:29;;;;59350:1;59320:11;:27;59345:1;59332:10;;:14;;;;:::i;:::-;59320:27;;;;;;;;;;;:31;;;;59389:1;59362:8;:24;59384:1;59371:10;;:14;;;;:::i;:::-;59362:24:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;59362:24:0;;;:28;;;;59401:14;;;:5:::1;:14:::0;;;;;:16;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;59428:10:0::1;:12:::0;;;:10:::1;:12;::::0;::::1;:::i;:::-;;;;;;59216:3;;;;;:::i;:::-;;;;59188:264;;71507:106:::0;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71579:14:::1;:28:::0;;-1:-1:-1;;;;;;71579:28:0::1;-1:-1:-1::0;;;;;71579:28:0;;;::::1;::::0;;;::::1;::::0;;71507:106::o;24498:296::-;-1:-1:-1;;;;;24601:24:0;;20231:10;24601:24;;24593:62;;;;-1:-1:-1;;;24593:62:0;;16269:2:1;24593:62:0;;;16251:21:1;16308:2;16288:18;;;16281:30;16347:27;16327:18;;;16320:55;16392:18;;24593:62:0;16067:349:1;24593:62:0;20231:10;24669:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24669:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24669:53:0;;;;;;;;;;24738:48;;11107:41:1;;;24669:42:0;;20231:10;24738:48;;11080:18:1;24738:48:0;;;;;;;24498:296;;:::o;72776:246::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72863:8:::1;:15;72882:1;72863:20;72855:39;;;::::0;-1:-1:-1;;;72855:39:0;;16623:2:1;72855:39:0::1;::::0;::::1;16605:21:1::0;16662:1;16642:18;;;16635:29;-1:-1:-1;;;16680:18:1;;;16673:36;16726:18;;72855:39:0::1;16421:329:1::0;72855:39:0::1;72913:8;72922:1;72913:11;;;;;;;;:::i;:::-;;;;;;;72906:4;:18;;;;72943:8;72952:1;72943:11;;;;;;;;:::i;:::-;;;;;;;72936:4;:18;;;;72973:8;72982:1;72973:11;;;;;;;;:::i;:::-;;;;;;;72966:4;:18;;;;73003:8;73012:1;73003:11;;;;;;;;:::i;:::-;;;;;;;72996:4;:18;;;;72776:246:::0;:::o;71393:106::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71465:14:::1;:28:::0;;-1:-1:-1;;;;;71465:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;71465:28:0;;::::1;::::0;;;::::1;::::0;;71393:106::o;25767:328::-;25942:41;20231:10;25961:12;20151:98;25942:41;25934:103;;;;-1:-1:-1;;;25934:103:0;;;;;;;:::i;:::-;26048:39;26062:4;26068:2;26072:7;26081:5;26048:13;:39::i;:::-;25767:328;;;;:::o;66343:310::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;66431:14:::1;::::0;66424:39:::1;::::0;-1:-1:-1;;;66424:39:0;;::::1;::::0;::::1;31345:25:1::0;;;66467:10:0::1;::::0;66431:14;;::::1;-1:-1:-1::0;;;;;66431:14:0::1;::::0;66424:30:::1;::::0;31318:18:1;;66424:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;66424:53:0::1;;66416:83;;;;-1:-1:-1::0;;;66416:83:0::1;;;;;;;:::i;:::-;66517:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27:::1;66509:55;;;;-1:-1:-1::0;;;66509:55:0::1;;;;;;;:::i;:::-;66574:36;66583:10;53730:1;66608::::0;66574:8:::1;:36::i;:::-;66642:5;66620:19:::0;;;:10:::1;:19;::::0;;;;:27;;-1:-1:-1;;66620:27:0::1;::::0;;;49649:7;:22;66343:310::o;53013:37::-;;;;;;;:::i;69573:400::-;27672:4;27696:16;;;:7;:16;;;;;;69646:13;;-1:-1:-1;;;;;27696:16:0;69671:75;;;;-1:-1:-1;;;69671:75:0;;25054:2:1;69671:75:0;;;25036:21:1;25093:2;25073:18;;;25066:30;25132:34;25112:18;;;25105:62;-1:-1:-1;;;25183:18:1;;;25176:45;25238:19;;69671:75:0;24852:411:1;69671:75:0;69767:28;69798:10;:8;:10::i;:::-;69767:41;;69857:1;69832:14;69826:28;:32;:141;;;;;;;;;;;;;;;;;69898:14;69914:18;:7;:16;:18::i;:::-;69934:13;69881:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69826:141;69819:148;69573:400;-1:-1:-1;;;69573:400:0:o;66022:316::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;66110:14:::1;::::0;66103:39:::1;::::0;-1:-1:-1;;;66103:39:0;;::::1;::::0;::::1;31345:25:1::0;;;66146:10:0::1;::::0;-1:-1:-1;;;;;66110:14:0::1;::::0;66103:30:::1;::::0;31318:18:1;;66103:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;66103:53:0::1;;66095:83;;;;-1:-1:-1::0;;;66095:83:0::1;;;;;;;:::i;:::-;66196:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27:::1;66188:55;;;;-1:-1:-1::0;;;66188:55:0::1;;;;;;;:::i;:::-;66253:36;66262:10;53730:1;66287::::0;66253:8:::1;:36::i;:::-;66321:5;66299:19:::0;;;:10:::1;:19;::::0;;;;:27;;-1:-1:-1;;66299:27:0::1;::::0;;;49649:7;:22;66022:316::o;71185:100::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71250:14:::1;:28:::0;;-1:-1:-1;;;;;;71250:28:0::1;-1:-1:-1::0;;;;;71250:28:0;;;::::1;::::0;;;::::1;::::0;;71185:100::o;72124:122::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72207:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;59468:1775::-:0;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;59545:6:::1;::::0;::::1;;59544:7;59536:42;;;;-1:-1:-1::0;;;59536:42:0::1;;;;;;;:::i;:::-;59598:9;::::0;::::1;::::0;::::1;;;59597:10;59589:48;;;::::0;-1:-1:-1;;;59589:48:0;;14760:2:1;59589:48:0::1;::::0;::::1;14742:21:1::0;14799:2;14779:18;;;14772:30;14838:27;14818:18;;;14811:55;14883:18;;59589:48:0::1;14558:349:1::0;59589:48:0::1;59674:9;::::0;59656:10:::1;::::0;:14:::1;::::0;59669:1:::1;59656:14;:::i;:::-;:27;;59648:55;;;;-1:-1:-1::0;;;59648:55:0::1;;;;;;;:::i;:::-;59714:14;59731:13;35523:10:::0;:17;;35435:113;59731:13:::1;59714:30;;59773:1;59763:7;:11;59755:42;;;;-1:-1:-1::0;;;59755:42:0::1;;;;;;;:::i;:::-;59830:9;::::0;59816:10:::1;:6:::0;59825:1:::1;59816:10;:::i;:::-;:23;;59808:58;;;;-1:-1:-1::0;;;59808:58:0::1;;;;;;;:::i;:::-;59885:41;20231:10:::0;59904:12:::1;20151:98:::0;59885:41:::1;59877:86;;;;-1:-1:-1::0;;;59877:86:0::1;;;;;;;:::i;:::-;59982:18;::::0;;;:9:::1;:18;::::0;;;;;60004:2:::1;-1:-1:-1::0;59982:24:0::1;59974:68;;;::::0;-1:-1:-1;;;59974:68:0;;29054:2:1;59974:68:0::1;::::0;::::1;29036:21:1::0;29093:2;29073:18;;;29066:30;29132:33;29112:18;;;29105:61;29183:18;;59974:68:0::1;28852:355:1::0;59974:68:0::1;60053:17;60073;:15;:17::i;:::-;60053:37;;60101:17;60121;:15;:17::i;:::-;60101:37;;60149:17;60169:21;60179:10;60169:9;:21::i;:::-;60149:41;;60221:1;60209:8;:13;;:30;;;;60238:1;60226:8;:13;;60209:30;:47;;;;60255:1;60243:8;:13;;60209:47;:88;;;-1:-1:-1::0;60296:1:0::1;60283:8:::0;60261:19:::1;60272:8:::0;60261;:19:::1;:::i;:::-;:30;;;;:::i;:::-;60260:37;;60209:88;60201:122;;;;-1:-1:-1::0;;;60201:122:0::1;;;;;;;:::i;:::-;60342:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:28;60334:82;;;::::0;-1:-1:-1;;;60334:82:0;;13938:2:1;60334:82:0::1;::::0;::::1;13920:21:1::0;13977:2;13957:18;;;13950:30;14016:34;13996:18;;;13989:62;-1:-1:-1;;;14067:18:1;;;14060:39;14116:19;;60334:82:0::1;13736:405:1::0;60334:82:0::1;60430:7;::::0;;;::::1;;;:15;;60441:4;60430:15;60427:95;;;60482:10;::::0;60465:14:::1;::::0;;;:5:::1;:14;::::0;;;;;:27:::1;60457:53;;;;-1:-1:-1::0;;;60457:53:0::1;;;;;;;:::i;:::-;60532:108;60570:10;60590:4;60615:24;60631:7;60615:15;:24::i;60532:108::-;60651:65;60661:54;60687:24;60703:7;60687:15;:24::i;60651:65::-;60761:8;::::0;60727:100:::1;::::0;-1:-1:-1;;;;;60761:8:0::1;60771:55;60797:24;60813:7:::0;60797:15:::1;:24::i;60727:100::-;60838:19;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;60838:26:0::1;60860:4;60838:26;::::0;;60879:15:::1;::::0;:26;-1:-1:-1;60875:83:0::1;;60921:15;:25:::0;;;60875:83:::1;60985:1;60968:264;60993:1;60988;:6;60968:264;;61012:37;61022:10;61047:1;61034:10;;:14;;;;:::i;61012:37::-;61088:1;61060:9;:25;61083:1;61070:10;;:14;;;;:::i;:::-;61060:25;;;;;;;;;;;:29;;;;61130:1;61100:11;:27;61125:1;61112:10;;:14;;;;:::i;:::-;61100:27;;;;;;;;;;;:31;;;;61169:1;61142:8;:24;61164:1;61151:10;;:14;;;;:::i;:::-;61142:24:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;61142:24:0;;;:28;;;;61181:14;;;:5:::1;:14:::0;;;;;:16;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;61208:10:0::1;:12:::0;;;:10:::1;:12;::::0;::::1;:::i;:::-;;;;;;60996:3;;;;;:::i;:::-;;;;60968:264;;;-1:-1:-1::0;;48695:1:0;49649:7;:22;-1:-1:-1;;;;59468:1775:0:o;70709:118::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;70794:18:::1;::::0;;;:9:::1;:18;::::0;;;;;:26;70709:118::o;67710:391::-;67769:12;67795:24;67811:7;67795:15;:24::i;:::-;67823:1;67795:29;67792:303;;;-1:-1:-1;;67842:8:0;;;67710:391::o;67792:303::-;67869:24;67885:7;67869:15;:24::i;:::-;67897:1;67869:29;67866:229;;;-1:-1:-1;;67916:8:0;;;67710:391::o;67866:229::-;67947:24;67963:7;67947:15;:24::i;:::-;67975:1;67947:29;67944:151;;;-1:-1:-1;;67994:8:0;;;67710:391::o;67944:151::-;68025:24;68041:7;68025:15;:24::i;:::-;68053:1;68025:29;68022:73;;;-1:-1:-1;;68072:8:0;;;67710:391::o;71082:96::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71145:12:::1;:26:::0;;-1:-1:-1;;;;;;71145:26:0::1;-1:-1:-1::0;;;;;71145:26:0;;;::::1;::::0;;;::::1;::::0;;71082:96::o;71293:94::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71359:8:::1;:22:::0;;-1:-1:-1;;;;;;71359:22:0::1;-1:-1:-1::0;;;;;71359:22:0;;;::::1;::::0;;;::::1;::::0;;71293:94::o;61247:309::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;61326:1:::1;61309:242;61334:6;61329:1;:11;61309:242;;61358:37;61368:10;61393:1;61380:10;;:14;;;;:::i;61358:37::-;61434:1;61406:9;:25;61429:1;61416:10;;:14;;;;:::i;:::-;61406:25;;;;;;;;;;;:29;;;;61476:1;61446:11;:27;61471:1;61458:10;;:14;;;;:::i;:::-;61446:27;;;;;;;;;;;:31;;;;61515:1;61488:8;:24;61510:1;61497:10;;:14;;;;:::i;:::-;61488:24;;;;;;;;;;;:28;;;;61527:10;;:12;;;;;;;;;:::i;:::-;;;;;;61342:3;;;;;:::i;:::-;;;;61309:242;;42856:192:::0;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42945:22:0;::::1;42937:73;;;::::0;-1:-1:-1;;;42937:73:0;;13174:2:1;42937:73:0::1;::::0;::::1;13156:21:1::0;13213:2;13193:18;;;13186:30;13252:34;13232:18;;;13225:62;-1:-1:-1;;;13303:18:1;;;13296:36;13349:19;;42937:73:0::1;12972:402:1::0;42937:73:0::1;43021:19;43031:8;43021:9;:19::i;61562:675::-:0;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;61640:41:::1;20231:10:::0;61659:12:::1;20151:98:::0;61640:41:::1;61632:86;;;;-1:-1:-1::0;;;61632:86:0::1;;;;;;;:::i;:::-;61729:16;61749:18:::0;;;:9:::1;:18;::::0;;;;;61797:3:::1;61786:14:::0;::::1;61778:36;;;;-1:-1:-1::0;;;61778:36:0::1;;;;;;;:::i;:::-;61825:56;61834:10;53686:1;61857:23;61872:7;61857:14;:23::i;:::-;61825:8;:56::i;:::-;61892:110;61930:10;61950:4;61992:8;61968:21;61981:7;61968:12;:21::i;:::-;:32;;;;:::i;61892:110::-;62047:8;::::0;62013:102:::1;::::0;-1:-1:-1;;;;;62047:8:0::1;62057:57;62100:8:::0;62076:21:::1;62089:7:::0;62076:12:::1;:21::i;:::-;:32;;;;:::i;62013:102::-;62126:67;62136:56;62179:8;62155:21;62168:7;62155:12;:21::i;:::-;:32;;;;:::i;62126:67::-;62204:18;::::0;;;:9:::1;:18;::::0;;;;:20;;;::::1;::::0;::::1;:::i;55704:188::-:0;55817:14;;55856:30;;-1:-1:-1;;;55856:30:0;;55875:10;55856:30;;;8766:51:1;55749:7:0;;;;-1:-1:-1;;;;;55817:14:0;;;;;;55856:18;;8739::1;;55856:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;55897:192::-;56012:14;;56052:31;;-1:-1:-1;;;56052:31:0;;56072:10;56052:31;;;8766:51:1;55942:7:0;;;;56012:14;;;;-1:-1:-1;;;;;56012:14:0;;;;56052:19;;8739:18:1;;56052:31:0;8620:203:1;43984:248:0;44155:68;;-1:-1:-1;;;;;9086:15:1;;;44155:68:0;;;9068:34:1;9138:15;;9118:18;;;9111:43;9170:18;;;9163:34;;;44128:96:0;;44148:5;;-1:-1:-1;;;44178:27:0;9003:18:1;;44155:68:0;;;;-1:-1:-1;;44155:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;44155:68:0;-1:-1:-1;;;;;;44155:68:0;;;;;;;;;;44128:19;:96::i;55173:183::-;55247:7;;55322:3;55302:17;55312:7;55302;:17;:::i;:::-;:23;;;;:::i;55468:93::-;55528:12;;55522:33;;-1:-1:-1;;;55522:33:0;;;;;31345:25:1;;;-1:-1:-1;;;;;55528:12:0;;;;55522:24;;31318:18:1;;55522:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55468:93;:::o;43765:211::-;43909:58;;-1:-1:-1;;;;;9893:32:1;;43909:58:0;;;9875:51:1;9942:18;;;9935:34;;;43882:86:0;;43902:5;;-1:-1:-1;;;43932:23:0;9848:18:1;;43909:58:0;9701:274:1;28593:110:0;28669:26;28679:2;28683:7;28669:26;;;;;;;;;;;;:9;:26::i;21688:305::-;21790:4;-1:-1:-1;;;;;;21827:40:0;;-1:-1:-1;;;21827:40:0;;:105;;-1:-1:-1;;;;;;;21884:48:0;;-1:-1:-1;;;21884:48:0;21827:105;:158;;;-1:-1:-1;;;;;;;;;;7573:40:0;;;21949:36;7464:157;55565:133;55647:14;;55639:53;;-1:-1:-1;;;55639:53:0;;-1:-1:-1;;;;;10200:32:1;;;55639:53:0;;;10182:51:1;10249:18;;;10242:34;;;10292:18;;;10285:34;;;55647:14:0;;;;55639:32;;10155:18:1;;55639:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55565:133;;;:::o;31607:174::-;31682:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31682:29:0;-1:-1:-1;;;;;31682:29:0;;;;;;;;:24;;31736:23;31682:24;31736:14;:23::i;:::-;-1:-1:-1;;;;;31727:46:0;;;;;;;;;;;31607:174;;:::o;30906:582::-;31065:4;-1:-1:-1;;;;;31038:31:0;:23;31053:7;31038:14;:23::i;:::-;-1:-1:-1;;;;;31038:31:0;;31030:85;;;;-1:-1:-1;;;31030:85:0;;24644:2:1;31030:85:0;;;24626:21:1;24683:2;24663:18;;;24656:30;24722:34;24702:18;;;24695:62;-1:-1:-1;;;24773:18:1;;;24766:39;24822:19;;31030:85:0;24442:405:1;31030:85:0;-1:-1:-1;;;;;31134:16:0;;31126:65;;;;-1:-1:-1;;;31126:65:0;;15864:2:1;31126:65:0;;;15846:21:1;15903:2;15883:18;;;15876:30;15942:34;15922:18;;;15915:62;-1:-1:-1;;;15993:18:1;;;15986:34;16037:19;;31126:65:0;15662:400:1;31126:65:0;31205:39;31226:4;31232:2;31236:7;31205:20;:39::i;:::-;31310:29;31327:1;31331:7;31310:8;:29::i;:::-;-1:-1:-1;;;;;31353:15:0;;;;;;:9;:15;;;;;:20;;31372:1;;31353:15;:20;;31372:1;;31353:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31384:13:0;;;;;;:9;:13;;;;;:18;;31401:1;;31384:13;:18;;31401:1;;31384:18;:::i;:::-;;;;-1:-1:-1;;31413:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31413:21:0;-1:-1:-1;;;;;31413:21:0;;;;;;;;;31453:27;;31413:16;;31453:27;;;;;;;30906:582;;;:::o;43057:173::-;43132:6;;;-1:-1:-1;;;;;43149:17:0;;;-1:-1:-1;;;;;;43149:17:0;;;;;;;43182:40;;43132:6;;;43149:17;43132:6;;43182:40;;43113:16;;43182:40;43102:128;43057:173;:::o;56095:229::-;56213:41;20231:10;56232:12;20151:98;56213:41;56205:86;;;;-1:-1:-1;;;56205:86:0;;;;;;;:::i;:::-;56302:14;56308:7;56302:5;:14::i;26978:315::-;27135:28;27145:4;27151:2;27155:7;27135:9;:28::i;:::-;27182:48;27205:4;27211:2;27215:7;27224:5;27182:22;:48::i;:::-;27174:111;;;;-1:-1:-1;;;27174:111:0;;;;;;;:::i;55360:102::-;55420:13;55449:7;55442:14;;;;;:::i;7945:724::-;8001:13;8223:10;8219:53;;-1:-1:-1;;8250:10:0;;;;;;;;;;;;-1:-1:-1;;;8250:10:0;;;;;7945:724::o;8219:53::-;8297:5;8282:12;8338:78;8345:9;;8338:78;;8371:8;;;;:::i;:::-;;-1:-1:-1;8394:10:0;;-1:-1:-1;8402:2:0;8394:10;;:::i;:::-;;;8338:78;;;8426:19;8458:6;8448:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8448:17:0;;8426:39;;8476:154;8483:10;;8476:154;;8510:11;8520:1;8510:11;;:::i;:::-;;-1:-1:-1;8579:10:0;8587:2;8579:5;:10;:::i;:::-;8566:24;;:2;:24;:::i;:::-;8553:39;;8536:6;8543;8536:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8536:56:0;;;;;;;;-1:-1:-1;8607:11:0;8616:2;8607:11;;:::i;:::-;;;8476:154;;46338:716;46762:23;46788:69;46816:4;46788:69;;;;;;;;;;;;;;;;;46796:5;-1:-1:-1;;;;;46788:27:0;;;:69;;;;;:::i;:::-;46872:17;;46762:95;;-1:-1:-1;46872:21:0;46868:179;;46969:10;46958:30;;;;;;;;;;;;:::i;:::-;46950:85;;;;-1:-1:-1;;;46950:85:0;;29414:2:1;46950:85:0;;;29396:21:1;29453:2;29433:18;;;29426:30;29492:34;29472:18;;;29465:62;-1:-1:-1;;;29543:18:1;;;29536:40;29593:19;;46950:85:0;29212:406:1;28931:321:0;29061:18;29067:2;29071:7;29061:5;:18::i;:::-;29112:54;29143:1;29147:2;29151:7;29160:5;29112:22;:54::i;:::-;29090:154;;;;-1:-1:-1;;;29090:154:0;;;;;;;:::i;36473:590::-;-1:-1:-1;;;;;36680:18:0;;36676:187;;36715:40;36747:7;37892:10;:17;;37865:24;;;;:15;:24;;;;;:44;;;37920:24;;;;;;;;;;;;37788:164;36715:40;36676:187;;;36785:2;-1:-1:-1;;;;;36777:10:0;:4;-1:-1:-1;;;;;36777:10:0;;36773:90;;36804:47;36837:4;36843:7;36804:32;:47::i;:::-;-1:-1:-1;;;;;36877:16:0;;36873:183;;36910:45;36947:7;36910:36;:45::i;36873:183::-;36983:4;-1:-1:-1;;;;;36977:10:0;:2;-1:-1:-1;;;;;36977:10:0;;36973:83;;37004:40;37032:2;37036:7;37004:27;:40::i;30204:364::-;30264:13;30280:23;30295:7;30280:14;:23::i;:::-;30264:39;;30317:48;30338:5;30353:1;30357:7;30317:20;:48::i;:::-;30407:29;30424:1;30428:7;30407:8;:29::i;:::-;-1:-1:-1;;;;;30450:16:0;;;;;;:9;:16;;;;;:21;;30470:1;;30450:16;:21;;30470:1;;30450:21;:::i;:::-;;;;-1:-1:-1;;30489:16:0;;;;:7;:16;;;;;;30482:23;;-1:-1:-1;;;;;;30482:23:0;;;30524:36;30497:7;;30489:16;-1:-1:-1;;;;;30524:36:0;;;;;30489:16;;30524:36;30253:315;30204:364;:::o;32347:799::-;32502:4;-1:-1:-1;;;;;32523:13:0;;10802:20;10850:8;32519:620;;32559:72;;-1:-1:-1;;;32559:72:0;;-1:-1:-1;;;;;32559:36:0;;;;;:72;;20231:10;;32610:4;;32616:7;;32625:5;;32559:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32559:72:0;;;;;;;;-1:-1:-1;;32559:72:0;;;;;;;;;;;;:::i;:::-;;;32555:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32801:13:0;;32797:272;;32844:60;;-1:-1:-1;;;32844:60:0;;;;;;;:::i;32797:272::-;33019:6;33013:13;33004:6;33000:2;32996:15;32989:38;32555:529;-1:-1:-1;;;;;;32682:51:0;-1:-1:-1;;;32682:51:0;;-1:-1:-1;32675:58:0;;32519:620;-1:-1:-1;33123:4:0;32347:799;;;;;;:::o;13289:229::-;13426:12;13458:52;13480:6;13488:4;13494:1;13497:12;13458:21;:52::i;29589:385::-;-1:-1:-1;;;;;29669:16:0;;29661:61;;;;-1:-1:-1;;;29661:61:0;;22403:2:1;29661:61:0;;;22385:21:1;;;22422:18;;;22415:30;22481:34;22461:18;;;22454:62;22533:18;;29661:61:0;22201:356:1;29661:61:0;27672:4;27696:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27696:16:0;:30;29733:58;;;;-1:-1:-1;;;29733:58:0;;13581:2:1;29733:58:0;;;13563:21:1;13620:2;13600:18;;;13593:30;13659;13639:18;;;13632:58;13707:18;;29733:58:0;13379:352:1;29733:58:0;29805:45;29834:1;29838:2;29842:7;29805:20;:45::i;:::-;-1:-1:-1;;;;;29864:13:0;;;;;;:9;:13;;;;;:18;;29881:1;;29864:13;:18;;29881:1;;29864:18;:::i;:::-;;;;-1:-1:-1;;29893:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29893:21:0;-1:-1:-1;;;;;29893:21:0;;;;;;;;29933:33;;29893:16;;;29933:33;;29893:16;;29933:33;29589:385;;:::o;38580:992::-;38847:22;38897:1;38872:22;38889:4;38872:16;:22::i;:::-;:26;;;;:::i;:::-;38909:18;38930:26;;;:17;:26;;;;;;38847:51;;-1:-1:-1;39064:28:0;;;39060:329;;-1:-1:-1;;;;;39131:18:0;;39109:19;39131:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39183:30;;;;;;:44;;;39300:30;;:17;:30;;;;;:43;;;39060:329;-1:-1:-1;39486:26:0;;;;:17;:26;;;;;;;;39479:33;;;-1:-1:-1;;;;;39530:18:0;;;;;:12;:18;;;;;:34;;;;;;;39523:41;38580:992::o;39868:1083::-;40147:10;:17;40122:22;;40147:21;;40167:1;;40147:21;:::i;:::-;40179:18;40200:24;;;:15;:24;;;;;;40574:10;:26;;40122:46;;-1:-1:-1;40200:24:0;;40122:46;;40574:26;;;;;;:::i;:::-;;;;;;;;;40552:48;;40639:11;40614:10;40625;40614:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40719:28;;;:15;:28;;;;;;;:41;;;40892:24;;;;;40885:31;40927:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39939:1012;;;39868:1083;:::o;37365:221::-;37450:14;37467:20;37484:2;37467:16;:20::i;:::-;-1:-1:-1;;;;;37498:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37543:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37365:221:0:o;14411:511::-;14581:12;14639:5;14614:21;:30;;14606:81;;;;-1:-1:-1;;;14606:81:0;;16957:2:1;14606:81:0;;;16939:21:1;16996:2;16976:18;;;16969:30;17035:34;17015:18;;;17008:62;-1:-1:-1;;;17086:18:1;;;17079:36;17132:19;;14606:81:0;16755:402:1;14606:81:0;10802:20;;14698:60;;;;-1:-1:-1;;;14698:60:0;;28283:2:1;14698:60:0;;;28265:21:1;28322:2;28302:18;;;28295:30;28361:31;28341:18;;;28334:59;28410:18;;14698:60:0;28081:353:1;14698:60:0;14773:12;14787:23;14814:6;-1:-1:-1;;;;;14814:11:0;14833:5;14840:4;14814:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14772:73;;;;14863:51;14880:7;14889:10;14901:12;14863:16;:51::i;:::-;14856:58;14411:511;-1:-1:-1;;;;;;;14411:511:0:o;17105:713::-;17255:12;17284:7;17280:531;;;-1:-1:-1;17315:10:0;17308:17;;17280:531;17429:17;;:21;17425:375;;17628:10;17622:17;17689:15;17676:10;17672:2;17668:19;17661:44;17425:375;17771:12;17764:20;;-1:-1:-1;;;17764:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:247::-;484:6;537:2;525:9;516:7;512:23;508:32;505:52;;;553:1;550;543:12;505:52;592:9;579:23;611:31;636:5;611:31;:::i;677:251::-;747:6;800:2;788:9;779:7;775:23;771:32;768:52;;;816:1;813;806:12;768:52;848:9;842:16;867:31;892:5;867:31;:::i;933:388::-;1001:6;1009;1062:2;1050:9;1041:7;1037:23;1033:32;1030:52;;;1078:1;1075;1068:12;1030:52;1117:9;1104:23;1136:31;1161:5;1136:31;:::i;:::-;1186:5;-1:-1:-1;1243:2:1;1228:18;;1215:32;1256:33;1215:32;1256:33;:::i;:::-;1308:7;1298:17;;;933:388;;;;;:::o;1326:456::-;1403:6;1411;1419;1472:2;1460:9;1451:7;1447:23;1443:32;1440:52;;;1488:1;1485;1478:12;1440:52;1527:9;1514:23;1546:31;1571:5;1546:31;:::i;:::-;1596:5;-1:-1:-1;1653:2:1;1638:18;;1625:32;1666:33;1625:32;1666:33;:::i;:::-;1326:456;;1718:7;;-1:-1:-1;;;1772:2:1;1757:18;;;;1744:32;;1326:456::o;1787:794::-;1882:6;1890;1898;1906;1959:3;1947:9;1938:7;1934:23;1930:33;1927:53;;;1976:1;1973;1966:12;1927:53;2015:9;2002:23;2034:31;2059:5;2034:31;:::i;:::-;2084:5;-1:-1:-1;2141:2:1;2126:18;;2113:32;2154:33;2113:32;2154:33;:::i;:::-;2206:7;-1:-1:-1;2260:2:1;2245:18;;2232:32;;-1:-1:-1;2315:2:1;2300:18;;2287:32;2342:18;2331:30;;2328:50;;;2374:1;2371;2364:12;2328:50;2397:22;;2450:4;2442:13;;2438:27;-1:-1:-1;2428:55:1;;2479:1;2476;2469:12;2428:55;2502:73;2567:7;2562:2;2549:16;2544:2;2540;2536:11;2502:73;:::i;:::-;2492:83;;;1787:794;;;;;;;:::o;2586:382::-;2651:6;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:52;;;2728:1;2725;2718:12;2680:52;2767:9;2754:23;2786:31;2811:5;2786:31;:::i;:::-;2836:5;-1:-1:-1;2893:2:1;2878:18;;2865:32;2906:30;2865:32;2906:30;:::i;2973:315::-;3041:6;3049;3102:2;3090:9;3081:7;3077:23;3073:32;3070:52;;;3118:1;3115;3108:12;3070:52;3157:9;3144:23;3176:31;3201:5;3176:31;:::i;:::-;3226:5;3278:2;3263:18;;;;3250:32;;-1:-1:-1;;;2973:315:1:o;3293:957::-;3377:6;3408:2;3451;3439:9;3430:7;3426:23;3422:32;3419:52;;;3467:1;3464;3457:12;3419:52;3507:9;3494:23;3536:18;3577:2;3569:6;3566:14;3563:34;;;3593:1;3590;3583:12;3563:34;3631:6;3620:9;3616:22;3606:32;;3676:7;3669:4;3665:2;3661:13;3657:27;3647:55;;3698:1;3695;3688:12;3647:55;3734:2;3721:16;3756:2;3752;3749:10;3746:36;;;3762:18;;:::i;:::-;3808:2;3805:1;3801:10;3791:20;;3831:28;3855:2;3851;3847:11;3831:28;:::i;:::-;3893:15;;;3924:12;;;;3956:11;;;3986;;;3982:20;;3979:33;-1:-1:-1;3976:53:1;;;4025:1;4022;4015:12;3976:53;4047:1;4038:10;;4057:163;4071:2;4068:1;4065:9;4057:163;;;4128:17;;4116:30;;4089:1;4082:9;;;;;4166:12;;;;4198;;4057:163;;;-1:-1:-1;4239:5:1;3293:957;-1:-1:-1;;;;;;;;3293:957:1:o;4255:241::-;4311:6;4364:2;4352:9;4343:7;4339:23;4335:32;4332:52;;;4380:1;4377;4370:12;4332:52;4419:9;4406:23;4438:28;4460:5;4438:28;:::i;4501:245::-;4568:6;4621:2;4609:9;4600:7;4596:23;4592:32;4589:52;;;4637:1;4634;4627:12;4589:52;4669:9;4663:16;4688:28;4710:5;4688:28;:::i;4751:245::-;4809:6;4862:2;4850:9;4841:7;4837:23;4833:32;4830:52;;;4878:1;4875;4868:12;4830:52;4917:9;4904:23;4936:30;4960:5;4936:30;:::i;5001:249::-;5070:6;5123:2;5111:9;5102:7;5098:23;5094:32;5091:52;;;5139:1;5136;5129:12;5091:52;5171:9;5165:16;5190:30;5214:5;5190:30;:::i;5255:450::-;5324:6;5377:2;5365:9;5356:7;5352:23;5348:32;5345:52;;;5393:1;5390;5383:12;5345:52;5433:9;5420:23;5466:18;5458:6;5455:30;5452:50;;;5498:1;5495;5488:12;5452:50;5521:22;;5574:4;5566:13;;5562:27;-1:-1:-1;5552:55:1;;5603:1;5600;5593:12;5552:55;5626:73;5691:7;5686:2;5673:16;5668:2;5664;5660:11;5626:73;:::i;5710:180::-;5769:6;5822:2;5810:9;5801:7;5797:23;5793:32;5790:52;;;5838:1;5835;5828:12;5790:52;-1:-1:-1;5861:23:1;;5710:180;-1:-1:-1;5710:180:1:o;5895:184::-;5965:6;6018:2;6006:9;5997:7;5993:23;5989:32;5986:52;;;6034:1;6031;6024:12;5986:52;-1:-1:-1;6057:16:1;;5895:184;-1:-1:-1;5895:184:1:o;6084:248::-;6152:6;6160;6213:2;6201:9;6192:7;6188:23;6184:32;6181:52;;;6229:1;6226;6219:12;6181:52;-1:-1:-1;;6252:23:1;;;6322:2;6307:18;;;6294:32;;-1:-1:-1;6084:248:1:o;6337:257::-;6378:3;6416:5;6410:12;6443:6;6438:3;6431:19;6459:63;6515:6;6508:4;6503:3;6499:14;6492:4;6485:5;6481:16;6459:63;:::i;:::-;6576:2;6555:15;-1:-1:-1;;6551:29:1;6542:39;;;;6583:4;6538:50;;6337:257;-1:-1:-1;;6337:257:1:o;6599:274::-;6728:3;6766:6;6760:13;6782:53;6828:6;6823:3;6816:4;6808:6;6804:17;6782:53;:::i;:::-;6851:16;;;;;6599:274;-1:-1:-1;;6599:274:1:o;6878:1527::-;7102:3;7140:6;7134:13;7166:4;7179:51;7223:6;7218:3;7213:2;7205:6;7201:15;7179:51;:::i;:::-;7293:13;;7252:16;;;;7315:55;7293:13;7252:16;7337:15;;;7315:55;:::i;:::-;7459:13;;7392:20;;;7432:1;;7519;7541:18;;;;7594;;;;7621:93;;7699:4;7689:8;7685:19;7673:31;;7621:93;7762:2;7752:8;7749:16;7729:18;7726:40;7723:167;;;-1:-1:-1;;;7789:33:1;;7845:4;7842:1;7835:15;7875:4;7796:3;7863:17;7723:167;7906:18;7933:110;;;;8057:1;8052:328;;;;7899:481;;7933:110;-1:-1:-1;;7968:24:1;;7954:39;;8013:20;;;;-1:-1:-1;7933:110:1;;8052:328;31734:1;31727:14;;;31771:4;31758:18;;8147:1;8161:169;8175:8;8172:1;8169:15;8161:169;;;8257:14;;8242:13;;;8235:37;8300:16;;;;8192:10;;8161:169;;;8165:3;;8361:8;8354:5;8350:20;8343:27;;7899:481;-1:-1:-1;8396:3:1;;6878:1527;-1:-1:-1;;;;;;;;;;;6878:1527:1:o;9208:488::-;-1:-1:-1;;;;;9477:15:1;;;9459:34;;9529:15;;9524:2;9509:18;;9502:43;9576:2;9561:18;;9554:34;;;9624:3;9619:2;9604:18;;9597:31;;;9402:4;;9645:45;;9670:19;;9662:6;9645:45;:::i;:::-;9637:53;9208:488;-1:-1:-1;;;;;;9208:488:1:o;10330:632::-;10501:2;10553:21;;;10623:13;;10526:18;;;10645:22;;;10472:4;;10501:2;10724:15;;;;10698:2;10683:18;;;10472:4;10767:169;10781:6;10778:1;10775:13;10767:169;;;10842:13;;10830:26;;10911:15;;;;10876:12;;;;10803:1;10796:9;10767:169;;;-1:-1:-1;10953:3:1;;10330:632;-1:-1:-1;;;;;;10330:632:1:o;11159:219::-;11308:2;11297:9;11290:21;11271:4;11328:44;11368:2;11357:9;11353:18;11345:6;11328:44;:::i;11795:341::-;11997:2;11979:21;;;12036:2;12016:18;;;12009:30;-1:-1:-1;;;12070:2:1;12055:18;;12048:47;12127:2;12112:18;;11795:341::o;12553:414::-;12755:2;12737:21;;;12794:2;12774:18;;;12767:30;12833:34;12828:2;12813:18;;12806:62;-1:-1:-1;;;12899:2:1;12884:18;;12877:48;12957:3;12942:19;;12553:414::o;15325:332::-;15527:2;15509:21;;;15566:1;15546:18;;;15539:29;-1:-1:-1;;;15599:2:1;15584:18;;15577:39;15648:2;15633:18;;15325:332::o;17987:342::-;18189:2;18171:21;;;18228:2;18208:18;;;18201:30;-1:-1:-1;;;18262:2:1;18247:18;;18240:48;18320:2;18305:18;;17987:342::o;18334:345::-;18536:2;18518:21;;;18575:2;18555:18;;;18548:30;-1:-1:-1;;;18609:2:1;18594:18;;18587:51;18670:2;18655:18;;18334:345::o;19520:337::-;19722:2;19704:21;;;19761:2;19741:18;;;19734:30;-1:-1:-1;;;19795:2:1;19780:18;;19773:43;19848:2;19833:18;;19520:337::o;21095:339::-;21297:2;21279:21;;;21336:2;21316:18;;;21309:30;-1:-1:-1;;;21370:2:1;21355:18;;21348:45;21425:2;21410:18;;21095:339::o;21850:346::-;22052:2;22034:21;;;22091:2;22071:18;;;22064:30;-1:-1:-1;;;22125:2:1;22110:18;;22103:52;22187:2;22172:18;;21850:346::o;22975:356::-;23177:2;23159:21;;;23196:18;;;23189:30;23255:34;23250:2;23235:18;;23228:62;23322:2;23307:18;;22975:356::o;23336:339::-;23538:2;23520:21;;;23577:2;23557:18;;;23550:30;-1:-1:-1;;;23611:2:1;23596:18;;23589:45;23666:2;23651:18;;23336:339::o;24091:346::-;24293:2;24275:21;;;24332:2;24312:18;;;24305:30;-1:-1:-1;;;24366:2:1;24351:18;;24344:52;24428:2;24413:18;;24091:346::o;25268:356::-;25470:2;25452:21;;;25489:18;;;25482:30;25548:34;25543:2;25528:18;;25521:62;25615:2;25600:18;;25268:356::o;26845:413::-;27047:2;27029:21;;;27086:2;27066:18;;;27059:30;27125:34;27120:2;27105:18;;27098:62;-1:-1:-1;;;27191:2:1;27176:18;;27169:47;27248:3;27233:19;;26845:413::o;27665:411::-;27867:2;27849:21;;;27906:2;27886:18;;;27879:30;27945:34;27940:2;27925:18;;27918:62;-1:-1:-1;;;28011:2:1;27996:18;;27989:45;28066:3;28051:19;;27665:411::o;30034:355::-;30236:2;30218:21;;;30275:2;30255:18;;;30248:30;30314:33;30309:2;30294:18;;30287:61;30380:2;30365:18;;30034:355::o;31381:275::-;31452:2;31446:9;31517:2;31498:13;;-1:-1:-1;;31494:27:1;31482:40;;31552:18;31537:34;;31573:22;;;31534:62;31531:88;;;31599:18;;:::i;:::-;31635:2;31628:22;31381:275;;-1:-1:-1;31381:275:1:o;31787:128::-;31827:3;31858:1;31854:6;31851:1;31848:13;31845:39;;;31864:18;;:::i;:::-;-1:-1:-1;31900:9:1;;31787:128::o;31920:120::-;31960:1;31986;31976:35;;31991:18;;:::i;:::-;-1:-1:-1;32025:9:1;;31920:120::o;32045:168::-;32085:7;32151:1;32147;32143:6;32139:14;32136:1;32133:21;32128:1;32121:9;32114:17;32110:45;32107:71;;;32158:18;;:::i;:::-;-1:-1:-1;32198:9:1;;32045:168::o;32218:125::-;32258:4;32286:1;32283;32280:8;32277:34;;;32291:18;;:::i;:::-;-1:-1:-1;32328:9:1;;32218:125::o;32348:258::-;32420:1;32430:113;32444:6;32441:1;32438:13;32430:113;;;32520:11;;;32514:18;32501:11;;;32494:39;32466:2;32459:10;32430:113;;;32561:6;32558:1;32555:13;32552:48;;;-1:-1:-1;;32596:1:1;32578:16;;32571:27;32348:258::o;32611:380::-;32690:1;32686:12;;;;32733;;;32754:61;;32808:4;32800:6;32796:17;32786:27;;32754:61;32861:2;32853:6;32850:14;32830:18;32827:38;32824:161;;;32907:10;32902:3;32898:20;32895:1;32888:31;32942:4;32939:1;32932:15;32970:4;32967:1;32960:15;32824:161;;32611:380;;;:::o;32996:135::-;33035:3;-1:-1:-1;;33056:17:1;;33053:43;;;33076:18;;:::i;:::-;-1:-1:-1;33123:1:1;33112:13;;32996:135::o;33136:112::-;33168:1;33194;33184:35;;33199:18;;:::i;:::-;-1:-1:-1;33233:9:1;;33136:112::o;33253:127::-;33314:10;33309:3;33305:20;33302:1;33295:31;33345:4;33342:1;33335:15;33369:4;33366:1;33359:15;33385:127;33446:10;33441:3;33437:20;33434:1;33427:31;33477:4;33474:1;33467:15;33501:4;33498:1;33491:15;33517:127;33578:10;33573:3;33569:20;33566:1;33559:31;33609:4;33606:1;33599:15;33633:4;33630:1;33623:15;33649:127;33710:10;33705:3;33701:20;33698:1;33691:31;33741:4;33738:1;33731:15;33765:4;33762:1;33755:15;33781:127;33842:10;33837:3;33833:20;33830:1;33823:31;33873:4;33870:1;33863:15;33897:4;33894:1;33887:15;33913:131;-1:-1:-1;;;;;33988:31:1;;33978:42;;33968:70;;34034:1;34031;34024:12;34049:118;34135:5;34128:13;34121:21;34114:5;34111:32;34101:60;;34157:1;34154;34147:12;34172:131;-1:-1:-1;;;;;;34246:32:1;;34236:43;;34226:71;;34293:1;34290;34283:12

Swarm Source

ipfs://d985b84eccc946ae41fc3a4f827dae1ecde26d567c38c756d296bdad666e31f3
Loading