ETH Price: $3,452.74 (+1.80%)
Gas: 3 Gwei

Token

Kong Game (KGAME)
 

Overview

Max Total Supply

851 KGAME

Holders

326

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
grip710.eth
Balance
1 KGAME
0x94f64856e55ab61447f22f90e49ebef60d39b9a1
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
KONGS

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-30
*/

// SPDX-License-Identifier: MIT LICENSE

pragma solidity 0.8.9;

interface IKongIsland {
    function addManyToKongIslandAndPack(address account, uint16[] calldata tokenIds)
        external;

    function randomKongOwner(uint256 seed) external view returns (address);
}

interface ITraits {
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IFOOD{
    function burn(address account, uint256 amount) external;
    function mint(address account, uint256 amount) external;
}

interface IKONGS {
    // struct to store each token's traits
    struct KaijuKong {
        bool isKaiju;
        uint8 background;
        uint8 species;
        uint8 companion;
        uint8 fur;
        uint8 hat;
        uint8 face;
        uint8 weapons;
        uint8 accessories;        
        uint8 kingScore;
    }

    function getPaidTokens() external view returns (uint256);

    function getTokenTraits(uint256 tokenId)
        external
        view
        returns (KaijuKong memory);
}


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


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

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


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


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


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


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



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

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

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

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

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

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

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

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

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

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

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

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

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


abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

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

    bool private _paused;

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

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

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

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

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

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


abstract contract 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();
    }
}


