S Price: $0.6732 (-3.60%)

Contract

0x70e7f1d907E30efb18FE1DD8A1d75c09A98177d3

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

More Info

Private Name Tags

TokenTracker

JEFE TOKEN (JEFE) (@$0.0093)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve35317772025-01-12 7:02:2439 hrs ago1736665344IN
JEFE: JEFE Token
0 S0.000270195.51
Approve30339972025-01-08 21:02:165 days ago1736370136IN
JEFE: JEFE Token
0 S0.000256865.5
Approve30337372025-01-08 20:59:285 days ago1736369968IN
JEFE: JEFE Token
0 S0.000256865.5
Approve28692112025-01-07 15:24:076 days ago1736263447IN
JEFE: JEFE Token
0 S0.000162815.5
Approve27714552025-01-06 23:16:376 days ago1736205397IN
JEFE: JEFE Token
0 S0.000051371.1
Approve24043862025-01-03 21:13:4410 days ago1735938824IN
JEFE: JEFE Token
0 S0.000052391.1
Approve24022012025-01-03 20:50:0210 days ago1735937402IN
JEFE: JEFE Token
0 S0.000052391.1
Approve23282402025-01-03 6:15:4210 days ago1735884942IN
JEFE: JEFE Token
0 S0.000054431.11
Approve23021412025-01-02 23:27:0610 days ago1735860426IN
JEFE: JEFE Token
0 S0.000077521.1
Approve23019212025-01-02 23:23:3710 days ago1735860217IN
JEFE: JEFE Token
0 S0.000030071.1
Approve23019042025-01-02 23:23:2410 days ago1735860204IN
JEFE: JEFE Token
0 S0.000052391.1
Transfer23016592025-01-02 23:19:3810 days ago1735859978IN
JEFE: JEFE Token
0 S0.000039791.1
Transfer23016432025-01-02 23:19:2610 days ago1735859966IN
JEFE: JEFE Token
0 S0.000039791.1
Approve23013422025-01-02 23:15:0010 days ago1735859700IN
JEFE: JEFE Token
0 S0.000052391.1
Approve22926292025-01-02 21:33:2511 days ago1735853605IN
JEFE: JEFE Token
0 S0.000052391.1
Transfer22922132025-01-02 21:28:3711 days ago1735853317IN
JEFE: JEFE Token
0 S0.000059561.1
Approve17445922024-12-27 12:13:5117 days ago1735301631IN
JEFE: JEFE Token
0 S0.000051371.1
Approve15862612024-12-25 18:37:3919 days ago1735151859IN
JEFE: JEFE Token
0 S0.000051521.1
Approve14735982024-12-24 15:11:3620 days ago1735053096IN
JEFE: JEFE Token
0 S0.000052391.1
Approve13127342024-12-23 7:01:3421 days ago1734937294IN
JEFE: JEFE Token
0 S0.0000331.1
Approve13127252024-12-23 7:01:3021 days ago1734937290IN
JEFE: JEFE Token
0 S0.0000331.1
Approve13127132024-12-23 7:01:2221 days ago1734937282IN
JEFE: JEFE Token
0 S0.0000331.1
Approve13126952024-12-23 7:01:1421 days ago1734937274IN
JEFE: JEFE Token
0 S0.0000331.1
Approve13126902024-12-23 7:01:0921 days ago1734937269IN
JEFE: JEFE Token
0 S0.0000331.1
Approve13125392024-12-23 6:59:5721 days ago1734937197IN
JEFE: JEFE Token
0 S0.0000331.1
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JEFE

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2024-12-22
*/

// SPDX-License-Identifier: MIT
/**
   WWW.JEFETOKEN.COM
   JEFE TOKEN 
   JEFE 
   Helping heroes around the world
*/
pragma solidity 0.8.21;

interface IERC20Errors {
 
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}


interface IERC721Errors {
   
    error ERC721InvalidOwner(address owner);
    error ERC721NonexistentToken(uint256 tokenId);
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
    error ERC721InvalidSender(address sender);
    error ERC721InvalidReceiver(address receiver);   
    error ERC721InsufficientApproval(address operator, uint256 tokenId);  
    error ERC721InvalidApprover(address approver);    
    error ERC721InvalidOperator(address operator);
}

interface IERC1155Errors {
    
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
    error ERC1155InvalidSender(address sender);
    error ERC1155InvalidReceiver(address receiver);
    error ERC1155MissingApprovalForAll(address operator, address owner);
    error ERC1155InvalidApprover(address approver);
    error ERC1155InvalidOperator(address operator);
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

interface IERC20 {
    
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


interface IERC5267 {

    event EIP712DomainChanged();

    function eip712Domain()
        external
        view
        returns (
            bytes1 fields,
            string memory name,
            string memory version,
            uint256 chainId,
            address verifyingContract,
            bytes32 salt,
            uint256[] memory extensions
        );
}


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);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}
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);
        }
    }
}

library Panic {
    uint256 internal constant GENERIC = 0x00;
    uint256 internal constant ASSERT = 0x01;
    uint256 internal constant UNDER_OVERFLOW = 0x11;
    uint256 internal constant DIVISION_BY_ZERO = 0x12;
    uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;
    uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;
    uint256 internal constant EMPTY_ARRAY_POP = 0x31;
    uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;
    uint256 internal constant RESOURCE_ERROR = 0x41;
    uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;

    function panic(uint256 code) internal pure {
        assembly ("memory-safe") {
            mstore(0x00, 0x4e487b71)
            mstore(0x20, code)
            revert(0x1c, 0x24)
        }
    }
}

