ETH Price: $3,269.29 (+0.25%)
Gas: 2 Gwei

Token

Screw All The Bears Okay (SATBO)
 

Overview

Max Total Supply

0 SATBO

Holders

231

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 SATBO
0x8eb21a7c18e2b04e01b9f5e6131c185544a68f3a
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:
SATBO

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-25
*/

// File: blockchain/node_modules/@openzeppelin/contracts/utils/Counters.sol


// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: blockchain/node_modules/@openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

// File: blockchain/node_modules/@openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: blockchain/node_modules/@openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: blockchain/node_modules/@openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: blockchain/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: blockchain/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File: blockchain/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

// File: blockchain/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

// File: blockchain/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: blockchain/node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden 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 {
        _setApprovalForAll(_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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: blockchain/contracts/satbo.sol


pragma solidity 0.8.9;




contract SATBO is ERC721, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private currentTokenId;
    
    constructor(string memory _baseUri, string memory _contractUri) ERC721("Screw All The Bears Okay", "SATBO") {
        _baseTokenURI = _baseUri;
        _contractURI = _contractUri;
        _baseTokenURI_EXT = ".json";
    }

    uint256 public constant maxTokens = 5000;

    string internal _baseTokenURI;
    string internal _contractURI;
    string internal _baseTokenURI_EXT;

    uint256 public constant mintQuota = 5;
    mapping(address => uint) public addressesMinted;

    event mintedToken(address receiver, uint tokenId);
    
    function mintNFT(address recipient)
        public
        returns (uint256)
    {
        require(addressesMinted[msg.sender] < mintQuota, "You have reached your mint quota!");
        require(currentTokenId.current() < maxTokens, "Max supply reached - no more mints allowed!");
        currentTokenId.increment();
        uint256 newItemId = currentTokenId.current();
        addressesMinted[msg.sender]++; 

        _safeMint(recipient, newItemId);

        emit mintedToken(recipient, newItemId);
        return newItemId;
    }

    function tokenURI(uint _tokenId) public view override returns (string memory) {
        require(_tokenId <= currentTokenId.current(), "Token does not exist");
        return string(abi.encodePacked(_baseTokenURI, Strings.toString(_tokenId), _baseTokenURI_EXT));
    }

    function contractURI() public view returns (string memory) {
        return _contractURI;
    }

    function setBaseTokenUrl(string memory _url) public onlyOwner {
        _baseTokenURI = _url;
    }

    function setBaseTokenUrlExt(string memory _ext) public onlyOwner {
        _baseTokenURI_EXT = _ext;
    }

    function getTotalSupply()  public view returns (uint) {
        return currentTokenId.current();
    }

    function getAccountMints(address _address)  public view returns (uint) {
        return addressesMinted[_address];
    }

    /**
    * Override isApprovedForAll to auto-approve OS's proxy contract
    */
    function isApprovedForAll(
        address _owner,
        address _operator
    ) public override view returns (bool isOperator) {
      // if OpenSea's ERC721 Proxy Address is detected, auto-return true
      // for Polygon's Mumbai Mainnet, use 0x58807baD0B376efc12F5AD86aAc70E78ed67deaE
        if (_operator == address(0xff7Ca10aF37178BdD056628eF42fD7F799fAc77c)) {
            return true;
        }
        
        // otherwise, use the default ERC721.isApprovedForAll()
        return ERC721.isApprovedForAll(_owner, _operator);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"},{"internalType":"string","name":"_contractUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintedToken","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressesMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getAccountMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"mintNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintQuota","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_url","type":"string"}],"name":"setBaseTokenUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ext","type":"string"}],"name":"setBaseTokenUrlExt","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":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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"}]

