ETH Price: $3,100.27 (-0.36%)
Gas: 2 Gwei

Token

RoyalFoolsHalloween (RFH)
 

Overview

Max Total Supply

791 RFH

Holders

233

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
gwagsus.eth
Balance
1 RFH
0x25c365ADE307C55E16DCB6541c25660b0Bd70E98
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RoyalFoolsHalloween

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// ██████╗░░█████╗░██╗░░░██╗░█████╗░██╗░░░░░███████╗░█████╗░░█████╗░██╗░░░░░░██████╗
// ██╔══██╗██╔══██╗╚██╗░██╔╝██╔══██╗██║░░░░░██╔════╝██╔══██╗██╔══██╗██║░░░░░██╔════╝
// ██████╔╝██║░░██║░╚████╔╝░███████║██║░░░░░█████╗░░██║░░██║██║░░██║██║░░░░░╚█████╗░
// ██╔══██╗██║░░██║░░╚██╔╝░░██╔══██║██║░░░░░██╔══╝░░██║░░██║██║░░██║██║░░░░░░╚═══██╗
// ██║░░██║╚█████╔╝░░░██║░░░██║░░██║███████╗██║░░░░░╚█████╔╝╚█████╔╝███████╗██████╔╝
// ╚═╝░░╚═╝░╚════╝░░░░╚═╝░░░╚═╝░░╚═╝╚══════╝╚═╝░░░░░░╚════╝░░╚════╝░╚══════╝╚═════╝░
// SPDX-License-Identifier: MIT
//OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;

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

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


//OpenZeppelin Contracts (last updated v4.7.0) (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 module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
   address private _owner;

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}
//  .-. .-.  .--.  ,---.  ,---..-.   .-.                
//  | | | | / /\ \ | .-.\ | .-.\\ \_/ )/                
//  | `-' |/ /__\ \| |-' )| |-' )\   (_)                
//  | .-. ||  __  || |--' | |--'  ) (                   
//  | | |)|| |  |)|| |    | |     | |                   
//  /(  (_)|_|  (_)/(     /(     /(_|                   
// (__)           (__)   (__)   (__)                    
//      .---. ,---.   .---.   .---.  ,-. .-..-.   .-.   
//     ( .-._)| .-.\ / .-. ) / .-. ) | |/ /  \ \_/ )/   
//    (_) \   | |-' )| | |(_)| | |(_)| | /    \   (_)   
//    _  \ \  | |--' | | | | | | | | | | \     ) (      
//   ( `-'  ) | |    \ `-' / \ `-' / | |) \    | |      
//    `----'  /(      )---'   )---'  |((_)-'  /(_|      
//           (__)    (_)     (_)     (_)     (__)       
//                     ,--,  ,-.      .--.  ,-.         
//                   .' .')  | |     / /\ \ |(||\    /| 
//                   |  |(_) | |    / /__\ \(_)|(\  / | 
//                   \  \    | |    |  __  || |(_)\/  | 
//                    \  `-. | `--. | |  |)|| || \  / | 
//                     \____\|( __.'|_|  (_)`-'| |\/| | 
//                           (_)               '-'  '-' 

// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}


// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 {
   /**
    * @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;
}


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;

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

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

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

//                     .. ...                                        
//                       .....                                        
//                      .....
//                     ........                                       
//                     ...... ///.((###.//////             
//               () .  ....***...//(((((##///(((**.       
//           ()..,///***.....(/,,//((((#*(((###((((((*/.               
//         .((////(((.#(/.(#((###((/(#((##((((###((((///           
//        ((/(SKAKUN/(##(( /(.#,,###(/((#((##(((#####(((((.            
//       .*(/#####((##,((.#/..  AVERA((##,,//(((#####*####*          
//      .((*(ANKH((((#/,(###( *.#####(,,... (*//(#####(((((*         
//     .//((#####(,((## (#.#,/((##(DAHLIN/,. ,*/((((###*((((,      
//     /*/(/#####(/((###.(##*(//(#METAVERSEM4STER(,. *//((_(((*       
//    **.((***.,*&%###/((/((./*.*/&&&%&&&&&*.**/,(#/(####//,/()   
//    *,/(/**,/*(KING'S FOOL(*.*,,** ./YA RISUU**//*#(#(((##()         
//    */(,(/*,*(,%&&&&&&%,/*/**/(.*%&&&&&&/*/ .##(##(((((//**)         
//    .((,#(//**(#*&&&&&%#(((  ##(((#####(/(/ *(####(((((///)
//    /#((((##(.*//.//(((#(((/((,##((#(   ##  ((###((/((///*          
//    .#(/(((####(/  (((###((##((###       , //(((//.///,/
//     ////#(((#####,(  (##, /#/            /(/////**//            
//       //,((,((#####.(#  ,           ##  .((//*/*               
//          .///*/((###*(((,//##/.     ,#(((((/                   
//                  ((((///((//(((((((((/     


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;

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

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _ownerOf(tokenId);
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

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

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

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved");
        _safeTransfer(from, to, tokenId, data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
        return _owners[tokenId];
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _ownerOf(tokenId) != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

        require(!_exists(tokenId), "ERC721: token already minted");

        unchecked {
            _balances[to] += 1;
        }

        _owners[tokenId] = to;

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        owner = ERC721.ownerOf(tokenId);

        delete _tokenApprovals[tokenId];

        unchecked {
            _balances[owner] -= 1;
        }
        delete _owners[tokenId];

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");

        delete _tokenApprovals[tokenId];

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    function _beforeConsecutiveTokenTransfer(
        address from,
        address to,
        uint256,
        uint96 size
    ) internal virtual {
        if (from != address(0)) {
            _balances[from] -= size;
        }
        if (to != address(0)) {
            _balances[to] += size;
        }
    }

    function _afterConsecutiveTokenTransfer(
        address,
        address,
        uint256,
        uint96
    ) internal virtual {}
}


interface IRoyalFools {
    function balanceOf(address owner) external view returns (uint256);
}

// ██░ ██  ▄▄▄      ██▓     ██▓     ▒███████  █     █░▓█████ ▓█████  ███▄    █
// ██░ ██ ▒████▄    ▓██▒    ▓██▒    ▒██▒  ██ ▓█░ █ ░█░▓█   ▀ ▓█   ▀  ██ ▀█   █
// ██▀▀██ ▒██  ▀█▄  ▒██░    ▒██░    ▒██░  ██ ▒█░ █ ░█ ▒███   ▒███   ▓██  ▀█ ██
// ▓█ ░██ ░██▄▄▄▄██ ▒██░    ▒██░    ▒██   ██ ░█░ █ ░█ ▒▓█  ▄ ▒▓█  ▄ ▓██▒  ▐▌██
// ▓█ ░██ ▒▓█   ▓██▒░██████▒░██████▒░ ████▓▒ ░░██▒██▓ ░▒████▒░▒████▒▒██░   ▓██
// ▒  ░▒ ▒ ▒   ▓▒█ ░ ▒░▓  ░░ ▒░▓  ░░ ▒░▒░▒░ ░ ▓░▒ ▒  ░░ ▒░ ░░░ ▒░ ░░ ▒░   ▒ ▒ 
// ▒  ▒░ ░  ▒   ▒▒ ░░ ░ ▒  ░░ ░ ▒  ░  ░ ▒ ▒░  ▒ ░ ░  ░ ░  ░ ░ ░  ░░ ░░   ░ ▒░
// ░  ░░ ░  ░   ▒     ░ ░    ░ ░   ░ ░ ░ ▒    ░   ░    ░    ░     ░   ░ ░ 
// ░  ░  ░    ░  ░   ░  ░    ░  ░    ░ ░      ░       ░  ░   ░  ░         ░ 


pragma solidity ^0.8.17;