library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    struct Int256Slot {
        int256 value;
    }

    struct StringSlot {
        string value;
    }

    struct BytesSlot {
        bytes value;
    }

    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {
        assembly ("memory-safe") {
            r.slot := store.slot
        }
    }

    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    
    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {
        assembly ("memory-safe") {
            r.slot := store.slot
        }
    }
}
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS
    }

    error ECDSAInvalidSignature();

    error ECDSAInvalidSignatureLength(uint256 length);

    error ECDSAInvalidSignatureS(bytes32 s);

    function tryRecover(
        bytes32 hash,
        bytes memory signature
    ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly ("memory-safe") {
                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 recovered, RecoverError err, bytes32 errArg) {
        unchecked {
            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
            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 recovered, RecoverError err, bytes32 errArg) {
       
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS, s);
        }

        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);
        }
    }
}
library SafeCast {
    
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    error SafeCastOverflowedIntToUint(int256 value);
    error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);
    error SafeCastOverflowedUintToInt(uint256 value);
   
    function toUint248(uint256 value) internal pure returns (uint248) {
        if (value > type(uint248).max) {
            revert SafeCastOverflowedUintDowncast(248, value);
        }
        return uint248(value);
    }

    function toUint240(uint256 value) internal pure returns (uint240) {
        if (value > type(uint240).max) {
            revert SafeCastOverflowedUintDowncast(240, value);
        }
        return uint240(value);
    }

    function toUint232(uint256 value) internal pure returns (uint232) {
        if (value > type(uint232).max) {
            revert SafeCastOverflowedUintDowncast(232, value);
        }
        return uint232(value);
    }

    function toUint224(uint256 value) internal pure returns (uint224) {
        if (value > type(uint224).max) {
            revert SafeCastOverflowedUintDowncast(224, value);
        }
        return uint224(value);
    }

   
    function toUint216(uint256 value) internal pure returns (uint216) {
        if (value > type(uint216).max) {
            revert SafeCastOverflowedUintDowncast(216, value);
        }
        return uint216(value);
    }

    function toUint208(uint256 value) internal pure returns (uint208) {
        if (value > type(uint208).max) {
            revert SafeCastOverflowedUintDowncast(208, value);
        }
        return uint208(value);
    }

    function toUint200(uint256 value) internal pure returns (uint200) {
        if (value > type(uint200).max) {
            revert SafeCastOverflowedUintDowncast(200, value);
        }
        return uint200(value);
    }

    function toUint192(uint256 value) internal pure returns (uint192) {
        if (value > type(uint192).max) {
            revert SafeCastOverflowedUintDowncast(192, value);
        }
        return uint192(value);
    }

    function toUint184(uint256 value) internal pure returns (uint184) {
        if (value > type(uint184).max) {
            revert SafeCastOverflowedUintDowncast(184, value);
        }
        return uint184(value);
    }

    
    function toUint176(uint256 value) internal pure returns (uint176) {
        if (value > type(uint176).max) {
            revert SafeCastOverflowedUintDowncast(176, value);
        }
        return uint176(value);
    }

    function toUint168(uint256 value) internal pure returns (uint168) {
        if (value > type(uint168).max) {
            revert SafeCastOverflowedUintDowncast(168, value);
        }
        return uint168(value);
    }
    
    function toUint160(uint256 value) internal pure returns (uint160) {
        if (value > type(uint160).max) {
            revert SafeCastOverflowedUintDowncast(160, value);
        }
        return uint160(value);
    }

    
    function toUint152(uint256 value) internal pure returns (uint152) {
        if (value > type(uint152).max) {
            revert SafeCastOverflowedUintDowncast(152, value);
        }
        return uint152(value);
    }

   
    function toUint144(uint256 value) internal pure returns (uint144) {
        if (value > type(uint144).max) {
            revert SafeCastOverflowedUintDowncast(144, value);
        }
        return uint144(value);
    }
    
    function toUint136(uint256 value) internal pure returns (uint136) {
        if (value > type(uint136).max) {
            revert SafeCastOverflowedUintDowncast(136, value);
        }
        return uint136(value);
    }
   
    function toUint128(uint256 value) internal pure returns (uint128) {
        if (value > type(uint128).max) {
            revert SafeCastOverflowedUintDowncast(128, value);
        }
        return uint128(value);
    }

    
    function toUint120(uint256 value) internal pure returns (uint120) {
        if (value > type(uint120).max) {
            revert SafeCastOverflowedUintDowncast(120, value);
        }
        return uint120(value);
    }
    
    function toUint112(uint256 value) internal pure returns (uint112) {
        if (value > type(uint112).max) {
            revert SafeCastOverflowedUintDowncast(112, value);
        }
        return uint112(value);
    }

    function toUint104(uint256 value) internal pure returns (uint104) {
        if (value > type(uint104).max) {
            revert SafeCastOverflowedUintDowncast(104, value);
        }
        return uint104(value);
    }

   
    function toUint96(uint256 value) internal pure returns (uint96) {
        if (value > type(uint96).max) {
            revert SafeCastOverflowedUintDowncast(96, value);
        }
        return uint96(value);
    }

    function toUint88(uint256 value) internal pure returns (uint88) {
        if (value > type(uint88).max) {
            revert SafeCastOverflowedUintDowncast(88, value);
        }
        return uint88(value);
    }

   
    function toUint80(uint256 value) internal pure returns (uint80) {
        if (value > type(uint80).max) {
            revert SafeCastOverflowedUintDowncast(80, value);
        }
        return uint80(value);
    }

    function toUint72(uint256 value) internal pure returns (uint72) {
        if (value > type(uint72).max) {
            revert SafeCastOverflowedUintDowncast(72, value);
        }
        return uint72(value);
    }
    
    function toUint64(uint256 value) internal pure returns (uint64) {
        if (value > type(uint64).max) {
            revert SafeCastOverflowedUintDowncast(64, value);
        }
        return uint64(value);
    }

    function toUint56(uint256 value) internal pure returns (uint56) {
        if (value > type(uint56).max) {
            revert SafeCastOverflowedUintDowncast(56, value);
        }
        return uint56(value);
    }

 
    function toUint48(uint256 value) internal pure returns (uint48) {
        if (value > type(uint48).max) {
            revert SafeCastOverflowedUintDowncast(48, value);
        }
        return uint48(value);
    }

    function toUint40(uint256 value) internal pure returns (uint40) {
        if (value > type(uint40).max) {
            revert SafeCastOverflowedUintDowncast(40, value);
        }
        return uint40(value);
    }

 
    function toUint32(uint256 value) internal pure returns (uint32) {
        if (value > type(uint32).max) {
            revert SafeCastOverflowedUintDowncast(32, value);
        }
        return uint32(value);
    }

    function toUint24(uint256 value) internal pure returns (uint24) {
        if (value > type(uint24).max) {
            revert SafeCastOverflowedUintDowncast(24, value);
        }
        return uint24(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        if (value > type(uint16).max) {
            revert SafeCastOverflowedUintDowncast(16, value);
        }
        return uint16(value);
    }

 
    function toUint8(uint256 value) internal pure returns (uint8) {
        if (value > type(uint8).max) {
            revert SafeCastOverflowedUintDowncast(8, value);
        }
        return uint8(value);
    }

    function toUint256(int256 value) internal pure returns (uint256) {
        if (value < 0) {
            revert SafeCastOverflowedIntToUint(value);
        }
        return uint256(value);
    }

 
    function toInt248(int256 value) internal pure returns (int248 downcasted) {
        downcasted = int248(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(248, value);
        }
    }

    function toInt240(int256 value) internal pure returns (int240 downcasted) {
        downcasted = int240(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(240, value);
        }
    }

    function toInt232(int256 value) internal pure returns (int232 downcasted) {
        downcasted = int232(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(232, value);
        }
    }

    function toInt224(int256 value) internal pure returns (int224 downcasted) {
        downcasted = int224(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(224, value);
        }
    }

    function toInt216(int256 value) internal pure returns (int216 downcasted) {
        downcasted = int216(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(216, value);
        }
    }


    function toInt208(int256 value) internal pure returns (int208 downcasted) {
        downcasted = int208(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(208, value);
        }
    }

    function toInt200(int256 value) internal pure returns (int200 downcasted) {
        downcasted = int200(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(200, value);
        }
    }


    function toInt192(int256 value) internal pure returns (int192 downcasted) {
        downcasted = int192(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(192, value);
        }
    }

    function toInt184(int256 value) internal pure returns (int184 downcasted) {
        downcasted = int184(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(184, value);
        }
    }

    function toInt176(int256 value) internal pure returns (int176 downcasted) {
        downcasted = int176(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(176, value);
        }
    }

    function toInt168(int256 value) internal pure returns (int168 downcasted) {
        downcasted = int168(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(168, value);
        }
    }


    function toInt160(int256 value) internal pure returns (int160 downcasted) {
        downcasted = int160(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(160, value);
        }
    }

    function toInt152(int256 value) internal pure returns (int152 downcasted) {
        downcasted = int152(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(152, value);
        }
    }

    function toInt144(int256 value) internal pure returns (int144 downcasted) {
        downcasted = int144(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(144, value);
        }
    }

 
    function toInt136(int256 value) internal pure returns (int136 downcasted) {
        downcasted = int136(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(136, value);
        }
    }

    function toInt128(int256 value) internal pure returns (int128 downcasted) {
        downcasted = int128(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(128, value);
        }
    }

 
    function toInt120(int256 value) internal pure returns (int120 downcasted) {
        downcasted = int120(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(120, value);
        }
    }

    function toInt112(int256 value) internal pure returns (int112 downcasted) {
        downcasted = int112(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(112, value);
        }
    }

    function toInt104(int256 value) internal pure returns (int104 downcasted) {
        downcasted = int104(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(104, value);
        }
    }

    function toInt96(int256 value) internal pure returns (int96 downcasted) {
        downcasted = int96(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(96, value);
        }
    }

    function toInt88(int256 value) internal pure returns (int88 downcasted) {
        downcasted = int88(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(88, value);
        }
    }

    function toInt80(int256 value) internal pure returns (int80 downcasted) {
        downcasted = int80(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(80, value);
        }
    }


    function toInt72(int256 value) internal pure returns (int72 downcasted) {
        downcasted = int72(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(72, value);
        }
    }


    function toInt64(int256 value) internal pure returns (int64 downcasted) {
        downcasted = int64(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(64, value);
        }
    }

    function toInt56(int256 value) internal pure returns (int56 downcasted) {
        downcasted = int56(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(56, value);
        }
    }
  
    function toInt48(int256 value) internal pure returns (int48 downcasted) {
        downcasted = int48(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(48, value);
        }
    }
  
    function toInt40(int256 value) internal pure returns (int40 downcasted) {
        downcasted = int40(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(40, value);
        }
    }
  
    function toInt32(int256 value) internal pure returns (int32 downcasted) {
        downcasted = int32(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(32, value);
        }
    }
  
    function toInt24(int256 value) internal pure returns (int24 downcasted) {
        downcasted = int24(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(24, value);
        }
    }
  
    function toInt16(int256 value) internal pure returns (int16 downcasted) {
        downcasted = int16(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(16, value);
        }
    }
    
    function toInt8(int256 value) internal pure returns (int8 downcasted) {
        downcasted = int8(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(8, value);
        }
    }
 
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        if (value > uint256(type(int256).max)) {
            revert SafeCastOverflowedUintToInt(value);
        }
        return int256(value);
    }

  
    function toUint(bool b) internal pure returns (uint256 u) {
        assembly ("memory-safe") {
            u := iszero(iszero(b))
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;
    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }


    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }


    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol

// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

interface IERC20Metadata is IERC20 {
//full data of JEFE TOKEN
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

// lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ShortStrings.sol)

// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |
// | length  | 0x                                                              BB |
type ShortString is bytes32;

library ShortStrings {
    // Used as an identifier for strings longer than 31 bytes.
    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;

    error StringTooLong(string str);
    error InvalidShortString();

    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);
        assembly ("memory-safe") {
            mstore(str, len)
            mstore(add(str, 0x20), sstr)
        }
        return str;
    }


    function byteLength(ShortString sstr) internal pure returns (uint256) {
        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;
        if (result > 31) {
            revert InvalidShortString();
        }
        return result;
    }
 
    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);
        }
    }
  
    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;
        }
    }
}


library SignedMath {
   
    function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {
        unchecked {
            return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));
        }
    }

  
    function max(int256 a, int256 b) internal pure returns (int256) {
        return ternary(a > b, a, b);
    }


    function min(int256 a, int256 b) internal pure returns (int256) {
        return ternary(a < b, a, b);
    }

    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            int256 mask = n >> 255;

            // A `bytes32(0)` mask leaves the input unchanged, while a `~bytes32(0)` mask complements it.
            return uint256((n + mask) ^ mask);
        }
    }
}

library Math {
    enum Rounding {
        Floor, // Toward negative infinity
        Ceil, // Toward positive infinity
        Trunc, // Toward zero
        Expand // Away from zero
    }

 
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
 
    function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }


    function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {
        unchecked {
            // branchless ternary works because:
            // b ^ (a ^ b) == a
            // b ^ 0 == b
            return b ^ ((a ^ b) * SafeCast.toUint(condition));
        }
    }

  
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return ternary(a > b, a, b);
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return ternary(a < b, a, b);
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b == 0) {
            Panic.panic(Panic.DIVISION_BY_ZERO);
        }

        unchecked {
            return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);
        }
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
 
            uint256 prod0 = x * y; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            if (prod1 == 0) {
                               return prod0 / denominator;
            }

            // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.
            if (denominator <= prod1) {
                Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));
            }

            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }


            uint256 twos = denominator & (0 - denominator);
            assembly {
                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⁸
            inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶
            inverse *= 2 - denominator * inverse; // inverse mod 2³²
            inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴
            inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸
            inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶

            result = prod0 * inverse;
            return result;
        }
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);
    }


    function invMod(uint256 a, uint256 n) internal pure returns (uint256) {
        unchecked {
            if (n == 0) return 0;


            uint256 remainder = a % n;
            uint256 gcd = n;


            int256 x = 0;
            int256 y = 1;

            while (remainder != 0) {
                uint256 quotient = gcd / remainder;

                (gcd, remainder) = (
                    remainder,
                    gcd - remainder * quotient
                );

                (x, y) = (
                    y,
                    x - y * int256(quotient)
                );
            }

            if (gcd != 1) return 0; // No inverse exists.
            return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.
        }
    }

 
    function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {
        unchecked {
            return Math.modExp(a, p - 2, p);
        }
    }

    
    function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {
        (bool success, uint256 result) = tryModExp(b, e, m);
        if (!success) {
            Panic.panic(Panic.DIVISION_BY_ZERO);
        }
        return result;
    }


    function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {
        if (m == 0) return (false, 0);
        assembly ("memory-safe") {
            let ptr := mload(0x40)
            mstore(ptr, 0x20)
            mstore(add(ptr, 0x20), 0x20)
            mstore(add(ptr, 0x40), 0x20)
            mstore(add(ptr, 0x60), b)
            mstore(add(ptr, 0x80), e)
            mstore(add(ptr, 0xa0), m)

            success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)
            result := mload(0x00)
        }
    }

 
    function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {
        (bool success, bytes memory result) = tryModExp(b, e, m);
        if (!success) {
            Panic.panic(Panic.DIVISION_BY_ZERO);
        }
        return result;
    }


    function tryModExp(
        bytes memory b,
        bytes memory e,
        bytes memory m
    ) internal view returns (bool success, bytes memory result) {
        if (_zeroBytes(m)) return (false, new bytes(0));

        uint256 mLen = m.length;

        result = abi.encodePacked(b.length, e.length, mLen, b, e, m);

        assembly ("memory-safe") {
            let dataPtr := add(result, 0x20)
            success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)
            mstore(result, mLen)
            mstore(0x40, add(dataPtr, mLen))
        }
    }

  
    function _zeroBytes(bytes memory byteArray) private pure returns (bool) {
        for (uint256 i = 0; i < byteArray.length; ++i) {
            if (byteArray[i] != 0) {
                return false;
            }
        }
        return true;
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        unchecked {
            if (a <= 1) {
                return a;
            }


            uint256 aa = a;
            uint256 xn = 1;

            if (aa >= (1 << 128)) {
                aa >>= 128;
                xn <<= 64;
            }
            if (aa >= (1 << 64)) {
                aa >>= 64;
                xn <<= 32;
            }
            if (aa >= (1 << 32)) {
                aa >>= 32;
                xn <<= 16;
            }
            if (aa >= (1 << 16)) {
                aa >>= 16;
                xn <<= 8;
            }
            if (aa >= (1 << 8)) {
                aa >>= 8;
                xn <<= 4;
            }
            if (aa >= (1 << 4)) {
                aa >>= 4;
                xn <<= 2;
            }
            if (aa >= (1 << 2)) {
                xn <<= 1;
            }

            xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5)  -- special case, see above
            xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9)    -- general case with k = 4.5
            xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18)   -- general case with k = 9
            xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36)   -- general case with k = 18
            xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72)   -- general case with k = 36
            xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144)  -- general case with k = 72

 
            return xn - SafeCast.toUint(xn > a / xn);
        }
    }

    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);
        }
    }

    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        uint256 exp;
        unchecked {
            exp = 128 * SafeCast.toUint(value > (1 << 128) - 1);
            value >>= exp;
            result += exp;

            exp = 64 * SafeCast.toUint(value > (1 << 64) - 1);
            value >>= exp;
            result += exp;

            exp = 32 * SafeCast.toUint(value > (1 << 32) - 1);
            value >>= exp;
            result += exp;

            exp = 16 * SafeCast.toUint(value > (1 << 16) - 1);
            value >>= exp;
            result += exp;

            exp = 8 * SafeCast.toUint(value > (1 << 8) - 1);
            value >>= exp;
            result += exp;

            exp = 4 * SafeCast.toUint(value > (1 << 4) - 1);
            value >>= exp;
            result += exp;

            exp = 2 * SafeCast.toUint(value > (1 << 2) - 1);
            value >>= exp;
            result += exp;

            result += SafeCast.toUint(value > 1);
        }
        return result;
    }

    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);
        }
    }

    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 + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);
        }
    }

    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        uint256 isGt;
        unchecked {
            isGt = SafeCast.toUint(value > (1 << 128) - 1);
            value >>= isGt * 128;
            result += isGt * 16;

            isGt = SafeCast.toUint(value > (1 << 64) - 1);
            value >>= isGt * 64;
            result += isGt * 8;

            isGt = SafeCast.toUint(value > (1 << 32) - 1);
            value >>= isGt * 32;
            result += isGt * 4;

            isGt = SafeCast.toUint(value > (1 << 16) - 1);
            value >>= isGt * 16;
            result += isGt * 2;

            result += SafeCast.toUint(value > (1 << 8) - 1);
        }
        return result;
    }


    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);
        }
    }


    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
        return uint8(rounding) % 2 == 1;
    }
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;
    mapping(address account => mapping(address spender => 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 returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

   
    function decimals() public view virtual returns (uint8) {
        return 9;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;
    error StringsInsufficientHexLength(uint256 value, uint256 length);
  
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            assembly ("memory-safe") {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                assembly ("memory-safe") {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    function toStringSigned(int256 value) internal pure returns (string memory) {
        return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
    }
   
    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) {
        uint256 localValue = value;
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = HEX_DIGITS[localValue & 0xf];
            localValue >>= 4;
        }
        if (localValue != 0) {
            revert StringsInsufficientHexLength(value, length);
        }
        return string(buffer);
    }

 
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
    }

    function toChecksumHexString(address addr) internal pure returns (string memory) {
        bytes memory buffer = bytes(toHexString(addr));

        uint256 hashValue;
        assembly ("memory-safe") {
            hashValue := shr(96, keccak256(add(buffer, 0x22), 40))
        }

        for (uint256 i = 41; i > 1; --i) {
            if (hashValue & 0xf > 7 && uint8(buffer[i]) > 96) {
                buffer[i] ^= 0x20;
            }
            hashValue >>= 4;
        }
        return string(buffer);
    }

    function equal(string memory a, string memory b) internal pure returns (bool) {
        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
    }
}
    //No burning allowed

library MessageHashUtils {
  
    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {
        assembly ("memory-safe") {
            mstore(0x00, "\x19Signed 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("\x19Signed 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) {
        assembly ("memory-safe") {
            let ptr := mload(0x40)
            mstore(ptr, hex"19_01")
            mstore(add(ptr, 0x02), domainSeparator)
            mstore(add(ptr, 0x22), structHash)
            digest := keccak256(ptr, 0x42)
        }
    }
}

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);
    }

    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);
    }

    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);
    }
}


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)");
    error ERC2612ExpiredSignature(uint256 deadline);
    error ERC2612InvalidSigner(address signer, address owner);
    constructor(string memory name) EIP712(name, "1") {}

    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);
    }

    function nonces(address owner) public view virtual override(IERC20Permit, Nonces) returns (uint256) {
        return super.nonces(owner);
    }

    function DOMAIN_SEPARATOR() external view virtual returns (bytes32) {
        return _domainSeparatorV4();
    }
}