60806040523480156200001157600080fd5b50604051620039ac380380620039ac83398181016040528101906200003791906200049a565b6040518060400160405280601881526020017f536372657720416c6c20546865204265617273204f6b617900000000000000008152506040518060400160405280600581526020017f534154424f0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb9291906200024d565b508060019080519060200190620000d49291906200024d565b505050620000f7620000eb6200017f60201b60201c565b6200018760201b60201c565b81600890805190602001906200010f9291906200024d565b508060099080519060200190620001289291906200024d565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a9080519060200190620001769291906200024d565b50505062000584565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025b906200054e565b90600052602060002090601f0160209004810192826200027f5760008555620002cb565b82601f106200029a57805160ff1916838001178555620002cb565b82800160010185558215620002cb579182015b82811115620002ca578251825591602001919060010190620002ad565b5b509050620002da9190620002de565b5090565b5b80821115620002f9576000816000905550600101620002df565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000366826200031b565b810181811067ffffffffffffffff821117156200038857620003876200032c565b5b80604052505050565b60006200039d620002fd565b9050620003ab82826200035b565b919050565b600067ffffffffffffffff821115620003ce57620003cd6200032c565b5b620003d9826200031b565b9050602081019050919050565b60005b8381101562000406578082015181840152602081019050620003e9565b8381111562000416576000848401525b50505050565b6000620004336200042d84620003b0565b62000391565b90508281526020810184848401111562000452576200045162000316565b5b6200045f848285620003e6565b509392505050565b600082601f8301126200047f576200047e62000311565b5b8151620004918482602086016200041c565b91505092915050565b60008060408385031215620004b457620004b362000307565b5b600083015167ffffffffffffffff811115620004d557620004d46200030c565b5b620004e38582860162000467565b925050602083015167ffffffffffffffff8111156200050757620005066200030c565b5b620005158582860162000467565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056757607f821691505b602082108114156200057e576200057d6200051f565b5b50919050565b61341880620005946000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063b88d4fde11610097578063e831574211610071578063e83157421461045c578063e8a3d4851461047a578063e985e9c514610498578063f2fde38b146104c857610173565b8063b88d4fde146103f2578063c4e41b221461040e578063c87b56dd1461042c57610173565b8063715018a6146103445780637157de4b1461034e5780638da5cb5b1461036a57806395d89b41146103885780639a6b671a146103a6578063a22cb465146103d657610173565b806327c6ff7c1161013057806327c6ff7c1461024c57806342842e0e14610268578063435a59a41461028457806354ba0f27146102b45780636352211e146102e457806370a082311461031457610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f65780632205ea7e1461021257806323b872dd14610230575b600080fd5b610192600480360381019061018d9190611feb565b6104e4565b60405161019f9190612033565b60405180910390f35b6101b06105c6565b6040516101bd91906120e7565b60405180910390f35b6101e060048036038101906101db919061213f565b610658565b6040516101ed91906121ad565b60405180910390f35b610210600480360381019061020b91906121f4565b6106dd565b005b61021a6107f5565b6040516102279190612243565b60405180910390f35b61024a6004803603810190610245919061225e565b6107fa565b005b610266600480360381019061026191906123e6565b61085a565b005b610282600480360381019061027d919061225e565b6108f0565b005b61029e6004803603810190610299919061242f565b610910565b6040516102ab9190612243565b60405180910390f35b6102ce60048036038101906102c9919061242f565b610928565b6040516102db9190612243565b60405180910390f35b6102fe60048036038101906102f9919061213f565b610ab2565b60405161030b91906121ad565b60405180910390f35b61032e6004803603810190610329919061242f565b610b64565b60405161033b9190612243565b60405180910390f35b61034c610c1c565b005b610368600480360381019061036391906123e6565b610ca4565b005b610372610d3a565b60405161037f91906121ad565b60405180910390f35b610390610d64565b60405161039d91906120e7565b60405180910390f35b6103c060048036038101906103bb919061242f565b610df6565b6040516103cd9190612243565b60405180910390f35b6103f060048036038101906103eb9190612488565b610e3f565b005b61040c60048036038101906104079190612569565b610e55565b005b610416610eb7565b6040516104239190612243565b60405180910390f35b6104466004803603810190610441919061213f565b610ec8565b60405161045391906120e7565b60405180910390f35b610464610f4b565b6040516104719190612243565b60405180910390f35b610482610f51565b60405161048f91906120e7565b60405180910390f35b6104b260048036038101906104ad91906125ec565b610fe3565b6040516104bf9190612033565b60405180910390f35b6104e260048036038101906104dd919061242f565b611049565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105af57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105bf57506105be82611141565b5b9050919050565b6060600080546105d59061265b565b80601f01602080910402602001604051908101604052809291908181526020018280546106019061265b565b801561064e5780601f106106235761010080835404028352916020019161064e565b820191906000526020600020905b81548152906001019060200180831161063157829003601f168201915b5050505050905090565b6000610663826111ab565b6106a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610699906126ff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106e882610ab2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075090612791565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610778611217565b73ffffffffffffffffffffffffffffffffffffffff1614806107a757506107a6816107a1611217565b610fe3565b5b6107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd90612823565b60405180910390fd5b6107f0838361121f565b505050565b600581565b61080b610805611217565b826112d8565b61084a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610841906128b5565b60405180910390fd5b6108558383836113b6565b505050565b610862611217565b73ffffffffffffffffffffffffffffffffffffffff16610880610d3a565b73ffffffffffffffffffffffffffffffffffffffff16146108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612921565b60405180910390fd5b80600a90805190602001906108ec929190611edc565b5050565b61090b83838360405180602001604052806000815250610e55565b505050565b600b6020528060005260406000206000915090505481565b60006005600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a3906129b3565b60405180910390fd5b6113886109b9600761161d565b106109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090612a45565b60405180910390fd5b610a03600761162b565b6000610a0f600761161d565b9050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610a6190612a94565b9190505550610a708382611641565b7f5b1201aa32a235a52b0eae39011241a0b5383ce31b40c541f7226a83af4cdbe78382604051610aa1929190612add565b60405180910390a180915050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290612b78565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90612c0a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c24611217565b73ffffffffffffffffffffffffffffffffffffffff16610c42610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90612921565b60405180910390fd5b610ca2600061165f565b565b610cac611217565b73ffffffffffffffffffffffffffffffffffffffff16610cca610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790612921565b60405180910390fd5b8060089080519060200190610d36929190611edc565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d739061265b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9f9061265b565b8015610dec5780601f10610dc157610100808354040283529160200191610dec565b820191906000526020600020905b815481529060010190602001808311610dcf57829003601f168201915b5050505050905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e51610e4a611217565b8383611725565b5050565b610e66610e60611217565b836112d8565b610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c906128b5565b60405180910390fd5b610eb184848484611892565b50505050565b6000610ec3600761161d565b905090565b6060610ed4600761161d565b821115610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90612c76565b60405180910390fd5b6008610f21836118ee565b600a604051602001610f3593929190612d66565b6040516020818303038152906040529050919050565b61138881565b606060098054610f609061265b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8c9061265b565b8015610fd95780601f10610fae57610100808354040283529160200191610fd9565b820191906000526020600020905b815481529060010190602001808311610fbc57829003601f168201915b5050505050905090565b600073ff7ca10af37178bdd056628ef42fd7f799fac77c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110365760019050611043565b6110408383611a4f565b90505b92915050565b611051611217565b73ffffffffffffffffffffffffffffffffffffffff1661106f610d3a565b73ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90612921565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612e09565b60405180910390fd5b61113e8161165f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661129283610ab2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112e3826111ab565b611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612e9b565b60405180910390fd5b600061132d83610ab2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061136f575061136e8185610fe3565b5b806113ad57508373ffffffffffffffffffffffffffffffffffffffff1661139584610658565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166113d682610ab2565b73ffffffffffffffffffffffffffffffffffffffff161461142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390612f2d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149390612fbf565b60405180910390fd5b6114a7838383611ae3565b6114b260008261121f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115029190612fdf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115599190613013565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611618838383611ae8565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61165b828260405180602001604052806000815250611aed565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906130b5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118859190612033565b60405180910390a3505050565b61189d8484846113b6565b6118a984848484611b48565b6118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613147565b60405180910390fd5b50505050565b60606000821415611936576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a4a565b600082905060005b6000821461196857808061195190612a94565b915050600a826119619190613196565b915061193e565b60008167ffffffffffffffff811115611984576119836122bb565b5b6040519080825280601f01601f1916602001820160405280156119b65781602001600182028036833780820191505090505b5090505b60008514611a43576001826119cf9190612fdf565b9150600a856119de91906131c7565b60306119ea9190613013565b60f81b818381518110611a00576119ff6131f8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a3c9190613196565b94506119ba565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b505050565b611af78383611cdf565b611b046000848484611b48565b611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90613147565b60405180910390fd5b505050565b6000611b698473ffffffffffffffffffffffffffffffffffffffff16611eb9565b15611cd2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b92611217565b8786866040518563ffffffff1660e01b8152600401611bb4949392919061327c565b602060405180830381600087803b158015611bce57600080fd5b505af1925050508015611bff57506040513d601f19601f82011682018060405250810190611bfc91906132dd565b60015b611c82573d8060008114611c2f576040519150601f19603f3d011682016040523d82523d6000602084013e611c34565b606091505b50600081511415611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190613147565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611cd7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690613356565b60405180910390fd5b611d58816111ab565b15611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f906133c2565b60405180910390fd5b611da460008383611ae3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df49190613013565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611eb560008383611ae8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611ee89061265b565b90600052602060002090601f016020900481019282611f0a5760008555611f51565b82601f10611f2357805160ff1916838001178555611f51565b82800160010185558215611f51579182015b82811115611f50578251825591602001919060010190611f35565b5b509050611f5e9190611f62565b5090565b5b80821115611f7b576000816000905550600101611f63565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611fc881611f93565b8114611fd357600080fd5b50565b600081359050611fe581611fbf565b92915050565b60006020828403121561200157612000611f89565b5b600061200f84828501611fd6565b91505092915050565b60008115159050919050565b61202d81612018565b82525050565b60006020820190506120486000830184612024565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561208857808201518184015260208101905061206d565b83811115612097576000848401525b50505050565b6000601f19601f8301169050919050565b60006120b98261204e565b6120c38185612059565b93506120d381856020860161206a565b6120dc8161209d565b840191505092915050565b6000602082019050818103600083015261210181846120ae565b905092915050565b6000819050919050565b61211c81612109565b811461212757600080fd5b50565b60008135905061213981612113565b92915050565b60006020828403121561215557612154611f89565b5b60006121638482850161212a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121978261216c565b9050919050565b6121a78161218c565b82525050565b60006020820190506121c2600083018461219e565b92915050565b6121d18161218c565b81146121dc57600080fd5b50565b6000813590506121ee816121c8565b92915050565b6000806040838503121561220b5761220a611f89565b5b6000612219858286016121df565b925050602061222a8582860161212a565b9150509250929050565b61223d81612109565b82525050565b60006020820190506122586000830184612234565b92915050565b60008060006060848603121561227757612276611f89565b5b6000612285868287016121df565b9350506020612296868287016121df565b92505060406122a78682870161212a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122f38261209d565b810181811067ffffffffffffffff82111715612312576123116122bb565b5b80604052505050565b6000612325611f7f565b905061233182826122ea565b919050565b600067ffffffffffffffff821115612351576123506122bb565b5b61235a8261209d565b9050602081019050919050565b82818337600083830152505050565b600061238961238484612336565b61231b565b9050828152602081018484840111156123a5576123a46122b6565b5b6123b0848285612367565b509392505050565b600082601f8301126123cd576123cc6122b1565b5b81356123dd848260208601612376565b91505092915050565b6000602082840312156123fc576123fb611f89565b5b600082013567ffffffffffffffff81111561241a57612419611f8e565b5b612426848285016123b8565b91505092915050565b60006020828403121561244557612444611f89565b5b6000612453848285016121df565b91505092915050565b61246581612018565b811461247057600080fd5b50565b6000813590506124828161245c565b92915050565b6000806040838503121561249f5761249e611f89565b5b60006124ad858286016121df565b92505060206124be85828601612473565b9150509250929050565b600067ffffffffffffffff8211156124e3576124e26122bb565b5b6124ec8261209d565b9050602081019050919050565b600061250c612507846124c8565b61231b565b905082815260208101848484011115612528576125276122b6565b5b612533848285612367565b509392505050565b600082601f8301126125505761254f6122b1565b5b81356125608482602086016124f9565b91505092915050565b6000806000806080858703121561258357612582611f89565b5b6000612591878288016121df565b94505060206125a2878288016121df565b93505060406125b38782880161212a565b925050606085013567ffffffffffffffff8111156125d4576125d3611f8e565b5b6125e08782880161253b565b91505092959194509250565b6000806040838503121561260357612602611f89565b5b6000612611858286016121df565b9250506020612622858286016121df565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061267357607f821691505b602082108114156126875761268661262c565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006126e9602c83612059565b91506126f48261268d565b604082019050919050565b60006020820190508181036000830152612718816126dc565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061277b602183612059565b91506127868261271f565b604082019050919050565b600060208201905081810360008301526127aa8161276e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061280d603883612059565b9150612818826127b1565b604082019050919050565b6000602082019050818103600083015261283c81612800565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061289f603183612059565b91506128aa82612843565b604082019050919050565b600060208201905081810360008301526128ce81612892565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061290b602083612059565b9150612916826128d5565b602082019050919050565b6000602082019050818103600083015261293a816128fe565b9050919050565b7f596f752068617665207265616368656420796f7572206d696e742071756f746160008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b600061299d602183612059565b91506129a882612941565b604082019050919050565b600060208201905081810360008301526129cc81612990565b9050919050565b7f4d617820737570706c792072656163686564202d206e6f206d6f7265206d696e60008201527f747320616c6c6f77656421000000000000000000000000000000000000000000602082015250565b6000612a2f602b83612059565b9150612a3a826129d3565b604082019050919050565b60006020820190508181036000830152612a5e81612a22565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a9f82612109565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ad257612ad1612a65565b5b600182019050919050565b6000604082019050612af2600083018561219e565b612aff6020830184612234565b9392505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612b62602983612059565b9150612b6d82612b06565b604082019050919050565b60006020820190508181036000830152612b9181612b55565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612bf4602a83612059565b9150612bff82612b98565b604082019050919050565b60006020820190508181036000830152612c2381612be7565b9050919050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b6000612c60601483612059565b9150612c6b82612c2a565b602082019050919050565b60006020820190508181036000830152612c8f81612c53565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612cc38161265b565b612ccd8186612c96565b94506001821660008114612ce85760018114612cf957612d2c565b60ff19831686528186019350612d2c565b612d0285612ca1565b60005b83811015612d2457815481890152600182019150602081019050612d05565b838801955050505b50505092915050565b6000612d408261204e565b612d4a8185612c96565b9350612d5a81856020860161206a565b80840191505092915050565b6000612d728286612cb6565b9150612d7e8285612d35565b9150612d8a8284612cb6565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612df3602683612059565b9150612dfe82612d97565b604082019050919050565b60006020820190508181036000830152612e2281612de6565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612e85602c83612059565b9150612e9082612e29565b604082019050919050565b60006020820190508181036000830152612eb481612e78565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612f17602583612059565b9150612f2282612ebb565b604082019050919050565b60006020820190508181036000830152612f4681612f0a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fa9602483612059565b9150612fb482612f4d565b604082019050919050565b60006020820190508181036000830152612fd881612f9c565b9050919050565b6000612fea82612109565b9150612ff583612109565b92508282101561300857613007612a65565b5b828203905092915050565b600061301e82612109565b915061302983612109565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561305e5761305d612a65565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061309f601983612059565b91506130aa82613069565b602082019050919050565b600060208201905081810360008301526130ce81613092565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613131603283612059565b915061313c826130d5565b604082019050919050565b6000602082019050818103600083015261316081613124565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131a182612109565b91506131ac83612109565b9250826131bc576131bb613167565b5b828204905092915050565b60006131d282612109565b91506131dd83612109565b9250826131ed576131ec613167565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061324e82613227565b6132588185613232565b935061326881856020860161206a565b6132718161209d565b840191505092915050565b6000608082019050613291600083018761219e565b61329e602083018661219e565b6132ab6040830185612234565b81810360608301526132bd8184613243565b905095945050505050565b6000815190506132d781611fbf565b92915050565b6000602082840312156132f3576132f2611f89565b5b6000613301848285016132c8565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613340602083612059565b915061334b8261330a565b602082019050919050565b6000602082019050818103600083015261336f81613333565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006133ac601c83612059565b91506133b782613376565b602082019050919050565b600060208201905081810360008301526133db8161339f565b905091905056fea2646970667358221220ccccf72d46f8f64d4c95427832856adafd82c9fa3f5bfa19fd06d9bf7102c89664736f6c63430008090033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f626166796265696435656a327a646d6e6a32683779653261646c66626d6b75716665337a666e667264776f6e34377777787a7567726136633275612e697066732e6e667473746f726167652e6c696e6b2f00000000000000000000000000000000000000000000000000000000000000000000000000005868747470733a2f2f6261666b72656968706f717a6d7836686661643262773536653376356d6633326776763335687133656d6d626669796f76737532767977347635692e697066732e6e667473746f726167652e6c696e6b0000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063b88d4fde11610097578063e831574211610071578063e83157421461045c578063e8a3d4851461047a578063e985e9c514610498578063f2fde38b146104c857610173565b8063b88d4fde146103f2578063c4e41b221461040e578063c87b56dd1461042c57610173565b8063715018a6146103445780637157de4b1461034e5780638da5cb5b1461036a57806395d89b41146103885780639a6b671a146103a6578063a22cb465146103d657610173565b806327c6ff7c1161013057806327c6ff7c1461024c57806342842e0e14610268578063435a59a41461028457806354ba0f27146102b45780636352211e146102e457806370a082311461031457610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f65780632205ea7e1461021257806323b872dd14610230575b600080fd5b610192600480360381019061018d9190611feb565b6104e4565b60405161019f9190612033565b60405180910390f35b6101b06105c6565b6040516101bd91906120e7565b60405180910390f35b6101e060048036038101906101db919061213f565b610658565b6040516101ed91906121ad565b60405180910390f35b610210600480360381019061020b91906121f4565b6106dd565b005b61021a6107f5565b6040516102279190612243565b60405180910390f35b61024a6004803603810190610245919061225e565b6107fa565b005b610266600480360381019061026191906123e6565b61085a565b005b610282600480360381019061027d919061225e565b6108f0565b005b61029e6004803603810190610299919061242f565b610910565b6040516102ab9190612243565b60405180910390f35b6102ce60048036038101906102c9919061242f565b610928565b6040516102db9190612243565b60405180910390f35b6102fe60048036038101906102f9919061213f565b610ab2565b60405161030b91906121ad565b60405180910390f35b61032e6004803603810190610329919061242f565b610b64565b60405161033b9190612243565b60405180910390f35b61034c610c1c565b005b610368600480360381019061036391906123e6565b610ca4565b005b610372610d3a565b60405161037f91906121ad565b60405180910390f35b610390610d64565b60405161039d91906120e7565b60405180910390f35b6103c060048036038101906103bb919061242f565b610df6565b6040516103cd9190612243565b60405180910390f35b6103f060048036038101906103eb9190612488565b610e3f565b005b61040c60048036038101906104079190612569565b610e55565b005b610416610eb7565b6040516104239190612243565b60405180910390f35b6104466004803603810190610441919061213f565b610ec8565b60405161045391906120e7565b60405180910390f35b610464610f4b565b6040516104719190612243565b60405180910390f35b610482610f51565b60405161048f91906120e7565b60405180910390f35b6104b260048036038101906104ad91906125ec565b610fe3565b6040516104bf9190612033565b60405180910390f35b6104e260048036038101906104dd919061242f565b611049565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105af57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105bf57506105be82611141565b5b9050919050565b6060600080546105d59061265b565b80601f01602080910402602001604051908101604052809291908181526020018280546106019061265b565b801561064e5780601f106106235761010080835404028352916020019161064e565b820191906000526020600020905b81548152906001019060200180831161063157829003601f168201915b5050505050905090565b6000610663826111ab565b6106a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610699906126ff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106e882610ab2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075090612791565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610778611217565b73ffffffffffffffffffffffffffffffffffffffff1614806107a757506107a6816107a1611217565b610fe3565b5b6107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd90612823565b60405180910390fd5b6107f0838361121f565b505050565b600581565b61080b610805611217565b826112d8565b61084a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610841906128b5565b60405180910390fd5b6108558383836113b6565b505050565b610862611217565b73ffffffffffffffffffffffffffffffffffffffff16610880610d3a565b73ffffffffffffffffffffffffffffffffffffffff16146108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612921565b60405180910390fd5b80600a90805190602001906108ec929190611edc565b5050565b61090b83838360405180602001604052806000815250610e55565b505050565b600b6020528060005260406000206000915090505481565b60006005600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a3906129b3565b60405180910390fd5b6113886109b9600761161d565b106109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090612a45565b60405180910390fd5b610a03600761162b565b6000610a0f600761161d565b9050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610a6190612a94565b9190505550610a708382611641565b7f5b1201aa32a235a52b0eae39011241a0b5383ce31b40c541f7226a83af4cdbe78382604051610aa1929190612add565b60405180910390a180915050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290612b78565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90612c0a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c24611217565b73ffffffffffffffffffffffffffffffffffffffff16610c42610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90612921565b60405180910390fd5b610ca2600061165f565b565b610cac611217565b73ffffffffffffffffffffffffffffffffffffffff16610cca610d3a565b73ffffffffffffffffffffffffffffffffffffffff1614610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790612921565b60405180910390fd5b8060089080519060200190610d36929190611edc565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d739061265b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9f9061265b565b8015610dec5780601f10610dc157610100808354040283529160200191610dec565b820191906000526020600020905b815481529060010190602001808311610dcf57829003601f168201915b5050505050905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e51610e4a611217565b8383611725565b5050565b610e66610e60611217565b836112d8565b610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c906128b5565b60405180910390fd5b610eb184848484611892565b50505050565b6000610ec3600761161d565b905090565b6060610ed4600761161d565b821115610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90612c76565b60405180910390fd5b6008610f21836118ee565b600a604051602001610f3593929190612d66565b6040516020818303038152906040529050919050565b61138881565b606060098054610f609061265b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8c9061265b565b8015610fd95780601f10610fae57610100808354040283529160200191610fd9565b820191906000526020600020905b815481529060010190602001808311610fbc57829003601f168201915b5050505050905090565b600073ff7ca10af37178bdd056628ef42fd7f799fac77c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110365760019050611043565b6110408383611a4f565b90505b92915050565b611051611217565b73ffffffffffffffffffffffffffffffffffffffff1661106f610d3a565b73ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90612921565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612e09565b60405180910390fd5b61113e8161165f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661129283610ab2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112e3826111ab565b611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612e9b565b60405180910390fd5b600061132d83610ab2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061136f575061136e8185610fe3565b5b806113ad57508373ffffffffffffffffffffffffffffffffffffffff1661139584610658565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166113d682610ab2565b73ffffffffffffffffffffffffffffffffffffffff161461142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390612f2d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149390612fbf565b60405180910390fd5b6114a7838383611ae3565b6114b260008261121f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115029190612fdf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115599190613013565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611618838383611ae8565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61165b828260405180602001604052806000815250611aed565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906130b5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118859190612033565b60405180910390a3505050565b61189d8484846113b6565b6118a984848484611b48565b6118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613147565b60405180910390fd5b50505050565b60606000821415611936576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a4a565b600082905060005b6000821461196857808061195190612a94565b915050600a826119619190613196565b915061193e565b60008167ffffffffffffffff811115611984576119836122bb565b5b6040519080825280601f01601f1916602001820160405280156119b65781602001600182028036833780820191505090505b5090505b60008514611a43576001826119cf9190612fdf565b9150600a856119de91906131c7565b60306119ea9190613013565b60f81b818381518110611a00576119ff6131f8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a3c9190613196565b94506119ba565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b505050565b611af78383611cdf565b611b046000848484611b48565b611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90613147565b60405180910390fd5b505050565b6000611b698473ffffffffffffffffffffffffffffffffffffffff16611eb9565b15611cd2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b92611217565b8786866040518563ffffffff1660e01b8152600401611bb4949392919061327c565b602060405180830381600087803b158015611bce57600080fd5b505af1925050508015611bff57506040513d601f19601f82011682018060405250810190611bfc91906132dd565b60015b611c82573d8060008114611c2f576040519150601f19603f3d011682016040523d82523d6000602084013e611c34565b606091505b50600081511415611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190613147565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611cd7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690613356565b60405180910390fd5b611d58816111ab565b15611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f906133c2565b60405180910390fd5b611da460008383611ae3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df49190613013565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611eb560008383611ae8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611ee89061265b565b90600052602060002090601f016020900481019282611f0a5760008555611f51565b82601f10611f2357805160ff1916838001178555611f51565b82800160010185558215611f51579182015b82811115611f50578251825591602001919060010190611f35565b5b509050611f5e9190611f62565b5090565b5b80821115611f7b576000816000905550600101611f63565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611fc881611f93565b8114611fd357600080fd5b50565b600081359050611fe581611fbf565b92915050565b60006020828403121561200157612000611f89565b5b600061200f84828501611fd6565b91505092915050565b60008115159050919050565b61202d81612018565b82525050565b60006020820190506120486000830184612024565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561208857808201518184015260208101905061206d565b83811115612097576000848401525b50505050565b6000601f19601f8301169050919050565b60006120b98261204e565b6120c38185612059565b93506120d381856020860161206a565b6120dc8161209d565b840191505092915050565b6000602082019050818103600083015261210181846120ae565b905092915050565b6000819050919050565b61211c81612109565b811461212757600080fd5b50565b60008135905061213981612113565b92915050565b60006020828403121561215557612154611f89565b5b60006121638482850161212a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121978261216c565b9050919050565b6121a78161218c565b82525050565b60006020820190506121c2600083018461219e565b92915050565b6121d18161218c565b81146121dc57600080fd5b50565b6000813590506121ee816121c8565b92915050565b6000806040838503121561220b5761220a611f89565b5b6000612219858286016121df565b925050602061222a8582860161212a565b9150509250929050565b61223d81612109565b82525050565b60006020820190506122586000830184612234565b92915050565b60008060006060848603121561227757612276611f89565b5b6000612285868287016121df565b9350506020612296868287016121df565b92505060406122a78682870161212a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122f38261209d565b810181811067ffffffffffffffff82111715612312576123116122bb565b5b80604052505050565b6000612325611f7f565b905061233182826122ea565b919050565b600067ffffffffffffffff821115612351576123506122bb565b5b61235a8261209d565b9050602081019050919050565b82818337600083830152505050565b600061238961238484612336565b61231b565b9050828152602081018484840111156123a5576123a46122b6565b5b6123b0848285612367565b509392505050565b600082601f8301126123cd576123cc6122b1565b5b81356123dd848260208601612376565b91505092915050565b6000602082840312156123fc576123fb611f89565b5b600082013567ffffffffffffffff81111561241a57612419611f8e565b5b612426848285016123b8565b91505092915050565b60006020828403121561244557612444611f89565b5b6000612453848285016121df565b91505092915050565b61246581612018565b811461247057600080fd5b50565b6000813590506124828161245c565b92915050565b6000806040838503121561249f5761249e611f89565b5b60006124ad858286016121df565b92505060206124be85828601612473565b9150509250929050565b600067ffffffffffffffff8211156124e3576124e26122bb565b5b6124ec8261209d565b9050602081019050919050565b600061250c612507846124c8565b61231b565b905082815260208101848484011115612528576125276122b6565b5b612533848285612367565b509392505050565b600082601f8301126125505761254f6122b1565b5b81356125608482602086016124f9565b91505092915050565b6000806000806080858703121561258357612582611f89565b5b6000612591878288016121df565b94505060206125a2878288016121df565b93505060406125b38782880161212a565b925050606085013567ffffffffffffffff8111156125d4576125d3611f8e565b5b6125e08782880161253b565b91505092959194509250565b6000806040838503121561260357612602611f89565b5b6000612611858286016121df565b9250506020612622858286016121df565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061267357607f821691505b602082108114156126875761268661262c565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006126e9602c83612059565b91506126f48261268d565b604082019050919050565b60006020820190508181036000830152612718816126dc565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061277b602183612059565b91506127868261271f565b604082019050919050565b600060208201905081810360008301526127aa8161276e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061280d603883612059565b9150612818826127b1565b604082019050919050565b6000602082019050818103600083015261283c81612800565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061289f603183612059565b91506128aa82612843565b604082019050919050565b600060208201905081810360008301526128ce81612892565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061290b602083612059565b9150612916826128d5565b602082019050919050565b6000602082019050818103600083015261293a816128fe565b9050919050565b7f596f752068617665207265616368656420796f7572206d696e742071756f746160008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b600061299d602183612059565b91506129a882612941565b604082019050919050565b600060208201905081810360008301526129cc81612990565b9050919050565b7f4d617820737570706c792072656163686564202d206e6f206d6f7265206d696e60008201527f747320616c6c6f77656421000000000000000000000000000000000000000000602082015250565b6000612a2f602b83612059565b9150612a3a826129d3565b604082019050919050565b60006020820190508181036000830152612a5e81612a22565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a9f82612109565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ad257612ad1612a65565b5b600182019050919050565b6000604082019050612af2600083018561219e565b612aff6020830184612234565b9392505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612b62602983612059565b9150612b6d82612b06565b604082019050919050565b60006020820190508181036000830152612b9181612b55565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612bf4602a83612059565b9150612bff82612b98565b604082019050919050565b60006020820190508181036000830152612c2381612be7565b9050919050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b6000612c60601483612059565b9150612c6b82612c2a565b602082019050919050565b60006020820190508181036000830152612c8f81612c53565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612cc38161265b565b612ccd8186612c96565b94506001821660008114612ce85760018114612cf957612d2c565b60ff19831686528186019350612d2c565b612d0285612ca1565b60005b83811015612d2457815481890152600182019150602081019050612d05565b838801955050505b50505092915050565b6000612d408261204e565b612d4a8185612c96565b9350612d5a81856020860161206a565b80840191505092915050565b6000612d728286612cb6565b9150612d7e8285612d35565b9150612d8a8284612cb6565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612df3602683612059565b9150612dfe82612d97565b604082019050919050565b60006020820190508181036000830152612e2281612de6565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612e85602c83612059565b9150612e9082612e29565b604082019050919050565b60006020820190508181036000830152612eb481612e78565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612f17602583612059565b9150612f2282612ebb565b604082019050919050565b60006020820190508181036000830152612f4681612f0a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fa9602483612059565b9150612fb482612f4d565b604082019050919050565b60006020820190508181036000830152612fd881612f9c565b9050919050565b6000612fea82612109565b9150612ff583612109565b92508282101561300857613007612a65565b5b828203905092915050565b600061301e82612109565b915061302983612109565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561305e5761305d612a65565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061309f601983612059565b91506130aa82613069565b602082019050919050565b600060208201905081810360008301526130ce81613092565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613131603283612059565b915061313c826130d5565b604082019050919050565b6000602082019050818103600083015261316081613124565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131a182612109565b91506131ac83612109565b9250826131bc576131bb613167565b5b828204905092915050565b60006131d282612109565b91506131dd83612109565b9250826131ed576131ec613167565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061324e82613227565b6132588185613232565b935061326881856020860161206a565b6132718161209d565b840191505092915050565b6000608082019050613291600083018761219e565b61329e602083018661219e565b6132ab6040830185612234565b81810360608301526132bd8184613243565b905095945050505050565b6000815190506132d781611fbf565b92915050565b6000602082840312156132f3576132f2611f89565b5b6000613301848285016132c8565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613340602083612059565b915061334b8261330a565b602082019050919050565b6000602082019050818103600083015261336f81613333565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006133ac601c83612059565b91506133b782613376565b602082019050919050565b600060208201905081810360008301526133db8161339f565b905091905056fea2646970667358221220ccccf72d46f8f64d4c95427832856adafd82c9fa3f5bfa19fd06d9bf7102c89664736f6c63430008090033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f626166796265696435656a327a646d6e6a32683779653261646c66626d6b75716665337a666e667264776f6e34377777787a7567726136633275612e697066732e6e667473746f726167652e6c696e6b2f00000000000000000000000000000000000000000000000000000000000000000000000000005868747470733a2f2f6261666b72656968706f717a6d7836686661643262773536653376356d6633326776763335687133656d6d626669796f76737532767977347635692e697066732e6e667473746f726167652e6c696e6b0000000000000000

