Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 16 from a total of 16 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 15532355 | 1269 days ago | IN | 0 ETH | 0.0003812 | ||||
| Set Approval For... | 15532321 | 1269 days ago | IN | 0 ETH | 0.00048936 | ||||
| Mint For Address | 15532318 | 1269 days ago | IN | 0 ETH | 0.00313632 | ||||
| Mint For Address | 15532301 | 1269 days ago | IN | 0 ETH | 0.00295489 | ||||
| Mint For Address | 15532299 | 1269 days ago | IN | 0 ETH | 0.00279785 | ||||
| Set Max Mint Amo... | 15532200 | 1269 days ago | IN | 0 ETH | 0.00025552 | ||||
| Mint For Address | 15532190 | 1269 days ago | IN | 0 ETH | 0.01192392 | ||||
| Mint For Address | 15532177 | 1269 days ago | IN | 0 ETH | 0.01580911 | ||||
| Set Max Mint Amo... | 15532167 | 1269 days ago | IN | 0 ETH | 0.00041475 | ||||
| Withdraw | 15532164 | 1269 days ago | IN | 0 ETH | 0.00046001 | ||||
| Mint | 15526316 | 1270 days ago | IN | 0.02 ETH | 0.00090743 | ||||
| Mint | 15509857 | 1272 days ago | IN | 0.01 ETH | 0.00095021 | ||||
| Mint | 15508210 | 1273 days ago | IN | 0.03 ETH | 0.00109049 | ||||
| Set Cost | 15502504 | 1274 days ago | IN | 0 ETH | 0.00034921 | ||||
| Mint | 15476627 | 1278 days ago | IN | 0.02 ETH | 0.00045823 | ||||
| Set Uri Prefix | 15476620 | 1278 days ago | IN | 0 ETH | 0.00053408 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 15532164 | 1269 days ago | 0.08 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BOBOFRENS
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-09-04
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.0;
/**
* @dev These functions deal with verification of Merkle Tree proofs.
*
* The proofs can be generated using the JavaScript library
* https://github.com/miguelmota/merkletreejs[merkletreejs].
* Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
*
* See `test/utils/cryptography/MerkleProof.test.js` for some examples.
*
* WARNING: You should avoid using leaf values that are 64 bytes long prior to
* hashing, or use a hash function other than keccak256 for hashing leaves.
* This is because the concatenation of a sorted pair of internal nodes in
* the merkle tree could be reinterpreted as a leaf value.
*/
library MerkleProof {
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
function verify(
bytes32[] memory proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProof(proof, leaf) == root;
}
/**
* @dev Calldata version of {verify}
*
* _Available since v4.7._
*/
function verifyCalldata(
bytes32[] calldata proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProofCalldata(proof, leaf) == root;
}
/**
* @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
* from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
* hash matches the root of the tree. When processing the proof, the pairs
* of leafs & pre-images are assumed to be sorted.
*
* _Available since v4.4._
*/
function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Calldata version of {processProof}
*
* _Available since v4.7._
*/
function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by
* `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
*
* _Available since v4.7._
*/
function multiProofVerify(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProof(proof, proofFlags, leaves) == root;
}
/**
* @dev Calldata version of {multiProofVerify}
*
* _Available since v4.7._
*/
function multiProofVerifyCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProofCalldata(proof, proofFlags, leaves) == root;
}
/**
* @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`,
* consuming from one or the other at each step according to the instructions given by
* `proofFlags`.
*
* _Available since v4.7._
*/
function processMultiProof(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the merkle tree.
uint256 leavesLen = leaves.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
return hashes[totalHashes - 1];
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
/**
* @dev Calldata version of {processMultiProof}
*
* _Available since v4.7._
*/
function processMultiProofCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the merkle tree.
uint256 leavesLen = leaves.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
return hashes[totalHashes - 1];
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
}
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
/// @solidity memory-safe-assembly
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}
// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// 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 Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return 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
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: address zero is not a valid owner");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_safeTransfer(from, to, tokenId, data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: contracts/bf.sol
pragma solidity >=0.8.9 <0.9.0;
contract BOBOFRENS is ERC721, Ownable, ReentrancyGuard {
using Strings for uint256;
using Counters for Counters.Counter;
Counters.Counter private supply;
bytes32 public merkleRoot;
mapping(address => bool) public whitelistClaimed;
string public uriPrefix = "";
string public uriSuffix = ".json";
string public hiddenMetadataUri;
uint256 public cost;
uint256 public maxSupply;
uint256 public maxMintAmountPerTx;
bool public paused = false;
bool public whitelistMintEnabled = false;
bool public revealed = true;
constructor(
string memory _tokenName,
string memory _tokenSymbol,
uint256 _cost,
uint256 _maxSupply,
uint256 _maxMintAmountPerTx,
string memory _hiddenMetadataUri
) ERC721(_tokenName, _tokenSymbol) {
cost = _cost;
maxSupply = _maxSupply;
maxMintAmountPerTx = _maxMintAmountPerTx;
setHiddenMetadataUri(_hiddenMetadataUri);
}
modifier mintCompliance(uint256 _mintAmount) {
require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
_;
}
modifier mintPriceCompliance(uint256 _mintAmount) {
require(msg.value >= cost * _mintAmount, "Insufficient funds!");
_;
}
function totalSupply() public view returns (uint256) {
return supply.current();
}
function whitelistMint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
// Verify whitelist requirements
require(whitelistMintEnabled, "The whitelist sale is not enabled!");
require(!whitelistClaimed[msg.sender], "Address already claimed!");
bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Invalid proof!");
whitelistClaimed[msg.sender] = true;
_mintLoop(msg.sender, _mintAmount);
}
function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
require(!paused, "The contract is paused!");
_mintLoop(msg.sender, _mintAmount);
}
function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
_mintLoop(_receiver, _mintAmount);
}
function walletOfOwner(address _owner)
public
view
returns (uint256[] memory)
{
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
uint256 currentTokenId = 1;
uint256 ownedTokenIndex = 0;
while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
address currentTokenOwner = ownerOf(currentTokenId);
if (currentTokenOwner == _owner) {
ownedTokenIds[ownedTokenIndex] = currentTokenId;
ownedTokenIndex++;
}
currentTokenId++;
}
return ownedTokenIds;
}
function tokenURI(uint256 _tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(_tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
if (revealed == false) {
return hiddenMetadataUri;
}
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
: "";
}
function setRevealed(bool _state) public onlyOwner {
revealed = _state;
}
function setCost(uint256 _cost) public onlyOwner {
cost = _cost;
}
function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
maxMintAmountPerTx = _maxMintAmountPerTx;
}
function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
hiddenMetadataUri = _hiddenMetadataUri;
}
function setUriPrefix(string memory _uriPrefix) public onlyOwner {
uriPrefix = _uriPrefix;
}
function setUriSuffix(string memory _uriSuffix) public onlyOwner {
uriSuffix = _uriSuffix;
}
function setPaused(bool _state) public onlyOwner {
paused = _state;
}
function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
merkleRoot = _merkleRoot;
}
function setWhitelistMintEnabled(bool _state) public onlyOwner {
whitelistMintEnabled = _state;
}
function withdraw() public onlyOwner nonReentrant {
// This will pay HashLips Lab Team 5% of the initial sale.
// By leaving the following lines as they are you will contribute to the
// development of tools like this and many others.
// =============================================================================
//(bool hs, ) = payable(0x146FB9c3b2C13BA88c6945A759EbFa95127486F4).call{value: address(this).balance * 5 / 100}("");
//require(hs);
// =============================================================================
// This will transfer the remaining contract balance to the owner.
// Do not remove this otherwise you will not be able to withdraw the funds.
// =============================================================================
(bool os, ) = payable(owner()).call{value: address(this).balance}("");
require(os);
// =============================================================================
}
function _mintLoop(address _receiver, uint256 _mintAmount) internal {
for (uint256 i = 0; i < _mintAmount; i++) {
supply.increment();
_safeMint(_receiver, supply.current());
}
}
function _baseURI() internal view virtual override returns (string memory) {
return uriPrefix;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelistMintEnabled","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":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a06040819052600060808190526200001b91600b91620001dd565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a91600c91620001dd565b506011805462ffffff1916620100001790553480156200006957600080fd5b50604051620029d0380380620029d08339810160408190526200008c9162000350565b855186908690620000a5906000906020850190620001dd565b508051620000bb906001906020840190620001dd565b505050620000d8620000d26200010360201b60201c565b62000107565b6001600755600e849055600f8390556010829055620000f78162000159565b5050505050506200043a565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001636200017c565b80516200017890600d906020840190620001dd565b5050565b6006546001600160a01b03163314620001db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b828054620001eb90620003fd565b90600052602060002090601f0160209004810192826200020f57600085556200025a565b82601f106200022a57805160ff19168380011785556200025a565b828001600101855582156200025a579182015b828111156200025a5782518255916020019190600101906200023d565b50620002689291506200026c565b5090565b5b808211156200026857600081556001016200026d565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002ab57600080fd5b81516001600160401b0380821115620002c857620002c862000283565b604051601f8301601f19908116603f01168101908282118183101715620002f357620002f362000283565b816040528381526020925086838588010111156200031057600080fd5b600091505b8382101562000334578582018301518183018401529082019062000315565b83821115620003465760008385830101525b9695505050505050565b60008060008060008060c087890312156200036a57600080fd5b86516001600160401b03808211156200038257600080fd5b620003908a838b0162000299565b97506020890151915080821115620003a757600080fd5b620003b58a838b0162000299565b965060408901519550606089015194506080890151935060a0890151915080821115620003e157600080fd5b50620003f089828a0162000299565b9150509295509295509295565b600181811c908216806200041257607f821691505b602082108114156200043457634e487b7160e01b600052602260045260246000fd5b50919050565b612586806200044a6000396000f3fe6080604052600436106102515760003560e01c806370a0823111610139578063b071401b116100b6578063d5abeb011161007a578063d5abeb0114610694578063db4bec44146106aa578063e0a80853146106da578063e985e9c5146106fa578063efbd73f414610743578063f2fde38b1461076357600080fd5b8063b071401b14610601578063b767a09814610621578063b88d4fde14610641578063c87b56dd14610661578063d2cab0561461068157600080fd5b806394354fd0116100fd57806394354fd01461058e57806395d89b41146105a4578063a0712d68146105b9578063a22cb465146105cc578063a45ba8e7146105ec57600080fd5b806370a08231146104fb578063715018a61461051b5780637cb64759146105305780637ec4a659146105505780638da5cb5b1461057057600080fd5b80633ccfd60b116101d2578063518302271161019657806351830227146104585780635503a0e8146104785780635c975abb1461048d57806362b99ad4146104a75780636352211e146104bc5780636caede3d146104dc57600080fd5b80633ccfd60b146103b657806342842e0e146103cb578063438b6300146103eb57806344a0d68a146104185780634fdd43cb1461043857600080fd5b806316ba10e01161021957806316ba10e01461032b57806316c38b3c1461034b57806318160ddd1461036b57806323b872dd146103805780632eb4a7ab146103a057600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806313faede614610307575b600080fd5b34801561026257600080fd5b50610276610271366004611e2b565b610783565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a06107d5565b6040516102829190611ea0565b3480156102b957600080fd5b506102cd6102c8366004611eb3565b610867565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004611ee8565b61088e565b005b34801561031357600080fd5b5061031d600e5481565b604051908152602001610282565b34801561033757600080fd5b50610305610346366004611f9e565b6109a9565b34801561035757600080fd5b50610305610366366004611ff7565b6109c8565b34801561037757600080fd5b5061031d6109e3565b34801561038c57600080fd5b5061030561039b366004612012565b6109f3565b3480156103ac57600080fd5b5061031d60095481565b3480156103c257600080fd5b50610305610a24565b3480156103d757600080fd5b506103056103e6366004612012565b610afd565b3480156103f757600080fd5b5061040b61040636600461204e565b610b18565b6040516102829190612069565b34801561042457600080fd5b50610305610433366004611eb3565b610bf9565b34801561044457600080fd5b50610305610453366004611f9e565b610c06565b34801561046457600080fd5b506011546102769062010000900460ff1681565b34801561048457600080fd5b506102a0610c21565b34801561049957600080fd5b506011546102769060ff1681565b3480156104b357600080fd5b506102a0610caf565b3480156104c857600080fd5b506102cd6104d7366004611eb3565b610cbc565b3480156104e857600080fd5b5060115461027690610100900460ff1681565b34801561050757600080fd5b5061031d61051636600461204e565b610d1c565b34801561052757600080fd5b50610305610da2565b34801561053c57600080fd5b5061030561054b366004611eb3565b610db6565b34801561055c57600080fd5b5061030561056b366004611f9e565b610dc3565b34801561057c57600080fd5b506006546001600160a01b03166102cd565b34801561059a57600080fd5b5061031d60105481565b3480156105b057600080fd5b506102a0610dde565b6103056105c7366004611eb3565b610ded565b3480156105d857600080fd5b506103056105e73660046120ad565b610f02565b3480156105f857600080fd5b506102a0610f0d565b34801561060d57600080fd5b5061030561061c366004611eb3565b610f1a565b34801561062d57600080fd5b5061030561063c366004611ff7565b610f27565b34801561064d57600080fd5b5061030561065c3660046120e0565b610f49565b34801561066d57600080fd5b506102a061067c366004611eb3565b610f81565b61030561068f36600461215c565b611101565b3480156106a057600080fd5b5061031d600f5481565b3480156106b657600080fd5b506102766106c536600461204e565b600a6020526000908152604090205460ff1681565b3480156106e657600080fd5b506103056106f5366004611ff7565b61135e565b34801561070657600080fd5b506102766107153660046121db565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074f57600080fd5b5061030561075e366004612205565b611382565b34801561076f57600080fd5b5061030561077e36600461204e565b6113f8565b60006001600160e01b031982166380ac58cd60e01b14806107b457506001600160e01b03198216635b5e139f60e01b145b806107cf57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107e490612228565b80601f016020809104026020016040519081016040528092919081815260200182805461081090612228565b801561085d5780601f106108325761010080835404028352916020019161085d565b820191906000526020600020905b81548152906001019060200180831161084057829003601f168201915b5050505050905090565b600061087282611471565b506000908152600460205260409020546001600160a01b031690565b600061089982610cbc565b9050806001600160a01b0316836001600160a01b0316141561090c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061092857506109288133610715565b61099a5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610903565b6109a483836114d0565b505050565b6109b161153e565b80516109c490600c906020840190611d7c565b5050565b6109d061153e565b6011805460ff1916911515919091179055565b60006109ee60085490565b905090565b6109fd3382611598565b610a195760405162461bcd60e51b815260040161090390612263565b6109a4838383611617565b610a2c61153e565b60026007541415610a7f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610903565b60026007556000610a986006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ae2576040519150601f19603f3d011682016040523d82523d6000602084013e610ae7565b606091505b5050905080610af557600080fd5b506001600755565b6109a483838360405180602001604052806000815250610f49565b60606000610b2583610d1c565b905060008167ffffffffffffffff811115610b4257610b42611f12565b604051908082528060200260200182016040528015610b6b578160200160208202803683370190505b509050600160005b8381108015610b845750600f548211155b15610bef576000610b9483610cbc565b9050866001600160a01b0316816001600160a01b03161415610bdc5782848381518110610bc357610bc36122b1565b602090810291909101015281610bd8816122dd565b9250505b82610be6816122dd565b93505050610b73565b5090949350505050565b610c0161153e565b600e55565b610c0e61153e565b80516109c490600d906020840190611d7c565b600c8054610c2e90612228565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a90612228565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b505050505081565b600b8054610c2e90612228565b6000818152600260205260408120546001600160a01b0316806107cf5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610903565b60006001600160a01b038216610d865760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610903565b506001600160a01b031660009081526003602052604090205490565b610daa61153e565b610db460006117b3565b565b610dbe61153e565b600955565b610dcb61153e565b80516109c490600b906020840190611d7c565b6060600180546107e490612228565b80600081118015610e0057506010548111155b610e1c5760405162461bcd60e51b8152600401610903906122f8565b600f5481610e2960085490565b610e339190612326565b1115610e515760405162461bcd60e51b81526004016109039061233e565b8180600e54610e60919061236c565b341015610ea55760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610903565b60115460ff1615610ef85760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610903565b6109a43384611805565b6109c4338383611842565b600d8054610c2e90612228565b610f2261153e565b601055565b610f2f61153e565b601180549115156101000261ff0019909216919091179055565b610f533383611598565b610f6f5760405162461bcd60e51b815260040161090390612263565b610f7b84848484611911565b50505050565b6000818152600260205260409020546060906001600160a01b03166110005760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610903565b60115462010000900460ff166110a257600d805461101d90612228565b80601f016020809104026020016040519081016040528092919081815260200182805461104990612228565b80156110965780601f1061106b57610100808354040283529160200191611096565b820191906000526020600020905b81548152906001019060200180831161107957829003601f168201915b50505050509050919050565b60006110ac611944565b905060008151116110cc57604051806020016040528060008152506110fa565b806110d684611953565b600c6040516020016110ea9392919061238b565b6040516020818303038152906040525b9392505050565b8260008111801561111457506010548111155b6111305760405162461bcd60e51b8152600401610903906122f8565b600f548161113d60085490565b6111479190612326565b11156111655760405162461bcd60e51b81526004016109039061233e565b8380600e54611174919061236c565b3410156111b95760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610903565b601154610100900460ff1661121b5760405162461bcd60e51b815260206004820152602260248201527f5468652077686974656c6973742073616c65206973206e6f7420656e61626c65604482015261642160f01b6064820152608401610903565b336000908152600a602052604090205460ff161561127b5760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920636c61696d65642100000000000000006044820152606401610903565b6040516bffffffffffffffffffffffff193360601b1660208201526000906034016040516020818303038152906040528051906020012090506112f5858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611a51565b6113325760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642070726f6f662160901b6044820152606401610903565b336000818152600a60205260409020805460ff191660011790556113569087611805565b505050505050565b61136661153e565b60118054911515620100000262ff000019909216919091179055565b8160008111801561139557506010548111155b6113b15760405162461bcd60e51b8152600401610903906122f8565b600f54816113be60085490565b6113c89190612326565b11156113e65760405162461bcd60e51b81526004016109039061233e565b6113ee61153e565b6109a48284611805565b61140061153e565b6001600160a01b0381166114655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610903565b61146e816117b3565b50565b6000818152600260205260409020546001600160a01b031661146e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610903565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061150582610cbc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610db45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610903565b6000806115a483610cbc565b9050806001600160a01b0316846001600160a01b031614806115eb57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061160f5750836001600160a01b031661160484610867565b6001600160a01b0316145b949350505050565b826001600160a01b031661162a82610cbc565b6001600160a01b03161461168e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610903565b6001600160a01b0382166116f05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610903565b6116fb6000826114d0565b6001600160a01b038316600090815260036020526040812080546001929061172490849061244f565b90915550506001600160a01b0382166000908152600360205260408120805460019290611752908490612326565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b818110156109a45761181e600880546001019055565b6118308361182b60085490565b611a67565b8061183a816122dd565b915050611808565b816001600160a01b0316836001600160a01b031614156118a45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610903565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61191c848484611617565b61192884848484611a81565b610f7b5760405162461bcd60e51b815260040161090390612466565b6060600b80546107e490612228565b6060816119775750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119a1578061198b816122dd565b915061199a9050600a836124ce565b915061197b565b60008167ffffffffffffffff8111156119bc576119bc611f12565b6040519080825280601f01601f1916602001820160405280156119e6576020820181803683370190505b5090505b841561160f576119fb60018361244f565b9150611a08600a866124e2565b611a13906030612326565b60f81b818381518110611a2857611a286122b1565b60200101906001600160f81b031916908160001a905350611a4a600a866124ce565b94506119ea565b600082611a5e8584611b8e565b14949350505050565b6109c4828260405180602001604052806000815250611bdb565b60006001600160a01b0384163b15611b8357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ac59033908990889088906004016124f6565b602060405180830381600087803b158015611adf57600080fd5b505af1925050508015611b0f575060408051601f3d908101601f19168201909252611b0c91810190612533565b60015b611b69573d808015611b3d576040519150601f19603f3d011682016040523d82523d6000602084013e611b42565b606091505b508051611b615760405162461bcd60e51b815260040161090390612466565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061160f565b506001949350505050565b600081815b8451811015611bd357611bbf82868381518110611bb257611bb26122b1565b6020026020010151611c0e565b915080611bcb816122dd565b915050611b93565b509392505050565b611be58383611c3a565b611bf26000848484611a81565b6109a45760405162461bcd60e51b815260040161090390612466565b6000818310611c2a5760008281526020849052604090206110fa565b5060009182526020526040902090565b6001600160a01b038216611c905760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610903565b6000818152600260205260409020546001600160a01b031615611cf55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610903565b6001600160a01b0382166000908152600360205260408120805460019290611d1e908490612326565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611d8890612228565b90600052602060002090601f016020900481019282611daa5760008555611df0565b82601f10611dc357805160ff1916838001178555611df0565b82800160010185558215611df0579182015b82811115611df0578251825591602001919060010190611dd5565b50611dfc929150611e00565b5090565b5b80821115611dfc5760008155600101611e01565b6001600160e01b03198116811461146e57600080fd5b600060208284031215611e3d57600080fd5b81356110fa81611e15565b60005b83811015611e63578181015183820152602001611e4b565b83811115610f7b5750506000910152565b60008151808452611e8c816020860160208601611e48565b601f01601f19169290920160200192915050565b6020815260006110fa6020830184611e74565b600060208284031215611ec557600080fd5b5035919050565b80356001600160a01b0381168114611ee357600080fd5b919050565b60008060408385031215611efb57600080fd5b611f0483611ecc565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611f4357611f43611f12565b604051601f8501601f19908116603f01168101908282118183101715611f6b57611f6b611f12565b81604052809350858152868686011115611f8457600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611fb057600080fd5b813567ffffffffffffffff811115611fc757600080fd5b8201601f81018413611fd857600080fd5b61160f84823560208401611f28565b80358015158114611ee357600080fd5b60006020828403121561200957600080fd5b6110fa82611fe7565b60008060006060848603121561202757600080fd5b61203084611ecc565b925061203e60208501611ecc565b9150604084013590509250925092565b60006020828403121561206057600080fd5b6110fa82611ecc565b6020808252825182820181905260009190848201906040850190845b818110156120a157835183529284019291840191600101612085565b50909695505050505050565b600080604083850312156120c057600080fd5b6120c983611ecc565b91506120d760208401611fe7565b90509250929050565b600080600080608085870312156120f657600080fd5b6120ff85611ecc565b935061210d60208601611ecc565b925060408501359150606085013567ffffffffffffffff81111561213057600080fd5b8501601f8101871361214157600080fd5b61215087823560208401611f28565b91505092959194509250565b60008060006040848603121561217157600080fd5b83359250602084013567ffffffffffffffff8082111561219057600080fd5b818601915086601f8301126121a457600080fd5b8135818111156121b357600080fd5b8760208260051b85010111156121c857600080fd5b6020830194508093505050509250925092565b600080604083850312156121ee57600080fd5b6121f783611ecc565b91506120d760208401611ecc565b6000806040838503121561221857600080fd5b823591506120d760208401611ecc565b600181811c9082168061223c57607f821691505b6020821081141561225d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156122f1576122f16122c7565b5060010190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b60008219821115612339576123396122c7565b500190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b6000816000190483118215151615612386576123866122c7565b500290565b60008451602061239e8285838a01611e48565b8551918401916123b18184848a01611e48565b8554920191600090600181811c90808316806123ce57607f831692505b8583108114156123ec57634e487b7160e01b85526022600452602485fd5b80801561240057600181146124115761243e565b60ff1985168852838801955061243e565b60008b81526020902060005b858110156124365781548a82015290840190880161241d565b505083880195505b50939b9a5050505050505050505050565b600082821015612461576124616122c7565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826124dd576124dd6124b8565b500490565b6000826124f1576124f16124b8565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061252990830184611e74565b9695505050505050565b60006020828403121561254557600080fd5b81516110fa81611e1556fea26469706673582212203dcf53e364296c22cd8c7486f1044a50c48fe574ef2def7881274c406708a1f364736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000001b39000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000a426f626f204672656e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c806370a0823111610139578063b071401b116100b6578063d5abeb011161007a578063d5abeb0114610694578063db4bec44146106aa578063e0a80853146106da578063e985e9c5146106fa578063efbd73f414610743578063f2fde38b1461076357600080fd5b8063b071401b14610601578063b767a09814610621578063b88d4fde14610641578063c87b56dd14610661578063d2cab0561461068157600080fd5b806394354fd0116100fd57806394354fd01461058e57806395d89b41146105a4578063a0712d68146105b9578063a22cb465146105cc578063a45ba8e7146105ec57600080fd5b806370a08231146104fb578063715018a61461051b5780637cb64759146105305780637ec4a659146105505780638da5cb5b1461057057600080fd5b80633ccfd60b116101d2578063518302271161019657806351830227146104585780635503a0e8146104785780635c975abb1461048d57806362b99ad4146104a75780636352211e146104bc5780636caede3d146104dc57600080fd5b80633ccfd60b146103b657806342842e0e146103cb578063438b6300146103eb57806344a0d68a146104185780634fdd43cb1461043857600080fd5b806316ba10e01161021957806316ba10e01461032b57806316c38b3c1461034b57806318160ddd1461036b57806323b872dd146103805780632eb4a7ab146103a057600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806313faede614610307575b600080fd5b34801561026257600080fd5b50610276610271366004611e2b565b610783565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a06107d5565b6040516102829190611ea0565b3480156102b957600080fd5b506102cd6102c8366004611eb3565b610867565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004611ee8565b61088e565b005b34801561031357600080fd5b5061031d600e5481565b604051908152602001610282565b34801561033757600080fd5b50610305610346366004611f9e565b6109a9565b34801561035757600080fd5b50610305610366366004611ff7565b6109c8565b34801561037757600080fd5b5061031d6109e3565b34801561038c57600080fd5b5061030561039b366004612012565b6109f3565b3480156103ac57600080fd5b5061031d60095481565b3480156103c257600080fd5b50610305610a24565b3480156103d757600080fd5b506103056103e6366004612012565b610afd565b3480156103f757600080fd5b5061040b61040636600461204e565b610b18565b6040516102829190612069565b34801561042457600080fd5b50610305610433366004611eb3565b610bf9565b34801561044457600080fd5b50610305610453366004611f9e565b610c06565b34801561046457600080fd5b506011546102769062010000900460ff1681565b34801561048457600080fd5b506102a0610c21565b34801561049957600080fd5b506011546102769060ff1681565b3480156104b357600080fd5b506102a0610caf565b3480156104c857600080fd5b506102cd6104d7366004611eb3565b610cbc565b3480156104e857600080fd5b5060115461027690610100900460ff1681565b34801561050757600080fd5b5061031d61051636600461204e565b610d1c565b34801561052757600080fd5b50610305610da2565b34801561053c57600080fd5b5061030561054b366004611eb3565b610db6565b34801561055c57600080fd5b5061030561056b366004611f9e565b610dc3565b34801561057c57600080fd5b506006546001600160a01b03166102cd565b34801561059a57600080fd5b5061031d60105481565b3480156105b057600080fd5b506102a0610dde565b6103056105c7366004611eb3565b610ded565b3480156105d857600080fd5b506103056105e73660046120ad565b610f02565b3480156105f857600080fd5b506102a0610f0d565b34801561060d57600080fd5b5061030561061c366004611eb3565b610f1a565b34801561062d57600080fd5b5061030561063c366004611ff7565b610f27565b34801561064d57600080fd5b5061030561065c3660046120e0565b610f49565b34801561066d57600080fd5b506102a061067c366004611eb3565b610f81565b61030561068f36600461215c565b611101565b3480156106a057600080fd5b5061031d600f5481565b3480156106b657600080fd5b506102766106c536600461204e565b600a6020526000908152604090205460ff1681565b3480156106e657600080fd5b506103056106f5366004611ff7565b61135e565b34801561070657600080fd5b506102766107153660046121db565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074f57600080fd5b5061030561075e366004612205565b611382565b34801561076f57600080fd5b5061030561077e36600461204e565b6113f8565b60006001600160e01b031982166380ac58cd60e01b14806107b457506001600160e01b03198216635b5e139f60e01b145b806107cf57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107e490612228565b80601f016020809104026020016040519081016040528092919081815260200182805461081090612228565b801561085d5780601f106108325761010080835404028352916020019161085d565b820191906000526020600020905b81548152906001019060200180831161084057829003601f168201915b5050505050905090565b600061087282611471565b506000908152600460205260409020546001600160a01b031690565b600061089982610cbc565b9050806001600160a01b0316836001600160a01b0316141561090c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061092857506109288133610715565b61099a5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610903565b6109a483836114d0565b505050565b6109b161153e565b80516109c490600c906020840190611d7c565b5050565b6109d061153e565b6011805460ff1916911515919091179055565b60006109ee60085490565b905090565b6109fd3382611598565b610a195760405162461bcd60e51b815260040161090390612263565b6109a4838383611617565b610a2c61153e565b60026007541415610a7f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610903565b60026007556000610a986006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ae2576040519150601f19603f3d011682016040523d82523d6000602084013e610ae7565b606091505b5050905080610af557600080fd5b506001600755565b6109a483838360405180602001604052806000815250610f49565b60606000610b2583610d1c565b905060008167ffffffffffffffff811115610b4257610b42611f12565b604051908082528060200260200182016040528015610b6b578160200160208202803683370190505b509050600160005b8381108015610b845750600f548211155b15610bef576000610b9483610cbc565b9050866001600160a01b0316816001600160a01b03161415610bdc5782848381518110610bc357610bc36122b1565b602090810291909101015281610bd8816122dd565b9250505b82610be6816122dd565b93505050610b73565b5090949350505050565b610c0161153e565b600e55565b610c0e61153e565b80516109c490600d906020840190611d7c565b600c8054610c2e90612228565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a90612228565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b505050505081565b600b8054610c2e90612228565b6000818152600260205260408120546001600160a01b0316806107cf5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610903565b60006001600160a01b038216610d865760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610903565b506001600160a01b031660009081526003602052604090205490565b610daa61153e565b610db460006117b3565b565b610dbe61153e565b600955565b610dcb61153e565b80516109c490600b906020840190611d7c565b6060600180546107e490612228565b80600081118015610e0057506010548111155b610e1c5760405162461bcd60e51b8152600401610903906122f8565b600f5481610e2960085490565b610e339190612326565b1115610e515760405162461bcd60e51b81526004016109039061233e565b8180600e54610e60919061236c565b341015610ea55760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610903565b60115460ff1615610ef85760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610903565b6109a43384611805565b6109c4338383611842565b600d8054610c2e90612228565b610f2261153e565b601055565b610f2f61153e565b601180549115156101000261ff0019909216919091179055565b610f533383611598565b610f6f5760405162461bcd60e51b815260040161090390612263565b610f7b84848484611911565b50505050565b6000818152600260205260409020546060906001600160a01b03166110005760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610903565b60115462010000900460ff166110a257600d805461101d90612228565b80601f016020809104026020016040519081016040528092919081815260200182805461104990612228565b80156110965780601f1061106b57610100808354040283529160200191611096565b820191906000526020600020905b81548152906001019060200180831161107957829003601f168201915b50505050509050919050565b60006110ac611944565b905060008151116110cc57604051806020016040528060008152506110fa565b806110d684611953565b600c6040516020016110ea9392919061238b565b6040516020818303038152906040525b9392505050565b8260008111801561111457506010548111155b6111305760405162461bcd60e51b8152600401610903906122f8565b600f548161113d60085490565b6111479190612326565b11156111655760405162461bcd60e51b81526004016109039061233e565b8380600e54611174919061236c565b3410156111b95760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610903565b601154610100900460ff1661121b5760405162461bcd60e51b815260206004820152602260248201527f5468652077686974656c6973742073616c65206973206e6f7420656e61626c65604482015261642160f01b6064820152608401610903565b336000908152600a602052604090205460ff161561127b5760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920636c61696d65642100000000000000006044820152606401610903565b6040516bffffffffffffffffffffffff193360601b1660208201526000906034016040516020818303038152906040528051906020012090506112f5858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611a51565b6113325760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642070726f6f662160901b6044820152606401610903565b336000818152600a60205260409020805460ff191660011790556113569087611805565b505050505050565b61136661153e565b60118054911515620100000262ff000019909216919091179055565b8160008111801561139557506010548111155b6113b15760405162461bcd60e51b8152600401610903906122f8565b600f54816113be60085490565b6113c89190612326565b11156113e65760405162461bcd60e51b81526004016109039061233e565b6113ee61153e565b6109a48284611805565b61140061153e565b6001600160a01b0381166114655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610903565b61146e816117b3565b50565b6000818152600260205260409020546001600160a01b031661146e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610903565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061150582610cbc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610db45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610903565b6000806115a483610cbc565b9050806001600160a01b0316846001600160a01b031614806115eb57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061160f5750836001600160a01b031661160484610867565b6001600160a01b0316145b949350505050565b826001600160a01b031661162a82610cbc565b6001600160a01b03161461168e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610903565b6001600160a01b0382166116f05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610903565b6116fb6000826114d0565b6001600160a01b038316600090815260036020526040812080546001929061172490849061244f565b90915550506001600160a01b0382166000908152600360205260408120805460019290611752908490612326565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b818110156109a45761181e600880546001019055565b6118308361182b60085490565b611a67565b8061183a816122dd565b915050611808565b816001600160a01b0316836001600160a01b031614156118a45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610903565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61191c848484611617565b61192884848484611a81565b610f7b5760405162461bcd60e51b815260040161090390612466565b6060600b80546107e490612228565b6060816119775750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119a1578061198b816122dd565b915061199a9050600a836124ce565b915061197b565b60008167ffffffffffffffff8111156119bc576119bc611f12565b6040519080825280601f01601f1916602001820160405280156119e6576020820181803683370190505b5090505b841561160f576119fb60018361244f565b9150611a08600a866124e2565b611a13906030612326565b60f81b818381518110611a2857611a286122b1565b60200101906001600160f81b031916908160001a905350611a4a600a866124ce565b94506119ea565b600082611a5e8584611b8e565b14949350505050565b6109c4828260405180602001604052806000815250611bdb565b60006001600160a01b0384163b15611b8357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ac59033908990889088906004016124f6565b602060405180830381600087803b158015611adf57600080fd5b505af1925050508015611b0f575060408051601f3d908101601f19168201909252611b0c91810190612533565b60015b611b69573d808015611b3d576040519150601f19603f3d011682016040523d82523d6000602084013e611b42565b606091505b508051611b615760405162461bcd60e51b815260040161090390612466565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061160f565b506001949350505050565b600081815b8451811015611bd357611bbf82868381518110611bb257611bb26122b1565b6020026020010151611c0e565b915080611bcb816122dd565b915050611b93565b509392505050565b611be58383611c3a565b611bf26000848484611a81565b6109a45760405162461bcd60e51b815260040161090390612466565b6000818310611c2a5760008281526020849052604090206110fa565b5060009182526020526040902090565b6001600160a01b038216611c905760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610903565b6000818152600260205260409020546001600160a01b031615611cf55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610903565b6001600160a01b0382166000908152600360205260408120805460019290611d1e908490612326565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611d8890612228565b90600052602060002090601f016020900481019282611daa5760008555611df0565b82601f10611dc357805160ff1916838001178555611df0565b82800160010185558215611df0579182015b82811115611df0578251825591602001919060010190611dd5565b50611dfc929150611e00565b5090565b5b80821115611dfc5760008155600101611e01565b6001600160e01b03198116811461146e57600080fd5b600060208284031215611e3d57600080fd5b81356110fa81611e15565b60005b83811015611e63578181015183820152602001611e4b565b83811115610f7b5750506000910152565b60008151808452611e8c816020860160208601611e48565b601f01601f19169290920160200192915050565b6020815260006110fa6020830184611e74565b600060208284031215611ec557600080fd5b5035919050565b80356001600160a01b0381168114611ee357600080fd5b919050565b60008060408385031215611efb57600080fd5b611f0483611ecc565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611f4357611f43611f12565b604051601f8501601f19908116603f01168101908282118183101715611f6b57611f6b611f12565b81604052809350858152868686011115611f8457600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611fb057600080fd5b813567ffffffffffffffff811115611fc757600080fd5b8201601f81018413611fd857600080fd5b61160f84823560208401611f28565b80358015158114611ee357600080fd5b60006020828403121561200957600080fd5b6110fa82611fe7565b60008060006060848603121561202757600080fd5b61203084611ecc565b925061203e60208501611ecc565b9150604084013590509250925092565b60006020828403121561206057600080fd5b6110fa82611ecc565b6020808252825182820181905260009190848201906040850190845b818110156120a157835183529284019291840191600101612085565b50909695505050505050565b600080604083850312156120c057600080fd5b6120c983611ecc565b91506120d760208401611fe7565b90509250929050565b600080600080608085870312156120f657600080fd5b6120ff85611ecc565b935061210d60208601611ecc565b925060408501359150606085013567ffffffffffffffff81111561213057600080fd5b8501601f8101871361214157600080fd5b61215087823560208401611f28565b91505092959194509250565b60008060006040848603121561217157600080fd5b83359250602084013567ffffffffffffffff8082111561219057600080fd5b818601915086601f8301126121a457600080fd5b8135818111156121b357600080fd5b8760208260051b85010111156121c857600080fd5b6020830194508093505050509250925092565b600080604083850312156121ee57600080fd5b6121f783611ecc565b91506120d760208401611ecc565b6000806040838503121561221857600080fd5b823591506120d760208401611ecc565b600181811c9082168061223c57607f821691505b6020821081141561225d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156122f1576122f16122c7565b5060010190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b60008219821115612339576123396122c7565b500190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b6000816000190483118215151615612386576123866122c7565b500290565b60008451602061239e8285838a01611e48565b8551918401916123b18184848a01611e48565b8554920191600090600181811c90808316806123ce57607f831692505b8583108114156123ec57634e487b7160e01b85526022600452602485fd5b80801561240057600181146124115761243e565b60ff1985168852838801955061243e565b60008b81526020902060005b858110156124365781548a82015290840190880161241d565b505083880195505b50939b9a5050505050505050505050565b600082821015612461576124616122c7565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826124dd576124dd6124b8565b500490565b6000826124f1576124f16124b8565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061252990830184611e74565b9695505050505050565b60006020828403121561254557600080fd5b81516110fa81611e1556fea26469706673582212203dcf53e364296c22cd8c7486f1044a50c48fe574ef2def7881274c406708a1f364736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000001b39000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000a426f626f204672656e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): Bobo Frens
Arg [1] : _tokenSymbol (string): BF
Arg [2] : _cost (uint256): 20000000000000000
Arg [3] : _maxSupply (uint256): 6969
Arg [4] : _maxMintAmountPerTx (uint256): 10
Arg [5] : _hiddenMetadataUri (string):
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 00000000000000000000000000000000000000000000000000470de4df820000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001b39
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [7] : 426f626f204672656e7300000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 4246000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50946:5796:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37686:305;;;;;;;;;;-1:-1:-1;37686:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;37686:305:0;;;;;;;;38613:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40126:171::-;;;;;;;;;;-1:-1:-1;40126:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;40126:171:0;1528:203:1;39643:417:0;;;;;;;;;;-1:-1:-1;39643:417:0;;;;;:::i;:::-;;:::i;:::-;;51314:19;;;;;;;;;;;;;;;;;;;2319:25:1;;;2307:2;2292:18;51314:19:0;2173:177:1;55025:100:0;;;;;;;;;;-1:-1:-1;55025:100:0;;;;;:::i;:::-;;:::i;55131:77::-;;;;;;;;;;-1:-1:-1;55131:77:0;;;;;:::i;:::-;;:::i;52283:89::-;;;;;;;;;;;;;:::i;40826:336::-;;;;;;;;;;-1:-1:-1;40826:336:0;;;;;:::i;:::-;;:::i;51118:25::-;;;;;;;;;;;;;;;;55429:990;;;;;;;;;;;;;:::i;41233:185::-;;;;;;;;;;-1:-1:-1;41233:185:0;;;;;:::i;:::-;;:::i;53337:635::-;;;;;;;;;;-1:-1:-1;53337:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;54565:74::-;;;;;;;;;;-1:-1:-1;54565:74:0;;;;;:::i;:::-;;:::i;54781:132::-;;;;;;;;;;-1:-1:-1;54781:132:0;;;;;:::i;:::-;;:::i;51483:27::-;;;;;;;;;;-1:-1:-1;51483:27:0;;;;;;;;;;;51236:33;;;;;;;;;;;;;:::i;51407:26::-;;;;;;;;;;-1:-1:-1;51407:26:0;;;;;;;;51203:28;;;;;;;;;;;;;:::i;38324:222::-;;;;;;;;;;-1:-1:-1;38324:222:0;;;;;:::i;:::-;;:::i;51438:40::-;;;;;;;;;;-1:-1:-1;51438:40:0;;;;;;;;;;;38055:207;;;;;;;;;;-1:-1:-1;38055:207:0;;;;;:::i;:::-;;:::i;18222:103::-;;;;;;;;;;;;;:::i;55214:98::-;;;;;;;;;;-1:-1:-1;55214:98:0;;;;;:::i;:::-;;:::i;54919:100::-;;;;;;;;;;-1:-1:-1;54919:100:0;;;;;:::i;:::-;;:::i;17574:87::-;;;;;;;;;;-1:-1:-1;17647:6:0;;-1:-1:-1;;;;;17647:6:0;17574:87;;51367:33;;;;;;;;;;;;;;;;38782:104;;;;;;;;;;;;;:::i;52958:210::-;;;;;;:::i;:::-;;:::i;40369:155::-;;;;;;;;;;-1:-1:-1;40369:155:0;;;;;:::i;:::-;;:::i;51274:31::-;;;;;;;;;;;;;:::i;54645:130::-;;;;;;;;;;-1:-1:-1;54645:130:0;;;;;:::i;:::-;;:::i;55318:105::-;;;;;;;;;;-1:-1:-1;55318:105:0;;;;;:::i;:::-;;:::i;41489:323::-;;;;;;;;;;-1:-1:-1;41489:323:0;;;;;:::i;:::-;;:::i;53978:494::-;;;;;;;;;;-1:-1:-1;53978:494:0;;;;;:::i;:::-;;:::i;52378:574::-;;;;;;:::i;:::-;;:::i;51338:24::-;;;;;;;;;;;;;;;;51148:48;;;;;;;;;;-1:-1:-1;51148:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;54478:81;;;;;;;;;;-1:-1:-1;54478:81:0;;;;;:::i;:::-;;:::i;40595:164::-;;;;;;;;;;-1:-1:-1;40595:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;40716:25:0;;;40692:4;40716:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;40595:164;53176:155;;;;;;;;;;-1:-1:-1;53176:155:0;;;;;:::i;:::-;;:::i;18480:201::-;;;;;;;;;;-1:-1:-1;18480:201:0;;;;;:::i;:::-;;:::i;37686:305::-;37788:4;-1:-1:-1;;;;;;37825:40:0;;-1:-1:-1;;;37825:40:0;;:105;;-1:-1:-1;;;;;;;37882:48:0;;-1:-1:-1;;;37882:48:0;37825:105;:158;;;-1:-1:-1;;;;;;;;;;30537:40:0;;;37947:36;37805:178;37686:305;-1:-1:-1;;37686:305:0:o;38613:100::-;38667:13;38700:5;38693:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38613:100;:::o;40126:171::-;40202:7;40222:23;40237:7;40222:14;:23::i;:::-;-1:-1:-1;40265:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;40265:24:0;;40126:171::o;39643:417::-;39724:13;39740:23;39755:7;39740:14;:23::i;:::-;39724:39;;39788:5;-1:-1:-1;;;;;39782:11:0;:2;-1:-1:-1;;;;;39782:11:0;;;39774:57;;;;-1:-1:-1;;;39774:57:0;;8188:2:1;39774:57:0;;;8170:21:1;8227:2;8207:18;;;8200:30;8266:34;8246:18;;;8239:62;-1:-1:-1;;;8317:18:1;;;8310:31;8358:19;;39774:57:0;;;;;;;;;16205:10;-1:-1:-1;;;;;39866:21:0;;;;:62;;-1:-1:-1;39891:37:0;39908:5;16205:10;40595:164;:::i;39891:37::-;39844:174;;;;-1:-1:-1;;;39844:174:0;;8590:2:1;39844:174:0;;;8572:21:1;8629:2;8609:18;;;8602:30;8668:34;8648:18;;;8641:62;8739:32;8719:18;;;8712:60;8789:19;;39844:174:0;8388:426:1;39844:174:0;40031:21;40040:2;40044:7;40031:8;:21::i;:::-;39713:347;39643:417;;:::o;55025:100::-;17460:13;:11;:13::i;:::-;55097:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;55025:100:::0;:::o;55131:77::-;17460:13;:11;:13::i;:::-;55187:6:::1;:15:::0;;-1:-1:-1;;55187:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55131:77::o;52283:89::-;52327:7;52350:16;:6;12448:14;;12356:114;52350:16;52343:23;;52283:89;:::o;40826:336::-;41021:41;16205:10;41054:7;41021:18;:41::i;:::-;41013:100;;;;-1:-1:-1;;;41013:100:0;;;;;;;:::i;:::-;41126:28;41136:4;41142:2;41146:7;41126:9;:28::i;55429:990::-;17460:13;:11;:13::i;:::-;1812:1:::1;2410:7;;:19;;2402:63;;;::::0;-1:-1:-1;;;2402:63:0;;9436:2:1;2402:63:0::1;::::0;::::1;9418:21:1::0;9475:2;9455:18;;;9448:30;9514:33;9494:18;;;9487:61;9565:18;;2402:63:0::1;9234:355:1::0;2402:63:0::1;1812:1;2543:7;:18:::0;56241:7:::2;56262;17647:6:::0;;-1:-1:-1;;;;;17647:6:0;;17574:87;56262:7:::2;-1:-1:-1::0;;;;;56254:21:0::2;56283;56254:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56240:69;;;56324:2;56316:11;;;::::0;::::2;;-1:-1:-1::0;1768:1:0::1;2722:7;:22:::0;55429:990::o;41233:185::-;41371:39;41388:4;41394:2;41398:7;41371:39;;;;;;;;;;;;:16;:39::i;53337:635::-;53412:16;53440:23;53466:17;53476:6;53466:9;:17::i;:::-;53440:43;;53490:30;53537:15;53523:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53523:30:0;-1:-1:-1;53490:63:0;-1:-1:-1;53585:1:0;53560:22;53629:309;53654:15;53636;:33;:64;;;;;53691:9;;53673:14;:27;;53636:64;53629:309;;;53711:25;53739:23;53747:14;53739:7;:23::i;:::-;53711:51;;53798:6;-1:-1:-1;;;;;53777:27:0;:17;-1:-1:-1;;;;;53777:27:0;;53773:131;;;53850:14;53817:13;53831:15;53817:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;53877:17;;;;:::i;:::-;;;;53773:131;53914:16;;;;:::i;:::-;;;;53702:236;53629:309;;;-1:-1:-1;53953:13:0;;53337:635;-1:-1:-1;;;;53337:635:0:o;54565:74::-;17460:13;:11;:13::i;:::-;54621:4:::1;:12:::0;54565:74::o;54781:132::-;17460:13;:11;:13::i;:::-;54869:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;51236:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51203:28::-;;;;;;;:::i;38324:222::-;38396:7;38432:16;;;:7;:16;;;;;;-1:-1:-1;;;;;38432:16:0;38467:19;38459:56;;;;-1:-1:-1;;;38459:56:0;;10410:2:1;38459:56:0;;;10392:21:1;10449:2;10429:18;;;10422:30;-1:-1:-1;;;10468:18:1;;;10461:54;10532:18;;38459:56:0;10208:348:1;38055:207:0;38127:7;-1:-1:-1;;;;;38155:19:0;;38147:73;;;;-1:-1:-1;;;38147:73:0;;10763:2:1;38147:73:0;;;10745:21:1;10802:2;10782:18;;;10775:30;10841:34;10821:18;;;10814:62;-1:-1:-1;;;10892:18:1;;;10885:39;10941:19;;38147:73:0;10561:405:1;38147:73:0;-1:-1:-1;;;;;;38238:16:0;;;;;:9;:16;;;;;;;38055:207::o;18222:103::-;17460:13;:11;:13::i;:::-;18287:30:::1;18314:1;18287:18;:30::i;:::-;18222:103::o:0;55214:98::-;17460:13;:11;:13::i;:::-;55282:10:::1;:24:::0;55214:98::o;54919:100::-;17460:13;:11;:13::i;:::-;54991:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;38782:104::-:0;38838:13;38871:7;38864:14;;;;;:::i;52958:210::-;53023:11;51977:1;51963:11;:15;:52;;;;;51997:18;;51982:11;:33;;51963:52;51955:85;;;;-1:-1:-1;;;51955:85:0;;;;;;;:::i;:::-;52089:9;;52074:11;52055:16;:6;12448:14;;12356:114;52055:16;:30;;;;:::i;:::-;:43;;52047:76;;;;-1:-1:-1;;;52047:76:0;;;;;;;:::i;:::-;53056:11:::1;52228;52221:4;;:18;;;;:::i;:::-;52208:9;:31;;52200:63;;;::::0;-1:-1:-1;;;52200:63:0;;12177:2:1;52200:63:0::1;::::0;::::1;12159:21:1::0;12216:2;12196:18;;;12189:30;-1:-1:-1;;;12235:18:1;;;12228:49;12294:18;;52200:63:0::1;11975:343:1::0;52200:63:0::1;53085:6:::2;::::0;::::2;;53084:7;53076:43;;;::::0;-1:-1:-1;;;53076:43:0;;12525:2:1;53076:43:0::2;::::0;::::2;12507:21:1::0;12564:2;12544:18;;;12537:30;12603:25;12583:18;;;12576:53;12646:18;;53076:43:0::2;12323:347:1::0;53076:43:0::2;53128:34;53138:10;53150:11;53128:9;:34::i;40369:155::-:0;40464:52;16205:10;40497:8;40507;40464:18;:52::i;51274:31::-;;;;;;;:::i;54645:130::-;17460:13;:11;:13::i;:::-;54729:18:::1;:40:::0;54645:130::o;55318:105::-;17460:13;:11;:13::i;:::-;55388:20:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;55388:29:0;;::::1;::::0;;;::::1;::::0;;55318:105::o;41489:323::-;41663:41;16205:10;41696:7;41663:18;:41::i;:::-;41655:100;;;;-1:-1:-1;;;41655:100:0;;;;;;;:::i;:::-;41766:38;41780:4;41786:2;41790:7;41799:4;41766:13;:38::i;:::-;41489:323;;;;:::o;53978:494::-;43384:4;43408:16;;;:7;:16;;;;;;54077:13;;-1:-1:-1;;;;;43408:16:0;54102:98;;;;-1:-1:-1;;;54102:98:0;;12877:2:1;54102:98:0;;;12859:21:1;12916:2;12896:18;;;12889:30;12955:34;12935:18;;;12928:62;-1:-1:-1;;;13006:18:1;;;12999:45;13061:19;;54102:98:0;12675:411:1;54102:98:0;54213:8;;;;;;;54209:64;;54248:17;54241:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53978:494;;;:::o;54209:64::-;54281:28;54312:10;:8;:10::i;:::-;54281:41;;54367:1;54342:14;54336:28;:32;:130;;;;;;;;;;;;;;;;;54404:14;54420:19;:8;:17;:19::i;:::-;54441:9;54387:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54336:130;54329:137;53978:494;-1:-1:-1;;;53978:494:0:o;52378:574::-;52485:11;51977:1;51963:11;:15;:52;;;;;51997:18;;51982:11;:33;;51963:52;51955:85;;;;-1:-1:-1;;;51955:85:0;;;;;;;:::i;:::-;52089:9;;52074:11;52055:16;:6;12448:14;;12356:114;52055:16;:30;;;;:::i;:::-;:43;;52047:76;;;;-1:-1:-1;;;52047:76:0;;;;;;;:::i;:::-;52518:11:::1;52228;52221:4;;:18;;;;:::i;:::-;52208:9;:31;;52200:63;;;::::0;-1:-1:-1;;;52200:63:0;;12177:2:1;52200:63:0::1;::::0;::::1;12159:21:1::0;12216:2;12196:18;;;12189:30;-1:-1:-1;;;12235:18:1;;;12228:49;12294:18;;52200:63:0::1;11975:343:1::0;52200:63:0::1;52584:20:::2;::::0;::::2;::::0;::::2;;;52576:67;;;::::0;-1:-1:-1;;;52576:67:0;;14951:2:1;52576:67:0::2;::::0;::::2;14933:21:1::0;14990:2;14970:18;;;14963:30;15029:34;15009:18;;;15002:62;-1:-1:-1;;;15080:18:1;;;15073:32;15122:19;;52576:67:0::2;14749:398:1::0;52576:67:0::2;52676:10;52659:28;::::0;;;:16:::2;:28;::::0;;;;;::::2;;52658:29;52650:66;;;::::0;-1:-1:-1;;;52650:66:0;;15354:2:1;52650:66:0::2;::::0;::::2;15336:21:1::0;15393:2;15373:18;;;15366:30;15432:26;15412:18;;;15405:54;15476:18;;52650:66:0::2;15152:348:1::0;52650:66:0::2;52748:28;::::0;-1:-1:-1;;52765:10:0::2;15654:2:1::0;15650:15;15646:53;52748:28:0::2;::::0;::::2;15634:66:1::0;52723:12:0::2;::::0;15716::1;;52748:28:0::2;;;;;;;;;;;;52738:39;;;;;;52723:54;;52792:50;52811:12;;52792:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;52825:10:0::2;::::0;;-1:-1:-1;52837:4:0;;-1:-1:-1;52792:18:0::2;:50::i;:::-;52784:77;;;::::0;-1:-1:-1;;;52784:77:0;;15941:2:1;52784:77:0::2;::::0;::::2;15923:21:1::0;15980:2;15960:18;;;15953:30;-1:-1:-1;;;15999:18:1;;;15992:44;16053:18;;52784:77:0::2;15739:338:1::0;52784:77:0::2;52887:10;52870:28;::::0;;;:16:::2;:28;::::0;;;;:35;;-1:-1:-1;;52870:35:0::2;52901:4;52870:35;::::0;;52912:34:::2;::::0;52934:11;52912:9:::2;:34::i;:::-;52531:421;52130:1:::1;52378:574:::0;;;;:::o;54478:81::-;17460:13;:11;:13::i;:::-;54536:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;54536:17:0;;::::1;::::0;;;::::1;::::0;;54478:81::o;53176:155::-;53262:11;51977:1;51963:11;:15;:52;;;;;51997:18;;51982:11;:33;;51963:52;51955:85;;;;-1:-1:-1;;;51955:85:0;;;;;;;:::i;:::-;52089:9;;52074:11;52055:16;:6;12448:14;;12356:114;52055:16;:30;;;;:::i;:::-;:43;;52047:76;;;;-1:-1:-1;;;52047:76:0;;;;;;;:::i;:::-;17460:13:::1;:11;:13::i;:::-;53292:33:::2;53302:9;53313:11;53292:9;:33::i;18480:201::-:0;17460:13;:11;:13::i;:::-;-1:-1:-1;;;;;18569:22:0;::::1;18561:73;;;::::0;-1:-1:-1;;;18561:73:0;;16284:2:1;18561:73:0::1;::::0;::::1;16266:21:1::0;16323:2;16303:18;;;16296:30;16362:34;16342:18;;;16335:62;-1:-1:-1;;;16413:18:1;;;16406:36;16459:19;;18561:73:0::1;16082:402:1::0;18561:73:0::1;18645:28;18664:8;18645:18;:28::i;:::-;18480:201:::0;:::o;48101:135::-;43384:4;43408:16;;;:7;:16;;;;;;-1:-1:-1;;;;;43408:16:0;48175:53;;;;-1:-1:-1;;;48175:53:0;;10410:2:1;48175:53:0;;;10392:21:1;10449:2;10429:18;;;10422:30;-1:-1:-1;;;10468:18:1;;;10461:54;10532:18;;48175:53:0;10208:348:1;47380:174:0;47455:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;47455:29:0;-1:-1:-1;;;;;47455:29:0;;;;;;;;:24;;47509:23;47455:24;47509:14;:23::i;:::-;-1:-1:-1;;;;;47500:46:0;;;;;;;;;;;47380:174;;:::o;17739:132::-;17647:6;;-1:-1:-1;;;;;17647:6:0;16205:10;17803:23;17795:68;;;;-1:-1:-1;;;17795:68:0;;16691:2:1;17795:68:0;;;16673:21:1;;;16710:18;;;16703:30;16769:34;16749:18;;;16742:62;16821:18;;17795:68:0;16489:356:1;43613:264:0;43706:4;43723:13;43739:23;43754:7;43739:14;:23::i;:::-;43723:39;;43792:5;-1:-1:-1;;;;;43781:16:0;:7;-1:-1:-1;;;;;43781:16:0;;:52;;;-1:-1:-1;;;;;;40716:25:0;;;40692:4;40716:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;43801:32;43781:87;;;;43861:7;-1:-1:-1;;;;;43837:31:0;:20;43849:7;43837:11;:20::i;:::-;-1:-1:-1;;;;;43837:31:0;;43781:87;43773:96;43613:264;-1:-1:-1;;;;43613:264:0:o;46636:625::-;46795:4;-1:-1:-1;;;;;46768:31:0;:23;46783:7;46768:14;:23::i;:::-;-1:-1:-1;;;;;46768:31:0;;46760:81;;;;-1:-1:-1;;;46760:81:0;;17052:2:1;46760:81:0;;;17034:21:1;17091:2;17071:18;;;17064:30;17130:34;17110:18;;;17103:62;-1:-1:-1;;;17181:18:1;;;17174:35;17226:19;;46760:81:0;16850:401:1;46760:81:0;-1:-1:-1;;;;;46860:16:0;;46852:65;;;;-1:-1:-1;;;46852:65:0;;17458:2:1;46852:65:0;;;17440:21:1;17497:2;17477:18;;;17470:30;17536:34;17516:18;;;17509:62;-1:-1:-1;;;17587:18:1;;;17580:34;17631:19;;46852:65:0;17256:400:1;46852:65:0;47034:29;47051:1;47055:7;47034:8;:29::i;:::-;-1:-1:-1;;;;;47076:15:0;;;;;;:9;:15;;;;;:20;;47095:1;;47076:15;:20;;47095:1;;47076:20;:::i;:::-;;;;-1:-1:-1;;;;;;;47107:13:0;;;;;;:9;:13;;;;;:18;;47124:1;;47107:13;:18;;47124:1;;47107:18;:::i;:::-;;;;-1:-1:-1;;47136:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;47136:21:0;-1:-1:-1;;;;;47136:21:0;;;;;;;;;47175:27;;47136:16;;47175:27;;;;;;;39713:347;39643:417;;:::o;18841:191::-;18934:6;;;-1:-1:-1;;;;;18951:17:0;;;-1:-1:-1;;;;;;18951:17:0;;;;;;;18984:40;;18934:6;;;18951:17;18934:6;;18984:40;;18915:16;;18984:40;18904:128;18841:191;:::o;56425:204::-;56505:9;56500:124;56524:11;56520:1;:15;56500:124;;;56551:18;:6;12567:19;;12585:1;12567:19;;;12478:127;56551:18;56578:38;56588:9;56599:16;:6;12448:14;;12356:114;56599:16;56578:9;:38::i;:::-;56537:3;;;;:::i;:::-;;;;56500:124;;47697:315;47852:8;-1:-1:-1;;;;;47843:17:0;:5;-1:-1:-1;;;;;47843:17:0;;;47835:55;;;;-1:-1:-1;;;47835:55:0;;17993:2:1;47835:55:0;;;17975:21:1;18032:2;18012:18;;;18005:30;18071:27;18051:18;;;18044:55;18116:18;;47835:55:0;17791:349:1;47835:55:0;-1:-1:-1;;;;;47901:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;47901:46:0;;;;;;;;;;47963:41;;540::1;;;47963::0;;513:18:1;47963:41:0;;;;;;;47697:315;;;:::o;42693:313::-;42849:28;42859:4;42865:2;42869:7;42849:9;:28::i;:::-;42896:47;42919:4;42925:2;42929:7;42938:4;42896:22;:47::i;:::-;42888:110;;;;-1:-1:-1;;;42888:110:0;;;;;;;:::i;56635:104::-;56695:13;56724:9;56717:16;;;;;:::i;13379:723::-;13435:13;13656:10;13652:53;;-1:-1:-1;;13683:10:0;;;;;;;;;;;;-1:-1:-1;;;13683:10:0;;;;;13379:723::o;13652:53::-;13730:5;13715:12;13771:78;13778:9;;13771:78;;13804:8;;;;:::i;:::-;;-1:-1:-1;13827:10:0;;-1:-1:-1;13835:2:0;13827:10;;:::i;:::-;;;13771:78;;;13859:19;13891:6;13881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13881:17:0;;13859:39;;13909:154;13916:10;;13909:154;;13943:11;13953:1;13943:11;;:::i;:::-;;-1:-1:-1;14012:10:0;14020:2;14012:5;:10;:::i;:::-;13999:24;;:2;:24;:::i;:::-;13986:39;;13969:6;13976;13969:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;13969:56:0;;;;;;;;-1:-1:-1;14040:11:0;14049:2;14040:11;;:::i;:::-;;;13909:154;;3978:190;4103:4;4156;4127:25;4140:5;4147:4;4127:12;:25::i;:::-;:33;;3978:190;-1:-1:-1;;;;3978:190:0:o;44219:110::-;44295:26;44305:2;44309:7;44295:26;;;;;;;;;;;;:9;:26::i;48800:853::-;48954:4;-1:-1:-1;;;;;48975:13:0;;20567:19;:23;48971:675;;49011:71;;-1:-1:-1;;;49011:71:0;;-1:-1:-1;;;;;49011:36:0;;;;;:71;;16205:10;;49062:4;;49068:7;;49077:4;;49011:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49011:71:0;;;;;;;;-1:-1:-1;;49011:71:0;;;;;;;;;;;;:::i;:::-;;;49007:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49252:13:0;;49248:328;;49295:60;;-1:-1:-1;;;49295:60:0;;;;;;;:::i;49248:328::-;49526:6;49520:13;49511:6;49507:2;49503:15;49496:38;49007:584;-1:-1:-1;;;;;;49133:51:0;-1:-1:-1;;;49133:51:0;;-1:-1:-1;49126:58:0;;48971:675;-1:-1:-1;49630:4:0;48800:853;;;;;;:::o;4845:296::-;4928:7;4971:4;4928:7;4986:118;5010:5;:12;5006:1;:16;4986:118;;;5059:33;5069:12;5083:5;5089:1;5083:8;;;;;;;;:::i;:::-;;;;;;;5059:9;:33::i;:::-;5044:48;-1:-1:-1;5024:3:0;;;;:::i;:::-;;;;4986:118;;;-1:-1:-1;5121:12:0;4845:296;-1:-1:-1;;;4845:296:0:o;44556:319::-;44685:18;44691:2;44695:7;44685:5;:18::i;:::-;44736:53;44767:1;44771:2;44775:7;44784:4;44736:22;:53::i;:::-;44714:153;;;;-1:-1:-1;;;44714:153:0;;;;;;;:::i;11052:149::-;11115:7;11146:1;11142;:5;:51;;11277:13;11371:15;;;11407:4;11400:15;;;11454:4;11438:21;;11142:51;;;-1:-1:-1;11277:13:0;11371:15;;;11407:4;11400:15;11454:4;11438:21;;;11052:149::o;45211:439::-;-1:-1:-1;;;;;45291:16:0;;45283:61;;;;-1:-1:-1;;;45283:61:0;;19888:2:1;45283:61:0;;;19870:21:1;;;19907:18;;;19900:30;19966:34;19946:18;;;19939:62;20018:18;;45283:61:0;19686:356:1;45283:61:0;43384:4;43408:16;;;:7;:16;;;;;;-1:-1:-1;;;;;43408:16:0;:30;45355:58;;;;-1:-1:-1;;;45355:58:0;;20249:2:1;45355:58:0;;;20231:21:1;20288:2;20268:18;;;20261:30;20327;20307:18;;;20300:58;20375:18;;45355:58:0;20047:352:1;45355:58:0;-1:-1:-1;;;;;45484:13:0;;;;;;:9;:13;;;;;:18;;45501:1;;45484:13;:18;;45501:1;;45484:18;:::i;:::-;;;;-1:-1:-1;;45513:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;45513:21:0;-1:-1:-1;;;;;45513:21:0;;;;;;;;45552:33;;45513:16;;;45552:33;;45513:16;;45552:33;55097:22:::1;55025:100:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:127::-;2416:10;2411:3;2407:20;2404:1;2397:31;2447:4;2444:1;2437:15;2471:4;2468:1;2461:15;2487:632;2552:5;2582:18;2623:2;2615:6;2612:14;2609:40;;;2629:18;;:::i;:::-;2704:2;2698:9;2672:2;2758:15;;-1:-1:-1;;2754:24:1;;;2780:2;2750:33;2746:42;2734:55;;;2804:18;;;2824:22;;;2801:46;2798:72;;;2850:18;;:::i;:::-;2890:10;2886:2;2879:22;2919:6;2910:15;;2949:6;2941;2934:22;2989:3;2980:6;2975:3;2971:16;2968:25;2965:45;;;3006:1;3003;2996:12;2965:45;3056:6;3051:3;3044:4;3036:6;3032:17;3019:44;3111:1;3104:4;3095:6;3087;3083:19;3079:30;3072:41;;;;2487:632;;;;;:::o;3124:451::-;3193:6;3246:2;3234:9;3225:7;3221:23;3217:32;3214:52;;;3262:1;3259;3252:12;3214:52;3302:9;3289:23;3335:18;3327:6;3324:30;3321:50;;;3367:1;3364;3357:12;3321:50;3390:22;;3443:4;3435:13;;3431:27;-1:-1:-1;3421:55:1;;3472:1;3469;3462:12;3421:55;3495:74;3561:7;3556:2;3543:16;3538:2;3534;3530:11;3495:74;:::i;3580:160::-;3645:20;;3701:13;;3694:21;3684:32;;3674:60;;3730:1;3727;3720:12;3745:180;3801:6;3854:2;3842:9;3833:7;3829:23;3825:32;3822:52;;;3870:1;3867;3860:12;3822:52;3893:26;3909:9;3893:26;:::i;3930:328::-;4007:6;4015;4023;4076:2;4064:9;4055:7;4051:23;4047:32;4044:52;;;4092:1;4089;4082:12;4044:52;4115:29;4134:9;4115:29;:::i;:::-;4105:39;;4163:38;4197:2;4186:9;4182:18;4163:38;:::i;:::-;4153:48;;4248:2;4237:9;4233:18;4220:32;4210:42;;3930:328;;;;;:::o;4445:186::-;4504:6;4557:2;4545:9;4536:7;4532:23;4528:32;4525:52;;;4573:1;4570;4563:12;4525:52;4596:29;4615:9;4596:29;:::i;4636:632::-;4807:2;4859:21;;;4929:13;;4832:18;;;4951:22;;;4778:4;;4807:2;5030:15;;;;5004:2;4989:18;;;4778:4;5073:169;5087:6;5084:1;5081:13;5073:169;;;5148:13;;5136:26;;5217:15;;;;5182:12;;;;5109:1;5102:9;5073:169;;;-1:-1:-1;5259:3:1;;4636:632;-1:-1:-1;;;;;;4636:632:1:o;5458:254::-;5523:6;5531;5584:2;5572:9;5563:7;5559:23;5555:32;5552:52;;;5600:1;5597;5590:12;5552:52;5623:29;5642:9;5623:29;:::i;:::-;5613:39;;5671:35;5702:2;5691:9;5687:18;5671:35;:::i;:::-;5661:45;;5458:254;;;;;:::o;5717:667::-;5812:6;5820;5828;5836;5889:3;5877:9;5868:7;5864:23;5860:33;5857:53;;;5906:1;5903;5896:12;5857:53;5929:29;5948:9;5929:29;:::i;:::-;5919:39;;5977:38;6011:2;6000:9;5996:18;5977:38;:::i;:::-;5967:48;;6062:2;6051:9;6047:18;6034:32;6024:42;;6117:2;6106:9;6102:18;6089:32;6144:18;6136:6;6133:30;6130:50;;;6176:1;6173;6166:12;6130:50;6199:22;;6252:4;6244:13;;6240:27;-1:-1:-1;6230:55:1;;6281:1;6278;6271:12;6230:55;6304:74;6370:7;6365:2;6352:16;6347:2;6343;6339:11;6304:74;:::i;:::-;6294:84;;;5717:667;;;;;;;:::o;6389:683::-;6484:6;6492;6500;6553:2;6541:9;6532:7;6528:23;6524:32;6521:52;;;6569:1;6566;6559:12;6521:52;6605:9;6592:23;6582:33;;6666:2;6655:9;6651:18;6638:32;6689:18;6730:2;6722:6;6719:14;6716:34;;;6746:1;6743;6736:12;6716:34;6784:6;6773:9;6769:22;6759:32;;6829:7;6822:4;6818:2;6814:13;6810:27;6800:55;;6851:1;6848;6841:12;6800:55;6891:2;6878:16;6917:2;6909:6;6906:14;6903:34;;;6933:1;6930;6923:12;6903:34;6986:7;6981:2;6971:6;6968:1;6964:14;6960:2;6956:23;6952:32;6949:45;6946:65;;;7007:1;7004;6997:12;6946:65;7038:2;7034;7030:11;7020:21;;7060:6;7050:16;;;;;6389:683;;;;;:::o;7077:260::-;7145:6;7153;7206:2;7194:9;7185:7;7181:23;7177:32;7174:52;;;7222:1;7219;7212:12;7174:52;7245:29;7264:9;7245:29;:::i;:::-;7235:39;;7293:38;7327:2;7316:9;7312:18;7293:38;:::i;7342:254::-;7410:6;7418;7471:2;7459:9;7450:7;7446:23;7442:32;7439:52;;;7487:1;7484;7477:12;7439:52;7523:9;7510:23;7500:33;;7552:38;7586:2;7575:9;7571:18;7552:38;:::i;7601:380::-;7680:1;7676:12;;;;7723;;;7744:61;;7798:4;7790:6;7786:17;7776:27;;7744:61;7851:2;7843:6;7840:14;7820:18;7817:38;7814:161;;;7897:10;7892:3;7888:20;7885:1;7878:31;7932:4;7929:1;7922:15;7960:4;7957:1;7950:15;7814:161;;7601:380;;;:::o;8819:410::-;9021:2;9003:21;;;9060:2;9040:18;;;9033:30;9099:34;9094:2;9079:18;;9072:62;-1:-1:-1;;;9165:2:1;9150:18;;9143:44;9219:3;9204:19;;8819:410::o;9804:127::-;9865:10;9860:3;9856:20;9853:1;9846:31;9896:4;9893:1;9886:15;9920:4;9917:1;9910:15;9936:127;9997:10;9992:3;9988:20;9985:1;9978:31;10028:4;10025:1;10018:15;10052:4;10049:1;10042:15;10068:135;10107:3;-1:-1:-1;;10128:17:1;;10125:43;;;10148:18;;:::i;:::-;-1:-1:-1;10195:1:1;10184:13;;10068:135::o;10971:344::-;11173:2;11155:21;;;11212:2;11192:18;;;11185:30;-1:-1:-1;;;11246:2:1;11231:18;;11224:50;11306:2;11291:18;;10971:344::o;11320:128::-;11360:3;11391:1;11387:6;11384:1;11381:13;11378:39;;;11397:18;;:::i;:::-;-1:-1:-1;11433:9:1;;11320:128::o;11453:344::-;11655:2;11637:21;;;11694:2;11674:18;;;11667:30;-1:-1:-1;;;11728:2:1;11713:18;;11706:50;11788:2;11773:18;;11453:344::o;11802:168::-;11842:7;11908:1;11904;11900:6;11896:14;11893:1;11890:21;11885:1;11878:9;11871:17;11867:45;11864:71;;;11915:18;;:::i;:::-;-1:-1:-1;11955:9:1;;11802:168::o;13217:1527::-;13441:3;13479:6;13473:13;13505:4;13518:51;13562:6;13557:3;13552:2;13544:6;13540:15;13518:51;:::i;:::-;13632:13;;13591:16;;;;13654:55;13632:13;13591:16;13676:15;;;13654:55;:::i;:::-;13798:13;;13731:20;;;13771:1;;13858;13880:18;;;;13933;;;;13960:93;;14038:4;14028:8;14024:19;14012:31;;13960:93;14101:2;14091:8;14088:16;14068:18;14065:40;14062:167;;;-1:-1:-1;;;14128:33:1;;14184:4;14181:1;14174:15;14214:4;14135:3;14202:17;14062:167;14245:18;14272:110;;;;14396:1;14391:328;;;;14238:481;;14272:110;-1:-1:-1;;14307:24:1;;14293:39;;14352:20;;;;-1:-1:-1;14272:110:1;;14391:328;13164:1;13157:14;;;13201:4;13188:18;;14486:1;14500:169;14514:8;14511:1;14508:15;14500:169;;;14596:14;;14581:13;;;14574:37;14639:16;;;;14531:10;;14500:169;;;14504:3;;14700:8;14693:5;14689:20;14682:27;;14238:481;-1:-1:-1;14735:3:1;;13217:1527;-1:-1:-1;;;;;;;;;;;13217:1527:1:o;17661:125::-;17701:4;17729:1;17726;17723:8;17720:34;;;17734:18;;:::i;:::-;-1:-1:-1;17771:9:1;;17661:125::o;18145:414::-;18347:2;18329:21;;;18386:2;18366:18;;;18359:30;18425:34;18420:2;18405:18;;18398:62;-1:-1:-1;;;18491:2:1;18476:18;;18469:48;18549:3;18534:19;;18145:414::o;18564:127::-;18625:10;18620:3;18616:20;18613:1;18606:31;18656:4;18653:1;18646:15;18680:4;18677:1;18670:15;18696:120;18736:1;18762;18752:35;;18767:18;;:::i;:::-;-1:-1:-1;18801:9:1;;18696:120::o;18821:112::-;18853:1;18879;18869:35;;18884:18;;:::i;:::-;-1:-1:-1;18918:9:1;;18821:112::o;18938:489::-;-1:-1:-1;;;;;19207:15:1;;;19189:34;;19259:15;;19254:2;19239:18;;19232:43;19306:2;19291:18;;19284:34;;;19354:3;19349:2;19334:18;;19327:31;;;19132:4;;19375:46;;19401:19;;19393:6;19375:46;:::i;:::-;19367:54;18938:489;-1:-1:-1;;;;;;18938:489:1:o;19432:249::-;19501:6;19554:2;19542:9;19533:7;19529:23;19525:32;19522:52;;;19570:1;19567;19560:12;19522:52;19602:9;19596:16;19621:30;19645:5;19621:30;:::i
Swarm Source
ipfs://3dcf53e364296c22cd8c7486f1044a50c48fe574ef2def7881274c406708a1f3
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.