// Compatible with OpenZeppelin Contracts ^5.0.0

contract JEFE is ERC20, ERC20Permit, Ownable {

    uint256 public constant MAX_SUPPLY = 10_000_000 * 10 ** 9;  
    //  max supply

    constructor(
        address initialOwner
    ) ERC20("JEFE TOKEN", "JEFE") ERC20Permit("JEFE TOKEN") Ownable(initialOwner) {
        _mint(initialOwner, MAX_SUPPLY);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","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":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"value","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"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":[],"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":"value","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":"value","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"}]

61016060405234801562000011575f80fd5b506040516200168b3803806200168b833981016040819052620000349162000418565b806040518060400160405280600a8152602001692522a322902a27a5a2a760b11b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600a8152602001692522a322902a27a5a2a760b11b815250604051806040016040528060048152602001634a45464560e01b8152508160039081620000c49190620004e7565b506004620000d38282620004e7565b50620000e591508390506005620001e2565b61012052620000f6816006620001e2565b61014052815160208084019190912060e052815190820120610100524660a0526200018360e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b038116620001bc57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b620001c7816200021a565b50620001db81662386f26fc100006200026b565b5062000640565b5f6020835110156200020157620001f983620002a7565b905062000214565b816200020e8482620004e7565b5060ff90505b92915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620002965760405163ec442f0560e01b81525f6004820152602401620001b3565b620002a35f8383620002e9565b5050565b5f80829050601f81511115620002d4578260405163305a27a960e01b8152600401620001b39190620005af565b8051620002e182620005fc565b179392505050565b6001600160a01b03831662000317578060025f8282546200030b919062000620565b90915550620003899050565b6001600160a01b0383165f90815260208190526040902054818110156200036b5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620001b3565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216620003a757600280548290039055620003c5565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200040b91815260200190565b60405180910390a3505050565b5f6020828403121562000429575f80fd5b81516001600160a01b038116811462000440575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200047057607f821691505b6020821081036200048f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004e2575f81815260208120601f850160051c81016020861015620004bd5750805b601f850160051c820191505b81811015620004de57828155600101620004c9565b5050505b505050565b81516001600160401b0381111562000503576200050362000447565b6200051b816200051484546200045b565b8462000495565b602080601f83116001811462000551575f8415620005395750858301515b5f19600386901b1c1916600185901b178555620004de565b5f85815260208120601f198616915b82811015620005815788860151825594840194600190910190840162000560565b50858210156200059f57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020808352835180828501525f5b81811015620005dc57858101830151858201604001528201620005be565b505f604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200048f575f1960209190910360031b1b16919050565b808201808211156200021457634e487b7160e01b5f52601160045260245ffd5b60805160a05160c05160e051610100516101205161014051610ff9620006925f395f61082e01525f61080101525f61072c01525f61070401525f61065f01525f61068901525f6106b30152610ff95ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c8063715018a61161009e57806395d89b411161006e57806395d89b4114610210578063a9059cbb14610218578063d505accf1461022b578063dd62ed3e1461023e578063f2fde38b14610276575f80fd5b8063715018a6146101bd5780637ecebe00146101c757806384b0196e146101da5780638da5cb5b146101f5575f80fd5b8063313ce567116100d9578063313ce5671461017057806332cb6b0c1461017f5780633644e5151461018d57806370a0823114610195575f80fd5b806306fdde031461010a578063095ea7b31461012857806318160ddd1461014b57806323b872dd1461015d575b5f80fd5b610112610289565b60405161011f9190610d78565b60405180910390f35b61013b610136366004610dac565b610319565b604051901515815260200161011f565b6002545b60405190815260200161011f565b61013b61016b366004610dd4565b610332565b6040516009815260200161011f565b61014f662386f26fc1000081565b61014f610355565b61014f6101a3366004610e0d565b6001600160a01b03165f9081526020819052604090205490565b6101c5610363565b005b61014f6101d5366004610e0d565b610376565b6101e2610393565b60405161011f9796959493929190610e26565b6008546040516001600160a01b03909116815260200161011f565b6101126103d5565b61013b610226366004610dac565b6103e4565b6101c5610239366004610eba565b6103f1565b61014f61024c366004610f27565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101c5610284366004610e0d565b61052c565b60606003805461029890610f58565b80601f01602080910402602001604051908101604052809291908181526020018280546102c490610f58565b801561030f5780601f106102e65761010080835404028352916020019161030f565b820191905f5260205f20905b8154815290600101906020018083116102f257829003601f168201915b5050505050905090565b5f33610326818585610569565b60019150505b92915050565b5f3361033f85828561057b565b61034a8585856105f6565b506001949350505050565b5f61035e610653565b905090565b61036b61077c565b6103745f6107a9565b565b6001600160a01b0381165f9081526007602052604081205461032c565b5f6060805f805f60606103a46107fa565b6103ac610827565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606004805461029890610f58565b5f336103268185856105f6565b8342111561041a5760405163313c898160e11b8152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104658c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6104bf82610854565b90505f6104ce82878787610880565b9050896001600160a01b0316816001600160a01b031614610515576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610411565b6105208a8a8a610569565b50505050505050505050565b61053461077c565b6001600160a01b03811661055d57604051631e4fbdf760e01b81525f6004820152602401610411565b610566816107a9565b50565b61057683838360016108ac565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146105f057818110156105e257604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610411565b6105f084848484035f6108ac565b50505050565b6001600160a01b03831661061f57604051634b637e8f60e11b81525f6004820152602401610411565b6001600160a01b0382166106485760405163ec442f0560e01b81525f6004820152602401610411565b61057683838361097e565b5f306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156106ab57507f000000000000000000000000000000000000000000000000000000000000000046145b156106d557507f000000000000000000000000000000000000000000000000000000000000000090565b61035e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6008546001600160a01b031633146103745760405163118cdaa760e01b8152336004820152602401610411565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606061035e7f00000000000000000000000000000000000000000000000000000000000000006005610aa4565b606061035e7f00000000000000000000000000000000000000000000000000000000000000006006610aa4565b5f61032c610860610653565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8061089088888888610b4d565b9250925092506108a08282610c15565b50909695505050505050565b6001600160a01b0384166108d55760405163e602df0560e01b81525f6004820152602401610411565b6001600160a01b0383166108fe57604051634a1406b160e11b81525f6004820152602401610411565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156105f057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161097091815260200190565b60405180910390a350505050565b6001600160a01b0383166109a8578060025f82825461099d9190610f90565b90915550610a189050565b6001600160a01b0383165f90815260208190526040902054818110156109fa5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610411565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a3457600280548290039055610a52565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a9791815260200190565b60405180910390a3505050565b606060ff8314610abe57610ab783610cd1565b905061032c565b818054610aca90610f58565b80601f0160208091040260200160405190810160405280929190818152602001828054610af690610f58565b8015610b415780601f10610b1857610100808354040283529160200191610b41565b820191905f5260205f20905b815481529060010190602001808311610b2457829003601f168201915b5050505050905061032c565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610b8657505f91506003905082610c0b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610bd7573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c0257505f925060019150829050610c0b565b92505f91508190505b9450945094915050565b5f826003811115610c2857610c28610faf565b03610c31575050565b6001826003811115610c4557610c45610faf565b03610c635760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610c7757610c77610faf565b03610c985760405163fce698f760e01b815260048101829052602401610411565b6003826003811115610cac57610cac610faf565b03610ccd576040516335e2f38360e21b815260048101829052602401610411565b5050565b60605f610cdd83610d0e565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561032c57604051632cd44ac360e21b815260040160405180910390fd5b5f81518084525f5b81811015610d5957602081850181015186830182015201610d3d565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610d8a6020830184610d35565b9392505050565b80356001600160a01b0381168114610da7575f80fd5b919050565b5f8060408385031215610dbd575f80fd5b610dc683610d91565b946020939093013593505050565b5f805f60608486031215610de6575f80fd5b610def84610d91565b9250610dfd60208501610d91565b9150604084013590509250925092565b5f60208284031215610e1d575f80fd5b610d8a82610d91565b60ff60f81b881681525f602060e081840152610e4560e084018a610d35565b8381036040850152610e57818a610d35565b606085018990526001600160a01b038816608086015260a0850187905284810360c086015285518082528387019250908301905f5b81811015610ea857835183529284019291840191600101610e8c565b50909c9b505050505050505050505050565b5f805f805f805f60e0888a031215610ed0575f80fd5b610ed988610d91565b9650610ee760208901610d91565b95506040880135945060608801359350608088013560ff81168114610f0a575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215610f38575f80fd5b610f4183610d91565b9150610f4f60208401610d91565b90509250929050565b600181811c90821680610f6c57607f821691505b602082108103610f8a57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561032c57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220f0de2ee72934fd6590a802c9eb175bf6af3d871eec4169bb77cbe92fab056ec164736f6c63430008150033000000000000000000000000f7836552f9fefce49f819649ebbd26b354c6fc10

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c8063715018a61161009e57806395d89b411161006e57806395d89b4114610210578063a9059cbb14610218578063d505accf1461022b578063dd62ed3e1461023e578063f2fde38b14610276575f80fd5b8063715018a6146101bd5780637ecebe00146101c757806384b0196e146101da5780638da5cb5b146101f5575f80fd5b8063313ce567116100d9578063313ce5671461017057806332cb6b0c1461017f5780633644e5151461018d57806370a0823114610195575f80fd5b806306fdde031461010a578063095ea7b31461012857806318160ddd1461014b57806323b872dd1461015d575b5f80fd5b610112610289565b60405161011f9190610d78565b60405180910390f35b61013b610136366004610dac565b610319565b604051901515815260200161011f565b6002545b60405190815260200161011f565b61013b61016b366004610dd4565b610332565b6040516009815260200161011f565b61014f662386f26fc1000081565b61014f610355565b61014f6101a3366004610e0d565b6001600160a01b03165f9081526020819052604090205490565b6101c5610363565b005b61014f6101d5366004610e0d565b610376565b6101e2610393565b60405161011f9796959493929190610e26565b6008546040516001600160a01b03909116815260200161011f565b6101126103d5565b61013b610226366004610dac565b6103e4565b6101c5610239366004610eba565b6103f1565b61014f61024c366004610f27565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101c5610284366004610e0d565b61052c565b60606003805461029890610f58565b80601f01602080910402602001604051908101604052809291908181526020018280546102c490610f58565b801561030f5780601f106102e65761010080835404028352916020019161030f565b820191905f5260205f20905b8154815290600101906020018083116102f257829003601f168201915b5050505050905090565b5f33610326818585610569565b60019150505b92915050565b5f3361033f85828561057b565b61034a8585856105f6565b506001949350505050565b5f61035e610653565b905090565b61036b61077c565b6103745f6107a9565b565b6001600160a01b0381165f9081526007602052604081205461032c565b5f6060805f805f60606103a46107fa565b6103ac610827565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606004805461029890610f58565b5f336103268185856105f6565b8342111561041a5760405163313c898160e11b8152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104658c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6104bf82610854565b90505f6104ce82878787610880565b9050896001600160a01b0316816001600160a01b031614610515576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610411565b6105208a8a8a610569565b50505050505050505050565b61053461077c565b6001600160a01b03811661055d57604051631e4fbdf760e01b81525f6004820152602401610411565b610566816107a9565b50565b61057683838360016108ac565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146105f057818110156105e257604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610411565b6105f084848484035f6108ac565b50505050565b6001600160a01b03831661061f57604051634b637e8f60e11b81525f6004820152602401610411565b6001600160a01b0382166106485760405163ec442f0560e01b81525f6004820152602401610411565b61057683838361097e565b5f306001600160a01b037f00000000000000000000000070e7f1d907e30efb18fe1dd8a1d75c09a98177d3161480156106ab57507f000000000000000000000000000000000000000000000000000000000000009246145b156106d557507fa974071c67a6964d31db3e60079dc554fd8adbeb93d3ff655bff56a608030d9290565b61035e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6b6d8a434d02ec021f79d6d3ff49f0797c6a0523fc1eef20ab3790adf1f0e9ff918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6008546001600160a01b031633146103745760405163118cdaa760e01b8152336004820152602401610411565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606061035e7f4a45464520544f4b454e0000000000000000000000000000000000000000000a6005610aa4565b606061035e7f31000000000000000000000000000000000000000000000000000000000000016006610aa4565b5f61032c610860610653565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8061089088888888610b4d565b9250925092506108a08282610c15565b50909695505050505050565b6001600160a01b0384166108d55760405163e602df0560e01b81525f6004820152602401610411565b6001600160a01b0383166108fe57604051634a1406b160e11b81525f6004820152602401610411565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156105f057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161097091815260200190565b60405180910390a350505050565b6001600160a01b0383166109a8578060025f82825461099d9190610f90565b90915550610a189050565b6001600160a01b0383165f90815260208190526040902054818110156109fa5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610411565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a3457600280548290039055610a52565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a9791815260200190565b60405180910390a3505050565b606060ff8314610abe57610ab783610cd1565b905061032c565b818054610aca90610f58565b80601f0160208091040260200160405190810160405280929190818152602001828054610af690610f58565b8015610b415780601f10610b1857610100808354040283529160200191610b41565b820191905f5260205f20905b815481529060010190602001808311610b2457829003601f168201915b5050505050905061032c565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610b8657505f91506003905082610c0b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610bd7573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c0257505f925060019150829050610c0b565b92505f91508190505b9450945094915050565b5f826003811115610c2857610c28610faf565b03610c31575050565b6001826003811115610c4557610c45610faf565b03610c635760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610c7757610c77610faf565b03610c985760405163fce698f760e01b815260048101829052602401610411565b6003826003811115610cac57610cac610faf565b03610ccd576040516335e2f38360e21b815260048101829052602401610411565b5050565b60605f610cdd83610d0e565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561032c57604051632cd44ac360e21b815260040160405180910390fd5b5f81518084525f5b81811015610d5957602081850181015186830182015201610d3d565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610d8a6020830184610d35565b9392505050565b80356001600160a01b0381168114610da7575f80fd5b919050565b5f8060408385031215610dbd575f80fd5b610dc683610d91565b946020939093013593505050565b5f805f60608486031215610de6575f80fd5b610def84610d91565b9250610dfd60208501610d91565b9150604084013590509250925092565b5f60208284031215610e1d575f80fd5b610d8a82610d91565b60ff60f81b881681525f602060e081840152610e4560e084018a610d35565b8381036040850152610e57818a610d35565b606085018990526001600160a01b038816608086015260a0850187905284810360c086015285518082528387019250908301905f5b81811015610ea857835183529284019291840191600101610e8c565b50909c9b505050505050505050505050565b5f805f805f805f60e0888a031215610ed0575f80fd5b610ed988610d91565b9650610ee760208901610d91565b95506040880135945060608801359350608088013560ff81168114610f0a575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215610f38575f80fd5b610f4183610d91565b9150610f4f60208401610d91565b90509250929050565b600181811c90821680610f6c57607f821691505b602082108103610f8a57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561032c57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220f0de2ee72934fd6590a802c9eb175bf6af3d871eec4169bb77cbe92fab056ec164736f6c63430008150033

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