contract KONGS is IKONGS, ERC721Enumerable, Ownable, Pausable {
    uint256 public MINT_PRICE = .02 ether;
    uint256 public MAX_TOKENS;
    uint256 public PAID_TOKENS;
    uint16 public minted;
    uint256 reserved;
    uint256 reserveLimit;
    uint256 nonReserved;

    struct whitelist{
        uint256 amount;
        }

    mapping (address => whitelist) whitelisted;
    mapping (address => whitelist) reservedMinters;
    bool whitelistMode;

 
    mapping(uint256 => uint256) private mintBlock;
    mapping(uint256 => KaijuKong) private tokenTraits;
    uint8[][19] public rarities;
    uint8[][19] public aliases;
    // reference to the KongIsland for choosing random Kong thieves
    IKongIsland public kongIsland;
    // reference to $FOOD for burning on mint
    IFOOD public food;
    // reference to Traits
    ITraits public traits;


    /**
     * instantiates contract and rarity tables
     */
    constructor(
        address _food,
        address _traits,
        uint256 _maxTokens,
        uint256 _reserved
    ) ERC721("Kong Game", "KGAME") {
        food = IFOOD(_food);
        traits = ITraits(_traits);
        MAX_TOKENS = _maxTokens;
        PAID_TOKENS = _maxTokens / 5;
        nonReserved = _reserved;
        reserveLimit = _reserved;
        rarities[0] = [255, 200, 150, 100, 50];
        aliases[0] = [0, 1, 2, 3, 4];
        rarities[1] = [255,200,160,130,96,63];
        aliases[1] = [0,1,3,3,2,0];
        rarities[2] = [255,72,52,12,6];
        aliases[2] = [0,1,2,1,0];
        rarities[3] = [255];
        aliases[3] = [0];

        rarities[4] = [255];
        aliases[4] = [0];
        rarities[5] = [255];
        aliases[5] = [0];
        rarities[6] = [255];
        aliases[6] = [0];
        rarities[7] = [255];
        aliases[7] = [0];
        rarities[8] = [255];
        aliases[8] = [0];
        rarities[9] = [255];
        aliases[9] = [0];
        rarities[10] = [255];
        aliases[10] = [0];
        rarities[11] = [255];
        aliases[11] = [0];
        rarities[12] = [255];
        aliases[12] = [0];

        rarities[13] = [255,165,51,43,18,5];
        aliases[13] = [0,1,1,3,4,0];


        rarities[14] = [255,37,15];
        aliases[14] = [0,1,0];

        rarities[15] = [255,57,23];
        aliases[15] = [0,1,0];

        rarities[16] = [255,70];
        aliases[16] = [0,1];


        rarities[17] = [255,37,15];
        aliases[17] = [0,1,0];

        rarities[18] = [255,165,51,43,18,5];
        aliases[18] = [0,1,2,3,4,0];
    }

    /** EXTERNAL */
    function mint(uint256 amount) external payable whenNotPaused {
    require(amount <= 5, "Maxmimum 5 mints at a time");
    require(tx.origin == _msgSender(), "Only EOA");
    require(minted + amount <= MAX_TOKENS, "All tokens minted");
    if(whitelistMode){require(amount <= whitelisted[_msgSender()].amount, "Whitelisted can mint maximum of 3");}
    if (minted < PAID_TOKENS) {
      require(minted + amount <= PAID_TOKENS, "All tokens on-sale already sold");
      require(amount * MINT_PRICE >= msg.value, "Invalid payment amount");
    } else {
      require(msg.value == 0);
    }
    uint256 totalFOODCost = 0;
    uint256 seed;
        for (uint256 i = 0; i < amount; i++) {
            minted++;
            nonReserved++;
            if(whitelistMode){whitelisted[ _msgSender()].amount--;}
	        mintBlock[nonReserved] = block.number;
            seed = random(nonReserved);
            generate(nonReserved, seed);
            address recipient = selectRecipient(seed);
            totalFOODCost += mintCost(nonReserved);
            _safeMint(recipient, nonReserved);
        }
        if (totalFOODCost > 0) food.burn(_msgSender(), totalFOODCost);
    }

    function reservedMint(uint256 amount) external {
    require(amount <= 5, "Maxmimum 5 mints at a time");
    require(amount <= reservedMinters[msg.sender].amount);
    uint256 seed;
        for (uint256 i = 0; i < amount; i++) {
            minted++;
            reserved++;
	        mintBlock[reserved] = block.number;
            seed = random(reserved);
            generate(reserved, seed);
            _safeMint(msg.sender,reserved);
        }
    }

  function mintCost(uint256 tokenId) public view returns (uint256) {
    if (tokenId <= PAID_TOKENS) return 0;
    if (tokenId <= MAX_TOKENS * 2 / 5) return 20000 ether;
    if (tokenId <= MAX_TOKENS * 3 / 5) return 40000 ether;
    if (tokenId <= MAX_TOKENS * 4 / 5) return 80000 ether;
    return 100000 ether;
  }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        if (_msgSender() != address(kongIsland)) {
            require(
                _isApprovedOrOwner(_msgSender(), tokenId),
                "ERC721: transfer caller is not owner nor approved"
            );
        }
        _transfer(from, to, tokenId);
    }

    /** INTERNAL */

    function generate(uint256 tokenId, uint256 seed)
        internal
        returns (KaijuKong memory t)
    {
        t = selectTraits(seed);
        tokenTraits[tokenId] = t;
        return t;
    }

    /**
     * uses A.J. Walker's Alias algorithm for O(1) rarity table lookup
     * ensuring O(1) instead of O(n) reduces mint cost by more than 50%
     * probability & alias tables are generated off-chain beforehand
     * @param seed portion of the 256 bit seed to remove trait correlation
     * @param traitType the trait type to select a trait for
     * @return the ID of the randomly selected trait
     */
    function selectTrait(uint16 seed, uint8 traitType)
        internal
        view
        returns (uint8)
    {
        uint8 trait = uint8(seed) % uint8(rarities[traitType].length);
        if (seed >> 9 < rarities[traitType][trait]) return trait;
        return aliases[traitType][trait];
    }

    /**
     * the first 20% (ETH purchases) go to the minter
     * the remaining 80% have a 10% chance to be given to a random staked Kong
     * @param seed a random value to select a recipient from
     * @return the address of the recipient (either the minter or the Kong thief's owner)
     */

     
  function selectRecipient(uint256 seed) internal view returns (address) {
    if (minted <= PAID_TOKENS || minted < 30000 && ((seed >> 245) % 10) != 0 || minted >30000 && ((seed >> 245) % 10) >=2) return _msgSender(); // top 10 bits haven't been used
    address thief = kongIsland.randomKongOwner(seed >> 144); // 144 bits reserved for trait selection
    if (thief == address(0x0)) return _msgSender();
    return thief;
  }

    /**
     * selects the species and all of its traits based on the seed value
     * @param seed a pseudorandom 256 bit number to derive traits from
     * @return t -  a struct of randomly selected traits
     */
    function selectTraits(uint256 seed)
        internal
        view
        returns (KaijuKong memory t)
    {
        t.isKaiju = (seed & 0xFFFF) % 10 != 0;
        uint8 shift = t.isKaiju ? 0 : 9;
        seed >>= 16;
        t.background = selectTrait(uint16(seed & 0xFFFF), 0);
        seed >>= 16;
        t.species = selectTrait(uint16(seed & 0xFFFF), 1 + shift);
        seed >>= 16;
        t.companion = selectTrait(uint16(seed & 0xFFFF), 2 + shift);
        seed >>= 16;
        t.kingScore = selectTrait(uint16(seed & 0xFFFF), 9 + shift);
        seed >>= 16;
        t.hat = selectTrait(uint16(seed & 0xFFFF), 5 + shift);
        seed >>= 16;
        t.face = selectTrait(uint16(seed & 0xFFFF), 6 + shift);
        seed >>= 16;
        t.weapons = selectTrait(uint16(seed & 0xFFFF), 7 + shift);
        seed >>= 16;
        t.accessories = selectTrait(uint16(seed & 0xFFFF), 8 + shift);
        seed >>= 16;
        t.fur = t.kingScore;
    }

    function structToHash(KaijuKong memory s) internal pure returns (uint256) {
        return
            uint256(
                bytes32(
                    abi.encodePacked(
                        s.isKaiju,
                        s.background,
                        s.species,
                        s.companion,
                        s.fur,
                        s.hat,
                        s.face,
                        s.weapons,
                        s.accessories,
                        s.kingScore
                    )
                )
            );
    }

  function random(uint256 seed) internal view returns (uint256) {
    return uint256(keccak256(abi.encodePacked(
      tx.origin,
      blockhash(block.number - 1),
      block.timestamp,
      seed
    )));
  }

    /** READ */

    function getTokenTraits(uint256 tokenId)
        external
        view
        override
        returns (KaijuKong memory)
    {
        require(mintBlock[tokenId] + 1 < block.number);
        return tokenTraits[tokenId];
    }

    function getPaidTokens() external view override returns (uint256) {
        return PAID_TOKENS;
    }

    function isKaiju(uint256 tokenId) external view returns (bool){
        require(mintBlock[tokenId] + 1 < block.number);
        return(tokenTraits[tokenId].isKaiju);
    }

    function KingScore(uint256 tokenId) external view returns (uint8) {
        require(mintBlock[tokenId] + 1 < block.number);
        return(tokenTraits[tokenId].kingScore);
    }

    function getIDsOwnedby(address _address) external view returns(uint256[] memory) {
        uint256[] memory tokensOwned = new uint256[](balanceOf(_address));
        for(uint256 i = 0; i < tokensOwned.length; i++) {
            tokensOwned[i] = tokenOfOwnerByIndex(_address, i);
        }
        return tokensOwned;
    }

    /** ADMIN */

    function setKongIsland(address _KongIsland) external onlyOwner {
        kongIsland = IKongIsland(_KongIsland);
    }

    function addToWhitelist(address _whitelisted) external onlyOwner {
        whitelisted[_whitelisted].amount = 3;
    }

    function bulkWhitelist(address[] calldata _whitelisted) external onlyOwner {
        for (uint256 i = 0; i < _whitelisted.length; i++) {
        whitelisted[_whitelisted[i]].amount = 3;
        }
    }

    function addToReservedMinters(address _reserved, uint256 _amount) external onlyOwner {
        reservedMinters[_reserved].amount = _amount;
    }

    function bulkWhitelist(address[] calldata _reserved,uint256[] calldata _amount) external onlyOwner {
        for (uint256 i = 0; i < _reserved.length; i++) {
        reservedMinters[_reserved[i]].amount = _amount[i];
        }
    }

    function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function whitelistMinting(bool _whitelistMode)external onlyOwner {
        whitelistMode = _whitelistMode;
    }

    function setPaidTokens(uint256 _paidTokens) external onlyOwner {
        PAID_TOKENS = _paidTokens;
    }

    function setPaused(bool _paused) external onlyOwner {
        if (_paused) _pause();
        else _unpause();
    }

  function setMintPrice(uint256 mintprice) external onlyOwner{
        MINT_PRICE = mintprice;
    }

  function updateFoodContract(address _food) external onlyOwner {
        food = IFOOD(_food);
    }

    /** RENDER */

  function tokenURI(uint256 tokenId) public view override returns (string memory) {
    require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
    require(mintBlock[tokenId] + 1 < block.number);
    return traits.tokenURI(tokenId);
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_food","type":"address"},{"internalType":"address","name":"_traits","type":"address"},{"internalType":"uint256","name":"_maxTokens","type":"uint256"},{"internalType":"uint256","name":"_reserved","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"KingScore","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAID_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_reserved","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addToReservedMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelisted","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"aliases","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[{"internalType":"address[]","name":"_reserved","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"bulkWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelisted","type":"address[]"}],"name":"bulkWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"food","outputs":[{"internalType":"contract IFOOD","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getIDsOwnedby","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPaidTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenTraits","outputs":[{"components":[{"internalType":"bool","name":"isKaiju","type":"bool"},{"internalType":"uint8","name":"background","type":"uint8"},{"internalType":"uint8","name":"species","type":"uint8"},{"internalType":"uint8","name":"companion","type":"uint8"},{"internalType":"uint8","name":"fur","type":"uint8"},{"internalType":"uint8","name":"hat","type":"uint8"},{"internalType":"uint8","name":"face","type":"uint8"},{"internalType":"uint8","name":"weapons","type":"uint8"},{"internalType":"uint8","name":"accessories","type":"uint8"},{"internalType":"uint8","name":"kingScore","type":"uint8"}],"internalType":"struct IKONGS.KaijuKong","name":"","type":"tuple"}],"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":"tokenId","type":"uint256"}],"name":"isKaiju","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kongIsland","outputs":[{"internalType":"contract IKongIsland","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarities","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reservedMint","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":"address","name":"_KongIsland","type":"address"}],"name":"setKongIsland","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintprice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_paidTokens","type":"uint256"}],"name":"setPaidTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","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":[],"name":"traits","outputs":[{"internalType":"contract ITraits","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_food","type":"address"}],"name":"updateFoodContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistMode","type":"bool"}],"name":"whitelistMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266470de4df820000600b553480156200001c57600080fd5b506040516200514b3803806200514b8339810160408190526200003f916200095b565b60408051808201825260098152684b6f6e672047616d6560b81b6020808301918252835180850190945260058452644b47414d4560d81b9084015281519192916200008d91600091620007f5565b508051620000a3906001906020840190620007f5565b505050620000c0620000ba6200079f60201b60201c565b620007a3565b600a805460ff60a01b19169055603e80546001600160a01b038087166001600160a01b031992831617909255603f805492861692909116919091179055600c8290556200010f600583620009a3565b600d55601181905560108190556040805160a08101825260ff815260c8602082015260969181019190915260646060820152603260808201526200015890601790600562000884565b506040805160a081018252600081526001602082015260029181019190915260036060820152600460808201526200019590602a90600562000884565b506040805160c08101825260ff815260c8602082015260a091810182905260826060808301919091526080820152603f91810191909152620001dc90601890600662000884565b506040805160c081018252600080825260016020830152600392820183905260608201929092526002608082015260a08101919091526200022290602b90600662000884565b506040805160a08101825260ff815260486020820152603491810191909152600c6060820152600660808201526200025f90601990600562000884565b506040805160a081018252600080825260016020830181905260029383018490526060830152608082015290602a906200029e92910190600562000884565b50604080516020810190915260ff8152620002be90601a90600162000884565b50604080516020810190915260008152620002de90602d90600162000884565b50604080516020810190915260ff8152620002fe90601b90600162000884565b506040805160208101909152600081526200031e90602e90600162000884565b50604080516020810190915260ff81526200033e90601c90600162000884565b506040805160208101909152600081526200035e90602f90600162000884565b50604080516020810190915260ff81526200037e90601d90600162000884565b506040805160208101909152600081526200039e90603090600162000884565b50604080516020810190915260ff8152620003be90601e90600162000884565b50604080516020810190915260008152620003de90603190600162000884565b50604080516020810190915260ff8152620003fe90601f90600162000884565b506040805160208101909152600081526200041e90603290600162000884565b5060408051602080820190925260ff81526200043d9190600162000884565b506040805160208101909152600081526200045d90603390600162000884565b50604080516020810190915260ff81526200047d90602190600162000884565b506040805160208101909152600081526200049d90603490600162000884565b50604080516020810190915260ff8152620004bd90602290600162000884565b50604080516020810190915260008152620004dd90603590600162000884565b50604080516020810190915260ff8152620004fd90602390600162000884565b506040805160208101909152600081526200051d90603690600162000884565b506040805160c08101825260ff815260a56020820152603391810191909152602b606082015260126080820152600560a08201526200056190602490600662000884565b506040805160c081018252600080825260016020830181905292820192909252600360608201526004608082015260a0810191909152620005a790603790600662000884565b506040805160608101825260ff8152602560208201819052600f92820192909252620005d69190600362000884565b5060408051606081018252600080825260016020830152918101919091526200060490603890600362000884565b506040805160608101825260ff8152603960208201526017918101919091526200063390602690600362000884565b5060408051606081018252600080825260016020830152918101919091526200066190603990600362000884565b506040805180820190915260ff8152604660208201526200068790602790600262000884565b50604080518082019091526000815260016020820152620006ad90603a90600262000884565b506040805160608101825260ff815260256020820152600f91810191909152620006dc90602890600362000884565b5060408051606081018252600080825260016020830152918101919091526200070a90603b90600362000884565b506040805160c08101825260ff815260a56020820152603391810191909152602b606082015260126080820152600560a08201526200074e90602990600662000884565b506040805160c081018252600080825260016020830152600292820192909252600360608201526004608082015260a08101919091526200079490603c90600662000884565b505050505062000a03565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200080390620009c6565b90600052602060002090601f01602090048101928262000827576000855562000872565b82601f106200084257805160ff191683800117855562000872565b8280016001018555821562000872579182015b828111156200087257825182559160200191906001019062000855565b506200088092915062000927565b5090565b82805482825590600052602060002090601f01602090048101928215620008725791602002820160005b83821115620008ee57835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302620008ae565b80156200091d5782816101000a81549060ff0219169055600101602081600001049283019260010302620008ee565b5050620008809291505b5b8082111562000880576000815560010162000928565b80516001600160a01b03811681146200095657600080fd5b919050565b600080600080608085870312156200097257600080fd5b6200097d856200093e565b93506200098d602086016200093e565b6040860151606090960151949790965092505050565b600082620009c157634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620009db57607f821691505b60208210811415620009fd57634e487b7160e01b600052602260045260246000fd5b50919050565b6147388062000a136000396000f3fe6080604052600436106103135760003560e01c80636352211e1161019a578063b88d4fde116100e1578063e985e9c51161008a578063f4a0a52811610064578063f4a0a52814610950578063f73b554114610970578063fa0c1d4c1461099057600080fd5b8063e985e9c5146108c4578063f2fde38b1461091a578063f47c84c51461093a57600080fd5b8063c87b56dd116100bb578063c87b56dd14610857578063e1fc334f14610877578063e43252d7146108a457600080fd5b8063b88d4fde1461080b578063c002d23d1461082b578063c084f5401461084157600080fd5b80638da5cb5b1161014357806398b4e8d31161011d57806398b4e8d3146107ab578063a0712d68146107d8578063a22cb465146107eb57600080fd5b80638da5cb5b1461073e57806394e568471461076957806395d89b411461079657600080fd5b8063715018a611610174578063715018a6146106e95780638780d7a5146106fe5780638c74bf0e1461071e57600080fd5b80636352211e1461067c5780636bd87ecf1461069c57806370a08231146106c957600080fd5b80633431a7531161025e57806346804d5b116102075780634f6ccce7116101e15780634f6ccce71461060c5780635b88d5111461062c5780635c975abb1461064c57600080fd5b806346804d5b146105915780634e7cc53a146105b15780634f02c420146105de57600080fd5b80633ccfd60b116102385780633ccfd60b146105475780634018b1f81461055c57806342842e0e1461057157600080fd5b80633431a753146104e7578063368383911461050757806337ff99e51461052757600080fd5b806318160ddd116102c057806327de8f271161029a57806327de8f27146104755780632f745c591461049557806333df4b2c146104b557600080fd5b806318160ddd146104165780631a7eaab51461043557806323b872dd1461045557600080fd5b8063095ea7b3116102f1578063095ea7b3146103b45780630e381864146103d657806316c38b3c146103f657600080fd5b806301ffc9a71461031857806306fdde031461034d578063081812fc1461036f575b600080fd5b34801561032457600080fd5b50610338610333366004613ded565b6109b0565b60405190151581526020015b60405180910390f35b34801561035957600080fd5b50610362610a0c565b6040516103449190613e80565b34801561037b57600080fd5b5061038f61038a366004613e93565b610a9e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610344565b3480156103c057600080fd5b506103d46103cf366004613ece565b610b7d565b005b3480156103e257600080fd5b506103386103f1366004613e93565b610d0a565b34801561040257600080fd5b506103d4610411366004613f0f565b610d46565b34801561042257600080fd5b506008545b604051908152602001610344565b34801561044157600080fd5b506103d4610450366004613f2a565b610de0565b34801561046157600080fd5b506103d4610470366004613f47565b610ea8565b34801561048157600080fd5b50610427610490366004613e93565b610f7e565b3480156104a157600080fd5b506104276104b0366004613ece565b611038565b3480156104c157600080fd5b506104d56104d0366004613f88565b611107565b60405160ff9091168152602001610344565b3480156104f357600080fd5b506103d4610502366004613e93565b61114d565b34801561051357600080fd5b506104d5610522366004613f88565b6111d3565b34801561053357600080fd5b506103d4610542366004613ece565b6111e3565b34801561055357600080fd5b506103d461128d565b34801561056857600080fd5b50600d54610427565b34801561057d57600080fd5b506103d461058c366004613f47565b611354565b34801561059d57600080fd5b506103d46105ac366004613f2a565b61136f565b3480156105bd57600080fd5b50603d5461038f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105ea57600080fd5b50600e546105f99061ffff1681565b60405161ffff9091168152602001610344565b34801561061857600080fd5b50610427610627366004613e93565b611437565b34801561063857600080fd5b506103d4610647366004613ff6565b6114f5565b34801561065857600080fd5b50600a5474010000000000000000000000000000000000000000900460ff16610338565b34801561068857600080fd5b5061038f610697366004613e93565b611605565b3480156106a857600080fd5b506106bc6106b7366004613f2a565b6116b7565b6040516103449190614062565b3480156106d557600080fd5b506104276106e4366004613f2a565b611754565b3480156106f557600080fd5b506103d4611822565b34801561070a57600080fd5b506103d4610719366004613f0f565b6118af565b34801561072a57600080fd5b506103d4610739366004613e93565b611961565b34801561074a57600080fd5b50600a5473ffffffffffffffffffffffffffffffffffffffff1661038f565b34801561077557600080fd5b50610789610784366004613e93565b611a87565b60405161034491906140a6565b3480156107a257600080fd5b50610362611bc2565b3480156107b757600080fd5b50603e5461038f9073ffffffffffffffffffffffffffffffffffffffff1681565b6103d46107e6366004613e93565b611bd1565b3480156107f757600080fd5b506103d461080636600461416a565b612106565b34801561081757600080fd5b506103d4610826366004614263565b61221d565b34801561083757600080fd5b50610427600b5481565b34801561084d57600080fd5b50610427600d5481565b34801561086357600080fd5b50610362610872366004613e93565b6122c5565b34801561088357600080fd5b50603f5461038f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156108b057600080fd5b506103d46108bf366004613f2a565b612463565b3480156108d057600080fd5b506103386108df366004614312565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561092657600080fd5b506103d4610935366004613f2a565b61250e565b34801561094657600080fd5b50610427600c5481565b34801561095c57600080fd5b506103d461096b366004613e93565b61263b565b34801561097c57600080fd5b506103d461098b36600461434b565b6126c1565b34801561099c57600080fd5b506104d56109ab366004613e93565b6127b3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610a065750610a06826127fc565b92915050565b606060008054610a1b9061438d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a479061438d565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610b8882611605565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b4b565b3373ffffffffffffffffffffffffffffffffffffffff82161480610c6f5750610c6f81336108df565b610cfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b4b565b610d0583836128df565b505050565b6000818152601560205260408120544390610d26906001614410565b10610d3057600080fd5b5060009081526016602052604090205460ff1690565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610dc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b8015610dd857610dd561297f565b50565b610dd5612a95565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b603d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b603d5473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f7357610ee73382612b68565b610f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b4b565b610d05838383612cd8565b6000600d548211610f9157506000919050565b6005600c546002610fa29190614428565b610fac9190614494565b8211610fc3575069043c33c1937564800000919050565b6005600c546003610fd49190614428565b610fde9190614494565b8211610ff55750690878678326eac9000000919050565b6005600c5460046110069190614428565b6110109190614494565b821161102757506910f0cf064dd592000000919050565b5069152d02c7e14af6800000919050565b600061104383611754565b82106110d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610b4b565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b6017826013811061111757600080fd5b01818154811061112657600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146111ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b600d55565b602a826013811061111757600080fd5b600a5473ffffffffffffffffffffffffffffffffffffffff163314611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260136020526040902055565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b600a5460405173ffffffffffffffffffffffffffffffffffffffff909116904780156108fc02916000818181858888f19350505050158015610dd5573d6000803e3d6000fd5b610d058383836040518060200160405280600081525061221d565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146113f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b603e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061144260085490565b82106114d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610b4b565b600882815481106114e3576114e36144a8565b90600052602060002001549050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b60005b838110156115fe57828282818110611593576115936144a8565b90506020020135601360008787858181106115b0576115b06144a8565b90506020020160208101906115c59190613f2a565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002055806115f6816144d7565b915050611579565b5050505050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610a06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b4b565b606060006116c483611754565b67ffffffffffffffff8111156116dc576116dc61419f565b604051908082528060200260200182016040528015611705578160200160208202803683370190505b50905060005b815181101561174d5761171e8482611038565b828281518110611730576117306144a8565b602090810291909101015280611745816144d7565b91505061170b565b5092915050565b600073ffffffffffffffffffffffffffffffffffffffff82166117f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b4b565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b6118ad6000612f4a565b565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b601480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60058111156119cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d61786d696d756d2035206d696e747320617420612074696d650000000000006044820152606401610b4b565b336000908152601360205260409020548111156119e857600080fd5b6000805b82811015610d0557600e805461ffff16906000611a0883614510565b91906101000a81548161ffff021916908361ffff16021790555050600f6000815480929190611a36906144d7565b9091555050600f8054600090815260156020526040902043905554611a5a90612fc1565b9150611a68600f5483613051565b50611a7533600f54613215565b80611a7f816144d7565b9150506119ec565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091526000828152601560205260409020544390611af4906001614410565b10611afe57600080fd5b50600090815260166020908152604091829020825161014081018452905460ff808216151583526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152650100000000008104841660a083015266010000000000008104841660c08301526701000000000000008104841660e0830152680100000000000000008104841692820192909252690100000000000000000090910490911661012082015290565b606060018054610a1b9061438d565b600a5474010000000000000000000000000000000000000000900460ff1615611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b4b565b6005811115611cc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d61786d696d756d2035206d696e747320617420612074696d650000000000006044820152606401610b4b565b323314611d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f6e6c7920454f410000000000000000000000000000000000000000000000006044820152606401610b4b565b600c54600e54611d3f90839061ffff16614410565b1115611da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f416c6c20746f6b656e73206d696e7465640000000000000000000000000000006044820152606401610b4b565b60145460ff1615611e515733600090815260126020526040902054811115611e51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f57686974656c69737465642063616e206d696e74206d6178696d756d206f662060448201527f33000000000000000000000000000000000000000000000000000000000000006064820152608401610b4b565b600d54600e5461ffff161015611f5a57600d54600e54611e7690839061ffff16614410565b1115611ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f416c6c20746f6b656e73206f6e2d73616c6520616c726561647920736f6c64006044820152606401610b4b565b34600b5482611eed9190614428565b1015611f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c6964207061796d656e7420616d6f756e74000000000000000000006044820152606401610b4b565b611f65565b3415611f6557600080fd5b600080805b8381101561205657600e805461ffff16906000611f8683614510565b91906101000a81548161ffff021916908361ffff1602179055505060116000815480929190611fb4906144d7565b909155505060145460ff1615611fe557336000908152601260205260408120805491611fdf83614532565b91905055505b6011805460009081526015602052604090204390555461200490612fc1565b915061201260115483613051565b50600061201e83613233565b905061202b601154610f7e565b6120359085614410565b935061204381601154613215565b508061204e816144d7565b915050611f6a565b508115610d0557603e5473ffffffffffffffffffffffffffffffffffffffff16639dc29fac336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260248101859052604401600060405180830381600087803b1580156120e957600080fd5b505af11580156120fd573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216331415612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b4b565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6122273383612b68565b6122b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b4b565b6122bf84848484613375565b50505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610b4b565b6000828152601560205260409020544390612395906001614410565b1061239f57600080fd5b603f546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063c87b56dd9060240160006040518083038186803b15801561240957600080fd5b505afa15801561241d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a069190810190614567565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146124e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b73ffffffffffffffffffffffffffffffffffffffff16600090815260126020526040902060039055565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b73ffffffffffffffffffffffffffffffffffffffff8116612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b4b565b610dd581612f4a565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146126bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b600b55565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b60005b81811015610d0557600360126000858585818110612765576127656144a8565b905060200201602081019061277a9190613f2a565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002055806127ab816144d7565b915050612745565b60008181526015602052604081205443906127cf906001614410565b106127d957600080fd5b506000908152601660205260409020546901000000000000000000900460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061288f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a0657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610a06565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061293982611605565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600a5474010000000000000000000000000000000000000000900460ff1615612a04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b4b565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a6b3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600a5474010000000000000000000000000000000000000000900460ff16612b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b4b565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612a6b565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16612c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b4b565b6000612c2483611605565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c9357508373ffffffffffffffffffffffffffffffffffffffff16612c7b84610a9e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612cd0575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16612cf882611605565b73ffffffffffffffffffffffffffffffffffffffff1614612d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b4b565b73ffffffffffffffffffffffffffffffffffffffff8216612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b4b565b612e48838383613418565b612e536000826128df565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290612e899084906145de565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612ec4908490614410565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600032612fcf6001436145de565b60405160609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602083015240603482015242605482015260748101839052609401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012092915050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091526130ab8261351e565b9050806016600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055506101208201518160000160096101000a81548160ff021916908360ff16021790555090505092915050565b61322f8282604051806020016040528060008152506136bd565b5050565b600d54600e5460009161ffff9091161115806132705750600e5461753061ffff909116108015613270575061326d600a60f584901c6145f5565b15155b8061329e5750600e5461753061ffff90911611801561329e5750600261329b600a60f585901c6145f5565b10155b156132a95733610a06565b603d546040517fbad1c9fb000000000000000000000000000000000000000000000000000000008152609084901c600482015260009173ffffffffffffffffffffffffffffffffffffffff169063bad1c9fb9060240160206040518083038186803b15801561331757600080fd5b505afa15801561332b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334f9190614609565b905073ffffffffffffffffffffffffffffffffffffffff8116610a0657335b9392505050565b613380848484612cd8565b61338c84848484613760565b6122bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b4b565b73ffffffffffffffffffffffffffffffffffffffff83166134805761347b81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6134bd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134bd576134bd838261395f565b73ffffffffffffffffffffffffffffffffffffffff82166134e157610d0581613a16565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d0557610d058282613ac5565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915261357e600a61ffff84166145f5565b1515808252600090613591576009613594565b60005b9050601083901c92506135ac8361ffff166000613b16565b60ff16602083015260109290921c916135d361ffff84166135ce836001614626565b613b16565b60ff16604083015260109290921c916135f561ffff84166135ce836002614626565b60ff16606083015260109290921c9161361761ffff84166135ce836009614626565b60ff1661012083015260109290921c9161363a61ffff84166135ce836005614626565b60ff1660a083015260109290921c9161365c61ffff84166135ce836006614626565b60ff1660c083015260109290921c9161367e61ffff84166135ce836007614626565b60ff1660e083015260109290921c916136a061ffff84166135ce836008614626565b60ff90811661010084015261012083015116608083015250919050565b6136c78383613bf1565b6136d46000848484613760565b610d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b4b565b600073ffffffffffffffffffffffffffffffffffffffff84163b15613954576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906137d790339089908890889060040161464b565b602060405180830381600087803b1580156137f157600080fd5b505af192505050801561383f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261383c91810190614694565b60015b613909573d80801561386d576040519150601f19603f3d011682016040523d82523d6000602084013e613872565b606091505b508051613901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b4b565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612cd0565b506001949350505050565b6000600161396c84611754565b61397691906145de565b6000838152600760205260409020549091508082146139d65773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b600854600090613a28906001906145de565b60008381526009602052604081205460088054939450909284908110613a5057613a506144a8565b906000526020600020015490508060088381548110613a7157613a716144a8565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480613aa957613aa96146b1565b6001900381819060005260206000200160009055905550505050565b6000613ad083611754565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60008060178360ff1660138110613b2f57613b2f6144a8565b0154613b3b90856146e0565b905060178360ff1660138110613b5357613b536144a8565b018160ff1681548110613b6857613b686144a8565b60009182526020918290209181049091015460ff601f9092166101000a900416607f600986901c161015613b9d579050610a06565b602a8360ff1660138110613bb357613bb36144a8565b018160ff1681548110613bc857613bc86144a8565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b73ffffffffffffffffffffffffffffffffffffffff8216613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b4b565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615613cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b4b565b613d0660008383613418565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290613d3c908490614410565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610dd557600080fd5b600060208284031215613dff57600080fd5b813561336e81613dbf565b60005b83811015613e25578181015183820152602001613e0d565b838111156122bf5750506000910152565b60008151808452613e4e816020860160208601613e0a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061336e6020830184613e36565b600060208284031215613ea557600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610dd557600080fd5b60008060408385031215613ee157600080fd5b8235613eec81613eac565b946020939093013593505050565b80358015158114613f0a57600080fd5b919050565b600060208284031215613f2157600080fd5b61336e82613efa565b600060208284031215613f3c57600080fd5b813561336e81613eac565b600080600060608486031215613f5c57600080fd5b8335613f6781613eac565b92506020840135613f7781613eac565b929592945050506040919091013590565b60008060408385031215613f9b57600080fd5b50508035926020909101359150565b60008083601f840112613fbc57600080fd5b50813567ffffffffffffffff811115613fd457600080fd5b6020830191508360208260051b8501011115613fef57600080fd5b9250929050565b6000806000806040858703121561400c57600080fd5b843567ffffffffffffffff8082111561402457600080fd5b61403088838901613faa565b9096509450602087013591508082111561404957600080fd5b5061405687828801613faa565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561409a5783518352928401929184019160010161407e565b50909695505050505050565b815115158152610140810160208301516140c5602084018260ff169052565b5060408301516140da604084018260ff169052565b5060608301516140ef606084018260ff169052565b506080830151614104608084018260ff169052565b5060a083015161411960a084018260ff169052565b5060c083015161412e60c084018260ff169052565b5060e083015161414360e084018260ff169052565b506101008381015160ff908116918401919091526101209384015116929091019190915290565b6000806040838503121561417d57600080fd5b823561418881613eac565b915061419660208401613efa565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142155761421561419f565b604052919050565b600067ffffffffffffffff8211156142375761423761419f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6000806000806080858703121561427957600080fd5b843561428481613eac565b9350602085013561429481613eac565b925060408501359150606085013567ffffffffffffffff8111156142b757600080fd5b8501601f810187136142c857600080fd5b80356142db6142d68261421d565b6141ce565b8181528860208385010111156142f057600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561432557600080fd5b823561433081613eac565b9150602083013561434081613eac565b809150509250929050565b6000806020838503121561435e57600080fd5b823567ffffffffffffffff81111561437557600080fd5b61438185828601613faa565b90969095509350505050565b600181811c908216806143a157607f821691505b602082108114156143db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614423576144236143e1565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614460576144606143e1565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826144a3576144a3614465565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614509576145096143e1565b5060010190565b600061ffff80831681811415614528576145286143e1565b6001019392505050565b600081614541576145416143e1565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60006020828403121561457957600080fd5b815167ffffffffffffffff81111561459057600080fd5b8201601f810184136145a157600080fd5b80516145af6142d68261421d565b8181528560208385010111156145c457600080fd5b6145d5826020830160208601613e0a565b95945050505050565b6000828210156145f0576145f06143e1565b500390565b60008261460457614604614465565b500690565b60006020828403121561461b57600080fd5b815161336e81613eac565b600060ff821660ff84168060ff03821115614643576146436143e1565b019392505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261468a6080830184613e36565b9695505050505050565b6000602082840312156146a657600080fd5b815161336e81613dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060ff8316806146f3576146f3614465565b8060ff8416069150509291505056fea264697066735822122093865d75767cc07f4ce715c0ab0d4041a90f259faa5f72916c5b72cd46411bed64736f6c6343000809003300000000000000000000000072d56a3bb9d7041afd3055a580ab5e21c53d9dd40000000000000000000000006db0940d96cc8607cc067b04758c06acc44db852000000000000000000000000000000000000000000000000000000000000c35000000000000000000000000000000000000000000000000000000000000000c8