-----Decoded View---------------
Arg [0] : _baseUri (string): https://bafybeid5ej2zdmnj2h7ye2adlfbmkuqfe3zfnfrdwon47wwxzugra6c2ua.ipfs.nftstorage.link/
Arg [1] : _contractUri (string): https://bafkreihpoqzmx6hfad2bw56e3v5mf32gvv35hq3emmbfiyovsu2vyw4v5i.ipfs.nftstorage.link

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [3] : 68747470733a2f2f626166796265696435656a327a646d6e6a32683779653261
Arg [4] : 646c66626d6b75716665337a666e667264776f6e34377777787a756772613663
Arg [5] : 3275612e697066732e6e667473746f726167652e6c696e6b2f00000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000058
Arg [7] : 68747470733a2f2f6261666b72656968706f717a6d7836686661643262773536
Arg [8] : 653376356d6633326776763335687133656d6d626669796f7673753276797734
Arg [9] : 7635692e697066732e6e667473746f726167652e6c696e6b0000000000000000


Deployed Bytecode Sourcemap

39068:2742:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25876:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26821:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28381:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27904:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39600:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29131:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40808:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29541:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39644:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39762:546;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26515:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26245:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6291:103;;;:::i;:::-;;40699:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5640:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26990:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41036:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28674:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29797:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40924:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40316:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39438:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40594:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41252:555;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6549:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25876:305;25978:4;26030:25;26015:40;;;:11;:40;;;;:105;;;;26087:33;26072:48;;;:11;:48;;;;26015:105;:158;;;;26137:36;26161:11;26137:23;:36::i;:::-;26015:158;25995:178;;25876:305;;;:::o;26821:100::-;26875:13;26908:5;26901:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26821:100;:::o;28381:221::-;28457:7;28485:16;28493:7;28485;:16::i;:::-;28477:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28570:15;:24;28586:7;28570:24;;;;;;;;;;;;;;;;;;;;;28563:31;;28381:221;;;:::o;27904:411::-;27985:13;28001:23;28016:7;28001:14;:23::i;:::-;27985:39;;28049:5;28043:11;;:2;:11;;;;28035:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28143:5;28127:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28152:37;28169:5;28176:12;:10;:12::i;:::-;28152:16;:37::i;:::-;28127:62;28105:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28286:21;28295:2;28299:7;28286:8;:21::i;:::-;27974:341;27904:411;;:::o;39600:37::-;39636:1;39600:37;:::o;29131:339::-;29326:41;29345:12;:10;:12::i;:::-;29359:7;29326:18;:41::i;:::-;29318:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29434:28;29444:4;29450:2;29454:7;29434:9;:28::i;:::-;29131:339;;;:::o;40808:108::-;5871:12;:10;:12::i;:::-;5860:23;;:7;:5;:7::i;:::-;:23;;;5852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40904:4:::1;40884:17;:24;;;;;;;;;;;;:::i;:::-;;40808:108:::0;:::o;29541:185::-;29679:39;29696:4;29702:2;29706:7;29679:39;;;;;;;;;;;;:16;:39::i;:::-;29541:185;;;:::o;39644:47::-;;;;;;;;;;;;;;;;;:::o;39762:546::-;39832:7;39636:1;39865:15;:27;39881:10;39865:27;;;;;;;;;;;;;;;;:39;39857:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39474:4;39961:24;:14;:22;:24::i;:::-;:36;39953:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;40056:26;:14;:24;:26::i;:::-;40093:17;40113:24;:14;:22;:24::i;:::-;40093:44;;40148:15;:27;40164:10;40148:27;;;;;;;;;;;;;;;;:29;;;;;;;;;:::i;:::-;;;;;;40191:31;40201:9;40212;40191;:31::i;:::-;40240:33;40252:9;40263;40240:33;;;;;;;:::i;:::-;;;;;;;;40291:9;40284:16;;;39762:546;;;:::o;26515:239::-;26587:7;26607:13;26623:7;:16;26631:7;26623:16;;;;;;;;;;;;;;;;;;;;;26607:32;;26675:1;26658:19;;:5;:19;;;;26650:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26741:5;26734:12;;;26515:239;;;:::o;26245:208::-;26317:7;26362:1;26345:19;;:5;:19;;;;26337:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26429:9;:16;26439:5;26429:16;;;;;;;;;;;;;;;;26422:23;;26245:208;;;:::o;6291:103::-;5871:12;:10;:12::i;:::-;5860:23;;:7;:5;:7::i;:::-;:23;;;5852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6356:30:::1;6383:1;6356:18;:30::i;:::-;6291:103::o:0;40699:101::-;5871:12;:10;:12::i;:::-;5860:23;;:7;:5;:7::i;:::-;:23;;;5852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40788:4:::1;40772:13;:20;;;;;;;;;;;;:::i;:::-;;40699:101:::0;:::o;5640:87::-;5686:7;5713:6;;;;;;;;;;;5706:13;;5640:87;:::o;26990:104::-;27046:13;27079:7;27072:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26990:104;:::o;41036:122::-;41101:4;41125:15;:25;41141:8;41125:25;;;;;;;;;;;;;;;;41118:32;;41036:122;;;:::o;28674:155::-;28769:52;28788:12;:10;:12::i;:::-;28802:8;28812;28769:18;:52::i;:::-;28674:155;;:::o;29797:328::-;29972:41;29991:12;:10;:12::i;:::-;30005:7;29972:18;:41::i;:::-;29964:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30078:39;30092:4;30098:2;30102:7;30111:5;30078:13;:39::i;:::-;29797:328;;;;:::o;40924:104::-;40972:4;40996:24;:14;:22;:24::i;:::-;40989:31;;40924:104;:::o;40316:270::-;40379:13;40425:24;:14;:22;:24::i;:::-;40413:8;:36;;40405:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40516:13;40531:26;40548:8;40531:16;:26::i;:::-;40559:17;40499:78;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40485:93;;40316:270;;;:::o;39438:40::-;39474:4;39438:40;:::o;40594:97::-;40638:13;40671:12;40664:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40594:97;:::o;41252:555::-;41368:15;41582:42;41561:64;;:9;:64;;;41557:108;;;41649:4;41642:11;;;;41557:108;41757:42;41781:6;41789:9;41757:23;:42::i;:::-;41750:49;;41252:555;;;;;:::o;6549:201::-;5871:12;:10;:12::i;:::-;5860:23;;:7;:5;:7::i;:::-;:23;;;5852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6658:1:::1;6638:22;;:8;:22;;;;6630:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6714:28;6733:8;6714:18;:28::i;:::-;6549:201:::0;:::o;18543:157::-;18628:4;18667:25;18652:40;;;:11;:40;;;;18645:47;;18543:157;;;:::o;31635:127::-;31700:4;31752:1;31724:30;;:7;:16;31732:7;31724:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31717:37;;31635:127;;;:::o;4340:98::-;4393:7;4420:10;4413:17;;4340:98;:::o;35781:174::-;35883:2;35856:15;:24;35872:7;35856:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35939:7;35935:2;35901:46;;35910:23;35925:7;35910:14;:23::i;:::-;35901:46;;;;;;;;;;;;35781:174;;:::o;31929:348::-;32022:4;32047:16;32055:7;32047;:16::i;:::-;32039:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32123:13;32139:23;32154:7;32139:14;:23::i;:::-;32123:39;;32192:5;32181:16;;:7;:16;;;:52;;;;32201:32;32218:5;32225:7;32201:16;:32::i;:::-;32181:52;:87;;;;32261:7;32237:31;;:20;32249:7;32237:11;:20::i;:::-;:31;;;32181:87;32173:96;;;31929:348;;;;:::o;35038:625::-;35197:4;35170:31;;:23;35185:7;35170:14;:23::i;:::-;:31;;;35162:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35276:1;35262:16;;:2;:16;;;;35254:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35332:39;35353:4;35359:2;35363:7;35332:20;:39::i;:::-;35436:29;35453:1;35457:7;35436:8;:29::i;:::-;35497:1;35478:9;:15;35488:4;35478:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35526:1;35509:9;:13;35519:2;35509:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35557:2;35538:7;:16;35546:7;35538:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35596:7;35592:2;35577:27;;35586:4;35577:27;;;;;;;;;;;;35617:38;35637:4;35643:2;35647:7;35617:19;:38::i;:::-;35038:625;;;:::o;896:114::-;961:7;988;:14;;;981:21;;896:114;;;:::o;1018:127::-;1125:1;1107:7;:14;;;:19;;;;;;;;;;;1018:127;:::o;32619:110::-;32695:26;32705:2;32709:7;32695:26;;;;;;;;;;;;:9;:26::i;:::-;32619:110;;:::o;6910:191::-;6984:16;7003:6;;;;;;;;;;;6984:25;;7029:8;7020:6;;:17;;;;;;;;;;;;;;;;;;7084:8;7053:40;;7074:8;7053:40;;;;;;;;;;;;6973:128;6910:191;:::o;36097:315::-;36252:8;36243:17;;:5;:17;;;;36235:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36339:8;36301:18;:25;36320:5;36301:25;;;;;;;;;;;;;;;:35;36327:8;36301:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36385:8;36363:41;;36378:5;36363:41;;;36395:8;36363:41;;;;;;:::i;:::-;;;;;;;;36097:315;;;:::o;31007:::-;31164:28;31174:4;31180:2;31184:7;31164:9;:28::i;:::-;31211:48;31234:4;31240:2;31244:7;31253:5;31211:22;:48::i;:::-;31203:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31007:315;;;;:::o;1878:723::-;1934:13;2164:1;2155:5;:10;2151:53;;;2182:10;;;;;;;;;;;;;;;;;;;;;2151:53;2214:12;2229:5;2214:20;;2245:14;2270:78;2285:1;2277:4;:9;2270:78;;2303:8;;;;;:::i;:::-;;;;2334:2;2326:10;;;;;:::i;:::-;;;2270:78;;;2358:19;2390:6;2380:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2358:39;;2408:154;2424:1;2415:5;:10;2408:154;;2452:1;2442:11;;;;;:::i;:::-;;;2519:2;2511:5;:10;;;;:::i;:::-;2498:2;:24;;;;:::i;:::-;2485:39;;2468:6;2475;2468:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2548:2;2539:11;;;;;:::i;:::-;;;2408:154;;;2586:6;2572:21;;;;;1878:723;;;;:::o;28900:164::-;28997:4;29021:18;:25;29040:5;29021:25;;;;;;;;;;;;;;;:35;29047:8;29021:35;;;;;;;;;;;;;;;;;;;;;;;;;29014:42;;28900:164;;;;:::o;38348:126::-;;;;:::o;38859:125::-;;;;:::o;32956:321::-;33086:18;33092:2;33096:7;33086:5;:18::i;:::-;33137:54;33168:1;33172:2;33176:7;33185:5;33137:22;:54::i;:::-;33115:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32956:321;;;:::o;36977:799::-;37132:4;37153:15;:2;:13;;;:15::i;:::-;37149:620;;;37205:2;37189:36;;;37226:12;:10;:12::i;:::-;37240:4;37246:7;37255:5;37189:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37185:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37448:1;37431:6;:13;:18;37427:272;;;37474:60;;;;;;;;;;:::i;:::-;;;;;;;;37427:272;37649:6;37643:13;37634:6;37630:2;37626:15;37619:38;37185:529;37322:41;;;37312:51;;;:6;:51;;;;37305:58;;;;;37149:620;37753:4;37746:11;;36977:799;;;;;;;:::o;33613:439::-;33707:1;33693:16;;:2;:16;;;;33685:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33766:16;33774:7;33766;:16::i;:::-;33765:17;33757:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33828:45;33857:1;33861:2;33865:7;33828:20;:45::i;:::-;33903:1;33886:9;:13;33896:2;33886:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33934:2;33915:7;:16;33923:7;33915:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33979:7;33975:2;33954:33;;33971:1;33954:33;;;;;;;;;;;;34000:44;34028:1;34032:2;34036:7;34000:19;:44::i;:::-;33613:439;;:::o;8365:326::-;8425:4;8682:1;8660:7;:19;;;:23;8653:30;;8365:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:307::-;9667:4;9757:18;9749:6;9746:30;9743:56;;;9779:18;;:::i;:::-;9743:56;9817:29;9839:6;9817:29;:::i;:::-;9809:37;;9901:4;9895;9891:15;9883:23;;9606:307;;;:::o;9919:410::-;9996:5;10021:65;10037:48;10078:6;10037:48;:::i;:::-;10021:65;:::i;:::-;10012:74;;10109:6;10102:5;10095:21;10147:4;10140:5;10136:16;10185:3;10176:6;10171:3;10167:16;10164:25;10161:112;;;10192:79;;:::i;:::-;10161:112;10282:41;10316:6;10311:3;10306;10282:41;:::i;:::-;10002:327;9919:410;;;;;:::o;10348:338::-;10403:5;10452:3;10445:4;10437:6;10433:17;10429:27;10419:122;;10460:79;;:::i;:::-;10419:122;10577:6;10564:20;10602:78;10676:3;10668:6;10661:4;10653:6;10649:17;10602:78;:::i;:::-;10593:87;;10409:277;10348:338;;;;:::o;10692:943::-;10787:6;10795;10803;10811;10860:3;10848:9;10839:7;10835:23;10831:33;10828:120;;;10867:79;;:::i;:::-;10828:120;10987:1;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10958:117;11114:2;11140:53;11185:7;11176:6;11165:9;11161:22;11140:53;:::i;:::-;11130:63;;11085:118;11242:2;11268:53;11313:7;11304:6;11293:9;11289:22;11268:53;:::i;:::-;11258:63;;11213:118;11398:2;11387:9;11383:18;11370:32;11429:18;11421:6;11418:30;11415:117;;;11451:79;;:::i;:::-;11415:117;11556:62;11610:7;11601:6;11590:9;11586:22;11556:62;:::i;:::-;11546:72;;11341:287;10692:943;;;;;;;:::o;11641:474::-;11709:6;11717;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11892:1;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11863:117;12019:2;12045:53;12090:7;12081:6;12070:9;12066:22;12045:53;:::i;:::-;12035:63;;11990:118;11641:474;;;;;:::o;12121:180::-;12169:77;12166:1;12159:88;12266:4;12263:1;12256:15;12290:4;12287:1;12280:15;12307:320;12351:6;12388:1;12382:4;12378:12;12368:22;;12435:1;12429:4;12425:12;12456:18;12446:81;;12512:4;12504:6;12500:17;12490:27;;12446:81;12574:2;12566:6;12563:14;12543:18;12540:38;12537:84;;;12593:18;;:::i;:::-;12537:84;12358:269;12307:320;;;:::o;12633:231::-;12773:34;12769:1;12761:6;12757:14;12750:58;12842:14;12837:2;12829:6;12825:15;12818:39;12633:231;:::o;12870:366::-;13012:3;13033:67;13097:2;13092:3;13033:67;:::i;:::-;13026:74;;13109:93;13198:3;13109:93;:::i;:::-;13227:2;13222:3;13218:12;13211:19;;12870:366;;;:::o;13242:419::-;13408:4;13446:2;13435:9;13431:18;13423:26;;13495:9;13489:4;13485:20;13481:1;13470:9;13466:17;13459:47;13523:131;13649:4;13523:131;:::i;:::-;13515:139;;13242:419;;;:::o;13667:220::-;13807:34;13803:1;13795:6;13791:14;13784:58;13876:3;13871:2;13863:6;13859:15;13852:28;13667:220;:::o;13893:366::-;14035:3;14056:67;14120:2;14115:3;14056:67;:::i;:::-;14049:74;;14132:93;14221:3;14132:93;:::i;:::-;14250:2;14245:3;14241:12;14234:19;;13893:366;;;:::o;14265:419::-;14431:4;14469:2;14458:9;14454:18;14446:26;;14518:9;14512:4;14508:20;14504:1;14493:9;14489:17;14482:47;14546:131;14672:4;14546:131;:::i;:::-;14538:139;;14265:419;;;:::o;14690:243::-;14830:34;14826:1;14818:6;14814:14;14807:58;14899:26;14894:2;14886:6;14882:15;14875:51;14690:243;:::o;14939:366::-;15081:3;15102:67;15166:2;15161:3;15102:67;:::i;:::-;15095:74;;15178:93;15267:3;15178:93;:::i;:::-;15296:2;15291:3;15287:12;15280:19;;14939:366;;;:::o;15311:419::-;15477:4;15515:2;15504:9;15500:18;15492:26;;15564:9;15558:4;15554:20;15550:1;15539:9;15535:17;15528:47;15592:131;15718:4;15592:131;:::i;:::-;15584:139;;15311:419;;;:::o;15736:236::-;15876:34;15872:1;15864:6;15860:14;15853:58;15945:19;15940:2;15932:6;15928:15;15921:44;15736:236;:::o;15978:366::-;16120:3;16141:67;16205:2;16200:3;16141:67;:::i;:::-;16134:74;;16217:93;16306:3;16217:93;:::i;:::-;16335:2;16330:3;16326:12;16319:19;;15978:366;;;:::o;16350:419::-;16516:4;16554:2;16543:9;16539:18;16531:26;;16603:9;16597:4;16593:20;16589:1;16578:9;16574:17;16567:47;16631:131;16757:4;16631:131;:::i;:::-;16623:139;;16350:419;;;:::o;16775:182::-;16915:34;16911:1;16903:6;16899:14;16892:58;16775:182;:::o;16963:366::-;17105:3;17126:67;17190:2;17185:3;17126:67;:::i;:::-;17119:74;;17202:93;17291:3;17202:93;:::i;:::-;17320:2;17315:3;17311:12;17304:19;;16963:366;;;:::o;17335:419::-;17501:4;17539:2;17528:9;17524:18;17516:26;;17588:9;17582:4;17578:20;17574:1;17563:9;17559:17;17552:47;17616:131;17742:4;17616:131;:::i;:::-;17608:139;;17335:419;;;:::o;17760:220::-;17900:34;17896:1;17888:6;17884:14;17877:58;17969:3;17964:2;17956:6;17952:15;17945:28;17760:220;:::o;17986:366::-;18128:3;18149:67;18213:2;18208:3;18149:67;:::i;:::-;18142:74;;18225:93;18314:3;18225:93;:::i;:::-;18343:2;18338:3;18334:12;18327:19;;17986:366;;;:::o;18358:419::-;18524:4;18562:2;18551:9;18547:18;18539:26;;18611:9;18605:4;18601:20;18597:1;18586:9;18582:17;18575:47;18639:131;18765:4;18639:131;:::i;:::-;18631:139;;18358:419;;;:::o;18783:230::-;18923:34;18919:1;18911:6;18907:14;18900:58;18992:13;18987:2;18979:6;18975:15;18968:38;18783:230;:::o;19019:366::-;19161:3;19182:67;19246:2;19241:3;19182:67;:::i;:::-;19175:74;;19258:93;19347:3;19258:93;:::i;:::-;19376:2;19371:3;19367:12;19360:19;;19019:366;;;:::o;19391:419::-;19557:4;19595:2;19584:9;19580:18;19572:26;;19644:9;19638:4;19634:20;19630:1;19619:9;19615:17;19608:47;19672:131;19798:4;19672:131;:::i;:::-;19664:139;;19391:419;;;:::o;19816:180::-;19864:77;19861:1;19854:88;19961:4;19958:1;19951:15;19985:4;19982:1;19975:15;20002:233;20041:3;20064:24;20082:5;20064:24;:::i;:::-;20055:33;;20110:66;20103:5;20100:77;20097:103;;;20180:18;;:::i;:::-;20097:103;20227:1;20220:5;20216:13;20209:20;;20002:233;;;:::o;20241:332::-;20362:4;20400:2;20389:9;20385:18;20377:26;;20413:71;20481:1;20470:9;20466:17;20457:6;20413:71;:::i;:::-;20494:72;20562:2;20551:9;20547:18;20538:6;20494:72;:::i;:::-;20241:332;;;;;:::o;20579:228::-;20719:34;20715:1;20707:6;20703:14;20696:58;20788:11;20783:2;20775:6;20771:15;20764:36;20579:228;:::o;20813:366::-;20955:3;20976:67;21040:2;21035:3;20976:67;:::i;:::-;20969:74;;21052:93;21141:3;21052:93;:::i;:::-;21170:2;21165:3;21161:12;21154:19;;20813:366;;;:::o;21185:419::-;21351:4;21389:2;21378:9;21374:18;21366:26;;21438:9;21432:4;21428:20;21424:1;21413:9;21409:17;21402:47;21466:131;21592:4;21466:131;:::i;:::-;21458:139;;21185:419;;;:::o;21610:229::-;21750:34;21746:1;21738:6;21734:14;21727:58;21819:12;21814:2;21806:6;21802:15;21795:37;21610:229;:::o;21845:366::-;21987:3;22008:67;22072:2;22067:3;22008:67;:::i;:::-;22001:74;;22084:93;22173:3;22084:93;:::i;:::-;22202:2;22197:3;22193:12;22186:19;;21845:366;;;:::o;22217:419::-;22383:4;22421:2;22410:9;22406:18;22398:26;;22470:9;22464:4;22460:20;22456:1;22445:9;22441:17;22434:47;22498:131;22624:4;22498:131;:::i;:::-;22490:139;;22217:419;;;:::o;22642:170::-;22782:22;22778:1;22770:6;22766:14;22759:46;22642:170;:::o;22818:366::-;22960:3;22981:67;23045:2;23040:3;22981:67;:::i;:::-;22974:74;;23057:93;23146:3;23057:93;:::i;:::-;23175:2;23170:3;23166:12;23159:19;;22818:366;;;:::o;23190:419::-;23356:4;23394:2;23383:9;23379:18;23371:26;;23443:9;23437:4;23433:20;23429:1;23418:9;23414:17;23407:47;23471:131;23597:4;23471:131;:::i;:::-;23463:139;;23190:419;;;:::o;23615:148::-;23717:11;23754:3;23739:18;;23615:148;;;;:::o;23769:141::-;23818:4;23841:3;23833:11;;23864:3;23861:1;23854:14;23898:4;23895:1;23885:18;23877:26;;23769:141;;;:::o;23940:845::-;24043:3;24080:5;24074:12;24109:36;24135:9;24109:36;:::i;:::-;24161:89;24243:6;24238:3;24161:89;:::i;:::-;24154:96;;24281:1;24270:9;24266:17;24297:1;24292:137;;;;24443:1;24438:341;;;;24259:520;;24292:137;24376:4;24372:9;24361;24357:25;24352:3;24345:38;24412:6;24407:3;24403:16;24396:23;;24292:137;;24438:341;24505:38;24537:5;24505:38;:::i;:::-;24565:1;24579:154;24593:6;24590:1;24587:13;24579:154;;;24667:7;24661:14;24657:1;24652:3;24648:11;24641:35;24717:1;24708:7;24704:15;24693:26;;24615:4;24612:1;24608:12;24603:17;;24579:154;;;24762:6;24757:3;24753:16;24746:23;;24445:334;;24259:520;;24047:738;;23940:845;;;;:::o;24791:377::-;24897:3;24925:39;24958:5;24925:39;:::i;:::-;24980:89;25062:6;25057:3;24980:89;:::i;:::-;24973:96;;25078:52;25123:6;25118:3;25111:4;25104:5;25100:16;25078:52;:::i;:::-;25155:6;25150:3;25146:16;25139:23;;24901:267;24791:377;;;;:::o;25174:583::-;25396:3;25418:92;25506:3;25497:6;25418:92;:::i;:::-;25411:99;;25527:95;25618:3;25609:6;25527:95;:::i;:::-;25520:102;;25639:92;25727:3;25718:6;25639:92;:::i;:::-;25632:99;;25748:3;25741:10;;25174:583;;;;;;:::o;25763:225::-;25903:34;25899:1;25891:6;25887:14;25880:58;25972:8;25967:2;25959:6;25955:15;25948:33;25763:225;:::o;25994:366::-;26136:3;26157:67;26221:2;26216:3;26157:67;:::i;:::-;26150:74;;26233:93;26322:3;26233:93;:::i;:::-;26351:2;26346:3;26342:12;26335:19;;25994:366;;;:::o;26366:419::-;26532:4;26570:2;26559:9;26555:18;26547:26;;26619:9;26613:4;26609:20;26605:1;26594:9;26590:17;26583:47;26647:131;26773:4;26647:131;:::i;:::-;26639:139;;26366:419;;;:::o;26791:231::-;26931:34;26927:1;26919:6;26915:14;26908:58;27000:14;26995:2;26987:6;26983:15;26976:39;26791:231;:::o;27028:366::-;27170:3;27191:67;27255:2;27250:3;27191:67;:::i;:::-;27184:74;;27267:93;27356:3;27267:93;:::i;:::-;27385:2;27380:3;27376:12;27369:19;;27028:366;;;:::o;27400:419::-;27566:4;27604:2;27593:9;27589:18;27581:26;;27653:9;27647:4;27643:20;27639:1;27628:9;27624:17;27617:47;27681:131;27807:4;27681:131;:::i;:::-;27673:139;;27400:419;;;:::o;27825:224::-;27965:34;27961:1;27953:6;27949:14;27942:58;28034:7;28029:2;28021:6;28017:15;28010:32;27825:224;:::o;28055:366::-;28197:3;28218:67;28282:2;28277:3;28218:67;:::i;:::-;28211:74;;28294:93;28383:3;28294:93;:::i;:::-;28412:2;28407:3;28403:12;28396:19;;28055:366;;;:::o;28427:419::-;28593:4;28631:2;28620:9;28616:18;28608:26;;28680:9;28674:4;28670:20;28666:1;28655:9;28651:17;28644:47;28708:131;28834:4;28708:131;:::i;:::-;28700:139;;28427:419;;;:::o;28852:223::-;28992:34;28988:1;28980:6;28976:14;28969:58;29061:6;29056:2;29048:6;29044:15;29037:31;28852:223;:::o;29081:366::-;29223:3;29244:67;29308:2;29303:3;29244:67;:::i;:::-;29237:74;;29320:93;29409:3;29320:93;:::i;:::-;29438:2;29433:3;29429:12;29422:19;;29081:366;;;:::o;29453:419::-;29619:4;29657:2;29646:9;29642:18;29634:26;;29706:9;29700:4;29696:20;29692:1;29681:9;29677:17;29670:47;29734:131;29860:4;29734:131;:::i;:::-;29726:139;;29453:419;;;:::o;29878:191::-;29918:4;29938:20;29956:1;29938:20;:::i;:::-;29933:25;;29972:20;29990:1;29972:20;:::i;:::-;29967:25;;30011:1;30008;30005:8;30002:34;;;30016:18;;:::i;:::-;30002:34;30061:1;30058;30054:9;30046:17;;29878:191;;;;:::o;30075:305::-;30115:3;30134:20;30152:1;30134:20;:::i;:::-;30129:25;;30168:20;30186:1;30168:20;:::i;:::-;30163:25;;30322:1;30254:66;30250:74;30247:1;30244:81;30241:107;;;30328:18;;:::i;:::-;30241:107;30372:1;30369;30365:9;30358:16;;30075:305;;;;:::o;30386:175::-;30526:27;30522:1;30514:6;30510:14;30503:51;30386:175;:::o;30567:366::-;30709:3;30730:67;30794:2;30789:3;30730:67;:::i;:::-;30723:74;;30806:93;30895:3;30806:93;:::i;:::-;30924:2;30919:3;30915:12;30908:19;;30567:366;;;:::o;30939:419::-;31105:4;31143:2;31132:9;31128:18;31120:26;;31192:9;31186:4;31182:20;31178:1;31167:9;31163:17;31156:47;31220:131;31346:4;31220:131;:::i;:::-;31212:139;;30939:419;;;:::o;31364:237::-;31504:34;31500:1;31492:6;31488:14;31481:58;31573:20;31568:2;31560:6;31556:15;31549:45;31364:237;:::o;31607:366::-;31749:3;31770:67;31834:2;31829:3;31770:67;:::i;:::-;31763:74;;31846:93;31935:3;31846:93;:::i;:::-;31964:2;31959:3;31955:12;31948:19;;31607:366;;;:::o;31979:419::-;32145:4;32183:2;32172:9;32168:18;32160:26;;32232:9;32226:4;32222:20;32218:1;32207:9;32203:17;32196:47;32260:131;32386:4;32260:131;:::i;:::-;32252:139;;31979:419;;;:::o;32404:180::-;32452:77;32449:1;32442:88;32549:4;32546:1;32539:15;32573:4;32570:1;32563:15;32590:185;32630:1;32647:20;32665:1;32647:20;:::i;:::-;32642:25;;32681:20;32699:1;32681:20;:::i;:::-;32676:25;;32720:1;32710:35;;32725:18;;:::i;:::-;32710:35;32767:1;32764;32760:9;32755:14;;32590:185;;;;:::o;32781:176::-;32813:1;32830:20;32848:1;32830:20;:::i;:::-;32825:25;;32864:20;32882:1;32864:20;:::i;:::-;32859:25;;32903:1;32893:35;;32908:18;;:::i;:::-;32893:35;32949:1;32946;32942:9;32937:14;;32781:176;;;;:::o;32963:180::-;33011:77;33008:1;33001:88;33108:4;33105:1;33098:15;33132:4;33129:1;33122:15;33149:98;33200:6;33234:5;33228:12;33218:22;;33149:98;;;:::o;33253:168::-;33336:11;33370:6;33365:3;33358:19;33410:4;33405:3;33401:14;33386:29;;33253:168;;;;:::o;33427:360::-;33513:3;33541:38;33573:5;33541:38;:::i;:::-;33595:70;33658:6;33653:3;33595:70;:::i;:::-;33588:77;;33674:52;33719:6;33714:3;33707:4;33700:5;33696:16;33674:52;:::i;:::-;33751:29;33773:6;33751:29;:::i;:::-;33746:3;33742:39;33735:46;;33517:270;33427:360;;;;:::o;33793:640::-;33988:4;34026:3;34015:9;34011:19;34003:27;;34040:71;34108:1;34097:9;34093:17;34084:6;34040:71;:::i;:::-;34121:72;34189:2;34178:9;34174:18;34165:6;34121:72;:::i;:::-;34203;34271:2;34260:9;34256:18;34247:6;34203:72;:::i;:::-;34322:9;34316:4;34312:20;34307:2;34296:9;34292:18;34285:48;34350:76;34421:4;34412:6;34350:76;:::i;:::-;34342:84;;33793:640;;;;;;;:::o;34439:141::-;34495:5;34526:6;34520:13;34511:22;;34542:32;34568:5;34542:32;:::i;:::-;34439:141;;;;:::o;34586:349::-;34655:6;34704:2;34692:9;34683:7;34679:23;34675:32;34672:119;;;34710:79;;:::i;:::-;34672:119;34830:1;34855:63;34910:7;34901:6;34890:9;34886:22;34855:63;:::i;:::-;34845:73;;34801:127;34586:349;;;;:::o;34941:182::-;35081:34;35077:1;35069:6;35065:14;35058:58;34941:182;:::o;35129:366::-;35271:3;35292:67;35356:2;35351:3;35292:67;:::i;:::-;35285:74;;35368:93;35457:3;35368:93;:::i;:::-;35486:2;35481:3;35477:12;35470:19;;35129:366;;;:::o;35501:419::-;35667:4;35705:2;35694:9;35690:18;35682:26;;35754:9;35748:4;35744:20;35740:1;35729:9;35725:17;35718:47;35782:131;35908:4;35782:131;:::i;:::-;35774:139;;35501:419;;;:::o;35926:178::-;36066:30;36062:1;36054:6;36050:14;36043:54;35926:178;:::o;36110:366::-;36252:3;36273:67;36337:2;36332:3;36273:67;:::i;:::-;36266:74;;36349:93;36438:3;36349:93;:::i;:::-;36467:2;36462:3;36458:12;36451:19;;36110:366;;;:::o;36482:419::-;36648:4;36686:2;36675:9;36671:18;36663:26;;36735:9;36729:4;36725:20;36721:1;36710:9;36706:17;36699:47;36763:131;36889:4;36763:131;:::i;:::-;36755:139;;36482:419;;;:::o

Swarm Source

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