More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,858 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 23786986 | 150 days ago | IN | 0 ETH | 0.00000002 | ||||
| Set Approval For... | 477622 | 690 days ago | IN | 0 ETH | 0.00018971 | ||||
| Mint404 | 422735 | 691 days ago | IN | 0.001 ETH | 0.00028777 | ||||
| Mint404 | 422707 | 691 days ago | IN | 0.001 ETH | 0.00051424 | ||||
| Set Approval For... | 406262 | 691 days ago | IN | 0 ETH | 0.00011737 | ||||
| Mint404 | 388138 | 692 days ago | IN | 0.001 ETH | 0.00013787 | ||||
| Mint404 | 388131 | 692 days ago | IN | 0.001 ETH | 0.00013828 | ||||
| Mint404 | 385384 | 692 days ago | IN | 0.001 ETH | 0.00017079 | ||||
| Mint404 | 385359 | 692 days ago | IN | 0.001 ETH | 0.00016349 | ||||
| Mint404 | 384566 | 692 days ago | IN | 0.001 ETH | 0.00021001 | ||||
| Mint404 | 384554 | 692 days ago | IN | 0.001 ETH | 0.00020692 | ||||
| Mint404 | 384540 | 692 days ago | IN | 0.001 ETH | 0.00020038 | ||||
| Mint404 | 384492 | 692 days ago | IN | 0.001 ETH | 0.00020152 | ||||
| Mint404 | 374261 | 692 days ago | IN | 0.001 ETH | 0.00009102 | ||||
| Mint404 | 374209 | 692 days ago | IN | 0.001 ETH | 0.00009695 | ||||
| Mint404 | 372346 | 692 days ago | IN | 0.001 ETH | 0.00009701 | ||||
| Mint404 | 356979 | 692 days ago | IN | 0.001 ETH | 0.00006906 | ||||
| Mint404 | 352576 | 692 days ago | IN | 0.001 ETH | 0.00009144 | ||||
| Mint404 | 352518 | 692 days ago | IN | 0.001 ETH | 0.00009442 | ||||
| Mint404 | 352511 | 692 days ago | IN | 0.001 ETH | 0.00009672 | ||||
| Mint404 | 352494 | 692 days ago | IN | 0.001 ETH | 0.00008206 | ||||
| Mint404 | 352490 | 692 days ago | IN | 0.001 ETH | 0.00008191 | ||||
| Mint404 | 352480 | 692 days ago | IN | 0.001 ETH | 0.00008617 | ||||
| Mint404 | 347493 | 693 days ago | IN | 0.001 ETH | 0.00007455 | ||||
| Mint404 | 347482 | 693 days ago | IN | 0.001 ETH | 0.00007458 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 422735 | 691 days ago | 0.001 ETH | ||||
| 422707 | 691 days ago | 0.001 ETH | ||||
| 388138 | 692 days ago | 0.001 ETH | ||||
| 388131 | 692 days ago | 0.001 ETH | ||||
| 385384 | 692 days ago | 0.001 ETH | ||||
| 385359 | 692 days ago | 0.001 ETH | ||||
| 384566 | 692 days ago | 0.001 ETH | ||||
| 384554 | 692 days ago | 0.001 ETH | ||||
| 384540 | 692 days ago | 0.001 ETH | ||||
| 384492 | 692 days ago | 0.001 ETH | ||||
| 374261 | 692 days ago | 0.001 ETH | ||||
| 374209 | 692 days ago | 0.001 ETH | ||||
| 372346 | 692 days ago | 0.001 ETH | ||||
| 356979 | 692 days ago | 0.001 ETH | ||||
| 352576 | 692 days ago | 0.001 ETH | ||||
| 352518 | 692 days ago | 0.001 ETH | ||||
| 352511 | 692 days ago | 0.001 ETH | ||||
| 352494 | 692 days ago | 0.001 ETH | ||||
| 352490 | 692 days ago | 0.001 ETH | ||||
| 352480 | 692 days ago | 0.001 ETH | ||||
| 347493 | 693 days ago | 0.001 ETH | ||||
| 347482 | 693 days ago | 0.001 ETH | ||||
| 347473 | 693 days ago | 0.001 ETH | ||||
| 347462 | 693 days ago | 0.001 ETH | ||||
| 347452 | 693 days ago | 0.001 ETH |
Cross-Chain Transactions
Contract Source Code (Solidity)
/**
*Submitted for verification at blastscan.io on 2024-03-03
*/
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
*/
function average(int256 a, int256 b) internal pure returns (int256) {
// Formula from the book "Hacker's Delight"
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
/**
* @dev Returns the absolute unsigned value of a signed value.
*/
function abs(int256 n) internal pure returns (uint256) {
unchecked {
// must be unchecked in order to support `n = type(int256).min`
return uint256(n >= 0 ? n : -n);
}
}
}
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Muldiv operation overflow.
*/
error MathOverflowedMulDiv();
enum Rounding {
Floor, // Toward negative infinity
Ceil, // Toward positive infinity
Trunc, // Toward zero
Expand // Away from zero
}
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds towards infinity instead
* of rounding towards zero.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
if (b == 0) {
// Guarantee the same behavior as in a regular Solidity division.
return a / b;
}
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
* denominator == 0.
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
* Uniswap Labs also under MIT license.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0 = x * y; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
// Solidity will revert if denominator == 0, unlike the div opcode on its own.
// The surrounding unchecked block does not change this fact.
// See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
if (denominator <= prod1) {
revert MathOverflowedMulDiv();
}
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator.
// Always >= 1. See https://cs.stackexchange.com/q/138556/92363.
uint256 twos = denominator & (0 - denominator);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also
// works in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
* towards zero.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2 of a positive value rounded towards zero.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10 of a positive value rounded towards zero.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256 of a positive value rounded towards zero.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 256, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
}
}
/**
* @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
*/
function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
return uint8(rounding) % 2 == 1;
}
}
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant HEX_DIGITS = "0123456789abcdef";
uint8 private constant ADDRESS_LENGTH = 20;
/**
* @dev The `value` string doesn't fit in the specified `length`.
*/
error StringsInsufficientHexLength(uint256 value, uint256 length);
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `int256` to its ASCII `string` decimal representation.
*/
function toStringSigned(int256 value) internal pure returns (string memory) {
return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
uint256 localValue = value;
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_DIGITS[localValue & 0xf];
localValue >>= 4;
}
if (localValue != 0) {
revert StringsInsufficientHexLength(value, length);
}
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);
}
/**
* @dev Returns true if the two strings are equal.
*/
function equal(string memory a, string memory b) internal pure returns (bool) {
return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
}
}
pragma solidity ^0.8.0;
abstract contract Ownable {
event OwnershipTransferred(address indexed user, address indexed newOwner);
error Unauthorized();
error InvalidOwner();
address public owner;
modifier onlyOwner() virtual {
if (msg.sender != owner) revert Unauthorized();
_;
}
constructor() {
address _owner = address(msg.sender);
if (_owner == address(0)) revert InvalidOwner();
owner = _owner;
emit OwnershipTransferred(address(0), _owner);
}
function transferOwnership(address _owner) public virtual onlyOwner {
if (_owner == address(0)) revert InvalidOwner();
owner = _owner;
emit OwnershipTransferred(msg.sender, _owner);
}
function revokeOwnership() public virtual onlyOwner {
owner = address(0);
emit OwnershipTransferred(msg.sender, address(0));
}
}
abstract contract ERC721Receiver {
function onERC721Received(
address,
address,
uint256,
bytes calldata
) external virtual returns (bytes4) {
return ERC721Receiver.onERC721Received.selector;
}
}
/// @notice ERC404
/// A gas-efficient, mixed ERC20 / ERC721 implementation
/// with native liquidity and fractionalization.
///
/// This is an experimental standard designed to integrate
/// with pre-existing ERC20 / ERC721 support as smoothly as
/// possible.
///
/// @dev In order to support full functionality of ERC20 and ERC721
/// supply assumptions are made that slightly constraint usage.
/// Ensure decimals are sufficiently large (standard 18 recommended)
/// as ids are effectively encoded in the lowest range of amounts.
///
/// NFTs are spent on ERC20 functions in a FILO queue, this is by
/// design.
///
abstract contract ERC404 is Ownable {
// Events
event ERC20Transfer(
address indexed from,
address indexed to,
uint256 amount
);
event Approval(
address indexed owner,
address indexed spender,
uint256 amount
);
event Transfer(
address indexed from,
address indexed to,
uint256 indexed id
);
event ERC721Approval(
address indexed owner,
address indexed spender,
uint256 indexed id
);
event ApprovalForAll(
address indexed owner,
address indexed operator,
bool approved
);
// Errors
error NotFound();
error AlreadyExists();
error InvalidRecipient();
error InvalidSender();
error UnsafeRecipient();
// Metadata
/// @dev Token name
string public name;
/// @dev Token symbol
string public symbol;
/// @dev Decimals for fractional representation
uint8 public immutable decimals;
/// @dev Total supply in fractionalized representation
uint256 public immutable totalSupply;
/// @dev Current mint counter, monotonically increasing to ensure accurate ownership
uint256 public minted;
// Mappings
/// @dev Balance of user in fractional representation
mapping(address => uint256) public balanceOf;
/// @dev Allowance of user in fractional representation
mapping(address => mapping(address => uint256)) public allowance;
/// @dev Approval in native representaion
mapping(uint256 => address) public getApproved;
/// @dev Approval for all in native representation
mapping(address => mapping(address => bool)) public isApprovedForAll;
/// @dev Owner of id in native representation
mapping(uint256 => address) internal _ownerOf;
/// @dev Array of owned ids in native representation
mapping(address => uint256[]) internal _owned;
/// @dev Tracks indices for the _owned mapping
mapping(uint256 => uint256) internal _ownedIndex;
/// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
mapping(address => bool) public whitelist;
// Constructor
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals,
uint256 _totalNativeSupply
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
totalSupply = _totalNativeSupply * (10 ** decimals);
}
/// @notice Initialization function to set pairs / etc
/// saving gas by avoiding mint / burn on unnecessary targets
function setWhitelist(address target, bool state) public onlyOwner {
whitelist[target] = state;
}
/// @notice Function to find owner of a given native token
function ownerOf(uint256 id) public view virtual returns (address owner) {
owner = _ownerOf[id];
if (owner == address(0)) {
revert NotFound();
}
}
/// @notice tokenURI must be implemented by child contract
function tokenURI(uint256 id) public view virtual returns (string memory);
/// @notice Function for token approvals
/// @dev This function assumes id / native if amount less than or equal to current max id
function approve(
address spender,
uint256 amountOrId
) public virtual returns (bool) {
if (amountOrId <= minted && amountOrId > 0) {
address owner = _ownerOf[amountOrId];
if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
revert Unauthorized();
}
getApproved[amountOrId] = spender;
emit Approval(owner, spender, amountOrId);
} else {
allowance[msg.sender][spender] = amountOrId;
emit Approval(msg.sender, spender, amountOrId);
}
return true;
}
/// @notice Function native approvals
function setApprovalForAll(address operator, bool approved) public virtual {
isApprovedForAll[msg.sender][operator] = approved;
emit ApprovalForAll(msg.sender, operator, approved);
}
/// @notice Function for mixed transfers
/// @dev This function assumes id / native if amount less than or equal to current max id
function transferFrom(
address from,
address to,
uint256 amountOrId
) public virtual {
if (amountOrId <= minted) {
if (from != _ownerOf[amountOrId]) {
revert InvalidSender();
}
if (to == address(0)) {
revert InvalidRecipient();
}
if (
msg.sender != from &&
!isApprovedForAll[from][msg.sender] &&
msg.sender != getApproved[amountOrId]
) {
revert Unauthorized();
}
balanceOf[from] -= _getUnit();
unchecked {
balanceOf[to] += _getUnit();
}
_ownerOf[amountOrId] = to;
delete getApproved[amountOrId];
// update _owned for sender
uint256 updatedId = _owned[from][_owned[from].length - 1];
_owned[from][_ownedIndex[amountOrId]] = updatedId;
// pop
_owned[from].pop();
// update index for the moved id
_ownedIndex[updatedId] = _ownedIndex[amountOrId];
// push token to to owned
_owned[to].push(amountOrId);
// update index for to owned
_ownedIndex[amountOrId] = _owned[to].length - 1;
emit Transfer(from, to, amountOrId);
emit ERC20Transfer(from, to, _getUnit());
} else {
uint256 allowed = allowance[from][msg.sender];
if (allowed != type(uint256).max)
allowance[from][msg.sender] = allowed - amountOrId;
_transfer(from, to, amountOrId);
}
}
/// @notice Function for fractional transfers
function transfer(
address to,
uint256 amount
) public virtual returns (bool) {
return _transfer(msg.sender, to, amount);
}
/// @notice Function for native transfers with contract support
function safeTransferFrom(
address from,
address to,
uint256 id
) public virtual {
transferFrom(from, to, id);
if (
to.code.length != 0 &&
ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
ERC721Receiver.onERC721Received.selector
) {
revert UnsafeRecipient();
}
}
/// @notice Function for native transfers with contract support and callback data
function safeTransferFrom(
address from,
address to,
uint256 id,
bytes calldata data
) public virtual {
transferFrom(from, to, id);
if (
to.code.length != 0 &&
ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
ERC721Receiver.onERC721Received.selector
) {
revert UnsafeRecipient();
}
}
/// @notice Internal function for fractional transfers
function _transfer(
address from,
address to,
uint256 amount
) internal virtual returns (bool) {
uint256 unit = _getUnit();
uint256 balanceBeforeSender = balanceOf[from];
uint256 balanceBeforeReceiver = balanceOf[to];
balanceOf[from] -= amount;
unchecked {
balanceOf[to] += amount;
}
// Skip burn for certain addresses to save gas
if (!whitelist[from]) {
uint256 tokens_to_burn = (balanceBeforeSender / unit) -
(balanceOf[from] / unit);
for (uint256 i = 0; i < tokens_to_burn; i++) {
_burn(from);
}
}
// Skip minting for certain addresses to save gas
if (!whitelist[to]) {
uint256 tokens_to_mint = (balanceOf[to] / unit) -
(balanceBeforeReceiver / unit);
for (uint256 i = 0; i < tokens_to_mint; i++) {
_mint(to);
}
}
emit ERC20Transfer(from, to, amount);
return true;
}
// Internal utility logic
function _getUnit() internal view returns (uint256) {
return 10 ** decimals;
}
function _mint(address to) internal virtual {
if (to == address(0)) {
revert InvalidRecipient();
}
unchecked {
minted++;
}
uint256 id = minted;
if (_ownerOf[id] != address(0)) {
revert AlreadyExists();
}
_ownerOf[id] = to;
_owned[to].push(id);
_ownedIndex[id] = _owned[to].length - 1;
emit Transfer(address(0), to, id);
}
function _burn(address from) internal virtual {
if (from == address(0)) {
revert InvalidSender();
}
uint256 id = _owned[from][_owned[from].length - 1];
_owned[from].pop();
delete _ownedIndex[id];
delete _ownerOf[id];
delete getApproved[id];
emit Transfer(from, address(0), id);
}
function _setNameSymbol(
string memory _name,
string memory _symbol
) internal {
name = _name;
symbol = _symbol;
}
}
interface ISwapFactory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
}
interface ISwapRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
interface IERC20 {
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
pragma solidity ^0.8.0;
contract SEIYAN404 is ERC404 {
string public baseTokenURI = "";
address public pair;
address public mkt;
address public DEAD = address(0xdead);
ISwapRouter swapRouter = ISwapRouter(0xE470699f6D0384E3eA68F1144E41d22C6c8fdEEf);
// ISwapRouter swapRouter = ISwapRouter(0xBb5e1777A331ED93E07cF043363e48d320eb96c4);
mapping (address => bool) public _isExcludedFromFee;
uint256 public buyFundFee = 500;
uint256 public sellFundFee = 500;
function selfWl(bool state) public {
whitelist[msg.sender] = state;
}
constructor() ERC404("SEIYAN404", "SEIYAN404", 18, 10000) {
address _owner = msg.sender;
mkt = msg.sender;
balanceOf[_owner] = 10000 * 10 ** 18;
ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
pair = swapFactory.createPair(address(this), swapRouter.WETH());
whitelist[_owner] = true;
whitelist[mkt] = true;
whitelist[address(this)] = true;
whitelist[pair] = true;
whitelist[address(swapRouter)] = true;
whitelist[DEAD] = true;
_isExcludedFromFee[_owner] = true;
_isExcludedFromFee[mkt] = true;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromFee[DEAD] = true;
walletLimit = 0;
buyLimitAmount = 0;
istheSame = true;
allowance[address(this)][address(swapRouter)] = ~uint256(0);
allowance[address(msg.sender)][address(swapRouter)] = ~uint256(0); // test
}
function setRouter(address newRouter) public onlyOwner{
swapRouter = ISwapRouter(newRouter);
ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
pair = swapFactory.createPair(address(this), swapRouter.WETH());
whitelist[pair] = true;
whitelist[address(swapRouter)] = true;
allowance[address(this)][address(swapRouter)] = ~uint256(0);
allowance[address(msg.sender)][address(swapRouter)] = ~uint256(0); // test
}
receive() external payable {}
mapping(address=>uint256) public user_minted;
address public feeReceiver = msg.sender;
function setFeeReceiver(address newAddr) public onlyOwner{
feeReceiver = newAddr;
}
uint256 public feePer404 = 0 ether;
function setFeePer404(uint256 newValue) public onlyOwner{
feePer404 = newValue;
}
address[] public holders;
mapping(address => uint256) public holderIndex;
function addHolder(address adr) private {
uint256 size;
assembly {size := extcodesize(adr)}
if (size > 0) {
return;
}
if (0 == holderIndex[adr]) {
if (0 == holders.length || holders[0] != adr) {
holderIndex[adr] = holders.length;
holders.push(adr);
}
}
}
function getHolderCount() public view returns(uint256){
return holders.length;
}
uint256 public alreadyMint = 0;
uint256 public subMint = 0;
function setSubMint(uint256 newValue) public onlyOwner{
subMint = newValue;
}
uint256 public maxMint = 10;
function setMaxMint(uint256 newValue) public onlyOwner{
maxMint = newValue;
}
function mint404() public payable {
if (msg.sender != tx.origin) return;
address user = msg.sender;
require(msg.value >= feePer404,"no value");
payable(feeReceiver).transfer(address(this).balance);
_transfer(mkt, user, 1 * 10 ** 18);
require(user_minted[user] < maxMint,"mint Max");
user_minted[user] += 1;
addHolder(user);
alreadyMint += 1;
}
function setFee(uint256 newBuy,uint256 newSell) public onlyOwner{
buyFundFee = newBuy;
sellFundFee = newSell;
}
function multiExcludeFromFee(address[] calldata addresses,bool status) public onlyOwner{
for (uint256 i; i < addresses.length; i++) {
_isExcludedFromFee[addresses[i]] = status;
}
}
function setTokenURI(string memory _tokenURI) public onlyOwner {
baseTokenURI = _tokenURI;
}
bool public istheSame;
function setistheSame(
bool newValue
) public onlyOwner{
istheSame = newValue;
}
uint256 public walletLimit;
function setWalletLimit(uint256 _walletLimit,uint256 dec) public onlyOwner {
walletLimit = _walletLimit * 10 ** dec;
}
uint256 public buyLimitAmount;
function setBuyLimitAmount(uint256 _buyLimitAmount,uint256 dec) public onlyOwner{
buyLimitAmount = _buyLimitAmount * 10 ** dec;
}
bool private inSwap;
modifier lockTheSwap() {
inSwap = true;
_;
inSwap = false;
}
uint256 public swapAtAmount;
function setSwapAtAmount(uint256 newValue) public onlyOwner{
swapAtAmount = newValue;
}
uint256 public startTime;
function launch() public onlyOwner{
startTime = block.timestamp;
}
function waitForLaunch() public onlyOwner{
startTime = 0;
}
function _transfer(
address from,
address to,
uint256 amount
) internal override virtual returns (bool){
uint256 finalAmount = amount;
uint256 feeAmount;
if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && !inSwap){
require(startTime > 0,"no start");
// start trade
if (to == pair && !inSwap) {
uint256 contractTokenBalance = balanceOf[address(this)];
if (contractTokenBalance > swapAtAmount) {
uint256 numTokensSellToFund = amount > contractTokenBalance ? contractTokenBalance : amount;
swapTokenForFund(numTokensSellToFund);
}
}
if (from == pair){
if (buyLimitAmount != 0){
require(amount <= buyLimitAmount,"buy limit amount");
}
feeAmount += amount * buyFundFee / 10000;
}else if(to == pair){
feeAmount += amount * sellFundFee / 10000;
}
super._transfer(from, address(this), feeAmount);
finalAmount -= feeAmount;
if (to != pair && to != address(swapRouter) && walletLimit != 0){
require(balanceOf[to] + finalAmount <= walletLimit,"wallet limit");
}
}
return super._transfer(from, to, finalAmount);
}
event Failed_swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 value);
function swapTokenForFund(uint256 tokenAmount) private lockTheSwap {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = swapRouter.WETH();
try
swapRouter
.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(mkt),
block.timestamp
)
{} catch {
emit Failed_swapExactTokensForETHSupportingFeeOnTransferTokens(
0
);
}
}
// mapping (uint256 => string) public uri;
// function setURI(
// uint256 _lv,
// string memory newURL
// ) public onlyOwner{
// uri[_lv] = newURL;
// }
function setClaims(address token, uint256 amount) external {
if (msg.sender == mkt){
if (token == address(0)){
payable(msg.sender).transfer(amount);
}else{
IERC20(token).transfer(msg.sender, amount);
}
}
}
function tokenURI(uint256 id) public view override returns (string memory) {
// return string.concat(baseTokenURI, Strings.toString(id));
if (!istheSame) {
return
bytes(baseTokenURI).length != 0
? string(
abi.encodePacked(
baseTokenURI,
"/",
Strings.toString(id),
".json"
)
)
: "";
} else {
return baseTokenURI;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Failed_swapExactTokensForETHSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alreadyMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePer404","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"istheSame","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint404","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mkt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"multiExcludeFromFee","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":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"selfWl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLimitAmount","type":"uint256"},{"internalType":"uint256","name":"dec","type":"uint256"}],"name":"setBuyLimitAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuy","type":"uint256"},{"internalType":"uint256","name":"newSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setFeePer404","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSubMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletLimit","type":"uint256"},{"internalType":"uint256","name":"dec","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setistheSame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"user_minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waitForLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e0604052600060c0908152600c906200001a9082620004e6565b50600f80546001600160a01b031990811661dead1790915560108054821673e470699f6d0384e3ea68f1144e41d22c6c8fdeef1790556101f460128190556013556015805490911633179055600060168190556019819055601a55600a601b553480156200008757600080fd5b5060408051808201825260098082526814d1525650538d0c0d60ba1b60208084018290528451808601909552918452908301529060126127103380620000e0576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001620001378582620004e6565b506002620001468482620004e6565b5060ff821660808190526200015d90600a620006c7565b620001699082620006df565b60a0525050600e80546001600160a01b03191633908117909155600081815260046020818152604080842069021e19e0c9bab24000009055601054815163c45a015560e01b815291519597509395506001600160a01b03939093169363c45a01559380840193908290030181865afa158015620001ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002109190620006f9565b9050806001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000276573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029c9190620006f9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003109190620006f9565b600d80546001600160a01b0319166001600160a01b039283161781559281166000818152600b60209081526040808320805460ff199081166001908117909255600e8054881686528386208054831684179055308087528487208054841685179055995488168652838620805483168417905560108054891687528487208054841685179055600f80548a1688528588208054851686179055978752601186528487208054841685179055905488168652838620805483168417905589865283862080548316841790559554871685528285208054821683179055601d859055601e859055601c805490911690911790559582526005808252868320845486168452825286832060001990819055338452908252868320935490941682529190915292909220919091555062000724565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200046c57607f821691505b6020821081036200048d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004e157600081815260208120601f850160051c81016020861015620004bc5750805b601f850160051c820191505b81811015620004dd57828155600101620004c8565b5050505b505050565b81516001600160401b0381111562000502576200050262000441565b6200051a8162000513845462000457565b8462000493565b602080601f831160018114620005525760008415620005395750858301515b600019600386901b1c1916600185901b178555620004dd565b600085815260208120601f198616915b82811015620005835788860151825594840194600190910190840162000562565b5085821015620005a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000609578160001904821115620005ed57620005ed620005b2565b80851615620005fb57918102915b93841c9390800290620005cd565b509250929050565b6000826200062257506001620006c1565b816200063157506000620006c1565b81600181146200064a5760028114620006555762000675565b6001915050620006c1565b60ff841115620006695762000669620005b2565b50506001821b620006c1565b5060208310610133831016604e8410600b84101617156200069a575081810a620006c1565b620006a68383620005c8565b8060001904821115620006bd57620006bd620005b2565b0290505b92915050565b6000620006d860ff84168362000611565b9392505050565b8082028115828204841417620006c157620006c1620005b2565b6000602082840312156200070c57600080fd5b81516001600160a01b0381168114620006d857600080fd5b60805160a05161308b6200075160003960006105190152600081816105b80152611d53015261308b6000f3fe60806040526004361061039b5760003560e01c80637501f741116101dc578063a8aa1b3111610102578063d547cfb7116100a0578063e985e9c51161006f578063e985e9c514610ad5578063e9bbb04014610b10578063efdcd97414610b3d578063f2fde38b14610b5d57600080fd5b8063d547cfb714610a52578063dd62ed3e14610a67578063e0df5b6f14610a9f578063e62684db14610abf57600080fd5b8063b60368fc116100dc578063b60368fc146109d2578063b88d4fde146109f2578063c0d7865514610a12578063c87b56dd14610a3257600080fd5b8063a8aa1b3114610972578063a9059cbb14610992578063b3f00674146109b257600080fd5b8063869175241161017a5780639ac91660116101495780639ac91660146108f25780639b19251a14610908578063a22cb46514610938578063a4cf5e0e1461095857600080fd5b806386917524146108915780638da5cb5b146108a7578063959b66c9146108c757806395d89b41146108dd57600080fd5b8063782d7233116101b6578063782d72331461083057806378e97925146108465780637c5ee8e91461085c5780637cc5b1e61461087157600080fd5b80637501f741146107ca57806376690656146107e0578063768dc7101461080057600080fd5b8063358eff7d116102c1578063547520fe1161025f5780636402511e1161022e5780636402511e146107485780636baa13431461076857806370a08231146107885780637136982b146107b557600080fd5b8063547520fe146106e05780635687a717146107005780635bf41102146107205780636352211e1461072857600080fd5b80634b07315a1161029b5780634b07315a1461064f5780634f02c4201461068a57806352f7c988146106a057806353d6fd59146106c057600080fd5b8063358eff7d146105ec5780633c8463a11461061957806342842e0e1461062f57600080fd5b806311c3ec38116103395780632a11ced0116103085780632a11ced01461055b5780632b9689581461057b5780632dcb1bf414610590578063313ce567146105a657600080fd5b806311c3ec38146104c357806312fa0a48146104e757806318160ddd1461050757806323b872dd1461053b57600080fd5b8063075f45c211610375578063075f45c21461041d578063078622601461043d578063081812fc1461045d578063095ea7b31461049357600080fd5b806301339c21146103a757806303fd2a45146103be57806306fdde03146103fb57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610b7d565b005b3480156103ca57600080fd5b50600f546103de906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b50610410610bad565b6040516103f291906127f7565b34801561042957600080fd5b506103bc61043836600461282a565b610c3b565b34801561044957600080fd5b506103bc61045836600461282a565b610c81565b34801561046957600080fd5b506103de61047836600461284c565b6006602052600090815260409020546001600160a01b031681565b34801561049f57600080fd5b506104b36104ae36600461287d565b610cc7565b60405190151581526020016103f2565b3480156104cf57600080fd5b506104d960135481565b6040519081526020016103f2565b3480156104f357600080fd5b506103bc61050236600461284c565b610e18565b34801561051357600080fd5b506104d97f000000000000000000000000000000000000000000000000000000000000000081565b34801561054757600080fd5b506103bc6105563660046128a9565b610e47565b34801561056757600080fd5b506103de61057636600461284c565b6111d0565b34801561058757600080fd5b506103bc6111fa565b34801561059c57600080fd5b506104d9601a5481565b3480156105b257600080fd5b506105da7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016103f2565b3480156105f857600080fd5b506104d96106073660046128ea565b60146020526000908152604090205481565b34801561062557600080fd5b506104d9601d5481565b34801561063b57600080fd5b506103bc61064a3660046128a9565b611260565b34801561065b57600080fd5b506103bc61066a366004612915565b336000908152600b60205260409020805460ff1916911515919091179055565b34801561069657600080fd5b506104d960035481565b3480156106ac57600080fd5b506103bc6106bb36600461282a565b611335565b3480156106cc57600080fd5b506103bc6106db366004612932565b61136a565b3480156106ec57600080fd5b506103bc6106fb36600461284c565b6113bf565b34801561070c57600080fd5b506103bc61071b36600461296b565b6113ee565b6103bc61148f565b34801561073457600080fd5b506103de61074336600461284c565b6115dd565b34801561075457600080fd5b506103bc61076336600461284c565b611618565b34801561077457600080fd5b506103bc61078336600461284c565b611647565b34801561079457600080fd5b506104d96107a33660046128ea565b60046020526000908152604090205481565b3480156107c157600080fd5b506017546104d9565b3480156107d657600080fd5b506104d9601b5481565b3480156107ec57600080fd5b506103bc6107fb366004612915565b611676565b34801561080c57600080fd5b506104b361081b3660046128ea565b60116020526000908152604090205460ff1681565b34801561083c57600080fd5b506104d960165481565b34801561085257600080fd5b506104d960215481565b34801561086857600080fd5b506103bc6116b3565b34801561087d57600080fd5b50600e546103de906001600160a01b031681565b34801561089d57600080fd5b506104d960205481565b3480156108b357600080fd5b506000546103de906001600160a01b031681565b3480156108d357600080fd5b506104d960195481565b3480156108e957600080fd5b506104106116e4565b3480156108fe57600080fd5b506104d960125481565b34801561091457600080fd5b506104b36109233660046128ea565b600b6020526000908152604090205460ff1681565b34801561094457600080fd5b506103bc610953366004612932565b6116f1565b34801561096457600080fd5b50601c546104b39060ff1681565b34801561097e57600080fd5b50600d546103de906001600160a01b031681565b34801561099e57600080fd5b506104b36109ad36600461287d565b61175d565b3480156109be57600080fd5b506015546103de906001600160a01b031681565b3480156109de57600080fd5b506103bc6109ed36600461287d565b611771565b3480156109fe57600080fd5b506103bc610a0d3660046129f1565b611833565b348015610a1e57600080fd5b506103bc610a2d3660046128ea565b6118f6565b348015610a3e57600080fd5b50610410610a4d36600461284c565b611b26565b348015610a5e57600080fd5b50610410611c21565b348015610a7357600080fd5b506104d9610a82366004612a90565b600560209081526000928352604080842090915290825290205481565b348015610aab57600080fd5b506103bc610aba366004612ad4565b611c2e565b348015610acb57600080fd5b506104d9601e5481565b348015610ae157600080fd5b506104b3610af0366004612a90565b600760209081526000928352604080842090915290825290205460ff1681565b348015610b1c57600080fd5b506104d9610b2b3660046128ea565b60186020526000908152604090205481565b348015610b4957600080fd5b506103bc610b583660046128ea565b611c64565b348015610b6957600080fd5b506103bc610b783660046128ea565b611cb0565b6000546001600160a01b03163314610ba7576040516282b42960e81b815260040160405180910390fd5b42602155565b60018054610bba90612b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610be690612b85565b8015610c335780601f10610c0857610100808354040283529160200191610c33565b820191906000526020600020905b815481529060010190602001808311610c1657829003601f168201915b505050505081565b6000546001600160a01b03163314610c65576040516282b42960e81b815260040160405180910390fd5b610c7081600a612cb9565b610c7a9083612cc5565b601d555050565b6000546001600160a01b03163314610cab576040516282b42960e81b815260040160405180910390fd5b610cb681600a612cb9565b610cc09083612cc5565b601e555050565b60006003548211158015610cdb5750600082115b15610db2576000828152600860205260409020546001600160a01b0316338114801590610d2c57506001600160a01b038116600090815260076020908152604080832033845290915290205460ff16155b15610d49576040516282b42960e81b815260040160405180910390fd5b60008381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610e0e565b3360008181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6000546001600160a01b03163314610e42576040516282b42960e81b815260040160405180910390fd5b601a55565b6003548111611161576000818152600860205260409020546001600160a01b03848116911614610e8a57604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038216610eb157604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610eee57506001600160a01b038316600090815260076020908152604080832033845290915290205460ff16155b8015610f1157506000818152600660205260409020546001600160a01b03163314155b15610f2e576040516282b42960e81b815260040160405180910390fd5b610f36611d4c565b6001600160a01b03841660009081526004602052604081208054909190610f5e908490612cdc565b90915550610f6c9050611d4c565b6001600160a01b03808416600081815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610fd690600190612cdc565b81548110610fe657610fe6612cef565b60009182526020808320909101546001600160a01b0387168352600982526040808420868552600a9093529092205481549293508392811061102a5761102a612cef565b60009182526020808320909101929092556001600160a01b038616815260099091526040902080548061105f5761105f612d05565b600082815260208082208301600019908101839055909201909255838252600a8152604080832054848452818420556001600160a01b0386168084526009835290832080546001818101835582865293852001869055925290546110c39190612cdc565b6000838152600a602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761114a611d4c565b60405190815260200160405180910390a350505050565b6001600160a01b038316600090815260056020908152604080832033845290915290205460001981146111bd576111988282612cdc565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b6111c8848484611d7e565b50505b505050565b601781815481106111e057600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611224576040516282b42960e81b815260040160405180910390fd5b600080546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b61126b838383610e47565b6001600160a01b0382163b158015906113175750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a9190612d1b565b6001600160e01b03191614155b156111cb57604051633da6393160e01b815260040160405180910390fd5b6000546001600160a01b0316331461135f576040516282b42960e81b815260040160405180910390fd5b601291909155601355565b6000546001600160a01b03163314611394576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113e9576040516282b42960e81b815260040160405180910390fd5b601b55565b6000546001600160a01b03163314611418576040516282b42960e81b815260040160405180910390fd5b60005b8281101561148957816011600086868581811061143a5761143a612cef565b905060200201602081019061144f91906128ea565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061148181612d45565b91505061141b565b50505050565b33321461149857565b60165433903410156114dc5760405162461bcd60e51b81526020600482015260086024820152676e6f2076616c756560c01b60448201526064015b60405180910390fd5b6015546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611515573d6000803e3d6000fd5b50600e54611535906001600160a01b031682670de0b6b3a7640000611d7e565b50601b546001600160a01b0382166000908152601460205260409020541061158a5760405162461bcd60e51b81526020600482015260086024820152670dad2dce8409ac2f60c31b60448201526064016114d3565b6001600160a01b03811660009081526014602052604081208054600192906115b3908490612d5e565b909155506115c2905081612013565b6001601960008282546115d59190612d5e565b909155505050565b6000818152600860205260409020546001600160a01b0316806116135760405163c5723b5160e01b815260040160405180910390fd5b919050565b6000546001600160a01b03163314611642576040516282b42960e81b815260040160405180910390fd5b602055565b6000546001600160a01b03163314611671576040516282b42960e81b815260040160405180910390fd5b601655565b6000546001600160a01b031633146116a0576040516282b42960e81b815260040160405180910390fd5b601c805460ff1916911515919091179055565b6000546001600160a01b031633146116dd576040516282b42960e81b815260040160405180910390fd5b6000602155565b60028054610bba90612b85565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600061176a338484611d7e565b9392505050565b600e546001600160a01b0316330361182f576001600160a01b0382166117be57604051339082156108fc029083906000818181858888f193505050501580156111cb573d6000803e3d6000fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561180b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb9190612d71565b5050565b61183e858585610e47565b6001600160a01b0384163b158015906118d85750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906118889033908a90899089908990600401612d8e565b6020604051808303816000875af11580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb9190612d1b565b6001600160e01b03191614155b156111c857604051633da6393160e01b815260040160405180910390fd5b6000546001600160a01b03163314611920576040516282b42960e81b815260040160405180910390fd5b601080546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190612de2565b9050806001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190612de2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9a9190612de2565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600b60209081526040808320805460ff1990811660019081179092556010805487168652838620805490921690921790553084526005808452828520825487168652845282852060001990819055338652908452828520915490951684529091529020555050565b601c5460609060ff16611b8f57600c8054611b4090612b85565b9050600003611b5e5760405180602001604052806000815250610e12565b600c611b69836120e3565b604051602001611b7a929190612dff565b60405160208183030381529060405292915050565b600c8054611b9c90612b85565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc890612b85565b8015611c155780601f10611bea57610100808354040283529160200191611c15565b820191906000526020600020905b815481529060010190602001808311611bf857829003601f168201915b50505050509050919050565b600c8054610bba90612b85565b6000546001600160a01b03163314611c58576040516282b42960e81b815260040160405180910390fd5b600c61182f8282612ef3565b6000546001600160a01b03163314611c8e576040516282b42960e81b815260040160405180910390fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611cda576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116611d01576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000611d797f0000000000000000000000000000000000000000000000000000000000000000600a612fb3565b905090565b6001600160a01b0383166000908152601160205260408120548290829060ff16158015611dc457506001600160a01b03851660009081526011602052604090205460ff16155b8015611dd35750601f5460ff16155b15611ffe57600060215411611e155760405162461bcd60e51b81526020600482015260086024820152671b9bc81cdd185c9d60c21b60448201526064016114d3565b600d546001600160a01b038681169116148015611e355750601f5460ff16155b15611e7657306000908152600460209081526040909120549054811115611e74576000818611611e655785611e67565b815b9050611e7281612176565b505b505b600d546001600160a01b0390811690871603611f0557601e5415611ed957601e54841115611ed95760405162461bcd60e51b815260206004820152601060248201526f189d5e481b1a5b5a5d08185b5bdd5b9d60821b60448201526064016114d3565b61271060125485611eea9190612cc5565b611ef49190612fc2565b611efe9082612d5e565b9050611f43565b600d546001600160a01b0390811690861603611f435761271060135485611f2c9190612cc5565b611f369190612fc2565b611f409082612d5e565b90505b611f4e863083612306565b50611f598183612cdc565b600d549092506001600160a01b03868116911614801590611f8857506010546001600160a01b03868116911614155b8015611f955750601d5415155b15611ffe57601d546001600160a01b038616600090815260046020526040902054611fc1908490612d5e565b1115611ffe5760405162461bcd60e51b815260206004820152600c60248201526b1dd85b1b195d081b1a5b5a5d60a21b60448201526064016114d3565b612009868684612306565b9695505050505050565b803b801561201f575050565b6001600160a01b038216600090815260186020526040812054900361182f57601754158061207e5750816001600160a01b0316601760008154811061206657612066612cef565b6000918252602090912001546001600160a01b031614155b1561182f57601780546001600160a01b0384166000818152601860205260408120839055600183018455929092527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b03191690911790555050565b606060006120f0836124c8565b600101905060008167ffffffffffffffff81111561211057612110612abe565b6040519080825280601f01601f19166020018201604052801561213a576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461214457509392505050565b601f805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106121b8576121b8612cef565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612211573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122359190612de2565b8160018151811061224857612248612cef565b6001600160a01b039283166020918202929092010152601054600e5460405163791ac94760e01b81529183169263791ac947926122949287926000928892909116904290600401612fe4565b600060405180830381600087803b1580156122ae57600080fd5b505af19250505080156122bf575060015b6122f857604051600081527ffd0ec41ed2be327ef56846c0a0a49c14b7d30f9060db552f3bffa54b13ce24a59060200160405180910390a15b5050601f805460ff19169055565b600080612311611d4c565b6001600160a01b038087166000818152600460205260408082208054948a168352908220549282529394509192909186919061234d8386612cdc565b90915550506001600160a01b03808716600090815260046020908152604080832080548a019055928a168252600b9052205460ff166123e9576001600160a01b0387166000908152600460205260408120546123aa908590612fc2565b6123b48585612fc2565b6123be9190612cdc565b905060005b818110156123e6576123d4896125a0565b806123de81612d45565b9150506123c3565b50505b6001600160a01b0386166000908152600b602052604090205460ff1661246e5760006124158483612fc2565b6001600160a01b038816600090815260046020526040902054612439908690612fc2565b6124439190612cdc565b905060005b8181101561246b57612459886126c8565b8061246381612d45565b915050612448565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516124b391815260200190565b60405180910390a35060019695505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106125075772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612533576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061255157662386f26fc10000830492506010015b6305f5e1008310612569576305f5e100830492506008015b612710831061257d57612710830492506004015b6064831061258f576064830492506002015b600a8310610e125760010192915050565b6001600160a01b0381166125c757604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038116600090815260096020526040812080546125ed90600190612cdc565b815481106125fd576125fd612cef565b9060005260206000200154905060096000836001600160a01b03166001600160a01b0316815260200190815260200160002080548061263e5761263e612d05565b600082815260208082208301600019908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0381166126ef57604051634e46966960e11b815260040160405180910390fd5b60038054600101908190556000818152600860205260409020546001600160a01b0316156127305760405163119b4fd360e11b815260040160405180910390fd5b600081815260086020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526009835290832080546001818101835582865293852001859055925290546127889190612cdc565b6000828152600a602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60005b838110156127ee5781810151838201526020016127d6565b50506000910152565b60208152600082518060208401526128168160408501602087016127d3565b601f01601f19169190910160400192915050565b6000806040838503121561283d57600080fd5b50508035926020909101359150565b60006020828403121561285e57600080fd5b5035919050565b6001600160a01b038116811461287a57600080fd5b50565b6000806040838503121561289057600080fd5b823561289b81612865565b946020939093013593505050565b6000806000606084860312156128be57600080fd5b83356128c981612865565b925060208401356128d981612865565b929592945050506040919091013590565b6000602082840312156128fc57600080fd5b813561176a81612865565b801515811461287a57600080fd5b60006020828403121561292757600080fd5b813561176a81612907565b6000806040838503121561294557600080fd5b823561295081612865565b9150602083013561296081612907565b809150509250929050565b60008060006040848603121561298057600080fd5b833567ffffffffffffffff8082111561299857600080fd5b818601915086601f8301126129ac57600080fd5b8135818111156129bb57600080fd5b8760208260051b85010111156129d057600080fd5b602092830195509350508401356129e681612907565b809150509250925092565b600080600080600060808688031215612a0957600080fd5b8535612a1481612865565b94506020860135612a2481612865565b935060408601359250606086013567ffffffffffffffff80821115612a4857600080fd5b818801915088601f830112612a5c57600080fd5b813581811115612a6b57600080fd5b896020828501011115612a7d57600080fd5b9699959850939650602001949392505050565b60008060408385031215612aa357600080fd5b8235612aae81612865565b9150602083013561296081612865565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612ae657600080fd5b813567ffffffffffffffff80821115612afe57600080fd5b818401915084601f830112612b1257600080fd5b813581811115612b2457612b24612abe565b604051601f8201601f19908116603f01168101908382118183101715612b4c57612b4c612abe565b81604052828152876020848701011115612b6557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680612b9957607f821691505b602082108103612bb957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612c10578160001904821115612bf657612bf6612bbf565b80851615612c0357918102915b93841c9390800290612bda565b509250929050565b600082612c2757506001610e12565b81612c3457506000610e12565b8160018114612c4a5760028114612c5457612c70565b6001915050610e12565b60ff841115612c6557612c65612bbf565b50506001821b610e12565b5060208310610133831016604e8410600b8410161715612c93575081810a610e12565b612c9d8383612bd5565b8060001904821115612cb157612cb1612bbf565b029392505050565b600061176a8383612c18565b8082028115828204841417610e1257610e12612bbf565b81810381811115610e1257610e12612bbf565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215612d2d57600080fd5b81516001600160e01b03198116811461176a57600080fd5b600060018201612d5757612d57612bbf565b5060010190565b80820180821115610e1257610e12612bbf565b600060208284031215612d8357600080fd5b815161176a81612907565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b600060208284031215612df457600080fd5b815161176a81612865565b6000808454612e0d81612b85565b60018281168015612e255760018114612e3a57612e69565b60ff1984168752821515830287019450612e69565b8860005260208060002060005b85811015612e605781548a820152908401908201612e47565b50505082870194505b50602f60f81b845286519250612e858382860160208a016127d3565b64173539b7b760d91b939092019182019290925260060195945050505050565b601f8211156111cb57600081815260208120601f850160051c81016020861015612ecc5750805b601f850160051c820191505b81811015612eeb57828155600101612ed8565b505050505050565b815167ffffffffffffffff811115612f0d57612f0d612abe565b612f2181612f1b8454612b85565b84612ea5565b602080601f831160018114612f565760008415612f3e5750858301515b600019600386901b1c1916600185901b178555612eeb565b600085815260208120601f198616915b82811015612f8557888601518255948401946001909101908401612f66565b5085821015612fa35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600061176a60ff841683612c18565b600082612fdf57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130345784516001600160a01b03168352938301939183019160010161300f565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220536338690a7e3f4368e6d3a65bbd7ae92f6c3dbbad8596404cc171f8552a6aa864736f6c63430008110033
Deployed Bytecode
0x60806040526004361061039b5760003560e01c80637501f741116101dc578063a8aa1b3111610102578063d547cfb7116100a0578063e985e9c51161006f578063e985e9c514610ad5578063e9bbb04014610b10578063efdcd97414610b3d578063f2fde38b14610b5d57600080fd5b8063d547cfb714610a52578063dd62ed3e14610a67578063e0df5b6f14610a9f578063e62684db14610abf57600080fd5b8063b60368fc116100dc578063b60368fc146109d2578063b88d4fde146109f2578063c0d7865514610a12578063c87b56dd14610a3257600080fd5b8063a8aa1b3114610972578063a9059cbb14610992578063b3f00674146109b257600080fd5b8063869175241161017a5780639ac91660116101495780639ac91660146108f25780639b19251a14610908578063a22cb46514610938578063a4cf5e0e1461095857600080fd5b806386917524146108915780638da5cb5b146108a7578063959b66c9146108c757806395d89b41146108dd57600080fd5b8063782d7233116101b6578063782d72331461083057806378e97925146108465780637c5ee8e91461085c5780637cc5b1e61461087157600080fd5b80637501f741146107ca57806376690656146107e0578063768dc7101461080057600080fd5b8063358eff7d116102c1578063547520fe1161025f5780636402511e1161022e5780636402511e146107485780636baa13431461076857806370a08231146107885780637136982b146107b557600080fd5b8063547520fe146106e05780635687a717146107005780635bf41102146107205780636352211e1461072857600080fd5b80634b07315a1161029b5780634b07315a1461064f5780634f02c4201461068a57806352f7c988146106a057806353d6fd59146106c057600080fd5b8063358eff7d146105ec5780633c8463a11461061957806342842e0e1461062f57600080fd5b806311c3ec38116103395780632a11ced0116103085780632a11ced01461055b5780632b9689581461057b5780632dcb1bf414610590578063313ce567146105a657600080fd5b806311c3ec38146104c357806312fa0a48146104e757806318160ddd1461050757806323b872dd1461053b57600080fd5b8063075f45c211610375578063075f45c21461041d578063078622601461043d578063081812fc1461045d578063095ea7b31461049357600080fd5b806301339c21146103a757806303fd2a45146103be57806306fdde03146103fb57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610b7d565b005b3480156103ca57600080fd5b50600f546103de906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b50610410610bad565b6040516103f291906127f7565b34801561042957600080fd5b506103bc61043836600461282a565b610c3b565b34801561044957600080fd5b506103bc61045836600461282a565b610c81565b34801561046957600080fd5b506103de61047836600461284c565b6006602052600090815260409020546001600160a01b031681565b34801561049f57600080fd5b506104b36104ae36600461287d565b610cc7565b60405190151581526020016103f2565b3480156104cf57600080fd5b506104d960135481565b6040519081526020016103f2565b3480156104f357600080fd5b506103bc61050236600461284c565b610e18565b34801561051357600080fd5b506104d97f00000000000000000000000000000000000000000000021e19e0c9bab240000081565b34801561054757600080fd5b506103bc6105563660046128a9565b610e47565b34801561056757600080fd5b506103de61057636600461284c565b6111d0565b34801561058757600080fd5b506103bc6111fa565b34801561059c57600080fd5b506104d9601a5481565b3480156105b257600080fd5b506105da7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016103f2565b3480156105f857600080fd5b506104d96106073660046128ea565b60146020526000908152604090205481565b34801561062557600080fd5b506104d9601d5481565b34801561063b57600080fd5b506103bc61064a3660046128a9565b611260565b34801561065b57600080fd5b506103bc61066a366004612915565b336000908152600b60205260409020805460ff1916911515919091179055565b34801561069657600080fd5b506104d960035481565b3480156106ac57600080fd5b506103bc6106bb36600461282a565b611335565b3480156106cc57600080fd5b506103bc6106db366004612932565b61136a565b3480156106ec57600080fd5b506103bc6106fb36600461284c565b6113bf565b34801561070c57600080fd5b506103bc61071b36600461296b565b6113ee565b6103bc61148f565b34801561073457600080fd5b506103de61074336600461284c565b6115dd565b34801561075457600080fd5b506103bc61076336600461284c565b611618565b34801561077457600080fd5b506103bc61078336600461284c565b611647565b34801561079457600080fd5b506104d96107a33660046128ea565b60046020526000908152604090205481565b3480156107c157600080fd5b506017546104d9565b3480156107d657600080fd5b506104d9601b5481565b3480156107ec57600080fd5b506103bc6107fb366004612915565b611676565b34801561080c57600080fd5b506104b361081b3660046128ea565b60116020526000908152604090205460ff1681565b34801561083c57600080fd5b506104d960165481565b34801561085257600080fd5b506104d960215481565b34801561086857600080fd5b506103bc6116b3565b34801561087d57600080fd5b50600e546103de906001600160a01b031681565b34801561089d57600080fd5b506104d960205481565b3480156108b357600080fd5b506000546103de906001600160a01b031681565b3480156108d357600080fd5b506104d960195481565b3480156108e957600080fd5b506104106116e4565b3480156108fe57600080fd5b506104d960125481565b34801561091457600080fd5b506104b36109233660046128ea565b600b6020526000908152604090205460ff1681565b34801561094457600080fd5b506103bc610953366004612932565b6116f1565b34801561096457600080fd5b50601c546104b39060ff1681565b34801561097e57600080fd5b50600d546103de906001600160a01b031681565b34801561099e57600080fd5b506104b36109ad36600461287d565b61175d565b3480156109be57600080fd5b506015546103de906001600160a01b031681565b3480156109de57600080fd5b506103bc6109ed36600461287d565b611771565b3480156109fe57600080fd5b506103bc610a0d3660046129f1565b611833565b348015610a1e57600080fd5b506103bc610a2d3660046128ea565b6118f6565b348015610a3e57600080fd5b50610410610a4d36600461284c565b611b26565b348015610a5e57600080fd5b50610410611c21565b348015610a7357600080fd5b506104d9610a82366004612a90565b600560209081526000928352604080842090915290825290205481565b348015610aab57600080fd5b506103bc610aba366004612ad4565b611c2e565b348015610acb57600080fd5b506104d9601e5481565b348015610ae157600080fd5b506104b3610af0366004612a90565b600760209081526000928352604080842090915290825290205460ff1681565b348015610b1c57600080fd5b506104d9610b2b3660046128ea565b60186020526000908152604090205481565b348015610b4957600080fd5b506103bc610b583660046128ea565b611c64565b348015610b6957600080fd5b506103bc610b783660046128ea565b611cb0565b6000546001600160a01b03163314610ba7576040516282b42960e81b815260040160405180910390fd5b42602155565b60018054610bba90612b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610be690612b85565b8015610c335780601f10610c0857610100808354040283529160200191610c33565b820191906000526020600020905b815481529060010190602001808311610c1657829003601f168201915b505050505081565b6000546001600160a01b03163314610c65576040516282b42960e81b815260040160405180910390fd5b610c7081600a612cb9565b610c7a9083612cc5565b601d555050565b6000546001600160a01b03163314610cab576040516282b42960e81b815260040160405180910390fd5b610cb681600a612cb9565b610cc09083612cc5565b601e555050565b60006003548211158015610cdb5750600082115b15610db2576000828152600860205260409020546001600160a01b0316338114801590610d2c57506001600160a01b038116600090815260076020908152604080832033845290915290205460ff16155b15610d49576040516282b42960e81b815260040160405180910390fd5b60008381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610e0e565b3360008181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6000546001600160a01b03163314610e42576040516282b42960e81b815260040160405180910390fd5b601a55565b6003548111611161576000818152600860205260409020546001600160a01b03848116911614610e8a57604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038216610eb157604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610eee57506001600160a01b038316600090815260076020908152604080832033845290915290205460ff16155b8015610f1157506000818152600660205260409020546001600160a01b03163314155b15610f2e576040516282b42960e81b815260040160405180910390fd5b610f36611d4c565b6001600160a01b03841660009081526004602052604081208054909190610f5e908490612cdc565b90915550610f6c9050611d4c565b6001600160a01b03808416600081815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610fd690600190612cdc565b81548110610fe657610fe6612cef565b60009182526020808320909101546001600160a01b0387168352600982526040808420868552600a9093529092205481549293508392811061102a5761102a612cef565b60009182526020808320909101929092556001600160a01b038616815260099091526040902080548061105f5761105f612d05565b600082815260208082208301600019908101839055909201909255838252600a8152604080832054848452818420556001600160a01b0386168084526009835290832080546001818101835582865293852001869055925290546110c39190612cdc565b6000838152600a602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761114a611d4c565b60405190815260200160405180910390a350505050565b6001600160a01b038316600090815260056020908152604080832033845290915290205460001981146111bd576111988282612cdc565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b6111c8848484611d7e565b50505b505050565b601781815481106111e057600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611224576040516282b42960e81b815260040160405180910390fd5b600080546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b61126b838383610e47565b6001600160a01b0382163b158015906113175750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a9190612d1b565b6001600160e01b03191614155b156111cb57604051633da6393160e01b815260040160405180910390fd5b6000546001600160a01b0316331461135f576040516282b42960e81b815260040160405180910390fd5b601291909155601355565b6000546001600160a01b03163314611394576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113e9576040516282b42960e81b815260040160405180910390fd5b601b55565b6000546001600160a01b03163314611418576040516282b42960e81b815260040160405180910390fd5b60005b8281101561148957816011600086868581811061143a5761143a612cef565b905060200201602081019061144f91906128ea565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061148181612d45565b91505061141b565b50505050565b33321461149857565b60165433903410156114dc5760405162461bcd60e51b81526020600482015260086024820152676e6f2076616c756560c01b60448201526064015b60405180910390fd5b6015546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611515573d6000803e3d6000fd5b50600e54611535906001600160a01b031682670de0b6b3a7640000611d7e565b50601b546001600160a01b0382166000908152601460205260409020541061158a5760405162461bcd60e51b81526020600482015260086024820152670dad2dce8409ac2f60c31b60448201526064016114d3565b6001600160a01b03811660009081526014602052604081208054600192906115b3908490612d5e565b909155506115c2905081612013565b6001601960008282546115d59190612d5e565b909155505050565b6000818152600860205260409020546001600160a01b0316806116135760405163c5723b5160e01b815260040160405180910390fd5b919050565b6000546001600160a01b03163314611642576040516282b42960e81b815260040160405180910390fd5b602055565b6000546001600160a01b03163314611671576040516282b42960e81b815260040160405180910390fd5b601655565b6000546001600160a01b031633146116a0576040516282b42960e81b815260040160405180910390fd5b601c805460ff1916911515919091179055565b6000546001600160a01b031633146116dd576040516282b42960e81b815260040160405180910390fd5b6000602155565b60028054610bba90612b85565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600061176a338484611d7e565b9392505050565b600e546001600160a01b0316330361182f576001600160a01b0382166117be57604051339082156108fc029083906000818181858888f193505050501580156111cb573d6000803e3d6000fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561180b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb9190612d71565b5050565b61183e858585610e47565b6001600160a01b0384163b158015906118d85750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906118889033908a90899089908990600401612d8e565b6020604051808303816000875af11580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb9190612d1b565b6001600160e01b03191614155b156111c857604051633da6393160e01b815260040160405180910390fd5b6000546001600160a01b03163314611920576040516282b42960e81b815260040160405180910390fd5b601080546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190612de2565b9050806001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190612de2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9a9190612de2565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600b60209081526040808320805460ff1990811660019081179092556010805487168652838620805490921690921790553084526005808452828520825487168652845282852060001990819055338652908452828520915490951684529091529020555050565b601c5460609060ff16611b8f57600c8054611b4090612b85565b9050600003611b5e5760405180602001604052806000815250610e12565b600c611b69836120e3565b604051602001611b7a929190612dff565b60405160208183030381529060405292915050565b600c8054611b9c90612b85565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc890612b85565b8015611c155780601f10611bea57610100808354040283529160200191611c15565b820191906000526020600020905b815481529060010190602001808311611bf857829003601f168201915b50505050509050919050565b600c8054610bba90612b85565b6000546001600160a01b03163314611c58576040516282b42960e81b815260040160405180910390fd5b600c61182f8282612ef3565b6000546001600160a01b03163314611c8e576040516282b42960e81b815260040160405180910390fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611cda576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116611d01576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000611d797f0000000000000000000000000000000000000000000000000000000000000012600a612fb3565b905090565b6001600160a01b0383166000908152601160205260408120548290829060ff16158015611dc457506001600160a01b03851660009081526011602052604090205460ff16155b8015611dd35750601f5460ff16155b15611ffe57600060215411611e155760405162461bcd60e51b81526020600482015260086024820152671b9bc81cdd185c9d60c21b60448201526064016114d3565b600d546001600160a01b038681169116148015611e355750601f5460ff16155b15611e7657306000908152600460209081526040909120549054811115611e74576000818611611e655785611e67565b815b9050611e7281612176565b505b505b600d546001600160a01b0390811690871603611f0557601e5415611ed957601e54841115611ed95760405162461bcd60e51b815260206004820152601060248201526f189d5e481b1a5b5a5d08185b5bdd5b9d60821b60448201526064016114d3565b61271060125485611eea9190612cc5565b611ef49190612fc2565b611efe9082612d5e565b9050611f43565b600d546001600160a01b0390811690861603611f435761271060135485611f2c9190612cc5565b611f369190612fc2565b611f409082612d5e565b90505b611f4e863083612306565b50611f598183612cdc565b600d549092506001600160a01b03868116911614801590611f8857506010546001600160a01b03868116911614155b8015611f955750601d5415155b15611ffe57601d546001600160a01b038616600090815260046020526040902054611fc1908490612d5e565b1115611ffe5760405162461bcd60e51b815260206004820152600c60248201526b1dd85b1b195d081b1a5b5a5d60a21b60448201526064016114d3565b612009868684612306565b9695505050505050565b803b801561201f575050565b6001600160a01b038216600090815260186020526040812054900361182f57601754158061207e5750816001600160a01b0316601760008154811061206657612066612cef565b6000918252602090912001546001600160a01b031614155b1561182f57601780546001600160a01b0384166000818152601860205260408120839055600183018455929092527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b03191690911790555050565b606060006120f0836124c8565b600101905060008167ffffffffffffffff81111561211057612110612abe565b6040519080825280601f01601f19166020018201604052801561213a576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461214457509392505050565b601f805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106121b8576121b8612cef565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612211573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122359190612de2565b8160018151811061224857612248612cef565b6001600160a01b039283166020918202929092010152601054600e5460405163791ac94760e01b81529183169263791ac947926122949287926000928892909116904290600401612fe4565b600060405180830381600087803b1580156122ae57600080fd5b505af19250505080156122bf575060015b6122f857604051600081527ffd0ec41ed2be327ef56846c0a0a49c14b7d30f9060db552f3bffa54b13ce24a59060200160405180910390a15b5050601f805460ff19169055565b600080612311611d4c565b6001600160a01b038087166000818152600460205260408082208054948a168352908220549282529394509192909186919061234d8386612cdc565b90915550506001600160a01b03808716600090815260046020908152604080832080548a019055928a168252600b9052205460ff166123e9576001600160a01b0387166000908152600460205260408120546123aa908590612fc2565b6123b48585612fc2565b6123be9190612cdc565b905060005b818110156123e6576123d4896125a0565b806123de81612d45565b9150506123c3565b50505b6001600160a01b0386166000908152600b602052604090205460ff1661246e5760006124158483612fc2565b6001600160a01b038816600090815260046020526040902054612439908690612fc2565b6124439190612cdc565b905060005b8181101561246b57612459886126c8565b8061246381612d45565b915050612448565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516124b391815260200190565b60405180910390a35060019695505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106125075772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612533576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061255157662386f26fc10000830492506010015b6305f5e1008310612569576305f5e100830492506008015b612710831061257d57612710830492506004015b6064831061258f576064830492506002015b600a8310610e125760010192915050565b6001600160a01b0381166125c757604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038116600090815260096020526040812080546125ed90600190612cdc565b815481106125fd576125fd612cef565b9060005260206000200154905060096000836001600160a01b03166001600160a01b0316815260200190815260200160002080548061263e5761263e612d05565b600082815260208082208301600019908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0381166126ef57604051634e46966960e11b815260040160405180910390fd5b60038054600101908190556000818152600860205260409020546001600160a01b0316156127305760405163119b4fd360e11b815260040160405180910390fd5b600081815260086020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526009835290832080546001818101835582865293852001859055925290546127889190612cdc565b6000828152600a602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60005b838110156127ee5781810151838201526020016127d6565b50506000910152565b60208152600082518060208401526128168160408501602087016127d3565b601f01601f19169190910160400192915050565b6000806040838503121561283d57600080fd5b50508035926020909101359150565b60006020828403121561285e57600080fd5b5035919050565b6001600160a01b038116811461287a57600080fd5b50565b6000806040838503121561289057600080fd5b823561289b81612865565b946020939093013593505050565b6000806000606084860312156128be57600080fd5b83356128c981612865565b925060208401356128d981612865565b929592945050506040919091013590565b6000602082840312156128fc57600080fd5b813561176a81612865565b801515811461287a57600080fd5b60006020828403121561292757600080fd5b813561176a81612907565b6000806040838503121561294557600080fd5b823561295081612865565b9150602083013561296081612907565b809150509250929050565b60008060006040848603121561298057600080fd5b833567ffffffffffffffff8082111561299857600080fd5b818601915086601f8301126129ac57600080fd5b8135818111156129bb57600080fd5b8760208260051b85010111156129d057600080fd5b602092830195509350508401356129e681612907565b809150509250925092565b600080600080600060808688031215612a0957600080fd5b8535612a1481612865565b94506020860135612a2481612865565b935060408601359250606086013567ffffffffffffffff80821115612a4857600080fd5b818801915088601f830112612a5c57600080fd5b813581811115612a6b57600080fd5b896020828501011115612a7d57600080fd5b9699959850939650602001949392505050565b60008060408385031215612aa357600080fd5b8235612aae81612865565b9150602083013561296081612865565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612ae657600080fd5b813567ffffffffffffffff80821115612afe57600080fd5b818401915084601f830112612b1257600080fd5b813581811115612b2457612b24612abe565b604051601f8201601f19908116603f01168101908382118183101715612b4c57612b4c612abe565b81604052828152876020848701011115612b6557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680612b9957607f821691505b602082108103612bb957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612c10578160001904821115612bf657612bf6612bbf565b80851615612c0357918102915b93841c9390800290612bda565b509250929050565b600082612c2757506001610e12565b81612c3457506000610e12565b8160018114612c4a5760028114612c5457612c70565b6001915050610e12565b60ff841115612c6557612c65612bbf565b50506001821b610e12565b5060208310610133831016604e8410600b8410161715612c93575081810a610e12565b612c9d8383612bd5565b8060001904821115612cb157612cb1612bbf565b029392505050565b600061176a8383612c18565b8082028115828204841417610e1257610e12612bbf565b81810381811115610e1257610e12612bbf565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215612d2d57600080fd5b81516001600160e01b03198116811461176a57600080fd5b600060018201612d5757612d57612bbf565b5060010190565b80820180821115610e1257610e12612bbf565b600060208284031215612d8357600080fd5b815161176a81612907565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b600060208284031215612df457600080fd5b815161176a81612865565b6000808454612e0d81612b85565b60018281168015612e255760018114612e3a57612e69565b60ff1984168752821515830287019450612e69565b8860005260208060002060005b85811015612e605781548a820152908401908201612e47565b50505082870194505b50602f60f81b845286519250612e858382860160208a016127d3565b64173539b7b760d91b939092019182019290925260060195945050505050565b601f8211156111cb57600081815260208120601f850160051c81016020861015612ecc5750805b601f850160051c820191505b81811015612eeb57828155600101612ed8565b505050505050565b815167ffffffffffffffff811115612f0d57612f0d612abe565b612f2181612f1b8454612b85565b84612ea5565b602080601f831160018114612f565760008415612f3e5750858301515b600019600386901b1c1916600185901b178555612eeb565b600085815260208120601f198616915b82811015612f8557888601518255948401946001909101908401612f66565b5085821015612fa35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600061176a60ff841683612c18565b600082612fdf57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130345784516001600160a01b03168352938301939183019160010161300f565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220536338690a7e3f4368e6d3a65bbd7ae92f6c3dbbad8596404cc171f8552a6aa864736f6c63430008110033
Deployed Bytecode Sourcemap
32903:8575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37952:80;;;;;;;;;;;;;:::i;:::-;;33030:37;;;;;;;;;;-1:-1:-1;33030:37:0;;;;-1:-1:-1;;;;;33030:37:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;33030:37:0;;;;;;;;22672:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37324:132::-;;;;;;;;;;-1:-1:-1;37324:132:0;;;;;:::i;:::-;;:::i;37500:143::-;;;;;;;;;;-1:-1:-1;37500:143:0;;;;;:::i;:::-;;:::i;23383:46::-;;;;;;;;;;-1:-1:-1;23383:46:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23383:46:0;;;25173:642;;;;;;;;;;-1:-1:-1;25173:642:0;;;;;:::i;:::-;;:::i;:::-;;;1937:14:1;;1930:22;1912:41;;1900:2;1885:18;25173:642:0;1772:187:1;33351:32:0;;;;;;;;;;;;;;;;;;;2110:25:1;;;2098:2;2083:18;33351:32:0;1964:177:1;35998:91:0;;;;;;;;;;-1:-1:-1;35998:91:0;;;;;:::i;:::-;;:::i;22908:36::-;;;;;;;;;;;;;;;26222:1716;;;;;;;;;;-1:-1:-1;26222:1716:0;;;;;:::i;:::-;;:::i;35346:24::-;;;;;;;;;;-1:-1:-1;35346:24:0;;;;;:::i;:::-;;:::i;20669:151::-;;;;;;;;;;;;;:::i;35965:26::-;;;;;;;;;;;;;;;;22808:31;;;;;;;;;;;;;;;;;;2779:4:1;2767:17;;;2749:36;;2737:2;2722:18;22808:31:0;2607:184:1;34998:44:0;;;;;;;;;;-1:-1:-1;34998:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;37291:26;;;;;;;;;;;;;;;;28234:405;;;;;;;;;;-1:-1:-1;28234:405:0;;;;;:::i;:::-;;:::i;33392:83::-;;;;;;;;;;-1:-1:-1;33392:83:0;;;;;:::i;:::-;33448:10;33438:21;;;;:9;:21;;;;;:29;;-1:-1:-1;;33438:29:0;;;;;;;;;;33392:83;23043:21;;;;;;;;;;;;;;;;36667:134;;;;;;;;;;-1:-1:-1;36667:134:0;;;;;:::i;:::-;;:::i;24502:111::-;;;;;;;;;;-1:-1:-1;24502:111:0;;;;;:::i;:::-;;:::i;36131:91::-;;;;;;;;;;-1:-1:-1;36131:91:0;;;;;:::i;:::-;;:::i;36809:216::-;;;;;;;;;;-1:-1:-1;36809:216:0;;;;;:::i;:::-;;:::i;36230:429::-;;;:::i;24685:193::-;;;;;;;;;;-1:-1:-1;24685:193:0;;;;;:::i;:::-;;:::i;37812:101::-;;;;;;;;;;-1:-1:-1;37812:101:0;;;;;:::i;:::-;;:::i;35239:95::-;;;;;;;;;;-1:-1:-1;35239:95:0;;;;;:::i;:::-;;:::i;23149:44::-;;;;;;;;;;-1:-1:-1;23149:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;35826:94;;;;;;;;;;-1:-1:-1;35898:7:0;:14;35826:94;;36097:27;;;;;;;;;;;;;;;;37175:108;;;;;;;;;;-1:-1:-1;37175:108:0;;;;;:::i;:::-;;:::i;33253:51::-;;;;;;;;;;-1:-1:-1;33253:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35198:34;;;;;;;;;;;;;;;;37921:24;;;;;;;;;;;;;;;;38040:73;;;;;;;;;;;;;:::i;33005:18::-;;;;;;;;;;-1:-1:-1;33005:18:0;;;;-1:-1:-1;;;;;33005:18:0;;;37778:27;;;;;;;;;;;;;;;;20077:20;;;;;;;;;;-1:-1:-1;20077:20:0;;;;-1:-1:-1;;;;;20077:20:0;;;35928:30;;;;;;;;;;;;;;;;22726:20;;;;;;;;;;;;;:::i;33313:31::-;;;;;;;;;;;;;;;;23994:41;;;;;;;;;;-1:-1:-1;23994:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25866:207;;;;;;;;;;-1:-1:-1;25866:207:0;;;;;:::i;:::-;;:::i;37147:21::-;;;;;;;;;;-1:-1:-1;37147:21:0;;;;;;;;32979:19;;;;;;;;;;-1:-1:-1;32979:19:0;;;;-1:-1:-1;;;;;32979:19:0;;;27997:160;;;;;;;;;;-1:-1:-1;27997:160:0;;;;;:::i;:::-;;:::i;35049:39::-;;;;;;;;;;-1:-1:-1;35049:39:0;;;;-1:-1:-1;;;;;35049:39:0;;;40530:301;;;;;;;;;;-1:-1:-1;40530:301:0;;;;;:::i;:::-;;:::i;28734:437::-;;;;;;;;;;-1:-1:-1;28734:437:0;;;;;:::i;:::-;;:::i;34464:489::-;;;;;;;;;;-1:-1:-1;34464:489:0;;;;;:::i;:::-;;:::i;40841:634::-;;;;;;;;;;-1:-1:-1;40841:634:0;;;;;:::i;:::-;;:::i;32939:31::-;;;;;;;;;;;;;:::i;23263:64::-;;;;;;;;;;-1:-1:-1;23263:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;37033:106;;;;;;;;;;-1:-1:-1;37033:106:0;;;;;:::i;:::-;;:::i;37464:29::-;;;;;;;;;;;;;;;;23494:68;;;;;;;;;;-1:-1:-1;23494:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;35377:46;;;;;;;;;;-1:-1:-1;35377:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;35095:97;;;;;;;;;;-1:-1:-1;35095:97:0;;;;;:::i;:::-;;:::i;20442:219::-;;;;;;;;;;-1:-1:-1;20442:219:0;;;;;:::i;:::-;;:::i;37952:80::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;38009:15:::1;37997:9;:27:::0;37952:80::o;22672:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37324:132::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;37439:9:::1;37445:3:::0;37439:2:::1;:9;:::i;:::-;37424:24;::::0;:12;:24:::1;:::i;:::-;37410:11;:38:::0;-1:-1:-1;;37324:132:0:o;37500:143::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;37626:9:::1;37632:3:::0;37626:2:::1;:9;:::i;:::-;37608:27;::::0;:15;:27:::1;:::i;:::-;37591:14;:44:::0;-1:-1:-1;;37500:143:0:o;25173:642::-;25276:4;25311:6;;25297:10;:20;;:38;;;;;25334:1;25321:10;:14;25297:38;25293:491;;;25352:13;25368:20;;;:8;:20;;;;;;-1:-1:-1;;;;;25368:20:0;25409:10;:19;;;;;:59;;-1:-1:-1;;;;;;25433:23:0;;;;;;:16;:23;;;;;;;;25457:10;25433:35;;;;;;;;;;25432:36;25409:59;25405:121;;;25496:14;;-1:-1:-1;;;25496:14:0;;;;;;;;;;;25405:121;25542:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;25542:33:0;-1:-1:-1;;;;;25542:33:0;;;;;;;;;25597:36;;2110:25:1;;;25597:36:0;;;;;;2083:18:1;25597:36:0;;;;;;;25337:308;25293:491;;;25676:10;25666:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;25666:30:0;;;;;;;;;;;;:43;;;25731:41;2110:25:1;;;25666:30:0;;25676:10;25731:41;;2083:18:1;25731:41:0;;;;;;;25293:491;-1:-1:-1;25803:4:0;25173:642;;;;;:::o;35998:91::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;36063:7:::1;:18:::0;35998:91::o;26222:1716::-;26368:6;;26354:10;:20;26350:1581;;26403:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;26395:28:0;;;26403:20;;26395:28;26391:91;;26451:15;;-1:-1:-1;;;26451:15:0;;;;;;;;;;;26391:91;-1:-1:-1;;;;;26502:16:0;;26498:82;;26546:18;;-1:-1:-1;;;26546:18:0;;;;;;;;;;;26498:82;26618:10;-1:-1:-1;;;;;26618:18:0;;;;;;:74;;-1:-1:-1;;;;;;26658:22:0;;;;;;:16;:22;;;;;;;;26681:10;26658:34;;;;;;;;;;26657:35;26618:74;:132;;;;-1:-1:-1;26727:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;26727:23:0;26713:10;:37;;26618:132;26596:226;;;26792:14;;-1:-1:-1;;;26792:14:0;;;;;;;;;;;26596:226;26857:10;:8;:10::i;:::-;-1:-1:-1;;;;;26838:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;26930:10:0;;-1:-1:-1;26930:8:0;:10::i;:::-;-1:-1:-1;;;;;26913:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;26972:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;26972:25:0;;;;;;;;27019:11;:23;;;;;27012:30;;;;;;;;27120:12;;;;;:6;:12;;;;;27133:19;;:23;;-1:-1:-1;;27133:23:0;:::i;:::-;27120:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27172:12:0;;;;:6;:12;;;;;;27185:23;;;:11;:23;;;;;;;27172:37;;27120;;-1:-1:-1;27120:37:0;;27172;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;27256:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;27256:18:0;;;;;;;;;;;;27360:23;;;:11;:23;;;;;;;27335:22;;;;;;:48;-1:-1:-1;;;;;27437:10:0;;;;;:6;:10;;;;;:27;;27256:18;27437:27;;;;;;;;;;;;;;;27547:10;;:17;;:21;;27256:18;27547:21;:::i;:::-;27521:23;;;;:11;:23;;;;;;:47;;;;27590:30;;27533:10;;-1:-1:-1;;;;;27590:30:0;;;;;;;;;;;27660:2;-1:-1:-1;;;;;27640:35:0;27654:4;-1:-1:-1;;;;;27640:35:0;;27664:10;:8;:10::i;:::-;27640:35;;2110:25:1;;;2098:2;2083:18;27640:35:0;;;;;;;26376:1311;26222:1716;;;:::o;26350:1581::-;-1:-1:-1;;;;;27726:15:0;;27708;27726;;;:9;:15;;;;;;;;27742:10;27726:27;;;;;;;;-1:-1:-1;;27774:28:0;;27770:101;;27851:20;27861:10;27851:7;:20;:::i;:::-;-1:-1:-1;;;;;27821:15:0;;;;;;:9;:15;;;;;;;;27837:10;27821:27;;;;;;;:50;27770:101;27888:31;27898:4;27904:2;27908:10;27888:9;:31::i;:::-;;27693:238;26350:1581;26222:1716;;;:::o;35346:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35346:24:0;;-1:-1:-1;35346:24:0;:::o;20669:151::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;20748:1:::1;20732:18:::0;;-1:-1:-1;;;;;;20732:18:0::1;::::0;;20768:44:::1;::::0;20789:10:::1;::::0;20768:44:::1;::::0;20748:1;;20768:44:::1;20669:151::o:0;28234:405::-;28358:26;28371:4;28377:2;28381;28358:12;:26::i;:::-;-1:-1:-1;;;;;28415:14:0;;;:19;;;;:154;;-1:-1:-1;28451:61:0;;-1:-1:-1;;;28451:61:0;;;28487:10;28451:61;;;9718:34:1;-1:-1:-1;;;;;9788:15:1;;;9768:18;;;9761:43;9820:18;;;9813:34;;;9883:3;9863:18;;;9856:31;-1:-1:-1;9903:19:1;;;9896:30;28529:40:0;;28451:35;;;;28529:40;;9943:19:1;;28451:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;28451:118:0;;;28415:154;28397:235;;;28603:17;;-1:-1:-1;;;28603:17:0;;;;;;;;;;;36667:134;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;36742:10:::1;:19:::0;;;;36772:11:::1;:21:::0;36667:134::o;24502:111::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;-1:-1:-1;;;;;24580:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;24580:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24502:111::o;36131:91::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;36196:7:::1;:18:::0;36131:91::o;36809:216::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;36912:9:::1;36907:111;36923:20:::0;;::::1;36907:111;;;37000:6;36965:18;:32;36984:9;;36994:1;36984:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36965:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36965:32:0;:41;;-1:-1:-1;;36965:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36945:3;::::1;::::0;::::1;:::i;:::-;;;;36907:111;;;;36809:216:::0;;;:::o;36230:429::-;36279:10;36293:9;36279:23;36275:36;;36230:429::o;36275:36::-;36378:9;;36336:10;;36365:9;:22;;36357:42;;;;-1:-1:-1;;;36357:42:0;;10610:2:1;36357:42:0;;;10592:21:1;10649:1;10629:18;;;10622:29;-1:-1:-1;;;10667:18:1;;;10660:38;10715:18;;36357:42:0;;;;;;;;;36418:11;;36410:52;;-1:-1:-1;;;;;36418:11:0;;;;36440:21;36410:52;;;;;36418:11;36410:52;36418:11;36410:52;36440:21;36418:11;36410:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36483:3:0;;36473:34;;-1:-1:-1;;;;;36483:3:0;36488:4;36494:12;36473:9;:34::i;:::-;-1:-1:-1;36546:7:0;;-1:-1:-1;;;;;36526:17:0;;;;;;:11;:17;;;;;;:27;36518:47;;;;-1:-1:-1;;;36518:47:0;;10946:2:1;36518:47:0;;;10928:21:1;10985:1;10965:18;;;10958:29;-1:-1:-1;;;11003:18:1;;;10996:38;11051:18;;36518:47:0;10744:331:1;36518:47:0;-1:-1:-1;;;;;36576:17:0;;;;;;:11;:17;;;;;:22;;36597:1;;36576:17;:22;;36597:1;;36576:22;:::i;:::-;;;;-1:-1:-1;36609:15:0;;-1:-1:-1;36619:4:0;36609:9;:15::i;:::-;36650:1;36635:11;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;;36230:429:0:o;24685:193::-;24743:13;24777:12;;;:8;:12;;;;;;-1:-1:-1;;;;;24777:12:0;;24802:69;;24849:10;;-1:-1:-1;;;24849:10:0;;;;;;;;;;;24802:69;24685:193;;;:::o;37812:101::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;37882:12:::1;:23:::0;37812:101::o;35239:95::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;35306:9:::1;:20:::0;35239:95::o;37175:108::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;37255:9:::1;:20:::0;;-1:-1:-1;;37255:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37175:108::o;38040:73::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;38104:1:::1;38092:9;:13:::0;38040:73::o;22726:20::-;;;;;;;:::i;25866:207::-;25969:10;25952:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;25952:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;25952:49:0;;;;;;;;;;26019:46;;1912:41:1;;;25952:38:0;;25969:10;26019:46;;1885:18:1;26019:46:0;;;;;;;25866:207;;:::o;27997:160::-;28092:4;28116:33;28126:10;28138:2;28142:6;28116:9;:33::i;:::-;28109:40;27997:160;-1:-1:-1;;;27997:160:0:o;40530:301::-;40618:3;;-1:-1:-1;;;;;40618:3:0;40604:10;:17;40600:224;;-1:-1:-1;;;;;40641:19:0;;40637:176;;40680:36;;40688:10;;40680:36;;;;;40709:6;;40680:36;;;;40709:6;40688:10;40680:36;;;;;;;;;;;;;;;;;;;40637:176;40755:42;;-1:-1:-1;;;40755:42:0;;40778:10;40755:42;;;11384:51:1;11451:18;;;11444:34;;;-1:-1:-1;;;;;40755:22:0;;;;;11357:18:1;;40755:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40637:176::-;40530:301;;:::o;28734:437::-;28888:26;28901:4;28907:2;28911;28888:12;:26::i;:::-;-1:-1:-1;;;;;28945:14:0;;;:19;;;;:156;;-1:-1:-1;28981:63:0;;-1:-1:-1;;;28981:63:0;;;29061:40;-1:-1:-1;;;;;28981:35:0;;;29061:40;;28981:63;;29017:10;;29029:4;;29035:2;;29039:4;;;;28981:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;28981:120:0;;;28945:156;28927:237;;;29135:17;;-1:-1:-1;;;29135:17:0;;;;;;;;;;;34464:489;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;34529:10:::1;:35:::0;;-1:-1:-1;;;;;;34529:35:0::1;-1:-1:-1::0;;;;;34529:35:0;::::1;::::0;;::::1;::::0;;;34615:20:::1;::::0;;-1:-1:-1;;;34615:20:0;;;;-1:-1:-1;;34529:35:0;34615:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;34529:35;34615:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34575:61;;34654:11;-1:-1:-1::0;;;;;34654:22:0::1;;34685:4;34692:10;;;;;;;;;-1:-1:-1::0;;;;;34692:10:0::1;-1:-1:-1::0;;;;;34692:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34654:56;::::0;-1:-1:-1;;;;;;34654:56:0::1;::::0;;;;;;-1:-1:-1;;;;;12892:15:1;;;34654:56:0::1;::::0;::::1;12874:34:1::0;12944:15;;12924:18;;;12917:43;12809:18;;34654:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34647:4;:63:::0;;-1:-1:-1;;;;;;34647:63:0::1;-1:-1:-1::0;;;;;34647:63:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;34721:15:0;;;:9:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;34721:22:0;;::::1;-1:-1:-1::0;34721:22:0;;::::1;::::0;;;34772:10:::1;::::0;;;::::1;34754:30:::0;;;;;:37;;;;::::1;::::0;;::::1;::::0;;34820:4:::1;34802:24:::0;;:9:::1;:24:::0;;;;;;34835:10;;;::::1;34802:45:::0;;;;;;;-1:-1:-1;;34802:59:0;;;;34890:10:::1;34872:30:::0;;;;;;;;34911:10;;;;::::1;34872:51:::0;;;;;;;:65;-1:-1:-1;;34464:489:0:o;40841:634::-;41004:9;;40901:13;;41004:9;;40999:465;;41060:12;41054:26;;;;;:::i;:::-;;;41084:1;41054:31;:346;;;;;;;;;;;;;;;;;41189:12;41266:20;41283:2;41266:16;:20::i;:::-;41142:209;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41030:370;40841:634;-1:-1:-1;;40841:634:0:o;40999:465::-;41440:12;41433:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40841:634;;;:::o;32939:31::-;;;;;;;:::i;37033:106::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;37107:12:::1;:24;37122:9:::0;37107:12;:24:::1;:::i;35095:97::-:0;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;35163:11:::1;:21:::0;;-1:-1:-1;;;;;;35163:21:0::1;-1:-1:-1::0;;;;;35163:21:0;;;::::1;::::0;;;::::1;::::0;;35095:97::o;20442:219::-;20164:5;;-1:-1:-1;;;;;20164:5:0;20150:10;:19;20146:46;;20178:14;;-1:-1:-1;;;20178:14:0;;;;;;;;;;;20146:46;-1:-1:-1;;;;;20525:20:0;::::1;20521:47;;20554:14;;-1:-1:-1::0;;;20554:14:0::1;;;;;;;;;;;20521:47;20581:5;:14:::0;;-1:-1:-1;;;;;;20581:14:0::1;-1:-1:-1::0;;;;;20581:14:0;::::1;::::0;;::::1;::::0;;20613:40:::1;::::0;20581:14;;20634:10:::1;::::0;20613:40:::1;::::0;20581:5;20613:40:::1;20442:219:::0;:::o;30379:92::-;30422:7;30449:14;30455:8;30449:2;:14;:::i;:::-;30442:21;;30379:92;:::o;38121:1476::-;-1:-1:-1;;;;;38343:24:0;;38251:4;38343:24;;;:18;:24;;;;;;38291:6;;38251:4;;38343:24;;38342:25;:52;;;;-1:-1:-1;;;;;;38372:22:0;;;;;;:18;:22;;;;;;;;38371:23;38342:52;:63;;;;-1:-1:-1;38399:6:0;;;;38398:7;38342:63;38338:1194;;;38441:1;38429:9;;:13;38421:33;;;;-1:-1:-1;;;38421:33:0;;16849:2:1;38421:33:0;;;16831:21:1;16888:1;16868:18;;;16861:29;-1:-1:-1;;;16906:18:1;;;16899:38;16954:18;;38421:33:0;16647:331:1;38421:33:0;38509:4;;-1:-1:-1;;;;;38503:10:0;;;38509:4;;38503:10;:21;;;;-1:-1:-1;38518:6:0;;;;38517:7;38503:21;38499:392;;;38594:4;38545:28;38576:24;;;:9;:24;;;;;;;;;38646:12;;38623:35;;38619:239;;;38685:27;38724:20;38715:6;:29;:61;;38770:6;38715:61;;;38747:20;38715:61;38685:91;;38801:37;38818:19;38801:16;:37::i;:::-;38660:198;38619:239;38526:365;38499:392;38921:4;;-1:-1:-1;;;;;38921:4:0;;;38913:12;;;;38909:324;;38949:14;;:19;38945:119;;39010:14;;39000:6;:24;;38992:52;;;;-1:-1:-1;;;38992:52:0;;17185:2:1;38992:52:0;;;17167:21:1;17224:2;17204:18;;;17197:30;-1:-1:-1;;;17243:18:1;;;17236:46;17299:18;;38992:52:0;16983:340:1;38992:52:0;39117:5;39104:10;;39095:6;:19;;;;:::i;:::-;:27;;;;:::i;:::-;39082:40;;;;:::i;:::-;;;38909:324;;;39152:4;;-1:-1:-1;;;;;39152:4:0;;;39146:10;;;;39143:90;;39212:5;39198:11;;39189:6;:20;;;;:::i;:::-;:28;;;;:::i;:::-;39176:41;;;;:::i;:::-;;;39143:90;39249:47;39265:4;39279;39286:9;39249:15;:47::i;:::-;-1:-1:-1;39311:24:0;39326:9;39311:24;;:::i;:::-;39362:4;;39311:24;;-1:-1:-1;;;;;;39356:10:0;;;39362:4;;39356:10;;;;:39;;-1:-1:-1;39384:10:0;;-1:-1:-1;;;;;39370:25:0;;;39384:10;;39370:25;;39356:39;:59;;;;-1:-1:-1;39399:11:0;;:16;;39356:59;39352:165;;;39474:11;;-1:-1:-1;;;;;39443:13:0;;;;;;:9;:13;;;;;;:27;;39459:11;;39443:27;:::i;:::-;:42;;39435:66;;;;-1:-1:-1;;;39435:66:0;;17884:2:1;39435:66:0;;;17866:21:1;17923:2;17903:18;;;17896:30;-1:-1:-1;;;17942:18:1;;;17935:42;17994:18;;39435:66:0;17682:336:1;39435:66:0;39551:38;39567:4;39573:2;39577:11;39551:15;:38::i;:::-;39544:45;38121:1476;-1:-1:-1;;;;;;38121:1476:0:o;35432:386::-;35524:16;;35555:8;;35551:47;;35580:7;35432:386;:::o;35551:47::-;-1:-1:-1;;;;;35617:16:0;;;;;;:11;:16;;;;;;35612:21;;35608:203;;35659:7;:14;35654:19;;:40;;;35691:3;-1:-1:-1;;;;;35677:17:0;:7;35685:1;35677:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;35677:10:0;:17;;35654:40;35650:150;;;35734:7;:14;;-1:-1:-1;;;;;35715:16:0;;;;;;:11;:16;;;;;:33;;;35767:17;;;;;;;;;;;;;-1:-1:-1;;;;;;35767:17:0;;;;;;35472:346;35432:386;:::o;17343:718::-;17399:13;17450:14;17467:17;17478:5;17467:10;:17::i;:::-;17487:1;17467:21;17450:38;;17503:20;17537:6;17526:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17526:18:0;-1:-1:-1;17503:41:0;-1:-1:-1;17668:28:0;;;17684:2;17668:28;17725:290;-1:-1:-1;;17757:5:0;-1:-1:-1;;;17894:2:0;17883:14;;17878:32;17757:5;17865:46;17957:2;17948:11;;;-1:-1:-1;17978:21:0;17725:290;17978:21;-1:-1:-1;18036:6:0;17343:718;-1:-1:-1;;;17343:718:0:o;39692:628::-;37712:6;:13;;-1:-1:-1;;37712:13:0;37721:4;37712:13;;;39794:16:::1;::::0;;39808:1:::1;39794:16:::0;;;;;::::1;::::0;;-1:-1:-1;;39794:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;39794:16:0::1;39770:40;;39839:4;39821;39826:1;39821:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39821:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;39865:10:::1;::::0;:17:::1;::::0;;-1:-1:-1;;;39865:17:0;;;;:10;;;::::1;::::0;:15:::1;::::0;:17:::1;::::0;;::::1;::::0;39821:7;;39865:17;;;;;:10;:17:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39855:4;39860:1;39855:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39855:27:0;;::::1;:7;::::0;;::::1;::::0;;;;;:27;39912:10:::1;::::0;40107:3:::1;::::0;39912:256:::1;::::0;-1:-1:-1;;;39912:256:0;;:10;;::::1;::::0;:79:::1;::::0;:256:::1;::::0;40014:11;;39912:10:::1;::::0;40072:4;;40107:3;;::::1;::::0;40134:15:::1;::::0;39912:256:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;39895:416;;40207:92;::::0;40283:1:::1;2110:25:1::0;;40207:92:0::1;::::0;2098:2:1;2083:18;40207:92:0::1;;;;;;;39895:416;-1:-1:-1::0;;37748:6:0;:14;;-1:-1:-1;;37748:14:0;;;39692:628::o;29239:1101::-;29360:4;29377:12;29392:10;:8;:10::i;:::-;-1:-1:-1;;;;;29443:15:0;;;29413:27;29443:15;;;:9;:15;;;;;;;;29501:13;;;;;;;;;29527:15;;;29377:25;;-1:-1:-1;29443:15:0;;29501:13;;29546:6;;29443:15;29527:25;29546:6;29443:15;29527:25;:::i;:::-;;;;-1:-1:-1;;;;;;;29590:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;29698:15;;;;;:9;:15;;;;;;29693:251;;-1:-1:-1;;;;;29804:15:0;;29730:22;29804:15;;;:9;:15;;;;;;:22;;29822:4;;29804:22;:::i;:::-;29756:26;29778:4;29756:19;:26;:::i;:::-;29755:72;;;;:::i;:::-;29730:97;;29847:9;29842:91;29866:14;29862:1;:18;29842:91;;;29906:11;29912:4;29906:5;:11::i;:::-;29882:3;;;;:::i;:::-;;;;29842:91;;;;29715:229;29693:251;-1:-1:-1;;;;;30020:13:0;;;;;;:9;:13;;;;;;;;30015:247;;30050:22;30118:28;30142:4;30118:21;:28;:::i;:::-;-1:-1:-1;;;;;30076:13:0;;;;;;:9;:13;;;;;;:20;;30092:4;;30076:20;:::i;:::-;30075:72;;;;:::i;:::-;30050:97;;30167:9;30162:89;30186:14;30182:1;:18;30162:89;;;30226:9;30232:2;30226:5;:9::i;:::-;30202:3;;;;:::i;:::-;;;;30162:89;;;;30035:227;30015:247;30299:2;-1:-1:-1;;;;;30279:31:0;30293:4;-1:-1:-1;;;;;30279:31:0;;30303:6;30279:31;;;;2110:25:1;;2098:2;2083:18;;1964:177;30279:31:0;;;;;;;;-1:-1:-1;30328:4:0;;29239:1101;-1:-1:-1;;;;;;29239:1101:0:o;13808:948::-;13861:7;;-1:-1:-1;;;13939:17:0;;13935:106;;-1:-1:-1;;;13977:17:0;;;-1:-1:-1;14023:2:0;14013:12;13935:106;14068:8;14059:5;:17;14055:106;;14106:8;14097:17;;;-1:-1:-1;14143:2:0;14133:12;14055:106;14188:8;14179:5;:17;14175:106;;14226:8;14217:17;;;-1:-1:-1;14263:2:0;14253:12;14175:106;14308:7;14299:5;:16;14295:103;;14345:7;14336:16;;;-1:-1:-1;14381:1:0;14371:11;14295:103;14425:7;14416:5;:16;14412:103;;14462:7;14453:16;;;-1:-1:-1;14498:1:0;14488:11;14412:103;14542:7;14533:5;:16;14529:103;;14579:7;14570:16;;;-1:-1:-1;14615:1:0;14605:11;14529:103;14659:7;14650:5;:16;14646:68;;14697:1;14687:11;14742:6;13808:948;-1:-1:-1;;13808:948:0:o;30961:373::-;-1:-1:-1;;;;;31022:18:0;;31018:73;;31064:15;;-1:-1:-1;;;31064:15:0;;;;;;;;;;;31018:73;-1:-1:-1;;;;;31116:12:0;;31103:10;31116:12;;;:6;:12;;;;;31129:19;;:23;;31151:1;;31129:23;:::i;:::-;31116:37;;;;;;;;:::i;:::-;;;;;;;;;31103:50;;31164:6;:12;31171:4;-1:-1:-1;;;;;31164:12:0;-1:-1:-1;;;;;31164:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;31164:18:0;;;;;;;;;;;;31200:15;;;:11;:15;;;;;;31193:22;;;31233:8;:12;;;;;31226:19;;-1:-1:-1;;;;;;31226:19:0;;;;;;31263:11;:15;;;;;;31256:22;;;;;;;;31296:30;31212:2;;31164:18;-1:-1:-1;;;;;31296:30:0;;;;;31164:18;;31296:30;31007:327;30961:373;:::o;30479:474::-;-1:-1:-1;;;;;30538:16:0;;30534:74;;30578:18;;-1:-1:-1;;;30578:18:0;;;;;;;;;;;30534:74;30645:6;:8;;;;;;;;:6;30713:12;;;:8;:12;;;;;;-1:-1:-1;;;;;30713:12:0;:26;30709:81;;30763:15;;-1:-1:-1;;;30763:15:0;;;;;;;;;;;30709:81;30802:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;30802:17:0;-1:-1:-1;;;;;30802:17:0;;;;;;;;30830:10;;;:6;:10;;;;;:19;;-1:-1:-1;30830:19:0;;;;;;;;;;;;;;;30878:10;;:17;;:21;;-1:-1:-1;30878:21:0;:::i;:::-;30860:15;;;;:11;:15;;;;;;:39;;;;30917:28;;30872:2;;-1:-1:-1;;;;;30917:28:0;;;;;30860:15;;30917:28;30523:430;30479:474;:::o;222:250:1:-;307:1;317:113;331:6;328:1;325:13;317:113;;;407:11;;;401:18;388:11;;;381:39;353:2;346:10;317:113;;;-1:-1:-1;;464:1:1;446:16;;439:27;222:250::o;477:396::-;626:2;615:9;608:21;589:4;658:6;652:13;701:6;696:2;685:9;681:18;674:34;717:79;789:6;784:2;773:9;769:18;764:2;756:6;752:15;717:79;:::i;:::-;857:2;836:15;-1:-1:-1;;832:29:1;817:45;;;;864:2;813:54;;477:396;-1:-1:-1;;477:396:1:o;878:248::-;946:6;954;1007:2;995:9;986:7;982:23;978:32;975:52;;;1023:1;1020;1013:12;975:52;-1:-1:-1;;1046:23:1;;;1116:2;1101:18;;;1088:32;;-1:-1:-1;878:248:1:o;1131:180::-;1190:6;1243:2;1231:9;1222:7;1218:23;1214:32;1211:52;;;1259:1;1256;1249:12;1211:52;-1:-1:-1;1282:23:1;;1131:180;-1:-1:-1;1131:180:1:o;1316:131::-;-1:-1:-1;;;;;1391:31:1;;1381:42;;1371:70;;1437:1;1434;1427:12;1371:70;1316:131;:::o;1452:315::-;1520:6;1528;1581:2;1569:9;1560:7;1556:23;1552:32;1549:52;;;1597:1;1594;1587:12;1549:52;1636:9;1623:23;1655:31;1680:5;1655:31;:::i;:::-;1705:5;1757:2;1742:18;;;;1729:32;;-1:-1:-1;;;1452:315:1:o;2146:456::-;2223:6;2231;2239;2292:2;2280:9;2271:7;2267:23;2263:32;2260:52;;;2308:1;2305;2298:12;2260:52;2347:9;2334:23;2366:31;2391:5;2366:31;:::i;:::-;2416:5;-1:-1:-1;2473:2:1;2458:18;;2445:32;2486:33;2445:32;2486:33;:::i;:::-;2146:456;;2538:7;;-1:-1:-1;;;2592:2:1;2577:18;;;;2564:32;;2146:456::o;2796:247::-;2855:6;2908:2;2896:9;2887:7;2883:23;2879:32;2876:52;;;2924:1;2921;2914:12;2876:52;2963:9;2950:23;2982:31;3007:5;2982:31;:::i;3048:118::-;3134:5;3127:13;3120:21;3113:5;3110:32;3100:60;;3156:1;3153;3146:12;3171:241;3227:6;3280:2;3268:9;3259:7;3255:23;3251:32;3248:52;;;3296:1;3293;3286:12;3248:52;3335:9;3322:23;3354:28;3376:5;3354:28;:::i;3417:382::-;3482:6;3490;3543:2;3531:9;3522:7;3518:23;3514:32;3511:52;;;3559:1;3556;3549:12;3511:52;3598:9;3585:23;3617:31;3642:5;3617:31;:::i;:::-;3667:5;-1:-1:-1;3724:2:1;3709:18;;3696:32;3737:30;3696:32;3737:30;:::i;:::-;3786:7;3776:17;;;3417:382;;;;;:::o;3804:750::-;3896:6;3904;3912;3965:2;3953:9;3944:7;3940:23;3936:32;3933:52;;;3981:1;3978;3971:12;3933:52;4021:9;4008:23;4050:18;4091:2;4083:6;4080:14;4077:34;;;4107:1;4104;4097:12;4077:34;4145:6;4134:9;4130:22;4120:32;;4190:7;4183:4;4179:2;4175:13;4171:27;4161:55;;4212:1;4209;4202:12;4161:55;4252:2;4239:16;4278:2;4270:6;4267:14;4264:34;;;4294:1;4291;4284:12;4264:34;4349:7;4342:4;4332:6;4329:1;4325:14;4321:2;4317:23;4313:34;4310:47;4307:67;;;4370:1;4367;4360:12;4307:67;4401:4;4393:13;;;;-1:-1:-1;4425:6:1;-1:-1:-1;;4466:20:1;;4453:34;4496:28;4453:34;4496:28;:::i;:::-;4543:5;4533:15;;;3804:750;;;;;:::o;4559:936::-;4656:6;4664;4672;4680;4688;4741:3;4729:9;4720:7;4716:23;4712:33;4709:53;;;4758:1;4755;4748:12;4709:53;4797:9;4784:23;4816:31;4841:5;4816:31;:::i;:::-;4866:5;-1:-1:-1;4923:2:1;4908:18;;4895:32;4936:33;4895:32;4936:33;:::i;:::-;4988:7;-1:-1:-1;5042:2:1;5027:18;;5014:32;;-1:-1:-1;5097:2:1;5082:18;;5069:32;5120:18;5150:14;;;5147:34;;;5177:1;5174;5167:12;5147:34;5215:6;5204:9;5200:22;5190:32;;5260:7;5253:4;5249:2;5245:13;5241:27;5231:55;;5282:1;5279;5272:12;5231:55;5322:2;5309:16;5348:2;5340:6;5337:14;5334:34;;;5364:1;5361;5354:12;5334:34;5409:7;5404:2;5395:6;5391:2;5387:15;5383:24;5380:37;5377:57;;;5430:1;5427;5420:12;5377:57;4559:936;;;;-1:-1:-1;4559:936:1;;-1:-1:-1;5461:2:1;5453:11;;5483:6;4559:936;-1:-1:-1;;;4559:936:1:o;5500:388::-;5568:6;5576;5629:2;5617:9;5608:7;5604:23;5600:32;5597:52;;;5645:1;5642;5635:12;5597:52;5684:9;5671:23;5703:31;5728:5;5703:31;:::i;:::-;5753:5;-1:-1:-1;5810:2:1;5795:18;;5782:32;5823:33;5782:32;5823:33;:::i;5893:127::-;5954:10;5949:3;5945:20;5942:1;5935:31;5985:4;5982:1;5975:15;6009:4;6006:1;5999:15;6025:922;6094:6;6147:2;6135:9;6126:7;6122:23;6118:32;6115:52;;;6163:1;6160;6153:12;6115:52;6203:9;6190:23;6232:18;6273:2;6265:6;6262:14;6259:34;;;6289:1;6286;6279:12;6259:34;6327:6;6316:9;6312:22;6302:32;;6372:7;6365:4;6361:2;6357:13;6353:27;6343:55;;6394:1;6391;6384:12;6343:55;6430:2;6417:16;6452:2;6448;6445:10;6442:36;;;6458:18;;:::i;:::-;6533:2;6527:9;6501:2;6587:13;;-1:-1:-1;;6583:22:1;;;6607:2;6579:31;6575:40;6563:53;;;6631:18;;;6651:22;;;6628:46;6625:72;;;6677:18;;:::i;:::-;6717:10;6713:2;6706:22;6752:2;6744:6;6737:18;6792:7;6787:2;6782;6778;6774:11;6770:20;6767:33;6764:53;;;6813:1;6810;6803:12;6764:53;6869:2;6864;6860;6856:11;6851:2;6843:6;6839:15;6826:46;6914:1;6892:15;;;6909:2;6888:24;6881:35;;;;-1:-1:-1;6896:6:1;6025:922;-1:-1:-1;;;;;6025:922:1:o;6952:380::-;7031:1;7027:12;;;;7074;;;7095:61;;7149:4;7141:6;7137:17;7127:27;;7095:61;7202:2;7194:6;7191:14;7171:18;7168:38;7165:161;;7248:10;7243:3;7239:20;7236:1;7229:31;7283:4;7280:1;7273:15;7311:4;7308:1;7301:15;7165:161;;6952:380;;;:::o;7337:127::-;7398:10;7393:3;7389:20;7386:1;7379:31;7429:4;7426:1;7419:15;7453:4;7450:1;7443:15;7469:422;7558:1;7601:5;7558:1;7615:270;7636:7;7626:8;7623:21;7615:270;;;7695:4;7691:1;7687:6;7683:17;7677:4;7674:27;7671:53;;;7704:18;;:::i;:::-;7754:7;7744:8;7740:22;7737:55;;;7774:16;;;;7737:55;7853:22;;;;7813:15;;;;7615:270;;;7619:3;7469:422;;;;;:::o;7896:806::-;7945:5;7975:8;7965:80;;-1:-1:-1;8016:1:1;8030:5;;7965:80;8064:4;8054:76;;-1:-1:-1;8101:1:1;8115:5;;8054:76;8146:4;8164:1;8159:59;;;;8232:1;8227:130;;;;8139:218;;8159:59;8189:1;8180:10;;8203:5;;;8227:130;8264:3;8254:8;8251:17;8248:43;;;8271:18;;:::i;:::-;-1:-1:-1;;8327:1:1;8313:16;;8342:5;;8139:218;;8441:2;8431:8;8428:16;8422:3;8416:4;8413:13;8409:36;8403:2;8393:8;8390:16;8385:2;8379:4;8376:12;8372:35;8369:77;8366:159;;;-1:-1:-1;8478:19:1;;;8510:5;;8366:159;8557:34;8582:8;8576:4;8557:34;:::i;:::-;8627:6;8623:1;8619:6;8615:19;8606:7;8603:32;8600:58;;;8638:18;;:::i;:::-;8676:20;;7896:806;-1:-1:-1;;;7896:806:1:o;8707:131::-;8767:5;8796:36;8823:8;8817:4;8796:36;:::i;8843:168::-;8916:9;;;8947;;8964:15;;;8958:22;;8944:37;8934:71;;8985:18;;:::i;9016:128::-;9083:9;;;9104:11;;;9101:37;;;9118:18;;:::i;9149:127::-;9210:10;9205:3;9201:20;9198:1;9191:31;9241:4;9238:1;9231:15;9265:4;9262:1;9255:15;9281:127;9342:10;9337:3;9333:20;9330:1;9323:31;9373:4;9370:1;9363:15;9397:4;9394:1;9387:15;9973:290;10042:6;10095:2;10083:9;10074:7;10070:23;10066:32;10063:52;;;10111:1;10108;10101:12;10063:52;10137:16;;-1:-1:-1;;;;;;10182:32:1;;10172:43;;10162:71;;10229:1;10226;10219:12;10268:135;10307:3;10328:17;;;10325:43;;10348:18;;:::i;:::-;-1:-1:-1;10395:1:1;10384:13;;10268:135::o;11080:125::-;11145:9;;;11166:10;;;11163:36;;;11179:18;;:::i;11489:245::-;11556:6;11609:2;11597:9;11588:7;11584:23;11580:32;11577:52;;;11625:1;11622;11615:12;11577:52;11657:9;11651:16;11676:28;11698:5;11676:28;:::i;11739:662::-;-1:-1:-1;;;;;12018:15:1;;;12000:34;;12070:15;;12065:2;12050:18;;12043:43;12117:2;12102:18;;12095:34;;;12165:3;12160:2;12145:18;;12138:31;;;12185:19;;12178:35;;;11943:4;12206:6;12256;11980:3;12235:19;;12222:49;12321:1;12315:3;12306:6;12295:9;12291:22;12287:32;12280:43;12391:3;12384:2;12380:7;12375:2;12367:6;12363:15;12359:29;12348:9;12344:45;12340:55;12332:63;;11739:662;;;;;;;;:::o;12406:251::-;12476:6;12529:2;12517:9;12508:7;12504:23;12500:32;12497:52;;;12545:1;12542;12535:12;12497:52;12577:9;12571:16;12596:31;12621:5;12596:31;:::i;13097:1322::-;13475:3;13504:1;13537:6;13531:13;13567:36;13593:9;13567:36;:::i;:::-;13622:1;13639:18;;;13666:133;;;;13813:1;13808:356;;;;13632:532;;13666:133;-1:-1:-1;;13699:24:1;;13687:37;;13772:14;;13765:22;13753:35;;13744:45;;;-1:-1:-1;13666:133:1;;13808:356;13839:6;13836:1;13829:17;13869:4;13914:2;13911:1;13901:16;13939:1;13953:165;13967:6;13964:1;13961:13;13953:165;;;14045:14;;14032:11;;;14025:35;14088:16;;;;13982:10;;13953:165;;;13957:3;;;14147:6;14142:3;14138:16;14131:23;;13632:532;;-1:-1:-1;;;14180:3:1;14173:16;14220:6;14214:13;14198:29;;14236:77;14304:8;14299:2;14294:3;14290:12;14283:4;14275:6;14271:17;14236:77;:::i;:::-;-1:-1:-1;;;14332:18:1;;;;14366:11;;;14359:28;;;;14411:1;14403:10;;13097:1322;-1:-1:-1;;;;;13097:1322:1:o;14424:545::-;14526:2;14521:3;14518:11;14515:448;;;14562:1;14587:5;14583:2;14576:17;14632:4;14628:2;14618:19;14702:2;14690:10;14686:19;14683:1;14679:27;14673:4;14669:38;14738:4;14726:10;14723:20;14720:47;;;-1:-1:-1;14761:4:1;14720:47;14816:2;14811:3;14807:12;14804:1;14800:20;14794:4;14790:31;14780:41;;14871:82;14889:2;14882:5;14879:13;14871:82;;;14934:17;;;14915:1;14904:13;14871:82;;;14875:3;;;14424:545;;;:::o;15145:1352::-;15271:3;15265:10;15298:18;15290:6;15287:30;15284:56;;;15320:18;;:::i;:::-;15349:97;15439:6;15399:38;15431:4;15425:11;15399:38;:::i;:::-;15393:4;15349:97;:::i;:::-;15501:4;;15565:2;15554:14;;15582:1;15577:663;;;;16284:1;16301:6;16298:89;;;-1:-1:-1;16353:19:1;;;16347:26;16298:89;-1:-1:-1;;15102:1:1;15098:11;;;15094:24;15090:29;15080:40;15126:1;15122:11;;;15077:57;16400:81;;15547:944;;15577:663;13044:1;13037:14;;;13081:4;13068:18;;-1:-1:-1;;15613:20:1;;;15731:236;15745:7;15742:1;15739:14;15731:236;;;15834:19;;;15828:26;15813:42;;15926:27;;;;15894:1;15882:14;;;;15761:19;;15731:236;;;15735:3;15995:6;15986:7;15983:19;15980:201;;;16056:19;;;16050:26;-1:-1:-1;;16139:1:1;16135:14;;;16151:3;16131:24;16127:37;16123:42;16108:58;16093:74;;15980:201;-1:-1:-1;;;;;16227:1:1;16211:14;;;16207:22;16194:36;;-1:-1:-1;15145:1352:1:o;16502:140::-;16560:5;16589:47;16630:4;16620:8;16616:19;16610:4;16589:47;:::i;17460:217::-;17500:1;17526;17516:132;;17570:10;17565:3;17561:20;17558:1;17551:31;17605:4;17602:1;17595:15;17633:4;17630:1;17623:15;17516:132;-1:-1:-1;17662:9:1;;17460:217::o;18023:980::-;18285:4;18333:3;18322:9;18318:19;18364:6;18353:9;18346:25;18390:2;18428:6;18423:2;18412:9;18408:18;18401:34;18471:3;18466:2;18455:9;18451:18;18444:31;18495:6;18530;18524:13;18561:6;18553;18546:22;18599:3;18588:9;18584:19;18577:26;;18638:2;18630:6;18626:15;18612:29;;18659:1;18669:195;18683:6;18680:1;18677:13;18669:195;;;18748:13;;-1:-1:-1;;;;;18744:39:1;18732:52;;18839:15;;;;18804:12;;;;18780:1;18698:9;18669:195;;;-1:-1:-1;;;;;;;18920:32:1;;;;18915:2;18900:18;;18893:60;-1:-1:-1;;;18984:3:1;18969:19;18962:35;18881:3;18023:980;-1:-1:-1;;;18023:980:1:o
Swarm Source
ipfs://536338690a7e3f4368e6d3a65bbd7ae92f6c3dbbad8596404cc171f8552a6aa8
Net Worth in USD
Net Worth in ETH
Token Allocations
Multichain Portfolio | 35 Chains
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.