contract RoyalFoolsHalloween is ERC721, Ownable {
   using Counters for Counters.Counter;
   using Strings for uint256;

   Counters.Counter private supply;

   string public baseTokenURI;
   string public baseExtension;
   uint256 public maxElements;

   IRoyalFools private token;

   bool public isPaused;

   mapping(address => uint256) avaliableClaims;
   mapping(address => bool) isClaimer;

   error Soldout();
   error EmptyBalance();
   error AlreadyClaimed();
   error ContractIsPaused();

   constructor(
       string memory baseURI,
       string memory _baseExtension,
       uint256 _maxElements) ERC721("RoyalFoolsHalloween", "RFH") {

           supply.increment();
           setBaseURI(baseURI);

           baseExtension = _baseExtension;
           maxElements = _maxElements;
           token = IRoyalFools(0xCF3bc939f9B2487092936F21cC0757b2b523B7aA);
    }

    modifier claimIsOpen() {
        if (isPaused == false) {
            revert ContractIsPaused();
        }
        if (totalSupply() > maxElements) {
            revert Soldout();
        }
        _;
    }

    function totalSupply() public view returns (uint256) {
        return supply.current();
    }

    function claim() public claimIsOpen {
        address wallet = _msgSender();
        uint256 tokenId = totalSupply();
        uint256 balance = token.balanceOf(wallet);

        require(balance > 0, "Empty balance");

        if (!isClaimer[wallet]) {
            avaliableClaims[wallet] = balance;
            isClaimer[wallet] = true;
        }

        require(avaliableClaims[wallet] > 0, "All claimed");

        _safeMint(wallet, tokenId);
        supply.increment();
        avaliableClaims[wallet] -= 1;
    }

    function burn(uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId), "Not approved or owner");
        _burn(tokenId);
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "URI for nonexistent tokenId");

        string memory baseURI = _baseURI();

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

    function _baseURI() internal view override returns (string memory) {
        return baseTokenURI;
    }

    function setBaseExtension(string memory _newExtension) public onlyOwner {
        baseExtension = _newExtension;
    }

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

    function setMaxElements(uint256 _newAmount) public onlyOwner {
        maxElements = _newAmount;
    }

    function setPause(bool _newState) public onlyOwner {
        isPaused = _newState;
    }

    function uncheckedIncrement(uint256 i) internal pure returns (uint256) {
        unchecked {
            i++;
        }
        return i;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"string","name":"_baseExtension","type":"string"},{"internalType":"uint256","name":"_maxElements","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"ContractIsPaused","type":"error"},{"inputs":[],"name":"EmptyBalance","type":"error"},{"inputs":[],"name":"Soldout","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxElements","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setMaxElements","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newState","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"}]

60806040523480156200001157600080fd5b50604051620043cc380380620043cc833981810160405281019062000037919062000508565b6040518060400160405280601381526020017f526f79616c466f6f6c7348616c6c6f7765656e000000000000000000000000008152506040518060400160405280600381526020017f52464800000000000000000000000000000000000000000000000000000000008152508160009081620000b49190620007e3565b508060019081620000c69190620007e3565b505050620000e9620000dd6200018860201b60201c565b6200019060201b60201c565b6200010060076200025660201b620014c81760201c565b62000111836200026c60201b60201c565b8160099081620001229190620007e3565b5080600a8190555073cf3bc939f9b2487092936f21cc0757b2b523b7aa600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200094d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b6200027c6200018860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a26200031060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f2906200092b565b60405180910390fd5b80600890816200030c9190620007e3565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003a38262000358565b810181811067ffffffffffffffff82111715620003c557620003c462000369565b5b80604052505050565b6000620003da6200033a565b9050620003e8828262000398565b919050565b600067ffffffffffffffff8211156200040b576200040a62000369565b5b620004168262000358565b9050602081019050919050565b60005b838110156200044357808201518184015260208101905062000426565b60008484015250505050565b6000620004666200046084620003ed565b620003ce565b90508281526020810184848401111562000485576200048462000353565b5b6200049284828562000423565b509392505050565b600082601f830112620004b257620004b16200034e565b5b8151620004c48482602086016200044f565b91505092915050565b6000819050919050565b620004e281620004cd565b8114620004ee57600080fd5b50565b6000815190506200050281620004d7565b92915050565b60008060006060848603121562000524576200052362000344565b5b600084015167ffffffffffffffff81111562000545576200054462000349565b5b62000553868287016200049a565b935050602084015167ffffffffffffffff81111562000577576200057662000349565b5b62000585868287016200049a565b92505060406200059886828701620004f1565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005f557607f821691505b6020821081036200060b576200060a620005ad565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000636565b62000681868362000636565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620006c4620006be620006b884620004cd565b62000699565b620004cd565b9050919050565b6000819050919050565b620006e083620006a3565b620006f8620006ef82620006cb565b84845462000643565b825550505050565b600090565b6200070f62000700565b6200071c818484620006d5565b505050565b5b8181101562000744576200073860008262000705565b60018101905062000722565b5050565b601f82111562000793576200075d8162000611565b620007688462000626565b8101602085101562000778578190505b62000790620007878562000626565b83018262000721565b50505b505050565b600082821c905092915050565b6000620007b86000198460080262000798565b1980831691505092915050565b6000620007d38383620007a5565b9150826002028217905092915050565b620007ee82620005a2565b67ffffffffffffffff8111156200080a576200080962000369565b5b620008168254620005dc565b6200082382828562000748565b600060209050601f8311600181146200085b576000841562000846578287015190505b620008528582620007c5565b865550620008c2565b601f1984166200086b8662000611565b60005b8281101562000895578489015182556001820191506020850194506020810190506200086e565b86831015620008b55784890151620008b1601f891682620007a5565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b600062000913600c83620008ca565b91506200092082620008db565b602082019050919050565b60006020820190508181036000830152620009468162000904565b9050919050565b613a6f806200095d6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063bedb86fb11610097578063d547cfb711610071578063d547cfb714610480578063da3ef23f1461049e578063e985e9c5146104ba578063f2fde38b146104ea576101a9565b8063bedb86fb14610416578063c668286214610432578063c87b56dd14610450576101a9565b806395d89b41116100d357806395d89b41146103a2578063a22cb465146103c0578063b187bd26146103dc578063b88d4fde146103fa576101a9565b8063715018a61461035e57806371f9f200146103685780638da5cb5b14610384576101a9565b806342842e0e11610166578063558fa0f511610140578063558fa0f5146102c457806355f804b3146102e25780636352211e146102fe57806370a082311461032e576101a9565b806342842e0e1461028257806342966c681461029e5780634e71d92d146102ba576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c391906124e6565b610506565b6040516101d5919061252e565b60405180910390f35b6101e66105e8565b6040516101f391906125d9565b60405180910390f35b61021660048036038101906102119190612631565b61067a565b604051610223919061269f565b60405180910390f35b610246600480360381019061024191906126e6565b6106c0565b005b6102506107d7565b60405161025d9190612735565b60405180910390f35b610280600480360381019061027b9190612750565b6107e8565b005b61029c60048036038101906102979190612750565b610848565b005b6102b860048036038101906102b39190612631565b610868565b005b6102c26108bd565b005b6102cc610c28565b6040516102d99190612735565b60405180910390f35b6102fc60048036038101906102f791906128d8565b610c2e565b005b61031860048036038101906103139190612631565b610cbd565b604051610325919061269f565b60405180910390f35b61034860048036038101906103439190612921565b610d43565b6040516103559190612735565b60405180910390f35b610366610dfa565b005b610382600480360381019061037d9190612631565b610e82565b005b61038c610f08565b604051610399919061269f565b60405180910390f35b6103aa610f32565b6040516103b791906125d9565b60405180910390f35b6103da60048036038101906103d5919061297a565b610fc4565b005b6103e4610fda565b6040516103f1919061252e565b60405180910390f35b610414600480360381019061040f9190612a5b565b610fed565b005b610430600480360381019061042b9190612ade565b61104f565b005b61043a6110e8565b60405161044791906125d9565b60405180910390f35b61046a60048036038101906104659190612631565b611176565b60405161047791906125d9565b60405180910390f35b610488611220565b60405161049591906125d9565b60405180910390f35b6104b860048036038101906104b391906128d8565b6112ae565b005b6104d460048036038101906104cf9190612b0b565b61133d565b6040516104e1919061252e565b60405180910390f35b61050460048036038101906104ff9190612921565b6113d1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e157506105e0826114de565b5b9050919050565b6060600080546105f790612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461062390612b7a565b80156106705780601f1061064557610100808354040283529160200191610670565b820191906000526020600020905b81548152906001019060200180831161065357829003601f168201915b5050505050905090565b600061068582611548565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106cb82610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073290612c1d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661075a611593565b73ffffffffffffffffffffffffffffffffffffffff161480610789575061078881610783611593565b61133d565b5b6107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612caf565b60405180910390fd5b6107d2838361159b565b505050565b60006107e36007611654565b905090565b6107f96107f3611593565b82611662565b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612d41565b60405180910390fd5b6108438383836116f7565b505050565b61086383838360405180602001604052806000815250610fed565b505050565b6108723382611662565b6108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890612dad565b60405180910390fd5b6108ba816119ec565b50565b60001515600b60149054906101000a900460ff1615150361090a576040517f6d39fcd000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546109156107d7565b111561094d576040517f355a428100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610957611593565b905060006109636107d7565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016109c2919061269f565b602060405180830381865afa1580156109df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a039190612de2565b905060008111610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90612e5b565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b365780600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90612ec7565b60405180910390fd5b610bc28383611b36565b610bcc60076114c8565b6001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c1c9190612f16565b92505081905550505050565b600a5481565b610c36611593565b73ffffffffffffffffffffffffffffffffffffffff16610c54610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190612f96565b60405180910390fd5b8060089081610cb99190613162565b5050565b600080610cc983611b54565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613280565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90613312565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e02611593565b73ffffffffffffffffffffffffffffffffffffffff16610e20610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90612f96565b60405180910390fd5b610e806000611b91565b565b610e8a611593565b73ffffffffffffffffffffffffffffffffffffffff16610ea8610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590612f96565b60405180910390fd5b80600a8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f4190612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6d90612b7a565b8015610fba5780601f10610f8f57610100808354040283529160200191610fba565b820191906000526020600020905b815481529060010190602001808311610f9d57829003601f168201915b5050505050905090565b610fd6610fcf611593565b8383611c57565b5050565b600b60149054906101000a900460ff1681565b610ffe610ff8611593565b83611662565b61103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490612d41565b60405180910390fd5b61104984848484611dc3565b50505050565b611057611593565b73ffffffffffffffffffffffffffffffffffffffff16611075610f08565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290612f96565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b600980546110f590612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461112190612b7a565b801561116e5780601f106111435761010080835404028352916020019161116e565b820191906000526020600020905b81548152906001019060200180831161115157829003601f168201915b505050505081565b606061118182611e1f565b6111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b79061337e565b60405180910390fd5b60006111ca611e60565b905060008151116111ea5760405180602001604052806000815250611218565b806111f484611ef2565b60096040516020016112089392919061345d565b6040516020818303038152906040525b915050919050565b6008805461122d90612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461125990612b7a565b80156112a65780601f1061127b576101008083540402835291602001916112a6565b820191906000526020600020905b81548152906001019060200180831161128957829003601f168201915b505050505081565b6112b6611593565b73ffffffffffffffffffffffffffffffffffffffff166112d4610f08565b73ffffffffffffffffffffffffffffffffffffffff161461132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190612f96565b60405180910390fd5b80600990816113399190613162565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113d9611593565b73ffffffffffffffffffffffffffffffffffffffff166113f7610f08565b73ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490612f96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b390613500565b60405180910390fd5b6114c581611b91565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61155181611e1f565b611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613280565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160e83610cbd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60008061166e83610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116b057506116af818561133d565b5b806116ee57508373ffffffffffffffffffffffffffffffffffffffff166116d68461067a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661171782610cbd565b73ffffffffffffffffffffffffffffffffffffffff161461176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490613592565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d390613624565b60405180910390fd5b6117e7838383612052565b8273ffffffffffffffffffffffffffffffffffffffff1661180782610cbd565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613592565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e7838383612057565b505050565b60006119f782610cbd565b9050611a0581600084612052565b611a0e82610cbd565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b3281600084612057565b5050565b611b5082826040518060200160405280600081525061205c565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90613690565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611db6919061252e565b60405180910390a3505050565b611dce8484846116f7565b611dda848484846120b7565b611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613722565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611e4183611b54565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054611e6f90612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9b90612b7a565b8015611ee85780601f10611ebd57610100808354040283529160200191611ee8565b820191906000526020600020905b815481529060010190602001808311611ecb57829003601f168201915b5050505050905090565b606060008203611f39576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061204d565b600082905060005b60008214611f6b578080611f5490613742565b915050600a82611f6491906137b9565b9150611f41565b60008167ffffffffffffffff811115611f8757611f866127ad565b5b6040519080825280601f01601f191660200182016040528015611fb95781602001600182028036833780820191505090505b5090505b6000851461204657600182611fd29190612f16565b9150600a85611fe191906137ea565b6030611fed919061381b565b60f81b8183815181106120035761200261384f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561203f91906137b9565b9450611fbd565b8093505050505b919050565b505050565b505050565b612066838361223e565b61207360008484846120b7565b6120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990613722565b60405180910390fd5b505050565b60006120d88473ffffffffffffffffffffffffffffffffffffffff16612457565b15612231578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612101611593565b8786866040518563ffffffff1660e01b815260040161212394939291906138d3565b6020604051808303816000875af192505050801561215f57506040513d601f19601f8201168201806040525081019061215c9190613934565b60015b6121e1573d806000811461218f576040519150601f19603f3d011682016040523d82523d6000602084013e612194565b606091505b5060008151036121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090613722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612236565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a4906139ad565b60405180910390fd5b6122b681611e1f565b156122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed90613a19565b60405180910390fd5b61230260008383612052565b61230b81611e1f565b1561234b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234290613a19565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461245360008383612057565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124c38161248e565b81146124ce57600080fd5b50565b6000813590506124e0816124ba565b92915050565b6000602082840312156124fc576124fb612484565b5b600061250a848285016124d1565b91505092915050565b60008115159050919050565b61252881612513565b82525050565b6000602082019050612543600083018461251f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612583578082015181840152602081019050612568565b60008484015250505050565b6000601f19601f8301169050919050565b60006125ab82612549565b6125b58185612554565b93506125c5818560208601612565565b6125ce8161258f565b840191505092915050565b600060208201905081810360008301526125f381846125a0565b905092915050565b6000819050919050565b61260e816125fb565b811461261957600080fd5b50565b60008135905061262b81612605565b92915050565b60006020828403121561264757612646612484565b5b60006126558482850161261c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006126898261265e565b9050919050565b6126998161267e565b82525050565b60006020820190506126b46000830184612690565b92915050565b6126c38161267e565b81146126ce57600080fd5b50565b6000813590506126e0816126ba565b92915050565b600080604083850312156126fd576126fc612484565b5b600061270b858286016126d1565b925050602061271c8582860161261c565b9150509250929050565b61272f816125fb565b82525050565b600060208201905061274a6000830184612726565b92915050565b60008060006060848603121561276957612768612484565b5b6000612777868287016126d1565b9350506020612788868287016126d1565b92505060406127998682870161261c565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127e58261258f565b810181811067ffffffffffffffff82111715612804576128036127ad565b5b80604052505050565b600061281761247a565b905061282382826127dc565b919050565b600067ffffffffffffffff821115612843576128426127ad565b5b61284c8261258f565b9050602081019050919050565b82818337600083830152505050565b600061287b61287684612828565b61280d565b905082815260208101848484011115612897576128966127a8565b5b6128a2848285612859565b509392505050565b600082601f8301126128bf576128be6127a3565b5b81356128cf848260208601612868565b91505092915050565b6000602082840312156128ee576128ed612484565b5b600082013567ffffffffffffffff81111561290c5761290b612489565b5b612918848285016128aa565b91505092915050565b60006020828403121561293757612936612484565b5b6000612945848285016126d1565b91505092915050565b61295781612513565b811461296257600080fd5b50565b6000813590506129748161294e565b92915050565b6000806040838503121561299157612990612484565b5b600061299f858286016126d1565b92505060206129b085828601612965565b9150509250929050565b600067ffffffffffffffff8211156129d5576129d46127ad565b5b6129de8261258f565b9050602081019050919050565b60006129fe6129f9846129ba565b61280d565b905082815260208101848484011115612a1a57612a196127a8565b5b612a25848285612859565b509392505050565b600082601f830112612a4257612a416127a3565b5b8135612a528482602086016129eb565b91505092915050565b60008060008060808587031215612a7557612a74612484565b5b6000612a83878288016126d1565b9450506020612a94878288016126d1565b9350506040612aa58782880161261c565b925050606085013567ffffffffffffffff811115612ac657612ac5612489565b5b612ad287828801612a2d565b91505092959194509250565b600060208284031215612af457612af3612484565b5b6000612b0284828501612965565b91505092915050565b60008060408385031215612b2257612b21612484565b5b6000612b30858286016126d1565b9250506020612b41858286016126d1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9257607f821691505b602082108103612ba557612ba4612b4b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c07602183612554565b9150612c1282612bab565b604082019050919050565b60006020820190508181036000830152612c3681612bfa565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612c99603d83612554565b9150612ca482612c3d565b604082019050919050565b60006020820190508181036000830152612cc881612c8c565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000612d2b602d83612554565b9150612d3682612ccf565b604082019050919050565b60006020820190508181036000830152612d5a81612d1e565b9050919050565b7f4e6f7420617070726f766564206f72206f776e65720000000000000000000000600082015250565b6000612d97601583612554565b9150612da282612d61565b602082019050919050565b60006020820190508181036000830152612dc681612d8a565b9050919050565b600081519050612ddc81612605565b92915050565b600060208284031215612df857612df7612484565b5b6000612e0684828501612dcd565b91505092915050565b7f456d7074792062616c616e636500000000000000000000000000000000000000600082015250565b6000612e45600d83612554565b9150612e5082612e0f565b602082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b7f416c6c20636c61696d6564000000000000000000000000000000000000000000600082015250565b6000612eb1600b83612554565b9150612ebc82612e7b565b602082019050919050565b60006020820190508181036000830152612ee081612ea4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f21826125fb565b9150612f2c836125fb565b9250828203905081811115612f4457612f43612ee7565b5b92915050565b7f4e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000612f80600c83612554565b9150612f8b82612f4a565b602082019050919050565b60006020820190508181036000830152612faf81612f73565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026130187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612fdb565b6130228683612fdb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061305f61305a613055846125fb565b61303a565b6125fb565b9050919050565b6000819050919050565b61307983613044565b61308d61308582613066565b848454612fe8565b825550505050565b600090565b6130a2613095565b6130ad818484613070565b505050565b5b818110156130d1576130c660008261309a565b6001810190506130b3565b5050565b601f821115613116576130e781612fb6565b6130f084612fcb565b810160208510156130ff578190505b61311361310b85612fcb565b8301826130b2565b50505b505050565b600082821c905092915050565b60006131396000198460080261311b565b1980831691505092915050565b60006131528383613128565b9150826002028217905092915050565b61316b82612549565b67ffffffffffffffff811115613184576131836127ad565b5b61318e8254612b7a565b6131998282856130d5565b600060209050601f8311600181146131cc57600084156131ba578287015190505b6131c48582613146565b86555061322c565b601f1984166131da86612fb6565b60005b82811015613202578489015182556001820191506020850194506020810190506131dd565b8683101561321f578489015161321b601f891682613128565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061326a601883612554565b915061327582613234565b602082019050919050565b600060208201905081810360008301526132998161325d565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006132fc602983612554565b9150613307826132a0565b604082019050919050565b6000602082019050818103600083015261332b816132ef565b9050919050565b7f55524920666f72206e6f6e6578697374656e7420746f6b656e49640000000000600082015250565b6000613368601b83612554565b915061337382613332565b602082019050919050565b600060208201905081810360008301526133978161335b565b9050919050565b600081905092915050565b60006133b482612549565b6133be818561339e565b93506133ce818560208601612565565b80840191505092915050565b600081546133e781612b7a565b6133f1818661339e565b9450600182166000811461340c576001811461342157613454565b60ff1983168652811515820286019350613454565b61342a85612fb6565b60005b8381101561344c5781548189015260018201915060208101905061342d565b838801955050505b50505092915050565b600061346982866133a9565b915061347582856133a9565b915061348182846133da565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134ea602683612554565b91506134f58261348e565b604082019050919050565b60006020820190508181036000830152613519816134dd565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061357c602583612554565b915061358782613520565b604082019050919050565b600060208201905081810360008301526135ab8161356f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061360e602483612554565b9150613619826135b2565b604082019050919050565b6000602082019050818103600083015261363d81613601565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061367a601983612554565b915061368582613644565b602082019050919050565b600060208201905081810360008301526136a98161366d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061370c603283612554565b9150613717826136b0565b604082019050919050565b6000602082019050818103600083015261373b816136ff565b9050919050565b600061374d826125fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361377f5761377e612ee7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c4826125fb565b91506137cf836125fb565b9250826137df576137de61378a565b5b828204905092915050565b60006137f5826125fb565b9150613800836125fb565b9250826138105761380f61378a565b5b828206905092915050565b6000613826826125fb565b9150613831836125fb565b925082820190508082111561384957613848612ee7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006138a58261387e565b6138af8185613889565b93506138bf818560208601612565565b6138c88161258f565b840191505092915050565b60006080820190506138e86000830187612690565b6138f56020830186612690565b6139026040830185612726565b8181036060830152613914818461389a565b905095945050505050565b60008151905061392e816124ba565b92915050565b60006020828403121561394a57613949612484565b5b60006139588482850161391f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613997602083612554565b91506139a282613961565b602082019050919050565b600060208201905081810360008301526139c68161398a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613a03601c83612554565b9150613a0e826139cd565b602082019050919050565b60006020820190508181036000830152613a32816139f6565b905091905056fea26469706673582212200bc8cd5f7f662cbf4991b39cedb9aee27ff8f0e1034c797aa6544ccf68b05a6964736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a66685054517a7064615045506b4871614c7777576b576e7a566b684c59777a554c4d6b6155624734386f632f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052e6a736f6e000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063bedb86fb11610097578063d547cfb711610071578063d547cfb714610480578063da3ef23f1461049e578063e985e9c5146104ba578063f2fde38b146104ea576101a9565b8063bedb86fb14610416578063c668286214610432578063c87b56dd14610450576101a9565b806395d89b41116100d357806395d89b41146103a2578063a22cb465146103c0578063b187bd26146103dc578063b88d4fde146103fa576101a9565b8063715018a61461035e57806371f9f200146103685780638da5cb5b14610384576101a9565b806342842e0e11610166578063558fa0f511610140578063558fa0f5146102c457806355f804b3146102e25780636352211e146102fe57806370a082311461032e576101a9565b806342842e0e1461028257806342966c681461029e5780634e71d92d146102ba576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c391906124e6565b610506565b6040516101d5919061252e565b60405180910390f35b6101e66105e8565b6040516101f391906125d9565b60405180910390f35b61021660048036038101906102119190612631565b61067a565b604051610223919061269f565b60405180910390f35b610246600480360381019061024191906126e6565b6106c0565b005b6102506107d7565b60405161025d9190612735565b60405180910390f35b610280600480360381019061027b9190612750565b6107e8565b005b61029c60048036038101906102979190612750565b610848565b005b6102b860048036038101906102b39190612631565b610868565b005b6102c26108bd565b005b6102cc610c28565b6040516102d99190612735565b60405180910390f35b6102fc60048036038101906102f791906128d8565b610c2e565b005b61031860048036038101906103139190612631565b610cbd565b604051610325919061269f565b60405180910390f35b61034860048036038101906103439190612921565b610d43565b6040516103559190612735565b60405180910390f35b610366610dfa565b005b610382600480360381019061037d9190612631565b610e82565b005b61038c610f08565b604051610399919061269f565b60405180910390f35b6103aa610f32565b6040516103b791906125d9565b60405180910390f35b6103da60048036038101906103d5919061297a565b610fc4565b005b6103e4610fda565b6040516103f1919061252e565b60405180910390f35b610414600480360381019061040f9190612a5b565b610fed565b005b610430600480360381019061042b9190612ade565b61104f565b005b61043a6110e8565b60405161044791906125d9565b60405180910390f35b61046a60048036038101906104659190612631565b611176565b60405161047791906125d9565b60405180910390f35b610488611220565b60405161049591906125d9565b60405180910390f35b6104b860048036038101906104b391906128d8565b6112ae565b005b6104d460048036038101906104cf9190612b0b565b61133d565b6040516104e1919061252e565b60405180910390f35b61050460048036038101906104ff9190612921565b6113d1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e157506105e0826114de565b5b9050919050565b6060600080546105f790612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461062390612b7a565b80156106705780601f1061064557610100808354040283529160200191610670565b820191906000526020600020905b81548152906001019060200180831161065357829003601f168201915b5050505050905090565b600061068582611548565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106cb82610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073290612c1d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661075a611593565b73ffffffffffffffffffffffffffffffffffffffff161480610789575061078881610783611593565b61133d565b5b6107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612caf565b60405180910390fd5b6107d2838361159b565b505050565b60006107e36007611654565b905090565b6107f96107f3611593565b82611662565b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612d41565b60405180910390fd5b6108438383836116f7565b505050565b61086383838360405180602001604052806000815250610fed565b505050565b6108723382611662565b6108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890612dad565b60405180910390fd5b6108ba816119ec565b50565b60001515600b60149054906101000a900460ff1615150361090a576040517f6d39fcd000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546109156107d7565b111561094d576040517f355a428100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610957611593565b905060006109636107d7565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016109c2919061269f565b602060405180830381865afa1580156109df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a039190612de2565b905060008111610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90612e5b565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b365780600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90612ec7565b60405180910390fd5b610bc28383611b36565b610bcc60076114c8565b6001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c1c9190612f16565b92505081905550505050565b600a5481565b610c36611593565b73ffffffffffffffffffffffffffffffffffffffff16610c54610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190612f96565b60405180910390fd5b8060089081610cb99190613162565b5050565b600080610cc983611b54565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613280565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90613312565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e02611593565b73ffffffffffffffffffffffffffffffffffffffff16610e20610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90612f96565b60405180910390fd5b610e806000611b91565b565b610e8a611593565b73ffffffffffffffffffffffffffffffffffffffff16610ea8610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590612f96565b60405180910390fd5b80600a8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f4190612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6d90612b7a565b8015610fba5780601f10610f8f57610100808354040283529160200191610fba565b820191906000526020600020905b815481529060010190602001808311610f9d57829003601f168201915b5050505050905090565b610fd6610fcf611593565b8383611c57565b5050565b600b60149054906101000a900460ff1681565b610ffe610ff8611593565b83611662565b61103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490612d41565b60405180910390fd5b61104984848484611dc3565b50505050565b611057611593565b73ffffffffffffffffffffffffffffffffffffffff16611075610f08565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290612f96565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b600980546110f590612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461112190612b7a565b801561116e5780601f106111435761010080835404028352916020019161116e565b820191906000526020600020905b81548152906001019060200180831161115157829003601f168201915b505050505081565b606061118182611e1f565b6111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b79061337e565b60405180910390fd5b60006111ca611e60565b905060008151116111ea5760405180602001604052806000815250611218565b806111f484611ef2565b60096040516020016112089392919061345d565b6040516020818303038152906040525b915050919050565b6008805461122d90612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461125990612b7a565b80156112a65780601f1061127b576101008083540402835291602001916112a6565b820191906000526020600020905b81548152906001019060200180831161128957829003601f168201915b505050505081565b6112b6611593565b73ffffffffffffffffffffffffffffffffffffffff166112d4610f08565b73ffffffffffffffffffffffffffffffffffffffff161461132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190612f96565b60405180910390fd5b80600990816113399190613162565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113d9611593565b73ffffffffffffffffffffffffffffffffffffffff166113f7610f08565b73ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490612f96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b390613500565b60405180910390fd5b6114c581611b91565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61155181611e1f565b611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613280565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160e83610cbd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60008061166e83610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116b057506116af818561133d565b5b806116ee57508373ffffffffffffffffffffffffffffffffffffffff166116d68461067a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661171782610cbd565b73ffffffffffffffffffffffffffffffffffffffff161461176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490613592565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d390613624565b60405180910390fd5b6117e7838383612052565b8273ffffffffffffffffffffffffffffffffffffffff1661180782610cbd565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613592565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e7838383612057565b505050565b60006119f782610cbd565b9050611a0581600084612052565b611a0e82610cbd565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b3281600084612057565b5050565b611b5082826040518060200160405280600081525061205c565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90613690565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611db6919061252e565b60405180910390a3505050565b611dce8484846116f7565b611dda848484846120b7565b611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613722565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611e4183611b54565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054611e6f90612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9b90612b7a565b8015611ee85780601f10611ebd57610100808354040283529160200191611ee8565b820191906000526020600020905b815481529060010190602001808311611ecb57829003601f168201915b5050505050905090565b606060008203611f39576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061204d565b600082905060005b60008214611f6b578080611f5490613742565b915050600a82611f6491906137b9565b9150611f41565b60008167ffffffffffffffff811115611f8757611f866127ad565b5b6040519080825280601f01601f191660200182016040528015611fb95781602001600182028036833780820191505090505b5090505b6000851461204657600182611fd29190612f16565b9150600a85611fe191906137ea565b6030611fed919061381b565b60f81b8183815181106120035761200261384f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561203f91906137b9565b9450611fbd565b8093505050505b919050565b505050565b505050565b612066838361223e565b61207360008484846120b7565b6120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990613722565b60405180910390fd5b505050565b60006120d88473ffffffffffffffffffffffffffffffffffffffff16612457565b15612231578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612101611593565b8786866040518563ffffffff1660e01b815260040161212394939291906138d3565b6020604051808303816000875af192505050801561215f57506040513d601f19601f8201168201806040525081019061215c9190613934565b60015b6121e1573d806000811461218f576040519150601f19603f3d011682016040523d82523d6000602084013e612194565b606091505b5060008151036121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090613722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612236565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a4906139ad565b60405180910390fd5b6122b681611e1f565b156122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed90613a19565b60405180910390fd5b61230260008383612052565b61230b81611e1f565b1561234b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234290613a19565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461245360008383612057565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124c38161248e565b81146124ce57600080fd5b50565b6000813590506124e0816124ba565b92915050565b6000602082840312156124fc576124fb612484565b5b600061250a848285016124d1565b91505092915050565b60008115159050919050565b61252881612513565b82525050565b6000602082019050612543600083018461251f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612583578082015181840152602081019050612568565b60008484015250505050565b6000601f19601f8301169050919050565b60006125ab82612549565b6125b58185612554565b93506125c5818560208601612565565b6125ce8161258f565b840191505092915050565b600060208201905081810360008301526125f381846125a0565b905092915050565b6000819050919050565b61260e816125fb565b811461261957600080fd5b50565b60008135905061262b81612605565b92915050565b60006020828403121561264757612646612484565b5b60006126558482850161261c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006126898261265e565b9050919050565b6126998161267e565b82525050565b60006020820190506126b46000830184612690565b92915050565b6126c38161267e565b81146126ce57600080fd5b50565b6000813590506126e0816126ba565b92915050565b600080604083850312156126fd576126fc612484565b5b600061270b858286016126d1565b925050602061271c8582860161261c565b9150509250929050565b61272f816125fb565b82525050565b600060208201905061274a6000830184612726565b92915050565b60008060006060848603121561276957612768612484565b5b6000612777868287016126d1565b9350506020612788868287016126d1565b92505060406127998682870161261c565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127e58261258f565b810181811067ffffffffffffffff82111715612804576128036127ad565b5b80604052505050565b600061281761247a565b905061282382826127dc565b919050565b600067ffffffffffffffff821115612843576128426127ad565b5b61284c8261258f565b9050602081019050919050565b82818337600083830152505050565b600061287b61287684612828565b61280d565b905082815260208101848484011115612897576128966127a8565b5b6128a2848285612859565b509392505050565b600082601f8301126128bf576128be6127a3565b5b81356128cf848260208601612868565b91505092915050565b6000602082840312156128ee576128ed612484565b5b600082013567ffffffffffffffff81111561290c5761290b612489565b5b612918848285016128aa565b91505092915050565b60006020828403121561293757612936612484565b5b6000612945848285016126d1565b91505092915050565b61295781612513565b811461296257600080fd5b50565b6000813590506129748161294e565b92915050565b6000806040838503121561299157612990612484565b5b600061299f858286016126d1565b92505060206129b085828601612965565b9150509250929050565b600067ffffffffffffffff8211156129d5576129d46127ad565b5b6129de8261258f565b9050602081019050919050565b60006129fe6129f9846129ba565b61280d565b905082815260208101848484011115612a1a57612a196127a8565b5b612a25848285612859565b509392505050565b600082601f830112612a4257612a416127a3565b5b8135612a528482602086016129eb565b91505092915050565b60008060008060808587031215612a7557612a74612484565b5b6000612a83878288016126d1565b9450506020612a94878288016126d1565b9350506040612aa58782880161261c565b925050606085013567ffffffffffffffff811115612ac657612ac5612489565b5b612ad287828801612a2d565b91505092959194509250565b600060208284031215612af457612af3612484565b5b6000612b0284828501612965565b91505092915050565b60008060408385031215612b2257612b21612484565b5b6000612b30858286016126d1565b9250506020612b41858286016126d1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9257607f821691505b602082108103612ba557612ba4612b4b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c07602183612554565b9150612c1282612bab565b604082019050919050565b60006020820190508181036000830152612c3681612bfa565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612c99603d83612554565b9150612ca482612c3d565b604082019050919050565b60006020820190508181036000830152612cc881612c8c565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000612d2b602d83612554565b9150612d3682612ccf565b604082019050919050565b60006020820190508181036000830152612d5a81612d1e565b9050919050565b7f4e6f7420617070726f766564206f72206f776e65720000000000000000000000600082015250565b6000612d97601583612554565b9150612da282612d61565b602082019050919050565b60006020820190508181036000830152612dc681612d8a565b9050919050565b600081519050612ddc81612605565b92915050565b600060208284031215612df857612df7612484565b5b6000612e0684828501612dcd565b91505092915050565b7f456d7074792062616c616e636500000000000000000000000000000000000000600082015250565b6000612e45600d83612554565b9150612e5082612e0f565b602082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b7f416c6c20636c61696d6564000000000000000000000000000000000000000000600082015250565b6000612eb1600b83612554565b9150612ebc82612e7b565b602082019050919050565b60006020820190508181036000830152612ee081612ea4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f21826125fb565b9150612f2c836125fb565b9250828203905081811115612f4457612f43612ee7565b5b92915050565b7f4e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000612f80600c83612554565b9150612f8b82612f4a565b602082019050919050565b60006020820190508181036000830152612faf81612f73565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026130187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612fdb565b6130228683612fdb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061305f61305a613055846125fb565b61303a565b6125fb565b9050919050565b6000819050919050565b61307983613044565b61308d61308582613066565b848454612fe8565b825550505050565b600090565b6130a2613095565b6130ad818484613070565b505050565b5b818110156130d1576130c660008261309a565b6001810190506130b3565b5050565b601f821115613116576130e781612fb6565b6130f084612fcb565b810160208510156130ff578190505b61311361310b85612fcb565b8301826130b2565b50505b505050565b600082821c905092915050565b60006131396000198460080261311b565b1980831691505092915050565b60006131528383613128565b9150826002028217905092915050565b61316b82612549565b67ffffffffffffffff811115613184576131836127ad565b5b61318e8254612b7a565b6131998282856130d5565b600060209050601f8311600181146131cc57600084156131ba578287015190505b6131c48582613146565b86555061322c565b601f1984166131da86612fb6565b60005b82811015613202578489015182556001820191506020850194506020810190506131dd565b8683101561321f578489015161321b601f891682613128565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061326a601883612554565b915061327582613234565b602082019050919050565b600060208201905081810360008301526132998161325d565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006132fc602983612554565b9150613307826132a0565b604082019050919050565b6000602082019050818103600083015261332b816132ef565b9050919050565b7f55524920666f72206e6f6e6578697374656e7420746f6b656e49640000000000600082015250565b6000613368601b83612554565b915061337382613332565b602082019050919050565b600060208201905081810360008301526133978161335b565b9050919050565b600081905092915050565b60006133b482612549565b6133be818561339e565b93506133ce818560208601612565565b80840191505092915050565b600081546133e781612b7a565b6133f1818661339e565b9450600182166000811461340c576001811461342157613454565b60ff1983168652811515820286019350613454565b61342a85612fb6565b60005b8381101561344c5781548189015260018201915060208101905061342d565b838801955050505b50505092915050565b600061346982866133a9565b915061347582856133a9565b915061348182846133da565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134ea602683612554565b91506134f58261348e565b604082019050919050565b60006020820190508181036000830152613519816134dd565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061357c602583612554565b915061358782613520565b604082019050919050565b600060208201905081810360008301526135ab8161356f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061360e602483612554565b9150613619826135b2565b604082019050919050565b6000602082019050818103600083015261363d81613601565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061367a601983612554565b915061368582613644565b602082019050919050565b600060208201905081810360008301526136a98161366d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061370c603283612554565b9150613717826136b0565b604082019050919050565b6000602082019050818103600083015261373b816136ff565b9050919050565b600061374d826125fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361377f5761377e612ee7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c4826125fb565b91506137cf836125fb565b9250826137df576137de61378a565b5b828204905092915050565b60006137f5826125fb565b9150613800836125fb565b9250826138105761380f61378a565b5b828206905092915050565b6000613826826125fb565b9150613831836125fb565b925082820190508082111561384957613848612ee7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006138a58261387e565b6138af8185613889565b93506138bf818560208601612565565b6138c88161258f565b840191505092915050565b60006080820190506138e86000830187612690565b6138f56020830186612690565b6139026040830185612726565b8181036060830152613914818461389a565b905095945050505050565b60008151905061392e816124ba565b92915050565b60006020828403121561394a57613949612484565b5b60006139588482850161391f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613997602083612554565b91506139a282613961565b602082019050919050565b600060208201905081810360008301526139c68161398a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613a03601c83612554565b9150613a0e826139cd565b602082019050919050565b60006020820190508181036000830152613a32816139f6565b905091905056fea26469706673582212200bc8cd5f7f662cbf4991b39cedb9aee27ff8f0e1034c797aa6544ccf68b05a6964736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a66685054517a7064615045506b4871614c7777576b576e7a566b684c59777a554c4d6b6155624734386f632f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052e6a736f6e000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://gateway.pinata.cloud/ipfs/QmZfhPTQzpdaPEPkHqaLwwWkWnzVkhLYwzULMkaUbG48oc/
Arg [1] : _baseExtension (string): .json
Arg [2] : _maxElements (uint256): 1347

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000543
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [4] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [5] : 732f516d5a66685054517a7064615045506b4871614c7777576b576e7a566b68
Arg [6] : 4c59777a554c4d6b6155624734386f632f000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 2e6a736f6e000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

39238:3018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29304:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30054:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31089:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30665:416;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40380:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31603:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31893:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41025:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40483:534;;;:::i;:::-;;39470:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41786:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29823:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29608:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3881:100;;;:::i;:::-;;41895:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3279:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30162:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31268:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39537:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32086:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42007:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39437:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41188:349;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39405:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41658:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31431:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4130:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29304:296;29397:4;29449:25;29434:40;;;:11;:40;;;;:105;;;;29506:33;29491:48;;;:11;:48;;;;29434:105;:158;;;;29556:36;29580:11;29556:23;:36::i;:::-;29434:158;29414:178;;29304:296;;;:::o;30054:100::-;30108:13;30141:5;30134:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30054:100;:::o;31089:171::-;31165:7;31185:23;31200:7;31185:14;:23::i;:::-;31228:15;:24;31244:7;31228:24;;;;;;;;;;;;;;;;;;;;;31221:31;;31089:171;;;:::o;30665:416::-;30746:13;30762:23;30777:7;30762:14;:23::i;:::-;30746:39;;30810:5;30804:11;;:2;:11;;;30796:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30904:5;30888:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30913:37;30930:5;30937:12;:10;:12::i;:::-;30913:16;:37::i;:::-;30888:62;30866:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;31052:21;31061:2;31065:7;31052:8;:21::i;:::-;30735:346;30665:416;;:::o;40380:95::-;40424:7;40451:16;:6;:14;:16::i;:::-;40444:23;;40380:95;:::o;31603:282::-;31745:41;31764:12;:10;:12::i;:::-;31778:7;31745:18;:41::i;:::-;31737:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;31849:28;31859:4;31865:2;31869:7;31849:9;:28::i;:::-;31603:282;;;:::o;31893:185::-;32031:39;32048:4;32054:2;32058:7;32031:39;;;;;;;;;;;;:16;:39::i;:::-;31893:185;;;:::o;41025:155::-;41082:39;41101:10;41113:7;41082:18;:39::i;:::-;41074:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41158:14;41164:7;41158:5;:14::i;:::-;41025:155;:::o;40483:534::-;40208:5;40196:17;;:8;;;;;;;;;;;:17;;;40192:75;;40237:18;;;;;;;;;;;;;;40192:75;40297:11;;40281:13;:11;:13::i;:::-;:27;40277:76;;;40332:9;;;;;;;;;;;;;;40277:76;40530:14:::1;40547:12;:10;:12::i;:::-;40530:29;;40570:15;40588:13;:11;:13::i;:::-;40570:31;;40612:15;40630:5;;;;;;;;;;;:15;;;40646:6;40630:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40612:41;;40684:1;40674:7;:11;40666:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;40721:9;:17;40731:6;40721:17;;;;;;;;;;;;;;;;;;;;;;;;;40716:123;;40781:7;40755:15;:23;40771:6;40755:23;;;;;;;;;;;;;;;:33;;;;40823:4;40803:9;:17;40813:6;40803:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;40716:123;40885:1;40859:15;:23;40875:6;40859:23;;;;;;;;;;;;;;;;:27;40851:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40915:26;40925:6;40933:7;40915:9;:26::i;:::-;40952:18;:6;:16;:18::i;:::-;41008:1;40981:15;:23;40997:6;40981:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;40519:498;;;40483:534::o:0;39470:26::-;;;;:::o;41786:101::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41872:7:::1;41857:12;:22;;;;;;:::i;:::-;;41786:101:::0;:::o;29823:223::-;29895:7;29915:13;29931:17;29940:7;29931:8;:17::i;:::-;29915:33;;29984:1;29967:19;;:5;:19;;;29959:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30033:5;30026:12;;;29823:223;;;:::o;29608:207::-;29680:7;29725:1;29708:19;;:5;:19;;;29700:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29791:9;:16;29801:5;29791:16;;;;;;;;;;;;;;;;29784:23;;29608:207;;;:::o;3881:100::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;3944:30:::1;3971:1;3944:18;:30::i;:::-;3881:100::o:0;41895:104::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41981:10:::1;41967:11;:24;;;;41895:104:::0;:::o;3279:84::-;3325:7;3350:6;;;;;;;;;;;3343:13;;3279:84;:::o;30162:104::-;30218:13;30251:7;30244:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30162:104;:::o;31268:155::-;31363:52;31382:12;:10;:12::i;:::-;31396:8;31406;31363:18;:52::i;:::-;31268:155;;:::o;39537:20::-;;;;;;;;;;;;;:::o;32086:322::-;32260:41;32279:12;:10;:12::i;:::-;32293:7;32260:18;:41::i;:::-;32252:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;32362:38;32376:4;32382:2;32386:7;32395:4;32362:13;:38::i;:::-;32086:322;;;;:::o;42007:90::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42080:9:::1;42069:8;;:20;;;;;;;;;;;;;;;;;;42007:90:::0;:::o;39437:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41188:349::-;41261:13;41295:16;41303:7;41295;:16::i;:::-;41287:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41356:21;41380:10;:8;:10::i;:::-;41356:34;;41434:1;41416:7;41410:21;:25;:119;;;;;;;;;;;;;;;;;41471:7;41480:18;:7;:16;:18::i;:::-;41500:13;41454:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41410:119;41403:126;;;41188:349;;;:::o;39405:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41658:120::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41757:13:::1;41741;:29;;;;;;:::i;:::-;;41658:120:::0;:::o;31431:164::-;31528:4;31552:18;:25;31571:5;31552:25;;;;;;;;;;;;;;;:35;31578:8;31552:35;;;;;;;;;;;;;;;;;;;;;;;;;31545:42;;31431:164;;;;:::o;4130:196::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;4237:1:::1;4217:22;;:8;:22;;::::0;4209:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4291:28;4310:8;4291:18;:28::i;:::-;4130:196:::0;:::o;18448:127::-;18555:1;18537:7;:14;;;:19;;;;;;;;;;;18448:127;:::o;20560:157::-;20645:4;20684:25;20669:40;;;:11;:40;;;;20662:47;;20560:157;;;:::o;35975:135::-;36057:16;36065:7;36057;:16::i;:::-;36049:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35975:135;:::o;2136:94::-;2188:7;2213:10;2206:17;;2136:94;:::o;35470:174::-;35572:2;35545:15;:24;35561:7;35545:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35628:7;35624:2;35590:46;;35599:23;35614:7;35599:14;:23::i;:::-;35590:46;;;;;;;;;;;;35470:174;;:::o;18326:114::-;18391:7;18418;:14;;;18411:21;;18326:114;;;:::o;32998:264::-;33091:4;33108:13;33124:23;33139:7;33124:14;:23::i;:::-;33108:39;;33177:5;33166:16;;:7;:16;;;:52;;;;33186:32;33203:5;33210:7;33186:16;:32::i;:::-;33166:52;:87;;;;33246:7;33222:31;;:20;33234:7;33222:11;:20::i;:::-;:31;;;33166:87;33158:96;;;32998:264;;;;:::o;34753:709::-;34912:4;34885:31;;:23;34900:7;34885:14;:23::i;:::-;:31;;;34877:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34991:1;34977:16;;:2;:16;;;34969:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35047:39;35068:4;35074:2;35078:7;35047:20;:39::i;:::-;35134:4;35107:31;;:23;35122:7;35107:14;:23::i;:::-;:31;;;35099:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35200:15;:24;35216:7;35200:24;;;;;;;;;;;;35193:31;;;;;;;;;;;35281:1;35262:9;:15;35272:4;35262:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;35314:1;35297:9;:13;35307:2;35297:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;35356:2;35337:7;:16;35345:7;35337:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35395:7;35391:2;35376:27;;35385:4;35376:27;;;;;;;;;;;;35416:38;35436:4;35442:2;35446:7;35416:19;:38::i;:::-;34753:709;;;:::o;34271:474::-;34331:13;34347:23;34362:7;34347:14;:23::i;:::-;34331:39;;34383:48;34404:5;34419:1;34423:7;34383:20;:48::i;:::-;34452:23;34467:7;34452:14;:23::i;:::-;34444:31;;34495:15;:24;34511:7;34495:24;;;;;;;;;;;;34488:31;;;;;;;;;;;34577:1;34557:9;:16;34567:5;34557:16;;;;;;;;;;;;;;;;:21;;;;;;;;;;;34607:7;:16;34615:7;34607:16;;;;;;;;;;;;34600:23;;;;;;;;;;;34669:7;34665:1;34641:36;;34650:5;34641:36;;;;;;;;;;;;34690:47;34710:5;34725:1;34729:7;34690:19;:47::i;:::-;34320:425;34271:474;:::o;33270:110::-;33346:26;33356:2;33360:7;33346:26;;;;;;;;;;;;:9;:26::i;:::-;33270:110;;:::o;32737:117::-;32803:7;32830;:16;32838:7;32830:16;;;;;;;;;;;;;;;;;;;;;32823:23;;32737:117;;;:::o;4480:184::-;4552:16;4571:6;;;;;;;;;;;4552:25;;4595:8;4586:6;;:17;;;;;;;;;;;;;;;;;;4648:8;4617:40;;4638:8;4617:40;;;;;;;;;;;;4543:121;4480:184;:::o;35652:315::-;35807:8;35798:17;;:5;:17;;;35790:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35894:8;35856:18;:25;35875:5;35856:25;;;;;;;;;;;;;;;:35;35882:8;35856:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35940:8;35918:41;;35933:5;35918:41;;;35950:8;35918:41;;;;;;:::i;:::-;;;;;;;;35652:315;;;:::o;32416:313::-;32572:28;32582:4;32588:2;32592:7;32572:9;:28::i;:::-;32619:47;32642:4;32648:2;32652:7;32661:4;32619:22;:47::i;:::-;32611:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32416:313;;;;:::o;32862:128::-;32927:4;32980:1;32951:31;;:17;32960:7;32951:8;:17::i;:::-;:31;;;;32944:38;;32862:128;;;:::o;41545:105::-;41597:13;41630:12;41623:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41545:105;:::o;5045:534::-;5101:13;5142:1;5133:5;:10;5129:53;;5160:10;;;;;;;;;;;;;;;;;;;;;5129:53;5192:12;5207:5;5192:20;;5223:14;5248:78;5263:1;5255:4;:9;5248:78;;5281:8;;;;;:::i;:::-;;;;5312:2;5304:10;;;;;:::i;:::-;;;5248:78;;;5336:19;5368:6;5358:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5336:39;;5386:154;5402:1;5393:5;:10;5386:154;;5430:1;5420:11;;;;;:::i;:::-;;;5497:2;5489:5;:10;;;;:::i;:::-;5476:2;:24;;;;:::i;:::-;5463:39;;5446:6;5453;5446:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5526:2;5517:11;;;;;:::i;:::-;;;5386:154;;;5564:6;5550:21;;;;;5045:534;;;;:::o;36923:126::-;;;;:::o;37057:125::-;;;;:::o;33388:319::-;33517:18;33523:2;33527:7;33517:5;:18::i;:::-;33568:53;33599:1;33603:2;33607:7;33616:4;33568:22;:53::i;:::-;33546:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;33388:319;;;:::o;36118:797::-;36272:4;36293:15;:2;:13;;;:15::i;:::-;36289:619;;;36345:2;36329:36;;;36366:12;:10;:12::i;:::-;36380:4;36386:7;36395:4;36329:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36325:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36587:1;36570:6;:13;:18;36566:272;;36613:60;;;;;;;;;;:::i;:::-;;;;;;;;36566:272;36788:6;36782:13;36773:6;36769:2;36765:15;36758:38;36325:528;36461:41;;;36451:51;;;:6;:51;;;;36444:58;;;;;36289:619;36892:4;36885:11;;36118:797;;;;;;;:::o;33715:548::-;33809:1;33795:16;;:2;:16;;;33787:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33868:16;33876:7;33868;:16::i;:::-;33867:17;33859:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33930:45;33959:1;33963:2;33967:7;33930:20;:45::i;:::-;33997:16;34005:7;33997;:16::i;:::-;33996:17;33988:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34084:9;:13;34094:2;34084:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;34145:2;34126:7;:16;34134:7;34126:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34190:7;34186:2;34165:33;;34182:1;34165:33;;;;;;;;;;;;34211:44;34239:1;34243:2;34247:7;34211:19;:44::i;:::-;33715:548;;:::o;9316:326::-;9376:4;9633:1;9611:7;:19;;;:23;9604:30;;9316:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:117::-;5976:1;5973;5966:12;5990:117;6099:1;6096;6089:12;6113:180;6161:77;6158:1;6151:88;6258:4;6255:1;6248:15;6282:4;6279:1;6272:15;6299:281;6382:27;6404:4;6382:27;:::i;:::-;6374:6;6370:40;6512:6;6500:10;6497:22;6476:18;6464:10;6461:34;6458:62;6455:88;;;6523:18;;:::i;:::-;6455:88;6563:10;6559:2;6552:22;6342:238;6299:281;;:::o;6586:129::-;6620:6;6647:20;;:::i;:::-;6637:30;;6676:33;6704:4;6696:6;6676:33;:::i;:::-;6586:129;;;:::o;6721:308::-;6783:4;6873:18;6865:6;6862:30;6859:56;;;6895:18;;:::i;:::-;6859:56;6933:29;6955:6;6933:29;:::i;:::-;6925:37;;7017:4;7011;7007:15;6999:23;;6721:308;;;:::o;7035:146::-;7132:6;7127:3;7122;7109:30;7173:1;7164:6;7159:3;7155:16;7148:27;7035:146;;;:::o;7187:425::-;7265:5;7290:66;7306:49;7348:6;7306:49;:::i;:::-;7290:66;:::i;:::-;7281:75;;7379:6;7372:5;7365:21;7417:4;7410:5;7406:16;7455:3;7446:6;7441:3;7437:16;7434:25;7431:112;;;7462:79;;:::i;:::-;7431:112;7552:54;7599:6;7594:3;7589;7552:54;:::i;:::-;7271:341;7187:425;;;;;:::o;7632:340::-;7688:5;7737:3;7730:4;7722:6;7718:17;7714:27;7704:122;;7745:79;;:::i;:::-;7704:122;7862:6;7849:20;7887:79;7962:3;7954:6;7947:4;7939:6;7935:17;7887:79;:::i;:::-;7878:88;;7694:278;7632:340;;;;:::o;7978:509::-;8047:6;8096:2;8084:9;8075:7;8071:23;8067:32;8064:119;;;8102:79;;:::i;:::-;8064:119;8250:1;8239:9;8235:17;8222:31;8280:18;8272:6;8269:30;8266:117;;;8302:79;;:::i;:::-;8266:117;8407:63;8462:7;8453:6;8442:9;8438:22;8407:63;:::i;:::-;8397:73;;8193:287;7978:509;;;;:::o;8493:329::-;8552:6;8601:2;8589:9;8580:7;8576:23;8572:32;8569:119;;;8607:79;;:::i;:::-;8569:119;8727:1;8752:53;8797:7;8788:6;8777:9;8773:22;8752:53;:::i;:::-;8742:63;;8698:117;8493:329;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:468::-;9154:6;9162;9211:2;9199:9;9190:7;9186:23;9182:32;9179:119;;;9217:79;;:::i;:::-;9179:119;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:50;9532:7;9523:6;9512:9;9508:22;9490:50;:::i;:::-;9480:60;;9435:115;9089:468;;;;;:::o;9563:307::-;9624:4;9714:18;9706:6;9703:30;9700:56;;;9736:18;;:::i;:::-;9700:56;9774:29;9796:6;9774:29;:::i;:::-;9766:37;;9858:4;9852;9848:15;9840:23;;9563:307;;;:::o;9876:423::-;9953:5;9978:65;9994:48;10035:6;9994:48;:::i;:::-;9978:65;:::i;:::-;9969:74;;10066:6;10059:5;10052:21;10104:4;10097:5;10093:16;10142:3;10133:6;10128:3;10124:16;10121:25;10118:112;;;10149:79;;:::i;:::-;10118:112;10239:54;10286:6;10281:3;10276;10239:54;:::i;:::-;9959:340;9876:423;;;;;:::o;10318:338::-;10373:5;10422:3;10415:4;10407:6;10403:17;10399:27;10389:122;;10430:79;;:::i;:::-;10389:122;10547:6;10534:20;10572:78;10646:3;10638:6;10631:4;10623:6;10619:17;10572:78;:::i;:::-;10563:87;;10379:277;10318:338;;;;:::o;10662:943::-;10757:6;10765;10773;10781;10830:3;10818:9;10809:7;10805:23;10801:33;10798:120;;;10837:79;;:::i;:::-;10798:120;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;11212:2;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11183:118;11368:2;11357:9;11353:18;11340:32;11399:18;11391:6;11388:30;11385:117;;;11421:79;;:::i;:::-;11385:117;11526:62;11580:7;11571:6;11560:9;11556:22;11526:62;:::i;:::-;11516:72;;11311:287;10662:943;;;;;;;:::o;11611:323::-;11667:6;11716:2;11704:9;11695:7;11691:23;11687:32;11684:119;;;11722:79;;:::i;:::-;11684:119;11842:1;11867:50;11909:7;11900:6;11889:9;11885:22;11867:50;:::i;:::-;11857:60;;11813:114;11611:323;;;;:::o;11940:474::-;12008:6;12016;12065:2;12053:9;12044:7;12040:23;12036:32;12033:119;;;12071:79;;:::i;:::-;12033:119;12191:1;12216:53;12261:7;12252:6;12241:9;12237:22;12216:53;:::i;:::-;12206:63;;12162:117;12318:2;12344:53;12389:7;12380:6;12369:9;12365:22;12344:53;:::i;:::-;12334:63;;12289:118;11940:474;;;;;:::o;12420:180::-;12468:77;12465:1;12458:88;12565:4;12562:1;12555:15;12589:4;12586:1;12579:15;12606:320;12650:6;12687:1;12681:4;12677:12;12667:22;;12734:1;12728:4;12724:12;12755:18;12745:81;;12811:4;12803:6;12799:17;12789:27;;12745:81;12873:2;12865:6;12862:14;12842:18;12839:38;12836:84;;12892:18;;:::i;:::-;12836:84;12657:269;12606:320;;;:::o;12932:220::-;13072:34;13068:1;13060:6;13056:14;13049:58;13141:3;13136:2;13128:6;13124:15;13117:28;12932:220;:::o;13158:366::-;13300:3;13321:67;13385:2;13380:3;13321:67;:::i;:::-;13314:74;;13397:93;13486:3;13397:93;:::i;:::-;13515:2;13510:3;13506:12;13499:19;;13158:366;;;:::o;13530:419::-;13696:4;13734:2;13723:9;13719:18;13711:26;;13783:9;13777:4;13773:20;13769:1;13758:9;13754:17;13747:47;13811:131;13937:4;13811:131;:::i;:::-;13803:139;;13530:419;;;:::o;13955:248::-;14095:34;14091:1;14083:6;14079:14;14072:58;14164:31;14159:2;14151:6;14147:15;14140:56;13955:248;:::o;14209:366::-;14351:3;14372:67;14436:2;14431:3;14372:67;:::i;:::-;14365:74;;14448:93;14537:3;14448:93;:::i;:::-;14566:2;14561:3;14557:12;14550:19;;14209:366;;;:::o;14581:419::-;14747:4;14785:2;14774:9;14770:18;14762:26;;14834:9;14828:4;14824:20;14820:1;14809:9;14805:17;14798:47;14862:131;14988:4;14862:131;:::i;:::-;14854:139;;14581:419;;;:::o;15006:232::-;15146:34;15142:1;15134:6;15130:14;15123:58;15215:15;15210:2;15202:6;15198:15;15191:40;15006:232;:::o;15244:366::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:419::-;15782:4;15820:2;15809:9;15805:18;15797:26;;15869:9;15863:4;15859:20;15855:1;15844:9;15840:17;15833:47;15897:131;16023:4;15897:131;:::i;:::-;15889:139;;15616:419;;;:::o;16041:171::-;16181:23;16177:1;16169:6;16165:14;16158:47;16041:171;:::o;16218:366::-;16360:3;16381:67;16445:2;16440:3;16381:67;:::i;:::-;16374:74;;16457:93;16546:3;16457:93;:::i;:::-;16575:2;16570:3;16566:12;16559:19;;16218:366;;;:::o;16590:419::-;16756:4;16794:2;16783:9;16779:18;16771:26;;16843:9;16837:4;16833:20;16829:1;16818:9;16814:17;16807:47;16871:131;16997:4;16871:131;:::i;:::-;16863:139;;16590:419;;;:::o;17015:143::-;17072:5;17103:6;17097:13;17088:22;;17119:33;17146:5;17119:33;:::i;:::-;17015:143;;;;:::o;17164:351::-;17234:6;17283:2;17271:9;17262:7;17258:23;17254:32;17251:119;;;17289:79;;:::i;:::-;17251:119;17409:1;17434:64;17490:7;17481:6;17470:9;17466:22;17434:64;:::i;:::-;17424:74;;17380:128;17164:351;;;;:::o;17521:163::-;17661:15;17657:1;17649:6;17645:14;17638:39;17521:163;:::o;17690:366::-;17832:3;17853:67;17917:2;17912:3;17853:67;:::i;:::-;17846:74;;17929:93;18018:3;17929:93;:::i;:::-;18047:2;18042:3;18038:12;18031:19;;17690:366;;;:::o;18062:419::-;18228:4;18266:2;18255:9;18251:18;18243:26;;18315:9;18309:4;18305:20;18301:1;18290:9;18286:17;18279:47;18343:131;18469:4;18343:131;:::i;:::-;18335:139;;18062:419;;;:::o;18487:161::-;18627:13;18623:1;18615:6;18611:14;18604:37;18487:161;:::o;18654:366::-;18796:3;18817:67;18881:2;18876:3;18817:67;:::i;:::-;18810:74;;18893:93;18982:3;18893:93;:::i;:::-;19011:2;19006:3;19002:12;18995:19;;18654:366;;;:::o;19026:419::-;19192:4;19230:2;19219:9;19215:18;19207:26;;19279:9;19273:4;19269:20;19265:1;19254:9;19250:17;19243:47;19307:131;19433:4;19307:131;:::i;:::-;19299:139;;19026:419;;;:::o;19451:180::-;19499:77;19496:1;19489:88;19596:4;19593:1;19586:15;19620:4;19617:1;19610:15;19637:194;19677:4;19697:20;19715:1;19697:20;:::i;:::-;19692:25;;19731:20;19749:1;19731:20;:::i;:::-;19726:25;;19775:1;19772;19768:9;19760:17;;19799:1;19793:4;19790:11;19787:37;;;19804:18;;:::i;:::-;19787:37;19637:194;;;;:::o;19837:162::-;19977:14;19973:1;19965:6;19961:14;19954:38;19837:162;:::o;20005:366::-;20147:3;20168:67;20232:2;20227:3;20168:67;:::i;:::-;20161:74;;20244:93;20333:3;20244:93;:::i;:::-;20362:2;20357:3;20353:12;20346:19;;20005:366;;;:::o;20377:419::-;20543:4;20581:2;20570:9;20566:18;20558:26;;20630:9;20624:4;20620:20;20616:1;20605:9;20601:17;20594:47;20658:131;20784:4;20658:131;:::i;:::-;20650:139;;20377:419;;;:::o;20802:141::-;20851:4;20874:3;20866:11;;20897:3;20894:1;20887:14;20931:4;20928:1;20918:18;20910:26;;20802:141;;;:::o;20949:93::-;20986:6;21033:2;21028;21021:5;21017:14;21013:23;21003:33;;20949:93;;;:::o;21048:107::-;21092:8;21142:5;21136:4;21132:16;21111:37;;21048:107;;;;:::o;21161:393::-;21230:6;21280:1;21268:10;21264:18;21303:97;21333:66;21322:9;21303:97;:::i;:::-;21421:39;21451:8;21440:9;21421:39;:::i;:::-;21409:51;;21493:4;21489:9;21482:5;21478:21;21469:30;;21542:4;21532:8;21528:19;21521:5;21518:30;21508:40;;21237:317;;21161:393;;;;;:::o;21560:60::-;21588:3;21609:5;21602:12;;21560:60;;;:::o;21626:142::-;21676:9;21709:53;21727:34;21736:24;21754:5;21736:24;:::i;:::-;21727:34;:::i;:::-;21709:53;:::i;:::-;21696:66;;21626:142;;;:::o;21774:75::-;21817:3;21838:5;21831:12;;21774:75;;;:::o;21855:269::-;21965:39;21996:7;21965:39;:::i;:::-;22026:91;22075:41;22099:16;22075:41;:::i;:::-;22067:6;22060:4;22054:11;22026:91;:::i;:::-;22020:4;22013:105;21931:193;21855:269;;;:::o;22130:73::-;22175:3;22130:73;:::o;22209:189::-;22286:32;;:::i;:::-;22327:65;22385:6;22377;22371:4;22327:65;:::i;:::-;22262:136;22209:189;;:::o;22404:186::-;22464:120;22481:3;22474:5;22471:14;22464:120;;;22535:39;22572:1;22565:5;22535:39;:::i;:::-;22508:1;22501:5;22497:13;22488:22;;22464:120;;;22404:186;;:::o;22596:543::-;22697:2;22692:3;22689:11;22686:446;;;22731:38;22763:5;22731:38;:::i;:::-;22815:29;22833:10;22815:29;:::i;:::-;22805:8;22801:44;22998:2;22986:10;22983:18;22980:49;;;23019:8;23004:23;;22980:49;23042:80;23098:22;23116:3;23098:22;:::i;:::-;23088:8;23084:37;23071:11;23042:80;:::i;:::-;22701:431;;22686:446;22596:543;;;:::o;23145:117::-;23199:8;23249:5;23243:4;23239:16;23218:37;;23145:117;;;;:::o;23268:169::-;23312:6;23345:51;23393:1;23389:6;23381:5;23378:1;23374:13;23345:51;:::i;:::-;23341:56;23426:4;23420;23416:15;23406:25;;23319:118;23268:169;;;;:::o;23442:295::-;23518:4;23664:29;23689:3;23683:4;23664:29;:::i;:::-;23656:37;;23726:3;23723:1;23719:11;23713:4;23710:21;23702:29;;23442:295;;;;:::o;23742:1395::-;23859:37;23892:3;23859:37;:::i;:::-;23961:18;23953:6;23950:30;23947:56;;;23983:18;;:::i;:::-;23947:56;24027:38;24059:4;24053:11;24027:38;:::i;:::-;24112:67;24172:6;24164;24158:4;24112:67;:::i;:::-;24206:1;24230:4;24217:17;;24262:2;24254:6;24251:14;24279:1;24274:618;;;;24936:1;24953:6;24950:77;;;25002:9;24997:3;24993:19;24987:26;24978:35;;24950:77;25053:67;25113:6;25106:5;25053:67;:::i;:::-;25047:4;25040:81;24909:222;24244:887;;24274:618;24326:4;24322:9;24314:6;24310:22;24360:37;24392:4;24360:37;:::i;:::-;24419:1;24433:208;24447:7;24444:1;24441:14;24433:208;;;24526:9;24521:3;24517:19;24511:26;24503:6;24496:42;24577:1;24569:6;24565:14;24555:24;;24624:2;24613:9;24609:18;24596:31;;24470:4;24467:1;24463:12;24458:17;;24433:208;;;24669:6;24660:7;24657:19;24654:179;;;24727:9;24722:3;24718:19;24712:26;24770:48;24812:4;24804:6;24800:17;24789:9;24770:48;:::i;:::-;24762:6;24755:64;24677:156;24654:179;24879:1;24875;24867:6;24863:14;24859:22;24853:4;24846:36;24281:611;;;24244:887;;23834:1303;;;23742:1395;;:::o;25143:174::-;25283:26;25279:1;25271:6;25267:14;25260:50;25143:174;:::o;25323:366::-;25465:3;25486:67;25550:2;25545:3;25486:67;:::i;:::-;25479:74;;25562:93;25651:3;25562:93;:::i;:::-;25680:2;25675:3;25671:12;25664:19;;25323:366;;;:::o;25695:419::-;25861:4;25899:2;25888:9;25884:18;25876:26;;25948:9;25942:4;25938:20;25934:1;25923:9;25919:17;25912:47;25976:131;26102:4;25976:131;:::i;:::-;25968:139;;25695:419;;;:::o;26120:228::-;26260:34;26256:1;26248:6;26244:14;26237:58;26329:11;26324:2;26316:6;26312:15;26305:36;26120:228;:::o;26354:366::-;26496:3;26517:67;26581:2;26576:3;26517:67;:::i;:::-;26510:74;;26593:93;26682:3;26593:93;:::i;:::-;26711:2;26706:3;26702:12;26695:19;;26354:366;;;:::o;26726:419::-;26892:4;26930:2;26919:9;26915:18;26907:26;;26979:9;26973:4;26969:20;26965:1;26954:9;26950:17;26943:47;27007:131;27133:4;27007:131;:::i;:::-;26999:139;;26726:419;;;:::o;27151:177::-;27291:29;27287:1;27279:6;27275:14;27268:53;27151:177;:::o;27334:366::-;27476:3;27497:67;27561:2;27556:3;27497:67;:::i;:::-;27490:74;;27573:93;27662:3;27573:93;:::i;:::-;27691:2;27686:3;27682:12;27675:19;;27334:366;;;:::o;27706:419::-;27872:4;27910:2;27899:9;27895:18;27887:26;;27959:9;27953:4;27949:20;27945:1;27934:9;27930:17;27923:47;27987:131;28113:4;27987:131;:::i;:::-;27979:139;;27706:419;;;:::o;28131:148::-;28233:11;28270:3;28255:18;;28131:148;;;;:::o;28285:390::-;28391:3;28419:39;28452:5;28419:39;:::i;:::-;28474:89;28556:6;28551:3;28474:89;:::i;:::-;28467:96;;28572:65;28630:6;28625:3;28618:4;28611:5;28607:16;28572:65;:::i;:::-;28662:6;28657:3;28653:16;28646:23;;28395:280;28285:390;;;;:::o;28705:874::-;28808:3;28845:5;28839:12;28874:36;28900:9;28874:36;:::i;:::-;28926:89;29008:6;29003:3;28926:89;:::i;:::-;28919:96;;29046:1;29035:9;29031:17;29062:1;29057:166;;;;29237:1;29232:341;;;;29024:549;;29057:166;29141:4;29137:9;29126;29122:25;29117:3;29110:38;29203:6;29196:14;29189:22;29181:6;29177:35;29172:3;29168:45;29161:52;;29057:166;;29232:341;29299:38;29331:5;29299:38;:::i;:::-;29359:1;29373:154;29387:6;29384:1;29381:13;29373:154;;;29461:7;29455:14;29451:1;29446:3;29442:11;29435:35;29511:1;29502:7;29498:15;29487:26;;29409:4;29406:1;29402:12;29397:17;;29373:154;;;29556:6;29551:3;29547:16;29540:23;;29239:334;;29024:549;;28812:767;;28705:874;;;;:::o;29585:589::-;29810:3;29832:95;29923:3;29914:6;29832:95;:::i;:::-;29825:102;;29944:95;30035:3;30026:6;29944:95;:::i;:::-;29937:102;;30056:92;30144:3;30135:6;30056:92;:::i;:::-;30049:99;;30165:3;30158:10;;29585:589;;;;;;:::o;30180:225::-;30320:34;30316:1;30308:6;30304:14;30297:58;30389:8;30384:2;30376:6;30372:15;30365:33;30180:225;:::o;30411:366::-;30553:3;30574:67;30638:2;30633:3;30574:67;:::i;:::-;30567:74;;30650:93;30739:3;30650:93;:::i;:::-;30768:2;30763:3;30759:12;30752:19;;30411:366;;;:::o;30783:419::-;30949:4;30987:2;30976:9;30972:18;30964:26;;31036:9;31030:4;31026:20;31022:1;31011:9;31007:17;31000:47;31064:131;31190:4;31064:131;:::i;:::-;31056:139;;30783:419;;;:::o;31208:224::-;31348:34;31344:1;31336:6;31332:14;31325:58;31417:7;31412:2;31404:6;31400:15;31393:32;31208:224;:::o;31438:366::-;31580:3;31601:67;31665:2;31660:3;31601:67;:::i;:::-;31594:74;;31677:93;31766:3;31677:93;:::i;:::-;31795:2;31790:3;31786:12;31779:19;;31438:366;;;:::o;31810:419::-;31976:4;32014:2;32003:9;31999:18;31991:26;;32063:9;32057:4;32053:20;32049:1;32038:9;32034:17;32027:47;32091:131;32217:4;32091:131;:::i;:::-;32083:139;;31810:419;;;:::o;32235:223::-;32375:34;32371:1;32363:6;32359:14;32352:58;32444:6;32439:2;32431:6;32427:15;32420:31;32235:223;:::o;32464:366::-;32606:3;32627:67;32691:2;32686:3;32627:67;:::i;:::-;32620:74;;32703:93;32792:3;32703:93;:::i;:::-;32821:2;32816:3;32812:12;32805:19;;32464:366;;;:::o;32836:419::-;33002:4;33040:2;33029:9;33025:18;33017:26;;33089:9;33083:4;33079:20;33075:1;33064:9;33060:17;33053:47;33117:131;33243:4;33117:131;:::i;:::-;33109:139;;32836:419;;;:::o;33261:175::-;33401:27;33397:1;33389:6;33385:14;33378:51;33261:175;:::o;33442:366::-;33584:3;33605:67;33669:2;33664:3;33605:67;:::i;:::-;33598:74;;33681:93;33770:3;33681:93;:::i;:::-;33799:2;33794:3;33790:12;33783:19;;33442:366;;;:::o;33814:419::-;33980:4;34018:2;34007:9;34003:18;33995:26;;34067:9;34061:4;34057:20;34053:1;34042:9;34038:17;34031:47;34095:131;34221:4;34095:131;:::i;:::-;34087:139;;33814:419;;;:::o;34239:237::-;34379:34;34375:1;34367:6;34363:14;34356:58;34448:20;34443:2;34435:6;34431:15;34424:45;34239:237;:::o;34482:366::-;34624:3;34645:67;34709:2;34704:3;34645:67;:::i;:::-;34638:74;;34721:93;34810:3;34721:93;:::i;:::-;34839:2;34834:3;34830:12;34823:19;;34482:366;;;:::o;34854:419::-;35020:4;35058:2;35047:9;35043:18;35035:26;;35107:9;35101:4;35097:20;35093:1;35082:9;35078:17;35071:47;35135:131;35261:4;35135:131;:::i;:::-;35127:139;;34854:419;;;:::o;35279:233::-;35318:3;35341:24;35359:5;35341:24;:::i;:::-;35332:33;;35387:66;35380:5;35377:77;35374:103;;35457:18;;:::i;:::-;35374:103;35504:1;35497:5;35493:13;35486:20;;35279:233;;;:::o;35518:180::-;35566:77;35563:1;35556:88;35663:4;35660:1;35653:15;35687:4;35684:1;35677:15;35704:185;35744:1;35761:20;35779:1;35761:20;:::i;:::-;35756:25;;35795:20;35813:1;35795:20;:::i;:::-;35790:25;;35834:1;35824:35;;35839:18;;:::i;:::-;35824:35;35881:1;35878;35874:9;35869:14;;35704:185;;;;:::o;35895:176::-;35927:1;35944:20;35962:1;35944:20;:::i;:::-;35939:25;;35978:20;35996:1;35978:20;:::i;:::-;35973:25;;36017:1;36007:35;;36022:18;;:::i;:::-;36007:35;36063:1;36060;36056:9;36051:14;;35895:176;;;;:::o;36077:191::-;36117:3;36136:20;36154:1;36136:20;:::i;:::-;36131:25;;36170:20;36188:1;36170:20;:::i;:::-;36165:25;;36213:1;36210;36206:9;36199:16;;36234:3;36231:1;36228:10;36225:36;;;36241:18;;:::i;:::-;36225:36;36077:191;;;;:::o;36274:180::-;36322:77;36319:1;36312:88;36419:4;36416:1;36409:15;36443:4;36440:1;36433:15;36460:98;36511:6;36545:5;36539:12;36529:22;;36460:98;;;:::o;36564:168::-;36647:11;36681:6;36676:3;36669:19;36721:4;36716:3;36712:14;36697:29;;36564:168;;;;:::o;36738:373::-;36824:3;36852:38;36884:5;36852:38;:::i;:::-;36906:70;36969:6;36964:3;36906:70;:::i;:::-;36899:77;;36985:65;37043:6;37038:3;37031:4;37024:5;37020:16;36985:65;:::i;:::-;37075:29;37097:6;37075:29;:::i;:::-;37070:3;37066:39;37059:46;;36828:283;36738:373;;;;:::o;37117:640::-;37312:4;37350:3;37339:9;37335:19;37327:27;;37364:71;37432:1;37421:9;37417:17;37408:6;37364:71;:::i;:::-;37445:72;37513:2;37502:9;37498:18;37489:6;37445:72;:::i;:::-;37527;37595:2;37584:9;37580:18;37571:6;37527:72;:::i;:::-;37646:9;37640:4;37636:20;37631:2;37620:9;37616:18;37609:48;37674:76;37745:4;37736:6;37674:76;:::i;:::-;37666:84;;37117:640;;;;;;;:::o;37763:141::-;37819:5;37850:6;37844:13;37835:22;;37866:32;37892:5;37866:32;:::i;:::-;37763:141;;;;:::o;37910:349::-;37979:6;38028:2;38016:9;38007:7;38003:23;37999:32;37996:119;;;38034:79;;:::i;:::-;37996:119;38154:1;38179:63;38234:7;38225:6;38214:9;38210:22;38179:63;:::i;:::-;38169:73;;38125:127;37910:349;;;;:::o;38265:182::-;38405:34;38401:1;38393:6;38389:14;38382:58;38265:182;:::o;38453:366::-;38595:3;38616:67;38680:2;38675:3;38616:67;:::i;:::-;38609:74;;38692:93;38781:3;38692:93;:::i;:::-;38810:2;38805:3;38801:12;38794:19;;38453:366;;;:::o;38825:419::-;38991:4;39029:2;39018:9;39014:18;39006:26;;39078:9;39072:4;39068:20;39064:1;39053:9;39049:17;39042:47;39106:131;39232:4;39106:131;:::i;:::-;39098:139;;38825:419;;;:::o;39250:178::-;39390:30;39386:1;39378:6;39374:14;39367:54;39250:178;:::o;39434:366::-;39576:3;39597:67;39661:2;39656:3;39597:67;:::i;:::-;39590:74;;39673:93;39762:3;39673:93;:::i;:::-;39791:2;39786:3;39782:12;39775:19;;39434:366;;;:::o;39806:419::-;39972:4;40010:2;39999:9;39995:18;39987:26;;40059:9;40053:4;40049:20;40045:1;40034:9;40030:17;40023:47;40087:131;40213:4;40087:131;:::i;:::-;40079:139;;39806:419;;;:::o

Swarm Source

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