ETH Price: $3,455.83 (-0.90%)
Gas: 2 Gwei

Token

RNS (RNS)
 

Overview

Max Total Supply

777,000,000,000 RNS

Holders

573

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000033400348628 RNS

Value
$0.00
0x27ce434a3a25812eec6f78320054b6f2cd549198
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RNS

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 3 of 3: RNS.sol
pragma solidity ^0.8.0;
// SPDX-License-Identifier: UNLICENSED

import "./Owned.sol";
import "./ERC20.sol";

contract RNS is ERC20, Owned {

    event Whitelisted(address indexed target, bool toggle);
    event Initialized();
    error Not_Initialized();

    bool public initialized;
    mapping(address => bool) public whitelist;

    constructor(
        uint256 _totalSuply,
        address _owner
    ) Owned(_owner) {
        whitelist[_owner] = true;
        /// only time _mint is called
        _mint(_owner, _totalSuply);
    }


    function toggleWhitelist(address target, bool toggle) external onlyOwner {
        whitelist[target] = toggle;
        emit Whitelisted(target, toggle);
    }

    /*//////////////////////////////////////////////////////////////
                             ERC20 OVERRIDES
    //////////////////////////////////////////////////////////////*/

    /// @notice Name of the token.
    function name() public pure override returns (string memory) {
        return "RNS";
    }

    /// @notice Symbol of the token.
    function symbol() public pure override returns (string memory) {
        return "RNS";
    }

    function initialize() external onlyOwner {
        initialized = true;
        emit Initialized();
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal view override {
        if(!initialized && !whitelist[from] && !whitelist[to]) {
            revert Not_Initialized();
        }
    }
}

File 1 of 3: ERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Simple ERC20 + EIP-2612 implementation.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol)
/// Note:
/// The ERC20 standard allows minting and transferring to and from the zero address,
/// minting and transferring zero tokens, as well as self-approvals.
/// For performance, this implementation WILL NOT revert for such actions.
/// Please add any checks with overrides if desired.
abstract contract ERC20 {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The total supply has overflowed.
    error TotalSupplyOverflow();

    /// @dev The allowance has overflowed.
    error AllowanceOverflow();

    /// @dev The allowance has underflowed.
    error AllowanceUnderflow();

    /// @dev Insufficient balance.
    error InsufficientBalance();

    /// @dev Insufficient allowance.
    error InsufficientAllowance();

    /// @dev The permit is invalid.
    error InvalidPermit();

    /// @dev The permit has expired.
    error PermitExpired();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Emitted when `amount` tokens is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @dev Emitted when `amount` tokens is approved by `owner` to be used by `spender`.
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );

    /// @dev `keccak256(bytes("Transfer(address,address,uint256)"))`.
    uint256 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    /// @dev `keccak256(bytes("Approval(address,address,uint256)"))`.
    uint256 private constant _APPROVAL_EVENT_SIGNATURE =
        0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The storage slot for the total supply.
    uint256 private constant _TOTAL_SUPPLY_SLOT = 0x05345cdf77eb68f44c;

    /// @dev The balance slot of `owner` is given by:
    /// ```
    ///     mstore(0x0c, _BALANCE_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let balanceSlot := keccak256(0x0c, 0x20)
    /// ```
    uint256 private constant _BALANCE_SLOT_SEED = 0x87a211a2;

    /// @dev The allowance slot of (`owner`, `spender`) is given by:
    /// ```
    ///     mstore(0x20, spender)
    ///     mstore(0x0c, _ALLOWANCE_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let allowanceSlot := keccak256(0x0c, 0x34)
    /// ```
    uint256 private constant _ALLOWANCE_SLOT_SEED = 0x7f5e9f20;

    /// @dev The nonce slot of `owner` is given by:
    /// ```
    ///     mstore(0x0c, _NONCES_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let nonceSlot := keccak256(0x0c, 0x20)
    /// ```
    uint256 private constant _NONCES_SLOT_SEED = 0x38377508;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       ERC20 METADATA                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the name of the token.
    function name() public view virtual returns (string memory);

    /// @dev Returns the symbol of the token.
    function symbol() public view virtual returns (string memory);

    /// @dev Returns the decimals places of the token.
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           ERC20                            */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the amount of tokens in existence.
    function totalSupply() public view virtual returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_TOTAL_SUPPLY_SLOT)
        }
    }

    /// @dev Returns the amount of tokens owned by `owner`.
    function balanceOf(
        address owner
    ) public view virtual returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, owner)
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /// @dev Returns the amount of tokens that `spender` can spend on behalf of `owner`.
    function allowance(
        address owner,
        address spender
    ) public view virtual returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, owner)
            result := sload(keccak256(0x0c, 0x34))
        }
    }

    /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    ///
    /// Emits a {Approval} event.
    function approve(
        address spender,
        uint256 amount
    ) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and store the amount.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x34), amount)
            // Emit the {Approval} event.
            mstore(0x00, amount)
            log3(
                0x00,
                0x20,
                _APPROVAL_EVENT_SIGNATURE,
                caller(),
                shr(96, mload(0x2c))
            )
        }
        return true;
    }

    /// @dev Atomically increases the allowance granted to `spender` by the caller.
    ///
    /// Emits a {Approval} event.
    function increaseAllowance(
        address spender,
        uint256 difference
    ) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowanceBefore := sload(allowanceSlot)
            // Add to the allowance.
            let allowanceAfter := add(allowanceBefore, difference)
            // Revert upon overflow.
            if lt(allowanceAfter, allowanceBefore) {
                mstore(0x00, 0xf9067066) // `AllowanceOverflow()`.
                revert(0x1c, 0x04)
            }
            // Store the updated allowance.
            sstore(allowanceSlot, allowanceAfter)
            // Emit the {Approval} event.
            mstore(0x00, allowanceAfter)
            log3(
                0x00,
                0x20,
                _APPROVAL_EVENT_SIGNATURE,
                caller(),
                shr(96, mload(0x2c))
            )
        }
        return true;
    }

    /// @dev Atomically decreases the allowance granted to `spender` by the caller.
    ///
    /// Emits a {Approval} event.
    function decreaseAllowance(
        address spender,
        uint256 difference
    ) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowanceBefore := sload(allowanceSlot)
            // Revert if will underflow.
            if lt(allowanceBefore, difference) {
                mstore(0x00, 0x8301ab38) // `AllowanceUnderflow()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated allowance.
            let allowanceAfter := sub(allowanceBefore, difference)
            sstore(allowanceSlot, allowanceAfter)
            // Emit the {Approval} event.
            mstore(0x00, allowanceAfter)
            log3(
                0x00,
                0x20,
                _APPROVAL_EVENT_SIGNATURE,
                caller(),
                shr(96, mload(0x2c))
            )
        }
        return true;
    }

    /// @dev Transfer `amount` tokens from the caller to `to`.
    ///
    /// Requirements:
    /// - `from` must at least have `amount`.
    ///
    /// Emits a {Transfer} event.
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        _beforeTokenTransfer(msg.sender, to, amount);
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the balance slot and load its value.
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, caller())
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(
                0x20,
                0x20,
                _TRANSFER_EVENT_SIGNATURE,
                caller(),
                shr(96, mload(0x0c))
            )
        }
        _afterTokenTransfer(msg.sender, to, amount);
        return true;
    }

    /// @dev Transfers `amount` tokens from `from` to `to`.
    ///
    /// Note: does not update the allowance if it is the maximum uint256 value.
    ///
    /// Requirements:
    /// - `from` must at least have `amount`.
    /// - The caller must have at least `amount` of allowance to transfer the tokens of `from`.
    ///
    /// Emits a {Transfer} event.
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        _beforeTokenTransfer(from, to, amount);
        /// @solidity memory-safe-assembly
        assembly {
            let from_ := shl(96, from)
            // Compute the allowance slot and load its value.
            mstore(0x20, caller())
            mstore(0x0c, or(from_, _ALLOWANCE_SLOT_SEED))
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowance_ := sload(allowanceSlot)
            // If the allowance is not the maximum uint256 value.
            if iszero(eq(allowance_, not(0))) {
                // Revert if the amount to be transferred exceeds the allowance.
                if gt(amount, allowance_) {
                    mstore(0x00, 0x13be252b) // `InsufficientAllowance()`.
                    revert(0x1c, 0x04)
                }
                // Subtract and store the updated allowance.
                sstore(allowanceSlot, sub(allowance_, amount))
            }
            // Compute the balance slot and load its value.
            mstore(0x0c, or(from_, _BALANCE_SLOT_SEED))
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(
                0x20,
                0x20,
                _TRANSFER_EVENT_SIGNATURE,
                shr(96, from_),
                shr(96, mload(0x0c))
            )
        }
        _afterTokenTransfer(from, to, amount);
        return true;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          EIP-2612                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the current nonce for `owner`.
    /// This value is used to compute the signature for EIP-2612 permit.
    function nonces(
        address owner
    ) public view virtual returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the nonce slot and load its value.
            mstore(0x0c, _NONCES_SLOT_SEED)
            mstore(0x00, owner)
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /// @dev Sets `value` as the allowance of `spender` over the tokens of `owner`,
    /// authorized by a signed approval by `owner`.
    ///
    /// Emits a {Approval} event.
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        bytes32 domainSeparator = DOMAIN_SEPARATOR();
        /// @solidity memory-safe-assembly
        assembly {
            // Grab the free memory pointer.
            let m := mload(0x40)
            // Revert if the block timestamp greater than `deadline`.
            if gt(timestamp(), deadline) {
                mstore(0x00, 0x1a15a3cc) // `PermitExpired()`.
                revert(0x1c, 0x04)
            }
            // Clean the upper 96 bits.
            owner := shr(96, shl(96, owner))
            spender := shr(96, shl(96, spender))
            // Compute the nonce slot and load its value.
            mstore(0x0c, _NONCES_SLOT_SEED)
            mstore(0x00, owner)
            let nonceSlot := keccak256(0x0c, 0x20)
            let nonceValue := sload(nonceSlot)
            // Increment and store the updated nonce.
            sstore(nonceSlot, add(nonceValue, 1))
            // Prepare the inner hash.
            // `keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")`.
            // forgefmt: disable-next-item
            mstore(
                m,
                0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9
            )
            mstore(add(m, 0x20), owner)
            mstore(add(m, 0x40), spender)
            mstore(add(m, 0x60), value)
            mstore(add(m, 0x80), nonceValue)
            mstore(add(m, 0xa0), deadline)
            // Prepare the outer hash.
            mstore(0, 0x1901)
            mstore(0x20, domainSeparator)
            mstore(0x40, keccak256(m, 0xc0))
            // Prepare the ecrecover calldata.
            mstore(0, keccak256(0x1e, 0x42))
            mstore(0x20, and(0xff, v))
            mstore(0x40, r)
            mstore(0x60, s)
            pop(staticcall(gas(), 1, 0, 0x80, 0x20, 0x20))
            // If the ecrecover fails, the returndatasize will be 0x00,
            // `owner` will be be checked if it equals the hash at 0x00,
            // which evaluates to false (i.e. 0), and we will revert.
            // If the ecrecover succeeds, the returndatasize will be 0x20,
            // `owner` will be compared against the returned address at 0x20.
            if iszero(eq(mload(returndatasize()), owner)) {
                mstore(0x00, 0xddafbaef) // `InvalidPermit()`.
                revert(0x1c, 0x04)
            }
            // Compute the allowance slot and store the value.
            // The `owner` is already at slot 0x20.
            mstore(0x40, or(shl(160, _ALLOWANCE_SLOT_SEED), spender))
            sstore(keccak256(0x2c, 0x34), value)
            // Emit the {Approval} event.
            log3(add(m, 0x60), 0x20, _APPROVAL_EVENT_SIGNATURE, owner, spender)
            mstore(0x40, m) // Restore the free memory pointer.
            mstore(0x60, 0) // Restore the zero pointer.
        }
    }

    /// @dev Returns the EIP-2612 domains separator.
    function DOMAIN_SEPARATOR() public view virtual returns (bytes32 result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := mload(0x40) // Grab the free memory pointer.
        }
        //  We simply calculate it on-the-fly to allow for cases where the `name` may change.
        bytes32 nameHash = keccak256(bytes(name()));
        /// @solidity memory-safe-assembly
        assembly {
            let m := result
            // `keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")`.
            // forgefmt: disable-next-item
            mstore(
                m,
                0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f
            )
            mstore(add(m, 0x20), nameHash)
            // `keccak256("1")`.
            // forgefmt: disable-next-item
            mstore(
                add(m, 0x40),
                0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6
            )
            mstore(add(m, 0x60), chainid())
            mstore(add(m, 0x80), address())
            result := keccak256(m, 0xa0)
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  INTERNAL MINT FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Mints `amount` tokens to `to`, increasing the total supply.
    ///
    /// Emits a {Transfer} event.
    function _mint(address to, uint256 amount) internal virtual {
        _beforeTokenTransfer(address(0), to, amount);
        /// @solidity memory-safe-assembly
        assembly {
            let totalSupplyBefore := sload(_TOTAL_SUPPLY_SLOT)
            let totalSupplyAfter := add(totalSupplyBefore, amount)
            // Revert if the total supply overflows.
            if lt(totalSupplyAfter, totalSupplyBefore) {
                mstore(0x00, 0xe5cfe957) // `TotalSupplyOverflow()`.
                revert(0x1c, 0x04)
            }
            // Store the updated total supply.
            sstore(_TOTAL_SUPPLY_SLOT, totalSupplyAfter)
            // Compute the balance slot and load its value.
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, 0, shr(96, mload(0x0c)))
        }
        _afterTokenTransfer(address(0), to, amount);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  INTERNAL BURN FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Burns `amount` tokens from `from`, reducing the total supply.
    ///
    /// Emits a {Transfer} event.
    function _burn(address from, uint256 amount) internal virtual {
        _beforeTokenTransfer(from, address(0), amount);
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the balance slot and load its value.
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, from)
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Subtract and store the updated total supply.
            sstore(_TOTAL_SUPPLY_SLOT, sub(sload(_TOTAL_SUPPLY_SLOT), amount))
            // Emit the {Transfer} event.
            mstore(0x00, amount)
            log3(
                0x00,
                0x20,
                _TRANSFER_EVENT_SIGNATURE,
                shr(96, shl(96, from)),
                0
            )
        }
        _afterTokenTransfer(from, address(0), amount);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                INTERNAL TRANSFER FUNCTIONS                 */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Moves `amount` of tokens from `from` to `to`.
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(from, to, amount);
        /// @solidity memory-safe-assembly
        assembly {
            let from_ := shl(96, from)
            // Compute the balance slot and load its value.
            mstore(0x0c, or(from_, _BALANCE_SLOT_SEED))
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(
                0x20,
                0x20,
                _TRANSFER_EVENT_SIGNATURE,
                shr(96, from_),
                shr(96, mload(0x0c))
            )
        }
        _afterTokenTransfer(from, to, amount);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                INTERNAL ALLOWANCE FUNCTIONS                */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Updates the allowance of `owner` for `spender` based on spent `amount`.
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, owner)
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowance_ := sload(allowanceSlot)
            // If the allowance is not the maximum uint256 value.
            if iszero(eq(allowance_, not(0))) {
                // Revert if the amount to be transferred exceeds the allowance.
                if gt(amount, allowance_) {
                    mstore(0x00, 0x13be252b) // `InsufficientAllowance()`.
                    revert(0x1c, 0x04)
                }
                // Subtract and store the updated allowance.
                sstore(allowanceSlot, sub(allowance_, amount))
            }
        }
    }

    /// @dev Sets `amount` as the allowance of `spender` over the tokens of `owner`.
    ///
    /// Emits a {Approval} event.
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            let owner_ := shl(96, owner)
            // Compute the allowance slot and store the amount.
            mstore(0x20, spender)
            mstore(0x0c, or(owner_, _ALLOWANCE_SLOT_SEED))
            sstore(keccak256(0x0c, 0x34), amount)
            // Emit the {Approval} event.
            mstore(0x00, amount)
            log3(
                0x00,
                0x20,
                _APPROVAL_EVENT_SIGNATURE,
                shr(96, owner_),
                shr(96, mload(0x2c))
            )
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     HOOKS TO OVERRIDE                      */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Hook that is called before any transfer of tokens.
    /// This includes minting and burning.
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /// @dev Hook that is called after any transfer of tokens.
    /// This includes minting and burning.
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 2 of 3: Owned.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event OwnershipTransferred(address indexed user, address indexed newOwner);

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner) {
        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function transferOwnership(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_totalSuply","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AllowanceOverflow","type":"error"},{"inputs":[],"name":"AllowanceUnderflow","type":"error"},{"inputs":[],"name":"InsufficientAllowance","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidPermit","type":"error"},{"inputs":[],"name":"Not_Initialized","type":"error"},{"inputs":[],"name":"PermitExpired","type":"error"},{"inputs":[],"name":"TotalSupplyOverflow","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"toggle","type":"bool"}],"name":"Whitelisted","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"result","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":"result","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":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","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":"difference","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"difference","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"result","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"toggleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"result","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":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200170d3803806200170d833981810160405281019062000037919062000393565b80806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200013d81836200014560201b60201c565b5050620003da565b6200015960008383620001ed60201b60201c565b6805345cdf77eb68f44c54818101818110156200017e5763e5cfe9576000526004601cfd5b806805345cdf77eb68f44c556387a211a2600c52836000526020600c2083815401815583602052600c5160601c60007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3505050620001e960008383620002e960201b60201c565b5050565b600060149054906101000a900460ff16158015620002555750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015620002ac5750600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15620002e4576040517f843f5cbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b600080fd5b6000819050919050565b6200030881620002f3565b81146200031457600080fd5b50565b6000815190506200032881620002fd565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200035b826200032e565b9050919050565b6200036d816200034e565b81146200037957600080fd5b50565b6000815190506200038d8162000362565b92915050565b60008060408385031215620003ad57620003ac620002ee565b5b6000620003bd8582860162000317565b9250506020620003d0858286016200037c565b9150509250929050565b61132380620003ea6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a457c2d711610071578063a457c2d714610349578063a9059cbb14610379578063d505accf146103a9578063dd62ed3e146103c5578063f2fde38b146103f55761012c565b80637ecebe00146102a35780638129fc1c146102d35780638da5cb5b146102dd57806395d89b41146102fb5780639b19251a146103195761012c565b8063313ce567116100f4578063313ce567146101eb578063349123d1146102095780633644e51514610225578063395093511461024357806370a08231146102735761012c565b806306fdde0314610131578063095ea7b31461014f578063158ef93e1461017f57806318160ddd1461019d57806323b872dd146101bb575b600080fd5b610139610411565b6040516101469190610e6b565b60405180910390f35b61016960048036038101906101649190610f26565b61044e565b6040516101769190610f81565b60405180910390f35b6101876104a2565b6040516101949190610f81565b60405180910390f35b6101a56104b5565b6040516101b29190610fab565b60405180910390f35b6101d560048036038101906101d09190610fc6565b6104c7565b6040516101e29190610f81565b60405180910390f35b6101f361059c565b6040516102009190611035565b60405180910390f35b610223600480360381019061021e919061107c565b6105a5565b005b61022d6106dc565b60405161023a91906110d5565b60405180910390f35b61025d60048036038101906102589190610f26565b61075d565b60405161026a9190610f81565b60405180910390f35b61028d600480360381019061028891906110f0565b6107d0565b60405161029a9190610fab565b60405180910390f35b6102bd60048036038101906102b891906110f0565b6107eb565b6040516102ca9190610fab565b60405180910390f35b6102db610806565b005b6102e56108dd565b6040516102f2919061112c565b60405180910390f35b610303610901565b6040516103109190610e6b565b60405180910390f35b610333600480360381019061032e91906110f0565b61093e565b6040516103409190610f81565b60405180910390f35b610363600480360381019061035e9190610f26565b61095e565b6040516103709190610f81565b60405180910390f35b610393600480360381019061038e9190610f26565b6109d1565b6040516103a09190610f81565b60405180910390f35b6103c360048036038101906103be919061119f565b610a63565b005b6103df60048036038101906103da9190611241565b610b92565b6040516103ec9190610fab565b60405180910390f35b61040f600480360381019061040a91906110f0565b610bb2565b005b60606040518060400160405280600381526020017f524e530000000000000000000000000000000000000000000000000000000000815250905090565b600082602052637f5e9f20600c5233600052816034600c205581600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a36001905092915050565b600060149054906101000a900460ff1681565b60006805345cdf77eb68f44c54905090565b60006104d4848484610cdd565b8360601b33602052637f5e9f208117600c526034600c2080546000198114610512578085111561050c576313be252b6000526004601cfd5b84810382555b6387a211a28317600c526020600c208054808711156105395763f4d678b86000526004601cfd5b8681038255876000526020600c2087815401815587602052600c5160601c8660601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3505050505050610591848484610dd6565b600190509392505050565b60006012905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062a906112cd565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa54714518c5d275fdcd3d2a461e4858e4e8cb04fb93cd0bca9d6d34115f26440826040516106d09190610f81565b60405180910390a25050565b6000604051905060006106ed610411565b805190602001209050817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81528160208201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6604082015246606082015230608082015260a081209250505090565b600082602052637f5e9f20600c52336000526034600c2080548381018181101561078f5763f90670666000526004601cfd5b80835580600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a35050506001905092915050565b60006387a211a2600c52816000526020600c20549050919050565b60006338377508600c52816000526020600c20549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b906112cd565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c860405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600381526020017f524e530000000000000000000000000000000000000000000000000000000000815250905090565b60016020528060005260406000206000915054906101000a900460ff1681565b600082602052637f5e9f20600c52336000526034600c2080548381101561098d57638301ab386000526004601cfd5b83810380835580600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a35050506001905092915050565b60006109de338484610cdd565b6387a211a2600c52336000526020600c20805480841115610a075763f4d678b86000526004601cfd5b8381038255846000526020600c2084815401815584602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3505050610a59338484610dd6565b6001905092915050565b6000610a6d6106dc565b905060405185421115610a8857631a15a3cc6000526004601cfd5b8860601b60601c98508760601b60601c97506338377508600c52886000526020600c2080546001810182557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983528a60208401528960408401528860608401528060808401528760a08401526119016000528360205260c083206040526042601e206000528660ff1660205285604052846060526020806080600060015afa508a3d5114610b3e5763ddafbaef6000526004601cfd5b89637f5e9f2060a01b17604052886034602c2055898b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602060608701a38260405260006060525050505050505050505050565b600081602052637f5e9f20600c52826000526034600c2054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c37906112cd565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600060149054906101000a900460ff16158015610d445750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610d9a5750600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610dd1576040517f843f5cbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e15578082015181840152602081019050610dfa565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e3d82610ddb565b610e478185610de6565b9350610e57818560208601610df7565b610e6081610e21565b840191505092915050565b60006020820190508181036000830152610e858184610e32565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ebd82610e92565b9050919050565b610ecd81610eb2565b8114610ed857600080fd5b50565b600081359050610eea81610ec4565b92915050565b6000819050919050565b610f0381610ef0565b8114610f0e57600080fd5b50565b600081359050610f2081610efa565b92915050565b60008060408385031215610f3d57610f3c610e8d565b5b6000610f4b85828601610edb565b9250506020610f5c85828601610f11565b9150509250929050565b60008115159050919050565b610f7b81610f66565b82525050565b6000602082019050610f966000830184610f72565b92915050565b610fa581610ef0565b82525050565b6000602082019050610fc06000830184610f9c565b92915050565b600080600060608486031215610fdf57610fde610e8d565b5b6000610fed86828701610edb565b9350506020610ffe86828701610edb565b925050604061100f86828701610f11565b9150509250925092565b600060ff82169050919050565b61102f81611019565b82525050565b600060208201905061104a6000830184611026565b92915050565b61105981610f66565b811461106457600080fd5b50565b60008135905061107681611050565b92915050565b6000806040838503121561109357611092610e8d565b5b60006110a185828601610edb565b92505060206110b285828601611067565b9150509250929050565b6000819050919050565b6110cf816110bc565b82525050565b60006020820190506110ea60008301846110c6565b92915050565b60006020828403121561110657611105610e8d565b5b600061111484828501610edb565b91505092915050565b61112681610eb2565b82525050565b6000602082019050611141600083018461111d565b92915050565b61115081611019565b811461115b57600080fd5b50565b60008135905061116d81611147565b92915050565b61117c816110bc565b811461118757600080fd5b50565b60008135905061119981611173565b92915050565b600080600080600080600060e0888a0312156111be576111bd610e8d565b5b60006111cc8a828b01610edb565b97505060206111dd8a828b01610edb565b96505060406111ee8a828b01610f11565b95505060606111ff8a828b01610f11565b94505060806112108a828b0161115e565b93505060a06112218a828b0161118a565b92505060c06112328a828b0161118a565b91505092959891949750929550565b6000806040838503121561125857611257610e8d565b5b600061126685828601610edb565b925050602061127785828601610edb565b9150509250929050565b7f554e415554484f52495a45440000000000000000000000000000000000000000600082015250565b60006112b7600c83610de6565b91506112c282611281565b602082019050919050565b600060208201905081810360008301526112e6816112aa565b905091905056fea26469706673582212206aacca83c349fa9c536c7ba05a2adea9dd70c1612740fa8bfdb50b2979ea277264736f6c634300081200330000000000000000000000000000000000000009ce9f56010fd538dc280000000000000000000000000000001ffac7c50f7a45c1cd8392e6a8b2a28e0509540c

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a457c2d711610071578063a457c2d714610349578063a9059cbb14610379578063d505accf146103a9578063dd62ed3e146103c5578063f2fde38b146103f55761012c565b80637ecebe00146102a35780638129fc1c146102d35780638da5cb5b146102dd57806395d89b41146102fb5780639b19251a146103195761012c565b8063313ce567116100f4578063313ce567146101eb578063349123d1146102095780633644e51514610225578063395093511461024357806370a08231146102735761012c565b806306fdde0314610131578063095ea7b31461014f578063158ef93e1461017f57806318160ddd1461019d57806323b872dd146101bb575b600080fd5b610139610411565b6040516101469190610e6b565b60405180910390f35b61016960048036038101906101649190610f26565b61044e565b6040516101769190610f81565b60405180910390f35b6101876104a2565b6040516101949190610f81565b60405180910390f35b6101a56104b5565b6040516101b29190610fab565b60405180910390f35b6101d560048036038101906101d09190610fc6565b6104c7565b6040516101e29190610f81565b60405180910390f35b6101f361059c565b6040516102009190611035565b60405180910390f35b610223600480360381019061021e919061107c565b6105a5565b005b61022d6106dc565b60405161023a91906110d5565b60405180910390f35b61025d60048036038101906102589190610f26565b61075d565b60405161026a9190610f81565b60405180910390f35b61028d600480360381019061028891906110f0565b6107d0565b60405161029a9190610fab565b60405180910390f35b6102bd60048036038101906102b891906110f0565b6107eb565b6040516102ca9190610fab565b60405180910390f35b6102db610806565b005b6102e56108dd565b6040516102f2919061112c565b60405180910390f35b610303610901565b6040516103109190610e6b565b60405180910390f35b610333600480360381019061032e91906110f0565b61093e565b6040516103409190610f81565b60405180910390f35b610363600480360381019061035e9190610f26565b61095e565b6040516103709190610f81565b60405180910390f35b610393600480360381019061038e9190610f26565b6109d1565b6040516103a09190610f81565b60405180910390f35b6103c360048036038101906103be919061119f565b610a63565b005b6103df60048036038101906103da9190611241565b610b92565b6040516103ec9190610fab565b60405180910390f35b61040f600480360381019061040a91906110f0565b610bb2565b005b60606040518060400160405280600381526020017f524e530000000000000000000000000000000000000000000000000000000000815250905090565b600082602052637f5e9f20600c5233600052816034600c205581600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a36001905092915050565b600060149054906101000a900460ff1681565b60006805345cdf77eb68f44c54905090565b60006104d4848484610cdd565b8360601b33602052637f5e9f208117600c526034600c2080546000198114610512578085111561050c576313be252b6000526004601cfd5b84810382555b6387a211a28317600c526020600c208054808711156105395763f4d678b86000526004601cfd5b8681038255876000526020600c2087815401815587602052600c5160601c8660601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3505050505050610591848484610dd6565b600190509392505050565b60006012905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062a906112cd565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa54714518c5d275fdcd3d2a461e4858e4e8cb04fb93cd0bca9d6d34115f26440826040516106d09190610f81565b60405180910390a25050565b6000604051905060006106ed610411565b805190602001209050817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81528160208201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6604082015246606082015230608082015260a081209250505090565b600082602052637f5e9f20600c52336000526034600c2080548381018181101561078f5763f90670666000526004601cfd5b80835580600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a35050506001905092915050565b60006387a211a2600c52816000526020600c20549050919050565b60006338377508600c52816000526020600c20549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b906112cd565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c860405160405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600381526020017f524e530000000000000000000000000000000000000000000000000000000000815250905090565b60016020528060005260406000206000915054906101000a900460ff1681565b600082602052637f5e9f20600c52336000526034600c2080548381101561098d57638301ab386000526004601cfd5b83810380835580600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a35050506001905092915050565b60006109de338484610cdd565b6387a211a2600c52336000526020600c20805480841115610a075763f4d678b86000526004601cfd5b8381038255846000526020600c2084815401815584602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3505050610a59338484610dd6565b6001905092915050565b6000610a6d6106dc565b905060405185421115610a8857631a15a3cc6000526004601cfd5b8860601b60601c98508760601b60601c97506338377508600c52886000526020600c2080546001810182557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983528a60208401528960408401528860608401528060808401528760a08401526119016000528360205260c083206040526042601e206000528660ff1660205285604052846060526020806080600060015afa508a3d5114610b3e5763ddafbaef6000526004601cfd5b89637f5e9f2060a01b17604052886034602c2055898b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602060608701a38260405260006060525050505050505050505050565b600081602052637f5e9f20600c52826000526034600c2054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c37906112cd565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600060149054906101000a900460ff16158015610d445750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610d9a5750600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610dd1576040517f843f5cbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e15578082015181840152602081019050610dfa565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e3d82610ddb565b610e478185610de6565b9350610e57818560208601610df7565b610e6081610e21565b840191505092915050565b60006020820190508181036000830152610e858184610e32565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ebd82610e92565b9050919050565b610ecd81610eb2565b8114610ed857600080fd5b50565b600081359050610eea81610ec4565b92915050565b6000819050919050565b610f0381610ef0565b8114610f0e57600080fd5b50565b600081359050610f2081610efa565b92915050565b60008060408385031215610f3d57610f3c610e8d565b5b6000610f4b85828601610edb565b9250506020610f5c85828601610f11565b9150509250929050565b60008115159050919050565b610f7b81610f66565b82525050565b6000602082019050610f966000830184610f72565b92915050565b610fa581610ef0565b82525050565b6000602082019050610fc06000830184610f9c565b92915050565b600080600060608486031215610fdf57610fde610e8d565b5b6000610fed86828701610edb565b9350506020610ffe86828701610edb565b925050604061100f86828701610f11565b9150509250925092565b600060ff82169050919050565b61102f81611019565b82525050565b600060208201905061104a6000830184611026565b92915050565b61105981610f66565b811461106457600080fd5b50565b60008135905061107681611050565b92915050565b6000806040838503121561109357611092610e8d565b5b60006110a185828601610edb565b92505060206110b285828601611067565b9150509250929050565b6000819050919050565b6110cf816110bc565b82525050565b60006020820190506110ea60008301846110c6565b92915050565b60006020828403121561110657611105610e8d565b5b600061111484828501610edb565b91505092915050565b61112681610eb2565b82525050565b6000602082019050611141600083018461111d565b92915050565b61115081611019565b811461115b57600080fd5b50565b60008135905061116d81611147565b92915050565b61117c816110bc565b811461118757600080fd5b50565b60008135905061119981611173565b92915050565b600080600080600080600060e0888a0312156111be576111bd610e8d565b5b60006111cc8a828b01610edb565b97505060206111dd8a828b01610edb565b96505060406111ee8a828b01610f11565b95505060606111ff8a828b01610f11565b94505060806112108a828b0161115e565b93505060a06112218a828b0161118a565b92505060c06112328a828b0161118a565b91505092959891949750929550565b6000806040838503121561125857611257610e8d565b5b600061126685828601610edb565b925050602061127785828601610edb565b9150509250929050565b7f554e415554484f52495a45440000000000000000000000000000000000000000600082015250565b60006112b7600c83610de6565b91506112c282611281565b602082019050919050565b600060208201905081810360008301526112e6816112aa565b905091905056fea26469706673582212206aacca83c349fa9c536c7ba05a2adea9dd70c1612740fa8bfdb50b2979ea277264736f6c63430008120033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000009ce9f56010fd538dc280000000000000000000000000000001ffac7c50f7a45c1cd8392e6a8b2a28e0509540c

