Overview
ETH Balance
0.12 ETH
Eth Value
$268.00 (@ $2,233.35/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 20 from a total of 20 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Give Free Mint | 16420285 | 778 days ago | IN | 0 ETH | 0.00073858 | ||||
Give Free Mint | 16335112 | 790 days ago | IN | 0 ETH | 0.00142071 | ||||
Give Free Mints | 16093305 | 824 days ago | IN | 0 ETH | 0.00089296 | ||||
Give Free Mints | 15984001 | 839 days ago | IN | 0 ETH | 0.00243447 | ||||
Give Free Mints | 15892042 | 852 days ago | IN | 0 ETH | 0.00192439 | ||||
Give Free Mints | 15777676 | 868 days ago | IN | 0 ETH | 0.00336545 | ||||
Set Approval For... | 15595804 | 893 days ago | IN | 0 ETH | 0.0002999 | ||||
Free Mint | 15582663 | 895 days ago | IN | 0 ETH | 0.00084329 | ||||
Give Free Mint | 15582599 | 895 days ago | IN | 0 ETH | 0.00102551 | ||||
Give Free Mints | 15546889 | 900 days ago | IN | 0 ETH | 0.00034774 | ||||
Give Free Mints | 15546796 | 900 days ago | IN | 0 ETH | 0.000607 | ||||
Free Mint | 15522516 | 904 days ago | IN | 0 ETH | 0.00111444 | ||||
Give Free Mint | 15515727 | 905 days ago | IN | 0 ETH | 0.00238969 | ||||
Give Free Mints | 15506094 | 907 days ago | IN | 0 ETH | 0.00126343 | ||||
Give Free Mints | 15485248 | 910 days ago | IN | 0 ETH | 0.00211441 | ||||
Mint | 15466490 | 913 days ago | IN | 0.06 ETH | 0.00069713 | ||||
Transfer Ownersh... | 15466426 | 913 days ago | IN | 0 ETH | 0.00020428 | ||||
Set Base URI | 15465437 | 913 days ago | IN | 0 ETH | 0.00071412 | ||||
Mint | 15460306 | 914 days ago | IN | 0.06 ETH | 0.00280043 | ||||
Flip Sale State | 15460247 | 914 days ago | IN | 0 ETH | 0.00096526 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DVNSLV
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-01 */ /** *Submitted for verification at Etherscan.io on 2022-09-01 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } /** * @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); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @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); } /** * @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); } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @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; } } error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev See {IERC721Enumerable-totalSupply}. * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { if (owner == address(0)) revert AuxQueryForZeroAddress(); return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { if (owner == address(0)) revert AuxQueryForZeroAddress(); _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract DVNSLV is ERC721A , Ownable { using SafeMath for uint256; uint256 public price = 60000000000000000; // 0.06 ether string public baseUri; uint256 public MAX = 2500; uint public maxPurchase = MAX; uint public maxPerWallet = MAX; bool public saleIsActive = false; mapping (address => uint256) public userMints; mapping (address => uint256) public userFreeMints; function changePrice(uint256 newPrice) public onlyOwner { price = newPrice; } function changeMaxMint(uint256 maxMint) public onlyOwner { maxPurchase = maxMint; } function changeMaxMintPerWallet(uint256 maxMintPerWallet) public onlyOwner { maxPerWallet = maxMintPerWallet; } constructor() ERC721A("DRIVENVERSE 0NE Silver Tier 1", "DVNSLV") {} function withdraw() public onlyOwner { uint balance = address(this).balance; address payable one = payable(0xF02A7fEC86787FD29427CAd8581d400D0BB660f1); one.transfer(balance); } function mint(uint256 quantity) external payable { require(saleIsActive, "Sale must be active to mint nft"); require(quantity <= maxPurchase, "Can only mint certain tokens at a time"); require(price.mul(quantity) <= msg.value, "Not Enough Ether Sent"); require(totalSupply().add(quantity) <= MAX, "Purchase would exceed max supply of nfts"); require(userMints[_msgSender()].add(quantity) <= maxPerWallet , "Max limit of wallet reached"); userMints[_msgSender()] += quantity; // _safeMint's second argument now takes in a quantity, not a tokenId. _safeMint(msg.sender, quantity); } function freeMint() external { require(saleIsActive, "Sale must be active to mint nft"); uint256 quantity = userFreeMints[_msgSender()]; require(quantity > 0 , "No Free Mints"); require(totalSupply().add(quantity) <= MAX, "Mint would exceed max supply of nfts"); userMints[_msgSender()] += quantity; userFreeMints[_msgSender()] = 0; // _safeMint's second argument now takes in a quantity, not a tokenId. _safeMint(msg.sender, quantity); } function setBaseURI(string memory baseURI_) public onlyOwner { baseUri = baseURI_; } function giveFreeMints(address[] memory wallets , uint256[] memory quantities) external onlyOwner{ for(uint256 i = 0 ; i< wallets.length ; i++){ userFreeMints[wallets[i]] = quantities[i]; } } function giveFreeMint(address wallet , uint256 quantity) external onlyOwner{ userFreeMints[wallet] = quantity; } /* * Pause sale if active, make active if paused */ function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default */ function _baseURI() internal view override returns (string memory) { return baseUri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","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":[],"name":"MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint","type":"uint256"}],"name":"changeMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintPerWallet","type":"uint256"}],"name":"changeMaxMintPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMint","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":"wallet","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"giveFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"quantities","type":"uint256[]"}],"name":"giveFreeMints","outputs":[],"stateMutability":"nonpayable","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":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"baseURI_","type":"string"}],"name":"setBaseURI","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userFreeMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266d529ae9e8600006009556109c4600b55600b54600c55600b54600d556000600e60006101000a81548160ff0219169083151502179055503480156200004957600080fd5b506040518060400160405280601d81526020017f44524956454e564552534520304e452053696c766572205469657220310000008152506040518060400160405280600681526020017f44564e534c5600000000000000000000000000000000000000000000000000008152508160029080519060200190620000ce929190620001c4565b508060039080519060200190620000e7929190620001c4565b50620000f8620001b760201b60201c565b6000819055505050600062000112620001bc60201b60201c565b905080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002d9565b600090565b600033905090565b828054620001d290620002a3565b90600052602060002090601f016020900481019282620001f6576000855562000242565b82601f106200021157805160ff191683800117855562000242565b8280016001018555821562000242579182015b828111156200024157825182559160200191906001019062000224565b5b50905062000251919062000255565b5090565b5b808211156200027057600081600090555060010162000256565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002bc57607f821691505b60208210811415620002d357620002d262000274565b5b50919050565b6141f080620002e96000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063a2b40d19116100a0578063df2823311161006f578063df282331146106f8578063e166de7c14610735578063e985e9c514610772578063eb8d2444146107af578063f2fde38b146107da57610204565b8063a2b40d191461063e578063b88d4fde14610667578063c87b56dd14610690578063d49d5181146106cd57610204565b8063977b055b116100e7578063977b055b146105785780639abc8320146105a3578063a035b1fe146105ce578063a0712d68146105f9578063a22cb4651461061557610204565b8063715018a6146104e25780638da5cb5b146104f95780638f9ab2441461052457806395d89b411461054d57610204565b806334918dfd1161019b578063453c23101161016a578063453c2310146103fd57806355f804b3146104285780635b70ea9f146104515780636352211e1461046857806370a08231146104a557610204565b806334918dfd1461037d5780633b38716d146103945780633ccfd60b146103bd57806342842e0e146103d457610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd1461030057806320c63e3b1461032b57806323b872dd1461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc1461027157806308ea9265146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613054565b610803565b60405161023d919061309c565b60405180910390f35b34801561025257600080fd5b5061025b6108e5565b6040516102689190613150565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906131a8565b610977565b6040516102a59190613216565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906131a8565b6109f3565b005b3480156102e357600080fd5b506102fe60048036038101906102f9919061325d565b610a79565b005b34801561030c57600080fd5b50610315610b84565b60405161032291906132ac565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906131a8565b610b9b565b005b34801561036057600080fd5b5061037b600480360381019061037691906132c7565b610c21565b005b34801561038957600080fd5b50610392610c31565b005b3480156103a057600080fd5b506103bb60048036038101906103b6919061325d565b610cd9565b005b3480156103c957600080fd5b506103d2610d9d565b005b3480156103e057600080fd5b506103fb60048036038101906103f691906132c7565b610e82565b005b34801561040957600080fd5b50610412610ea2565b60405161041f91906132ac565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a919061344f565b610ea8565b005b34801561045d57600080fd5b50610466610f3e565b005b34801561047457600080fd5b5061048f600480360381019061048a91906131a8565b61112f565b60405161049c9190613216565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613498565b611145565b6040516104d991906132ac565b60405180910390f35b3480156104ee57600080fd5b506104f7611215565b005b34801561050557600080fd5b5061050e611352565b60405161051b9190613216565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190613650565b61137c565b005b34801561055957600080fd5b50610562611494565b60405161056f9190613150565b60405180910390f35b34801561058457600080fd5b5061058d611526565b60405161059a91906132ac565b60405180910390f35b3480156105af57600080fd5b506105b861152c565b6040516105c59190613150565b60405180910390f35b3480156105da57600080fd5b506105e36115ba565b6040516105f091906132ac565b60405180910390f35b610613600480360381019061060e91906131a8565b6115c0565b005b34801561062157600080fd5b5061063c600480360381019061063791906136f4565b611810565b005b34801561064a57600080fd5b50610665600480360381019061066091906131a8565b611988565b005b34801561067357600080fd5b5061068e600480360381019061068991906137d5565b611a0e565b005b34801561069c57600080fd5b506106b760048036038101906106b291906131a8565b611a8a565b6040516106c49190613150565b60405180910390f35b3480156106d957600080fd5b506106e2611b29565b6040516106ef91906132ac565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190613498565b611b2f565b60405161072c91906132ac565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613498565b611b47565b60405161076991906132ac565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613858565b611b5f565b6040516107a6919061309c565b60405180910390f35b3480156107bb57600080fd5b506107c4611bf3565b6040516107d1919061309c565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613498565b611c06565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ce57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108de57506108dd82611db2565b5b9050919050565b6060600280546108f4906138c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610920906138c7565b801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b5050505050905090565b600061098282611e1c565b6109b8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109fb611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610a19611352565b73ffffffffffffffffffffffffffffffffffffffff1614610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690613945565b60405180910390fd5b80600d8190555050565b6000610a848261112f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aec576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b0b611e6a565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b3d5750610b3b81610b36611e6a565b611b5f565b155b15610b74576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f838383611e72565b505050565b6000610b8e611f24565b6001546000540303905090565b610ba3611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610bc1611352565b73ffffffffffffffffffffffffffffffffffffffff1614610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613945565b60405180910390fd5b80600c8190555050565b610c2c838383611f29565b505050565b610c39611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610c57611352565b73ffffffffffffffffffffffffffffffffffffffff1614610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490613945565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b610ce1611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610cff611352565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613945565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610da5611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610dc3611352565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613945565b60405180910390fd5b6000479050600073f02a7fec86787fd29427cad8581d400d0bb660f190508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610e7d573d6000803e3d6000fd5b505050565b610e9d83838360405180602001604052806000815250611a0e565b505050565b600d5481565b610eb0611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610ece611352565b73ffffffffffffffffffffffffffffffffffffffff1614610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90613945565b60405180910390fd5b80600a9080519060200190610f3a929190612f02565b5050565b600e60009054906101000a900460ff16610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f84906139b1565b60405180910390fd5b600060106000610f9b611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811161101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613a1d565b60405180910390fd5b600b546110388261102a610b84565b61241a90919063ffffffff16565b1115611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613aaf565b60405180910390fd5b80600f6000611086611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110cf9190613afe565b925050819055506000601060006110e4611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061112c3382612478565b50565b600061113a82612496565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ad576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61121d611e6a565b73ffffffffffffffffffffffffffffffffffffffff1661123b611352565b73ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890613945565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611384611e6a565b73ffffffffffffffffffffffffffffffffffffffff166113a2611352565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90613945565b60405180910390fd5b60005b825181101561148f5781818151811061141757611416613b54565b5b60200260200101516010600085848151811061143657611435613b54565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061148790613b83565b9150506113fb565b505050565b6060600380546114a3906138c7565b80601f01602080910402602001604051908101604052809291908181526020018280546114cf906138c7565b801561151c5780601f106114f15761010080835404028352916020019161151c565b820191906000526020600020905b8154815290600101906020018083116114ff57829003601f168201915b5050505050905090565b600c5481565b600a8054611539906138c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611565906138c7565b80156115b25780601f10611587576101008083540402835291602001916115b2565b820191906000526020600020905b81548152906001019060200180831161159557829003601f168201915b505050505081565b60095481565b600e60009054906101000a900460ff1661160f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611606906139b1565b60405180910390fd5b600c54811115611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90613c3e565b60405180910390fd5b3461166a8260095461272590919063ffffffff16565b11156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290613caa565b60405180910390fd5b600b546116c8826116ba610b84565b61241a90919063ffffffff16565b1115611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090613d3c565b60405180910390fd5b600d5461176582600f600061171c611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241a90919063ffffffff16565b11156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613da8565b60405180910390fd5b80600f60006117b3611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fc9190613afe565b9250508190555061180d3382612478565b50565b611818611e6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061188a611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611937611e6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161197c919061309c565b60405180910390a35050565b611990611e6a565b73ffffffffffffffffffffffffffffffffffffffff166119ae611352565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613945565b60405180910390fd5b8060098190555050565b611a19848484611f29565b611a388373ffffffffffffffffffffffffffffffffffffffff166127a0565b8015611a4d5750611a4b848484846127c3565b155b15611a84576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a9582611e1c565b611acb576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ad5612923565b9050600081511415611af65760405180602001604052806000815250611b21565b80611b00846129b5565b604051602001611b11929190613e04565b6040516020818303038152906040525b915050919050565b600b5481565b600f6020528060005260406000206000915090505481565b60106020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff1681565b611c0e611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611c2c611352565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613945565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613e9a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e27611f24565b11158015611e36575060005482105b8015611e63575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611f3482612496565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f5b611e6a565b73ffffffffffffffffffffffffffffffffffffffff161480611f8e5750611f8d8260000151611f88611e6a565b611b5f565b5b80611fd35750611f9c611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611fbb84610977565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061200c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612075576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120dc576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e98585856001612b16565b6120f96000848460000151611e72565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123aa576000548110156123a95782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124138585856001612b1c565b5050505050565b60008082846124299190613afe565b90508381101561246e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246590613f06565b60405180910390fd5b8091505092915050565b612492828260405180602001604052806000815250612b22565b5050565b61249e612f88565b6000829050806124ac611f24565b111580156124bb575060005481105b156126ee576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516126ec57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125d0578092505050612720565b5b6001156126eb57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126e6578092505050612720565b6125d1565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600080831415612738576000905061279a565b600082846127469190613f26565b90508284826127559190613faf565b14612795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278c90614052565b60405180910390fd5b809150505b92915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127e9611e6a565b8786866040518563ffffffff1660e01b815260040161280b94939291906140c7565b602060405180830381600087803b15801561282557600080fd5b505af192505050801561285657506040513d601f19601f820116820180604052508101906128539190614128565b60015b6128d0573d8060008114612886576040519150601f19603f3d011682016040523d82523d6000602084013e61288b565b606091505b506000815114156128c8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612932906138c7565b80601f016020809104026020016040519081016040528092919081815260200182805461295e906138c7565b80156129ab5780601f10612980576101008083540402835291602001916129ab565b820191906000526020600020905b81548152906001019060200180831161298e57829003601f168201915b5050505050905090565b606060008214156129fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b11565b600082905060005b60008214612a2f578080612a1890613b83565b915050600a82612a289190613faf565b9150612a05565b60008167ffffffffffffffff811115612a4b57612a4a613324565b5b6040519080825280601f01601f191660200182016040528015612a7d5781602001600182028036833780820191505090505b5090505b60008514612b0a57600182612a969190614155565b9150600a85612aa59190614189565b6030612ab19190613afe565b60f81b818381518110612ac757612ac6613b54565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b039190613faf565b9450612a81565b8093505050505b919050565b50505050565b50505050565b612b2f8383836001612b34565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612ba1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612bdc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612be96000868387612b16565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612db35750612db28773ffffffffffffffffffffffffffffffffffffffff166127a0565b5b15612e79575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e2860008884806001019550886127c3565b612e5e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612db9578260005414612e7457600080fd5b612ee5565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612e7a575b816000819055505050612efb6000868387612b1c565b5050505050565b828054612f0e906138c7565b90600052602060002090601f016020900481019282612f305760008555612f77565b82601f10612f4957805160ff1916838001178555612f77565b82800160010185558215612f77579182015b82811115612f76578251825591602001919060010190612f5b565b5b509050612f849190612fcb565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612fe4576000816000905550600101612fcc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61303181612ffc565b811461303c57600080fd5b50565b60008135905061304e81613028565b92915050565b60006020828403121561306a57613069612ff2565b5b60006130788482850161303f565b91505092915050565b60008115159050919050565b61309681613081565b82525050565b60006020820190506130b1600083018461308d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f15780820151818401526020810190506130d6565b83811115613100576000848401525b50505050565b6000601f19601f8301169050919050565b6000613122826130b7565b61312c81856130c2565b935061313c8185602086016130d3565b61314581613106565b840191505092915050565b6000602082019050818103600083015261316a8184613117565b905092915050565b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000602082840312156131be576131bd612ff2565b5b60006131cc84828501613193565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613200826131d5565b9050919050565b613210816131f5565b82525050565b600060208201905061322b6000830184613207565b92915050565b61323a816131f5565b811461324557600080fd5b50565b60008135905061325781613231565b92915050565b6000806040838503121561327457613273612ff2565b5b600061328285828601613248565b925050602061329385828601613193565b9150509250929050565b6132a681613172565b82525050565b60006020820190506132c1600083018461329d565b92915050565b6000806000606084860312156132e0576132df612ff2565b5b60006132ee86828701613248565b93505060206132ff86828701613248565b925050604061331086828701613193565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61335c82613106565b810181811067ffffffffffffffff8211171561337b5761337a613324565b5b80604052505050565b600061338e612fe8565b905061339a8282613353565b919050565b600067ffffffffffffffff8211156133ba576133b9613324565b5b6133c382613106565b9050602081019050919050565b82818337600083830152505050565b60006133f26133ed8461339f565b613384565b90508281526020810184848401111561340e5761340d61331f565b5b6134198482856133d0565b509392505050565b600082601f8301126134365761343561331a565b5b81356134468482602086016133df565b91505092915050565b60006020828403121561346557613464612ff2565b5b600082013567ffffffffffffffff81111561348357613482612ff7565b5b61348f84828501613421565b91505092915050565b6000602082840312156134ae576134ad612ff2565b5b60006134bc84828501613248565b91505092915050565b600067ffffffffffffffff8211156134e0576134df613324565b5b602082029050602081019050919050565b600080fd5b6000613509613504846134c5565b613384565b9050808382526020820190506020840283018581111561352c5761352b6134f1565b5b835b8181101561355557806135418882613248565b84526020840193505060208101905061352e565b5050509392505050565b600082601f8301126135745761357361331a565b5b81356135848482602086016134f6565b91505092915050565b600067ffffffffffffffff8211156135a8576135a7613324565b5b602082029050602081019050919050565b60006135cc6135c78461358d565b613384565b905080838252602082019050602084028301858111156135ef576135ee6134f1565b5b835b8181101561361857806136048882613193565b8452602084019350506020810190506135f1565b5050509392505050565b600082601f8301126136375761363661331a565b5b81356136478482602086016135b9565b91505092915050565b6000806040838503121561366757613666612ff2565b5b600083013567ffffffffffffffff81111561368557613684612ff7565b5b6136918582860161355f565b925050602083013567ffffffffffffffff8111156136b2576136b1612ff7565b5b6136be85828601613622565b9150509250929050565b6136d181613081565b81146136dc57600080fd5b50565b6000813590506136ee816136c8565b92915050565b6000806040838503121561370b5761370a612ff2565b5b600061371985828601613248565b925050602061372a858286016136df565b9150509250929050565b600067ffffffffffffffff82111561374f5761374e613324565b5b61375882613106565b9050602081019050919050565b600061377861377384613734565b613384565b9050828152602081018484840111156137945761379361331f565b5b61379f8482856133d0565b509392505050565b600082601f8301126137bc576137bb61331a565b5b81356137cc848260208601613765565b91505092915050565b600080600080608085870312156137ef576137ee612ff2565b5b60006137fd87828801613248565b945050602061380e87828801613248565b935050604061381f87828801613193565b925050606085013567ffffffffffffffff8111156138405761383f612ff7565b5b61384c878288016137a7565b91505092959194509250565b6000806040838503121561386f5761386e612ff2565b5b600061387d85828601613248565b925050602061388e85828601613248565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138df57607f821691505b602082108114156138f3576138f2613898565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061392f6020836130c2565b915061393a826138f9565b602082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74206e667400600082015250565b600061399b601f836130c2565b91506139a682613965565b602082019050919050565b600060208201905081810360008301526139ca8161398e565b9050919050565b7f4e6f2046726565204d696e747300000000000000000000000000000000000000600082015250565b6000613a07600d836130c2565b9150613a12826139d1565b602082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f4d696e7420776f756c6420657863656564206d617820737570706c79206f662060008201527f6e66747300000000000000000000000000000000000000000000000000000000602082015250565b6000613a996024836130c2565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b0982613172565b9150613b1483613172565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b4957613b48613acf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613b8e82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc157613bc0613acf565b5b600182019050919050565b7f43616e206f6e6c79206d696e74206365727461696e20746f6b656e732061742060008201527f612074696d650000000000000000000000000000000000000000000000000000602082015250565b6000613c286026836130c2565b9150613c3382613bcc565b604082019050919050565b60006020820190508181036000830152613c5781613c1b565b9050919050565b7f4e6f7420456e6f7567682045746865722053656e740000000000000000000000600082015250565b6000613c946015836130c2565b9150613c9f82613c5e565b602082019050919050565b60006020820190508181036000830152613cc381613c87565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66206e667473000000000000000000000000000000000000000000000000602082015250565b6000613d266028836130c2565b9150613d3182613cca565b604082019050919050565b60006020820190508181036000830152613d5581613d19565b9050919050565b7f4d6178206c696d6974206f662077616c6c657420726561636865640000000000600082015250565b6000613d92601b836130c2565b9150613d9d82613d5c565b602082019050919050565b60006020820190508181036000830152613dc181613d85565b9050919050565b600081905092915050565b6000613dde826130b7565b613de88185613dc8565b9350613df88185602086016130d3565b80840191505092915050565b6000613e108285613dd3565b9150613e1c8284613dd3565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e846026836130c2565b9150613e8f82613e28565b604082019050919050565b60006020820190508181036000830152613eb381613e77565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ef0601b836130c2565b9150613efb82613eba565b602082019050919050565b60006020820190508181036000830152613f1f81613ee3565b9050919050565b6000613f3182613172565b9150613f3c83613172565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f7557613f74613acf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fba82613172565b9150613fc583613172565b925082613fd557613fd4613f80565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061403c6021836130c2565b915061404782613fe0565b604082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061409982614072565b6140a3818561407d565b93506140b38185602086016130d3565b6140bc81613106565b840191505092915050565b60006080820190506140dc6000830187613207565b6140e96020830186613207565b6140f6604083018561329d565b8181036060830152614108818461408e565b905095945050505050565b60008151905061412281613028565b92915050565b60006020828403121561413e5761413d612ff2565b5b600061414c84828501614113565b91505092915050565b600061416082613172565b915061416b83613172565b92508282101561417e5761417d613acf565b5b828203905092915050565b600061419482613172565b915061419f83613172565b9250826141af576141ae613f80565b5b82820690509291505056fea2646970667358221220dee12ad6b24109791b8454f0be42d785dab0a6f9af6e6e942322f1f0f438dafe64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063715018a611610118578063a2b40d19116100a0578063df2823311161006f578063df282331146106f8578063e166de7c14610735578063e985e9c514610772578063eb8d2444146107af578063f2fde38b146107da57610204565b8063a2b40d191461063e578063b88d4fde14610667578063c87b56dd14610690578063d49d5181146106cd57610204565b8063977b055b116100e7578063977b055b146105785780639abc8320146105a3578063a035b1fe146105ce578063a0712d68146105f9578063a22cb4651461061557610204565b8063715018a6146104e25780638da5cb5b146104f95780638f9ab2441461052457806395d89b411461054d57610204565b806334918dfd1161019b578063453c23101161016a578063453c2310146103fd57806355f804b3146104285780635b70ea9f146104515780636352211e1461046857806370a08231146104a557610204565b806334918dfd1461037d5780633b38716d146103945780633ccfd60b146103bd57806342842e0e146103d457610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd1461030057806320c63e3b1461032b57806323b872dd1461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc1461027157806308ea9265146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613054565b610803565b60405161023d919061309c565b60405180910390f35b34801561025257600080fd5b5061025b6108e5565b6040516102689190613150565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906131a8565b610977565b6040516102a59190613216565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906131a8565b6109f3565b005b3480156102e357600080fd5b506102fe60048036038101906102f9919061325d565b610a79565b005b34801561030c57600080fd5b50610315610b84565b60405161032291906132ac565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906131a8565b610b9b565b005b34801561036057600080fd5b5061037b600480360381019061037691906132c7565b610c21565b005b34801561038957600080fd5b50610392610c31565b005b3480156103a057600080fd5b506103bb60048036038101906103b6919061325d565b610cd9565b005b3480156103c957600080fd5b506103d2610d9d565b005b3480156103e057600080fd5b506103fb60048036038101906103f691906132c7565b610e82565b005b34801561040957600080fd5b50610412610ea2565b60405161041f91906132ac565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a919061344f565b610ea8565b005b34801561045d57600080fd5b50610466610f3e565b005b34801561047457600080fd5b5061048f600480360381019061048a91906131a8565b61112f565b60405161049c9190613216565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613498565b611145565b6040516104d991906132ac565b60405180910390f35b3480156104ee57600080fd5b506104f7611215565b005b34801561050557600080fd5b5061050e611352565b60405161051b9190613216565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190613650565b61137c565b005b34801561055957600080fd5b50610562611494565b60405161056f9190613150565b60405180910390f35b34801561058457600080fd5b5061058d611526565b60405161059a91906132ac565b60405180910390f35b3480156105af57600080fd5b506105b861152c565b6040516105c59190613150565b60405180910390f35b3480156105da57600080fd5b506105e36115ba565b6040516105f091906132ac565b60405180910390f35b610613600480360381019061060e91906131a8565b6115c0565b005b34801561062157600080fd5b5061063c600480360381019061063791906136f4565b611810565b005b34801561064a57600080fd5b50610665600480360381019061066091906131a8565b611988565b005b34801561067357600080fd5b5061068e600480360381019061068991906137d5565b611a0e565b005b34801561069c57600080fd5b506106b760048036038101906106b291906131a8565b611a8a565b6040516106c49190613150565b60405180910390f35b3480156106d957600080fd5b506106e2611b29565b6040516106ef91906132ac565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190613498565b611b2f565b60405161072c91906132ac565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613498565b611b47565b60405161076991906132ac565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613858565b611b5f565b6040516107a6919061309c565b60405180910390f35b3480156107bb57600080fd5b506107c4611bf3565b6040516107d1919061309c565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613498565b611c06565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ce57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108de57506108dd82611db2565b5b9050919050565b6060600280546108f4906138c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610920906138c7565b801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b5050505050905090565b600061098282611e1c565b6109b8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109fb611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610a19611352565b73ffffffffffffffffffffffffffffffffffffffff1614610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690613945565b60405180910390fd5b80600d8190555050565b6000610a848261112f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aec576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b0b611e6a565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b3d5750610b3b81610b36611e6a565b611b5f565b155b15610b74576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f838383611e72565b505050565b6000610b8e611f24565b6001546000540303905090565b610ba3611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610bc1611352565b73ffffffffffffffffffffffffffffffffffffffff1614610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613945565b60405180910390fd5b80600c8190555050565b610c2c838383611f29565b505050565b610c39611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610c57611352565b73ffffffffffffffffffffffffffffffffffffffff1614610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490613945565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b610ce1611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610cff611352565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613945565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610da5611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610dc3611352565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613945565b60405180910390fd5b6000479050600073f02a7fec86787fd29427cad8581d400d0bb660f190508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610e7d573d6000803e3d6000fd5b505050565b610e9d83838360405180602001604052806000815250611a0e565b505050565b600d5481565b610eb0611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610ece611352565b73ffffffffffffffffffffffffffffffffffffffff1614610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90613945565b60405180910390fd5b80600a9080519060200190610f3a929190612f02565b5050565b600e60009054906101000a900460ff16610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f84906139b1565b60405180910390fd5b600060106000610f9b611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811161101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613a1d565b60405180910390fd5b600b546110388261102a610b84565b61241a90919063ffffffff16565b1115611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613aaf565b60405180910390fd5b80600f6000611086611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110cf9190613afe565b925050819055506000601060006110e4611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061112c3382612478565b50565b600061113a82612496565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ad576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61121d611e6a565b73ffffffffffffffffffffffffffffffffffffffff1661123b611352565b73ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890613945565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611384611e6a565b73ffffffffffffffffffffffffffffffffffffffff166113a2611352565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90613945565b60405180910390fd5b60005b825181101561148f5781818151811061141757611416613b54565b5b60200260200101516010600085848151811061143657611435613b54565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061148790613b83565b9150506113fb565b505050565b6060600380546114a3906138c7565b80601f01602080910402602001604051908101604052809291908181526020018280546114cf906138c7565b801561151c5780601f106114f15761010080835404028352916020019161151c565b820191906000526020600020905b8154815290600101906020018083116114ff57829003601f168201915b5050505050905090565b600c5481565b600a8054611539906138c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611565906138c7565b80156115b25780601f10611587576101008083540402835291602001916115b2565b820191906000526020600020905b81548152906001019060200180831161159557829003601f168201915b505050505081565b60095481565b600e60009054906101000a900460ff1661160f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611606906139b1565b60405180910390fd5b600c54811115611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90613c3e565b60405180910390fd5b3461166a8260095461272590919063ffffffff16565b11156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290613caa565b60405180910390fd5b600b546116c8826116ba610b84565b61241a90919063ffffffff16565b1115611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090613d3c565b60405180910390fd5b600d5461176582600f600061171c611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241a90919063ffffffff16565b11156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613da8565b60405180910390fd5b80600f60006117b3611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fc9190613afe565b9250508190555061180d3382612478565b50565b611818611e6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061188a611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611937611e6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161197c919061309c565b60405180910390a35050565b611990611e6a565b73ffffffffffffffffffffffffffffffffffffffff166119ae611352565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613945565b60405180910390fd5b8060098190555050565b611a19848484611f29565b611a388373ffffffffffffffffffffffffffffffffffffffff166127a0565b8015611a4d5750611a4b848484846127c3565b155b15611a84576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a9582611e1c565b611acb576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ad5612923565b9050600081511415611af65760405180602001604052806000815250611b21565b80611b00846129b5565b604051602001611b11929190613e04565b6040516020818303038152906040525b915050919050565b600b5481565b600f6020528060005260406000206000915090505481565b60106020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff1681565b611c0e611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611c2c611352565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613945565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613e9a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e27611f24565b11158015611e36575060005482105b8015611e63575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611f3482612496565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f5b611e6a565b73ffffffffffffffffffffffffffffffffffffffff161480611f8e5750611f8d8260000151611f88611e6a565b611b5f565b5b80611fd35750611f9c611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611fbb84610977565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061200c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612075576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120dc576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e98585856001612b16565b6120f96000848460000151611e72565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123aa576000548110156123a95782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124138585856001612b1c565b5050505050565b60008082846124299190613afe565b90508381101561246e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246590613f06565b60405180910390fd5b8091505092915050565b612492828260405180602001604052806000815250612b22565b5050565b61249e612f88565b6000829050806124ac611f24565b111580156124bb575060005481105b156126ee576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516126ec57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125d0578092505050612720565b5b6001156126eb57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126e6578092505050612720565b6125d1565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600080831415612738576000905061279a565b600082846127469190613f26565b90508284826127559190613faf565b14612795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278c90614052565b60405180910390fd5b809150505b92915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127e9611e6a565b8786866040518563ffffffff1660e01b815260040161280b94939291906140c7565b602060405180830381600087803b15801561282557600080fd5b505af192505050801561285657506040513d601f19601f820116820180604052508101906128539190614128565b60015b6128d0573d8060008114612886576040519150601f19603f3d011682016040523d82523d6000602084013e61288b565b606091505b506000815114156128c8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612932906138c7565b80601f016020809104026020016040519081016040528092919081815260200182805461295e906138c7565b80156129ab5780601f10612980576101008083540402835291602001916129ab565b820191906000526020600020905b81548152906001019060200180831161298e57829003601f168201915b5050505050905090565b606060008214156129fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b11565b600082905060005b60008214612a2f578080612a1890613b83565b915050600a82612a289190613faf565b9150612a05565b60008167ffffffffffffffff811115612a4b57612a4a613324565b5b6040519080825280601f01601f191660200182016040528015612a7d5781602001600182028036833780820191505090505b5090505b60008514612b0a57600182612a969190614155565b9150600a85612aa59190614189565b6030612ab19190613afe565b60f81b818381518110612ac757612ac6613b54565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b039190613faf565b9450612a81565b8093505050505b919050565b50505050565b50505050565b612b2f8383836001612b34565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612ba1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612bdc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612be96000868387612b16565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612db35750612db28773ffffffffffffffffffffffffffffffffffffffff166127a0565b5b15612e79575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e2860008884806001019550886127c3565b612e5e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612db9578260005414612e7457600080fd5b612ee5565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612e7a575b816000819055505050612efb6000868387612b1c565b5050505050565b828054612f0e906138c7565b90600052602060002090601f016020900481019282612f305760008555612f77565b82601f10612f4957805160ff1916838001178555612f77565b82800160010185558215612f77579182015b82811115612f76578251825591602001919060010190612f5b565b5b509050612f849190612fcb565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612fe4576000816000905550600101612fcc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61303181612ffc565b811461303c57600080fd5b50565b60008135905061304e81613028565b92915050565b60006020828403121561306a57613069612ff2565b5b60006130788482850161303f565b91505092915050565b60008115159050919050565b61309681613081565b82525050565b60006020820190506130b1600083018461308d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f15780820151818401526020810190506130d6565b83811115613100576000848401525b50505050565b6000601f19601f8301169050919050565b6000613122826130b7565b61312c81856130c2565b935061313c8185602086016130d3565b61314581613106565b840191505092915050565b6000602082019050818103600083015261316a8184613117565b905092915050565b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000602082840312156131be576131bd612ff2565b5b60006131cc84828501613193565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613200826131d5565b9050919050565b613210816131f5565b82525050565b600060208201905061322b6000830184613207565b92915050565b61323a816131f5565b811461324557600080fd5b50565b60008135905061325781613231565b92915050565b6000806040838503121561327457613273612ff2565b5b600061328285828601613248565b925050602061329385828601613193565b9150509250929050565b6132a681613172565b82525050565b60006020820190506132c1600083018461329d565b92915050565b6000806000606084860312156132e0576132df612ff2565b5b60006132ee86828701613248565b93505060206132ff86828701613248565b925050604061331086828701613193565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61335c82613106565b810181811067ffffffffffffffff8211171561337b5761337a613324565b5b80604052505050565b600061338e612fe8565b905061339a8282613353565b919050565b600067ffffffffffffffff8211156133ba576133b9613324565b5b6133c382613106565b9050602081019050919050565b82818337600083830152505050565b60006133f26133ed8461339f565b613384565b90508281526020810184848401111561340e5761340d61331f565b5b6134198482856133d0565b509392505050565b600082601f8301126134365761343561331a565b5b81356134468482602086016133df565b91505092915050565b60006020828403121561346557613464612ff2565b5b600082013567ffffffffffffffff81111561348357613482612ff7565b5b61348f84828501613421565b91505092915050565b6000602082840312156134ae576134ad612ff2565b5b60006134bc84828501613248565b91505092915050565b600067ffffffffffffffff8211156134e0576134df613324565b5b602082029050602081019050919050565b600080fd5b6000613509613504846134c5565b613384565b9050808382526020820190506020840283018581111561352c5761352b6134f1565b5b835b8181101561355557806135418882613248565b84526020840193505060208101905061352e565b5050509392505050565b600082601f8301126135745761357361331a565b5b81356135848482602086016134f6565b91505092915050565b600067ffffffffffffffff8211156135a8576135a7613324565b5b602082029050602081019050919050565b60006135cc6135c78461358d565b613384565b905080838252602082019050602084028301858111156135ef576135ee6134f1565b5b835b8181101561361857806136048882613193565b8452602084019350506020810190506135f1565b5050509392505050565b600082601f8301126136375761363661331a565b5b81356136478482602086016135b9565b91505092915050565b6000806040838503121561366757613666612ff2565b5b600083013567ffffffffffffffff81111561368557613684612ff7565b5b6136918582860161355f565b925050602083013567ffffffffffffffff8111156136b2576136b1612ff7565b5b6136be85828601613622565b9150509250929050565b6136d181613081565b81146136dc57600080fd5b50565b6000813590506136ee816136c8565b92915050565b6000806040838503121561370b5761370a612ff2565b5b600061371985828601613248565b925050602061372a858286016136df565b9150509250929050565b600067ffffffffffffffff82111561374f5761374e613324565b5b61375882613106565b9050602081019050919050565b600061377861377384613734565b613384565b9050828152602081018484840111156137945761379361331f565b5b61379f8482856133d0565b509392505050565b600082601f8301126137bc576137bb61331a565b5b81356137cc848260208601613765565b91505092915050565b600080600080608085870312156137ef576137ee612ff2565b5b60006137fd87828801613248565b945050602061380e87828801613248565b935050604061381f87828801613193565b925050606085013567ffffffffffffffff8111156138405761383f612ff7565b5b61384c878288016137a7565b91505092959194509250565b6000806040838503121561386f5761386e612ff2565b5b600061387d85828601613248565b925050602061388e85828601613248565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138df57607f821691505b602082108114156138f3576138f2613898565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061392f6020836130c2565b915061393a826138f9565b602082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74206e667400600082015250565b600061399b601f836130c2565b91506139a682613965565b602082019050919050565b600060208201905081810360008301526139ca8161398e565b9050919050565b7f4e6f2046726565204d696e747300000000000000000000000000000000000000600082015250565b6000613a07600d836130c2565b9150613a12826139d1565b602082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f4d696e7420776f756c6420657863656564206d617820737570706c79206f662060008201527f6e66747300000000000000000000000000000000000000000000000000000000602082015250565b6000613a996024836130c2565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b0982613172565b9150613b1483613172565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b4957613b48613acf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613b8e82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc157613bc0613acf565b5b600182019050919050565b7f43616e206f6e6c79206d696e74206365727461696e20746f6b656e732061742060008201527f612074696d650000000000000000000000000000000000000000000000000000602082015250565b6000613c286026836130c2565b9150613c3382613bcc565b604082019050919050565b60006020820190508181036000830152613c5781613c1b565b9050919050565b7f4e6f7420456e6f7567682045746865722053656e740000000000000000000000600082015250565b6000613c946015836130c2565b9150613c9f82613c5e565b602082019050919050565b60006020820190508181036000830152613cc381613c87565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66206e667473000000000000000000000000000000000000000000000000602082015250565b6000613d266028836130c2565b9150613d3182613cca565b604082019050919050565b60006020820190508181036000830152613d5581613d19565b9050919050565b7f4d6178206c696d6974206f662077616c6c657420726561636865640000000000600082015250565b6000613d92601b836130c2565b9150613d9d82613d5c565b602082019050919050565b60006020820190508181036000830152613dc181613d85565b9050919050565b600081905092915050565b6000613dde826130b7565b613de88185613dc8565b9350613df88185602086016130d3565b80840191505092915050565b6000613e108285613dd3565b9150613e1c8284613dd3565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e846026836130c2565b9150613e8f82613e28565b604082019050919050565b60006020820190508181036000830152613eb381613e77565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ef0601b836130c2565b9150613efb82613eba565b602082019050919050565b60006020820190508181036000830152613f1f81613ee3565b9050919050565b6000613f3182613172565b9150613f3c83613172565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f7557613f74613acf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fba82613172565b9150613fc583613172565b925082613fd557613fd4613f80565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061403c6021836130c2565b915061404782613fe0565b604082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061409982614072565b6140a3818561407d565b93506140b38185602086016130d3565b6140bc81613106565b840191505092915050565b60006080820190506140dc6000830187613207565b6140e96020830186613207565b6140f6604083018561329d565b8181036060830152614108818461408e565b905095945050505050565b60008151905061412281613028565b92915050565b60006020828403121561413e5761413d612ff2565b5b600061414c84828501614113565b91505092915050565b600061416082613172565b915061416b83613172565b92508282101561417e5761417d613acf565b5b828203905092915050565b600061419482613172565b915061419f83613172565b9250826141af576141ae613f80565b5b82820690509291505056fea2646970667358221220dee12ad6b24109791b8454f0be42d785dab0a6f9af6e6e942322f1f0f438dafe64736f6c63430008090033
Deployed Bytecode Sourcemap
51338:3234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33863:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37248:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38751:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51973:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38314:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33112:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51868:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39616:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54168:89;;;;;;;;;;;;;:::i;:::-;;53963:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52188:229;;;;;;;;;;;;;:::i;:::-;;39857:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51577:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53622:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53094:514;;;;;;;;;;;;;:::i;:::-;;37057:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34232:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29579:148;;;;;;;;;;;;;:::i;:::-;;28928:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53728:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37417:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51541:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51479:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51418:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52425:660;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39027:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51769:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40113:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37592:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51509:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51657:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51709:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39385:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51616:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29882:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33863:305;33965:4;34017:25;34002:40;;;:11;:40;;;;:105;;;;34074:33;34059:48;;;:11;:48;;;;34002:105;:158;;;;34124:36;34148:11;34124:23;:36::i;:::-;34002:158;33982:178;;33863:305;;;:::o;37248:100::-;37302:13;37335:5;37328:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37248:100;:::o;38751:204::-;38819:7;38844:16;38852:7;38844;:16::i;:::-;38839:64;;38869:34;;;;;;;;;;;;;;38839:64;38923:15;:24;38939:7;38923:24;;;;;;;;;;;;;;;;;;;;;38916:31;;38751:204;;;:::o;51973:125::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52074:16:::1;52059:12;:31;;;;51973:125:::0;:::o;38314:371::-;38387:13;38403:24;38419:7;38403:15;:24::i;:::-;38387:40;;38448:5;38442:11;;:2;:11;;;38438:48;;;38462:24;;;;;;;;;;;;;;38438:48;38519:5;38503:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;38529:37;38546:5;38553:12;:10;:12::i;:::-;38529:16;:37::i;:::-;38528:38;38503:63;38499:138;;;38590:35;;;;;;;;;;;;;;38499:138;38649:28;38658:2;38662:7;38671:5;38649:8;:28::i;:::-;38376:309;38314:371;;:::o;33112:303::-;33156:7;33381:15;:13;:15::i;:::-;33366:12;;33350:13;;:28;:46;33343:53;;33112:303;:::o;51868:97::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51950:7:::1;51936:11;:21;;;;51868:97:::0;:::o;39616:170::-;39750:28;39760:4;39766:2;39770:7;39750:9;:28::i;:::-;39616:170;;;:::o;54168:89::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54237:12:::1;;;;;;;;;;;54236:13;54221:12;;:28;;;;;;;;;;;;;;;;;;54168:89::o:0;53963:130::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54077:8:::1;54053:13;:21;54067:6;54053:21;;;;;;;;;;;;;;;:32;;;;53963:130:::0;;:::o;52188:229::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52236:12:::1;52251:21;52236:36;;52293:19;52323:42;52293:73;;52382:3;:12;;:21;52395:7;52382:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52225:192;;52188:229::o:0;39857:185::-;39995:39;40012:4;40018:2;40022:7;39995:39;;;;;;;;;;;;:16;:39::i;:::-;39857:185;;;:::o;51577:30::-;;;;:::o;53622:98::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53704:8:::1;53694:7;:18;;;;;;;;;;;;:::i;:::-;;53622:98:::0;:::o;53094:514::-;53141:12;;;;;;;;;;;53133:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;53199:16;53218:13;:27;53232:12;:10;:12::i;:::-;53218:27;;;;;;;;;;;;;;;;53199:46;;53275:1;53264:8;:12;53256:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;53345:3;;53314:27;53332:8;53314:13;:11;:13::i;:::-;:17;;:27;;;;:::i;:::-;:34;;53306:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;53427:8;53400:9;:23;53410:12;:10;:12::i;:::-;53400:23;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;53476:1;53446:13;:27;53460:12;:10;:12::i;:::-;53446:27;;;;;;;;;;;;;;;:31;;;;53568;53578:10;53590:8;53568:9;:31::i;:::-;53123:485;53094:514::o;37057:124::-;37121:7;37148:20;37160:7;37148:11;:20::i;:::-;:25;;;37141:32;;37057:124;;;:::o;34232:206::-;34296:7;34337:1;34320:19;;:5;:19;;;34316:60;;;34348:28;;;;;;;;;;;;;;34316:60;34402:12;:19;34415:5;34402:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;34394:36;;34387:43;;34232:206;;;:::o;29579:148::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29686:1:::1;29649:40;;29670:6;;;;;;;;;;;29649:40;;;;;;;;;;;;29717:1;29700:6;;:19;;;;;;;;;;;;;;;;;;29579:148::o:0;28928:87::-;28974:7;29001:6;;;;;;;;;;;28994:13;;28928:87;:::o;53728:227::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53840:9:::1;53836:112;53859:7;:14;53856:1;:17;53836:112;;;53923:10;53934:1;53923:13;;;;;;;;:::i;:::-;;;;;;;;53895;:25;53909:7;53917:1;53909:10;;;;;;;;:::i;:::-;;;;;;;;53895:25;;;;;;;;;;;;;;;:41;;;;53876:3;;;;;:::i;:::-;;;;53836:112;;;;53728:227:::0;;:::o;37417:104::-;37473:13;37506:7;37499:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37417:104;:::o;51541:29::-;;;;:::o;51479:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51418:40::-;;;;:::o;52425:660::-;52493:12;;;;;;;;;;;52485:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;52572:11;;52560:8;:23;;52552:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;52668:9;52645:19;52655:8;52645:5;;:9;;:19;;;;:::i;:::-;:32;;52637:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;52753:3;;52722:27;52740:8;52722:13;:11;:13::i;:::-;:17;;:27;;;;:::i;:::-;:34;;52714:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;52863:12;;52822:37;52850:8;52822:9;:23;52832:12;:10;:12::i;:::-;52822:23;;;;;;;;;;;;;;;;:27;;:37;;;;:::i;:::-;:53;;52814:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;52946:8;52919:9;:23;52929:12;:10;:12::i;:::-;52919:23;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;53045:31;53055:10;53067:8;53045:9;:31::i;:::-;52425:660;:::o;39027:287::-;39138:12;:10;:12::i;:::-;39126:24;;:8;:24;;;39122:54;;;39159:17;;;;;;;;;;;;;;39122:54;39234:8;39189:18;:32;39208:12;:10;:12::i;:::-;39189:32;;;;;;;;;;;;;;;:42;39222:8;39189:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;39287:8;39258:48;;39273:12;:10;:12::i;:::-;39258:48;;;39297:8;39258:48;;;;;;:::i;:::-;;;;;;;;39027:287;;:::o;51769:91::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51844:8:::1;51836:5;:16;;;;51769:91:::0;:::o;40113:369::-;40280:28;40290:4;40296:2;40300:7;40280:9;:28::i;:::-;40323:15;:2;:13;;;:15::i;:::-;:76;;;;;40343:56;40374:4;40380:2;40384:7;40393:5;40343:30;:56::i;:::-;40342:57;40323:76;40319:156;;;40423:40;;;;;;;;;;;;;;40319:156;40113:369;;;;:::o;37592:318::-;37665:13;37696:16;37704:7;37696;:16::i;:::-;37691:59;;37721:29;;;;;;;;;;;;;;37691:59;37763:21;37787:10;:8;:10::i;:::-;37763:34;;37840:1;37821:7;37815:21;:26;;:87;;;;;;;;;;;;;;;;;37868:7;37877:18;:7;:16;:18::i;:::-;37851:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37815:87;37808:94;;;37592:318;;;:::o;51509:25::-;;;;:::o;51657:45::-;;;;;;;;;;;;;;;;;:::o;51709:49::-;;;;;;;;;;;;;;;;;:::o;39385:164::-;39482:4;39506:18;:25;39525:5;39506:25;;;;;;;;;;;;;;;:35;39532:8;39506:35;;;;;;;;;;;;;;;;;;;;;;;;;39499:42;;39385:164;;;;:::o;51616:32::-;;;;;;;;;;;;;:::o;29882:244::-;29159:12;:10;:12::i;:::-;29148:23;;:7;:5;:7::i;:::-;:23;;;29140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29991:1:::1;29971:22;;:8;:22;;;;29963:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30081:8;30052:38;;30073:6;;;;;;;;;;;30052:38;;;;;;;;;;;;30110:8;30101:6;;:17;;;;;;;;;;;;;;;;;;29882:244:::0;:::o;27105:157::-;27190:4;27229:25;27214:40;;;:11;:40;;;;27207:47;;27105:157;;;:::o;40737:187::-;40794:4;40837:7;40818:15;:13;:15::i;:::-;:26;;:53;;;;;40858:13;;40848:7;:23;40818:53;:98;;;;;40889:11;:20;40901:7;40889:20;;;;;;;;;;;:27;;;;;;;;;;;;40888:28;40818:98;40811:105;;40737:187;;;:::o;24208:98::-;24261:7;24288:10;24281:17;;24208:98;:::o;48348:196::-;48490:2;48463:15;:24;48479:7;48463:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;48528:7;48524:2;48508:28;;48517:5;48508:28;;;;;;;;;;;;48348:196;;;:::o;32836:92::-;32892:7;32836:92;:::o;43850:2112::-;43965:35;44003:20;44015:7;44003:11;:20::i;:::-;43965:58;;44036:22;44078:13;:18;;;44062:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;44113:50;44130:13;:18;;;44150:12;:10;:12::i;:::-;44113:16;:50::i;:::-;44062:101;:154;;;;44204:12;:10;:12::i;:::-;44180:36;;:20;44192:7;44180:11;:20::i;:::-;:36;;;44062:154;44036:181;;44235:17;44230:66;;44261:35;;;;;;;;;;;;;;44230:66;44333:4;44311:26;;:13;:18;;;:26;;;44307:67;;44346:28;;;;;;;;;;;;;;44307:67;44403:1;44389:16;;:2;:16;;;44385:52;;;44414:23;;;;;;;;;;;;;;44385:52;44450:43;44472:4;44478:2;44482:7;44491:1;44450:21;:43::i;:::-;44558:49;44575:1;44579:7;44588:13;:18;;;44558:8;:49::i;:::-;44933:1;44903:12;:18;44916:4;44903:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44977:1;44949:12;:16;44962:2;44949:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45023:2;44995:11;:20;45007:7;44995:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;45085:15;45040:11;:20;45052:7;45040:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;45353:19;45385:1;45375:7;:11;45353:33;;45446:1;45405:43;;:11;:24;45417:11;45405:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;45401:445;;;45630:13;;45616:11;:27;45612:219;;;45700:13;:18;;;45668:11;:24;45680:11;45668:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;45783:13;:28;;;45741:11;:24;45753:11;45741:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;45612:219;45401:445;44878:979;45893:7;45889:2;45874:27;;45883:4;45874:27;;;;;;;;;;;;45912:42;45933:4;45939:2;45943:7;45952:1;45912:20;:42::i;:::-;43954:2008;;43850:2112;;;:::o;2837:179::-;2895:7;2915:9;2931:1;2927;:5;;;;:::i;:::-;2915:17;;2956:1;2951;:6;;2943:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3007:1;3000:8;;;2837:179;;;;:::o;40932:104::-;41001:27;41011:2;41015:8;41001:27;;;;;;;;;;;;:9;:27::i;:::-;40932:104;;:::o;35887:1108::-;35948:21;;:::i;:::-;35982:12;35997:7;35982:22;;36065:4;36046:15;:13;:15::i;:::-;:23;;:47;;;;;36080:13;;36073:4;:20;36046:47;36042:886;;;36114:31;36148:11;:17;36160:4;36148:17;;;;;;;;;;;36114:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36189:9;:16;;;36184:729;;36260:1;36234:28;;:9;:14;;;:28;;;36230:101;;36298:9;36291:16;;;;;;36230:101;36633:261;36640:4;36633:261;;;36673:6;;;;;;;;36718:11;:17;36730:4;36718:17;;;;;;;;;;;36706:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36792:1;36766:28;;:9;:14;;;:28;;;36762:109;;36834:9;36827:16;;;;;;36762:109;36633:261;;;36184:729;36095:833;36042:886;36956:31;;;;;;;;;;;;;;35887:1108;;;;:::o;3716:220::-;3774:7;3803:1;3798;:6;3794:20;;;3813:1;3806:8;;;;3794:20;3825:9;3841:1;3837;:5;;;;:::i;:::-;3825:17;;3870:1;3865;3861;:5;;;;:::i;:::-;:10;3853:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3927:1;3920:8;;;3716:220;;;;;:::o;16398:326::-;16458:4;16715:1;16693:7;:19;;;:23;16686:30;;16398:326;;;:::o;49036:667::-;49199:4;49236:2;49220:36;;;49257:12;:10;:12::i;:::-;49271:4;49277:7;49286:5;49220:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;49216:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49471:1;49454:6;:13;:18;49450:235;;;49500:40;;;;;;;;;;;;;;49450:235;49643:6;49637:13;49628:6;49624:2;49620:15;49613:38;49216:480;49349:45;;;49339:55;;;:6;:55;;;;49332:62;;;49036:667;;;;;;:::o;54469:100::-;54521:13;54554:7;54547:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54469:100;:::o;24648:723::-;24704:13;24934:1;24925:5;:10;24921:53;;;24952:10;;;;;;;;;;;;;;;;;;;;;24921:53;24984:12;24999:5;24984:20;;25015:14;25040:78;25055:1;25047:4;:9;25040:78;;25073:8;;;;;:::i;:::-;;;;25104:2;25096:10;;;;;:::i;:::-;;;25040:78;;;25128:19;25160:6;25150:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25128:39;;25178:154;25194:1;25185:5;:10;25178:154;;25222:1;25212:11;;;;;:::i;:::-;;;25289:2;25281:5;:10;;;;:::i;:::-;25268:2;:24;;;;:::i;:::-;25255:39;;25238:6;25245;25238:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;25318:2;25309:11;;;;;:::i;:::-;;;25178:154;;;25356:6;25342:21;;;;;24648:723;;;;:::o;50351:159::-;;;;;:::o;51169:158::-;;;;;:::o;41399:163::-;41522:32;41528:2;41532:8;41542:5;41549:4;41522:5;:32::i;:::-;41399:163;;;:::o;41821:1775::-;41960:20;41983:13;;41960:36;;42025:1;42011:16;;:2;:16;;;42007:48;;;42036:19;;;;;;;;;;;;;;42007:48;42082:1;42070:8;:13;42066:44;;;42092:18;;;;;;;;;;;;;;42066:44;42123:61;42153:1;42157:2;42161:12;42175:8;42123:21;:61::i;:::-;42496:8;42461:12;:16;42474:2;42461:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42560:8;42520:12;:16;42533:2;42520:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42619:2;42586:11;:25;42598:12;42586:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;42686:15;42636:11;:25;42648:12;42636:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;42719:20;42742:12;42719:35;;42769:11;42798:8;42783:12;:23;42769:37;;42827:4;:23;;;;;42835:15;:2;:13;;;:15::i;:::-;42827:23;42823:641;;;42871:314;42927:12;42923:2;42902:38;;42919:1;42902:38;;;;;;;;;;;;42968:69;43007:1;43011:2;43015:14;;;;;;43031:5;42968:30;:69::i;:::-;42963:174;;43073:40;;;;;;;;;;;;;;42963:174;43180:3;43164:12;:19;;42871:314;;43266:12;43249:13;;:29;43245:43;;43280:8;;;43245:43;42823:641;;;43329:120;43385:14;;;;;;43381:2;43360:40;;43377:1;43360:40;;;;;;;;;;;;43444:3;43428:12;:19;;43329:120;;42823:641;43494:12;43478:13;:28;;;;42436:1082;;43528:60;43557:1;43561:2;43565:12;43579:8;43528:20;:60::i;:::-;41949:1647;41821:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:311::-;8948:4;9038:18;9030:6;9027:30;9024:56;;;9060:18;;:::i;:::-;9024:56;9110:4;9102:6;9098:17;9090:25;;9170:4;9164;9160:15;9152:23;;8871:311;;;:::o;9188:117::-;9297:1;9294;9287:12;9328:710;9424:5;9449:81;9465:64;9522:6;9465:64;:::i;:::-;9449:81;:::i;:::-;9440:90;;9550:5;9579:6;9572:5;9565:21;9613:4;9606:5;9602:16;9595:23;;9666:4;9658:6;9654:17;9646:6;9642:30;9695:3;9687:6;9684:15;9681:122;;;9714:79;;:::i;:::-;9681:122;9829:6;9812:220;9846:6;9841:3;9838:15;9812:220;;;9921:3;9950:37;9983:3;9971:10;9950:37;:::i;:::-;9945:3;9938:50;10017:4;10012:3;10008:14;10001:21;;9888:144;9872:4;9867:3;9863:14;9856:21;;9812:220;;;9816:21;9430:608;;9328:710;;;;;:::o;10061:370::-;10132:5;10181:3;10174:4;10166:6;10162:17;10158:27;10148:122;;10189:79;;:::i;:::-;10148:122;10306:6;10293:20;10331:94;10421:3;10413:6;10406:4;10398:6;10394:17;10331:94;:::i;:::-;10322:103;;10138:293;10061:370;;;;:::o;10437:311::-;10514:4;10604:18;10596:6;10593:30;10590:56;;;10626:18;;:::i;:::-;10590:56;10676:4;10668:6;10664:17;10656:25;;10736:4;10730;10726:15;10718:23;;10437:311;;;:::o;10771:710::-;10867:5;10892:81;10908:64;10965:6;10908:64;:::i;:::-;10892:81;:::i;:::-;10883:90;;10993:5;11022:6;11015:5;11008:21;11056:4;11049:5;11045:16;11038:23;;11109:4;11101:6;11097:17;11089:6;11085:30;11138:3;11130:6;11127:15;11124:122;;;11157:79;;:::i;:::-;11124:122;11272:6;11255:220;11289:6;11284:3;11281:15;11255:220;;;11364:3;11393:37;11426:3;11414:10;11393:37;:::i;:::-;11388:3;11381:50;11460:4;11455:3;11451:14;11444:21;;11331:144;11315:4;11310:3;11306:14;11299:21;;11255:220;;;11259:21;10873:608;;10771:710;;;;;:::o;11504:370::-;11575:5;11624:3;11617:4;11609:6;11605:17;11601:27;11591:122;;11632:79;;:::i;:::-;11591:122;11749:6;11736:20;11774:94;11864:3;11856:6;11849:4;11841:6;11837:17;11774:94;:::i;:::-;11765:103;;11581:293;11504:370;;;;:::o;11880:894::-;11998:6;12006;12055:2;12043:9;12034:7;12030:23;12026:32;12023:119;;;12061:79;;:::i;:::-;12023:119;12209:1;12198:9;12194:17;12181:31;12239:18;12231:6;12228:30;12225:117;;;12261:79;;:::i;:::-;12225:117;12366:78;12436:7;12427:6;12416:9;12412:22;12366:78;:::i;:::-;12356:88;;12152:302;12521:2;12510:9;12506:18;12493:32;12552:18;12544:6;12541:30;12538:117;;;12574:79;;:::i;:::-;12538:117;12679:78;12749:7;12740:6;12729:9;12725:22;12679:78;:::i;:::-;12669:88;;12464:303;11880:894;;;;;:::o;12780:116::-;12850:21;12865:5;12850:21;:::i;:::-;12843:5;12840:32;12830:60;;12886:1;12883;12876:12;12830:60;12780:116;:::o;12902:133::-;12945:5;12983:6;12970:20;12961:29;;12999:30;13023:5;12999:30;:::i;:::-;12902:133;;;;:::o;13041:468::-;13106:6;13114;13163:2;13151:9;13142:7;13138:23;13134:32;13131:119;;;13169:79;;:::i;:::-;13131:119;13289:1;13314:53;13359:7;13350:6;13339:9;13335:22;13314:53;:::i;:::-;13304:63;;13260:117;13416:2;13442:50;13484:7;13475:6;13464:9;13460:22;13442:50;:::i;:::-;13432:60;;13387:115;13041:468;;;;;:::o;13515:307::-;13576:4;13666:18;13658:6;13655:30;13652:56;;;13688:18;;:::i;:::-;13652:56;13726:29;13748:6;13726:29;:::i;:::-;13718:37;;13810:4;13804;13800:15;13792:23;;13515:307;;;:::o;13828:410::-;13905:5;13930:65;13946:48;13987:6;13946:48;:::i;:::-;13930:65;:::i;:::-;13921:74;;14018:6;14011:5;14004:21;14056:4;14049:5;14045:16;14094:3;14085:6;14080:3;14076:16;14073:25;14070:112;;;14101:79;;:::i;:::-;14070:112;14191:41;14225:6;14220:3;14215;14191:41;:::i;:::-;13911:327;13828:410;;;;;:::o;14257:338::-;14312:5;14361:3;14354:4;14346:6;14342:17;14338:27;14328:122;;14369:79;;:::i;:::-;14328:122;14486:6;14473:20;14511:78;14585:3;14577:6;14570:4;14562:6;14558:17;14511:78;:::i;:::-;14502:87;;14318:277;14257:338;;;;:::o;14601:943::-;14696:6;14704;14712;14720;14769:3;14757:9;14748:7;14744:23;14740:33;14737:120;;;14776:79;;:::i;:::-;14737:120;14896:1;14921:53;14966:7;14957:6;14946:9;14942:22;14921:53;:::i;:::-;14911:63;;14867:117;15023:2;15049:53;15094:7;15085:6;15074:9;15070:22;15049:53;:::i;:::-;15039:63;;14994:118;15151:2;15177:53;15222:7;15213:6;15202:9;15198:22;15177:53;:::i;:::-;15167:63;;15122:118;15307:2;15296:9;15292:18;15279:32;15338:18;15330:6;15327:30;15324:117;;;15360:79;;:::i;:::-;15324:117;15465:62;15519:7;15510:6;15499:9;15495:22;15465:62;:::i;:::-;15455:72;;15250:287;14601:943;;;;;;;:::o;15550:474::-;15618:6;15626;15675:2;15663:9;15654:7;15650:23;15646:32;15643:119;;;15681:79;;:::i;:::-;15643:119;15801:1;15826:53;15871:7;15862:6;15851:9;15847:22;15826:53;:::i;:::-;15816:63;;15772:117;15928:2;15954:53;15999:7;15990:6;15979:9;15975:22;15954:53;:::i;:::-;15944:63;;15899:118;15550:474;;;;;:::o;16030:180::-;16078:77;16075:1;16068:88;16175:4;16172:1;16165:15;16199:4;16196:1;16189:15;16216:320;16260:6;16297:1;16291:4;16287:12;16277:22;;16344:1;16338:4;16334:12;16365:18;16355:81;;16421:4;16413:6;16409:17;16399:27;;16355:81;16483:2;16475:6;16472:14;16452:18;16449:38;16446:84;;;16502:18;;:::i;:::-;16446:84;16267:269;16216:320;;;:::o;16542:182::-;16682:34;16678:1;16670:6;16666:14;16659:58;16542:182;:::o;16730:366::-;16872:3;16893:67;16957:2;16952:3;16893:67;:::i;:::-;16886:74;;16969:93;17058:3;16969:93;:::i;:::-;17087:2;17082:3;17078:12;17071:19;;16730:366;;;:::o;17102:419::-;17268:4;17306:2;17295:9;17291:18;17283:26;;17355:9;17349:4;17345:20;17341:1;17330:9;17326:17;17319:47;17383:131;17509:4;17383:131;:::i;:::-;17375:139;;17102:419;;;:::o;17527:181::-;17667:33;17663:1;17655:6;17651:14;17644:57;17527:181;:::o;17714:366::-;17856:3;17877:67;17941:2;17936:3;17877:67;:::i;:::-;17870:74;;17953:93;18042:3;17953:93;:::i;:::-;18071:2;18066:3;18062:12;18055:19;;17714:366;;;:::o;18086:419::-;18252:4;18290:2;18279:9;18275:18;18267:26;;18339:9;18333:4;18329:20;18325:1;18314:9;18310:17;18303:47;18367:131;18493:4;18367:131;:::i;:::-;18359:139;;18086:419;;;:::o;18511:163::-;18651:15;18647:1;18639:6;18635:14;18628:39;18511:163;:::o;18680:366::-;18822:3;18843:67;18907:2;18902:3;18843:67;:::i;:::-;18836:74;;18919:93;19008:3;18919:93;:::i;:::-;19037:2;19032:3;19028:12;19021:19;;18680:366;;;:::o;19052:419::-;19218:4;19256:2;19245:9;19241:18;19233:26;;19305:9;19299:4;19295:20;19291:1;19280:9;19276:17;19269:47;19333:131;19459:4;19333:131;:::i;:::-;19325:139;;19052:419;;;:::o;19477:223::-;19617:34;19613:1;19605:6;19601:14;19594:58;19686:6;19681:2;19673:6;19669:15;19662:31;19477:223;:::o;19706:366::-;19848:3;19869:67;19933:2;19928:3;19869:67;:::i;:::-;19862:74;;19945:93;20034:3;19945:93;:::i;:::-;20063:2;20058:3;20054:12;20047:19;;19706:366;;;:::o;20078:419::-;20244:4;20282:2;20271:9;20267:18;20259:26;;20331:9;20325:4;20321:20;20317:1;20306:9;20302:17;20295:47;20359:131;20485:4;20359:131;:::i;:::-;20351:139;;20078:419;;;:::o;20503:180::-;20551:77;20548:1;20541:88;20648:4;20645:1;20638:15;20672:4;20669:1;20662:15;20689:305;20729:3;20748:20;20766:1;20748:20;:::i;:::-;20743:25;;20782:20;20800:1;20782:20;:::i;:::-;20777:25;;20936:1;20868:66;20864:74;20861:1;20858:81;20855:107;;;20942:18;;:::i;:::-;20855:107;20986:1;20983;20979:9;20972:16;;20689:305;;;;:::o;21000:180::-;21048:77;21045:1;21038:88;21145:4;21142:1;21135:15;21169:4;21166:1;21159:15;21186:233;21225:3;21248:24;21266:5;21248:24;:::i;:::-;21239:33;;21294:66;21287:5;21284:77;21281:103;;;21364:18;;:::i;:::-;21281:103;21411:1;21404:5;21400:13;21393:20;;21186:233;;;:::o;21425:225::-;21565:34;21561:1;21553:6;21549:14;21542:58;21634:8;21629:2;21621:6;21617:15;21610:33;21425:225;:::o;21656:366::-;21798:3;21819:67;21883:2;21878:3;21819:67;:::i;:::-;21812:74;;21895:93;21984:3;21895:93;:::i;:::-;22013:2;22008:3;22004:12;21997:19;;21656:366;;;:::o;22028:419::-;22194:4;22232:2;22221:9;22217:18;22209:26;;22281:9;22275:4;22271:20;22267:1;22256:9;22252:17;22245:47;22309:131;22435:4;22309:131;:::i;:::-;22301:139;;22028:419;;;:::o;22453:171::-;22593:23;22589:1;22581:6;22577:14;22570:47;22453:171;:::o;22630:366::-;22772:3;22793:67;22857:2;22852:3;22793:67;:::i;:::-;22786:74;;22869:93;22958:3;22869:93;:::i;:::-;22987:2;22982:3;22978:12;22971:19;;22630:366;;;:::o;23002:419::-;23168:4;23206:2;23195:9;23191:18;23183:26;;23255:9;23249:4;23245:20;23241:1;23230:9;23226:17;23219:47;23283:131;23409:4;23283:131;:::i;:::-;23275:139;;23002:419;;;:::o;23427:227::-;23567:34;23563:1;23555:6;23551:14;23544:58;23636:10;23631:2;23623:6;23619:15;23612:35;23427:227;:::o;23660:366::-;23802:3;23823:67;23887:2;23882:3;23823:67;:::i;:::-;23816:74;;23899:93;23988:3;23899:93;:::i;:::-;24017:2;24012:3;24008:12;24001:19;;23660:366;;;:::o;24032:419::-;24198:4;24236:2;24225:9;24221:18;24213:26;;24285:9;24279:4;24275:20;24271:1;24260:9;24256:17;24249:47;24313:131;24439:4;24313:131;:::i;:::-;24305:139;;24032:419;;;:::o;24457:177::-;24597:29;24593:1;24585:6;24581:14;24574:53;24457:177;:::o;24640:366::-;24782:3;24803:67;24867:2;24862:3;24803:67;:::i;:::-;24796:74;;24879:93;24968:3;24879:93;:::i;:::-;24997:2;24992:3;24988:12;24981:19;;24640:366;;;:::o;25012:419::-;25178:4;25216:2;25205:9;25201:18;25193:26;;25265:9;25259:4;25255:20;25251:1;25240:9;25236:17;25229:47;25293:131;25419:4;25293:131;:::i;:::-;25285:139;;25012:419;;;:::o;25437:148::-;25539:11;25576:3;25561:18;;25437:148;;;;:::o;25591:377::-;25697:3;25725:39;25758:5;25725:39;:::i;:::-;25780:89;25862:6;25857:3;25780:89;:::i;:::-;25773:96;;25878:52;25923:6;25918:3;25911:4;25904:5;25900:16;25878:52;:::i;:::-;25955:6;25950:3;25946:16;25939:23;;25701:267;25591:377;;;;:::o;25974:435::-;26154:3;26176:95;26267:3;26258:6;26176:95;:::i;:::-;26169:102;;26288:95;26379:3;26370:6;26288:95;:::i;:::-;26281:102;;26400:3;26393:10;;25974:435;;;;;:::o;26415:225::-;26555:34;26551:1;26543:6;26539:14;26532:58;26624:8;26619:2;26611:6;26607:15;26600:33;26415:225;:::o;26646:366::-;26788:3;26809:67;26873:2;26868:3;26809:67;:::i;:::-;26802:74;;26885:93;26974:3;26885:93;:::i;:::-;27003:2;26998:3;26994:12;26987:19;;26646:366;;;:::o;27018:419::-;27184:4;27222:2;27211:9;27207:18;27199:26;;27271:9;27265:4;27261:20;27257:1;27246:9;27242:17;27235:47;27299:131;27425:4;27299:131;:::i;:::-;27291:139;;27018:419;;;:::o;27443:177::-;27583:29;27579:1;27571:6;27567:14;27560:53;27443:177;:::o;27626:366::-;27768:3;27789:67;27853:2;27848:3;27789:67;:::i;:::-;27782:74;;27865:93;27954:3;27865:93;:::i;:::-;27983:2;27978:3;27974:12;27967:19;;27626:366;;;:::o;27998:419::-;28164:4;28202:2;28191:9;28187:18;28179:26;;28251:9;28245:4;28241:20;28237:1;28226:9;28222:17;28215:47;28279:131;28405:4;28279:131;:::i;:::-;28271:139;;27998:419;;;:::o;28423:348::-;28463:7;28486:20;28504:1;28486:20;:::i;:::-;28481:25;;28520:20;28538:1;28520:20;:::i;:::-;28515:25;;28708:1;28640:66;28636:74;28633:1;28630:81;28625:1;28618:9;28611:17;28607:105;28604:131;;;28715:18;;:::i;:::-;28604:131;28763:1;28760;28756:9;28745:20;;28423:348;;;;:::o;28777:180::-;28825:77;28822:1;28815:88;28922:4;28919:1;28912:15;28946:4;28943:1;28936:15;28963:185;29003:1;29020:20;29038:1;29020:20;:::i;:::-;29015:25;;29054:20;29072:1;29054:20;:::i;:::-;29049:25;;29093:1;29083:35;;29098:18;;:::i;:::-;29083:35;29140:1;29137;29133:9;29128:14;;28963:185;;;;:::o;29154:220::-;29294:34;29290:1;29282:6;29278:14;29271:58;29363:3;29358:2;29350:6;29346:15;29339:28;29154:220;:::o;29380:366::-;29522:3;29543:67;29607:2;29602:3;29543:67;:::i;:::-;29536:74;;29619:93;29708:3;29619:93;:::i;:::-;29737:2;29732:3;29728:12;29721:19;;29380:366;;;:::o;29752:419::-;29918:4;29956:2;29945:9;29941:18;29933:26;;30005:9;29999:4;29995:20;29991:1;29980:9;29976:17;29969:47;30033:131;30159:4;30033:131;:::i;:::-;30025:139;;29752:419;;;:::o;30177:98::-;30228:6;30262:5;30256:12;30246:22;;30177:98;;;:::o;30281:168::-;30364:11;30398:6;30393:3;30386:19;30438:4;30433:3;30429:14;30414:29;;30281:168;;;;:::o;30455:360::-;30541:3;30569:38;30601:5;30569:38;:::i;:::-;30623:70;30686:6;30681:3;30623:70;:::i;:::-;30616:77;;30702:52;30747:6;30742:3;30735:4;30728:5;30724:16;30702:52;:::i;:::-;30779:29;30801:6;30779:29;:::i;:::-;30774:3;30770:39;30763:46;;30545:270;30455:360;;;;:::o;30821:640::-;31016:4;31054:3;31043:9;31039:19;31031:27;;31068:71;31136:1;31125:9;31121:17;31112:6;31068:71;:::i;:::-;31149:72;31217:2;31206:9;31202:18;31193:6;31149:72;:::i;:::-;31231;31299:2;31288:9;31284:18;31275:6;31231:72;:::i;:::-;31350:9;31344:4;31340:20;31335:2;31324:9;31320:18;31313:48;31378:76;31449:4;31440:6;31378:76;:::i;:::-;31370:84;;30821:640;;;;;;;:::o;31467:141::-;31523:5;31554:6;31548:13;31539:22;;31570:32;31596:5;31570:32;:::i;:::-;31467:141;;;;:::o;31614:349::-;31683:6;31732:2;31720:9;31711:7;31707:23;31703:32;31700:119;;;31738:79;;:::i;:::-;31700:119;31858:1;31883:63;31938:7;31929:6;31918:9;31914:22;31883:63;:::i;:::-;31873:73;;31829:127;31614:349;;;;:::o;31969:191::-;32009:4;32029:20;32047:1;32029:20;:::i;:::-;32024:25;;32063:20;32081:1;32063:20;:::i;:::-;32058:25;;32102:1;32099;32096:8;32093:34;;;32107:18;;:::i;:::-;32093:34;32152:1;32149;32145:9;32137:17;;31969:191;;;;:::o;32166:176::-;32198:1;32215:20;32233:1;32215:20;:::i;:::-;32210:25;;32249:20;32267:1;32249:20;:::i;:::-;32244:25;;32288:1;32278:35;;32293:18;;:::i;:::-;32278:35;32334:1;32331;32327:9;32322:14;;32166:176;;;;:::o
Swarm Source
ipfs://dee12ad6b24109791b8454f0be42d785dab0a6f9af6e6e942322f1f0f438dafe
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,231.28 | 0.12 | $267.75 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.