Source Code
Overview
ETH Balance
0.3 ETH
Eth Value
$561.80 (@ $1,872.68/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 82 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer From | 17162532 | 1034 days ago | IN | 0 ETH | 0.00266429 | ||||
| Give Free Mint | 16749706 | 1092 days ago | IN | 0 ETH | 0.00151793 | ||||
| Give Free Mint | 16607437 | 1112 days ago | IN | 0 ETH | 0.00045733 | ||||
| Free Mint | 16563453 | 1118 days ago | IN | 0 ETH | 0.0025424 | ||||
| Give Free Mint | 16420281 | 1138 days ago | IN | 0 ETH | 0.00125576 | ||||
| Give Free Mint | 16335115 | 1150 days ago | IN | 0 ETH | 0.00078556 | ||||
| Give Free Mints | 16199060 | 1169 days ago | IN | 0 ETH | 0.00203588 | ||||
| Give Free Mint | 16093300 | 1184 days ago | IN | 0 ETH | 0.00051046 | ||||
| Free Mint | 16004735 | 1196 days ago | IN | 0 ETH | 0.0012242 | ||||
| Free Mint | 15984388 | 1199 days ago | IN | 0 ETH | 0.00249268 | ||||
| Give Free Mints | 15984017 | 1199 days ago | IN | 0 ETH | 0.00143433 | ||||
| Give Free Mints | 15933812 | 1206 days ago | IN | 0 ETH | 0.00272474 | ||||
| Set Approval For... | 15928153 | 1207 days ago | IN | 0 ETH | 0.00187975 | ||||
| Give Free Mints | 15892074 | 1212 days ago | IN | 0 ETH | 0.00345172 | ||||
| Give Free Mints | 15777558 | 1228 days ago | IN | 0 ETH | 0.00247961 | ||||
| Give Free Mints | 15777558 | 1228 days ago | IN | 0 ETH | 0.01117423 | ||||
| Free Mint | 15762461 | 1230 days ago | IN | 0 ETH | 0.00132979 | ||||
| Give Free Mint | 15747179 | 1232 days ago | IN | 0 ETH | 0.00106399 | ||||
| Free Mint | 15739497 | 1233 days ago | IN | 0 ETH | 0.001962 | ||||
| Transfer From | 15683190 | 1241 days ago | IN | 0 ETH | 0.00175181 | ||||
| Give Free Mint | 15668878 | 1243 days ago | IN | 0 ETH | 0.0020614 | ||||
| Set Approval For... | 15595797 | 1253 days ago | IN | 0 ETH | 0.0003129 | ||||
| Free Mint | 15569913 | 1257 days ago | IN | 0 ETH | 0.00018643 | ||||
| Free Mint | 15568574 | 1257 days ago | IN | 0 ETH | 0.00071419 | ||||
| Free Mint | 15555692 | 1259 days ago | IN | 0 ETH | 0.00393849 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DVNBLK
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-09-02
*/
// 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 DVNBLK is ERC721A , Ownable {
using SafeMath for uint256;
uint256 public price = 300000000000000000; // 0.3 ether
string public baseUri;
uint256 public MAX = 500;
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 Black Tier 3", "DVNBLK") {}
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
6080604052670429d069189e00006009556101f4600b55600b54600c55600b54600d556000600e60006101000a81548160ff0219169083151502179055503480156200004a57600080fd5b506040518060400160405280601c81526020017f44524956454e564552534520304e4520426c61636b20546965722033000000008152506040518060400160405280600681526020017f44564e424c4b00000000000000000000000000000000000000000000000000008152508160029080519060200190620000cf929190620001c5565b508060039080519060200190620000e8929190620001c5565b50620000f9620001b860201b60201c565b6000819055505050600062000113620001bd60201b60201c565b905080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002da565b600090565b600033905090565b828054620001d390620002a4565b90600052602060002090601f016020900481019282620001f7576000855562000243565b82601f106200021257805160ff191683800117855562000243565b8280016001018555821562000243579182015b828111156200024257825182559160200191906001019062000225565b5b50905062000252919062000256565b5090565b5b808211156200027157600081600090555060010162000257565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002bd57607f821691505b60208210811415620002d457620002d362000275565b5b50919050565b6141f080620002ea6000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063a2b40d19116100a0578063df2823311161006f578063df282331146106f8578063e166de7c14610735578063e985e9c514610772578063eb8d2444146107af578063f2fde38b146107da57610204565b8063a2b40d191461063e578063b88d4fde14610667578063c87b56dd14610690578063d49d5181146106cd57610204565b8063977b055b116100e7578063977b055b146105785780639abc8320146105a3578063a035b1fe146105ce578063a0712d68146105f9578063a22cb4651461061557610204565b8063715018a6146104e25780638da5cb5b146104f95780638f9ab2441461052457806395d89b411461054d57610204565b806334918dfd1161019b578063453c23101161016a578063453c2310146103fd57806355f804b3146104285780635b70ea9f146104515780636352211e1461046857806370a08231146104a557610204565b806334918dfd1461037d5780633b38716d146103945780633ccfd60b146103bd57806342842e0e146103d457610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd1461030057806320c63e3b1461032b57806323b872dd1461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc1461027157806308ea9265146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613054565b610803565b60405161023d919061309c565b60405180910390f35b34801561025257600080fd5b5061025b6108e5565b6040516102689190613150565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906131a8565b610977565b6040516102a59190613216565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906131a8565b6109f3565b005b3480156102e357600080fd5b506102fe60048036038101906102f9919061325d565b610a79565b005b34801561030c57600080fd5b50610315610b84565b60405161032291906132ac565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906131a8565b610b9b565b005b34801561036057600080fd5b5061037b600480360381019061037691906132c7565b610c21565b005b34801561038957600080fd5b50610392610c31565b005b3480156103a057600080fd5b506103bb60048036038101906103b6919061325d565b610cd9565b005b3480156103c957600080fd5b506103d2610d9d565b005b3480156103e057600080fd5b506103fb60048036038101906103f691906132c7565b610e82565b005b34801561040957600080fd5b50610412610ea2565b60405161041f91906132ac565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a919061344f565b610ea8565b005b34801561045d57600080fd5b50610466610f3e565b005b34801561047457600080fd5b5061048f600480360381019061048a91906131a8565b61112f565b60405161049c9190613216565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613498565b611145565b6040516104d991906132ac565b60405180910390f35b3480156104ee57600080fd5b506104f7611215565b005b34801561050557600080fd5b5061050e611352565b60405161051b9190613216565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190613650565b61137c565b005b34801561055957600080fd5b50610562611494565b60405161056f9190613150565b60405180910390f35b34801561058457600080fd5b5061058d611526565b60405161059a91906132ac565b60405180910390f35b3480156105af57600080fd5b506105b861152c565b6040516105c59190613150565b60405180910390f35b3480156105da57600080fd5b506105e36115ba565b6040516105f091906132ac565b60405180910390f35b610613600480360381019061060e91906131a8565b6115c0565b005b34801561062157600080fd5b5061063c600480360381019061063791906136f4565b611810565b005b34801561064a57600080fd5b50610665600480360381019061066091906131a8565b611988565b005b34801561067357600080fd5b5061068e600480360381019061068991906137d5565b611a0e565b005b34801561069c57600080fd5b506106b760048036038101906106b291906131a8565b611a8a565b6040516106c49190613150565b60405180910390f35b3480156106d957600080fd5b506106e2611b29565b6040516106ef91906132ac565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190613498565b611b2f565b60405161072c91906132ac565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613498565b611b47565b60405161076991906132ac565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613858565b611b5f565b6040516107a6919061309c565b60405180910390f35b3480156107bb57600080fd5b506107c4611bf3565b6040516107d1919061309c565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613498565b611c06565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ce57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108de57506108dd82611db2565b5b9050919050565b6060600280546108f4906138c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610920906138c7565b801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b5050505050905090565b600061098282611e1c565b6109b8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109fb611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610a19611352565b73ffffffffffffffffffffffffffffffffffffffff1614610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690613945565b60405180910390fd5b80600d8190555050565b6000610a848261112f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aec576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b0b611e6a565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b3d5750610b3b81610b36611e6a565b611b5f565b155b15610b74576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f838383611e72565b505050565b6000610b8e611f24565b6001546000540303905090565b610ba3611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610bc1611352565b73ffffffffffffffffffffffffffffffffffffffff1614610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613945565b60405180910390fd5b80600c8190555050565b610c2c838383611f29565b505050565b610c39611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610c57611352565b73ffffffffffffffffffffffffffffffffffffffff1614610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490613945565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b610ce1611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610cff611352565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613945565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610da5611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610dc3611352565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613945565b60405180910390fd5b6000479050600073f02a7fec86787fd29427cad8581d400d0bb660f190508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610e7d573d6000803e3d6000fd5b505050565b610e9d83838360405180602001604052806000815250611a0e565b505050565b600d5481565b610eb0611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610ece611352565b73ffffffffffffffffffffffffffffffffffffffff1614610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90613945565b60405180910390fd5b80600a9080519060200190610f3a929190612f02565b5050565b600e60009054906101000a900460ff16610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f84906139b1565b60405180910390fd5b600060106000610f9b611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811161101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613a1d565b60405180910390fd5b600b546110388261102a610b84565b61241a90919063ffffffff16565b1115611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613aaf565b60405180910390fd5b80600f6000611086611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110cf9190613afe565b925050819055506000601060006110e4611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061112c3382612478565b50565b600061113a82612496565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ad576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61121d611e6a565b73ffffffffffffffffffffffffffffffffffffffff1661123b611352565b73ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890613945565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611384611e6a565b73ffffffffffffffffffffffffffffffffffffffff166113a2611352565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90613945565b60405180910390fd5b60005b825181101561148f5781818151811061141757611416613b54565b5b60200260200101516010600085848151811061143657611435613b54565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061148790613b83565b9150506113fb565b505050565b6060600380546114a3906138c7565b80601f01602080910402602001604051908101604052809291908181526020018280546114cf906138c7565b801561151c5780601f106114f15761010080835404028352916020019161151c565b820191906000526020600020905b8154815290600101906020018083116114ff57829003601f168201915b5050505050905090565b600c5481565b600a8054611539906138c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611565906138c7565b80156115b25780601f10611587576101008083540402835291602001916115b2565b820191906000526020600020905b81548152906001019060200180831161159557829003601f168201915b505050505081565b60095481565b600e60009054906101000a900460ff1661160f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611606906139b1565b60405180910390fd5b600c54811115611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90613c3e565b60405180910390fd5b3461166a8260095461272590919063ffffffff16565b11156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290613caa565b60405180910390fd5b600b546116c8826116ba610b84565b61241a90919063ffffffff16565b1115611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090613d3c565b60405180910390fd5b600d5461176582600f600061171c611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241a90919063ffffffff16565b11156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613da8565b60405180910390fd5b80600f60006117b3611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fc9190613afe565b9250508190555061180d3382612478565b50565b611818611e6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061188a611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611937611e6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161197c919061309c565b60405180910390a35050565b611990611e6a565b73ffffffffffffffffffffffffffffffffffffffff166119ae611352565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613945565b60405180910390fd5b8060098190555050565b611a19848484611f29565b611a388373ffffffffffffffffffffffffffffffffffffffff166127a0565b8015611a4d5750611a4b848484846127c3565b155b15611a84576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a9582611e1c565b611acb576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ad5612923565b9050600081511415611af65760405180602001604052806000815250611b21565b80611b00846129b5565b604051602001611b11929190613e04565b6040516020818303038152906040525b915050919050565b600b5481565b600f6020528060005260406000206000915090505481565b60106020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff1681565b611c0e611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611c2c611352565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613945565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613e9a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e27611f24565b11158015611e36575060005482105b8015611e63575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611f3482612496565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f5b611e6a565b73ffffffffffffffffffffffffffffffffffffffff161480611f8e5750611f8d8260000151611f88611e6a565b611b5f565b5b80611fd35750611f9c611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611fbb84610977565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061200c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612075576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120dc576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e98585856001612b16565b6120f96000848460000151611e72565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123aa576000548110156123a95782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124138585856001612b1c565b5050505050565b60008082846124299190613afe565b90508381101561246e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246590613f06565b60405180910390fd5b8091505092915050565b612492828260405180602001604052806000815250612b22565b5050565b61249e612f88565b6000829050806124ac611f24565b111580156124bb575060005481105b156126ee576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516126ec57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125d0578092505050612720565b5b6001156126eb57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126e6578092505050612720565b6125d1565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600080831415612738576000905061279a565b600082846127469190613f26565b90508284826127559190613faf565b14612795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278c90614052565b60405180910390fd5b809150505b92915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127e9611e6a565b8786866040518563ffffffff1660e01b815260040161280b94939291906140c7565b602060405180830381600087803b15801561282557600080fd5b505af192505050801561285657506040513d601f19601f820116820180604052508101906128539190614128565b60015b6128d0573d8060008114612886576040519150601f19603f3d011682016040523d82523d6000602084013e61288b565b606091505b506000815114156128c8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612932906138c7565b80601f016020809104026020016040519081016040528092919081815260200182805461295e906138c7565b80156129ab5780601f10612980576101008083540402835291602001916129ab565b820191906000526020600020905b81548152906001019060200180831161298e57829003601f168201915b5050505050905090565b606060008214156129fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b11565b600082905060005b60008214612a2f578080612a1890613b83565b915050600a82612a289190613faf565b9150612a05565b60008167ffffffffffffffff811115612a4b57612a4a613324565b5b6040519080825280601f01601f191660200182016040528015612a7d5781602001600182028036833780820191505090505b5090505b60008514612b0a57600182612a969190614155565b9150600a85612aa59190614189565b6030612ab19190613afe565b60f81b818381518110612ac757612ac6613b54565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b039190613faf565b9450612a81565b8093505050505b919050565b50505050565b50505050565b612b2f8383836001612b34565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612ba1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612bdc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612be96000868387612b16565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612db35750612db28773ffffffffffffffffffffffffffffffffffffffff166127a0565b5b15612e79575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e2860008884806001019550886127c3565b612e5e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612db9578260005414612e7457600080fd5b612ee5565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612e7a575b816000819055505050612efb6000868387612b1c565b5050505050565b828054612f0e906138c7565b90600052602060002090601f016020900481019282612f305760008555612f77565b82601f10612f4957805160ff1916838001178555612f77565b82800160010185558215612f77579182015b82811115612f76578251825591602001919060010190612f5b565b5b509050612f849190612fcb565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612fe4576000816000905550600101612fcc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61303181612ffc565b811461303c57600080fd5b50565b60008135905061304e81613028565b92915050565b60006020828403121561306a57613069612ff2565b5b60006130788482850161303f565b91505092915050565b60008115159050919050565b61309681613081565b82525050565b60006020820190506130b1600083018461308d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f15780820151818401526020810190506130d6565b83811115613100576000848401525b50505050565b6000601f19601f8301169050919050565b6000613122826130b7565b61312c81856130c2565b935061313c8185602086016130d3565b61314581613106565b840191505092915050565b6000602082019050818103600083015261316a8184613117565b905092915050565b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000602082840312156131be576131bd612ff2565b5b60006131cc84828501613193565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613200826131d5565b9050919050565b613210816131f5565b82525050565b600060208201905061322b6000830184613207565b92915050565b61323a816131f5565b811461324557600080fd5b50565b60008135905061325781613231565b92915050565b6000806040838503121561327457613273612ff2565b5b600061328285828601613248565b925050602061329385828601613193565b9150509250929050565b6132a681613172565b82525050565b60006020820190506132c1600083018461329d565b92915050565b6000806000606084860312156132e0576132df612ff2565b5b60006132ee86828701613248565b93505060206132ff86828701613248565b925050604061331086828701613193565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61335c82613106565b810181811067ffffffffffffffff8211171561337b5761337a613324565b5b80604052505050565b600061338e612fe8565b905061339a8282613353565b919050565b600067ffffffffffffffff8211156133ba576133b9613324565b5b6133c382613106565b9050602081019050919050565b82818337600083830152505050565b60006133f26133ed8461339f565b613384565b90508281526020810184848401111561340e5761340d61331f565b5b6134198482856133d0565b509392505050565b600082601f8301126134365761343561331a565b5b81356134468482602086016133df565b91505092915050565b60006020828403121561346557613464612ff2565b5b600082013567ffffffffffffffff81111561348357613482612ff7565b5b61348f84828501613421565b91505092915050565b6000602082840312156134ae576134ad612ff2565b5b60006134bc84828501613248565b91505092915050565b600067ffffffffffffffff8211156134e0576134df613324565b5b602082029050602081019050919050565b600080fd5b6000613509613504846134c5565b613384565b9050808382526020820190506020840283018581111561352c5761352b6134f1565b5b835b8181101561355557806135418882613248565b84526020840193505060208101905061352e565b5050509392505050565b600082601f8301126135745761357361331a565b5b81356135848482602086016134f6565b91505092915050565b600067ffffffffffffffff8211156135a8576135a7613324565b5b602082029050602081019050919050565b60006135cc6135c78461358d565b613384565b905080838252602082019050602084028301858111156135ef576135ee6134f1565b5b835b8181101561361857806136048882613193565b8452602084019350506020810190506135f1565b5050509392505050565b600082601f8301126136375761363661331a565b5b81356136478482602086016135b9565b91505092915050565b6000806040838503121561366757613666612ff2565b5b600083013567ffffffffffffffff81111561368557613684612ff7565b5b6136918582860161355f565b925050602083013567ffffffffffffffff8111156136b2576136b1612ff7565b5b6136be85828601613622565b9150509250929050565b6136d181613081565b81146136dc57600080fd5b50565b6000813590506136ee816136c8565b92915050565b6000806040838503121561370b5761370a612ff2565b5b600061371985828601613248565b925050602061372a858286016136df565b9150509250929050565b600067ffffffffffffffff82111561374f5761374e613324565b5b61375882613106565b9050602081019050919050565b600061377861377384613734565b613384565b9050828152602081018484840111156137945761379361331f565b5b61379f8482856133d0565b509392505050565b600082601f8301126137bc576137bb61331a565b5b81356137cc848260208601613765565b91505092915050565b600080600080608085870312156137ef576137ee612ff2565b5b60006137fd87828801613248565b945050602061380e87828801613248565b935050604061381f87828801613193565b925050606085013567ffffffffffffffff8111156138405761383f612ff7565b5b61384c878288016137a7565b91505092959194509250565b6000806040838503121561386f5761386e612ff2565b5b600061387d85828601613248565b925050602061388e85828601613248565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138df57607f821691505b602082108114156138f3576138f2613898565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061392f6020836130c2565b915061393a826138f9565b602082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74206e667400600082015250565b600061399b601f836130c2565b91506139a682613965565b602082019050919050565b600060208201905081810360008301526139ca8161398e565b9050919050565b7f4e6f2046726565204d696e747300000000000000000000000000000000000000600082015250565b6000613a07600d836130c2565b9150613a12826139d1565b602082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f4d696e7420776f756c6420657863656564206d617820737570706c79206f662060008201527f6e66747300000000000000000000000000000000000000000000000000000000602082015250565b6000613a996024836130c2565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b0982613172565b9150613b1483613172565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b4957613b48613acf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613b8e82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc157613bc0613acf565b5b600182019050919050565b7f43616e206f6e6c79206d696e74206365727461696e20746f6b656e732061742060008201527f612074696d650000000000000000000000000000000000000000000000000000602082015250565b6000613c286026836130c2565b9150613c3382613bcc565b604082019050919050565b60006020820190508181036000830152613c5781613c1b565b9050919050565b7f4e6f7420456e6f7567682045746865722053656e740000000000000000000000600082015250565b6000613c946015836130c2565b9150613c9f82613c5e565b602082019050919050565b60006020820190508181036000830152613cc381613c87565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66206e667473000000000000000000000000000000000000000000000000602082015250565b6000613d266028836130c2565b9150613d3182613cca565b604082019050919050565b60006020820190508181036000830152613d5581613d19565b9050919050565b7f4d6178206c696d6974206f662077616c6c657420726561636865640000000000600082015250565b6000613d92601b836130c2565b9150613d9d82613d5c565b602082019050919050565b60006020820190508181036000830152613dc181613d85565b9050919050565b600081905092915050565b6000613dde826130b7565b613de88185613dc8565b9350613df88185602086016130d3565b80840191505092915050565b6000613e108285613dd3565b9150613e1c8284613dd3565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e846026836130c2565b9150613e8f82613e28565b604082019050919050565b60006020820190508181036000830152613eb381613e77565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ef0601b836130c2565b9150613efb82613eba565b602082019050919050565b60006020820190508181036000830152613f1f81613ee3565b9050919050565b6000613f3182613172565b9150613f3c83613172565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f7557613f74613acf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fba82613172565b9150613fc583613172565b925082613fd557613fd4613f80565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061403c6021836130c2565b915061404782613fe0565b604082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061409982614072565b6140a3818561407d565b93506140b38185602086016130d3565b6140bc81613106565b840191505092915050565b60006080820190506140dc6000830187613207565b6140e96020830186613207565b6140f6604083018561329d565b8181036060830152614108818461408e565b905095945050505050565b60008151905061412281613028565b92915050565b60006020828403121561413e5761413d612ff2565b5b600061414c84828501614113565b91505092915050565b600061416082613172565b915061416b83613172565b92508282101561417e5761417d613acf565b5b828203905092915050565b600061419482613172565b915061419f83613172565b9250826141af576141ae613f80565b5b82820690509291505056fea2646970667358221220a6f37a643f9020614eabc9288dd9e03bbdeaeb4346efd78a8964e52452d64fec64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063715018a611610118578063a2b40d19116100a0578063df2823311161006f578063df282331146106f8578063e166de7c14610735578063e985e9c514610772578063eb8d2444146107af578063f2fde38b146107da57610204565b8063a2b40d191461063e578063b88d4fde14610667578063c87b56dd14610690578063d49d5181146106cd57610204565b8063977b055b116100e7578063977b055b146105785780639abc8320146105a3578063a035b1fe146105ce578063a0712d68146105f9578063a22cb4651461061557610204565b8063715018a6146104e25780638da5cb5b146104f95780638f9ab2441461052457806395d89b411461054d57610204565b806334918dfd1161019b578063453c23101161016a578063453c2310146103fd57806355f804b3146104285780635b70ea9f146104515780636352211e1461046857806370a08231146104a557610204565b806334918dfd1461037d5780633b38716d146103945780633ccfd60b146103bd57806342842e0e146103d457610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd1461030057806320c63e3b1461032b57806323b872dd1461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc1461027157806308ea9265146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613054565b610803565b60405161023d919061309c565b60405180910390f35b34801561025257600080fd5b5061025b6108e5565b6040516102689190613150565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906131a8565b610977565b6040516102a59190613216565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906131a8565b6109f3565b005b3480156102e357600080fd5b506102fe60048036038101906102f9919061325d565b610a79565b005b34801561030c57600080fd5b50610315610b84565b60405161032291906132ac565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906131a8565b610b9b565b005b34801561036057600080fd5b5061037b600480360381019061037691906132c7565b610c21565b005b34801561038957600080fd5b50610392610c31565b005b3480156103a057600080fd5b506103bb60048036038101906103b6919061325d565b610cd9565b005b3480156103c957600080fd5b506103d2610d9d565b005b3480156103e057600080fd5b506103fb60048036038101906103f691906132c7565b610e82565b005b34801561040957600080fd5b50610412610ea2565b60405161041f91906132ac565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a919061344f565b610ea8565b005b34801561045d57600080fd5b50610466610f3e565b005b34801561047457600080fd5b5061048f600480360381019061048a91906131a8565b61112f565b60405161049c9190613216565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613498565b611145565b6040516104d991906132ac565b60405180910390f35b3480156104ee57600080fd5b506104f7611215565b005b34801561050557600080fd5b5061050e611352565b60405161051b9190613216565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190613650565b61137c565b005b34801561055957600080fd5b50610562611494565b60405161056f9190613150565b60405180910390f35b34801561058457600080fd5b5061058d611526565b60405161059a91906132ac565b60405180910390f35b3480156105af57600080fd5b506105b861152c565b6040516105c59190613150565b60405180910390f35b3480156105da57600080fd5b506105e36115ba565b6040516105f091906132ac565b60405180910390f35b610613600480360381019061060e91906131a8565b6115c0565b005b34801561062157600080fd5b5061063c600480360381019061063791906136f4565b611810565b005b34801561064a57600080fd5b50610665600480360381019061066091906131a8565b611988565b005b34801561067357600080fd5b5061068e600480360381019061068991906137d5565b611a0e565b005b34801561069c57600080fd5b506106b760048036038101906106b291906131a8565b611a8a565b6040516106c49190613150565b60405180910390f35b3480156106d957600080fd5b506106e2611b29565b6040516106ef91906132ac565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190613498565b611b2f565b60405161072c91906132ac565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613498565b611b47565b60405161076991906132ac565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613858565b611b5f565b6040516107a6919061309c565b60405180910390f35b3480156107bb57600080fd5b506107c4611bf3565b6040516107d1919061309c565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613498565b611c06565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ce57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108de57506108dd82611db2565b5b9050919050565b6060600280546108f4906138c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610920906138c7565b801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b5050505050905090565b600061098282611e1c565b6109b8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109fb611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610a19611352565b73ffffffffffffffffffffffffffffffffffffffff1614610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690613945565b60405180910390fd5b80600d8190555050565b6000610a848261112f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aec576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b0b611e6a565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b3d5750610b3b81610b36611e6a565b611b5f565b155b15610b74576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f838383611e72565b505050565b6000610b8e611f24565b6001546000540303905090565b610ba3611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610bc1611352565b73ffffffffffffffffffffffffffffffffffffffff1614610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613945565b60405180910390fd5b80600c8190555050565b610c2c838383611f29565b505050565b610c39611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610c57611352565b73ffffffffffffffffffffffffffffffffffffffff1614610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490613945565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b610ce1611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610cff611352565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613945565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610da5611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610dc3611352565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613945565b60405180910390fd5b6000479050600073f02a7fec86787fd29427cad8581d400d0bb660f190508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610e7d573d6000803e3d6000fd5b505050565b610e9d83838360405180602001604052806000815250611a0e565b505050565b600d5481565b610eb0611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610ece611352565b73ffffffffffffffffffffffffffffffffffffffff1614610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90613945565b60405180910390fd5b80600a9080519060200190610f3a929190612f02565b5050565b600e60009054906101000a900460ff16610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f84906139b1565b60405180910390fd5b600060106000610f9b611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811161101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613a1d565b60405180910390fd5b600b546110388261102a610b84565b61241a90919063ffffffff16565b1115611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613aaf565b60405180910390fd5b80600f6000611086611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110cf9190613afe565b925050819055506000601060006110e4611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061112c3382612478565b50565b600061113a82612496565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ad576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61121d611e6a565b73ffffffffffffffffffffffffffffffffffffffff1661123b611352565b73ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890613945565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611384611e6a565b73ffffffffffffffffffffffffffffffffffffffff166113a2611352565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90613945565b60405180910390fd5b60005b825181101561148f5781818151811061141757611416613b54565b5b60200260200101516010600085848151811061143657611435613b54565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061148790613b83565b9150506113fb565b505050565b6060600380546114a3906138c7565b80601f01602080910402602001604051908101604052809291908181526020018280546114cf906138c7565b801561151c5780601f106114f15761010080835404028352916020019161151c565b820191906000526020600020905b8154815290600101906020018083116114ff57829003601f168201915b5050505050905090565b600c5481565b600a8054611539906138c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611565906138c7565b80156115b25780601f10611587576101008083540402835291602001916115b2565b820191906000526020600020905b81548152906001019060200180831161159557829003601f168201915b505050505081565b60095481565b600e60009054906101000a900460ff1661160f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611606906139b1565b60405180910390fd5b600c54811115611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90613c3e565b60405180910390fd5b3461166a8260095461272590919063ffffffff16565b11156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290613caa565b60405180910390fd5b600b546116c8826116ba610b84565b61241a90919063ffffffff16565b1115611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090613d3c565b60405180910390fd5b600d5461176582600f600061171c611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241a90919063ffffffff16565b11156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613da8565b60405180910390fd5b80600f60006117b3611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fc9190613afe565b9250508190555061180d3382612478565b50565b611818611e6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061188a611e6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611937611e6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161197c919061309c565b60405180910390a35050565b611990611e6a565b73ffffffffffffffffffffffffffffffffffffffff166119ae611352565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613945565b60405180910390fd5b8060098190555050565b611a19848484611f29565b611a388373ffffffffffffffffffffffffffffffffffffffff166127a0565b8015611a4d5750611a4b848484846127c3565b155b15611a84576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a9582611e1c565b611acb576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ad5612923565b9050600081511415611af65760405180602001604052806000815250611b21565b80611b00846129b5565b604051602001611b11929190613e04565b6040516020818303038152906040525b915050919050565b600b5481565b600f6020528060005260406000206000915090505481565b60106020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff1681565b611c0e611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611c2c611352565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613945565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613e9a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e27611f24565b11158015611e36575060005482105b8015611e63575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611f3482612496565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f5b611e6a565b73ffffffffffffffffffffffffffffffffffffffff161480611f8e5750611f8d8260000151611f88611e6a565b611b5f565b5b80611fd35750611f9c611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611fbb84610977565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061200c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612075576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120dc576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e98585856001612b16565b6120f96000848460000151611e72565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123aa576000548110156123a95782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124138585856001612b1c565b5050505050565b60008082846124299190613afe565b90508381101561246e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246590613f06565b60405180910390fd5b8091505092915050565b612492828260405180602001604052806000815250612b22565b5050565b61249e612f88565b6000829050806124ac611f24565b111580156124bb575060005481105b156126ee576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516126ec57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125d0578092505050612720565b5b6001156126eb57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126e6578092505050612720565b6125d1565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600080831415612738576000905061279a565b600082846127469190613f26565b90508284826127559190613faf565b14612795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278c90614052565b60405180910390fd5b809150505b92915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127e9611e6a565b8786866040518563ffffffff1660e01b815260040161280b94939291906140c7565b602060405180830381600087803b15801561282557600080fd5b505af192505050801561285657506040513d601f19601f820116820180604052508101906128539190614128565b60015b6128d0573d8060008114612886576040519150601f19603f3d011682016040523d82523d6000602084013e61288b565b606091505b506000815114156128c8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612932906138c7565b80601f016020809104026020016040519081016040528092919081815260200182805461295e906138c7565b80156129ab5780601f10612980576101008083540402835291602001916129ab565b820191906000526020600020905b81548152906001019060200180831161298e57829003601f168201915b5050505050905090565b606060008214156129fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b11565b600082905060005b60008214612a2f578080612a1890613b83565b915050600a82612a289190613faf565b9150612a05565b60008167ffffffffffffffff811115612a4b57612a4a613324565b5b6040519080825280601f01601f191660200182016040528015612a7d5781602001600182028036833780820191505090505b5090505b60008514612b0a57600182612a969190614155565b9150600a85612aa59190614189565b6030612ab19190613afe565b60f81b818381518110612ac757612ac6613b54565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b039190613faf565b9450612a81565b8093505050505b919050565b50505050565b50505050565b612b2f8383836001612b34565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612ba1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612bdc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612be96000868387612b16565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612db35750612db28773ffffffffffffffffffffffffffffffffffffffff166127a0565b5b15612e79575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e2860008884806001019550886127c3565b612e5e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612db9578260005414612e7457600080fd5b612ee5565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612e7a575b816000819055505050612efb6000868387612b1c565b5050505050565b828054612f0e906138c7565b90600052602060002090601f016020900481019282612f305760008555612f77565b82601f10612f4957805160ff1916838001178555612f77565b82800160010185558215612f77579182015b82811115612f76578251825591602001919060010190612f5b565b5b509050612f849190612fcb565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612fe4576000816000905550600101612fcc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61303181612ffc565b811461303c57600080fd5b50565b60008135905061304e81613028565b92915050565b60006020828403121561306a57613069612ff2565b5b60006130788482850161303f565b91505092915050565b60008115159050919050565b61309681613081565b82525050565b60006020820190506130b1600083018461308d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f15780820151818401526020810190506130d6565b83811115613100576000848401525b50505050565b6000601f19601f8301169050919050565b6000613122826130b7565b61312c81856130c2565b935061313c8185602086016130d3565b61314581613106565b840191505092915050565b6000602082019050818103600083015261316a8184613117565b905092915050565b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000602082840312156131be576131bd612ff2565b5b60006131cc84828501613193565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613200826131d5565b9050919050565b613210816131f5565b82525050565b600060208201905061322b6000830184613207565b92915050565b61323a816131f5565b811461324557600080fd5b50565b60008135905061325781613231565b92915050565b6000806040838503121561327457613273612ff2565b5b600061328285828601613248565b925050602061329385828601613193565b9150509250929050565b6132a681613172565b82525050565b60006020820190506132c1600083018461329d565b92915050565b6000806000606084860312156132e0576132df612ff2565b5b60006132ee86828701613248565b93505060206132ff86828701613248565b925050604061331086828701613193565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61335c82613106565b810181811067ffffffffffffffff8211171561337b5761337a613324565b5b80604052505050565b600061338e612fe8565b905061339a8282613353565b919050565b600067ffffffffffffffff8211156133ba576133b9613324565b5b6133c382613106565b9050602081019050919050565b82818337600083830152505050565b60006133f26133ed8461339f565b613384565b90508281526020810184848401111561340e5761340d61331f565b5b6134198482856133d0565b509392505050565b600082601f8301126134365761343561331a565b5b81356134468482602086016133df565b91505092915050565b60006020828403121561346557613464612ff2565b5b600082013567ffffffffffffffff81111561348357613482612ff7565b5b61348f84828501613421565b91505092915050565b6000602082840312156134ae576134ad612ff2565b5b60006134bc84828501613248565b91505092915050565b600067ffffffffffffffff8211156134e0576134df613324565b5b602082029050602081019050919050565b600080fd5b6000613509613504846134c5565b613384565b9050808382526020820190506020840283018581111561352c5761352b6134f1565b5b835b8181101561355557806135418882613248565b84526020840193505060208101905061352e565b5050509392505050565b600082601f8301126135745761357361331a565b5b81356135848482602086016134f6565b91505092915050565b600067ffffffffffffffff8211156135a8576135a7613324565b5b602082029050602081019050919050565b60006135cc6135c78461358d565b613384565b905080838252602082019050602084028301858111156135ef576135ee6134f1565b5b835b8181101561361857806136048882613193565b8452602084019350506020810190506135f1565b5050509392505050565b600082601f8301126136375761363661331a565b5b81356136478482602086016135b9565b91505092915050565b6000806040838503121561366757613666612ff2565b5b600083013567ffffffffffffffff81111561368557613684612ff7565b5b6136918582860161355f565b925050602083013567ffffffffffffffff8111156136b2576136b1612ff7565b5b6136be85828601613622565b9150509250929050565b6136d181613081565b81146136dc57600080fd5b50565b6000813590506136ee816136c8565b92915050565b6000806040838503121561370b5761370a612ff2565b5b600061371985828601613248565b925050602061372a858286016136df565b9150509250929050565b600067ffffffffffffffff82111561374f5761374e613324565b5b61375882613106565b9050602081019050919050565b600061377861377384613734565b613384565b9050828152602081018484840111156137945761379361331f565b5b61379f8482856133d0565b509392505050565b600082601f8301126137bc576137bb61331a565b5b81356137cc848260208601613765565b91505092915050565b600080600080608085870312156137ef576137ee612ff2565b5b60006137fd87828801613248565b945050602061380e87828801613248565b935050604061381f87828801613193565b925050606085013567ffffffffffffffff8111156138405761383f612ff7565b5b61384c878288016137a7565b91505092959194509250565b6000806040838503121561386f5761386e612ff2565b5b600061387d85828601613248565b925050602061388e85828601613248565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138df57607f821691505b602082108114156138f3576138f2613898565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061392f6020836130c2565b915061393a826138f9565b602082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74206e667400600082015250565b600061399b601f836130c2565b91506139a682613965565b602082019050919050565b600060208201905081810360008301526139ca8161398e565b9050919050565b7f4e6f2046726565204d696e747300000000000000000000000000000000000000600082015250565b6000613a07600d836130c2565b9150613a12826139d1565b602082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f4d696e7420776f756c6420657863656564206d617820737570706c79206f662060008201527f6e66747300000000000000000000000000000000000000000000000000000000602082015250565b6000613a996024836130c2565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b0982613172565b9150613b1483613172565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b4957613b48613acf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613b8e82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc157613bc0613acf565b5b600182019050919050565b7f43616e206f6e6c79206d696e74206365727461696e20746f6b656e732061742060008201527f612074696d650000000000000000000000000000000000000000000000000000602082015250565b6000613c286026836130c2565b9150613c3382613bcc565b604082019050919050565b60006020820190508181036000830152613c5781613c1b565b9050919050565b7f4e6f7420456e6f7567682045746865722053656e740000000000000000000000600082015250565b6000613c946015836130c2565b9150613c9f82613c5e565b602082019050919050565b60006020820190508181036000830152613cc381613c87565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66206e667473000000000000000000000000000000000000000000000000602082015250565b6000613d266028836130c2565b9150613d3182613cca565b604082019050919050565b60006020820190508181036000830152613d5581613d19565b9050919050565b7f4d6178206c696d6974206f662077616c6c657420726561636865640000000000600082015250565b6000613d92601b836130c2565b9150613d9d82613d5c565b602082019050919050565b60006020820190508181036000830152613dc181613d85565b9050919050565b600081905092915050565b6000613dde826130b7565b613de88185613dc8565b9350613df88185602086016130d3565b80840191505092915050565b6000613e108285613dd3565b9150613e1c8284613dd3565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e846026836130c2565b9150613e8f82613e28565b604082019050919050565b60006020820190508181036000830152613eb381613e77565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ef0601b836130c2565b9150613efb82613eba565b602082019050919050565b60006020820190508181036000830152613f1f81613ee3565b9050919050565b6000613f3182613172565b9150613f3c83613172565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f7557613f74613acf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fba82613172565b9150613fc583613172565b925082613fd557613fd4613f80565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061403c6021836130c2565b915061404782613fe0565b604082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061409982614072565b6140a3818561407d565b93506140b38185602086016130d3565b6140bc81613106565b840191505092915050565b60006080820190506140dc6000830187613207565b6140e96020830186613207565b6140f6604083018561329d565b8181036060830152614108818461408e565b905095945050505050565b60008151905061412281613028565b92915050565b60006020828403121561413e5761413d612ff2565b5b600061414c84828501614113565b91505092915050565b600061416082613172565b915061416b83613172565b92508282101561417e5761417d613acf565b5b828203905092915050565b600061419482613172565b915061419f83613172565b9250826141af576141ae613f80565b5b82820690509291505056fea2646970667358221220a6f37a643f9020614eabc9288dd9e03bbdeaeb4346efd78a8964e52452d64fec64736f6c63430008090033
Deployed Bytecode Sourcemap
51267:3232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33792:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37177:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38680:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51901:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38243:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33041:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51796:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39545:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54095:89;;;;;;;;;;;;;:::i;:::-;;53890:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52115:229;;;;;;;;;;;;;:::i;:::-;;39786:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51505:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53549:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53021:514;;;;;;;;;;;;;:::i;:::-;;36986:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34161:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29508:148;;;;;;;;;;;;;:::i;:::-;;28857:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53655:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37346:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51469:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51408:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51347:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52352:660;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38956:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51697:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40042:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37521:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51438:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51585:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51637:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39314:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51544:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29811:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33792:305;33894:4;33946:25;33931:40;;;:11;:40;;;;:105;;;;34003:33;33988:48;;;:11;:48;;;;33931:105;:158;;;;34053:36;34077:11;34053:23;:36::i;:::-;33931:158;33911:178;;33792:305;;;:::o;37177:100::-;37231:13;37264:5;37257:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37177:100;:::o;38680:204::-;38748:7;38773:16;38781:7;38773;:16::i;:::-;38768:64;;38798:34;;;;;;;;;;;;;;38768:64;38852:15;:24;38868:7;38852:24;;;;;;;;;;;;;;;;;;;;;38845:31;;38680:204;;;:::o;51901:125::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52002:16:::1;51987:12;:31;;;;51901:125:::0;:::o;38243:371::-;38316:13;38332:24;38348:7;38332:15;:24::i;:::-;38316:40;;38377:5;38371:11;;:2;:11;;;38367:48;;;38391:24;;;;;;;;;;;;;;38367:48;38448:5;38432:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;38458:37;38475:5;38482:12;:10;:12::i;:::-;38458:16;:37::i;:::-;38457:38;38432:63;38428:138;;;38519:35;;;;;;;;;;;;;;38428:138;38578:28;38587:2;38591:7;38600:5;38578:8;:28::i;:::-;38305:309;38243:371;;:::o;33041:303::-;33085:7;33310:15;:13;:15::i;:::-;33295:12;;33279:13;;:28;:46;33272:53;;33041:303;:::o;51796:97::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51878:7:::1;51864:11;:21;;;;51796:97:::0;:::o;39545:170::-;39679:28;39689:4;39695:2;39699:7;39679:9;:28::i;:::-;39545:170;;;:::o;54095:89::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54164:12:::1;;;;;;;;;;;54163:13;54148:12;;:28;;;;;;;;;;;;;;;;;;54095:89::o:0;53890:130::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54004:8:::1;53980:13;:21;53994:6;53980:21;;;;;;;;;;;;;;;:32;;;;53890:130:::0;;:::o;52115:229::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52163:12:::1;52178:21;52163:36;;52220:19;52250:42;52220:73;;52309:3;:12;;:21;52322:7;52309:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52152:192;;52115:229::o:0;39786:185::-;39924:39;39941:4;39947:2;39951:7;39924:39;;;;;;;;;;;;:16;:39::i;:::-;39786:185;;;:::o;51505:30::-;;;;:::o;53549:98::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53631:8:::1;53621:7;:18;;;;;;;;;;;;:::i;:::-;;53549:98:::0;:::o;53021:514::-;53068:12;;;;;;;;;;;53060:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;53126:16;53145:13;:27;53159:12;:10;:12::i;:::-;53145:27;;;;;;;;;;;;;;;;53126:46;;53202:1;53191:8;:12;53183:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;53272:3;;53241:27;53259:8;53241:13;:11;:13::i;:::-;:17;;:27;;;;:::i;:::-;:34;;53233:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;53354:8;53327:9;:23;53337:12;:10;:12::i;:::-;53327:23;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;53403:1;53373:13;:27;53387:12;:10;:12::i;:::-;53373:27;;;;;;;;;;;;;;;:31;;;;53495;53505:10;53517:8;53495:9;:31::i;:::-;53050:485;53021:514::o;36986:124::-;37050:7;37077:20;37089:7;37077:11;:20::i;:::-;:25;;;37070:32;;36986:124;;;:::o;34161:206::-;34225:7;34266:1;34249:19;;:5;:19;;;34245:60;;;34277:28;;;;;;;;;;;;;;34245:60;34331:12;:19;34344:5;34331:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;34323:36;;34316:43;;34161:206;;;:::o;29508:148::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29615:1:::1;29578:40;;29599:6;;;;;;;;;;;29578:40;;;;;;;;;;;;29646:1;29629:6;;:19;;;;;;;;;;;;;;;;;;29508:148::o:0;28857:87::-;28903:7;28930:6;;;;;;;;;;;28923:13;;28857:87;:::o;53655:227::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53767:9:::1;53763:112;53786:7;:14;53783:1;:17;53763:112;;;53850:10;53861:1;53850:13;;;;;;;;:::i;:::-;;;;;;;;53822;:25;53836:7;53844:1;53836:10;;;;;;;;:::i;:::-;;;;;;;;53822:25;;;;;;;;;;;;;;;:41;;;;53803:3;;;;;:::i;:::-;;;;53763:112;;;;53655:227:::0;;:::o;37346:104::-;37402:13;37435:7;37428:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37346:104;:::o;51469:29::-;;;;:::o;51408:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51347:41::-;;;;:::o;52352:660::-;52420:12;;;;;;;;;;;52412:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;52499:11;;52487:8;:23;;52479:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;52595:9;52572:19;52582:8;52572:5;;:9;;:19;;;;:::i;:::-;:32;;52564:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;52680:3;;52649:27;52667:8;52649:13;:11;:13::i;:::-;:17;;:27;;;;:::i;:::-;:34;;52641:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;52790:12;;52749:37;52777:8;52749:9;:23;52759:12;:10;:12::i;:::-;52749:23;;;;;;;;;;;;;;;;:27;;:37;;;;:::i;:::-;:53;;52741:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;52873:8;52846:9;:23;52856:12;:10;:12::i;:::-;52846:23;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;52972:31;52982:10;52994:8;52972:9;:31::i;:::-;52352:660;:::o;38956:287::-;39067:12;:10;:12::i;:::-;39055:24;;:8;:24;;;39051:54;;;39088:17;;;;;;;;;;;;;;39051:54;39163:8;39118:18;:32;39137:12;:10;:12::i;:::-;39118:32;;;;;;;;;;;;;;;:42;39151:8;39118:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;39216:8;39187:48;;39202:12;:10;:12::i;:::-;39187:48;;;39226:8;39187:48;;;;;;:::i;:::-;;;;;;;;38956:287;;:::o;51697:91::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51772:8:::1;51764:5;:16;;;;51697:91:::0;:::o;40042:369::-;40209:28;40219:4;40225:2;40229:7;40209:9;:28::i;:::-;40252:15;:2;:13;;;:15::i;:::-;:76;;;;;40272:56;40303:4;40309:2;40313:7;40322:5;40272:30;:56::i;:::-;40271:57;40252:76;40248:156;;;40352:40;;;;;;;;;;;;;;40248:156;40042:369;;;;:::o;37521:318::-;37594:13;37625:16;37633:7;37625;:16::i;:::-;37620:59;;37650:29;;;;;;;;;;;;;;37620:59;37692:21;37716:10;:8;:10::i;:::-;37692:34;;37769:1;37750:7;37744:21;:26;;:87;;;;;;;;;;;;;;;;;37797:7;37806:18;:7;:16;:18::i;:::-;37780:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37744:87;37737:94;;;37521:318;;;:::o;51438:24::-;;;;:::o;51585:45::-;;;;;;;;;;;;;;;;;:::o;51637:49::-;;;;;;;;;;;;;;;;;:::o;39314:164::-;39411:4;39435:18;:25;39454:5;39435:25;;;;;;;;;;;;;;;:35;39461:8;39435:35;;;;;;;;;;;;;;;;;;;;;;;;;39428:42;;39314:164;;;;:::o;51544:32::-;;;;;;;;;;;;;:::o;29811:244::-;29088:12;:10;:12::i;:::-;29077:23;;:7;:5;:7::i;:::-;:23;;;29069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29920:1:::1;29900:22;;:8;:22;;;;29892:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30010:8;29981:38;;30002:6;;;;;;;;;;;29981:38;;;;;;;;;;;;30039:8;30030:6;;:17;;;;;;;;;;;;;;;;;;29811:244:::0;:::o;27034:157::-;27119:4;27158:25;27143:40;;;:11;:40;;;;27136:47;;27034:157;;;:::o;40666:187::-;40723:4;40766:7;40747:15;:13;:15::i;:::-;:26;;:53;;;;;40787:13;;40777:7;:23;40747:53;:98;;;;;40818:11;:20;40830:7;40818:20;;;;;;;;;;;:27;;;;;;;;;;;;40817:28;40747:98;40740:105;;40666:187;;;:::o;24137:98::-;24190:7;24217:10;24210:17;;24137:98;:::o;48277:196::-;48419:2;48392:15;:24;48408:7;48392:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;48457:7;48453:2;48437:28;;48446:5;48437:28;;;;;;;;;;;;48277:196;;;:::o;32765:92::-;32821:7;32765:92;:::o;43779:2112::-;43894:35;43932:20;43944:7;43932:11;:20::i;:::-;43894:58;;43965:22;44007:13;:18;;;43991:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;44042:50;44059:13;:18;;;44079:12;:10;:12::i;:::-;44042:16;:50::i;:::-;43991:101;:154;;;;44133:12;:10;:12::i;:::-;44109:36;;:20;44121:7;44109:11;:20::i;:::-;:36;;;43991:154;43965:181;;44164:17;44159:66;;44190:35;;;;;;;;;;;;;;44159:66;44262:4;44240:26;;:13;:18;;;:26;;;44236:67;;44275:28;;;;;;;;;;;;;;44236:67;44332:1;44318:16;;:2;:16;;;44314:52;;;44343:23;;;;;;;;;;;;;;44314:52;44379:43;44401:4;44407:2;44411:7;44420:1;44379:21;:43::i;:::-;44487:49;44504:1;44508:7;44517:13;:18;;;44487:8;:49::i;:::-;44862:1;44832:12;:18;44845:4;44832:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44906:1;44878:12;:16;44891:2;44878:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44952:2;44924:11;:20;44936:7;44924:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;45014:15;44969:11;:20;44981:7;44969:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;45282:19;45314:1;45304:7;:11;45282:33;;45375:1;45334:43;;:11;:24;45346:11;45334:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;45330:445;;;45559:13;;45545:11;:27;45541:219;;;45629:13;:18;;;45597:11;:24;45609:11;45597:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;45712:13;:28;;;45670:11;:24;45682:11;45670:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;45541:219;45330:445;44807:979;45822:7;45818:2;45803:27;;45812:4;45803:27;;;;;;;;;;;;45841:42;45862:4;45868:2;45872:7;45881:1;45841:20;:42::i;:::-;43883:2008;;43779:2112;;;:::o;2766:179::-;2824:7;2844:9;2860:1;2856;:5;;;;:::i;:::-;2844:17;;2885:1;2880;:6;;2872:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2936:1;2929:8;;;2766:179;;;;:::o;40861:104::-;40930:27;40940:2;40944:8;40930:27;;;;;;;;;;;;:9;:27::i;:::-;40861:104;;:::o;35816:1108::-;35877:21;;:::i;:::-;35911:12;35926:7;35911:22;;35994:4;35975:15;:13;:15::i;:::-;:23;;:47;;;;;36009:13;;36002:4;:20;35975:47;35971:886;;;36043:31;36077:11;:17;36089:4;36077:17;;;;;;;;;;;36043:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36118:9;:16;;;36113:729;;36189:1;36163:28;;:9;:14;;;:28;;;36159:101;;36227:9;36220:16;;;;;;36159:101;36562:261;36569:4;36562:261;;;36602:6;;;;;;;;36647:11;:17;36659:4;36647:17;;;;;;;;;;;36635:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36721:1;36695:28;;:9;:14;;;:28;;;36691:109;;36763:9;36756:16;;;;;;36691:109;36562:261;;;36113:729;36024:833;35971:886;36885:31;;;;;;;;;;;;;;35816:1108;;;;:::o;3645:220::-;3703:7;3732:1;3727;:6;3723:20;;;3742:1;3735:8;;;;3723:20;3754:9;3770:1;3766;:5;;;;:::i;:::-;3754:17;;3799:1;3794;3790;:5;;;;:::i;:::-;:10;3782:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3856:1;3849:8;;;3645:220;;;;;:::o;16327:326::-;16387:4;16644:1;16622:7;:19;;;:23;16615:30;;16327:326;;;:::o;48965:667::-;49128:4;49165:2;49149:36;;;49186:12;:10;:12::i;:::-;49200:4;49206:7;49215:5;49149:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;49145:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49400:1;49383:6;:13;:18;49379:235;;;49429:40;;;;;;;;;;;;;;49379:235;49572:6;49566:13;49557:6;49553:2;49549:15;49542:38;49145:480;49278:45;;;49268:55;;;:6;:55;;;;49261:62;;;48965:667;;;;;;:::o;54396:100::-;54448:13;54481:7;54474:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54396:100;:::o;24577:723::-;24633:13;24863:1;24854:5;:10;24850:53;;;24881:10;;;;;;;;;;;;;;;;;;;;;24850:53;24913:12;24928:5;24913:20;;24944:14;24969:78;24984:1;24976:4;:9;24969:78;;25002:8;;;;;:::i;:::-;;;;25033:2;25025:10;;;;;:::i;:::-;;;24969:78;;;25057:19;25089:6;25079:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25057:39;;25107:154;25123:1;25114:5;:10;25107:154;;25151:1;25141:11;;;;;:::i;:::-;;;25218:2;25210:5;:10;;;;:::i;:::-;25197:2;:24;;;;:::i;:::-;25184:39;;25167:6;25174;25167:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;25247:2;25238:11;;;;;:::i;:::-;;;25107:154;;;25285:6;25271:21;;;;;24577:723;;;;:::o;50280:159::-;;;;;:::o;51098:158::-;;;;;:::o;41328:163::-;41451:32;41457:2;41461:8;41471:5;41478:4;41451:5;:32::i;:::-;41328:163;;;:::o;41750:1775::-;41889:20;41912:13;;41889:36;;41954:1;41940:16;;:2;:16;;;41936:48;;;41965:19;;;;;;;;;;;;;;41936:48;42011:1;41999:8;:13;41995:44;;;42021:18;;;;;;;;;;;;;;41995:44;42052:61;42082:1;42086:2;42090:12;42104:8;42052:21;:61::i;:::-;42425:8;42390:12;:16;42403:2;42390:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42489:8;42449:12;:16;42462:2;42449:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42548:2;42515:11;:25;42527:12;42515:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;42615:15;42565:11;:25;42577:12;42565:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;42648:20;42671:12;42648:35;;42698:11;42727:8;42712:12;:23;42698:37;;42756:4;:23;;;;;42764:15;:2;:13;;;:15::i;:::-;42756:23;42752:641;;;42800:314;42856:12;42852:2;42831:38;;42848:1;42831:38;;;;;;;;;;;;42897:69;42936:1;42940:2;42944:14;;;;;;42960:5;42897:30;:69::i;:::-;42892:174;;43002:40;;;;;;;;;;;;;;42892:174;43109:3;43093:12;:19;;42800:314;;43195:12;43178:13;;:29;43174:43;;43209:8;;;43174:43;42752:641;;;43258:120;43314:14;;;;;;43310:2;43289:40;;43306:1;43289:40;;;;;;;;;;;;43373:3;43357:12;:19;;43258:120;;42752:641;43423:12;43407:13;:28;;;;42365:1082;;43457:60;43486:1;43490:2;43494:12;43508:8;43457:20;:60::i;:::-;41878:1647;41750: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://a6f37a643f9020614eabc9288dd9e03bbdeaeb4346efd78a8964e52452d64fec
Loading...
Loading
Loading...
Loading
Net Worth in USD
$562.62
Net Worth in ETH
0.300438
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,875.41 | 0.3 | $562.62 |
Loading...
Loading
Loading...
Loading
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.