-----Decoded View---------------
Arg [0] : _totalSuply (uint256): 777000000000000000000000000000
Arg [1] : _owner (address): 0x1fFAC7c50f7a45C1CD8392e6A8b2A28e0509540c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000009ce9f56010fd538dc28000000
Arg [1] : 0000000000000000000000001ffac7c50f7a45c1cd8392e6a8b2a28e0509540c


Deployed Bytecode Sourcemap

109:1376:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;927:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6016:689:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;260:23:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4868:195:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11371:2327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4441:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;544:158:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17765:1154:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6837:1174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5129:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14112:354;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1158:104:2;;;:::i;:::-;;690:20:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1060:92:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;289:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8143:1151:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9481:1522;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14650:3056;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5524:361;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1312:161:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;927:90:2;973:13;998:12;;;;;;;;;;;;;;;;;;;927:90;:::o;6016:689:0:-;6112:4;6271:7;6265:4;6258:21;6305:20;6299:4;6292:34;6352:8;6346:4;6339:22;6404:6;6397:4;6391;6381:21;6374:37;6479:6;6473:4;6466:20;6648:4;6642:11;6638:2;6634:20;6608:8;6565:25;6543:4;6521;6499:169;6694:4;6687:11;;6016:689;;;;:::o;260:23:2:-;;;;;;;;;;;;;:::o;4868:195:0:-;4920:14;5028:18;5022:25;5012:35;;4868:195;:::o;11371:2327::-;11489:4;11505:38;11526:4;11532:2;11536:6;11505:20;:38::i;:::-;11640:4;11636:2;11632:13;11733:8;11727:4;11720:22;11778:20;11771:5;11768:31;11762:4;11755:45;11850:4;11844;11834:21;11892:13;11886:20;12014:1;12010:6;11998:10;11995:22;11985:430;;12132:10;12124:6;12121:22;12118:159;;;12179:10;12173:4;12166:24;12254:4;12248;12241:18;12118:159;12393:6;12381:10;12377:23;12362:13;12355:46;11985:430;12511:18;12504:5;12501:29;12495:4;12488:43;12583:4;12577;12567:21;12626:15;12620:22;12716:11;12708:6;12705:23;12702:146;;;12760:10;12754:4;12747:24;12829:4;12823;12816:18;12702:146;12957:6;12944:11;12940:24;12923:15;12916:49;13040:2;13034:4;13027:16;13093:4;13087;13077:21;13343:6;13327:13;13321:20;13317:33;13302:13;13295:56;13419:6;13413:4;13406:20;13594:4;13588:11;13584:2;13580:20;13556:5;13552:2;13548:14;13505:25;13483:4;13461;13439:175;11605:2019;;;;;;13633:37;13653:4;13659:2;13663:6;13633:19;:37::i;:::-;13687:4;13680:11;;11371:2327;;;;;:::o;4441:82::-;4490:5;4514:2;4507:9;;4441:82;:::o;544:158:2:-;778:5:1;;;;;;;;;;764:19;;:10;:19;;;756:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;647:6:2::1;627:9;:17;637:6;627:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;680:6;668:27;;;688:6;668:27;;;;;;:::i;:::-;;;;;;;;544:158:::0;;:::o;17765:1154:0:-;17822:14;17930:4;17924:11;17914:21;;18081:16;18116:6;:4;:6::i;:::-;18100:24;;;;;;18081:43;;18209:6;18428:66;18409:1;18385:123;18542:8;18535:4;18532:1;18528:12;18521:30;18694:66;18671:4;18668:1;18664:12;18640:134;18808:9;18801:4;18798:1;18794:12;18787:31;18852:9;18845:4;18842:1;18838:12;18831:31;18898:4;18895:1;18885:18;18875:28;;18186:727;;17765:1154;:::o;6837:1174::-;6947:4;7104:7;7098:4;7091:21;7138:20;7132:4;7125:34;7185:8;7179:4;7172:22;7244:4;7238;7228:21;7291:13;7285:20;7398:10;7381:15;7377:32;7481:15;7465:14;7462:35;7459:156;;;7529:10;7523:4;7516:24;7596:4;7590;7583:18;7459:156;7694:14;7679:13;7672:37;7777:14;7771:4;7764:28;7954:4;7948:11;7944:2;7940:20;7914:8;7871:25;7849:4;7827;7805:169;7015:969;;;8000:4;7993:11;;6837:1174;;;;:::o;5129:300::-;5206:14;5311:18;5305:4;5298:32;5356:5;5350:4;5343:19;5407:4;5401;5391:21;5385:28;5375:38;;5129:300;;;:::o;14112:354::-;14186:14;14349:17;14343:4;14336:31;14393:5;14387:4;14380:19;14444:4;14438;14428:21;14422:28;14412:38;;14112:354;;;:::o;1158:104:2:-;778:5:1;;;;;;;;;;764:19;;:10;:19;;;756:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;1223:4:2::1;1209:11;;:18;;;;;;;;;;;;;;;;;;1242:13;;;;;;;;;;1158:104::o:0;690:20:1:-;;;;;;;;;;;;:::o;1060:92:2:-;1108:13;1133:12;;;;;;;;;;;;;;;;;;;1060:92;:::o;289:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;8143:1151:0:-;8253:4;8410:7;8404:4;8397:21;8444:20;8438:4;8431:34;8491:8;8485:4;8478:22;8550:4;8544;8534:21;8597:13;8591:20;8688:10;8671:15;8668:31;8665:153;;;8731:10;8725:4;8718:24;8799:4;8793;8786:18;8665:153;8931:10;8914:15;8910:32;8977:14;8962:13;8955:37;9060:14;9054:4;9047:28;9237:4;9231:11;9227:2;9223:20;9197:8;9154:25;9132:4;9110;9088:169;8321:946;;;9283:4;9276:11;;8143:1151;;;;:::o;9481:1522::-;9573:4;9589:44;9610:10;9622:2;9626:6;9589:20;:44::i;:::-;9782:18;9776:4;9769:32;9827:8;9821:4;9814:22;9888:4;9882;9872:21;9931:15;9925:22;10021:11;10013:6;10010:23;10007:146;;;10065:10;10059:4;10052:24;10134:4;10128;10121:18;10007:146;10262:6;10249:11;10245:24;10228:15;10221:49;10345:2;10339:4;10332:16;10398:4;10392;10382:21;10648:6;10632:13;10626:20;10622:33;10607:13;10600:56;10724:6;10718:4;10711:20;10893:4;10887:11;10883:2;10879:20;10853:8;10810:25;10788:4;10766;10744:169;9695:1228;;;10932:43;10952:10;10964:2;10968:6;10932:19;:43::i;:::-;10992:4;10985:11;;9481:1522;;;;:::o;14650:3056::-;14849:23;14875:18;:16;:18::i;:::-;14849:44;;15029:4;15023:11;15136:8;15123:11;15120:25;15117:142;;;15177:10;15171:4;15164:24;15240:4;15234;15227:18;15117:142;15337:5;15333:2;15329:14;15325:2;15321:23;15312:32;;15384:7;15380:2;15376:16;15372:2;15368:25;15357:36;;15477:17;15471:4;15464:31;15521:5;15515:4;15508:19;15573:4;15567;15557:21;15615:9;15609:16;15726:1;15714:10;15710:18;15699:9;15692:37;15981:66;15962:1;15938:123;16095:5;16088:4;16085:1;16081:12;16074:27;16135:7;16128:4;16125:1;16121:12;16114:29;16177:5;16170:4;16167:1;16163:12;16156:27;16217:10;16210:4;16207:1;16203:12;16196:32;16262:8;16255:4;16252:1;16248:12;16241:30;16333:6;16330:1;16323:17;16366:15;16360:4;16353:29;16421:4;16418:1;16408:18;16402:4;16395:32;16513:4;16507;16497:21;16494:1;16487:32;16555:1;16549:4;16545:12;16539:4;16532:26;16584:1;16578:4;16571:15;16612:1;16606:4;16599:15;16667:4;16661;16655;16652:1;16649;16642:5;16631:41;16627:46;17092:5;17073:16;17067:23;17064:34;17054:159;;17131:10;17125:4;17118:24;17194:4;17188;17181:18;17054:159;17389:7;17366:20;17361:3;17357:30;17354:43;17348:4;17341:57;17441:5;17434:4;17428;17418:21;17411:36;17561:7;17554:5;17527:25;17521:4;17514;17511:1;17507:12;17502:67;17595:1;17589:4;17582:15;17659:1;17653:4;17646:15;14955:2745;;;;14650:3056;;;;;;;:::o;5524:361::-;5626:14;5731:7;5725:4;5718:21;5765:20;5759:4;5752:34;5812:5;5806:4;5799:19;5863:4;5857;5847:21;5841:28;5831:38;;5524:361;;;;:::o;1312:161:1:-;778:5;;;;;;;;;;764:19;;:10;:19;;;756:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;1400:8:::1;1392:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;1457:8;1424:42;;1445:10;1424:42;;;;;;;;;;;;1312:161:::0;:::o;1268:215:2:-;1377:11;;;;;;;;;;;1376:12;:32;;;;;1393:9;:15;1403:4;1393:15;;;;;;;;;;;;;;;;;;;;;;;;;1392:16;1376:32;:50;;;;;1413:9;:13;1423:2;1413:13;;;;;;;;;;;;;;;;;;;;;;;;;1412:14;1376:50;1373:104;;;1449:17;;;;;;;;;;;;;;1373:104;1268:215;;;:::o;26811:120:0:-;;;;:::o;7:99:3:-;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:116::-;4923:21;4938:5;4923:21;:::i;:::-;4916:5;4913:32;4903:60;;4959:1;4956;4949:12;4903:60;4853:116;:::o;4975:133::-;5018:5;5056:6;5043:20;5034:29;;5072:30;5096:5;5072:30;:::i;:::-;4975:133;;;;:::o;5114:468::-;5179:6;5187;5236:2;5224:9;5215:7;5211:23;5207:32;5204:119;;;5242:79;;:::i;:::-;5204:119;5362:1;5387:53;5432:7;5423:6;5412:9;5408:22;5387:53;:::i;:::-;5377:63;;5333:117;5489:2;5515:50;5557:7;5548:6;5537:9;5533:22;5515:50;:::i;:::-;5505:60;;5460:115;5114:468;;;;;:::o;5588:77::-;5625:7;5654:5;5643:16;;5588:77;;;:::o;5671:118::-;5758:24;5776:5;5758:24;:::i;:::-;5753:3;5746:37;5671:118;;:::o;5795:222::-;5888:4;5926:2;5915:9;5911:18;5903:26;;5939:71;6007:1;5996:9;5992:17;5983:6;5939:71;:::i;:::-;5795:222;;;;:::o;6023:329::-;6082:6;6131:2;6119:9;6110:7;6106:23;6102:32;6099:119;;;6137:79;;:::i;:::-;6099:119;6257:1;6282:53;6327:7;6318:6;6307:9;6303:22;6282:53;:::i;:::-;6272:63;;6228:117;6023:329;;;;:::o;6358:118::-;6445:24;6463:5;6445:24;:::i;:::-;6440:3;6433:37;6358:118;;:::o;6482:222::-;6575:4;6613:2;6602:9;6598:18;6590:26;;6626:71;6694:1;6683:9;6679:17;6670:6;6626:71;:::i;:::-;6482:222;;;;:::o;6710:118::-;6781:22;6797:5;6781:22;:::i;:::-;6774:5;6771:33;6761:61;;6818:1;6815;6808:12;6761:61;6710:118;:::o;6834:135::-;6878:5;6916:6;6903:20;6894:29;;6932:31;6957:5;6932:31;:::i;:::-;6834:135;;;;:::o;6975:122::-;7048:24;7066:5;7048:24;:::i;:::-;7041:5;7038:35;7028:63;;7087:1;7084;7077:12;7028:63;6975:122;:::o;7103:139::-;7149:5;7187:6;7174:20;7165:29;;7203:33;7230:5;7203:33;:::i;:::-;7103:139;;;;:::o;7248:1199::-;7359:6;7367;7375;7383;7391;7399;7407;7456:3;7444:9;7435:7;7431:23;7427:33;7424:120;;;7463:79;;:::i;:::-;7424:120;7583:1;7608:53;7653:7;7644:6;7633:9;7629:22;7608:53;:::i;:::-;7598:63;;7554:117;7710:2;7736:53;7781:7;7772:6;7761:9;7757:22;7736:53;:::i;:::-;7726:63;;7681:118;7838:2;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7809:118;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;8094:3;8121:51;8164:7;8155:6;8144:9;8140:22;8121:51;:::i;:::-;8111:61;;8065:117;8221:3;8248:53;8293:7;8284:6;8273:9;8269:22;8248:53;:::i;:::-;8238:63;;8192:119;8350:3;8377:53;8422:7;8413:6;8402:9;8398:22;8377:53;:::i;:::-;8367:63;;8321:119;7248:1199;;;;;;;;;;:::o;8453:474::-;8521:6;8529;8578:2;8566:9;8557:7;8553:23;8549:32;8546:119;;;8584:79;;:::i;:::-;8546:119;8704:1;8729:53;8774:7;8765:6;8754:9;8750:22;8729:53;:::i;:::-;8719:63;;8675:117;8831:2;8857:53;8902:7;8893:6;8882:9;8878:22;8857:53;:::i;:::-;8847:63;;8802:118;8453:474;;;;;:::o;8933:162::-;9073:14;9069:1;9061:6;9057:14;9050:38;8933:162;:::o;9101:366::-;9243:3;9264:67;9328:2;9323:3;9264:67;:::i;:::-;9257:74;;9340:93;9429:3;9340:93;:::i;:::-;9458:2;9453:3;9449:12;9442:19;;9101:366;;;:::o;9473:419::-;9639:4;9677:2;9666:9;9662:18;9654:26;;9726:9;9720:4;9716:20;9712:1;9701:9;9697:17;9690:47;9754:131;9880:4;9754:131;:::i;:::-;9746:139;;9473:419;;;:::o

Swarm Source

ipfs://6aacca83c349fa9c536c7ba05a2adea9dd70c1612740fa8bfdb50b2979ea2772
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.