Deployed Bytecode

0x6080604052600436106103135760003560e01c80636352211e1161019a578063b88d4fde116100e1578063e985e9c51161008a578063f4a0a52811610064578063f4a0a52814610950578063f73b554114610970578063fa0c1d4c1461099057600080fd5b8063e985e9c5146108c4578063f2fde38b1461091a578063f47c84c51461093a57600080fd5b8063c87b56dd116100bb578063c87b56dd14610857578063e1fc334f14610877578063e43252d7146108a457600080fd5b8063b88d4fde1461080b578063c002d23d1461082b578063c084f5401461084157600080fd5b80638da5cb5b1161014357806398b4e8d31161011d57806398b4e8d3146107ab578063a0712d68146107d8578063a22cb465146107eb57600080fd5b80638da5cb5b1461073e57806394e568471461076957806395d89b411461079657600080fd5b8063715018a611610174578063715018a6146106e95780638780d7a5146106fe5780638c74bf0e1461071e57600080fd5b80636352211e1461067c5780636bd87ecf1461069c57806370a08231146106c957600080fd5b80633431a7531161025e57806346804d5b116102075780634f6ccce7116101e15780634f6ccce71461060c5780635b88d5111461062c5780635c975abb1461064c57600080fd5b806346804d5b146105915780634e7cc53a146105b15780634f02c420146105de57600080fd5b80633ccfd60b116102385780633ccfd60b146105475780634018b1f81461055c57806342842e0e1461057157600080fd5b80633431a753146104e7578063368383911461050757806337ff99e51461052757600080fd5b806318160ddd116102c057806327de8f271161029a57806327de8f27146104755780632f745c591461049557806333df4b2c146104b557600080fd5b806318160ddd146104165780631a7eaab51461043557806323b872dd1461045557600080fd5b8063095ea7b3116102f1578063095ea7b3146103b45780630e381864146103d657806316c38b3c146103f657600080fd5b806301ffc9a71461031857806306fdde031461034d578063081812fc1461036f575b600080fd5b34801561032457600080fd5b50610338610333366004613ded565b6109b0565b60405190151581526020015b60405180910390f35b34801561035957600080fd5b50610362610a0c565b6040516103449190613e80565b34801561037b57600080fd5b5061038f61038a366004613e93565b610a9e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610344565b3480156103c057600080fd5b506103d46103cf366004613ece565b610b7d565b005b3480156103e257600080fd5b506103386103f1366004613e93565b610d0a565b34801561040257600080fd5b506103d4610411366004613f0f565b610d46565b34801561042257600080fd5b506008545b604051908152602001610344565b34801561044157600080fd5b506103d4610450366004613f2a565b610de0565b34801561046157600080fd5b506103d4610470366004613f47565b610ea8565b34801561048157600080fd5b50610427610490366004613e93565b610f7e565b3480156104a157600080fd5b506104276104b0366004613ece565b611038565b3480156104c157600080fd5b506104d56104d0366004613f88565b611107565b60405160ff9091168152602001610344565b3480156104f357600080fd5b506103d4610502366004613e93565b61114d565b34801561051357600080fd5b506104d5610522366004613f88565b6111d3565b34801561053357600080fd5b506103d4610542366004613ece565b6111e3565b34801561055357600080fd5b506103d461128d565b34801561056857600080fd5b50600d54610427565b34801561057d57600080fd5b506103d461058c366004613f47565b611354565b34801561059d57600080fd5b506103d46105ac366004613f2a565b61136f565b3480156105bd57600080fd5b50603d5461038f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105ea57600080fd5b50600e546105f99061ffff1681565b60405161ffff9091168152602001610344565b34801561061857600080fd5b50610427610627366004613e93565b611437565b34801561063857600080fd5b506103d4610647366004613ff6565b6114f5565b34801561065857600080fd5b50600a5474010000000000000000000000000000000000000000900460ff16610338565b34801561068857600080fd5b5061038f610697366004613e93565b611605565b3480156106a857600080fd5b506106bc6106b7366004613f2a565b6116b7565b6040516103449190614062565b3480156106d557600080fd5b506104276106e4366004613f2a565b611754565b3480156106f557600080fd5b506103d4611822565b34801561070a57600080fd5b506103d4610719366004613f0f565b6118af565b34801561072a57600080fd5b506103d4610739366004613e93565b611961565b34801561074a57600080fd5b50600a5473ffffffffffffffffffffffffffffffffffffffff1661038f565b34801561077557600080fd5b50610789610784366004613e93565b611a87565b60405161034491906140a6565b3480156107a257600080fd5b50610362611bc2565b3480156107b757600080fd5b50603e5461038f9073ffffffffffffffffffffffffffffffffffffffff1681565b6103d46107e6366004613e93565b611bd1565b3480156107f757600080fd5b506103d461080636600461416a565b612106565b34801561081757600080fd5b506103d4610826366004614263565b61221d565b34801561083757600080fd5b50610427600b5481565b34801561084d57600080fd5b50610427600d5481565b34801561086357600080fd5b50610362610872366004613e93565b6122c5565b34801561088357600080fd5b50603f5461038f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156108b057600080fd5b506103d46108bf366004613f2a565b612463565b3480156108d057600080fd5b506103386108df366004614312565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561092657600080fd5b506103d4610935366004613f2a565b61250e565b34801561094657600080fd5b50610427600c5481565b34801561095c57600080fd5b506103d461096b366004613e93565b61263b565b34801561097c57600080fd5b506103d461098b36600461434b565b6126c1565b34801561099c57600080fd5b506104d56109ab366004613e93565b6127b3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610a065750610a06826127fc565b92915050565b606060008054610a1b9061438d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a479061438d565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610b8882611605565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b4b565b3373ffffffffffffffffffffffffffffffffffffffff82161480610c6f5750610c6f81336108df565b610cfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b4b565b610d0583836128df565b505050565b6000818152601560205260408120544390610d26906001614410565b10610d3057600080fd5b5060009081526016602052604090205460ff1690565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610dc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b8015610dd857610dd561297f565b50565b610dd5612a95565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b603d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b603d5473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f7357610ee73382612b68565b610f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b4b565b610d05838383612cd8565b6000600d548211610f9157506000919050565b6005600c546002610fa29190614428565b610fac9190614494565b8211610fc3575069043c33c1937564800000919050565b6005600c546003610fd49190614428565b610fde9190614494565b8211610ff55750690878678326eac9000000919050565b6005600c5460046110069190614428565b6110109190614494565b821161102757506910f0cf064dd592000000919050565b5069152d02c7e14af6800000919050565b600061104383611754565b82106110d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610b4b565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b6017826013811061111757600080fd5b01818154811061112657600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146111ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b600d55565b602a826013811061111757600080fd5b600a5473ffffffffffffffffffffffffffffffffffffffff163314611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260136020526040902055565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b600a5460405173ffffffffffffffffffffffffffffffffffffffff909116904780156108fc02916000818181858888f19350505050158015610dd5573d6000803e3d6000fd5b610d058383836040518060200160405280600081525061221d565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146113f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b603e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061144260085490565b82106114d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610b4b565b600882815481106114e3576114e36144a8565b90600052602060002001549050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b60005b838110156115fe57828282818110611593576115936144a8565b90506020020135601360008787858181106115b0576115b06144a8565b90506020020160208101906115c59190613f2a565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002055806115f6816144d7565b915050611579565b5050505050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610a06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b4b565b606060006116c483611754565b67ffffffffffffffff8111156116dc576116dc61419f565b604051908082528060200260200182016040528015611705578160200160208202803683370190505b50905060005b815181101561174d5761171e8482611038565b828281518110611730576117306144a8565b602090810291909101015280611745816144d7565b91505061170b565b5092915050565b600073ffffffffffffffffffffffffffffffffffffffff82166117f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b4b565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b6118ad6000612f4a565b565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b601480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60058111156119cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d61786d696d756d2035206d696e747320617420612074696d650000000000006044820152606401610b4b565b336000908152601360205260409020548111156119e857600080fd5b6000805b82811015610d0557600e805461ffff16906000611a0883614510565b91906101000a81548161ffff021916908361ffff16021790555050600f6000815480929190611a36906144d7565b9091555050600f8054600090815260156020526040902043905554611a5a90612fc1565b9150611a68600f5483613051565b50611a7533600f54613215565b80611a7f816144d7565b9150506119ec565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091526000828152601560205260409020544390611af4906001614410565b10611afe57600080fd5b50600090815260166020908152604091829020825161014081018452905460ff808216151583526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152650100000000008104841660a083015266010000000000008104841660c08301526701000000000000008104841660e0830152680100000000000000008104841692820192909252690100000000000000000090910490911661012082015290565b606060018054610a1b9061438d565b600a5474010000000000000000000000000000000000000000900460ff1615611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b4b565b6005811115611cc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d61786d696d756d2035206d696e747320617420612074696d650000000000006044820152606401610b4b565b323314611d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f6e6c7920454f410000000000000000000000000000000000000000000000006044820152606401610b4b565b600c54600e54611d3f90839061ffff16614410565b1115611da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f416c6c20746f6b656e73206d696e7465640000000000000000000000000000006044820152606401610b4b565b60145460ff1615611e515733600090815260126020526040902054811115611e51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f57686974656c69737465642063616e206d696e74206d6178696d756d206f662060448201527f33000000000000000000000000000000000000000000000000000000000000006064820152608401610b4b565b600d54600e5461ffff161015611f5a57600d54600e54611e7690839061ffff16614410565b1115611ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f416c6c20746f6b656e73206f6e2d73616c6520616c726561647920736f6c64006044820152606401610b4b565b34600b5482611eed9190614428565b1015611f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c6964207061796d656e7420616d6f756e74000000000000000000006044820152606401610b4b565b611f65565b3415611f6557600080fd5b600080805b8381101561205657600e805461ffff16906000611f8683614510565b91906101000a81548161ffff021916908361ffff1602179055505060116000815480929190611fb4906144d7565b909155505060145460ff1615611fe557336000908152601260205260408120805491611fdf83614532565b91905055505b6011805460009081526015602052604090204390555461200490612fc1565b915061201260115483613051565b50600061201e83613233565b905061202b601154610f7e565b6120359085614410565b935061204381601154613215565b508061204e816144d7565b915050611f6a565b508115610d0557603e5473ffffffffffffffffffffffffffffffffffffffff16639dc29fac336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260248101859052604401600060405180830381600087803b1580156120e957600080fd5b505af11580156120fd573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216331415612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b4b565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6122273383612b68565b6122b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b4b565b6122bf84848484613375565b50505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610b4b565b6000828152601560205260409020544390612395906001614410565b1061239f57600080fd5b603f546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063c87b56dd9060240160006040518083038186803b15801561240957600080fd5b505afa15801561241d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a069190810190614567565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146124e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b73ffffffffffffffffffffffffffffffffffffffff16600090815260126020526040902060039055565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b73ffffffffffffffffffffffffffffffffffffffff8116612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b4b565b610dd581612f4a565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146126bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b600b55565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4b565b60005b81811015610d0557600360126000858585818110612765576127656144a8565b905060200201602081019061277a9190613f2a565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002055806127ab816144d7565b915050612745565b60008181526015602052604081205443906127cf906001614410565b106127d957600080fd5b506000908152601660205260409020546901000000000000000000900460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061288f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a0657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610a06565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061293982611605565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600a5474010000000000000000000000000000000000000000900460ff1615612a04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b4b565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a6b3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600a5474010000000000000000000000000000000000000000900460ff16612b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b4b565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612a6b565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16612c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b4b565b6000612c2483611605565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c9357508373ffffffffffffffffffffffffffffffffffffffff16612c7b84610a9e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612cd0575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16612cf882611605565b73ffffffffffffffffffffffffffffffffffffffff1614612d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b4b565b73ffffffffffffffffffffffffffffffffffffffff8216612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b4b565b612e48838383613418565b612e536000826128df565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290612e899084906145de565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612ec4908490614410565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600032612fcf6001436145de565b60405160609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602083015240603482015242605482015260748101839052609401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012092915050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091526130ab8261351e565b9050806016600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055506101208201518160000160096101000a81548160ff021916908360ff16021790555090505092915050565b61322f8282604051806020016040528060008152506136bd565b5050565b600d54600e5460009161ffff9091161115806132705750600e5461753061ffff909116108015613270575061326d600a60f584901c6145f5565b15155b8061329e5750600e5461753061ffff90911611801561329e5750600261329b600a60f585901c6145f5565b10155b156132a95733610a06565b603d546040517fbad1c9fb000000000000000000000000000000000000000000000000000000008152609084901c600482015260009173ffffffffffffffffffffffffffffffffffffffff169063bad1c9fb9060240160206040518083038186803b15801561331757600080fd5b505afa15801561332b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334f9190614609565b905073ffffffffffffffffffffffffffffffffffffffff8116610a0657335b9392505050565b613380848484612cd8565b61338c84848484613760565b6122bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b4b565b73ffffffffffffffffffffffffffffffffffffffff83166134805761347b81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6134bd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134bd576134bd838261395f565b73ffffffffffffffffffffffffffffffffffffffff82166134e157610d0581613a16565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d0557610d058282613ac5565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915261357e600a61ffff84166145f5565b1515808252600090613591576009613594565b60005b9050601083901c92506135ac8361ffff166000613b16565b60ff16602083015260109290921c916135d361ffff84166135ce836001614626565b613b16565b60ff16604083015260109290921c916135f561ffff84166135ce836002614626565b60ff16606083015260109290921c9161361761ffff84166135ce836009614626565b60ff1661012083015260109290921c9161363a61ffff84166135ce836005614626565b60ff1660a083015260109290921c9161365c61ffff84166135ce836006614626565b60ff1660c083015260109290921c9161367e61ffff84166135ce836007614626565b60ff1660e083015260109290921c916136a061ffff84166135ce836008614626565b60ff90811661010084015261012083015116608083015250919050565b6136c78383613bf1565b6136d46000848484613760565b610d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b4b565b600073ffffffffffffffffffffffffffffffffffffffff84163b15613954576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906137d790339089908890889060040161464b565b602060405180830381600087803b1580156137f157600080fd5b505af192505050801561383f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261383c91810190614694565b60015b613909573d80801561386d576040519150601f19603f3d011682016040523d82523d6000602084013e613872565b606091505b508051613901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b4b565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612cd0565b506001949350505050565b6000600161396c84611754565b61397691906145de565b6000838152600760205260409020549091508082146139d65773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b600854600090613a28906001906145de565b60008381526009602052604081205460088054939450909284908110613a5057613a506144a8565b906000526020600020015490508060088381548110613a7157613a716144a8565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480613aa957613aa96146b1565b6001900381819060005260206000200160009055905550505050565b6000613ad083611754565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60008060178360ff1660138110613b2f57613b2f6144a8565b0154613b3b90856146e0565b905060178360ff1660138110613b5357613b536144a8565b018160ff1681548110613b6857613b686144a8565b60009182526020918290209181049091015460ff601f9092166101000a900416607f600986901c161015613b9d579050610a06565b602a8360ff1660138110613bb357613bb36144a8565b018160ff1681548110613bc857613bc86144a8565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b73ffffffffffffffffffffffffffffffffffffffff8216613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b4b565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615613cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b4b565b613d0660008383613418565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290613d3c908490614410565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610dd557600080fd5b600060208284031215613dff57600080fd5b813561336e81613dbf565b60005b83811015613e25578181015183820152602001613e0d565b838111156122bf5750506000910152565b60008151808452613e4e816020860160208601613e0a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061336e6020830184613e36565b600060208284031215613ea557600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610dd557600080fd5b60008060408385031215613ee157600080fd5b8235613eec81613eac565b946020939093013593505050565b80358015158114613f0a57600080fd5b919050565b600060208284031215613f2157600080fd5b61336e82613efa565b600060208284031215613f3c57600080fd5b813561336e81613eac565b600080600060608486031215613f5c57600080fd5b8335613f6781613eac565b92506020840135613f7781613eac565b929592945050506040919091013590565b60008060408385031215613f9b57600080fd5b50508035926020909101359150565b60008083601f840112613fbc57600080fd5b50813567ffffffffffffffff811115613fd457600080fd5b6020830191508360208260051b8501011115613fef57600080fd5b9250929050565b6000806000806040858703121561400c57600080fd5b843567ffffffffffffffff8082111561402457600080fd5b61403088838901613faa565b9096509450602087013591508082111561404957600080fd5b5061405687828801613faa565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561409a5783518352928401929184019160010161407e565b50909695505050505050565b815115158152610140810160208301516140c5602084018260ff169052565b5060408301516140da604084018260ff169052565b5060608301516140ef606084018260ff169052565b506080830151614104608084018260ff169052565b5060a083015161411960a084018260ff169052565b5060c083015161412e60c084018260ff169052565b5060e083015161414360e084018260ff169052565b506101008381015160ff908116918401919091526101209384015116929091019190915290565b6000806040838503121561417d57600080fd5b823561418881613eac565b915061419660208401613efa565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142155761421561419f565b604052919050565b600067ffffffffffffffff8211156142375761423761419f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6000806000806080858703121561427957600080fd5b843561428481613eac565b9350602085013561429481613eac565b925060408501359150606085013567ffffffffffffffff8111156142b757600080fd5b8501601f810187136142c857600080fd5b80356142db6142d68261421d565b6141ce565b8181528860208385010111156142f057600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561432557600080fd5b823561433081613eac565b9150602083013561434081613eac565b809150509250929050565b6000806020838503121561435e57600080fd5b823567ffffffffffffffff81111561437557600080fd5b61438185828601613faa565b90969095509350505050565b600181811c908216806143a157607f821691505b602082108114156143db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614423576144236143e1565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614460576144606143e1565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826144a3576144a3614465565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614509576145096143e1565b5060010190565b600061ffff80831681811415614528576145286143e1565b6001019392505050565b600081614541576145416143e1565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60006020828403121561457957600080fd5b815167ffffffffffffffff81111561459057600080fd5b8201601f810184136145a157600080fd5b80516145af6142d68261421d565b8181528560208385010111156145c457600080fd5b6145d5826020830160208601613e0a565b95945050505050565b6000828210156145f0576145f06143e1565b500390565b60008261460457614604614465565b500690565b60006020828403121561461b57600080fd5b815161336e81613eac565b600060ff821660ff84168060ff03821115614643576146436143e1565b019392505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261468a6080830184613e36565b9695505050505050565b6000602082840312156146a657600080fd5b815161336e81613dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060ff8316806146f3576146f3614465565b8060ff8416069150509291505056fea264697066735822122093865d75767cc07f4ce715c0ab0d4041a90f259faa5f72916c5b72cd46411bed64736f6c63430008090033

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

