ERC-721
Overview
Max Total Supply
86 BTC
Holders
33
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 BTCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-16 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/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: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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: ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex = 0; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert('ERC721A: unable to get token of owner by index'); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); for (uint256 curr = tokenId; ; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), 'ERC721A: token already minted'); require(quantity > 0, 'ERC721A: quantity must be greater 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; } _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: NFTV3.sol pragma solidity ^0.8.7; contract NFT is ERC721A, Ownable, ReentrancyGuard { using Counters for Counters.Counter; using SafeMath for uint256; uint256 private _mintCost; uint256 private _maxSupply; bool private _isPublicMintEnabled; uint256 private _freeSupply; uint256 private _freeMintLimit; string private _baseURL; address private _feeCollector = 0xfdA84Df1a3e7aA676a5B5f34E6474aaeAef007B3; uint256 private FEE_DENOMINATOR = 1000; uint256 private FEE_PLATFORM_NUMERATOR = 50; uint256 private FEE_OWNER_NUMERATOR = 950; uint256 private VERSION = 1; event MintCostUpdated(uint256 _value); event MaxSupplyUpdated(uint256 _value); event PublicMintStatusChanged(bool _value); event FreeSupplyUpdated(uint256 _value); event FreeMintLimitUpdated(uint256 _value); event BaseUrlUpdated(string _value); event PlatformFeeAddressUpdated(address indexed _address); /** * @dev Initializes the contract setting the `tokenName` and `symbol` of the nft, `cost` of each mint call, and maximum `supply` of the nft. * Note: `cost` is in wei. */ constructor(string memory tokenName, string memory symbol, uint256 cost, uint256 supply, string memory baseURL, bool enablePublicMinting) ERC721A(tokenName, symbol) Ownable() { _mintCost = cost; _maxSupply = supply; _isPublicMintEnabled = enablePublicMinting; _freeSupply = 0; _freeMintLimit = 1; _baseURL = baseURL; } /** * @dev Mint `count` tokens if requirements are satisfied. * */ function mintTokens(uint256 count) public payable nonReentrant{ require(count > 0 && count <= 100, "You can mint minimum 1, maximum 100 NFTs"); require(count.add(totalSupply()) <= _maxSupply, "Exceeds max supply"); require(owner() == msg.sender || msg.value >= _mintCost.mul(count), "Ether value sent is below the price"); if(msg.value > 0){ payable(owner()).transfer(msg.value.mul(FEE_OWNER_NUMERATOR).div(FEE_DENOMINATOR)); payable(_feeCollector).transfer(msg.value.mul(FEE_PLATFORM_NUMERATOR).div(FEE_DENOMINATOR)); } _mint(msg.sender, count); } /** * @dev Mint a token to each Address of `recipients`. * Can only be called if requirements are satisfied. */ function mintTokens(address[] calldata recipients) public payable nonReentrant{ require(recipients.length>0,"Missing recipient addresses"); require(recipients.length > 0 && recipients.length <= 100, "You can mint minimum 1, maximum 100 NFTs"); require(recipients.length.add(totalSupply()) <= _maxSupply, "Exceeds max supply"); require(owner() == msg.sender || msg.value >= _mintCost.mul(recipients.length), "Ether value sent is below the price"); if(msg.value > 0){ payable(owner()).transfer(msg.value.mul(FEE_OWNER_NUMERATOR).div(FEE_DENOMINATOR)); payable(_feeCollector).transfer(msg.value.mul(FEE_PLATFORM_NUMERATOR).div(FEE_DENOMINATOR)); } for(uint i=0; i<recipients.length; i++){ _mint(recipients[i], 1); } } /** * @dev Mint `count` tokens if requirements are satisfied. */ function freeMint(uint256 count) public payable nonReentrant{ require(owner() == msg.sender || _isPublicMintEnabled, "Mint disabled"); require(totalSupply() + count <= _freeSupply, "Exceeded max free supply"); require(count <= _freeMintLimit, "Cant mint more than mint limit"); require(count > 0, "Must mint at least 1 token"); _safeMint(msg.sender, count); } /** * @dev Changes contract state to enable public access to `mintTokens` function * Can only be called by the current owner. */ function enablePublicMint() public onlyOwner{ _isPublicMintEnabled = true; emit PublicMintStatusChanged(true); } /** * @dev Changes contract state to disable public access to `mintTokens` function * Can only be called by the current owner. */ function disablePublicMint() public onlyOwner{ _isPublicMintEnabled = false; emit PublicMintStatusChanged(false); } /** * @dev Update the cost to mint a token. * Can only be called by the current owner. */ function setCost(uint256 cost) public onlyOwner{ _mintCost = cost; emit MintCostUpdated(cost); } /** * @dev Update the max supply. * Can only be called by the current owner. */ function setMaxSupply(uint256 max) public onlyOwner{ _maxSupply = max; emit MaxSupplyUpdated(max); } /** * @dev Update the max free supply. * Can only be called by the current owner. */ function setFreeSupply(uint256 max) public onlyOwner{ _freeSupply = max; emit FreeSupplyUpdated(max); } /** * @dev Update the free mint transaction limit. * Can only be called by the current owner. */ function setFreeMintLimit(uint256 max) public onlyOwner{ _freeMintLimit = max; emit FreeMintLimitUpdated(max); } /** * @dev Update base base uri */ function updateBaseUrl(string memory newBaseUrl) public onlyOwner{ require(msg.sender == Ownable(_feeCollector).owner(), "Caller unauthorized"); _baseURL = newBaseUrl; emit BaseUrlUpdated(newBaseUrl); } /** * @dev Update fee address */ function updatePlatformFeeAddress(address newAddress) public onlyOwner{ require(msg.sender == Ownable(_feeCollector).owner(), "Caller unauthorized"); _feeCollector = newAddress; emit PlatformFeeAddressUpdated(newAddress); } /** * @dev Used by public mint functions and by owner functions. * Can only be called internally by other functions. */ function _mint(address to, uint256 count) internal virtual returns (uint256){ _safeMint(to, count); return count; } /** * PUBLIC GETTERS: */ function canFreeMint(uint256 count) public view returns (bool){ return (_isPublicMintEnabled && totalSupply() + count <= _freeSupply && count <= _freeMintLimit && count > 0); } function getState() public view returns (uint256, address, bool, uint256, uint256, uint256, uint256, uint256, address, string memory){ return (VERSION, _feeCollector, _isPublicMintEnabled, _mintCost, _maxSupply, totalSupply(), _freeSupply, _freeMintLimit, owner(), _baseURL); } function getMintStatus() public view returns (bool) { return _isPublicMintEnabled; } function getCost() public view returns (uint256){ return _mintCost; } function getMaxSupply() public view returns (uint256){ return _maxSupply; } function getCurrentSupply() public view returns (uint256){ return totalSupply(); } function getFreeSupply() public view returns (uint256) { return _freeSupply; } function getFreeMintLimit() public view returns (uint256) { return _freeMintLimit; } function _baseURI() override internal view returns (string memory) { return _baseURL; } function tokenURI(uint256 tokenId) public view 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, Strings.toString(tokenId), "/metadata.json")) : ""; } function contractURI() public view returns (string memory) { string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, "metadata.json")) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"string","name":"baseURL","type":"string"},{"internalType":"bool","name":"enablePublicMinting","type":"bool"}],"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":false,"internalType":"string","name":"_value","type":"string"}],"name":"BaseUrlUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"FreeMintLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"FreeSupplyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"MaxSupplyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"MintCostUpdated","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":"_address","type":"address"}],"name":"PlatformFeeAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"PublicMintStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"canFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disablePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFreeMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getState","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"mintTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mintTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setFreeMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseUrl","type":"string"}],"name":"updateBaseUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updatePlatformFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805573fda84df1a3e7aa676a5b5f34e6474aaeaef007b3600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e860105560326011556103b660125560016013553480156200008057600080fd5b5060405162005d2338038062005d238339818101604052810190620000a691906200038b565b85858160019080519060200190620000c09291906200022f565b508060029080519060200190620000d99291906200022f565b505050620000fc620000f06200016160201b60201c565b6200016960201b60201c565b60016008819055508360098190555082600a8190555080600b60006101000a81548160ff0219169083151502179055506000600c819055506001600d8190555081600e9080519060200190620001549291906200022f565b5050505050505062000652565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023d906200052f565b90600052602060002090601f016020900481019282620002615760008555620002ad565b82601f106200027c57805160ff1916838001178555620002ad565b82800160010185558215620002ad579182015b82811115620002ac5782518255916020019190600101906200028f565b5b509050620002bc9190620002c0565b5090565b5b80821115620002db576000816000905550600101620002c1565b5090565b6000620002f6620002f084620004ad565b62000484565b905082815260208101848484011115620003155762000314620005fe565b5b62000322848285620004f9565b509392505050565b6000815190506200033b816200061e565b92915050565b600082601f830112620003595762000358620005f9565b5b81516200036b848260208601620002df565b91505092915050565b600081519050620003858162000638565b92915050565b60008060008060008060c08789031215620003ab57620003aa62000608565b5b600087015167ffffffffffffffff811115620003cc57620003cb62000603565b5b620003da89828a0162000341565b965050602087015167ffffffffffffffff811115620003fe57620003fd62000603565b5b6200040c89828a0162000341565b95505060406200041f89828a0162000374565b94505060606200043289828a0162000374565b935050608087015167ffffffffffffffff81111562000456576200045562000603565b5b6200046489828a0162000341565b92505060a06200047789828a016200032a565b9150509295509295509295565b600062000490620004a3565b90506200049e828262000565565b919050565b6000604051905090565b600067ffffffffffffffff821115620004cb57620004ca620005ca565b5b620004d6826200060d565b9050602081019050919050565b60008115159050919050565b6000819050919050565b60005b8381101562000519578082015181840152602081019050620004fc565b8381111562000529576000848401525b50505050565b600060028204905060018216806200054857607f821691505b602082108114156200055f576200055e6200059b565b5b50919050565b62000570826200060d565b810181811067ffffffffffffffff82111715620005925762000591620005ca565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200062981620004e3565b81146200063557600080fd5b50565b6200064381620004ef565b81146200064f57600080fd5b50565b6156c180620006626000396000f3fe6080604052600436106102305760003560e01c80637c928fe91161012e578063bd2f6eb8116100ab578063e8a3d4851161006f578063e8a3d48514610809578063e985e9c514610834578063ea21e5eb14610871578063f2fde38b1461089a578063f676308a146108c357610230565b8063bd2f6eb81461074a578063bd3e19d414610773578063c87b56dd1461079e578063d62f3b1c146107db578063d64bc611146107f257610230565b806397304ced116100f257806397304ced146106885780639b63222b146106a4578063a22cb465146106cd578063b0505132146106f6578063b88d4fde1461072157610230565b80637c928fe9146105ae57806385dac12d146105ca5780638da5cb5b14610607578063941ada0e1461063257806395d89b411461065d57610230565b80634282b335116101bc5780634f6ccce7116101805780634f6ccce7146104b75780636352211e146104f45780636f8b44b01461053157806370a082311461055a578063715018a61461059757610230565b80634282b335146103e457806342842e0e1461040f57806344a0d68a146104385780634c0f38c2146104615780634f3e1efc1461048c57610230565b806318160ddd1161020357806318160ddd146103035780631865c57d1461032e57806323b872dd146103625780632f745c591461038b5780633fa40f94146103c857610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613e44565b6108ec565b60405161026991906144d9565b60405180910390f35b34801561027e57600080fd5b50610287610a36565b60405161029491906144f4565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613ee7565b610ac8565b6040516102d19190614472565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613db7565b610b4d565b005b34801561030f57600080fd5b50610318610c66565b60405161032591906148b6565b60405180910390f35b34801561033a57600080fd5b50610343610c6f565b6040516103599a999897969594939291906148d1565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613ca1565b610d7f565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613db7565b610d8f565b6040516103bf91906148b6565b60405180910390f35b6103e260048036038101906103dd9190613df7565b610f8d565b005b3480156103f057600080fd5b506103f96112e1565b60405161040691906148b6565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613ca1565b6112eb565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613ee7565b61130b565b005b34801561046d57600080fd5b506104766113c8565b60405161048391906148b6565b60405180910390f35b34801561049857600080fd5b506104a16113d2565b6040516104ae91906148b6565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190613ee7565b6113e1565b6040516104eb91906148b6565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613ee7565b611434565b6040516105289190614472565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613ee7565b61144a565b005b34801561056657600080fd5b50610581600480360381019061057c9190613c07565b611507565b60405161058e91906148b6565b60405180910390f35b3480156105a357600080fd5b506105ac6115f0565b005b6105c860048036038101906105c39190613ee7565b611678565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613ee7565b611846565b6040516105fe91906144d9565b60405180910390f35b34801561061357600080fd5b5061061c611899565b6040516106299190614472565b60405180910390f35b34801561063e57600080fd5b506106476118c3565b60405161065491906144d9565b60405180910390f35b34801561066957600080fd5b506106726118da565b60405161067f91906144f4565b60405180910390f35b6106a2600480360381019061069d9190613ee7565b61196c565b005b3480156106b057600080fd5b506106cb60048036038101906106c69190613c07565b611c23565b005b3480156106d957600080fd5b506106f460048036038101906106ef9190613d77565b611e33565b005b34801561070257600080fd5b5061070b611fb4565b60405161071891906148b6565b60405180910390f35b34801561072d57600080fd5b5061074860048036038101906107439190613cf4565b611fbe565b005b34801561075657600080fd5b50610771600480360381019061076c9190613ee7565b61201a565b005b34801561077f57600080fd5b506107886120d7565b60405161079591906148b6565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190613ee7565b6120e1565b6040516107d291906144f4565b60405180910390f35b3480156107e757600080fd5b506107f0612188565b005b3480156107fe57600080fd5b50610807612259565b005b34801561081557600080fd5b5061081e61232a565b60405161082b91906144f4565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613c61565b61237d565b60405161086891906144d9565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613e9e565b612411565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613c07565b6125eb565b005b3480156108cf57600080fd5b506108ea60048036038101906108e59190613ee7565b6126e3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2f5750610a2e826127a0565b5b9050919050565b606060018054610a4590614c95565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190614c95565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610ad38261280a565b610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990614896565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b5882611434565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614776565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610be8612817565b73ffffffffffffffffffffffffffffffffffffffff161480610c175750610c1681610c11612817565b61237d565b5b610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d90614636565b60405180910390fd5b610c6183838361281f565b505050565b60008054905090565b60008060008060008060008060006060601354600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900460ff16600954600a54610cc3610c66565b600c54600d54610cd1611899565b600e808054610cdf90614c95565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0b90614c95565b8015610d585780601f10610d2d57610100808354040283529160200191610d58565b820191906000526020600020905b815481529060010190602001808311610d3b57829003601f168201915b50505050509050995099509950995099509950995099509950995090919293949596979899565b610d8a8383836128d1565b505050565b6000610d9a83611507565b8210610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290614516565b60405180910390fd5b6000610de5610c66565b905060008060005b83811015610f4b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610edf57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f375786841415610f28578195505050505050610f87565b8380610f3390614cf8565b9450505b508080610f4390614cf8565b915050610ded565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90614836565b60405180910390fd5b92915050565b60026008541415610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90614876565b60405180910390fd5b600260088190555060008282905011611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890614756565b60405180910390fd5b600082829050118015611038575060648282905011155b611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90614856565b60405180910390fd5b600a54611097611085610c66565b84849050612e7890919063ffffffff16565b11156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90614656565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166110f7611899565b73ffffffffffffffffffffffffffffffffffffffff161480611130575061112c82829050600954612e8e90919063ffffffff16565b3410155b61116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614676565b60405180910390fd5b600034111561128057611180611899565b73ffffffffffffffffffffffffffffffffffffffff166108fc6111c26010546111b460125434612e8e90919063ffffffff16565b612ea490919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156111ed573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61125360105461124560115434612e8e90919063ffffffff16565b612ea490919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561127e573d6000803e3d6000fd5b505b60005b828290508110156112d4576112c08383838181106112a4576112a3614dff565b5b90506020020160208101906112b99190613c07565b6001612eba565b5080806112cc90614cf8565b915050611283565b5060016008819055505050565b6000600d54905090565b61130683838360405180602001604052806000815250611fbe565b505050565b611313612817565b73ffffffffffffffffffffffffffffffffffffffff16611331611899565b73ffffffffffffffffffffffffffffffffffffffff1614611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906146d6565b60405180910390fd5b806009819055507fde03a6195f6a732ff0af69781292526beecc585b4278fa1baa4d9dd578f88a5c816040516113bd91906148b6565b60405180910390a150565b6000600a54905090565b60006113dc610c66565b905090565b60006113eb610c66565b821061142c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611423906145d6565b60405180910390fd5b819050919050565b600061143f82612ecf565b600001519050919050565b611452612817565b73ffffffffffffffffffffffffffffffffffffffff16611470611899565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906146d6565b60405180910390fd5b80600a819055507f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c816040516114fc91906148b6565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90614696565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115f8612817565b73ffffffffffffffffffffffffffffffffffffffff16611616611899565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611663906146d6565b60405180910390fd5b611676600061302a565b565b600260085414156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590614876565b60405180910390fd5b60026008819055503373ffffffffffffffffffffffffffffffffffffffff166116e5611899565b73ffffffffffffffffffffffffffffffffffffffff1614806117135750600b60009054906101000a900460ff165b611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990614816565b60405180910390fd5b600c548161175e610c66565b6117689190614a84565b11156117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614616565b60405180910390fd5b600d548111156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590614536565b60405180910390fd5b60008111611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890614596565b60405180910390fd5b61183b33826130f0565b600160088190555050565b6000600b60009054906101000a900460ff1680156118785750600c548261186b610c66565b6118759190614a84565b11155b80156118865750600d548211155b80156118925750600082115b9050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600b60009054906101000a900460ff16905090565b6060600280546118e990614c95565b80601f016020809104026020016040519081016040528092919081815260200182805461191590614c95565b80156119625780601f1061193757610100808354040283529160200191611962565b820191906000526020600020905b81548152906001019060200180831161194557829003601f168201915b5050505050905090565b600260085414156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614876565b60405180910390fd5b60026008819055506000811180156119cb575060648111155b611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614856565b60405180910390fd5b600a54611a27611a18610c66565b83612e7890919063ffffffff16565b1115611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90614656565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611a87611899565b73ffffffffffffffffffffffffffffffffffffffff161480611abd5750611ab981600954612e8e90919063ffffffff16565b3410155b611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614676565b60405180910390fd5b6000341115611c0d57611b0d611899565b73ffffffffffffffffffffffffffffffffffffffff166108fc611b4f601054611b4160125434612e8e90919063ffffffff16565b612ea490919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611b7a573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611be0601054611bd260115434612e8e90919063ffffffff16565b612ea490919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611c0b573d6000803e3d6000fd5b505b611c173382612eba565b50600160088190555050565b611c2b612817565b73ffffffffffffffffffffffffffffffffffffffff16611c49611899565b73ffffffffffffffffffffffffffffffffffffffff1614611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c96906146d6565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0757600080fd5b505afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190613c34565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da3906145b6565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fd71a785e6a17cb0adfab30204e78a85411c5ef1c18714f35966f1664f890408160405160405180910390a250565b611e3b612817565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614716565b60405180910390fd5b8060066000611eb6612817565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f63612817565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fa891906144d9565b60405180910390a35050565b6000600c54905090565b611fc98484846128d1565b611fd58484848461310e565b612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906147b6565b60405180910390fd5b50505050565b612022612817565b73ffffffffffffffffffffffffffffffffffffffff16612040611899565b73ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d906146d6565b60405180910390fd5b80600d819055507fd42ac6ec13f1fff9e4589dda4dfc42edad65acb15194635771b11d3e108cdae3816040516120cc91906148b6565b60405180910390a150565b6000600954905090565b60606120ec8261280a565b61212b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612122906146f6565b60405180910390fd5b60006121356132a5565b905060008151116121555760405180602001604052806000815250612180565b8061215f84613337565b604051602001612170929190614421565b6040516020818303038152906040525b915050919050565b612190612817565b73ffffffffffffffffffffffffffffffffffffffff166121ae611899565b73ffffffffffffffffffffffffffffffffffffffff1614612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb906146d6565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f696ca93f2d646dcbf31ca7a85da7f825bd3796a6d7baa7321166e324bd25f4db600160405161224f91906144d9565b60405180910390a1565b612261612817565b73ffffffffffffffffffffffffffffffffffffffff1661227f611899565b73ffffffffffffffffffffffffffffffffffffffff16146122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc906146d6565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f696ca93f2d646dcbf31ca7a85da7f825bd3796a6d7baa7321166e324bd25f4db600060405161232091906144d9565b60405180910390a1565b606060006123366132a5565b905060008151116123565760405180602001604052806000815250612377565b806040516020016123679190614450565b6040516020818303038152906040525b91505090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612419612817565b73ffffffffffffffffffffffffffffffffffffffff16612437611899565b73ffffffffffffffffffffffffffffffffffffffff161461248d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612484906146d6565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124f557600080fd5b505afa158015612509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252d9190613c34565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461259a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612591906145b6565b60405180910390fd5b80600e90805190602001906125b0929190613976565b507f7978693abd0b21e74ac988b69d39920de613f19cfbd49da4171f223a25c76633816040516125e091906144f4565b60405180910390a150565b6125f3612817565b73ffffffffffffffffffffffffffffffffffffffff16612611611899565b73ffffffffffffffffffffffffffffffffffffffff1614612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e906146d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce90614556565b60405180910390fd5b6126e08161302a565b50565b6126eb612817565b73ffffffffffffffffffffffffffffffffffffffff16612709611899565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612756906146d6565b60405180910390fd5b80600c819055507fcc2cb9c93bdd0107c2409596dd628888b57746cf7868d4e44e4d92c9d40392068160405161279591906148b6565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006128dc82612ecf565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612903612817565b73ffffffffffffffffffffffffffffffffffffffff16148061295f5750612928612817565b73ffffffffffffffffffffffffffffffffffffffff1661294784610ac8565b73ffffffffffffffffffffffffffffffffffffffff16145b8061297b575061297a8260000151612975612817565b61237d565b5b9050806129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614736565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a26906146b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a96906145f6565b60405180910390fd5b612aac8585856001613498565b612abc600084846000015161281f565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612cc29190614a84565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e0857612d388161280a565b15612e07576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e70868686600161349e565b505050505050565b60008183612e869190614a84565b905092915050565b60008183612e9c9190614b0b565b905092915050565b60008183612eb29190614ada565b905092915050565b6000612ec683836130f0565b81905092915050565b612ed76139fc565b612ee08261280a565b612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1690614576565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613011578092505050613025565b50808061301d90614c6b565b915050612f25565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61310a8282604051806020016040528060008152506134a4565b5050565b600061312f8473ffffffffffffffffffffffffffffffffffffffff16613963565b15613298578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613158612817565b8786866040518563ffffffff1660e01b815260040161317a949392919061448d565b602060405180830381600087803b15801561319457600080fd5b505af19250505080156131c557506040513d601f19601f820116820180604052508101906131c29190613e71565b60015b613248573d80600081146131f5576040519150601f19603f3d011682016040523d82523d6000602084013e6131fa565b606091505b50600081511415613240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613237906147b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061329d565b600190505b949350505050565b6060600e80546132b490614c95565b80601f01602080910402602001604051908101604052809291908181526020018280546132e090614c95565b801561332d5780601f106133025761010080835404028352916020019161332d565b820191906000526020600020905b81548152906001019060200180831161331057829003601f168201915b5050505050905090565b6060600082141561337f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613493565b600082905060005b600082146133b157808061339a90614cf8565b915050600a826133aa9190614ada565b9150613387565b60008167ffffffffffffffff8111156133cd576133cc614e2e565b5b6040519080825280601f01601f1916602001820160405280156133ff5781602001600182028036833780820191505090505b5090505b6000851461348c576001826134189190614b65565b9150600a856134279190614d41565b60306134339190614a84565b60f81b81838151811061344957613448614dff565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134859190614ada565b9450613403565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561351a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613511906147f6565b60405180910390fd5b6135238161280a565b15613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355a906147d6565b60405180910390fd5b600083116135a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359d90614796565b60405180910390fd5b6135b36000858386613498565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516136b09190614a3e565b6fffffffffffffffffffffffffffffffff1681526020018583602001516136d79190614a3e565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561394657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138e6600088848861310e565b613925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391c906147b6565b60405180910390fd5b818061393090614cf8565b925050808061393e90614cf8565b915050613875565b508060008190555061395b600087858861349e565b505050505050565b600080823b905060008111915050919050565b82805461398290614c95565b90600052602060002090601f0160209004810192826139a457600085556139eb565b82601f106139bd57805160ff19168380011785556139eb565b828001600101855582156139eb579182015b828111156139ea5782518255916020019190600101906139cf565b5b5090506139f89190613a36565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613a4f576000816000905550600101613a37565b5090565b6000613a66613a6184614999565b614974565b905082815260208101848484011115613a8257613a81614e6c565b5b613a8d848285614c29565b509392505050565b6000613aa8613aa3846149ca565b614974565b905082815260208101848484011115613ac457613ac3614e6c565b5b613acf848285614c29565b509392505050565b600081359050613ae68161562f565b92915050565b600081519050613afb8161562f565b92915050565b60008083601f840112613b1757613b16614e62565b5b8235905067ffffffffffffffff811115613b3457613b33614e5d565b5b602083019150836020820283011115613b5057613b4f614e67565b5b9250929050565b600081359050613b6681615646565b92915050565b600081359050613b7b8161565d565b92915050565b600081519050613b908161565d565b92915050565b600082601f830112613bab57613baa614e62565b5b8135613bbb848260208601613a53565b91505092915050565b600082601f830112613bd957613bd8614e62565b5b8135613be9848260208601613a95565b91505092915050565b600081359050613c0181615674565b92915050565b600060208284031215613c1d57613c1c614e76565b5b6000613c2b84828501613ad7565b91505092915050565b600060208284031215613c4a57613c49614e76565b5b6000613c5884828501613aec565b91505092915050565b60008060408385031215613c7857613c77614e76565b5b6000613c8685828601613ad7565b9250506020613c9785828601613ad7565b9150509250929050565b600080600060608486031215613cba57613cb9614e76565b5b6000613cc886828701613ad7565b9350506020613cd986828701613ad7565b9250506040613cea86828701613bf2565b9150509250925092565b60008060008060808587031215613d0e57613d0d614e76565b5b6000613d1c87828801613ad7565b9450506020613d2d87828801613ad7565b9350506040613d3e87828801613bf2565b925050606085013567ffffffffffffffff811115613d5f57613d5e614e71565b5b613d6b87828801613b96565b91505092959194509250565b60008060408385031215613d8e57613d8d614e76565b5b6000613d9c85828601613ad7565b9250506020613dad85828601613b57565b9150509250929050565b60008060408385031215613dce57613dcd614e76565b5b6000613ddc85828601613ad7565b9250506020613ded85828601613bf2565b9150509250929050565b60008060208385031215613e0e57613e0d614e76565b5b600083013567ffffffffffffffff811115613e2c57613e2b614e71565b5b613e3885828601613b01565b92509250509250929050565b600060208284031215613e5a57613e59614e76565b5b6000613e6884828501613b6c565b91505092915050565b600060208284031215613e8757613e86614e76565b5b6000613e9584828501613b81565b91505092915050565b600060208284031215613eb457613eb3614e76565b5b600082013567ffffffffffffffff811115613ed257613ed1614e71565b5b613ede84828501613bc4565b91505092915050565b600060208284031215613efd57613efc614e76565b5b6000613f0b84828501613bf2565b91505092915050565b613f1d81614b99565b82525050565b613f2c81614bab565b82525050565b6000613f3d826149fb565b613f478185614a11565b9350613f57818560208601614c38565b613f6081614e7b565b840191505092915050565b6000613f7682614a06565b613f808185614a22565b9350613f90818560208601614c38565b613f9981614e7b565b840191505092915050565b6000613faf82614a06565b613fb98185614a33565b9350613fc9818560208601614c38565b80840191505092915050565b6000613fe2602283614a22565b9150613fed82614e8c565b604082019050919050565b6000614005601e83614a22565b915061401082614edb565b602082019050919050565b6000614028602683614a22565b915061403382614f04565b604082019050919050565b600061404b602a83614a22565b915061405682614f53565b604082019050919050565b600061406e601a83614a22565b915061407982614fa2565b602082019050919050565b6000614091601383614a22565b915061409c82614fcb565b602082019050919050565b60006140b4600e83614a33565b91506140bf82614ff4565b600e82019050919050565b60006140d7602383614a22565b91506140e28261501d565b604082019050919050565b60006140fa602583614a22565b91506141058261506c565b604082019050919050565b600061411d601883614a22565b9150614128826150bb565b602082019050919050565b6000614140603983614a22565b915061414b826150e4565b604082019050919050565b6000614163601283614a22565b915061416e82615133565b602082019050919050565b6000614186602383614a22565b91506141918261515c565b604082019050919050565b60006141a9602b83614a22565b91506141b4826151ab565b604082019050919050565b60006141cc602683614a22565b91506141d7826151fa565b604082019050919050565b60006141ef602083614a22565b91506141fa82615249565b602082019050919050565b6000614212602f83614a22565b915061421d82615272565b604082019050919050565b6000614235601a83614a22565b9150614240826152c1565b602082019050919050565b6000614258603283614a22565b9150614263826152ea565b604082019050919050565b600061427b601b83614a22565b915061428682615339565b602082019050919050565b600061429e602283614a22565b91506142a982615362565b604082019050919050565b60006142c1602383614a22565b91506142cc826153b1565b604082019050919050565b60006142e4603383614a22565b91506142ef82615400565b604082019050919050565b6000614307601d83614a22565b91506143128261544f565b602082019050919050565b600061432a602183614a22565b915061433582615478565b604082019050919050565b600061434d600d83614a22565b9150614358826154c7565b602082019050919050565b6000614370602e83614a22565b915061437b826154f0565b604082019050919050565b6000614393602883614a22565b915061439e8261553f565b604082019050919050565b60006143b6601f83614a22565b91506143c18261558e565b602082019050919050565b60006143d9600d83614a33565b91506143e4826155b7565b600d82019050919050565b60006143fc602d83614a22565b9150614407826155e0565b604082019050919050565b61441b81614c1f565b82525050565b600061442d8285613fa4565b91506144398284613fa4565b9150614444826140a7565b91508190509392505050565b600061445c8284613fa4565b9150614467826143cc565b915081905092915050565b60006020820190506144876000830184613f14565b92915050565b60006080820190506144a26000830187613f14565b6144af6020830186613f14565b6144bc6040830185614412565b81810360608301526144ce8184613f32565b905095945050505050565b60006020820190506144ee6000830184613f23565b92915050565b6000602082019050818103600083015261450e8184613f6b565b905092915050565b6000602082019050818103600083015261452f81613fd5565b9050919050565b6000602082019050818103600083015261454f81613ff8565b9050919050565b6000602082019050818103600083015261456f8161401b565b9050919050565b6000602082019050818103600083015261458f8161403e565b9050919050565b600060208201905081810360008301526145af81614061565b9050919050565b600060208201905081810360008301526145cf81614084565b9050919050565b600060208201905081810360008301526145ef816140ca565b9050919050565b6000602082019050818103600083015261460f816140ed565b9050919050565b6000602082019050818103600083015261462f81614110565b9050919050565b6000602082019050818103600083015261464f81614133565b9050919050565b6000602082019050818103600083015261466f81614156565b9050919050565b6000602082019050818103600083015261468f81614179565b9050919050565b600060208201905081810360008301526146af8161419c565b9050919050565b600060208201905081810360008301526146cf816141bf565b9050919050565b600060208201905081810360008301526146ef816141e2565b9050919050565b6000602082019050818103600083015261470f81614205565b9050919050565b6000602082019050818103600083015261472f81614228565b9050919050565b6000602082019050818103600083015261474f8161424b565b9050919050565b6000602082019050818103600083015261476f8161426e565b9050919050565b6000602082019050818103600083015261478f81614291565b9050919050565b600060208201905081810360008301526147af816142b4565b9050919050565b600060208201905081810360008301526147cf816142d7565b9050919050565b600060208201905081810360008301526147ef816142fa565b9050919050565b6000602082019050818103600083015261480f8161431d565b9050919050565b6000602082019050818103600083015261482f81614340565b9050919050565b6000602082019050818103600083015261484f81614363565b9050919050565b6000602082019050818103600083015261486f81614386565b9050919050565b6000602082019050818103600083015261488f816143a9565b9050919050565b600060208201905081810360008301526148af816143ef565b9050919050565b60006020820190506148cb6000830184614412565b92915050565b6000610140820190506148e7600083018d614412565b6148f4602083018c613f14565b614901604083018b613f23565b61490e606083018a614412565b61491b6080830189614412565b61492860a0830188614412565b61493560c0830187614412565b61494260e0830186614412565b614950610100830185613f14565b8181036101208301526149638184613f6b565b90509b9a5050505050505050505050565b600061497e61498f565b905061498a8282614cc7565b919050565b6000604051905090565b600067ffffffffffffffff8211156149b4576149b3614e2e565b5b6149bd82614e7b565b9050602081019050919050565b600067ffffffffffffffff8211156149e5576149e4614e2e565b5b6149ee82614e7b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a4982614be3565b9150614a5483614be3565b9250826fffffffffffffffffffffffffffffffff03821115614a7957614a78614d72565b5b828201905092915050565b6000614a8f82614c1f565b9150614a9a83614c1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614acf57614ace614d72565b5b828201905092915050565b6000614ae582614c1f565b9150614af083614c1f565b925082614b0057614aff614da1565b5b828204905092915050565b6000614b1682614c1f565b9150614b2183614c1f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5a57614b59614d72565b5b828202905092915050565b6000614b7082614c1f565b9150614b7b83614c1f565b925082821015614b8e57614b8d614d72565b5b828203905092915050565b6000614ba482614bff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c56578082015181840152602081019050614c3b565b83811115614c65576000848401525b50505050565b6000614c7682614c1f565b91506000821415614c8a57614c89614d72565b5b600182039050919050565b60006002820490506001821680614cad57607f821691505b60208210811415614cc157614cc0614dd0565b5b50919050565b614cd082614e7b565b810181811067ffffffffffffffff82111715614cef57614cee614e2e565b5b80604052505050565b6000614d0382614c1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d3657614d35614d72565b5b600182019050919050565b6000614d4c82614c1f565b9150614d5783614c1f565b925082614d6757614d66614da1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468616e206d696e74206c696d69740000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e000000000000600082015250565b7f43616c6c657220756e617574686f72697a656400000000000000000000000000600082015250565b7f2f6d657461646174612e6a736f6e000000000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d6178206672656520737570706c790000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f45746865722076616c75652073656e742069732062656c6f772074686520707260008201527f6963650000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d697373696e6720726563697069656e74206164647265737365730000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e742064697361626c656400000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e74206d696e696d756d20312c206d6178696d756d2060008201527f313030204e465473000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f6d657461646174612e6a736f6e00000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b61563881614b99565b811461564357600080fd5b50565b61564f81614bab565b811461565a57600080fd5b50565b61566681614bb7565b811461567157600080fd5b50565b61567d81614c1f565b811461568857600080fd5b5056fea264697066735822122058e0638a12460b1ca8db8d727985c47092422590731b71e93bc657ad2be6e73664736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d42696c6c6920546865204361740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034254430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d68747470733a2f2f6d696e7474656176326275636b65743134353532352d70726f642e73332e616d617a6f6e6177732e636f6d2f70726f7465637465642f75732d656173742d3125334162366161323731372d343235662d343339362d383566642d6637376636656561393437622f70726f6a656374732f66376239623637352d626538632d346265622d383133312d6236666566376164653264302f000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c80637c928fe91161012e578063bd2f6eb8116100ab578063e8a3d4851161006f578063e8a3d48514610809578063e985e9c514610834578063ea21e5eb14610871578063f2fde38b1461089a578063f676308a146108c357610230565b8063bd2f6eb81461074a578063bd3e19d414610773578063c87b56dd1461079e578063d62f3b1c146107db578063d64bc611146107f257610230565b806397304ced116100f257806397304ced146106885780639b63222b146106a4578063a22cb465146106cd578063b0505132146106f6578063b88d4fde1461072157610230565b80637c928fe9146105ae57806385dac12d146105ca5780638da5cb5b14610607578063941ada0e1461063257806395d89b411461065d57610230565b80634282b335116101bc5780634f6ccce7116101805780634f6ccce7146104b75780636352211e146104f45780636f8b44b01461053157806370a082311461055a578063715018a61461059757610230565b80634282b335146103e457806342842e0e1461040f57806344a0d68a146104385780634c0f38c2146104615780634f3e1efc1461048c57610230565b806318160ddd1161020357806318160ddd146103035780631865c57d1461032e57806323b872dd146103625780632f745c591461038b5780633fa40f94146103c857610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613e44565b6108ec565b60405161026991906144d9565b60405180910390f35b34801561027e57600080fd5b50610287610a36565b60405161029491906144f4565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613ee7565b610ac8565b6040516102d19190614472565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613db7565b610b4d565b005b34801561030f57600080fd5b50610318610c66565b60405161032591906148b6565b60405180910390f35b34801561033a57600080fd5b50610343610c6f565b6040516103599a999897969594939291906148d1565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613ca1565b610d7f565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613db7565b610d8f565b6040516103bf91906148b6565b60405180910390f35b6103e260048036038101906103dd9190613df7565b610f8d565b005b3480156103f057600080fd5b506103f96112e1565b60405161040691906148b6565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613ca1565b6112eb565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613ee7565b61130b565b005b34801561046d57600080fd5b506104766113c8565b60405161048391906148b6565b60405180910390f35b34801561049857600080fd5b506104a16113d2565b6040516104ae91906148b6565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190613ee7565b6113e1565b6040516104eb91906148b6565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613ee7565b611434565b6040516105289190614472565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613ee7565b61144a565b005b34801561056657600080fd5b50610581600480360381019061057c9190613c07565b611507565b60405161058e91906148b6565b60405180910390f35b3480156105a357600080fd5b506105ac6115f0565b005b6105c860048036038101906105c39190613ee7565b611678565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613ee7565b611846565b6040516105fe91906144d9565b60405180910390f35b34801561061357600080fd5b5061061c611899565b6040516106299190614472565b60405180910390f35b34801561063e57600080fd5b506106476118c3565b60405161065491906144d9565b60405180910390f35b34801561066957600080fd5b506106726118da565b60405161067f91906144f4565b60405180910390f35b6106a2600480360381019061069d9190613ee7565b61196c565b005b3480156106b057600080fd5b506106cb60048036038101906106c69190613c07565b611c23565b005b3480156106d957600080fd5b506106f460048036038101906106ef9190613d77565b611e33565b005b34801561070257600080fd5b5061070b611fb4565b60405161071891906148b6565b60405180910390f35b34801561072d57600080fd5b5061074860048036038101906107439190613cf4565b611fbe565b005b34801561075657600080fd5b50610771600480360381019061076c9190613ee7565b61201a565b005b34801561077f57600080fd5b506107886120d7565b60405161079591906148b6565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190613ee7565b6120e1565b6040516107d291906144f4565b60405180910390f35b3480156107e757600080fd5b506107f0612188565b005b3480156107fe57600080fd5b50610807612259565b005b34801561081557600080fd5b5061081e61232a565b60405161082b91906144f4565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613c61565b61237d565b60405161086891906144d9565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613e9e565b612411565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613c07565b6125eb565b005b3480156108cf57600080fd5b506108ea60048036038101906108e59190613ee7565b6126e3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2f5750610a2e826127a0565b5b9050919050565b606060018054610a4590614c95565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190614c95565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610ad38261280a565b610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990614896565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b5882611434565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614776565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610be8612817565b73ffffffffffffffffffffffffffffffffffffffff161480610c175750610c1681610c11612817565b61237d565b5b610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d90614636565b60405180910390fd5b610c6183838361281f565b505050565b60008054905090565b60008060008060008060008060006060601354600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900460ff16600954600a54610cc3610c66565b600c54600d54610cd1611899565b600e808054610cdf90614c95565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0b90614c95565b8015610d585780601f10610d2d57610100808354040283529160200191610d58565b820191906000526020600020905b815481529060010190602001808311610d3b57829003601f168201915b50505050509050995099509950995099509950995099509950995090919293949596979899565b610d8a8383836128d1565b505050565b6000610d9a83611507565b8210610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290614516565b60405180910390fd5b6000610de5610c66565b905060008060005b83811015610f4b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610edf57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f375786841415610f28578195505050505050610f87565b8380610f3390614cf8565b9450505b508080610f4390614cf8565b915050610ded565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90614836565b60405180910390fd5b92915050565b60026008541415610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90614876565b60405180910390fd5b600260088190555060008282905011611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890614756565b60405180910390fd5b600082829050118015611038575060648282905011155b611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90614856565b60405180910390fd5b600a54611097611085610c66565b84849050612e7890919063ffffffff16565b11156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90614656565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166110f7611899565b73ffffffffffffffffffffffffffffffffffffffff161480611130575061112c82829050600954612e8e90919063ffffffff16565b3410155b61116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614676565b60405180910390fd5b600034111561128057611180611899565b73ffffffffffffffffffffffffffffffffffffffff166108fc6111c26010546111b460125434612e8e90919063ffffffff16565b612ea490919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156111ed573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61125360105461124560115434612e8e90919063ffffffff16565b612ea490919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561127e573d6000803e3d6000fd5b505b60005b828290508110156112d4576112c08383838181106112a4576112a3614dff565b5b90506020020160208101906112b99190613c07565b6001612eba565b5080806112cc90614cf8565b915050611283565b5060016008819055505050565b6000600d54905090565b61130683838360405180602001604052806000815250611fbe565b505050565b611313612817565b73ffffffffffffffffffffffffffffffffffffffff16611331611899565b73ffffffffffffffffffffffffffffffffffffffff1614611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906146d6565b60405180910390fd5b806009819055507fde03a6195f6a732ff0af69781292526beecc585b4278fa1baa4d9dd578f88a5c816040516113bd91906148b6565b60405180910390a150565b6000600a54905090565b60006113dc610c66565b905090565b60006113eb610c66565b821061142c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611423906145d6565b60405180910390fd5b819050919050565b600061143f82612ecf565b600001519050919050565b611452612817565b73ffffffffffffffffffffffffffffffffffffffff16611470611899565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906146d6565b60405180910390fd5b80600a819055507f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c816040516114fc91906148b6565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90614696565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115f8612817565b73ffffffffffffffffffffffffffffffffffffffff16611616611899565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611663906146d6565b60405180910390fd5b611676600061302a565b565b600260085414156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590614876565b60405180910390fd5b60026008819055503373ffffffffffffffffffffffffffffffffffffffff166116e5611899565b73ffffffffffffffffffffffffffffffffffffffff1614806117135750600b60009054906101000a900460ff165b611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990614816565b60405180910390fd5b600c548161175e610c66565b6117689190614a84565b11156117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614616565b60405180910390fd5b600d548111156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590614536565b60405180910390fd5b60008111611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890614596565b60405180910390fd5b61183b33826130f0565b600160088190555050565b6000600b60009054906101000a900460ff1680156118785750600c548261186b610c66565b6118759190614a84565b11155b80156118865750600d548211155b80156118925750600082115b9050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600b60009054906101000a900460ff16905090565b6060600280546118e990614c95565b80601f016020809104026020016040519081016040528092919081815260200182805461191590614c95565b80156119625780601f1061193757610100808354040283529160200191611962565b820191906000526020600020905b81548152906001019060200180831161194557829003601f168201915b5050505050905090565b600260085414156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614876565b60405180910390fd5b60026008819055506000811180156119cb575060648111155b611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614856565b60405180910390fd5b600a54611a27611a18610c66565b83612e7890919063ffffffff16565b1115611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90614656565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611a87611899565b73ffffffffffffffffffffffffffffffffffffffff161480611abd5750611ab981600954612e8e90919063ffffffff16565b3410155b611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614676565b60405180910390fd5b6000341115611c0d57611b0d611899565b73ffffffffffffffffffffffffffffffffffffffff166108fc611b4f601054611b4160125434612e8e90919063ffffffff16565b612ea490919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611b7a573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611be0601054611bd260115434612e8e90919063ffffffff16565b612ea490919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611c0b573d6000803e3d6000fd5b505b611c173382612eba565b50600160088190555050565b611c2b612817565b73ffffffffffffffffffffffffffffffffffffffff16611c49611899565b73ffffffffffffffffffffffffffffffffffffffff1614611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c96906146d6565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0757600080fd5b505afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190613c34565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da3906145b6565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fd71a785e6a17cb0adfab30204e78a85411c5ef1c18714f35966f1664f890408160405160405180910390a250565b611e3b612817565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614716565b60405180910390fd5b8060066000611eb6612817565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f63612817565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fa891906144d9565b60405180910390a35050565b6000600c54905090565b611fc98484846128d1565b611fd58484848461310e565b612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906147b6565b60405180910390fd5b50505050565b612022612817565b73ffffffffffffffffffffffffffffffffffffffff16612040611899565b73ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d906146d6565b60405180910390fd5b80600d819055507fd42ac6ec13f1fff9e4589dda4dfc42edad65acb15194635771b11d3e108cdae3816040516120cc91906148b6565b60405180910390a150565b6000600954905090565b60606120ec8261280a565b61212b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612122906146f6565b60405180910390fd5b60006121356132a5565b905060008151116121555760405180602001604052806000815250612180565b8061215f84613337565b604051602001612170929190614421565b6040516020818303038152906040525b915050919050565b612190612817565b73ffffffffffffffffffffffffffffffffffffffff166121ae611899565b73ffffffffffffffffffffffffffffffffffffffff1614612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb906146d6565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f696ca93f2d646dcbf31ca7a85da7f825bd3796a6d7baa7321166e324bd25f4db600160405161224f91906144d9565b60405180910390a1565b612261612817565b73ffffffffffffffffffffffffffffffffffffffff1661227f611899565b73ffffffffffffffffffffffffffffffffffffffff16146122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc906146d6565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f696ca93f2d646dcbf31ca7a85da7f825bd3796a6d7baa7321166e324bd25f4db600060405161232091906144d9565b60405180910390a1565b606060006123366132a5565b905060008151116123565760405180602001604052806000815250612377565b806040516020016123679190614450565b6040516020818303038152906040525b91505090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612419612817565b73ffffffffffffffffffffffffffffffffffffffff16612437611899565b73ffffffffffffffffffffffffffffffffffffffff161461248d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612484906146d6565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124f557600080fd5b505afa158015612509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252d9190613c34565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461259a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612591906145b6565b60405180910390fd5b80600e90805190602001906125b0929190613976565b507f7978693abd0b21e74ac988b69d39920de613f19cfbd49da4171f223a25c76633816040516125e091906144f4565b60405180910390a150565b6125f3612817565b73ffffffffffffffffffffffffffffffffffffffff16612611611899565b73ffffffffffffffffffffffffffffffffffffffff1614612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e906146d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce90614556565b60405180910390fd5b6126e08161302a565b50565b6126eb612817565b73ffffffffffffffffffffffffffffffffffffffff16612709611899565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612756906146d6565b60405180910390fd5b80600c819055507fcc2cb9c93bdd0107c2409596dd628888b57746cf7868d4e44e4d92c9d40392068160405161279591906148b6565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006128dc82612ecf565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612903612817565b73ffffffffffffffffffffffffffffffffffffffff16148061295f5750612928612817565b73ffffffffffffffffffffffffffffffffffffffff1661294784610ac8565b73ffffffffffffffffffffffffffffffffffffffff16145b8061297b575061297a8260000151612975612817565b61237d565b5b9050806129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614736565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a26906146b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a96906145f6565b60405180910390fd5b612aac8585856001613498565b612abc600084846000015161281f565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612cc29190614a84565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e0857612d388161280a565b15612e07576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e70868686600161349e565b505050505050565b60008183612e869190614a84565b905092915050565b60008183612e9c9190614b0b565b905092915050565b60008183612eb29190614ada565b905092915050565b6000612ec683836130f0565b81905092915050565b612ed76139fc565b612ee08261280a565b612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1690614576565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613011578092505050613025565b50808061301d90614c6b565b915050612f25565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61310a8282604051806020016040528060008152506134a4565b5050565b600061312f8473ffffffffffffffffffffffffffffffffffffffff16613963565b15613298578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613158612817565b8786866040518563ffffffff1660e01b815260040161317a949392919061448d565b602060405180830381600087803b15801561319457600080fd5b505af19250505080156131c557506040513d601f19601f820116820180604052508101906131c29190613e71565b60015b613248573d80600081146131f5576040519150601f19603f3d011682016040523d82523d6000602084013e6131fa565b606091505b50600081511415613240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613237906147b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061329d565b600190505b949350505050565b6060600e80546132b490614c95565b80601f01602080910402602001604051908101604052809291908181526020018280546132e090614c95565b801561332d5780601f106133025761010080835404028352916020019161332d565b820191906000526020600020905b81548152906001019060200180831161331057829003601f168201915b5050505050905090565b6060600082141561337f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613493565b600082905060005b600082146133b157808061339a90614cf8565b915050600a826133aa9190614ada565b9150613387565b60008167ffffffffffffffff8111156133cd576133cc614e2e565b5b6040519080825280601f01601f1916602001820160405280156133ff5781602001600182028036833780820191505090505b5090505b6000851461348c576001826134189190614b65565b9150600a856134279190614d41565b60306134339190614a84565b60f81b81838151811061344957613448614dff565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134859190614ada565b9450613403565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561351a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613511906147f6565b60405180910390fd5b6135238161280a565b15613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355a906147d6565b60405180910390fd5b600083116135a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359d90614796565b60405180910390fd5b6135b36000858386613498565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516136b09190614a3e565b6fffffffffffffffffffffffffffffffff1681526020018583602001516136d79190614a3e565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561394657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138e6600088848861310e565b613925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391c906147b6565b60405180910390fd5b818061393090614cf8565b925050808061393e90614cf8565b915050613875565b508060008190555061395b600087858861349e565b505050505050565b600080823b905060008111915050919050565b82805461398290614c95565b90600052602060002090601f0160209004810192826139a457600085556139eb565b82601f106139bd57805160ff19168380011785556139eb565b828001600101855582156139eb579182015b828111156139ea5782518255916020019190600101906139cf565b5b5090506139f89190613a36565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613a4f576000816000905550600101613a37565b5090565b6000613a66613a6184614999565b614974565b905082815260208101848484011115613a8257613a81614e6c565b5b613a8d848285614c29565b509392505050565b6000613aa8613aa3846149ca565b614974565b905082815260208101848484011115613ac457613ac3614e6c565b5b613acf848285614c29565b509392505050565b600081359050613ae68161562f565b92915050565b600081519050613afb8161562f565b92915050565b60008083601f840112613b1757613b16614e62565b5b8235905067ffffffffffffffff811115613b3457613b33614e5d565b5b602083019150836020820283011115613b5057613b4f614e67565b5b9250929050565b600081359050613b6681615646565b92915050565b600081359050613b7b8161565d565b92915050565b600081519050613b908161565d565b92915050565b600082601f830112613bab57613baa614e62565b5b8135613bbb848260208601613a53565b91505092915050565b600082601f830112613bd957613bd8614e62565b5b8135613be9848260208601613a95565b91505092915050565b600081359050613c0181615674565b92915050565b600060208284031215613c1d57613c1c614e76565b5b6000613c2b84828501613ad7565b91505092915050565b600060208284031215613c4a57613c49614e76565b5b6000613c5884828501613aec565b91505092915050565b60008060408385031215613c7857613c77614e76565b5b6000613c8685828601613ad7565b9250506020613c9785828601613ad7565b9150509250929050565b600080600060608486031215613cba57613cb9614e76565b5b6000613cc886828701613ad7565b9350506020613cd986828701613ad7565b9250506040613cea86828701613bf2565b9150509250925092565b60008060008060808587031215613d0e57613d0d614e76565b5b6000613d1c87828801613ad7565b9450506020613d2d87828801613ad7565b9350506040613d3e87828801613bf2565b925050606085013567ffffffffffffffff811115613d5f57613d5e614e71565b5b613d6b87828801613b96565b91505092959194509250565b60008060408385031215613d8e57613d8d614e76565b5b6000613d9c85828601613ad7565b9250506020613dad85828601613b57565b9150509250929050565b60008060408385031215613dce57613dcd614e76565b5b6000613ddc85828601613ad7565b9250506020613ded85828601613bf2565b9150509250929050565b60008060208385031215613e0e57613e0d614e76565b5b600083013567ffffffffffffffff811115613e2c57613e2b614e71565b5b613e3885828601613b01565b92509250509250929050565b600060208284031215613e5a57613e59614e76565b5b6000613e6884828501613b6c565b91505092915050565b600060208284031215613e8757613e86614e76565b5b6000613e9584828501613b81565b91505092915050565b600060208284031215613eb457613eb3614e76565b5b600082013567ffffffffffffffff811115613ed257613ed1614e71565b5b613ede84828501613bc4565b91505092915050565b600060208284031215613efd57613efc614e76565b5b6000613f0b84828501613bf2565b91505092915050565b613f1d81614b99565b82525050565b613f2c81614bab565b82525050565b6000613f3d826149fb565b613f478185614a11565b9350613f57818560208601614c38565b613f6081614e7b565b840191505092915050565b6000613f7682614a06565b613f808185614a22565b9350613f90818560208601614c38565b613f9981614e7b565b840191505092915050565b6000613faf82614a06565b613fb98185614a33565b9350613fc9818560208601614c38565b80840191505092915050565b6000613fe2602283614a22565b9150613fed82614e8c565b604082019050919050565b6000614005601e83614a22565b915061401082614edb565b602082019050919050565b6000614028602683614a22565b915061403382614f04565b604082019050919050565b600061404b602a83614a22565b915061405682614f53565b604082019050919050565b600061406e601a83614a22565b915061407982614fa2565b602082019050919050565b6000614091601383614a22565b915061409c82614fcb565b602082019050919050565b60006140b4600e83614a33565b91506140bf82614ff4565b600e82019050919050565b60006140d7602383614a22565b91506140e28261501d565b604082019050919050565b60006140fa602583614a22565b91506141058261506c565b604082019050919050565b600061411d601883614a22565b9150614128826150bb565b602082019050919050565b6000614140603983614a22565b915061414b826150e4565b604082019050919050565b6000614163601283614a22565b915061416e82615133565b602082019050919050565b6000614186602383614a22565b91506141918261515c565b604082019050919050565b60006141a9602b83614a22565b91506141b4826151ab565b604082019050919050565b60006141cc602683614a22565b91506141d7826151fa565b604082019050919050565b60006141ef602083614a22565b91506141fa82615249565b602082019050919050565b6000614212602f83614a22565b915061421d82615272565b604082019050919050565b6000614235601a83614a22565b9150614240826152c1565b602082019050919050565b6000614258603283614a22565b9150614263826152ea565b604082019050919050565b600061427b601b83614a22565b915061428682615339565b602082019050919050565b600061429e602283614a22565b91506142a982615362565b604082019050919050565b60006142c1602383614a22565b91506142cc826153b1565b604082019050919050565b60006142e4603383614a22565b91506142ef82615400565b604082019050919050565b6000614307601d83614a22565b91506143128261544f565b602082019050919050565b600061432a602183614a22565b915061433582615478565b604082019050919050565b600061434d600d83614a22565b9150614358826154c7565b602082019050919050565b6000614370602e83614a22565b915061437b826154f0565b604082019050919050565b6000614393602883614a22565b915061439e8261553f565b604082019050919050565b60006143b6601f83614a22565b91506143c18261558e565b602082019050919050565b60006143d9600d83614a33565b91506143e4826155b7565b600d82019050919050565b60006143fc602d83614a22565b9150614407826155e0565b604082019050919050565b61441b81614c1f565b82525050565b600061442d8285613fa4565b91506144398284613fa4565b9150614444826140a7565b91508190509392505050565b600061445c8284613fa4565b9150614467826143cc565b915081905092915050565b60006020820190506144876000830184613f14565b92915050565b60006080820190506144a26000830187613f14565b6144af6020830186613f14565b6144bc6040830185614412565b81810360608301526144ce8184613f32565b905095945050505050565b60006020820190506144ee6000830184613f23565b92915050565b6000602082019050818103600083015261450e8184613f6b565b905092915050565b6000602082019050818103600083015261452f81613fd5565b9050919050565b6000602082019050818103600083015261454f81613ff8565b9050919050565b6000602082019050818103600083015261456f8161401b565b9050919050565b6000602082019050818103600083015261458f8161403e565b9050919050565b600060208201905081810360008301526145af81614061565b9050919050565b600060208201905081810360008301526145cf81614084565b9050919050565b600060208201905081810360008301526145ef816140ca565b9050919050565b6000602082019050818103600083015261460f816140ed565b9050919050565b6000602082019050818103600083015261462f81614110565b9050919050565b6000602082019050818103600083015261464f81614133565b9050919050565b6000602082019050818103600083015261466f81614156565b9050919050565b6000602082019050818103600083015261468f81614179565b9050919050565b600060208201905081810360008301526146af8161419c565b9050919050565b600060208201905081810360008301526146cf816141bf565b9050919050565b600060208201905081810360008301526146ef816141e2565b9050919050565b6000602082019050818103600083015261470f81614205565b9050919050565b6000602082019050818103600083015261472f81614228565b9050919050565b6000602082019050818103600083015261474f8161424b565b9050919050565b6000602082019050818103600083015261476f8161426e565b9050919050565b6000602082019050818103600083015261478f81614291565b9050919050565b600060208201905081810360008301526147af816142b4565b9050919050565b600060208201905081810360008301526147cf816142d7565b9050919050565b600060208201905081810360008301526147ef816142fa565b9050919050565b6000602082019050818103600083015261480f8161431d565b9050919050565b6000602082019050818103600083015261482f81614340565b9050919050565b6000602082019050818103600083015261484f81614363565b9050919050565b6000602082019050818103600083015261486f81614386565b9050919050565b6000602082019050818103600083015261488f816143a9565b9050919050565b600060208201905081810360008301526148af816143ef565b9050919050565b60006020820190506148cb6000830184614412565b92915050565b6000610140820190506148e7600083018d614412565b6148f4602083018c613f14565b614901604083018b613f23565b61490e606083018a614412565b61491b6080830189614412565b61492860a0830188614412565b61493560c0830187614412565b61494260e0830186614412565b614950610100830185613f14565b8181036101208301526149638184613f6b565b90509b9a5050505050505050505050565b600061497e61498f565b905061498a8282614cc7565b919050565b6000604051905090565b600067ffffffffffffffff8211156149b4576149b3614e2e565b5b6149bd82614e7b565b9050602081019050919050565b600067ffffffffffffffff8211156149e5576149e4614e2e565b5b6149ee82614e7b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a4982614be3565b9150614a5483614be3565b9250826fffffffffffffffffffffffffffffffff03821115614a7957614a78614d72565b5b828201905092915050565b6000614a8f82614c1f565b9150614a9a83614c1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614acf57614ace614d72565b5b828201905092915050565b6000614ae582614c1f565b9150614af083614c1f565b925082614b0057614aff614da1565b5b828204905092915050565b6000614b1682614c1f565b9150614b2183614c1f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5a57614b59614d72565b5b828202905092915050565b6000614b7082614c1f565b9150614b7b83614c1f565b925082821015614b8e57614b8d614d72565b5b828203905092915050565b6000614ba482614bff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c56578082015181840152602081019050614c3b565b83811115614c65576000848401525b50505050565b6000614c7682614c1f565b91506000821415614c8a57614c89614d72565b5b600182039050919050565b60006002820490506001821680614cad57607f821691505b60208210811415614cc157614cc0614dd0565b5b50919050565b614cd082614e7b565b810181811067ffffffffffffffff82111715614cef57614cee614e2e565b5b80604052505050565b6000614d0382614c1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d3657614d35614d72565b5b600182019050919050565b6000614d4c82614c1f565b9150614d5783614c1f565b925082614d6757614d66614da1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468616e206d696e74206c696d69740000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e000000000000600082015250565b7f43616c6c657220756e617574686f72697a656400000000000000000000000000600082015250565b7f2f6d657461646174612e6a736f6e000000000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d6178206672656520737570706c790000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f45746865722076616c75652073656e742069732062656c6f772074686520707260008201527f6963650000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d697373696e6720726563697069656e74206164647265737365730000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e742064697361626c656400000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e74206d696e696d756d20312c206d6178696d756d2060008201527f313030204e465473000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f6d657461646174612e6a736f6e00000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b61563881614b99565b811461564357600080fd5b50565b61564f81614bab565b811461565a57600080fd5b50565b61566681614bb7565b811461567157600080fd5b50565b61567d81614c1f565b811461568857600080fd5b5056fea264697066735822122058e0638a12460b1ca8db8d727985c47092422590731b71e93bc657ad2be6e73664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d42696c6c6920546865204361740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034254430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d68747470733a2f2f6d696e7474656176326275636b65743134353532352d70726f642e73332e616d617a6f6e6177732e636f6d2f70726f7465637465642f75732d656173742d3125334162366161323731372d343235662d343339362d383566642d6637376636656561393437622f70726f6a656374732f66376239623637352d626538632d346265622d383133312d6236666566376164653264302f000000
-----Decoded View---------------
Arg [0] : tokenName (string): Billi The Cat
Arg [1] : symbol (string): BTC
Arg [2] : cost (uint256): 20000000000000000
Arg [3] : supply (uint256): 5
Arg [4] : baseURL (string): https://mintteav2bucket145525-prod.s3.amazonaws.com/protected/us-east-1%3Ab6aa2717-425f-4396-85fd-f77f6eea947b/projects/f7b9b675-be8c-4beb-8131-b6fef7ade2d0/
Arg [5] : enablePublicMinting (bool): True
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 00000000000000000000000000000000000000000000000000470de4df820000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [7] : 42696c6c69205468652043617400000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [9] : 4254430000000000000000000000000000000000000000000000000000000000
Arg [10] : 000000000000000000000000000000000000000000000000000000000000009d
Arg [11] : 68747470733a2f2f6d696e7474656176326275636b65743134353532352d7072
Arg [12] : 6f642e73332e616d617a6f6e6177732e636f6d2f70726f7465637465642f7573
Arg [13] : 2d656173742d3125334162366161323731372d343235662d343339362d383566
Arg [14] : 642d6637376636656561393437622f70726f6a656374732f6637623962363735
Arg [15] : 2d626538632d346265622d383133312d6236666566376164653264302f000000
Deployed Bytecode Sourcemap
49134:7554:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37085:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38712:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40273:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39794:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35526:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55209:285;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;41149:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36190:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51416:814;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55946:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41382:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53379:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55675:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55762:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35703:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38521:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53586:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37521:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15617:94;;;;;;;;;;;;;:::i;:::-;;52310:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55021:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14966:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55498:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38881:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50662:624;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54471:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40559:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55856:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41630:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54031:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55594:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56141:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52858:131;;;;;;;;;;;;;:::i;:::-;;53137:134;;;;;;;;;;;;;:::i;:::-;;56482:203;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40918:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54205:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15866:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53802:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37085:372;37187:4;37239:25;37224:40;;;:11;:40;;;;:105;;;;37296:33;37281:48;;;:11;:48;;;;37224:105;:172;;;;37361:35;37346:50;;;:11;:50;;;;37224:172;:225;;;;37413:36;37437:11;37413:23;:36::i;:::-;37224:225;37204:245;;37085:372;;;:::o;38712:100::-;38766:13;38799:5;38792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38712:100;:::o;40273:214::-;40341:7;40369:16;40377:7;40369;:16::i;:::-;40361:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;40455:15;:24;40471:7;40455:24;;;;;;;;;;;;;;;;;;;;;40448:31;;40273:214;;;:::o;39794:413::-;39867:13;39883:24;39899:7;39883:15;:24::i;:::-;39867:40;;39932:5;39926:11;;:2;:11;;;;39918:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40027:5;40011:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;40036:37;40053:5;40060:12;:10;:12::i;:::-;40036:16;:37::i;:::-;40011:62;39989:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;40171:28;40180:2;40184:7;40193:5;40171:8;:28::i;:::-;39856:351;39794:413;;:::o;35526:100::-;35579:7;35606:12;;35599:19;;35526:100;:::o;55209:285::-;55250:7;55259;55268:4;55274:7;55283;55292;55301;55310;55319;55328:13;55357:7;;55366:13;;;;;;;;;;;55381:20;;;;;;;;;;;55403:9;;55414:10;;55426:13;:11;:13::i;:::-;55441:11;;55454:14;;55470:7;:5;:7::i;:::-;55479:8;55349:139;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55209:285;;;;;;;;;;:::o;41149:162::-;41275:28;41285:4;41291:2;41295:7;41275:9;:28::i;:::-;41149:162;;;:::o;36190:823::-;36279:7;36315:16;36325:5;36315:9;:16::i;:::-;36307:5;:24;36299:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36381:22;36406:13;:11;:13::i;:::-;36381:38;;36430:19;36464:25;36518:9;36513:426;36537:14;36533:1;:18;36513:426;;;36573:31;36607:11;:14;36619:1;36607:14;;;;;;;;;;;36573:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36666:1;36640:28;;:9;:14;;;:28;;;36636:103;;36709:9;:14;;;36689:34;;36636:103;36778:5;36757:26;;:17;:26;;;36753:175;;;36823:5;36808:11;:20;36804:77;;;36860:1;36853:8;;;;;;;;;36804:77;36899:13;;;;;:::i;:::-;;;;36753:175;36558:381;36553:3;;;;;:::i;:::-;;;;36513:426;;;;36949:56;;;;;;;;;;:::i;:::-;;;;;;;;36190:823;;;;;:::o;51416:814::-;1747:1;2343:7;;:19;;2335:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:1;2476:7;:18;;;;51536:1:::1;51518:10;;:17;;:19;51510:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51603:1;51583:10;;:17;;:21;:49;;;;;51629:3;51608:10;;:17;;:24;;51583:49;51575:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;51732:10;;51692:36;51714:13;:11;:13::i;:::-;51692:10;;:17;;:21;;:36;;;;:::i;:::-;:50;;51684:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;51791:10;51780:21;;:7;:5;:7::i;:::-;:21;;;:70;;;;51818:32;51832:10;;:17;;51818:9;;:13;;:32;;;;:::i;:::-;51805:9;:45;;51780:70;51772:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;51930:1;51918:9;:13;51915:216;;;51949:7;:5;:7::i;:::-;51941:25;;:82;51967:55;52006:15;;51967:34;51981:19;;51967:9;:13;;:34;;;;:::i;:::-;:38;;:55;;;;:::i;:::-;51941:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52040:13;;;;;;;;;;;52032:31;;:91;52064:58;52106:15;;52064:37;52078:22;;52064:9;:13;;:37;;;;:::i;:::-;:41;;:58;;;;:::i;:::-;52032:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51915:216;52147:6;52143:82;52159:10;;:17;;52157:1;:19;52143:82;;;52193:23;52199:10;;52210:1;52199:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52214:1;52193:5;:23::i;:::-;;52178:3;;;;;:::i;:::-;;;;52143:82;;;;1703:1:::0;2655:7;:22;;;;51416:814;;:::o;55946:92::-;55995:7;56018:14;;56011:21;;55946:92;:::o;41382:177::-;41512:39;41529:4;41535:2;41539:7;41512:39;;;;;;;;;;;;:16;:39::i;:::-;41382:177;;;:::o;53379:109::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53445:4:::1;53433:9;:16;;;;53461:21;53477:4;53461:21;;;;;;:::i;:::-;;;;;;;;53379:109:::0;:::o;55675:83::-;55720:7;55742:10;;55735:17;;55675:83;:::o;55762:90::-;55811:7;55833:13;:11;:13::i;:::-;55826:20;;55762:90;:::o;35703:187::-;35770:7;35806:13;:11;:13::i;:::-;35798:5;:21;35790:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35877:5;35870:12;;35703:187;;;:::o;38521:124::-;38585:7;38612:20;38624:7;38612:11;:20::i;:::-;:25;;;38605:32;;38521:124;;;:::o;53586:113::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53657:3:::1;53644:10;:16;;;;53672:21;53689:3;53672:21;;;;;;:::i;:::-;;;;;;;;53586:113:::0;:::o;37521:221::-;37585:7;37630:1;37613:19;;:5;:19;;;;37605:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37706:12;:19;37719:5;37706:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;37698:36;;37691:43;;37521:221;;;:::o;15617:94::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15682:21:::1;15700:1;15682:9;:21::i;:::-;15617:94::o:0;52310:401::-;1747:1;2343:7;;:19;;2335:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:1;2476:7;:18;;;;52408:10:::1;52397:21;;:7;:5;:7::i;:::-;:21;;;:45;;;;52422:20;;;;;;;;;;;52397:45;52389:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;52500:11;;52491:5;52475:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:36;;52467:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;52564:14;;52555:5;:23;;52547:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;52636:1;52628:5;:9;52620:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52677:28;52687:10;52699:5;52677:9;:28::i;:::-;1703:1:::0;2655:7;:22;;;;52310:401;:::o;55021:184::-;55078:4;55098:20;;;;;;;;;;;:60;;;;;55147:11;;55138:5;55122:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:36;;55098:60;:87;;;;;55171:14;;55162:5;:23;;55098:87;:100;;;;;55197:1;55189:5;:9;55098:100;55090:109;;55021:184;;;:::o;14966:87::-;15012:7;15039:6;;;;;;;;;;;15032:13;;14966:87;:::o;55498:92::-;55544:4;55564:20;;;;;;;;;;;55557:27;;55498:92;:::o;38881:104::-;38937:13;38970:7;38963:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38881:104;:::o;50662:624::-;1747:1;2343:7;;:19;;2335:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:1;2476:7;:18;;;;50756:1:::1;50748:5;:9;:25;;;;;50770:3;50761:5;:12;;50748:25;50740:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;50861:10;;50833:24;50843:13;:11;:13::i;:::-;50833:5;:9;;:24;;;;:::i;:::-;:38;;50825:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50920:10;50909:21;;:7;:5;:7::i;:::-;:21;;;:58;;;;50947:20;50961:5;50947:9;;:13;;:20;;;;:::i;:::-;50934:9;:33;;50909:58;50901:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;51047:1;51035:9;:13;51032:216;;;51066:7;:5;:7::i;:::-;51058:25;;:82;51084:55;51123:15;;51084:34;51098:19;;51084:9;:13;;:34;;;;:::i;:::-;:38;;:55;;;;:::i;:::-;51058:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51157:13;;;;;;;;;;;51149:31;;:91;51181:58;51223:15;;51181:37;51195:22;;51181:9;:13;;:37;;;;:::i;:::-;:41;;:58;;;;:::i;:::-;51149:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51032:216;51256:24;51262:10;51274:5;51256;:24::i;:::-;;1703:1:::0;2655:7;:22;;;;50662:624;:::o;54471:241::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54578:13:::1;;;;;;;;;;;54570:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54556:44;;:10;:44;;;54548:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54647:10;54631:13;;:26;;;;;;;;;;;;;;;;;;54695:10;54669:37;;;;;;;;;;;;54471:241:::0;:::o;40559:288::-;40666:12;:10;:12::i;:::-;40654:24;;:8;:24;;;;40646:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40767:8;40722:18;:32;40741:12;:10;:12::i;:::-;40722:32;;;;;;;;;;;;;;;:42;40755:8;40722:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;40820:8;40791:48;;40806:12;:10;:12::i;:::-;40791:48;;;40830:8;40791:48;;;;;;:::i;:::-;;;;;;;;40559:288;;:::o;55856:86::-;55902:7;55925:11;;55918:18;;55856:86;:::o;41630:355::-;41789:28;41799:4;41805:2;41809:7;41789:9;:28::i;:::-;41850:48;41873:4;41879:2;41883:7;41892:5;41850:22;:48::i;:::-;41828:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;41630:355;;;;:::o;54031:125::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54110:3:::1;54093:14;:20;;;;54125:25;54146:3;54125:25;;;;;;:::i;:::-;;;;;;;;54031:125:::0;:::o;55594:77::-;55634:7;55656:9;;55649:16;;55594:77;:::o;56141:337::-;56206:13;56236:16;56244:7;56236;:16::i;:::-;56228:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;56313:21;56337:10;:8;:10::i;:::-;56313:34;;56385:1;56367:7;56361:21;:25;:111;;;;;;;;;;;;;;;;;56413:7;56422:25;56439:7;56422:16;:25::i;:::-;56396:70;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56361:111;56354:118;;;56141:337;;;:::o;52858:131::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52938:4:::1;52915:20;;:27;;;;;;;;;;;;;;;;;;52954:29;52978:4;52954:29;;;;;;:::i;:::-;;;;;;;;52858:131::o:0;53137:134::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53218:5:::1;53195:20;;:28;;;;;;;;;;;;;;;;;;53235:30;53259:5;53235:30;;;;;;:::i;:::-;;;;;;;;53137:134::o:0;56482:203::-;56526:13;56548:21;56572:10;:8;:10::i;:::-;56548:34;;56620:1;56602:7;56596:21;:25;:83;;;;;;;;;;;;;;;;;56648:7;56631:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;56596:83;56589:90;;;56482:203;:::o;40918:164::-;41015:4;41039:18;:25;41058:5;41039:25;;;;;;;;;;;;;;;:35;41065:8;41039:35;;;;;;;;;;;;;;;;;;;;;;;;;41032:42;;40918:164;;;;:::o;54205:220::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54307:13:::1;;;;;;;;;;;54299:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54285:44;;:10;:44;;;54277:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54371:10;54360:8;:21;;;;;;;;;;;;:::i;:::-;;54393:26;54408:10;54393:26;;;;;;:::i;:::-;;;;;;;;54205:220:::0;:::o;15866:192::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15975:1:::1;15955:22;;:8;:22;;;;15947:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16031:19;16041:8;16031:9;:19::i;:::-;15866:192:::0;:::o;53802:116::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53875:3:::1;53861:11;:17;;;;53890:22;53908:3;53890:22;;;;;;:::i;:::-;;;;;;;;53802:116:::0;:::o;26952:157::-;27037:4;27076:25;27061:40;;;:11;:40;;;;27054:47;;26952:157;;;:::o;42240:111::-;42297:4;42331:12;;42321:7;:22;42314:29;;42240:111;;;:::o;13754:98::-;13807:7;13834:10;13827:17;;13754:98;:::o;46284:196::-;46426:2;46399:15;:24;46415:7;46399:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46464:7;46460:2;46444:28;;46453:5;46444:28;;;;;;;;;;;;46284:196;;;:::o;44383:1783::-;44498:35;44536:20;44548:7;44536:11;:20::i;:::-;44498:58;;44569:22;44611:13;:18;;;44595:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;44670:12;:10;:12::i;:::-;44646:36;;:20;44658:7;44646:11;:20::i;:::-;:36;;;44595:87;:154;;;;44699:50;44716:13;:18;;;44736:12;:10;:12::i;:::-;44699:16;:50::i;:::-;44595:154;44569:181;;44771:17;44763:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44886:4;44864:26;;:13;:18;;;:26;;;44856:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44966:1;44952:16;;:2;:16;;;;44944:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45023:43;45045:4;45051:2;45055:7;45064:1;45023:21;:43::i;:::-;45131:49;45148:1;45152:7;45161:13;:18;;;45131:8;:49::i;:::-;45415:1;45385:12;:18;45398:4;45385:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45459:1;45431:12;:16;45444:2;45431:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45507:43;;;;;;;;45522:2;45507:43;;;;;;45533:15;45507:43;;;;;45484:11;:20;45496:7;45484:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45790:19;45822:1;45812:7;:11;;;;:::i;:::-;45790:33;;45879:1;45838:43;;:11;:24;45850:11;45838:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;45834:227;;;45902:20;45910:11;45902:7;:20::i;:::-;45898:152;;;45970:64;;;;;;;;45985:13;:18;;;45970:64;;;;;;46005:13;:28;;;45970:64;;;;;45943:11;:24;45955:11;45943:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45898:152;45834:227;46097:7;46093:2;46078:27;;46087:4;46078:27;;;;;;;;;;;;46116:42;46137:4;46143:2;46147:7;46156:1;46116:20;:42::i;:::-;44487:1679;;;44383:1783;;;:::o;5484:98::-;5542:7;5573:1;5569;:5;;;;:::i;:::-;5562:12;;5484:98;;;;:::o;6222:::-;6280:7;6311:1;6307;:5;;;;:::i;:::-;6300:12;;6222:98;;;;:::o;6621:::-;6679:7;6710:1;6706;:5;;;;:::i;:::-;6699:12;;6621:98;;;;:::o;54848:130::-;54916:7;54931:20;54941:2;54945:5;54931:9;:20::i;:::-;54967:5;54960:12;;54848:130;;;;:::o;37987:472::-;38048:21;;:::i;:::-;38090:16;38098:7;38090;:16::i;:::-;38082:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38171:12;38186:7;38171:22;;38166:216;38220:31;38254:11;:17;38266:4;38254:17;;;;;;;;;;;38220:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38316:1;38290:28;;:9;:14;;;:28;;;38286:85;;38346:9;38339:16;;;;;;38286:85;38205:177;38197:6;;;;;:::i;:::-;;;;38166:216;;37987:472;;;;:::o;16066:173::-;16122:16;16141:6;;;;;;;;;;;16122:25;;16167:8;16158:6;;:17;;;;;;;;;;;;;;;;;;16222:8;16191:40;;16212:8;16191:40;;;;;;;;;;;;16111:128;16066:173;:::o;42359:104::-;42428:27;42438:2;42442:8;42428:27;;;;;;;;;;;;:9;:27::i;:::-;42359:104;;:::o;47045:804::-;47200:4;47221:15;:2;:13;;;:15::i;:::-;47217:625;;;47273:2;47257:36;;;47294:12;:10;:12::i;:::-;47308:4;47314:7;47323:5;47257:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47253:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47520:1;47503:6;:13;:18;47499:273;;;47546:61;;;;;;;;;;:::i;:::-;;;;;;;;47499:273;47722:6;47716:13;47707:6;47703:2;47699:15;47692:38;47253:534;47390:45;;;47380:55;;;:6;:55;;;;47373:62;;;;;47217:625;47826:4;47819:11;;47045:804;;;;;;;:::o;56042:95::-;56094:13;56123:8;56116:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56042:95;:::o;11370:723::-;11426:13;11656:1;11647:5;:10;11643:53;;;11674:10;;;;;;;;;;;;;;;;;;;;;11643:53;11706:12;11721:5;11706:20;;11737:14;11762:78;11777:1;11769:4;:9;11762:78;;11795:8;;;;;:::i;:::-;;;;11826:2;11818:10;;;;;:::i;:::-;;;11762:78;;;11850:19;11882:6;11872:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11850:39;;11900:154;11916:1;11907:5;:10;11900:154;;11944:1;11934:11;;;;;:::i;:::-;;;12011:2;12003:5;:10;;;;:::i;:::-;11990:2;:24;;;;:::i;:::-;11977:39;;11960:6;11967;11960:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;12040:2;12031:11;;;;;:::i;:::-;;;11900:154;;;12078:6;12064:21;;;;;11370:723;;;;:::o;48337:159::-;;;;;:::o;48908:158::-;;;;;:::o;42740:1389::-;42863:20;42886:12;;42863:35;;42931:1;42917:16;;:2;:16;;;;42909:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43116:21;43124:12;43116:7;:21::i;:::-;43115:22;43107:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43201:1;43190:8;:12;43182:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43255:61;43285:1;43289:2;43293:12;43307:8;43255:21;:61::i;:::-;43329:30;43362:12;:16;43375:2;43362:16;;;;;;;;;;;;;;;43329:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43408:135;;;;;;;;43464:8;43434:11;:19;;;:39;;;;:::i;:::-;43408:135;;;;;;43523:8;43488:11;:24;;;:44;;;;:::i;:::-;43408:135;;;;;43389:12;:16;43402:2;43389:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43582:43;;;;;;;;43597:2;43582:43;;;;;;43608:15;43582:43;;;;;43554:11;:25;43566:12;43554:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43638:20;43661:12;43638:35;;43691:9;43686:325;43710:8;43706:1;:12;43686:325;;;43770:12;43766:2;43745:38;;43762:1;43745:38;;;;;;;;;;;;43824:59;43855:1;43859:2;43863:12;43877:5;43824:22;:59::i;:::-;43798:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;43985:14;;;;;:::i;:::-;;;;43720:3;;;;;:::i;:::-;;;;43686:325;;;;44038:12;44023;:27;;;;44061:60;44090:1;44094:2;44098:12;44112:8;44061:20;:60::i;:::-;42852:1277;;;42740:1389;;;:::o;17012:387::-;17072:4;17280:12;17347:7;17335:20;17327:28;;17390:1;17383:4;:8;17376:15;;;17012:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1152:568::-;1225:8;1235:6;1285:3;1278:4;1270:6;1266:17;1262:27;1252:122;;1293:79;;:::i;:::-;1252:122;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:117;;;1458:79;;:::i;:::-;1422:117;1572:4;1564:6;1560:17;1548:29;;1626:3;1618:4;1610:6;1606:17;1596:8;1592:32;1589:41;1586:128;;;1633:79;;:::i;:::-;1586:128;1152:568;;;;;:::o;1726:133::-;1769:5;1807:6;1794:20;1785:29;;1823:30;1847:5;1823:30;:::i;:::-;1726:133;;;;:::o;1865:137::-;1910:5;1948:6;1935:20;1926:29;;1964:32;1990:5;1964:32;:::i;:::-;1865:137;;;;:::o;2008:141::-;2064:5;2095:6;2089:13;2080:22;;2111:32;2137:5;2111:32;:::i;:::-;2008:141;;;;:::o;2168:338::-;2223:5;2272:3;2265:4;2257:6;2253:17;2249:27;2239:122;;2280:79;;:::i;:::-;2239:122;2397:6;2384:20;2422:78;2496:3;2488:6;2481:4;2473:6;2469:17;2422:78;:::i;:::-;2413:87;;2229:277;2168:338;;;;:::o;2526:340::-;2582:5;2631:3;2624:4;2616:6;2612:17;2608:27;2598:122;;2639:79;;:::i;:::-;2598:122;2756:6;2743:20;2781:79;2856:3;2848:6;2841:4;2833:6;2829:17;2781:79;:::i;:::-;2772:88;;2588:278;2526:340;;;;:::o;2872:139::-;2918:5;2956:6;2943:20;2934:29;;2972:33;2999:5;2972:33;:::i;:::-;2872:139;;;;:::o;3017:329::-;3076:6;3125:2;3113:9;3104:7;3100:23;3096:32;3093:119;;;3131:79;;:::i;:::-;3093:119;3251:1;3276:53;3321:7;3312:6;3301:9;3297:22;3276:53;:::i;:::-;3266:63;;3222:117;3017:329;;;;:::o;3352:351::-;3422:6;3471:2;3459:9;3450:7;3446:23;3442:32;3439:119;;;3477:79;;:::i;:::-;3439:119;3597:1;3622:64;3678:7;3669:6;3658:9;3654:22;3622:64;:::i;:::-;3612:74;;3568:128;3352:351;;;;:::o;3709:474::-;3777:6;3785;3834:2;3822:9;3813:7;3809:23;3805:32;3802:119;;;3840:79;;:::i;:::-;3802:119;3960:1;3985:53;4030:7;4021:6;4010:9;4006:22;3985:53;:::i;:::-;3975:63;;3931:117;4087:2;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4058:118;3709:474;;;;;:::o;4189:619::-;4266:6;4274;4282;4331:2;4319:9;4310:7;4306:23;4302:32;4299:119;;;4337:79;;:::i;:::-;4299:119;4457:1;4482:53;4527:7;4518:6;4507:9;4503:22;4482:53;:::i;:::-;4472:63;;4428:117;4584:2;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;:::i;:::-;4600:63;;4555:118;4712:2;4738:53;4783:7;4774:6;4763:9;4759:22;4738:53;:::i;:::-;4728:63;;4683:118;4189:619;;;;;:::o;4814:943::-;4909:6;4917;4925;4933;4982:3;4970:9;4961:7;4957:23;4953:33;4950:120;;;4989:79;;:::i;:::-;4950:120;5109:1;5134:53;5179:7;5170:6;5159:9;5155:22;5134:53;:::i;:::-;5124:63;;5080:117;5236:2;5262:53;5307:7;5298:6;5287:9;5283:22;5262:53;:::i;:::-;5252:63;;5207:118;5364:2;5390:53;5435:7;5426:6;5415:9;5411:22;5390:53;:::i;:::-;5380:63;;5335:118;5520:2;5509:9;5505:18;5492:32;5551:18;5543:6;5540:30;5537:117;;;5573:79;;:::i;:::-;5537:117;5678:62;5732:7;5723:6;5712:9;5708:22;5678:62;:::i;:::-;5668:72;;5463:287;4814:943;;;;;;;:::o;5763:468::-;5828:6;5836;5885:2;5873:9;5864:7;5860:23;5856:32;5853:119;;;5891:79;;:::i;:::-;5853:119;6011:1;6036:53;6081:7;6072:6;6061:9;6057:22;6036:53;:::i;:::-;6026:63;;5982:117;6138:2;6164:50;6206:7;6197:6;6186:9;6182:22;6164:50;:::i;:::-;6154:60;;6109:115;5763:468;;;;;:::o;6237:474::-;6305:6;6313;6362:2;6350:9;6341:7;6337:23;6333:32;6330:119;;;6368:79;;:::i;:::-;6330:119;6488:1;6513:53;6558:7;6549:6;6538:9;6534:22;6513:53;:::i;:::-;6503:63;;6459:117;6615:2;6641:53;6686:7;6677:6;6666:9;6662:22;6641:53;:::i;:::-;6631:63;;6586:118;6237:474;;;;;:::o;6717:559::-;6803:6;6811;6860:2;6848:9;6839:7;6835:23;6831:32;6828:119;;;6866:79;;:::i;:::-;6828:119;7014:1;7003:9;6999:17;6986:31;7044:18;7036:6;7033:30;7030:117;;;7066:79;;:::i;:::-;7030:117;7179:80;7251:7;7242:6;7231:9;7227:22;7179:80;:::i;:::-;7161:98;;;;6957:312;6717:559;;;;;:::o;7282:327::-;7340:6;7389:2;7377:9;7368:7;7364:23;7360:32;7357:119;;;7395:79;;:::i;:::-;7357:119;7515:1;7540:52;7584:7;7575:6;7564:9;7560:22;7540:52;:::i;:::-;7530:62;;7486:116;7282:327;;;;:::o;7615:349::-;7684:6;7733:2;7721:9;7712:7;7708:23;7704:32;7701:119;;;7739:79;;:::i;:::-;7701:119;7859:1;7884:63;7939:7;7930:6;7919:9;7915:22;7884:63;:::i;:::-;7874:73;;7830:127;7615:349;;;;:::o;7970:509::-;8039:6;8088:2;8076:9;8067:7;8063:23;8059:32;8056:119;;;8094:79;;:::i;:::-;8056:119;8242:1;8231:9;8227:17;8214:31;8272:18;8264:6;8261:30;8258:117;;;8294:79;;:::i;:::-;8258:117;8399:63;8454:7;8445:6;8434:9;8430:22;8399:63;:::i;:::-;8389:73;;8185:287;7970:509;;;;:::o;8485:329::-;8544:6;8593:2;8581:9;8572:7;8568:23;8564:32;8561:119;;;8599:79;;:::i;:::-;8561:119;8719:1;8744:53;8789:7;8780:6;8769:9;8765:22;8744:53;:::i;:::-;8734:63;;8690:117;8485:329;;;;:::o;8820:118::-;8907:24;8925:5;8907:24;:::i;:::-;8902:3;8895:37;8820:118;;:::o;8944:109::-;9025:21;9040:5;9025:21;:::i;:::-;9020:3;9013:34;8944:109;;:::o;9059:360::-;9145:3;9173:38;9205:5;9173:38;:::i;:::-;9227:70;9290:6;9285:3;9227:70;:::i;:::-;9220:77;;9306:52;9351:6;9346:3;9339:4;9332:5;9328:16;9306:52;:::i;:::-;9383:29;9405:6;9383:29;:::i;:::-;9378:3;9374:39;9367:46;;9149:270;9059:360;;;;:::o;9425:364::-;9513:3;9541:39;9574:5;9541:39;:::i;:::-;9596:71;9660:6;9655:3;9596:71;:::i;:::-;9589:78;;9676:52;9721:6;9716:3;9709:4;9702:5;9698:16;9676:52;:::i;:::-;9753:29;9775:6;9753:29;:::i;:::-;9748:3;9744:39;9737:46;;9517:272;9425:364;;;;:::o;9795:377::-;9901:3;9929:39;9962:5;9929:39;:::i;:::-;9984:89;10066:6;10061:3;9984:89;:::i;:::-;9977:96;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:6;10154:3;10150:16;10143:23;;9905:267;9795:377;;;;:::o;10178:366::-;10320:3;10341:67;10405:2;10400:3;10341:67;:::i;:::-;10334:74;;10417:93;10506:3;10417:93;:::i;:::-;10535:2;10530:3;10526:12;10519:19;;10178:366;;;:::o;10550:::-;10692:3;10713:67;10777:2;10772:3;10713:67;:::i;:::-;10706:74;;10789:93;10878:3;10789:93;:::i;:::-;10907:2;10902:3;10898:12;10891:19;;10550:366;;;:::o;10922:::-;11064:3;11085:67;11149:2;11144:3;11085:67;:::i;:::-;11078:74;;11161:93;11250:3;11161:93;:::i;:::-;11279:2;11274:3;11270:12;11263:19;;10922:366;;;:::o;11294:::-;11436:3;11457:67;11521:2;11516:3;11457:67;:::i;:::-;11450:74;;11533:93;11622:3;11533:93;:::i;:::-;11651:2;11646:3;11642:12;11635:19;;11294:366;;;:::o;11666:::-;11808:3;11829:67;11893:2;11888:3;11829:67;:::i;:::-;11822:74;;11905:93;11994:3;11905:93;:::i;:::-;12023:2;12018:3;12014:12;12007:19;;11666:366;;;:::o;12038:::-;12180:3;12201:67;12265:2;12260:3;12201:67;:::i;:::-;12194:74;;12277:93;12366:3;12277:93;:::i;:::-;12395:2;12390:3;12386:12;12379:19;;12038:366;;;:::o;12410:402::-;12570:3;12591:85;12673:2;12668:3;12591:85;:::i;:::-;12584:92;;12685:93;12774:3;12685:93;:::i;:::-;12803:2;12798:3;12794:12;12787:19;;12410:402;;;:::o;12818:366::-;12960:3;12981:67;13045:2;13040:3;12981:67;:::i;:::-;12974:74;;13057:93;13146:3;13057:93;:::i;:::-;13175:2;13170:3;13166:12;13159:19;;12818:366;;;:::o;13190:::-;13332:3;13353:67;13417:2;13412:3;13353:67;:::i;:::-;13346:74;;13429:93;13518:3;13429:93;:::i;:::-;13547:2;13542:3;13538:12;13531:19;;13190:366;;;:::o;13562:::-;13704:3;13725:67;13789:2;13784:3;13725:67;:::i;:::-;13718:74;;13801:93;13890:3;13801:93;:::i;:::-;13919:2;13914:3;13910:12;13903:19;;13562:366;;;:::o;13934:::-;14076:3;14097:67;14161:2;14156:3;14097:67;:::i;:::-;14090:74;;14173:93;14262:3;14173:93;:::i;:::-;14291:2;14286:3;14282:12;14275:19;;13934:366;;;:::o;14306:::-;14448:3;14469:67;14533:2;14528:3;14469:67;:::i;:::-;14462:74;;14545:93;14634:3;14545:93;:::i;:::-;14663:2;14658:3;14654:12;14647:19;;14306:366;;;:::o;14678:::-;14820:3;14841:67;14905:2;14900:3;14841:67;:::i;:::-;14834:74;;14917:93;15006:3;14917:93;:::i;:::-;15035:2;15030:3;15026:12;15019:19;;14678:366;;;:::o;15050:::-;15192:3;15213:67;15277:2;15272:3;15213:67;:::i;:::-;15206:74;;15289:93;15378:3;15289:93;:::i;:::-;15407:2;15402:3;15398:12;15391:19;;15050:366;;;:::o;15422:::-;15564:3;15585:67;15649:2;15644:3;15585:67;:::i;:::-;15578:74;;15661:93;15750:3;15661:93;:::i;:::-;15779:2;15774:3;15770:12;15763:19;;15422:366;;;:::o;15794:::-;15936:3;15957:67;16021:2;16016:3;15957:67;:::i;:::-;15950:74;;16033:93;16122:3;16033:93;:::i;:::-;16151:2;16146:3;16142:12;16135:19;;15794:366;;;:::o;16166:::-;16308:3;16329:67;16393:2;16388:3;16329:67;:::i;:::-;16322:74;;16405:93;16494:3;16405:93;:::i;:::-;16523:2;16518:3;16514:12;16507:19;;16166:366;;;:::o;16538:::-;16680:3;16701:67;16765:2;16760:3;16701:67;:::i;:::-;16694:74;;16777:93;16866:3;16777:93;:::i;:::-;16895:2;16890:3;16886:12;16879:19;;16538:366;;;:::o;16910:::-;17052:3;17073:67;17137:2;17132:3;17073:67;:::i;:::-;17066:74;;17149:93;17238:3;17149:93;:::i;:::-;17267:2;17262:3;17258:12;17251:19;;16910:366;;;:::o;17282:::-;17424:3;17445:67;17509:2;17504:3;17445:67;:::i;:::-;17438:74;;17521:93;17610:3;17521:93;:::i;:::-;17639:2;17634:3;17630:12;17623:19;;17282:366;;;:::o;17654:::-;17796:3;17817:67;17881:2;17876:3;17817:67;:::i;:::-;17810:74;;17893:93;17982:3;17893:93;:::i;:::-;18011:2;18006:3;18002:12;17995:19;;17654:366;;;:::o;18026:::-;18168:3;18189:67;18253:2;18248:3;18189:67;:::i;:::-;18182:74;;18265:93;18354:3;18265:93;:::i;:::-;18383:2;18378:3;18374:12;18367:19;;18026:366;;;:::o;18398:::-;18540:3;18561:67;18625:2;18620:3;18561:67;:::i;:::-;18554:74;;18637:93;18726:3;18637:93;:::i;:::-;18755:2;18750:3;18746:12;18739:19;;18398:366;;;:::o;18770:::-;18912:3;18933:67;18997:2;18992:3;18933:67;:::i;:::-;18926:74;;19009:93;19098:3;19009:93;:::i;:::-;19127:2;19122:3;19118:12;19111:19;;18770:366;;;:::o;19142:::-;19284:3;19305:67;19369:2;19364:3;19305:67;:::i;:::-;19298:74;;19381:93;19470:3;19381:93;:::i;:::-;19499:2;19494:3;19490:12;19483:19;;19142:366;;;:::o;19514:::-;19656:3;19677:67;19741:2;19736:3;19677:67;:::i;:::-;19670:74;;19753:93;19842:3;19753:93;:::i;:::-;19871:2;19866:3;19862:12;19855:19;;19514:366;;;:::o;19886:::-;20028:3;20049:67;20113:2;20108:3;20049:67;:::i;:::-;20042:74;;20125:93;20214:3;20125:93;:::i;:::-;20243:2;20238:3;20234:12;20227:19;;19886:366;;;:::o;20258:::-;20400:3;20421:67;20485:2;20480:3;20421:67;:::i;:::-;20414:74;;20497:93;20586:3;20497:93;:::i;:::-;20615:2;20610:3;20606:12;20599:19;;20258:366;;;:::o;20630:::-;20772:3;20793:67;20857:2;20852:3;20793:67;:::i;:::-;20786:74;;20869:93;20958:3;20869:93;:::i;:::-;20987:2;20982:3;20978:12;20971:19;;20630:366;;;:::o;21374:402::-;21534:3;21555:85;21637:2;21632:3;21555:85;:::i;:::-;21548:92;;21649:93;21738:3;21649:93;:::i;:::-;21767:2;21762:3;21758:12;21751:19;;21374:402;;;:::o;21782:366::-;21924:3;21945:67;22009:2;22004:3;21945:67;:::i;:::-;21938:74;;22021:93;22110:3;22021:93;:::i;:::-;22139:2;22134:3;22130:12;22123:19;;21782:366;;;:::o;22154:118::-;22241:24;22259:5;22241:24;:::i;:::-;22236:3;22229:37;22154:118;;:::o;22278:701::-;22559:3;22581:95;22672:3;22663:6;22581:95;:::i;:::-;22574:102;;22693:95;22784:3;22775:6;22693:95;:::i;:::-;22686:102;;22805:148;22949:3;22805:148;:::i;:::-;22798:155;;22970:3;22963:10;;22278:701;;;;;:::o;22985:541::-;23218:3;23240:95;23331:3;23322:6;23240:95;:::i;:::-;23233:102;;23352:148;23496:3;23352:148;:::i;:::-;23345:155;;23517:3;23510:10;;22985:541;;;;:::o;23532:222::-;23625:4;23663:2;23652:9;23648:18;23640:26;;23676:71;23744:1;23733:9;23729:17;23720:6;23676:71;:::i;:::-;23532:222;;;;:::o;23760:640::-;23955:4;23993:3;23982:9;23978:19;23970:27;;24007:71;24075:1;24064:9;24060:17;24051:6;24007:71;:::i;:::-;24088:72;24156:2;24145:9;24141:18;24132:6;24088:72;:::i;:::-;24170;24238:2;24227:9;24223:18;24214:6;24170:72;:::i;:::-;24289:9;24283:4;24279:20;24274:2;24263:9;24259:18;24252:48;24317:76;24388:4;24379:6;24317:76;:::i;:::-;24309:84;;23760:640;;;;;;;:::o;24406:210::-;24493:4;24531:2;24520:9;24516:18;24508:26;;24544:65;24606:1;24595:9;24591:17;24582:6;24544:65;:::i;:::-;24406:210;;;;:::o;24622:313::-;24735:4;24773:2;24762:9;24758:18;24750:26;;24822:9;24816:4;24812:20;24808:1;24797:9;24793:17;24786:47;24850:78;24923:4;24914:6;24850:78;:::i;:::-;24842:86;;24622:313;;;;:::o;24941:419::-;25107:4;25145:2;25134:9;25130:18;25122:26;;25194:9;25188:4;25184:20;25180:1;25169:9;25165:17;25158:47;25222:131;25348:4;25222:131;:::i;:::-;25214:139;;24941:419;;;:::o;25366:::-;25532:4;25570:2;25559:9;25555:18;25547:26;;25619:9;25613:4;25609:20;25605:1;25594:9;25590:17;25583:47;25647:131;25773:4;25647:131;:::i;:::-;25639:139;;25366:419;;;:::o;25791:::-;25957:4;25995:2;25984:9;25980:18;25972:26;;26044:9;26038:4;26034:20;26030:1;26019:9;26015:17;26008:47;26072:131;26198:4;26072:131;:::i;:::-;26064:139;;25791:419;;;:::o;26216:::-;26382:4;26420:2;26409:9;26405:18;26397:26;;26469:9;26463:4;26459:20;26455:1;26444:9;26440:17;26433:47;26497:131;26623:4;26497:131;:::i;:::-;26489:139;;26216:419;;;:::o;26641:::-;26807:4;26845:2;26834:9;26830:18;26822:26;;26894:9;26888:4;26884:20;26880:1;26869:9;26865:17;26858:47;26922:131;27048:4;26922:131;:::i;:::-;26914:139;;26641:419;;;:::o;27066:::-;27232:4;27270:2;27259:9;27255:18;27247:26;;27319:9;27313:4;27309:20;27305:1;27294:9;27290:17;27283:47;27347:131;27473:4;27347:131;:::i;:::-;27339:139;;27066:419;;;:::o;27491:::-;27657:4;27695:2;27684:9;27680:18;27672:26;;27744:9;27738:4;27734:20;27730:1;27719:9;27715:17;27708:47;27772:131;27898:4;27772:131;:::i;:::-;27764:139;;27491:419;;;:::o;27916:::-;28082:4;28120:2;28109:9;28105:18;28097:26;;28169:9;28163:4;28159:20;28155:1;28144:9;28140:17;28133:47;28197:131;28323:4;28197:131;:::i;:::-;28189:139;;27916:419;;;:::o;28341:::-;28507:4;28545:2;28534:9;28530:18;28522:26;;28594:9;28588:4;28584:20;28580:1;28569:9;28565:17;28558:47;28622:131;28748:4;28622:131;:::i;:::-;28614:139;;28341:419;;;:::o;28766:::-;28932:4;28970:2;28959:9;28955:18;28947:26;;29019:9;29013:4;29009:20;29005:1;28994:9;28990:17;28983:47;29047:131;29173:4;29047:131;:::i;:::-;29039:139;;28766:419;;;:::o;29191:::-;29357:4;29395:2;29384:9;29380:18;29372:26;;29444:9;29438:4;29434:20;29430:1;29419:9;29415:17;29408:47;29472:131;29598:4;29472:131;:::i;:::-;29464:139;;29191:419;;;:::o;29616:::-;29782:4;29820:2;29809:9;29805:18;29797:26;;29869:9;29863:4;29859:20;29855:1;29844:9;29840:17;29833:47;29897:131;30023:4;29897:131;:::i;:::-;29889:139;;29616:419;;;:::o;30041:::-;30207:4;30245:2;30234:9;30230:18;30222:26;;30294:9;30288:4;30284:20;30280:1;30269:9;30265:17;30258:47;30322:131;30448:4;30322:131;:::i;:::-;30314:139;;30041:419;;;:::o;30466:::-;30632:4;30670:2;30659:9;30655:18;30647:26;;30719:9;30713:4;30709:20;30705:1;30694:9;30690:17;30683:47;30747:131;30873:4;30747:131;:::i;:::-;30739:139;;30466:419;;;:::o;30891:::-;31057:4;31095:2;31084:9;31080:18;31072:26;;31144:9;31138:4;31134:20;31130:1;31119:9;31115:17;31108:47;31172:131;31298:4;31172:131;:::i;:::-;31164:139;;30891:419;;;:::o;31316:::-;31482:4;31520:2;31509:9;31505:18;31497:26;;31569:9;31563:4;31559:20;31555:1;31544:9;31540:17;31533:47;31597:131;31723:4;31597:131;:::i;:::-;31589:139;;31316:419;;;:::o;31741:::-;31907:4;31945:2;31934:9;31930:18;31922:26;;31994:9;31988:4;31984:20;31980:1;31969:9;31965:17;31958:47;32022:131;32148:4;32022:131;:::i;:::-;32014:139;;31741:419;;;:::o;32166:::-;32332:4;32370:2;32359:9;32355:18;32347:26;;32419:9;32413:4;32409:20;32405:1;32394:9;32390:17;32383:47;32447:131;32573:4;32447:131;:::i;:::-;32439:139;;32166:419;;;:::o;32591:::-;32757:4;32795:2;32784:9;32780:18;32772:26;;32844:9;32838:4;32834:20;32830:1;32819:9;32815:17;32808:47;32872:131;32998:4;32872:131;:::i;:::-;32864:139;;32591:419;;;:::o;33016:::-;33182:4;33220:2;33209:9;33205:18;33197:26;;33269:9;33263:4;33259:20;33255:1;33244:9;33240:17;33233:47;33297:131;33423:4;33297:131;:::i;:::-;33289:139;;33016:419;;;:::o;33441:::-;33607:4;33645:2;33634:9;33630:18;33622:26;;33694:9;33688:4;33684:20;33680:1;33669:9;33665:17;33658:47;33722:131;33848:4;33722:131;:::i;:::-;33714:139;;33441:419;;;:::o;33866:::-;34032:4;34070:2;34059:9;34055:18;34047:26;;34119:9;34113:4;34109:20;34105:1;34094:9;34090:17;34083:47;34147:131;34273:4;34147:131;:::i;:::-;34139:139;;33866:419;;;:::o;34291:::-;34457:4;34495:2;34484:9;34480:18;34472:26;;34544:9;34538:4;34534:20;34530:1;34519:9;34515:17;34508:47;34572:131;34698:4;34572:131;:::i;:::-;34564:139;;34291:419;;;:::o;34716:::-;34882:4;34920:2;34909:9;34905:18;34897:26;;34969:9;34963:4;34959:20;34955:1;34944:9;34940:17;34933:47;34997:131;35123:4;34997:131;:::i;:::-;34989:139;;34716:419;;;:::o;35141:::-;35307:4;35345:2;35334:9;35330:18;35322:26;;35394:9;35388:4;35384:20;35380:1;35369:9;35365:17;35358:47;35422:131;35548:4;35422:131;:::i;:::-;35414:139;;35141:419;;;:::o;35566:::-;35732:4;35770:2;35759:9;35755:18;35747:26;;35819:9;35813:4;35809:20;35805:1;35794:9;35790:17;35783:47;35847:131;35973:4;35847:131;:::i;:::-;35839:139;;35566:419;;;:::o;35991:::-;36157:4;36195:2;36184:9;36180:18;36172:26;;36244:9;36238:4;36234:20;36230:1;36219:9;36215:17;36208:47;36272:131;36398:4;36272:131;:::i;:::-;36264:139;;35991:419;;;:::o;36416:::-;36582:4;36620:2;36609:9;36605:18;36597:26;;36669:9;36663:4;36659:20;36655:1;36644:9;36640:17;36633:47;36697:131;36823:4;36697:131;:::i;:::-;36689:139;;36416:419;;;:::o;37266:::-;37432:4;37470:2;37459:9;37455:18;37447:26;;37519:9;37513:4;37509:20;37505:1;37494:9;37490:17;37483:47;37547:131;37673:4;37547:131;:::i;:::-;37539:139;;37266:419;;;:::o;37691:222::-;37784:4;37822:2;37811:9;37807:18;37799:26;;37835:71;37903:1;37892:9;37888:17;37879:6;37835:71;:::i;:::-;37691:222;;;;:::o;37919:1298::-;38278:4;38316:3;38305:9;38301:19;38293:27;;38330:71;38398:1;38387:9;38383:17;38374:6;38330:71;:::i;:::-;38411:72;38479:2;38468:9;38464:18;38455:6;38411:72;:::i;:::-;38493:66;38555:2;38544:9;38540:18;38531:6;38493:66;:::i;:::-;38569:72;38637:2;38626:9;38622:18;38613:6;38569:72;:::i;:::-;38651:73;38719:3;38708:9;38704:19;38695:6;38651:73;:::i;:::-;38734;38802:3;38791:9;38787:19;38778:6;38734:73;:::i;:::-;38817;38885:3;38874:9;38870:19;38861:6;38817:73;:::i;:::-;38900;38968:3;38957:9;38953:19;38944:6;38900:73;:::i;:::-;38983;39051:3;39040:9;39036:19;39027:6;38983:73;:::i;:::-;39104:9;39098:4;39094:20;39088:3;39077:9;39073:19;39066:49;39132:78;39205:4;39196:6;39132:78;:::i;:::-;39124:86;;37919:1298;;;;;;;;;;;;;:::o;39223:129::-;39257:6;39284:20;;:::i;:::-;39274:30;;39313:33;39341:4;39333:6;39313:33;:::i;:::-;39223:129;;;:::o;39358:75::-;39391:6;39424:2;39418:9;39408:19;;39358:75;:::o;39439:307::-;39500:4;39590:18;39582:6;39579:30;39576:56;;;39612:18;;:::i;:::-;39576:56;39650:29;39672:6;39650:29;:::i;:::-;39642:37;;39734:4;39728;39724:15;39716:23;;39439:307;;;:::o;39752:308::-;39814:4;39904:18;39896:6;39893:30;39890:56;;;39926:18;;:::i;:::-;39890:56;39964:29;39986:6;39964:29;:::i;:::-;39956:37;;40048:4;40042;40038:15;40030:23;;39752:308;;;:::o;40066:98::-;40117:6;40151:5;40145:12;40135:22;;40066:98;;;:::o;40170:99::-;40222:6;40256:5;40250:12;40240:22;;40170:99;;;:::o;40275:168::-;40358:11;40392:6;40387:3;40380:19;40432:4;40427:3;40423:14;40408:29;;40275:168;;;;:::o;40449:169::-;40533:11;40567:6;40562:3;40555:19;40607:4;40602:3;40598:14;40583:29;;40449:169;;;;:::o;40624:148::-;40726:11;40763:3;40748:18;;40624:148;;;;:::o;40778:273::-;40818:3;40837:20;40855:1;40837:20;:::i;:::-;40832:25;;40871:20;40889:1;40871:20;:::i;:::-;40866:25;;40993:1;40957:34;40953:42;40950:1;40947:49;40944:75;;;40999:18;;:::i;:::-;40944:75;41043:1;41040;41036:9;41029:16;;40778:273;;;;:::o;41057:305::-;41097:3;41116:20;41134:1;41116:20;:::i;:::-;41111:25;;41150:20;41168:1;41150:20;:::i;:::-;41145:25;;41304:1;41236:66;41232:74;41229:1;41226:81;41223:107;;;41310:18;;:::i;:::-;41223:107;41354:1;41351;41347:9;41340:16;;41057:305;;;;:::o;41368:185::-;41408:1;41425:20;41443:1;41425:20;:::i;:::-;41420:25;;41459:20;41477:1;41459:20;:::i;:::-;41454:25;;41498:1;41488:35;;41503:18;;:::i;:::-;41488:35;41545:1;41542;41538:9;41533:14;;41368:185;;;;:::o;41559:348::-;41599:7;41622:20;41640:1;41622:20;:::i;:::-;41617:25;;41656:20;41674:1;41656:20;:::i;:::-;41651:25;;41844:1;41776:66;41772:74;41769:1;41766:81;41761:1;41754:9;41747:17;41743:105;41740:131;;;41851:18;;:::i;:::-;41740:131;41899:1;41896;41892:9;41881:20;;41559:348;;;;:::o;41913:191::-;41953:4;41973:20;41991:1;41973:20;:::i;:::-;41968:25;;42007:20;42025:1;42007:20;:::i;:::-;42002:25;;42046:1;42043;42040:8;42037:34;;;42051:18;;:::i;:::-;42037:34;42096:1;42093;42089:9;42081:17;;41913:191;;;;:::o;42110:96::-;42147:7;42176:24;42194:5;42176:24;:::i;:::-;42165:35;;42110:96;;;:::o;42212:90::-;42246:7;42289:5;42282:13;42275:21;42264:32;;42212:90;;;:::o;42308:149::-;42344:7;42384:66;42377:5;42373:78;42362:89;;42308:149;;;:::o;42463:118::-;42500:7;42540:34;42533:5;42529:46;42518:57;;42463:118;;;:::o;42587:126::-;42624:7;42664:42;42657:5;42653:54;42642:65;;42587:126;;;:::o;42719:77::-;42756:7;42785:5;42774:16;;42719:77;;;:::o;42802:154::-;42886:6;42881:3;42876;42863:30;42948:1;42939:6;42934:3;42930:16;42923:27;42802:154;;;:::o;42962:307::-;43030:1;43040:113;43054:6;43051:1;43048:13;43040:113;;;43139:1;43134:3;43130:11;43124:18;43120:1;43115:3;43111:11;43104:39;43076:2;43073:1;43069:10;43064:15;;43040:113;;;43171:6;43168:1;43165:13;43162:101;;;43251:1;43242:6;43237:3;43233:16;43226:27;43162:101;43011:258;42962:307;;;:::o;43275:171::-;43314:3;43337:24;43355:5;43337:24;:::i;:::-;43328:33;;43383:4;43376:5;43373:15;43370:41;;;43391:18;;:::i;:::-;43370:41;43438:1;43431:5;43427:13;43420:20;;43275:171;;;:::o;43452:320::-;43496:6;43533:1;43527:4;43523:12;43513:22;;43580:1;43574:4;43570:12;43601:18;43591:81;;43657:4;43649:6;43645:17;43635:27;;43591:81;43719:2;43711:6;43708:14;43688:18;43685:38;43682:84;;;43738:18;;:::i;:::-;43682:84;43503:269;43452:320;;;:::o;43778:281::-;43861:27;43883:4;43861:27;:::i;:::-;43853:6;43849:40;43991:6;43979:10;43976:22;43955:18;43943:10;43940:34;43937:62;43934:88;;;44002:18;;:::i;:::-;43934:88;44042:10;44038:2;44031:22;43821:238;43778:281;;:::o;44065:233::-;44104:3;44127:24;44145:5;44127:24;:::i;:::-;44118:33;;44173:66;44166:5;44163:77;44160:103;;;44243:18;;:::i;:::-;44160:103;44290:1;44283:5;44279:13;44272:20;;44065:233;;;:::o;44304:176::-;44336:1;44353:20;44371:1;44353:20;:::i;:::-;44348:25;;44387:20;44405:1;44387:20;:::i;:::-;44382:25;;44426:1;44416:35;;44431:18;;:::i;:::-;44416:35;44472:1;44469;44465:9;44460:14;;44304:176;;;;:::o;44486:180::-;44534:77;44531:1;44524:88;44631:4;44628:1;44621:15;44655:4;44652:1;44645:15;44672:180;44720:77;44717:1;44710:88;44817:4;44814:1;44807:15;44841:4;44838:1;44831:15;44858:180;44906:77;44903:1;44896:88;45003:4;45000:1;44993:15;45027:4;45024:1;45017:15;45044:180;45092:77;45089:1;45082:88;45189:4;45186:1;45179:15;45213:4;45210:1;45203:15;45230:180;45278:77;45275:1;45268:88;45375:4;45372:1;45365:15;45399:4;45396:1;45389:15;45416:117;45525:1;45522;45515:12;45539:117;45648:1;45645;45638:12;45662:117;45771:1;45768;45761:12;45785:117;45894:1;45891;45884:12;45908:117;46017:1;46014;46007:12;46031:117;46140:1;46137;46130:12;46154:102;46195:6;46246:2;46242:7;46237:2;46230:5;46226:14;46222:28;46212:38;;46154:102;;;:::o;46262:221::-;46402:34;46398:1;46390:6;46386:14;46379:58;46471:4;46466:2;46458:6;46454:15;46447:29;46262:221;:::o;46489:180::-;46629:32;46625:1;46617:6;46613:14;46606:56;46489:180;:::o;46675:225::-;46815:34;46811:1;46803:6;46799:14;46792:58;46884:8;46879:2;46871:6;46867:15;46860:33;46675:225;:::o;46906:229::-;47046:34;47042:1;47034:6;47030:14;47023:58;47115:12;47110:2;47102:6;47098:15;47091:37;46906:229;:::o;47141:176::-;47281:28;47277:1;47269:6;47265:14;47258:52;47141:176;:::o;47323:169::-;47463:21;47459:1;47451:6;47447:14;47440:45;47323:169;:::o;47498:164::-;47638:16;47634:1;47626:6;47622:14;47615:40;47498:164;:::o;47668:222::-;47808:34;47804:1;47796:6;47792:14;47785:58;47877:5;47872:2;47864:6;47860:15;47853:30;47668:222;:::o;47896:224::-;48036:34;48032:1;48024:6;48020:14;48013:58;48105:7;48100:2;48092:6;48088:15;48081:32;47896:224;:::o;48126:174::-;48266:26;48262:1;48254:6;48250:14;48243:50;48126:174;:::o;48306:244::-;48446:34;48442:1;48434:6;48430:14;48423:58;48515:27;48510:2;48502:6;48498:15;48491:52;48306:244;:::o;48556:168::-;48696:20;48692:1;48684:6;48680:14;48673:44;48556:168;:::o;48730:222::-;48870:34;48866:1;48858:6;48854:14;48847:58;48939:5;48934:2;48926:6;48922:15;48915:30;48730:222;:::o;48958:230::-;49098:34;49094:1;49086:6;49082:14;49075:58;49167:13;49162:2;49154:6;49150:15;49143:38;48958:230;:::o;49194:225::-;49334:34;49330:1;49322:6;49318:14;49311:58;49403:8;49398:2;49390:6;49386:15;49379:33;49194:225;:::o;49425:182::-;49565:34;49561:1;49553:6;49549:14;49542:58;49425:182;:::o;49613:234::-;49753:34;49749:1;49741:6;49737:14;49730:58;49822:17;49817:2;49809:6;49805:15;49798:42;49613:234;:::o;49853:176::-;49993:28;49989:1;49981:6;49977:14;49970:52;49853:176;:::o;50035:237::-;50175:34;50171:1;50163:6;50159:14;50152:58;50244:20;50239:2;50231:6;50227:15;50220:45;50035:237;:::o;50278:177::-;50418:29;50414:1;50406:6;50402:14;50395:53;50278:177;:::o;50461:221::-;50601:34;50597:1;50589:6;50585:14;50578:58;50670:4;50665:2;50657:6;50653:15;50646:29;50461:221;:::o;50688:222::-;50828:34;50824:1;50816:6;50812:14;50805:58;50897:5;50892:2;50884:6;50880:15;50873:30;50688:222;:::o;50916:238::-;51056:34;51052:1;51044:6;51040:14;51033:58;51125:21;51120:2;51112:6;51108:15;51101:46;50916:238;:::o;51160:179::-;51300:31;51296:1;51288:6;51284:14;51277:55;51160:179;:::o;51345:220::-;51485:34;51481:1;51473:6;51469:14;51462:58;51554:3;51549:2;51541:6;51537:15;51530:28;51345:220;:::o;51571:163::-;51711:15;51707:1;51699:6;51695:14;51688:39;51571:163;:::o;51740:233::-;51880:34;51876:1;51868:6;51864:14;51857:58;51949:16;51944:2;51936:6;51932:15;51925:41;51740:233;:::o;51979:227::-;52119:34;52115:1;52107:6;52103:14;52096:58;52188:10;52183:2;52175:6;52171:15;52164:35;51979:227;:::o;52212:181::-;52352:33;52348:1;52340:6;52336:14;52329:57;52212:181;:::o;52639:163::-;52779:15;52775:1;52767:6;52763:14;52756:39;52639:163;:::o;52808:232::-;52948:34;52944:1;52936:6;52932:14;52925:58;53017:15;53012:2;53004:6;53000:15;52993:40;52808:232;:::o;53046:122::-;53119:24;53137:5;53119:24;:::i;:::-;53112:5;53109:35;53099:63;;53158:1;53155;53148:12;53099:63;53046:122;:::o;53174:116::-;53244:21;53259:5;53244:21;:::i;:::-;53237:5;53234:32;53224:60;;53280:1;53277;53270:12;53224:60;53174:116;:::o;53296:120::-;53368:23;53385:5;53368:23;:::i;:::-;53361:5;53358:34;53348:62;;53406:1;53403;53396:12;53348:62;53296:120;:::o;53422:122::-;53495:24;53513:5;53495:24;:::i;:::-;53488:5;53485:35;53475:63;;53534:1;53531;53524:12;53475:63;53422:122;:::o
Swarm Source
ipfs://58e0638a12460b1ca8db8d727985c47092422590731b71e93bc657ad2be6e736
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.