000000000000000000000000f7836552f9fefce49f819649ebbd26b354c6fc10

-----Decoded View---------------
Arg [0] : initialOwner (address): 0xf7836552f9Fefce49f819649ebBd26B354C6fc10

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f7836552f9fefce49f819649ebbd26b354c6fc10


Deployed Bytecode Sourcemap

56852:321:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45152:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46023:190;;;;;;:::i;:::-;;:::i;:::-;;;1269:14:1;;1262:22;1244:41;;1232:2;1217:18;46023:190:0;1104:187:1;45450:99:0;45529:12;;45450:99;;;1442:25:1;;;1430:2;1415:18;45450:99:0;1296:177:1;46221:249:0;;;;;;:::i;:::-;;:::i;45359:83::-;;;45433:1;1953:36:1;;1941:2;1926:18;45359:83:0;1811:184:1;56906:57:0;;56943:20;56906:57;;56679:114;;;:::i;45557:118::-;;;;;;:::i;:::-;-1:-1:-1;;;;;45649:18:0;45622:7;45649:18;;;;;;;;;;;;45557:118;26658:103;;;:::i;:::-;;56526:145;;;;;;:::i;:::-;;:::i;54551:580::-;;;:::i;:::-;;;;;;;;;;;;;:::i;26387:87::-;26460:6;;26387:87;;-1:-1:-1;;;;;26460:6:0;;;3783:51:1;;3771:2;3756:18;26387:87:0;3637:203:1;45251:95:0;;;:::i;45683:182::-;;;;;;:::i;:::-;;:::i;55827:691::-;;;;;;:::i;:::-;;:::i;45873:142::-;;;;;;:::i;:::-;-1:-1:-1;;;;;45980:18:0;;;45953:7;45980:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;45873:142;26769:220;;;;;;:::i;:::-;;:::i;45152:91::-;45197:13;45230:5;45223:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45152:91;:::o;46023:190::-;46096:4;3135:10;46152:31;3135:10;46168:7;46177:5;46152:8;:31::i;:::-;46201:4;46194:11;;;46023:190;;;;;:::o;46221:249::-;46308:4;3135:10;46366:37;46382:4;3135:10;46397:5;46366:15;:37::i;:::-;46414:26;46424:4;46430:2;46434:5;46414:9;:26::i;:::-;-1:-1:-1;46458:4:0;;46221:249;-1:-1:-1;;;;46221:249:0:o;56679:114::-;56738:7;56765:20;:18;:20::i;:::-;56758:27;;56679:114;:::o;26658:103::-;26344:13;:11;:13::i;:::-;26723:30:::1;26750:1;26723:18;:30::i;:::-;26658:103::o:0;56526:145::-;-1:-1:-1;;;;;3631:14:0;;56617:7;3631:14;;;:7;:14;;;;;;56644:19;3544:109;54551:580;54654:13;54682:18;54715:21;54751:15;54781:25;54821:12;54848:27;54956:13;:11;:13::i;:::-;54984:16;:14;:16::i;:::-;55096;;;55079:1;55096:16;;;;;;;;;-1:-1:-1;;;54903:220:0;;;-1:-1:-1;54903:220:0;;-1:-1:-1;55015:13:0;;-1:-1:-1;55051:4:0;;-1:-1:-1;55079:1:0;-1:-1:-1;55096:16:0;-1:-1:-1;54903:220:0;-1:-1:-1;54551:580:0:o;45251:95::-;45298:13;45331:7;45324:14;;;;;:::i;45683:182::-;45752:4;3135:10;45808:27;3135:10;45825:2;45829:5;45808:9;:27::i;55827:691::-;56057:8;56039:15;:26;56035:99;;;56089:33;;-1:-1:-1;;;56089:33:0;;;;;1442:25:1;;;1415:18;;56089:33:0;;;;;;;;56035:99;56146:18;55547:95;56205:5;56212:7;56221:5;56228:16;56238:5;-1:-1:-1;;;;;3784:14:0;3726:7;3784:14;;;:7;:14;;;;;:16;;;;;;;;;3666:153;56228:16;56177:78;;;;;;5612:25:1;;;;-1:-1:-1;;;;;5711:15:1;;;5691:18;;;5684:43;5763:15;;;;5743:18;;;5736:43;5795:18;;;5788:34;5838:19;;;5831:35;5882:19;;;5875:35;;;5584:19;;56177:78:0;;;;;;;;;;;;56167:89;;;;;;56146:110;;56267:12;56282:28;56299:10;56282:16;:28::i;:::-;56267:43;;56321:14;56338:28;56352:4;56358:1;56361;56364;56338:13;:28::i;:::-;56321:45;;56391:5;-1:-1:-1;;;;;56381:15:0;:6;-1:-1:-1;;;;;56381:15:0;;56377:90;;56420:35;;-1:-1:-1;;;56420:35:0;;-1:-1:-1;;;;;6151:15:1;;;56420:35:0;;;6133:34:1;6203:15;;6183:18;;;6176:43;6068:18;;56420:35:0;5921:304:1;56377:90:0;56479:31;56488:5;56495:7;56504:5;56479:8;:31::i;:::-;56024:494;;;55827:691;;;;;;;:::o;26769:220::-;26344:13;:11;:13::i;:::-;-1:-1:-1;;;;;26854:22:0;::::1;26850:93;;26900:31;::::0;-1:-1:-1;;;26900:31:0;;26928:1:::1;26900:31;::::0;::::1;3783:51:1::0;3756:18;;26900:31:0::1;3637:203:1::0;26850:93:0::1;26953:28;26972:8;26953:18;:28::i;:::-;26769:220:::0;:::o;47753:130::-;47838:37;47847:5;47854:7;47863:5;47870:4;47838:8;:37::i;:::-;47753:130;;;:::o;48342:487::-;-1:-1:-1;;;;;45980:18:0;;;48442:24;45980:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;48509:37:0;;48505:317;;48586:5;48567:16;:24;48563:132;;;48619:60;;-1:-1:-1;;;48619:60:0;;-1:-1:-1;;;;;6450:32:1;;48619:60:0;;;6432:51:1;6499:18;;;6492:34;;;6542:18;;;6535:34;;;6405:18;;48619:60:0;6230:345:1;48563:132:0;48738:57;48747:5;48754:7;48782:5;48763:16;:24;48789:5;48738:8;:57::i;:::-;48431:398;48342:487;;;:::o;46478:308::-;-1:-1:-1;;;;;46562:18:0;;46558:88;;46604:30;;-1:-1:-1;;;46604:30:0;;46631:1;46604:30;;;3783:51:1;3756:18;;46604:30:0;3637:203:1;46558:88:0;-1:-1:-1;;;;;46660:16:0;;46656:88;;46700:32;;-1:-1:-1;;;46700:32:0;;46729:1;46700:32;;;3783:51:1;3756:18;;46700:32:0;3637:203:1;46656:88:0;46754:24;46762:4;46768:2;46772:5;46754:7;:24::i;53897:268::-;53950:7;53982:4;-1:-1:-1;;;;;53991:11:0;53974:28;;:63;;;;;54023:14;54006:13;:31;53974:63;53970:188;;;-1:-1:-1;54061:22:0;;53897:268::o;53970:188::-;54123:23;54265:80;;;52942:95;54265:80;;;7066:25:1;54287:11:0;7107:18:1;;;7100:34;;;;54300:14:0;7150:18:1;;;7143:34;54316:13:0;7193:18:1;;;7186:34;54339:4:0;7236:19:1;;;7229:61;54228:7:0;;7038:19:1;;54265:80:0;;;;;;;;;;;;54255:91;;;;;;54248:98;;54173:181;;26482:166;26460:6;;-1:-1:-1;;;;;26460:6:0;3135:10;26542:23;26538:103;;26589:40;;-1:-1:-1;;;26589:40:0;;3135:10;26589:40;;;3783:51:1;3756:18;;26589:40:0;3637:203:1;26997:191:0;27090:6;;;-1:-1:-1;;;;;27107:17:0;;;-1:-1:-1;;;;;;27107:17:0;;;;;;;27140:40;;27090:6;;;27107:17;27090:6;;27140:40;;27071:16;;27140:40;27060:128;26997:191;:::o;55141:128::-;55187:13;55220:41;:5;55247:13;55220:26;:41::i;55277:137::-;55326:13;55359:47;:8;55389:16;55359:29;:47::i;54365:178::-;54442:7;54469:66;54502:20;:18;:20::i;:::-;54524:10;52613:4;52607:11;-1:-1:-1;;;52632:23:0;;52685:4;52676:14;;52669:39;;;;52738:4;52729:14;;52722:34;52795:4;52780:20;;;52436:382;9560:264;9645:7;9666:17;9685:18;9705:16;9725:25;9736:4;9742:1;9745;9748;9725:10;:25::i;:::-;9665:85;;;;;;9761:28;9773:5;9780:8;9761:11;:28::i;:::-;-1:-1:-1;9807:9:0;;9560:264;-1:-1:-1;;;;;;9560:264:0:o;47891:443::-;-1:-1:-1;;;;;48004:19:0;;48000:91;;48047:32;;-1:-1:-1;;;48047:32:0;;48076:1;48047:32;;;3783:51:1;3756:18;;48047:32:0;3637:203:1;48000:91:0;-1:-1:-1;;;;;48105:21:0;;48101:92;;48150:31;;-1:-1:-1;;;48150:31:0;;48178:1;48150:31;;;3783:51:1;3756:18;;48150:31:0;3637:203:1;48101:92:0;-1:-1:-1;;;;;48203:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;48249:78;;;;48300:7;-1:-1:-1;;;;;48284:31:0;48293:5;-1:-1:-1;;;;;48284:31:0;;48309:5;48284:31;;;;1442:25:1;;1430:2;1415:18;;1296:177;48284:31:0;;;;;;;;47891:443;;;;:::o;46794:730::-;-1:-1:-1;;;;;46884:18:0;;46880:369;;46935:5;46919:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;46880:369:0;;-1:-1:-1;46880:369:0;;-1:-1:-1;;;;;46995:15:0;;46973:19;46995:15;;;;;;;;;;;47029:19;;;47025:117;;;47076:50;;-1:-1:-1;;;47076:50:0;;-1:-1:-1;;;;;6450:32:1;;47076:50:0;;;6432:51:1;6499:18;;;6492:34;;;6542:18;;;6535:34;;;6405:18;;47076:50:0;6230:345:1;47025:117:0;-1:-1:-1;;;;;47185:15:0;;:9;:15;;;;;;;;;;47203:19;;;;47185:37;;46880:369;-1:-1:-1;;;;;47265:16:0;;47261:213;;47327:12;:21;;;;;;;47261:213;;;-1:-1:-1;;;;;47425:13:0;;:9;:13;;;;;;;;;;:22;;;;;;47261:213;47506:2;-1:-1:-1;;;;;47491:25:0;47500:4;-1:-1:-1;;;;;47491:25:0;;47510:5;47491:25;;;;1442::1;;1430:2;1415:18;;1296:177;47491:25:0;;;;;;;;46794:730;;;:::o;29485:273::-;29579:13;28102:66;29609:46;;29605:146;;29679:15;29688:5;29679:8;:15::i;:::-;29672:22;;;;29605:146;29734:5;29727:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8934:618;9065:17;;;9155:66;9142:79;;9138:166;;;-1:-1:-1;9254:1:0;;-1:-1:-1;9258:30:0;;-1:-1:-1;9290:1:0;9238:54;;9138:166;9333:24;;;9316:14;9333:24;;;;;;;;;7528:25:1;;;7601:4;7589:17;;7569:18;;;7562:45;;;;7623:18;;;7616:34;;;7666:18;;;7659:34;;;9333:24:0;;7500:19:1;;9333:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9333:24:0;;-1:-1:-1;;9333:24:0;;;-1:-1:-1;;;;;;;9372:20:0;;9368:115;;-1:-1:-1;9425:1:0;;-1:-1:-1;9429:29:0;;-1:-1:-1;9425:1:0;;-1:-1:-1;9409:62:0;;9368:115;9503:6;-1:-1:-1;9511:20:0;;-1:-1:-1;9511:20:0;;-1:-1:-1;8934:618:0;;;;;;;;;:::o;9830:542::-;9926:20;9917:5;:29;;;;;;;;:::i;:::-;;9913:452;;9830:542;;:::o;9913:452::-;10024:29;10015:5;:38;;;;;;;;:::i;:::-;;10011:354;;10077:23;;-1:-1:-1;;;10077:23:0;;;;;;;;;;;10011:354;10131:35;10122:5;:44;;;;;;;;:::i;:::-;;10118:247;;10190:46;;-1:-1:-1;;;10190:46:0;;;;;1442:25:1;;;1415:18;;10190:46:0;1296:177:1;10118:247:0;10267:30;10258:5;:39;;;;;;;;:::i;:::-;;10254:111;;10321:32;;-1:-1:-1;;;10321:32:0;;;;;1442:25:1;;;1415:18;;10321:32:0;1296:177:1;10254:111:0;9830:542;;:::o;28550:308::-;28609:13;28635:11;28649:16;28660:4;28649:10;:16::i;:::-;28696:14;;;28707:2;28696:14;;;;;;;;;28635:30;;-1:-1:-1;28676:17:0;;28696:14;;;;;;;;;-1:-1:-1;;;28761:16:0;;;-1:-1:-1;28807:4:0;28798:14;;28791:28;;;;-1:-1:-1;28761:16:0;28550:308::o;28868:251::-;28929:7;29002:4;28966:40;;29030:2;29021:11;;29017:71;;;29056:20;;-1:-1:-1;;;29056:20:0;;;;;;;;;;;14:423:1;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;:::-;603:53;442:220;-1:-1:-1;;;442:220:1:o;667:173::-;735:20;;-1:-1:-1;;;;;784:31:1;;774:42;;764:70;;830:1;827;820:12;764:70;667:173;;;:::o;845:254::-;913:6;921;974:2;962:9;953:7;949:23;945:32;942:52;;;990:1;987;980:12;942:52;1013:29;1032:9;1013:29;:::i;:::-;1003:39;1089:2;1074:18;;;;1061:32;;-1:-1:-1;;;845:254:1:o;1478:328::-;1555:6;1563;1571;1624:2;1612:9;1603:7;1599:23;1595:32;1592:52;;;1640:1;1637;1630:12;1592:52;1663:29;1682:9;1663:29;:::i;:::-;1653:39;;1711:38;1745:2;1734:9;1730:18;1711:38;:::i;:::-;1701:48;;1796:2;1785:9;1781:18;1768:32;1758:42;;1478:328;;;;;:::o;2182:186::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:52;;;2310:1;2307;2300:12;2262:52;2333:29;2352:9;2333:29;:::i;2373:1259::-;2779:3;2774;2770:13;2762:6;2758:26;2747:9;2740:45;2721:4;2804:2;2842:3;2837:2;2826:9;2822:18;2815:31;2869:46;2910:3;2899:9;2895:19;2887:6;2869:46;:::i;:::-;2963:9;2955:6;2951:22;2946:2;2935:9;2931:18;2924:50;2997:33;3023:6;3015;2997:33;:::i;:::-;3061:2;3046:18;;3039:34;;;-1:-1:-1;;;;;3110:32:1;;3104:3;3089:19;;3082:61;3130:3;3159:19;;3152:35;;;3224:22;;;3218:3;3203:19;;3196:51;3296:13;;3318:22;;;3394:15;;;;-1:-1:-1;3356:15:1;;;;-1:-1:-1;3437:169:1;3451:6;3448:1;3445:13;3437:169;;;3512:13;;3500:26;;3581:15;;;;3546:12;;;;3473:1;3466:9;3437:169;;;-1:-1:-1;3623:3:1;;2373:1259;-1:-1:-1;;;;;;;;;;;;2373:1259:1:o;3845:693::-;3956:6;3964;3972;3980;3988;3996;4004;4057:3;4045:9;4036:7;4032:23;4028:33;4025:53;;;4074:1;4071;4064:12;4025:53;4097:29;4116:9;4097:29;:::i;:::-;4087:39;;4145:38;4179:2;4168:9;4164:18;4145:38;:::i;:::-;4135:48;;4230:2;4219:9;4215:18;4202:32;4192:42;;4281:2;4270:9;4266:18;4253:32;4243:42;;4335:3;4324:9;4320:19;4307:33;4380:4;4373:5;4369:16;4362:5;4359:27;4349:55;;4400:1;4397;4390:12;4349:55;3845:693;;;;-1:-1:-1;3845:693:1;;;;4423:5;4475:3;4460:19;;4447:33;;-1:-1:-1;4527:3:1;4512:19;;;4499:33;;3845:693;-1:-1:-1;;3845:693:1:o;4543:260::-;4611:6;4619;4672:2;4660:9;4651:7;4647:23;4643:32;4640:52;;;4688:1;4685;4678:12;4640:52;4711:29;4730:9;4711:29;:::i;:::-;4701:39;;4759:38;4793:2;4782:9;4778:18;4759:38;:::i;:::-;4749:48;;4543:260;;;;;:::o;4808:380::-;4887:1;4883:12;;;;4930;;;4951:61;;5005:4;4997:6;4993:17;4983:27;;4951:61;5058:2;5050:6;5047:14;5027:18;5024:38;5021:161;;5104:10;5099:3;5095:20;5092:1;5085:31;5139:4;5136:1;5129:15;5167:4;5164:1;5157:15;5021:161;;4808:380;;;:::o;6580:222::-;6645:9;;;6666:10;;;6663:133;;;6718:10;6713:3;6709:20;6706:1;6699:31;6753:4;6750:1;6743:15;6781:4;6778:1;6771:15;7704:127;7765:10;7760:3;7756:20;7753:1;7746:31;7796:4;7793:1;7786:15;7820:4;7817:1;7810:15

Swarm Source

ipfs://f0de2ee72934fd6590a802c9eb175bf6af3d871eec4169bb77cbe92fab056ec1

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading

OVERVIEW

JEFETOKEN is a software development project focused on smart contracts, blockchain technology, video games & mobile applications. Our goal is to create an ecosystem of web3 applications.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.