00000000000000000000000072d56a3bb9d7041afd3055a580ab5e21c53d9dd40000000000000000000000006db0940d96cc8607cc067b04758c06acc44db852000000000000000000000000000000000000000000000000000000000000c35000000000000000000000000000000000000000000000000000000000000000c8

-----Decoded View---------------
Arg [0] : _food (address): 0x72D56a3bB9D7041AfD3055a580aB5E21C53D9dd4
Arg [1] : _traits (address): 0x6db0940D96cc8607Cc067B04758c06ACc44Db852
Arg [2] : _maxTokens (uint256): 50000
Arg [3] : _reserved (uint256): 200

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000072d56a3bb9d7041afd3055a580ab5e21c53d9dd4
Arg [1] : 0000000000000000000000006db0940d96cc8607cc067b04758c06acc44db852
Arg [2] : 000000000000000000000000000000000000000000000000000000000000c350
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c8


Deployed Bytecode Sourcemap

41770:11747:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35620:224;;;;;;;;;;-1:-1:-1;35620:224:0;;;;;:::i;:::-;;:::i;:::-;;;707:14:1;;700:22;682:41;;670:2;655:18;35620:224:0;;;;;;;;23829:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25388:221::-;;;;;;;;;;-1:-1:-1;25388:221:0;;;;;:::i;:::-;;:::i;:::-;;;1905:42:1;1893:55;;;1875:74;;1863:2;1848:18;25388:221:0;1729:226:1;24911:411:0;;;;;;;;;;-1:-1:-1;24911:411:0;;;;;:::i;:::-;;:::i;:::-;;50951:174;;;;;;;;;;-1:-1:-1;50951:174:0;;;;;:::i;:::-;;:::i;52895:118::-;;;;;;;;;;-1:-1:-1;52895:118:0;;;;;:::i;:::-;;:::i;36260:113::-;;;;;;;;;;-1:-1:-1;36348:10:0;:17;36260:113;;;2935:25:1;;;2923:2;2908:18;36260:113:0;2789:177:1;51677:119:0;;;;;;;;;;-1:-1:-1;51677:119:0;;;;;:::i;:::-;;:::i;46408:400::-;;;;;;;;;;-1:-1:-1;46408:400:0;;;;;:::i;:::-;;:::i;46080:320::-;;;;;;;;;;-1:-1:-1;46080:320:0;;;;;:::i;:::-;;:::i;35928:256::-;;;;;;;;;;-1:-1:-1;35928:256:0;;;;;:::i;:::-;;:::i;42354:27::-;;;;;;;;;;-1:-1:-1;42354:27:0;;;;;:::i;:::-;;:::i;:::-;;;4189:4:1;4177:17;;;4159:36;;4147:2;4132:18;42354:27:0;4017:184:1;52780:107:0;;;;;;;;;;-1:-1:-1;52780:107:0;;;;;:::i;:::-;;:::i;42388:26::-;;;;;;;;;;-1:-1:-1;42388:26:0;;;;;:::i;:::-;;:::i;52145:147::-;;;;;;;;;;-1:-1:-1;52145:147:0;;;;;:::i;:::-;;:::i;52544:106::-;;;;;;;;;;;;;:::i;50840:103::-;;;;;;;;;;-1:-1:-1;50924:11:0;;50840:103;;26688:185;;;;;;;;;;-1:-1:-1;26688:185:0;;;;;:::i;:::-;;:::i;53125:100::-;;;;;;;;;;-1:-1:-1;53125:100:0;;;;;:::i;:::-;;:::i;42490:29::-;;;;;;;;;;-1:-1:-1;42490:29:0;;;;;;;;41948:20;;;;;;;;;;-1:-1:-1;41948:20:0;;;;;;;;;;;4629:6:1;4617:19;;;4599:38;;4587:2;4572:18;41948:20:0;4455:188:1;36450:233:0;;;;;;;;;;-1:-1:-1;36450:233:0;;;;;:::i;:::-;;:::i;52300:236::-;;;;;;;;;;-1:-1:-1;52300:236:0;;;;;:::i;:::-;;:::i;19506:86::-;;;;;;;;;;-1:-1:-1;19577:7:0;;;;;;;19506:86;;23523:239;;;;;;;;;;-1:-1:-1;23523:239:0;;;;;:::i;:::-;;:::i;51321:328::-;;;;;;;;;;-1:-1:-1;51321:328:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23253:208::-;;;;;;;;;;-1:-1:-1;23253:208:0;;;;;:::i;:::-;;:::i;18341:94::-;;;;;;;;;;;;;:::i;52658:114::-;;;;;;;;;;-1:-1:-1;52658:114:0;;;;;:::i;:::-;;:::i;45608:466::-;;;;;;;;;;-1:-1:-1;45608:466:0;;;;;:::i;:::-;;:::i;17690:87::-;;;;;;;;;;-1:-1:-1;17763:6:0;;;;17690:87;;50597:235;;;;;;;;;;-1:-1:-1;50597:235:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23998:104::-;;;;;;;;;;;;;:::i;42573:17::-;;;;;;;;;;-1:-1:-1;42573:17:0;;;;;;;;44405:1195;;;;;;:::i;:::-;;:::i;25681:295::-;;;;;;;;;;-1:-1:-1;25681:295:0;;;;;:::i;:::-;;:::i;26944:328::-;;;;;;;;;;-1:-1:-1;26944:328:0;;;;;:::i;:::-;;:::i;41839:37::-;;;;;;;;;;;;;;;;41915:26;;;;;;;;;;;;;;;;53252:260;;;;;;;;;;-1:-1:-1;53252:260:0;;;;;:::i;:::-;;:::i;42625:21::-;;;;;;;;;;-1:-1:-1;42625:21:0;;;;;;;;51804:120;;;;;;;;;;-1:-1:-1;51804:120:0;;;;;:::i;:::-;;:::i;26047:164::-;;;;;;;;;;-1:-1:-1;26047:164:0;;;;;:::i;:::-;26168:25;;;;26144:4;26168:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26047:164;18590:192;;;;;;;;;;-1:-1:-1;18590:192:0;;;;;:::i;:::-;;:::i;41883:25::-;;;;;;;;;;;;;;;;53019:100;;;;;;;;;;-1:-1:-1;53019:100:0;;;;;:::i;:::-;;:::i;51932:205::-;;;;;;;;;;-1:-1:-1;51932:205:0;;;;;:::i;:::-;;:::i;51133:180::-;;;;;;;;;;-1:-1:-1;51133:180:0;;;;;:::i;:::-;;:::i;35620:224::-;35722:4;35746:50;;;35761:35;35746:50;;:90;;;35800:36;35824:11;35800:23;:36::i;:::-;35739:97;35620:224;-1:-1:-1;;35620:224:0:o;23829:100::-;23883:13;23916:5;23909:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23829:100;:::o;25388:221::-;25464:7;28871:16;;;:7;:16;;;;;;:30;:16;25484:73;;;;;;;11870:2:1;25484:73:0;;;11852:21:1;11909:2;11889:18;;;11882:30;11948:34;11928:18;;;11921:62;12019:14;11999:18;;;11992:42;12051:19;;25484:73:0;;;;;;;;;-1:-1:-1;25577:24:0;;;;:15;:24;;;;;;;;;25388:221::o;24911:411::-;24992:13;25008:23;25023:7;25008:14;:23::i;:::-;24992:39;;25056:5;25050:11;;:2;:11;;;;25042:57;;;;;;;12283:2:1;25042:57:0;;;12265:21:1;12322:2;12302:18;;;12295:30;12361:34;12341:18;;;12334:62;12432:3;12412:18;;;12405:31;12453:19;;25042:57:0;12081:397:1;25042:57:0;9122:10;25134:21;;;;;:62;;-1:-1:-1;25159:37:0;25176:5;9122:10;26047:164;:::i;25159:37::-;25112:168;;;;;;;12685:2:1;25112:168:0;;;12667:21:1;12724:2;12704:18;;;12697:30;12763:34;12743:18;;;12736:62;12834:26;12814:18;;;12807:54;12878:19;;25112:168:0;12483:420:1;25112:168:0;25293:21;25302:2;25306:7;25293:8;:21::i;:::-;24981:341;24911:411;;:::o;50951:174::-;51008:4;51032:18;;;:9;:18;;;;;;51057:12;;51032:22;;51053:1;51032:22;:::i;:::-;:37;51024:46;;;;;;-1:-1:-1;51088:20:0;;;;:11;:20;;;;;:28;;;;50951:174::o;52895:118::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;52962:7:::1;52958:47;;;52971:8;:6;:8::i;:::-;52895:118:::0;:::o;52958:47::-:1;52995:10;:8;:10::i;51677:119::-:0;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;51751:10:::1;:37:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;51677:119::o;46408:400::-;46570:10;;;;9122;46546:35;;;46542:220;;46624:41;9122:10;46657:7;46624:18;:41::i;:::-;46598:152;;;;;;;13793:2:1;46598:152:0;;;13775:21:1;13832:2;13812:18;;;13805:30;13871:34;13851:18;;;13844:62;13942:19;13922:18;;;13915:47;13979:19;;46598:152:0;13591:413:1;46598:152:0;46772:28;46782:4;46788:2;46792:7;46772:9;:28::i;46080:320::-;46136:7;46167:11;;46156:7;:22;46152:36;;-1:-1:-1;46187:1:0;;46080:320;-1:-1:-1;46080:320:0:o;46152:36::-;46227:1;46210:10;;46223:1;46210:14;;;;:::i;:::-;:18;;;;:::i;:::-;46199:7;:29;46195:53;;-1:-1:-1;46237:11:0;;46080:320;-1:-1:-1;46080:320:0:o;46195:53::-;46287:1;46270:10;;46283:1;46270:14;;;;:::i;:::-;:18;;;;:::i;:::-;46259:7;:29;46255:53;;-1:-1:-1;46297:11:0;;46080:320;-1:-1:-1;46080:320:0:o;46255:53::-;46347:1;46330:10;;46343:1;46330:14;;;;:::i;:::-;:18;;;;:::i;:::-;46319:7;:29;46315:53;;-1:-1:-1;46357:11:0;;46080:320;-1:-1:-1;46080:320:0:o;46315:53::-;-1:-1:-1;46382:12:0;;46080:320;-1:-1:-1;46080:320:0:o;35928:256::-;36025:7;36061:23;36078:5;36061:16;:23::i;:::-;36053:5;:31;36045:87;;;;;;;14758:2:1;36045:87:0;;;14740:21:1;14797:2;14777:18;;;14770:30;14836:34;14816:18;;;14809:62;14907:13;14887:18;;;14880:41;14938:19;;36045:87:0;14556:407:1;36045:87:0;-1:-1:-1;36150:19:0;;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35928:256::o;42354:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52780:107::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;52854:11:::1;:25:::0;52780:107::o;42388:26::-;;;;;;;;;;;52145:147;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;52241:26:::1;::::0;;::::1;;::::0;;;:15:::1;:26;::::0;;;;:43;52145:147::o;52544:106::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;17763:6;;52594:48:::1;::::0;17763:6;;;;;52620:21:::1;52594:48:::0;::::1;;;::::0;::::1;::::0;;;52620:21;17763:6;52594:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;26688:185:::0;26826:39;26843:4;26849:2;26853:7;26826:39;;;;;;;;;;;;:16;:39::i;53125:100::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;53198:4:::1;:19:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;53125:100::o;36450:233::-;36525:7;36561:30;36348:10;:17;;36260:113;36561:30;36553:5;:38;36545:95;;;;;;;15170:2:1;36545:95:0;;;15152:21:1;15209:2;15189:18;;;15182:30;15248:34;15228:18;;;15221:62;15319:14;15299:18;;;15292:42;15351:19;;36545:95:0;14968:408:1;36545:95:0;36658:10;36669:5;36658:17;;;;;;;;:::i;:::-;;;;;;;;;36651:24;;36450:233;;;:::o;52300:236::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;52415:9:::1;52410:119;52430:20:::0;;::::1;52410:119;;;52507:7;;52515:1;52507:10;;;;;;;:::i;:::-;;;;;;;52468:15;:29;52484:9;;52494:1;52484:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;52468:29;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52468:29:0;:49;52452:3;::::1;::::0;::::1;:::i;:::-;;;;52410:119;;;;52300:236:::0;;;;:::o;23523:239::-;23595:7;23631:16;;;:7;:16;;;;;;;;23666:19;23658:73;;;;;;;15972:2:1;23658:73:0;;;15954:21:1;16011:2;15991:18;;;15984:30;16050:34;16030:18;;;16023:62;16121:11;16101:18;;;16094:39;16150:19;;23658:73:0;15770:405:1;51321:328:0;51384:16;51413:28;51458:19;51468:8;51458:9;:19::i;:::-;51444:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51444:34:0;;51413:65;;51493:9;51489:124;51512:11;:18;51508:1;:22;51489:124;;;51569:32;51589:8;51599:1;51569:19;:32::i;:::-;51552:11;51564:1;51552:14;;;;;;;;:::i;:::-;;;;;;;;;;:49;51532:3;;;;:::i;:::-;;;;51489:124;;;-1:-1:-1;51630:11:0;51321:328;-1:-1:-1;;51321:328:0:o;23253:208::-;23325:7;23353:19;;;23345:74;;;;;;;16382:2:1;23345:74:0;;;16364:21:1;16421:2;16401:18;;;16394:30;16460:34;16440:18;;;16433:62;16531:12;16511:18;;;16504:40;16561:19;;23345:74:0;16180:406:1;23345:74:0;-1:-1:-1;23437:16:0;;;;;;:9;:16;;;;;;;23253:208::o;18341:94::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;18406:21:::1;18424:1;18406:9;:21::i;:::-;18341:94::o:0;52658:114::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;52734:13:::1;:30:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;52658:114::o;45608:466::-;45680:1;45670:6;:11;;45662:50;;;;;;;16793:2:1;45662:50:0;;;16775:21:1;16832:2;16812:18;;;16805:30;16871:28;16851:18;;;16844:56;16917:18;;45662:50:0;16591:350:1;45662:50:0;45753:10;45737:27;;;;:15;:27;;;;;:34;45727:44;;;45719:53;;;;;;45779:12;;45802:265;45826:6;45822:1;:10;45802:265;;;45854:6;:8;;;;;:6;:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;45877;;:10;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;45909:8:0;;;45899:19;;;;:9;:19;;;;;45921:12;45899:34;;45962:8;45955:16;;:6;:16::i;:::-;45948:23;;45986:24;45995:8;;46005:4;45986:8;:24::i;:::-;;46025:30;46035:10;46046:8;;46025:9;:30::i;:::-;45834:3;;;;:::i;:::-;;;;45802:265;;50597:235;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50748:18:0;;;;:9;:18;;;;;;50773:12;;50748:22;;50769:1;50748:22;:::i;:::-;:37;50740:46;;;;;;-1:-1:-1;50804:20:0;;;;:11;:20;;;;;;;;;50797:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50597:235::o;23998:104::-;24054:13;24087:7;24080:14;;;;;:::i;44405:1195::-;19577:7;;;;;;;19831:9;19823:38;;;;;;;17350:2:1;19823:38:0;;;17332:21:1;17389:2;17369:18;;;17362:30;17428:18;17408;;;17401:46;17464:18;;19823:38:0;17148:340:1;19823:38:0;44491:1:::1;44481:6;:11;;44473:50;;;::::0;::::1;::::0;;16793:2:1;44473:50:0::1;::::0;::::1;16775:21:1::0;16832:2;16812:18;;;16805:30;16871:28;16851:18;;;16844:56;16917:18;;44473:50:0::1;16591:350:1::0;44473:50:0::1;44538:9;9122:10:::0;44538:25:::1;44530:46;;;::::0;::::1;::::0;;17695:2:1;44530:46:0::1;::::0;::::1;17677:21:1::0;17734:1;17714:18;;;17707:29;17772:10;17752:18;;;17745:38;17800:18;;44530:46:0::1;17493:331:1::0;44530:46:0::1;44610:10;::::0;44591:6:::1;::::0;:15:::1;::::0;44600:6;;44591::::1;;:15;:::i;:::-;:29;;44583:59;;;::::0;::::1;::::0;;18031:2:1;44583:59:0::1;::::0;::::1;18013:21:1::0;18070:2;18050:18;;;18043:30;18109:19;18089:18;;;18082:47;18146:18;;44583:59:0::1;17829:341:1::0;44583:59:0::1;44652:13;::::0;::::1;;44649:108;;;9122:10:::0;44685:25:::1;::::0;;;:11:::1;:25;::::0;;;;:32;44675:42;::::1;;44667:88;;;::::0;::::1;::::0;;18377:2:1;44667:88:0::1;::::0;::::1;18359:21:1::0;18416:2;18396:18;;;18389:30;18455:34;18435:18;;;18428:62;18526:3;18506:18;;;18499:31;18547:19;;44667:88:0::1;18175:397:1::0;44667:88:0::1;44776:11;::::0;44767:6:::1;::::0;::::1;;:20;44763:239;;;44825:11;::::0;44806:6:::1;::::0;:15:::1;::::0;44815:6;;44806::::1;;:15;:::i;:::-;:30;;44798:74;;;::::0;::::1;::::0;;18779:2:1;44798:74:0::1;::::0;::::1;18761:21:1::0;18818:2;18798:18;;;18791:30;18857:33;18837:18;;;18830:61;18908:18;;44798:74:0::1;18577:355:1::0;44798:74:0::1;44912:9;44898:10;;44889:6;:19;;;;:::i;:::-;:32;;44881:67;;;::::0;::::1;::::0;;19139:2:1;44881:67:0::1;::::0;::::1;19121:21:1::0;19178:2;19158:18;;;19151:30;19217:24;19197:18;;;19190:52;19259:18;;44881:67:0::1;18937:346:1::0;44881:67:0::1;44763:239;;;44979:9;:14:::0;44971:23:::1;;;::::0;::::1;;45008:21;::::0;;45063:458:::1;45087:6;45083:1;:10;45063:458;;;45115:6;:8:::0;;::::1;;::::0;:6:::1;:8;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;45138:11;;:13;;;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;45169:13:0::1;::::0;::::1;;45166:55;;;9122:10:::0;45184:26:::1;::::0;;;:11:::1;:26;::::0;;;;:35;;;::::1;::::0;::::1;:::i;:::-;;;;;;45166:55;45242:11;::::0;;45232:22:::1;::::0;;;:9:::1;:22;::::0;;;;45257:12:::1;45232:37:::0;;45298:11;45291:19:::1;::::0;:6:::1;:19::i;:::-;45284:26;;45325:27;45334:11;;45347:4;45325:8;:27::i;:::-;;45367:17;45387:21;45403:4;45387:15;:21::i;:::-;45367:41;;45440:21;45449:11;;45440:8;:21::i;:::-;45423:38;::::0;;::::1;:::i;:::-;;;45476:33;45486:9;45497:11;;45476:9;:33::i;:::-;-1:-1:-1::0;45095:3:0;::::1;::::0;::::1;:::i;:::-;;;;45063:458;;;-1:-1:-1::0;45535:17:0;;45531:61:::1;;45554:4;::::0;::::1;;:9;9122:10:::0;45554:38:::1;::::0;;::::1;::::0;;;;;;19693:42:1;19681:55;;;45554:38:0::1;::::0;::::1;19663:74:1::0;19753:18;;;19746:34;;;19636:18;;45554:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44466:1134;;44405:1195:::0;:::o;25681:295::-;25784:24;;;9122:10;25784:24;;25776:62;;;;;;;19993:2:1;25776:62:0;;;19975:21:1;20032:2;20012:18;;;20005:30;20071:27;20051:18;;;20044:55;20116:18;;25776:62:0;19791:349:1;25776:62:0;9122:10;25851:32;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;25920:48;;682:41:1;;;25851:42:0;;9122:10;25920:48;;655:18:1;25920:48:0;;;;;;;25681:295;;:::o;26944:328::-;27119:41;9122:10;27152:7;27119:18;:41::i;:::-;27111:103;;;;;;;13793:2:1;27111:103:0;;;13775:21:1;13832:2;13812:18;;;13805:30;13871:34;13851:18;;;13844:62;13942:19;13922:18;;;13915:47;13979:19;;27111:103:0;13591:413:1;27111:103:0;27225:39;27239:4;27245:2;27249:7;27258:5;27225:13;:39::i;:::-;26944:328;;;;:::o;53252:260::-;28847:4;28871:16;;;:7;:16;;;;;;53317:13;;28871:30;:16;53339:76;;;;;;;20347:2:1;53339:76:0;;;20329:21:1;20386:2;20366:18;;;20359:30;20425:34;20405:18;;;20398:62;20496:17;20476:18;;;20469:45;20531:19;;53339:76:0;20145:411:1;53339:76:0;53430:18;;;;:9;:18;;;;;;53455:12;;53430:22;;53451:1;53430:22;:::i;:::-;:37;53422:46;;;;;;53482:6;;:24;;;;;;;;2935:25:1;;;53482:6:0;;;;;:15;;2908:18:1;;53482:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;51804:120::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;51880:25:::1;;;::::0;;;:11:::1;:25;::::0;;;;51915:1:::1;51880:36:::0;;51804:120::o;18590:192::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;18679:22:::1;::::0;::::1;18671:73;;;::::0;::::1;::::0;;21403:2:1;18671:73:0::1;::::0;::::1;21385:21:1::0;21442:2;21422:18;;;21415:30;21481:34;21461:18;;;21454:62;21552:8;21532:18;;;21525:36;21578:19;;18671:73:0::1;21201:402:1::0;18671:73:0::1;18755:19;18765:8;18755:9;:19::i;53019:100::-:0;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;53089:10:::1;:22:::0;53019:100::o;51932:205::-;17763:6;;17910:23;17763:6;9122:10;17910:23;17902:68;;;;;;;13432:2:1;17902:68:0;;;13414:21:1;;;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;13562:18;;17902:68:0;13230:356:1;17902:68:0;52023:9:::1;52018:112;52038:23:::0;;::::1;52018:112;;;52117:1;52079:11;:28;52091:12;;52104:1;52091:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;52079:28;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52079:28:0;:39;52063:3;::::1;::::0;::::1;:::i;:::-;;;;52018:112;;51133:180:::0;51192:5;51218:18;;;:9;:18;;;;;;51243:12;;51218:22;;51239:1;51218:22;:::i;:::-;:37;51210:46;;;;;;-1:-1:-1;51274:20:0;;;;:11;:20;;;;;:30;;;;;;;51133:180::o;22884:305::-;22986:4;23023:40;;;23038:25;23023:40;;:105;;-1:-1:-1;23080:48:0;;;23095:33;23080:48;23023:105;:158;;;-1:-1:-1;12607:25:0;12592:40;;;;23145:36;12483:157;32764:174;32839:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;32893:23;32839:24;32893:14;:23::i;:::-;32884:46;;;;;;;;;;;;32764:174;;:::o;20306:118::-;19577:7;;;;;;;19831:9;19823:38;;;;;;;17350:2:1;19823:38:0;;;17332:21:1;17389:2;17369:18;;;17362:30;17428:18;17408;;;17401:46;17464:18;;19823:38:0;17148:340:1;19823:38:0;20366:7:::1;:14:::0;;;::::1;::::0;::::1;::::0;;20396:20:::1;20403:12;9122:10:::0;;9042:98;20403:12:::1;20396:20;::::0;1905:42:1;1893:55;;;1875:74;;1863:2;1848:18;20396:20:0::1;;;;;;;20306:118::o:0;20565:120::-;19577:7;;;;;;;20101:41;;;;;;;21810:2:1;20101:41:0;;;21792:21:1;21849:2;21829:18;;;21822:30;21888:22;21868:18;;;21861:50;21928:18;;20101:41:0;21608:344:1;20101:41:0;20624:7:::1;:15:::0;;;::::1;::::0;;20655:22:::1;9122:10:::0;20664:12:::1;9042:98:::0;29076:348;29169:4;28871:16;;;:7;:16;;;;;;:30;:16;29186:73;;;;;;;22159:2:1;29186:73:0;;;22141:21:1;22198:2;22178:18;;;22171:30;22237:34;22217:18;;;22210:62;22308:14;22288:18;;;22281:42;22340:19;;29186:73:0;21957:408:1;29186:73:0;29270:13;29286:23;29301:7;29286:14;:23::i;:::-;29270:39;;29339:5;29328:16;;:7;:16;;;:51;;;;29372:7;29348:31;;:20;29360:7;29348:11;:20::i;:::-;:31;;;29328:51;:87;;;-1:-1:-1;26168:25:0;;;;26144:4;26168:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29383:32;29320:96;29076:348;-1:-1:-1;;;;29076:348:0:o;32068:578::-;32227:4;32200:31;;:23;32215:7;32200:14;:23::i;:::-;:31;;;32192:85;;;;;;;22572:2:1;32192:85:0;;;22554:21:1;22611:2;22591:18;;;22584:30;22650:34;22630:18;;;22623:62;22721:11;22701:18;;;22694:39;22750:19;;32192:85:0;22370:405:1;32192:85:0;32296:16;;;32288:65;;;;;;;22982:2:1;32288:65:0;;;22964:21:1;23021:2;23001:18;;;22994:30;23060:34;23040:18;;;23033:62;23131:6;23111:18;;;23104:34;23155:19;;32288:65:0;22780:400:1;32288:65:0;32366:39;32387:4;32393:2;32397:7;32366:20;:39::i;:::-;32470:29;32487:1;32491:7;32470:8;:29::i;:::-;32512:15;;;;;;;:9;:15;;;;;:20;;32531:1;;32512:15;:20;;32531:1;;32512:20;:::i;:::-;;;;-1:-1:-1;;32543:13:0;;;;;;;:9;:13;;;;;:18;;32560:1;;32543:13;:18;;32560:1;;32543:18;:::i;:::-;;;;-1:-1:-1;;32572:16:0;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;;32611:27;;32572:16;;32611:27;;;;;;;32068:578;;;:::o;18790:173::-;18865:6;;;;18882:17;;;;;;;;;;;18915:40;;18865:6;;;18882:17;18865:6;;18915:40;;18846:16;;18915:40;18835:128;18790:173;:::o;50354:216::-;50407:7;50473:9;50501:16;50516:1;50501:12;:16;:::i;:::-;50448:114;;23548:2:1;23544:15;;;;23561:66;23540:88;50448:114:0;;;23528:101:1;50491:27:0;23645:12:1;;;23638:28;50527:15:0;23682:12:1;;;23675:28;23719:12;;;23712:28;;;23756:13;;50448:114:0;;;;;;;;;;;;;50438:125;;50448:114;50438:125;;;;;50354:216;-1:-1:-1;;50354:216:0:o;46839:205::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46964:18:0;46977:4;46964:12;:18::i;:::-;46960:22;;47016:1;46993:11;:20;47005:7;46993:20;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46839:205;;;;:::o;29766:110::-;29842:26;29852:2;29856:7;29842:26;;;;;;;;;;;;:9;:26::i;:::-;29766:110;;:::o;48101:430::-;48193:11;;48183:6;;48163:7;;48183:6;;;;:21;;;:68;;-1:-1:-1;48208:6:0;;48217:5;48208:6;;;;:14;:43;;;;-1:-1:-1;48227:18:0;48243:2;48236:3;48228:11;;;48227:18;:::i;:::-;48226:25;;48208:43;48183:113;;;-1:-1:-1;48255:6:0;;48263:5;48255:6;;;;:13;:41;;;;-1:-1:-1;48295:1:0;48273:18;48289:2;48282:3;48274:11;;;48273:18;:::i;:::-;48272:24;;48255:41;48179:138;;;9122:10;48305:12;9042:98;48179:138;48373:10;;:39;;;;;48408:3;48400:11;;;48373:39;;;2935:25:1;48357:13:0;;48373:10;;;:26;;2908:18:1;;48373:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48357:55;-1:-1:-1;48464:21:0;;;48460:46;;9122:10;48494:12;48487:19;48101:430;-1:-1:-1;;;48101:430:0:o;28154:315::-;28311:28;28321:4;28327:2;28331:7;28311:9;:28::i;:::-;28358:48;28381:4;28387:2;28391:7;28400:5;28358:22;:48::i;:::-;28350:111;;;;;;;24355:2:1;28350:111:0;;;24337:21:1;24394:2;24374:18;;;24367:30;24433:34;24413:18;;;24406:62;24504:20;24484:18;;;24477:48;24542:19;;28350:111:0;24153:414:1;37296:589:0;37502:18;;;37498:187;;37537:40;37569:7;38712:10;:17;;38685:24;;;;:15;:24;;;;;:44;;;38740:24;;;;;;;;;;;;38608:164;37537:40;37498:187;;;37607:2;37599:10;;:4;:10;;;37595:90;;37626:47;37659:4;37665:7;37626:32;:47::i;:::-;37699:16;;;37695:183;;37732:45;37769:7;37732:36;:45::i;37695:183::-;37805:4;37799:10;;:2;:10;;;37795:83;;37826:40;37854:2;37858:7;37826:27;:40::i;48761:977::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48895:20:0;48913:2;48903:6;48896:13;;48895:20;:::i;:::-;:25;;48883:37;;;48919:1;;48945:17;;48961:1;48945:17;;;48957:1;48945:17;48931:31;;48982:2;48973:11;;;;;49010:37;49029:4;49036:6;49029:13;49045:1;49010:11;:37::i;:::-;48995:52;;:12;;;:52;49067:2;49058:11;;;;;49092:45;49118:6;49111:13;;49127:9;49131:5;49127:1;:9;:::i;:::-;49092:11;:45::i;:::-;49080:57;;:9;;;:57;49157:2;49148:11;;;;;49184:45;49210:6;49203:13;;49219:9;49223:5;49219:1;:9;:::i;49184:45::-;49170:59;;:11;;;:59;49249:2;49240:11;;;;;49276:45;49302:6;49295:13;;49311:9;49315:5;49311:1;:9;:::i;49276:45::-;49262:59;;:11;;;:59;49341:2;49332:11;;;;;49362:45;49388:6;49381:13;;49397:9;49401:5;49397:1;:9;:::i;49362:45::-;49354:53;;:5;;;:53;49427:2;49418:11;;;;;49449:45;49475:6;49468:13;;49484:9;49488:5;49484:1;:9;:::i;49449:45::-;49440:54;;:6;;;:54;49514:2;49505:11;;;;;49539:45;49565:6;49558:13;;49574:9;49578:5;49574:1;:9;:::i;49539:45::-;49527:57;;:9;;;:57;49604:2;49595:11;;;;;49633:45;49659:6;49652:13;;49668:9;49672:5;49668:1;:9;:::i;49633:45::-;49617:61;;;;:13;;;:61;49719:11;;;;49711:19;:5;;;:19;-1:-1:-1;49617:1:0;48761:977;-1:-1:-1;48761:977:0:o;30103:321::-;30233:18;30239:2;30243:7;30233:5;:18::i;:::-;30284:54;30315:1;30319:2;30323:7;30332:5;30284:22;:54::i;:::-;30262:154;;;;;;;24355:2:1;30262:154:0;;;24337:21:1;24394:2;24374:18;;;24367:30;24433:34;24413:18;;;24406:62;24504:20;24484:18;;;24477:48;24542:19;;30262:154:0;24153:414:1;33503:799:0;33658:4;33679:13;;;1999:20;2047:8;33675:620;;33715:72;;;;;:36;;;;;;:72;;9122:10;;33766:4;;33772:7;;33781:5;;33715:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33715:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33711:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33957:13:0;;33953:272;;34000:60;;;;;24355:2:1;34000:60:0;;;24337:21:1;24394:2;24374:18;;;24367:30;24433:34;24413:18;;;24406:62;24504:20;24484:18;;;24477:48;24542:19;;34000:60:0;24153:414:1;33953:272:0;34175:6;34169:13;34160:6;34156:2;34152:15;34145:38;33711:529;33838:51;;33848:41;33838:51;;-1:-1:-1;33831:58:0;;33675:620;-1:-1:-1;34279:4:0;33503:799;;;;;;:::o;39399:988::-;39665:22;39715:1;39690:22;39707:4;39690:16;:22::i;:::-;:26;;;;:::i;:::-;39727:18;39748:26;;;:17;:26;;;;;;39665:51;;-1:-1:-1;39881:28:0;;;39877:328;;39948:18;;;39926:19;39948:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39999:30;;;;;;:44;;;40116:30;;:17;:30;;;;;:43;;;39877:328;-1:-1:-1;40301:26:0;;;;:17;:26;;;;;;;;40294:33;;;40345:18;;;;;;:12;:18;;;;;:34;;;;;;;40338:41;39399:988::o;40682:1079::-;40960:10;:17;40935:22;;40960:21;;40980:1;;40960:21;:::i;:::-;40992:18;41013:24;;;:15;:24;;;;;;41386:10;:26;;40935:46;;-1:-1:-1;41013:24:0;;40935:46;;41386:26;;;;;;:::i;:::-;;;;;;;;;41364:48;;41450:11;41425:10;41436;41425:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;41530:28;;;:15;:28;;;;;;;:41;;;41702:24;;;;;41695:31;41737:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;40753:1008;;;40682:1079;:::o;38186:221::-;38271:14;38288:20;38305:2;38288:16;:20::i;:::-;38319:16;;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;38364:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;38186:221:0:o;47477:303::-;47578:5;47601:11;47635:8;47644:9;47635:19;;;;;;;;;:::i;:::-;;:26;47615:47;;47621:4;47615:47;:::i;:::-;47601:61;;47689:8;47698:9;47689:19;;;;;;;;;:::i;:::-;;47709:5;47689:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;47677:9;47685:1;47677:9;;;;:38;47673:56;;;47724:5;-1:-1:-1;47717:12:0;;47673:56;47747:7;47755:9;47747:18;;;;;;;;;:::i;:::-;;47766:5;47747:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;47740:32;;;47477:303;;;;:::o;30760:382::-;30840:16;;;30832:61;;;;;;;26105:2:1;30832:61:0;;;26087:21:1;;;26124:18;;;26117:30;26183:34;26163:18;;;26156:62;26235:18;;30832:61:0;25903:356:1;30832:61:0;28847:4;28871:16;;;:7;:16;;;;;;:30;:16;:30;30904:58;;;;;;;26466:2:1;30904:58:0;;;26448:21:1;26505:2;26485:18;;;26478:30;26544;26524:18;;;26517:58;26592:18;;30904:58:0;26264:352:1;30904:58:0;30975:45;31004:1;31008:2;31012:7;30975:20;:45::i;:::-;31033:13;;;;;;;:9;:13;;;;;:18;;31050:1;;31033:13;:18;;31050:1;;31033:18;:::i;:::-;;;;-1:-1:-1;;31062:16:0;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;31101:33;;31062:16;;;31101:33;;31062:16;;31101:33;30760:382;;:::o;14:177:1:-;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;734:258::-;806:1;816:113;830:6;827:1;824:13;816:113;;;906:11;;;900:18;887:11;;;880:39;852:2;845:10;816:113;;;947:6;944:1;941:13;938:48;;;-1:-1:-1;;982:1:1;964:16;;957:27;734:258::o;997:317::-;1039:3;1077:5;1071:12;1104:6;1099:3;1092:19;1120:63;1176:6;1169:4;1164:3;1160:14;1153:4;1146:5;1142:16;1120:63;:::i;:::-;1228:2;1216:15;1233:66;1212:88;1203:98;;;;1303:4;1199:109;;997:317;-1:-1:-1;;997:317:1:o;1319:220::-;1468:2;1457:9;1450:21;1431:4;1488:45;1529:2;1518:9;1514:18;1506:6;1488:45;:::i;1544:180::-;1603:6;1656:2;1644:9;1635:7;1631:23;1627:32;1624:52;;;1672:1;1669;1662:12;1624:52;-1:-1:-1;1695:23:1;;1544:180;-1:-1:-1;1544:180:1:o;1960:154::-;2046:42;2039:5;2035:54;2028:5;2025:65;2015:93;;2104:1;2101;2094:12;2119:315;2187:6;2195;2248:2;2236:9;2227:7;2223:23;2219:32;2216:52;;;2264:1;2261;2254:12;2216:52;2303:9;2290:23;2322:31;2347:5;2322:31;:::i;:::-;2372:5;2424:2;2409:18;;;;2396:32;;-1:-1:-1;;;2119:315:1:o;2439:160::-;2504:20;;2560:13;;2553:21;2543:32;;2533:60;;2589:1;2586;2579:12;2533:60;2439:160;;;:::o;2604:180::-;2660:6;2713:2;2701:9;2692:7;2688:23;2684:32;2681:52;;;2729:1;2726;2719:12;2681:52;2752:26;2768:9;2752:26;:::i;2971:247::-;3030:6;3083:2;3071:9;3062:7;3058:23;3054:32;3051:52;;;3099:1;3096;3089:12;3051:52;3138:9;3125:23;3157:31;3182:5;3157:31;:::i;3223:456::-;3300:6;3308;3316;3369:2;3357:9;3348:7;3344:23;3340:32;3337:52;;;3385:1;3382;3375:12;3337:52;3424:9;3411:23;3443:31;3468:5;3443:31;:::i;:::-;3493:5;-1:-1:-1;3550:2:1;3535:18;;3522:32;3563:33;3522:32;3563:33;:::i;:::-;3223:456;;3615:7;;-1:-1:-1;;;3669:2:1;3654:18;;;;3641:32;;3223:456::o;3684:248::-;3752:6;3760;3813:2;3801:9;3792:7;3788:23;3784:32;3781:52;;;3829:1;3826;3819:12;3781:52;-1:-1:-1;;3852:23:1;;;3922:2;3907:18;;;3894:32;;-1:-1:-1;3684:248:1:o;4648:367::-;4711:8;4721:6;4775:3;4768:4;4760:6;4756:17;4752:27;4742:55;;4793:1;4790;4783:12;4742:55;-1:-1:-1;4816:20:1;;4859:18;4848:30;;4845:50;;;4891:1;4888;4881:12;4845:50;4928:4;4920:6;4916:17;4904:29;;4988:3;4981:4;4971:6;4968:1;4964:14;4956:6;4952:27;4948:38;4945:47;4942:67;;;5005:1;5002;4995:12;4942:67;4648:367;;;;;:::o;5020:773::-;5142:6;5150;5158;5166;5219:2;5207:9;5198:7;5194:23;5190:32;5187:52;;;5235:1;5232;5225:12;5187:52;5275:9;5262:23;5304:18;5345:2;5337:6;5334:14;5331:34;;;5361:1;5358;5351:12;5331:34;5400:70;5462:7;5453:6;5442:9;5438:22;5400:70;:::i;:::-;5489:8;;-1:-1:-1;5374:96:1;-1:-1:-1;5577:2:1;5562:18;;5549:32;;-1:-1:-1;5593:16:1;;;5590:36;;;5622:1;5619;5612:12;5590:36;;5661:72;5725:7;5714:8;5703:9;5699:24;5661:72;:::i;:::-;5020:773;;;;-1:-1:-1;5752:8:1;-1:-1:-1;;;;5020:773:1:o;5798:632::-;5969:2;6021:21;;;6091:13;;5994:18;;;6113:22;;;5940:4;;5969:2;6192:15;;;;6166:2;6151:18;;;5940:4;6235:169;6249:6;6246:1;6243:13;6235:169;;;6310:13;;6298:26;;6379:15;;;;6344:12;;;;6271:1;6264:9;6235:169;;;-1:-1:-1;6421:3:1;;5798:632;-1:-1:-1;;;;;;5798:632:1:o;6435:1344::-;6648:13;;516;509:21;497:34;;6619:3;6604:19;;6720:4;6712:6;6708:17;6702:24;6735:52;6781:4;6770:9;6766:20;6752:12;4004:4;3993:16;3981:29;;3937:75;6735:52;;6836:4;6828:6;6824:17;6818:24;6851:54;6899:4;6888:9;6884:20;6868:14;4004:4;3993:16;3981:29;;3937:75;6851:54;;6954:4;6946:6;6942:17;6936:24;6969:54;7017:4;7006:9;7002:20;6986:14;4004:4;3993:16;3981:29;;3937:75;6969:54;;7072:4;7064:6;7060:17;7054:24;7087:54;7135:4;7124:9;7120:20;7104:14;4004:4;3993:16;3981:29;;3937:75;7087:54;;7190:4;7182:6;7178:17;7172:24;7205:54;7253:4;7242:9;7238:20;7222:14;4004:4;3993:16;3981:29;;3937:75;7205:54;;7308:4;7300:6;7296:17;7290:24;7323:54;7371:4;7360:9;7356:20;7340:14;4004:4;3993:16;3981:29;;3937:75;7323:54;;7426:4;7418:6;7414:17;7408:24;7441:54;7489:4;7478:9;7474:20;7458:14;4004:4;3993:16;3981:29;;3937:75;7441:54;-1:-1:-1;7514:6:1;7557:15;;;7551:22;4004:4;3993:16;;;7615:18;;;3981:29;;;;7653:6;7696:15;;;7690:22;3993:16;7754:18;;;;3981:29;;;;6435:1344;:::o;8027:315::-;8092:6;8100;8153:2;8141:9;8132:7;8128:23;8124:32;8121:52;;;8169:1;8166;8159:12;8121:52;8208:9;8195:23;8227:31;8252:5;8227:31;:::i;:::-;8277:5;-1:-1:-1;8301:35:1;8332:2;8317:18;;8301:35;:::i;:::-;8291:45;;8027:315;;;;;:::o;8347:184::-;8399:77;8396:1;8389:88;8496:4;8493:1;8486:15;8520:4;8517:1;8510:15;8536:334;8607:2;8601:9;8663:2;8653:13;;8668:66;8649:86;8637:99;;8766:18;8751:34;;8787:22;;;8748:62;8745:88;;;8813:18;;:::i;:::-;8849:2;8842:22;8536:334;;-1:-1:-1;8536:334:1:o;8875:245::-;8923:4;8956:18;8948:6;8945:30;8942:56;;;8978:18;;:::i;:::-;-1:-1:-1;9035:2:1;9023:15;9040:66;9019:88;9109:4;9015:99;;8875:245::o;9125:1016::-;9220:6;9228;9236;9244;9297:3;9285:9;9276:7;9272:23;9268:33;9265:53;;;9314:1;9311;9304:12;9265:53;9353:9;9340:23;9372:31;9397:5;9372:31;:::i;:::-;9422:5;-1:-1:-1;9479:2:1;9464:18;;9451:32;9492:33;9451:32;9492:33;:::i;:::-;9544:7;-1:-1:-1;9598:2:1;9583:18;;9570:32;;-1:-1:-1;9653:2:1;9638:18;;9625:32;9680:18;9669:30;;9666:50;;;9712:1;9709;9702:12;9666:50;9735:22;;9788:4;9780:13;;9776:27;-1:-1:-1;9766:55:1;;9817:1;9814;9807:12;9766:55;9853:2;9840:16;9878:48;9894:31;9922:2;9894:31;:::i;:::-;9878:48;:::i;:::-;9949:2;9942:5;9935:17;9989:7;9984:2;9979;9975;9971:11;9967:20;9964:33;9961:53;;;10010:1;10007;10000:12;9961:53;10065:2;10060;10056;10052:11;10047:2;10040:5;10036:14;10023:45;10109:1;10104:2;10099;10092:5;10088:14;10084:23;10077:34;10130:5;10120:15;;;;;9125:1016;;;;;;;:::o;10391:388::-;10459:6;10467;10520:2;10508:9;10499:7;10495:23;10491:32;10488:52;;;10536:1;10533;10526:12;10488:52;10575:9;10562:23;10594:31;10619:5;10594:31;:::i;:::-;10644:5;-1:-1:-1;10701:2:1;10686:18;;10673:32;10714:33;10673:32;10714:33;:::i;:::-;10766:7;10756:17;;;10391:388;;;;;:::o;10784:437::-;10870:6;10878;10931:2;10919:9;10910:7;10906:23;10902:32;10899:52;;;10947:1;10944;10937:12;10899:52;10987:9;10974:23;11020:18;11012:6;11009:30;11006:50;;;11052:1;11049;11042:12;11006:50;11091:70;11153:7;11144:6;11133:9;11129:22;11091:70;:::i;:::-;11180:8;;11065:96;;-1:-1:-1;10784:437:1;-1:-1:-1;;;;10784:437:1:o;11226:::-;11305:1;11301:12;;;;11348;;;11369:61;;11423:4;11415:6;11411:17;11401:27;;11369:61;11476:2;11468:6;11465:14;11445:18;11442:38;11439:218;;;11513:77;11510:1;11503:88;11614:4;11611:1;11604:15;11642:4;11639:1;11632:15;11439:218;;11226:437;;;:::o;12908:184::-;12960:77;12957:1;12950:88;13057:4;13054:1;13047:15;13081:4;13078:1;13071:15;13097:128;13137:3;13168:1;13164:6;13161:1;13158:13;13155:39;;;13174:18;;:::i;:::-;-1:-1:-1;13210:9:1;;13097:128::o;14009:228::-;14049:7;14175:1;14107:66;14103:74;14100:1;14097:81;14092:1;14085:9;14078:17;14074:105;14071:131;;;14182:18;;:::i;:::-;-1:-1:-1;14222:9:1;;14009:228::o;14242:184::-;14294:77;14291:1;14284:88;14391:4;14388:1;14381:15;14415:4;14412:1;14405:15;14431:120;14471:1;14497;14487:35;;14502:18;;:::i;:::-;-1:-1:-1;14536:9:1;;14431:120::o;15381:184::-;15433:77;15430:1;15423:88;15530:4;15527:1;15520:15;15554:4;15551:1;15544:15;15570:195;15609:3;15640:66;15633:5;15630:77;15627:103;;;15710:18;;:::i;:::-;-1:-1:-1;15757:1:1;15746:13;;15570:195::o;16946:197::-;16984:3;17012:6;17053:2;17046:5;17042:14;17080:2;17071:7;17068:15;17065:41;;;17086:18;;:::i;:::-;17135:1;17122:15;;16946:197;-1:-1:-1;;;16946:197:1:o;19288:196::-;19327:3;19355:5;19345:39;;19364:18;;:::i;:::-;-1:-1:-1;19411:66:1;19400:78;;19288:196::o;20561:635::-;20641:6;20694:2;20682:9;20673:7;20669:23;20665:32;20662:52;;;20710:1;20707;20700:12;20662:52;20743:9;20737:16;20776:18;20768:6;20765:30;20762:50;;;20808:1;20805;20798:12;20762:50;20831:22;;20884:4;20876:13;;20872:27;-1:-1:-1;20862:55:1;;20913:1;20910;20903:12;20862:55;20942:2;20936:9;20967:48;20983:31;21011:2;20983:31;:::i;20967:48::-;21038:2;21031:5;21024:17;21078:7;21073:2;21068;21064;21060:11;21056:20;21053:33;21050:53;;;21099:1;21096;21089:12;21050:53;21112:54;21163:2;21158;21151:5;21147:14;21142:2;21138;21134:11;21112:54;:::i;:::-;21185:5;20561:635;-1:-1:-1;;;;;20561:635:1:o;23185:125::-;23225:4;23253:1;23250;23247:8;23244:34;;;23258:18;;:::i;:::-;-1:-1:-1;23295:9:1;;23185:125::o;23780:112::-;23812:1;23838;23828:35;;23843:18;;:::i;:::-;-1:-1:-1;23877:9:1;;23780:112::o;23897:251::-;23967:6;24020:2;24008:9;23999:7;23995:23;23991:32;23988:52;;;24036:1;24033;24026:12;23988:52;24068:9;24062:16;24087:31;24112:5;24087:31;:::i;24572:204::-;24610:3;24646:4;24643:1;24639:12;24678:4;24675:1;24671:12;24713:3;24707:4;24703:14;24698:3;24695:23;24692:49;;;24721:18;;:::i;:::-;24757:13;;24572:204;-1:-1:-1;;;24572:204:1:o;24781:512::-;24975:4;25004:42;25085:2;25077:6;25073:15;25062:9;25055:34;25137:2;25129:6;25125:15;25120:2;25109:9;25105:18;25098:43;;25177:6;25172:2;25161:9;25157:18;25150:34;25220:3;25215:2;25204:9;25200:18;25193:31;25241:46;25282:3;25271:9;25267:19;25259:6;25241:46;:::i;:::-;25233:54;24781:512;-1:-1:-1;;;;;;24781:512:1:o;25298:249::-;25367:6;25420:2;25408:9;25399:7;25395:23;25391:32;25388:52;;;25436:1;25433;25426:12;25388:52;25468:9;25462:16;25487:30;25511:5;25487:30;:::i;25552:184::-;25604:77;25601:1;25594:88;25701:4;25698:1;25691:15;25725:4;25722:1;25715:15;25741:157;25771:1;25805:4;25802:1;25798:12;25829:3;25819:37;;25836:18;;:::i;:::-;25888:3;25881:4;25878:1;25874:12;25870:22;25865:27;;;25741:157;;;;:::o

Swarm Source

ipfs://93865d75767cc07f4ce715c0ab0d4041a90f259faa5f72916c5b72cd46411bed
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.