Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xF0a9064B7D579Ab133191AA5e280bC2cBd0d6039
Balance 0 ETH
Nonce 1
Code Size 8506 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

8506 bytes
0x6080604052600436106102ad5760003560e01c80638d8f2adb11610165578063bbc0c742116100cc578063e0f3ccf511610085578063e0f3ccf514610815578063e2f456051461082b578063e4748b9e14610841578063ec28438a14610857578063f2fde38b14610877578063f8821a6214610897578063f928364c146108ad57600080fd5b8063bbc0c74214610754578063c024666814610775578063c20c43bf14610795578063dcf7aef3146107b5578063dd62ed3e146107d5578063e01af92c146107f557600080fd5b8063a2edb2c31161011e578063a2edb2c314610694578063a457c2d7146106ae578063a72905a2146106ce578063a9059cbb146106fe578063aa4bde281461071e578063afa4f3b21461073457600080fd5b80638d8f2adb146106015780638da5cb5b1461061657806395927c251461062b57806395d89b411461064b578063a0ef91df14610660578063a2d83c421461067557600080fd5b806343d4f92b11610214578063715018a6116101cd578063715018a61461054b57806373d00224146105605780637571336a1461057557806375f0a874146105955780637bce5a04146105b55780637e26cafa146105cb5780638c0b5e22146105eb57600080fd5b806343d4f92b1461046857806349bd5a5e146104885780634fbee193146104a857806354f9c98c146104e15780636ddd17131461051157806370a082311461052b57600080fd5b8063293230b811610266578063293230b8146103ad5780632b5ba3b9146103c2578063313ce567146103f25780633582ad231461040e5780633950935114610428578063418eeb291461044857600080fd5b806306fdde03146102b9578063095ea7b3146102e45780631694505e1461031457806318160ddd1461034c57806323b872dd1461036b57806327a14fc21461038b57600080fd5b366102b457005b600080fd5b3480156102c557600080fd5b506102ce6108c2565b6040516102db9190611c9d565b60405180910390f35b3480156102f057600080fd5b506103046102ff366004611d00565b610954565b60405190151581526020016102db565b34801561032057600080fd5b50600754610334906001600160a01b031681565b6040516001600160a01b0390911681526020016102db565b34801561035857600080fd5b506002545b6040519081526020016102db565b34801561037757600080fd5b50610304610386366004611d2c565b61096e565b34801561039757600080fd5b506103ab6103a6366004611d6d565b610992565b005b3480156103b957600080fd5b506103ab6109f2565b3480156103ce57600080fd5b506103046103dd366004611d86565b60146020526000908152604090205460ff1681565b3480156103fe57600080fd5b50604051601281526020016102db565b34801561041a57600080fd5b506011546103049060ff1681565b34801561043457600080fd5b50610304610443366004611d00565b610a2a565b34801561045457600080fd5b50610304610463366004611d6d565b610a4c565b34801561047457600080fd5b506103ab610483366004611d86565b610aed565b34801561049457600080fd5b50600654610334906001600160a01b031681565b3480156104b457600080fd5b506103046104c3366004611d86565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156104ed57600080fd5b506103046104fc366004611d86565b600d6020526000908152604090205460ff1681565b34801561051d57600080fd5b50600c546103049060ff1681565b34801561053757600080fd5b5061035d610546366004611d86565b610b17565b34801561055757600080fd5b506103ab610b32565b34801561056c57600080fd5b506103ab610b46565b34801561058157600080fd5b506103ab610590366004611db3565b610bbe565b3480156105a157600080fd5b50600954610334906001600160a01b031681565b3480156105c157600080fd5b5061035d60165481565b3480156105d757600080fd5b506103ab6105e6366004611db3565b610bf1565b3480156105f757600080fd5b5061035d600e5481565b34801561060d57600080fd5b506103ab610ca1565b34801561062257600080fd5b50610334610d49565b34801561063757600080fd5b506103ab610646366004611d6d565b610d58565b34801561065757600080fd5b506102ce610d76565b34801561066c57600080fd5b506103ab610d85565b34801561068157600080fd5b5060115461030490610100900460ff1681565b3480156106a057600080fd5b506013546103049060ff1681565b3480156106ba57600080fd5b506103046106c9366004611d00565b610d9f565b3480156106da57600080fd5b506103046106e9366004611d86565b601a6020526000908152604090205460ff1681565b34801561070a57600080fd5b50610304610719366004611d00565b610e1a565b34801561072a57600080fd5b5061035d600f5481565b34801561074057600080fd5b5061030461074f366004611d6d565b610e28565b34801561076057600080fd5b5060065461030490600160a01b900460ff1681565b34801561078157600080fd5b506103ab610790366004611db3565b610ebb565b3480156107a157600080fd5b506103ab6107b0366004611de8565b610eee565b3480156107c157600080fd5b506103ab6107d0366004611d6d565b610f10565b3480156107e157600080fd5b5061035d6107f0366004611e03565b610f2b565b34801561080157600080fd5b506103ab610810366004611de8565b610f56565b34801561082157600080fd5b5061035d60175481565b34801561083757600080fd5b5061035d600a5481565b34801561084d57600080fd5b5061035d60155481565b34801561086357600080fd5b506103ab610872366004611d6d565b610f71565b34801561088357600080fd5b506103ab610892366004611d86565b610fd1565b3480156108a357600080fd5b5061035d600b5481565b3480156108b957600080fd5b50610304611047565b6060600380546108d190611e3c565b80601f01602080910402602001604051908101604052809291908181526020018280546108fd90611e3c565b801561094a5780601f1061091f5761010080835404028352916020019161094a565b820191906000526020600020905b81548152906001019060200180831161092d57829003601f168201915b5050505050905090565b600033610962818585611061565b60019150505b92915050565b60003361097c858285611185565b6109878585856111f9565b506001949350505050565b61099a611814565b670de0b6b3a76400006103e86109af60025490565b6109ba906001611e8c565b6109c49190611ea3565b6109ce9190611ea3565b8110156109da57600080fd5b6109ec81670de0b6b3a7640000611e8c565b600f5550565b6109fa611814565b600654600160a01b900460ff1615610a1157600080fd5b436010556006805460ff60a01b1916600160a01b179055565b600033610962818585610a3d8383610f2b565b610a479190611ec5565b611061565b6000610a56611814565b620186a0610a6360025490565b610a6e906001611e8c565b610a789190611ea3565b821015610aa05760405162461bcd60e51b8152600401610a9790611ed8565b60405180910390fd5b6064610aab60025490565b610ab6906004611e8c565b610ac09190611ea3565b821115610adf5760405162461bcd60e51b8152600401610a9790611f2d565b50600b81905560015b919050565b610af5611814565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b610b3a611814565b610b446000611873565b565b610b4e611814565b6000610b61610b5c30610b17565b6118c5565b6009546040516001600160a01b039091169047905b60006040518083038185875af1925050503d8060008114610bb3576040519150601f19603f3d011682016040523d82523d6000602084013e610bb8565b606091505b50505050565b610bc6611814565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610bf9611814565b6006546001600160a01b0390811690831603610c795760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152786175746f6d617465644d61726b65744d616b6572506169727360381b6064820152608401610a97565b6001600160a01b0382166000908152601a60205260409020805460ff19168215151790555050565b33610caa610d49565b6001600160a01b03161480610cc957506009546001600160a01b031633145b610d295760405162461bcd60e51b815260206004820152602b60248201527f43616c6c6572206973206e6f7420746865206f776e6572206f72206d61726b6560448201526a1d1a5b99c81dd85b1b195d60aa1b6064820152608401610a97565b600954610b449030906001600160a01b0316610d4482610b17565b611a1f565b6005546001600160a01b031690565b610d60611814565b6017819055603c811115610d7357600080fd5b50565b6060600480546108d190611e3c565b6009546040516000916001600160a01b0316904790610b76565b60003381610dad8286610f2b565b905083811015610e0d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a97565b6109878286868403611061565b6000336109628185856111f9565b6000610e32611814565b620186a0610e3f60025490565b610e4a906001611e8c565b610e549190611ea3565b821015610e735760405162461bcd60e51b8152600401610a9790611ed8565b6064610e7e60025490565b610e89906004611e8c565b610e939190611ea3565b821115610eb25760405162461bcd60e51b8152600401610a9790611f2d565b50600a55600190565b610ec3611814565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b610ef6611814565b601180549115156101000261ff0019909216919091179055565b610f18611814565b60158190556014811115610d7357600080fd5b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610f5e611814565b600c805460ff1916911515919091179055565b610f79611814565b670de0b6b3a76400006103e8610f8e60025490565b610f99906001611e8c565b610fa39190611ea3565b610fad9190611ea3565b811015610fb957600080fd5b610fcb81670de0b6b3a7640000611e8c565b600e5550565b610fd9611814565b6001600160a01b03811661103e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a97565b610d7381611873565b6000611051611814565b506011805460ff19169055600190565b6001600160a01b0383166110c35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a97565b6001600160a01b0382166111245760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a97565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006111918484610f2b565b90506000198114610bb857818110156111ec5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a97565b610bb88484848403611061565b6001600160a01b03831661121f5760405162461bcd60e51b8152600401610a9790611f7f565b6001600160a01b0382166112455760405162461bcd60e51b8152600401610a9790611fc4565b6001600160a01b03831660009081526014602052604090205460ff161561129c5760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610a97565b806000036112b5576112b083836000611a1f565b505050565b60115460ff16156115d7576112c8610d49565b6001600160a01b0316836001600160a01b03161415801561130257506112ec610d49565b6001600160a01b0316826001600160a01b031614155b80156113185750600854600160a01b900460ff16155b801561132c57506001600160a01b03821615155b801561134357506001600160a01b03821661dead14155b156115d757600654600160a01b900460ff166113dd576001600160a01b03831660009081526019602052604090205460ff168061139857506001600160a01b03821660009081526019602052604090205460ff165b6113dd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a97565b6001600160a01b0383166000908152601a602052604090205460ff16801561141e57506001600160a01b0382166000908152600d602052604090205460ff16155b156114cc57600e548111156114935760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a97565b600f5461149f83610b17565b6114a99083611ec5565b11156114c75760405162461bcd60e51b8152600401610a9790612007565b6115d7565b6001600160a01b0382166000908152601a602052604090205460ff16801561150d57506001600160a01b0383166000908152600d602052604090205460ff16155b1561158357600e548111156114c75760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a97565b6001600160a01b0382166000908152600d602052604090205460ff166115d757600f546115af83610b17565b6115b99083611ec5565b11156115d75760405162461bcd60e51b8152600401610a9790612007565b60006115e230610b17565b600b54909150811080159081906115fb5750600c5460ff165b80156116115750600854600160a01b900460ff16155b801561163657506001600160a01b0385166000908152601a602052604090205460ff16155b801561165b57506001600160a01b03851660009081526019602052604090205460ff16155b801561168057506001600160a01b03841660009081526019602052604090205460ff16155b156116ae576008805460ff60a01b1916600160a01b1790556116a0611b49565b6008805460ff60a01b191690555b6008546001600160a01b03861660009081526019602052604090205460ff600160a01b9092048216159116806116fc57506001600160a01b03851660009081526019602052604090205460ff165b15611705575060005b6000811561180057601554601054430361171d575060145b6001600160a01b0387166000908152601a602052604090205460ff16801561174757506000601754115b1561178b5761176c606461176660175489611c7290919063ffffffff16565b90611c85565b915081601860008282546117809190611ec5565b909155506117e19050565b6001600160a01b0388166000908152601a602052604090205460ff1680156117b35750600081115b156117e1576117c760646117668884611c72565b915081601860008282546117db9190611ec5565b90915550505b81156117f2576117f2883084611a1f565b6117fc8287612034565b9550505b61180b878787611a1f565b50505050505050565b3361181d610d49565b6001600160a01b031614610b445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a97565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118fa576118fa612047565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611953573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611977919061205d565b8160018151811061198a5761198a612047565b6001600160a01b0392831660209182029290920101526007546119b09130911684611061565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906119e990859060009086903090429060040161207a565b600060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050505050565b6001600160a01b038316611a455760405162461bcd60e51b8152600401610a9790611f7f565b6001600160a01b038216611a6b5760405162461bcd60e51b8152600401610a9790611fc4565b6001600160a01b03831660009081526020819052604090205481811015611ae35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a97565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610bb8565b6000611b5430610b17565b6018549091506000828103611b6857505050565b81600003611b7557600191505b600a54436000908152601260205260408120805491611b93836120eb565b9091555050601154610100900460ff1615611bc55743600090815260126020526040902054600211611bc55750505050565b80841115611bd1578093505b8347611bdc826118c5565b6000611be84783611c91565b9050808615611c0d57611c0a8761176660185485611c7290919063ffffffff16565b90505b600060188190556009546040516001600160a01b039091169147919081818185875af1925050503d8060008114611c60576040519150601f19603f3d011682016040523d82523d6000602084013e611c65565b606091505b5050505050505050505050565b6000611c7e8284611e8c565b9392505050565b6000611c7e8284611ea3565b6000611c7e8284612034565b600060208083528351808285015260005b81811015611cca57858101830151858201604001528201611cae565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d7357600080fd5b60008060408385031215611d1357600080fd5b8235611d1e81611ceb565b946020939093013593505050565b600080600060608486031215611d4157600080fd5b8335611d4c81611ceb565b92506020840135611d5c81611ceb565b929592945050506040919091013590565b600060208284031215611d7f57600080fd5b5035919050565b600060208284031215611d9857600080fd5b8135611c7e81611ceb565b80358015158114610ae857600080fd5b60008060408385031215611dc657600080fd5b8235611dd181611ceb565b9150611ddf60208401611da3565b90509250929050565b600060208284031215611dfa57600080fd5b611c7e82611da3565b60008060408385031215611e1657600080fd5b8235611e2181611ceb565b91506020830135611e3181611ceb565b809150509250929050565b600181811c90821680611e5057607f821691505b602082108103611e7057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761096857610968611e76565b600082611ec057634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561096857610968611e76565b60208082526035908201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60408201527410181718181892903a37ba30b61039bab838363c9760591b606082015260800190565b60208082526032908201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160408201527137101a12903a37ba30b61039bab838363c9760711b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526013908201527213585e081dd85b1b195d08195e18d959591959606a1b604082015260600190565b8181038181111561096857610968611e76565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561206f57600080fd5b8151611c7e81611ceb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120ca5784516001600160a01b0316835293830193918301916001016120a5565b50506001600160a01b03969096166060850152505050608001529392505050565b6000600182016120fd576120fd611e76565b506001019056fea2646970667358221220d653e7efd3778b1d48c13ec0c5ac1cfacca7d799bf4c4189cc7149e344b2c3da64736f6c63430008110033

Verified Source Code Full Match

Compiler: v0.8.17+commit.8df45f5f EVM: london Optimization: Yes (100 runs)
WrappedNeiro.sol 1448 lines
    // SPDX-License-Identifier: MIT

    //WEB: https://wneiro.com
    //X: https://x.com/WNeiroETH
    //TG: https://t.me/WneiroERC20
    pragma solidity ^0.8.0;

    /**
     * @dev Provides information about the current execution context, including the
     * sender of the transaction and its data. While these are generally available
     * via msg.sender and msg.data, they should not be accessed in such a direct
     * manner, since when dealing with meta-transactions the account sending and
     * paying for execution may not be the actual sender (as far as an application
     * is concerned).
     *
     * This contract is only required for intermediate, library-like contracts.
     */
    abstract contract Context {
        function _msgSender() internal view virtual returns (address) {
            return msg.sender;
        }

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

    /**
     * @dev Contract module which provides a basic access control mechanism, where
     * there is an account (an owner) that can be granted exclusive access to
     * specific functions.
     *
     * By default, the owner account will be the one that deploys the contract. This
     * can later be changed with {transferOwnership}.
     *
     * This module is used through inheritance. It will make available the modifier
     * `onlyOwner`, which can be applied to your functions to restrict their use to
     * the owner.
     */
    abstract contract Ownable is Context {
        address private _owner;

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

        /**
         * @dev Initializes the contract setting the deployer as the initial owner.
         */
        constructor() {
            _transferOwnership(_msgSender());
        }

        /**
         * @dev Throws if called by any account other than the owner.
         */
        modifier onlyOwner() {
            _checkOwner();
            _;
        }

        /**
         * @dev Returns the address of the current owner.
         */
        function owner() public view virtual returns (address) {
            return _owner;
        }

        /**
         * @dev Throws if the sender is not the owner.
         */
        function _checkOwner() internal view virtual {
            require(owner() == _msgSender(), "Ownable: caller is not the owner");
        }

        /**
         * @dev Leaves the contract without owner. It will not be possible to call
         * `onlyOwner` functions anymore. Can only be called by the current owner.
         *
         * NOTE: Renouncing ownership will leave the contract without an owner,
         * thereby removing any functionality that is only available to the owner.
         */
        function renounceOwnership() public virtual onlyOwner {
            _transferOwnership(address(0));
        }

        /**
         * @dev Transfers ownership of the contract to a new account (`newOwner`).
         * Can only be called by the current owner.
         */
        function transferOwnership(address newOwner) public virtual onlyOwner {
            require(newOwner != address(0), "Ownable: new owner is the zero address");
            _transferOwnership(newOwner);
        }

        /**
         * @dev Transfers ownership of the contract to a new account (`newOwner`).
         * Internal function without access restriction.
         */
        function _transferOwnership(address newOwner) internal virtual {
            address oldOwner = _owner;
            _owner = newOwner;
            emit OwnershipTransferred(oldOwner, newOwner);
        }
    }

    /**
     * @dev Interface of the ERC20 standard as defined in the EIP.
     */
    interface IERC20 {
        /**
         * @dev Emitted when `value` tokens are moved from one account (`from`) to
         * another (`to`).
         *
         * Note that `value` may be zero.
         */
        event Transfer(address indexed from, address indexed to, uint256 value);

        /**
         * @dev Emitted when the allowance of a `spender` for an `owner` is set by
         * a call to {approve}. `value` is the new allowance.
         */
        event Approval(address indexed owner, address indexed spender, uint256 value);

        /**
         * @dev Returns the amount of tokens in existence.
         */
        function totalSupply() external view returns (uint256);

        /**
         * @dev Returns the amount of tokens owned by `account`.
         */
        function balanceOf(address account) external view returns (uint256);

        /**
         * @dev Moves `amount` tokens from the caller's account to `to`.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * Emits a {Transfer} event.
         */
        function transfer(address to, uint256 amount) external returns (bool);

        /**
         * @dev Returns the remaining number of tokens that `spender` will be
         * allowed to spend on behalf of `owner` through {transferFrom}. This is
         * zero by default.
         *
         * This value changes when {approve} or {transferFrom} are called.
         */
        function allowance(address owner, address spender) external view returns (uint256);

        /**
         * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * IMPORTANT: Beware that changing an allowance with this method brings the risk
         * that someone may use both the old and the new allowance by unfortunate
         * transaction ordering. One possible solution to mitigate this race
         * condition is to first reduce the spender's allowance to 0 and set the
         * desired value afterwards:
         * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
         *
         * Emits an {Approval} event.
         */
        function approve(address spender, uint256 amount) external returns (bool);

        /**
         * @dev Moves `amount` tokens from `from` to `to` using the
         * allowance mechanism. `amount` is then deducted from the caller's
         * allowance.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * Emits a {Transfer} event.
         */
        function transferFrom(
            address from,
            address to,
            uint256 amount
        ) external returns (bool);
    }

    // CAUTION
    // This version of SafeMath should only be used with Solidity 0.8 or later,
    // because it relies on the compiler's built in overflow checks.

    /**
     * @dev Wrappers over Solidity's arithmetic operations.
     *
     * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
     * now has built in overflow checking.
     */
    library SafeMath {
        /**
         * @dev Returns the addition of two unsigned integers, with an overflow flag.
         *
         * _Available since v3.4._
         */
        function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                uint256 c = a + b;
                if (c < a) return (false, 0);
                return (true, c);
            }
        }

        /**
         * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
         *
         * _Available since v3.4._
         */
        function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b > a) return (false, 0);
                return (true, a - b);
            }
        }

        /**
         * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
         *
         * _Available since v3.4._
         */
        function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
                if (a == 0) return (true, 0);
                uint256 c = a * b;
                if (c / a != b) return (false, 0);
                return (true, c);
            }
        }

        /**
         * @dev Returns the division of two unsigned integers, with a division by zero flag.
         *
         * _Available since v3.4._
         */
        function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b == 0) return (false, 0);
                return (true, a / b);
            }
        }

        /**
         * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
         *
         * _Available since v3.4._
         */
        function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b == 0) return (false, 0);
                return (true, a % b);
            }
        }

        /**
         * @dev Returns the addition of two unsigned integers, reverting on
         * overflow.
         *
         * Counterpart to Solidity's `+` operator.
         *
         * Requirements:
         *
         * - Addition cannot overflow.
         */
        function add(uint256 a, uint256 b) internal pure returns (uint256) {
            return a + b;
        }

        /**
         * @dev Returns the subtraction of two unsigned integers, reverting on
         * overflow (when the result is negative).
         *
         * Counterpart to Solidity's `-` operator.
         *
         * Requirements:
         *
         * - Subtraction cannot overflow.
         */
        function sub(uint256 a, uint256 b) internal pure returns (uint256) {
            return a - b;
        }

        /**
         * @dev Returns the multiplication of two unsigned integers, reverting on
         * overflow.
         *
         * Counterpart to Solidity's `*` operator.
         *
         * Requirements:
         *
         * - Multiplication cannot overflow.
         */
        function mul(uint256 a, uint256 b) internal pure returns (uint256) {
            return a * b;
        }

        /**
         * @dev Returns the integer division of two unsigned integers, reverting on
         * division by zero. The result is rounded towards zero.
         *
         * Counterpart to Solidity's `/` operator.
         *
         * Requirements:
         *
         * - The divisor cannot be zero.
         */
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
            return a / b;
        }

        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * reverting when dividing by zero.
         *
         * Counterpart to Solidity's `%` operator. This function uses a `revert`
         * opcode (which leaves remaining gas untouched) while Solidity uses an
         * invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         *
         * - The divisor cannot be zero.
         */
        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            return a % b;
        }

        /**
         * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
         * overflow (when the result is negative).
         *
         * CAUTION: This function is deprecated because it requires allocating memory for the error
         * message unnecessarily. For custom revert reasons use {trySub}.
         *
         * Counterpart to Solidity's `-` operator.
         *
         * Requirements:
         *
         * - Subtraction cannot overflow.
         */
        function sub(
            uint256 a,
            uint256 b,
            string memory errorMessage
        ) internal pure returns (uint256) {
            unchecked {
                require(b <= a, errorMessage);
                return a - b;
            }
        }

        /**
         * @dev Returns the integer division of two unsigned integers, reverting with custom message on
         * division by zero. The result is rounded towards zero.
         *
         * Counterpart to Solidity's `/` operator. Note: this function uses a
         * `revert` opcode (which leaves remaining gas untouched) while Solidity
         * uses an invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         *
         * - The divisor cannot be zero.
         */
        function div(
            uint256 a,
            uint256 b,
            string memory errorMessage
        ) internal pure returns (uint256) {
            unchecked {
                require(b > 0, errorMessage);
                return a / b;
            }
        }

        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * reverting with custom message when dividing by zero.
         *
         * CAUTION: This function is deprecated because it requires allocating memory for the error
         * message unnecessarily. For custom revert reasons use {tryMod}.
         *
         * Counterpart to Solidity's `%` operator. This function uses a `revert`
         * opcode (which leaves remaining gas untouched) while Solidity uses an
         * invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         *
         * - The divisor cannot be zero.
         */
        function mod(
            uint256 a,
            uint256 b,
            string memory errorMessage
        ) internal pure returns (uint256) {
            unchecked {
                require(b > 0, errorMessage);
                return a % b;
            }
        }
    }


    interface IUniswapV2Factory {
        event PairCreated(address indexed token0, address indexed token1, address pair, uint);

        function feeTo() external view returns (address);

        function feeToSetter() external view returns (address);

        function getPair(address tokenA, address tokenB) external view returns (address pair);

        function allPairs(uint) external view returns (address pair);

        function allPairsLength() external view returns (uint);

        function createPair(address tokenA, address tokenB) external returns (address pair);

        function setFeeTo(address) external;

        function setFeeToSetter(address) external;
    }

    interface IUniswapV2Pair {
        event Approval(address indexed owner, address indexed spender, uint value);
        event Transfer(address indexed from, address indexed to, uint value);

        function name() external pure returns (string memory);

        function symbol() external pure returns (string memory);

        function decimals() external pure returns (uint8);

        function totalSupply() external view returns (uint);

        function balanceOf(address owner) external view returns (uint);

        function allowance(address owner, address spender) external view returns (uint);

        function approve(address spender, uint value) external returns (bool);

        function transfer(address to, uint value) external returns (bool);

        function transferFrom(address from, address to, uint value) external returns (bool);

        function DOMAIN_SEPARATOR() external view returns (bytes32);

        function PERMIT_TYPEHASH() external pure returns (bytes32);

        function nonces(address owner) external view returns (uint);

        function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

        event Mint(address indexed sender, uint amount0, uint amount1);
        event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
        event Swap(
            address indexed sender,
            uint amount0In,
            uint amount1In,
            uint amount0Out,
            uint amount1Out,
            address indexed to
        );
        event Sync(uint112 reserve0, uint112 reserve1);

        function MINIMUM_LIQUIDITY() external pure returns (uint);

        function factory() external view returns (address);

        function token0() external view returns (address);

        function token1() external view returns (address);

        function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

        function price0CumulativeLast() external view returns (uint);

        function price1CumulativeLast() external view returns (uint);

        function kLast() external view returns (uint);

        function mint(address to) external returns (uint liquidity);

        function burn(address to) external returns (uint amount0, uint amount1);

        function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

        function skim(address to) external;

        function sync() external;

        function initialize(address, address) external;
    }


    interface IUniswapV2Router01 {
        function factory() external pure returns (address);

        function WETH() external pure returns (address);

        function addLiquidity(
            address tokenA,
            address tokenB,
            uint amountADesired,
            uint amountBDesired,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline
        ) external returns (uint amountA, uint amountB, uint liquidity);

        function addLiquidityETH(
            address token,
            uint amountTokenDesired,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

        function removeLiquidity(
            address tokenA,
            address tokenB,
            uint liquidity,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline
        ) external returns (uint amountA, uint amountB);

        function removeLiquidityETH(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external returns (uint amountToken, uint amountETH);

        function removeLiquidityWithPermit(
            address tokenA,
            address tokenB,
            uint liquidity,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline,
            bool approveMax, uint8 v, bytes32 r, bytes32 s
        ) external returns (uint amountA, uint amountB);

        function removeLiquidityETHWithPermit(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline,
            bool approveMax, uint8 v, bytes32 r, bytes32 s
        ) external returns (uint amountToken, uint amountETH);

        function swapExactTokensForTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);

        function swapTokensForExactTokens(
            uint amountOut,
            uint amountInMax,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);

        function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

        function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);

        function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);

        function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

        function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);

        function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);

        function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);

        function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

        function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
    }

    interface IUniswapV2Router02 is IUniswapV2Router01 {
        function removeLiquidityETHSupportingFeeOnTransferTokens(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external returns (uint amountETH);

        function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline,
            bool approveMax, uint8 v, bytes32 r, bytes32 s
        ) external returns (uint amountETH);

        function swapExactTokensForTokensSupportingFeeOnTransferTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external;

        function swapExactETHForTokensSupportingFeeOnTransferTokens(
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external payable;

        function swapExactTokensForETHSupportingFeeOnTransferTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external;
    }

    /**
     * @dev Interface for the optional metadata functions from the ERC20 standard.
     *
     * _Available since v4.1._
     */
    interface IERC20Metadata is IERC20 {
        /**
         * @dev Returns the name of the token.
         */
        function name() external view returns (string memory);

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

        /**
         * @dev Returns the decimals places of the token.
         */
        function decimals() external view returns (uint8);
    }

    /**
     * @dev Implementation of the {IERC20} interface.
     *
     * This implementation is agnostic to the way tokens are created. This means
     * that a supply mechanism has to be added in a derived contract using {_mint}.
     * For a generic mechanism see {ERC20PresetMinterPauser}.
     *
     * TIP: For a detailed writeup see our guide
     * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
     * to implement supply mechanisms].
     *
     * We have followed general OpenZeppelin Contracts guidelines: functions revert
     * instead returning `false` on failure. This behavior is nonetheless
     * conventional and does not conflict with the expectations of ERC20
     * applications.
     *
     * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
     * This allows applications to reconstruct the allowance for all accounts just
     * by listening to said events. Other implementations of the EIP may not emit
     * these events, as it isn't required by the specification.
     *
     * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
     * functions have been added to mitigate the well-known issues around setting
     * allowances. See {IERC20-approve}.
     */
    contract ERC20 is Context, IERC20, IERC20Metadata {
        mapping(address => uint256) private _balances;

        mapping(address => mapping(address => uint256)) private _allowances;

        uint256 private _totalSupply;

        string private _name;
        string private _symbol;

        /**
         * @dev Sets the values for {name} and {symbol}.
         *
         * The default value of {decimals} is 18. To select a different value for
         * {decimals} you should overload it.
         *
         * All two of these values are immutable: they can only be set once during
         * construction.
         */
        constructor(string memory name_, string memory symbol_) {
            _name = name_;
            _symbol = symbol_;
        }

        /**
         * @dev Returns the name of the token.
         */
        function name() public view virtual override returns (string memory) {
            return _name;
        }

        /**
         * @dev Returns the symbol of the token, usually a shorter version of the
         * name.
         */
        function symbol() public view virtual override returns (string memory) {
            return _symbol;
        }

        /**
         * @dev Returns the number of decimals used to get its user representation.
         * For example, if `decimals` equals `2`, a balance of `505` tokens should
         * be displayed to a user as `5.05` (`505 / 10 ** 2`).
         *
         * Tokens usually opt for a value of 18, imitating the relationship between
         * Ether and Wei. This is the value {ERC20} uses, unless this function is
         * overridden;
         *
         * NOTE: This information is only used for _display_ purposes: it in
         * no way affects any of the arithmetic of the contract, including
         * {IERC20-balanceOf} and {IERC20-transfer}.
         */
        function decimals() public view virtual override returns (uint8) {
            return 18;
        }

        /**
         * @dev See {IERC20-totalSupply}.
         */
        function totalSupply() public view virtual override returns (uint256) {
            return _totalSupply;
        }

        /**
         * @dev See {IERC20-balanceOf}.
         */
        function balanceOf(address account) public view virtual override returns (uint256) {
            return _balances[account];
        }

        /**
         * @dev See {IERC20-transfer}.
         *
         * Requirements:
         *
         * - `to` cannot be the zero address.
         * - the caller must have a balance of at least `amount`.
         */
        function transfer(address to, uint256 amount) public virtual override returns (bool) {
            address owner = _msgSender();
            _transfer(owner, to, amount);
            return true;
        }

        /**
         * @dev See {IERC20-allowance}.
         */
        function allowance(address owner, address spender) public view virtual override returns (uint256) {
            return _allowances[owner][spender];
        }

        /**
         * @dev See {IERC20-approve}.
         *
         * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
         * `transferFrom`. This is semantically equivalent to an infinite approval.
         *
         * Requirements:
         *
         * - `spender` cannot be the zero address.
         */
        function approve(address spender, uint256 amount) public virtual override returns (bool) {
            address owner = _msgSender();
            _approve(owner, spender, amount);
            return true;
        }

        /**
         * @dev See {IERC20-transferFrom}.
         *
         * Emits an {Approval} event indicating the updated allowance. This is not
         * required by the EIP. See the note at the beginning of {ERC20}.
         *
         * NOTE: Does not update the allowance if the current allowance
         * is the maximum `uint256`.
         *
         * Requirements:
         *
         * - `from` and `to` cannot be the zero address.
         * - `from` must have a balance of at least `amount`.
         * - the caller must have allowance for ``from``'s tokens of at least
         * `amount`.
         */
        function transferFrom(
            address from,
            address to,
            uint256 amount
        ) public virtual override returns (bool) {
            address spender = _msgSender();
            _spendAllowance(from, spender, amount);
            _transfer(from, to, amount);
            return true;
        }

        /**
         * @dev Atomically increases the allowance granted to `spender` by the caller.
         *
         * This is an alternative to {approve} that can be used as a mitigation for
         * problems described in {IERC20-approve}.
         *
         * Emits an {Approval} event indicating the updated allowance.
         *
         * Requirements:
         *
         * - `spender` cannot be the zero address.
         */
        function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
            address owner = _msgSender();
            _approve(owner, spender, allowance(owner, spender) + addedValue);
            return true;
        }

        /**
         * @dev Atomically decreases the allowance granted to `spender` by the caller.
         *
         * This is an alternative to {approve} that can be used as a mitigation for
         * problems described in {IERC20-approve}.
         *
         * Emits an {Approval} event indicating the updated allowance.
         *
         * Requirements:
         *
         * - `spender` cannot be the zero address.
         * - `spender` must have allowance for the caller of at least
         * `subtractedValue`.
         */
        function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
            address owner = _msgSender();
            uint256 currentAllowance = allowance(owner, spender);
            require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
            unchecked {
                _approve(owner, spender, currentAllowance - subtractedValue);
            }

            return true;
        }

        /**
         * @dev Moves `amount` of tokens from `from` to `to`.
         *
         * This internal function is equivalent to {transfer}, and can be used to
         * e.g. implement automatic token fees, slashing mechanisms, etc.
         *
         * Emits a {Transfer} event.
         *
         * Requirements:
         *
         * - `from` cannot be the zero address.
         * - `to` cannot be the zero address.
         * - `from` must have a balance of at least `amount`.
         */
        function _transfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {
            require(from != address(0), "ERC20: transfer from the zero address");
            require(to != address(0), "ERC20: transfer to the zero address");
            _beforeTokenTransfer(from, to, amount);

            uint256 fromBalance = _balances[from];
            require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
            unchecked {
                _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
                _balances[to] += amount;
            }

            emit Transfer(from, to, amount);

            _afterTokenTransfer(from, to, amount);
        }

        /** @dev Creates `amount` tokens and assigns them to `account`, increasing
         * the total supply.
         *
         * Emits a {Transfer} event with `from` set to the zero address.
         *
         * Requirements:
         *
         * - `account` cannot be the zero address.
         */
        function _mint(address account, uint256 amount) internal virtual {
            require(account != address(0), "ERC20: mint to the zero address");

            _beforeTokenTransfer(address(0), account, amount);

            _totalSupply += amount;
            unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
                _balances[account] += amount;
            }
            emit Transfer(address(0), account, amount);

            _afterTokenTransfer(address(0), account, amount);
        }

        /**
         * @dev Destroys `amount` tokens from `account`, reducing the
         * total supply.
         *
         * Emits a {Transfer} event with `to` set to the zero address.
         *
         * Requirements:
         *
         * - `account` cannot be the zero address.
         * - `account` must have at least `amount` tokens.
         */
        function _burn(address account, uint256 amount) internal virtual {
            require(account != address(0), "ERC20: burn from the zero address");

            _beforeTokenTransfer(account, address(0), amount);

            uint256 accountBalance = _balances[account];
            require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
            unchecked {
                _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
                _totalSupply -= amount;
            }

            emit Transfer(account, address(0), amount);

            _afterTokenTransfer(account, address(0), amount);
        }

        /**
         * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
         *
         * This internal function is equivalent to `approve`, and can be used to
         * e.g. set automatic allowances for certain subsystems, etc.
         *
         * Emits an {Approval} event.
         *
         * Requirements:
         *
         * - `owner` cannot be the zero address.
         * - `spender` cannot be the zero address.
         */
        function _approve(
            address owner,
            address spender,
            uint256 amount
        ) internal virtual {
            require(owner != address(0), "ERC20: approve from the zero address");
            require(spender != address(0), "ERC20: approve to the zero address");

            _allowances[owner][spender] = amount;
            emit Approval(owner, spender, amount);
        }

        /**
         * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
         *
         * Does not update the allowance amount in case of infinite allowance.
         * Revert if not enough allowance is available.
         *
         * Might emit an {Approval} event.
         */
        function _spendAllowance(
            address owner,
            address spender,
            uint256 amount
        ) internal virtual {
            uint256 currentAllowance = allowance(owner, spender);
            if (currentAllowance != type(uint256).max) {
                require(currentAllowance >= amount, "ERC20: insufficient allowance");
                unchecked {
                    _approve(owner, spender, currentAllowance - amount);
                }
            }
        }

        /**
         * @dev Hook that is called before any transfer of tokens. This includes
         * minting and burning.
         *
         * Calling conditions:
         *
         * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
         * will be transferred to `to`.
         * - when `from` is zero, `amount` tokens will be minted for `to`.
         * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
         * - `from` and `to` are never both zero.
         *
         * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
         */
        function _beforeTokenTransfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {}

        /**
         * @dev Hook that is called after any transfer of tokens. This includes
         * minting and burning.
         *
         * Calling conditions:
         *
         * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
         * has been transferred to `to`.
         * - when `from` is zero, `amount` tokens have been minted for `to`.
         * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
         * - `from` and `to` are never both zero.
         *
         * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
         */
        function _afterTokenTransfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {}
    }

    contract WrappedNeiro is ERC20, Ownable {
        using SafeMath for uint256;
        address public uniswapV2Pair;
        bool public tradingActive = false;

        IUniswapV2Router02 public uniswapV2Router;
        address private routerAddress;
        bool private swapping;
        address public marketingWallet;
        uint256 public swapTokensAtAmount;
        uint256 public swapMinimum;
        bool public swapEnabled = true;

        mapping(address => bool) public excludedFromMaxTx;
        uint256 public maxTxAmount;
        uint256 public maxWalletAmount;
        uint256 private launchBlock;
        bool public limitsEnabled = true;
        bool public antiContractDumpEnabled = true;
        mapping(uint256 => uint256) private _swapBlocks;

        bool public blacklistDisabled = false;
        mapping(address => bool) public blacklistedWallets;


        uint256 public buyFees;
        uint256 public buyMarketingFee;
        uint256 public sellFees;
        uint256 private tokensForMarketing;
        mapping(address => bool) private _excludedFromFees;


        mapping(address => bool) public ammPairs;


        constructor() ERC20("Wrapped Neiro", "wNeiro") {
            uint256 totalSupply = 1000000000 * 1e18;

            routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
                routerAddress
            );
            uniswapV2Router = _uniswapV2Router;
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
            ammPairs[uniswapV2Pair] = true;
            swapTokensAtAmount = (totalSupply * 2) / 1000;
            swapMinimum = (totalSupply * 2) / 1000;
            buyFees = 5;
            sellFees = 25;
            marketingWallet = address(owner());

            excludeFromFees(owner(), true);
            excludeFromFees(address(this), true);
            excludeFromFees(address(0xdead), true);
            limitsEnabled = true;
            maxTxAmount = 20000000 * 1e18;
            maxWalletAmount = 20000000 * 1e18;
            excludeFromMaxTransaction(owner(), true);
            excludeFromMaxTransaction(address(this), true);
            excludeFromMaxTransaction(address(0xdead), true);
            excludeFromMaxTransaction(address(_uniswapV2Router), true);
            excludeFromMaxTransaction(address(uniswapV2Pair), true);

            _mint(owner(), totalSupply);
        }

        receive() external payable {}

        function startTrading() public onlyOwner {
            require(!tradingActive);
            launchBlock = block.number;
            tradingActive = true;
        }

        function changeSwapBackRestriction(bool newVal) public onlyOwner {
            antiContractDumpEnabled = newVal;
        }


        function disableLimits() external onlyOwner returns (bool) {
            limitsEnabled = false;
            return true;
        }


        function setSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
        {
            require(
                newAmount >= (totalSupply() * 1) / 100000,
                "Swap amount cannot be lower than 0.001% total supply."
            );
            require(
                newAmount <= (totalSupply() * 4) / 100,
                "Swap amount cannot be higher than 4% total supply."
            );
            swapTokensAtAmount = newAmount;
            return true;
        }

        function setSwapMinimum(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
        {
            require(
                newAmount >= (totalSupply() * 1) / 100000,
                "Swap amount cannot be lower than 0.001% total supply."
            );
            require(
                newAmount <= (totalSupply() * 4) / 100,
                "Swap amount cannot be higher than 4% total supply."
            );
            swapMinimum = newAmount;
            return true;
        }

        function setSwapEnabled(bool enabled) external onlyOwner {
            swapEnabled = enabled;
        }

        function setMaxTxAmount(uint256 newNum) external onlyOwner {
            require(
                newNum >= ((totalSupply() * 1) / 1000) / 1e18
            );
            maxTxAmount = newNum * (10 ** 18);
        }

        function setMaxWalletAmount(uint256 newNum) external onlyOwner {
            require(
                newNum >= ((totalSupply() * 1) / 1000) / 1e18
            );
            maxWalletAmount = newNum * (10 ** 18);
        }

        function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
        {
            excludedFromMaxTx[updAds] = isEx;
        }

        function setBuyFees(
            uint256 _marketingFee
        ) external onlyOwner {
            buyFees = _marketingFee;
            require(buyFees <= 20);
        }

        function setSellFees(
            uint256 _marketingFee
        ) external onlyOwner {
            sellFees = _marketingFee;
            require(sellFees <= 60);
        }


        function excludeFromFees(address account, bool excluded) public onlyOwner {
            _excludedFromFees[account] = excluded;
        }

        function addPair(address pair, bool value)
        public
        onlyOwner
        {
            require(
                pair != uniswapV2Pair,
                "The pair cannot be removed from automatedMarketMakerPairs"
            );

            _setAMMPair(pair, value);
        }

        function _setAMMPair(address pair, bool value) private {
            ammPairs[pair] = value;
        }

        function setFeesWallet(address _wallet)
        external
        onlyOwner
        {
            marketingWallet = _wallet;
        }

        function isExcludedFromFees(address account) public view returns (bool) {
            return _excludedFromFees[account];
        }


        function _transfer(
            address from,
            address to,
            uint256 amount
        ) internal override {
            require(from != address(0), "ERC20: transfer from the zero address");
            require(to != address(0), "ERC20: transfer to the zero address");
            require(!blacklistedWallets[from], "Blacklisted");

            if (amount == 0) {
                super._transfer(from, to, 0);
                return;
            }

            if (limitsEnabled) {
                if (
                    from != owner() &&
                    to != owner() &&
                    !swapping &&
                    to != address(0) &&
                    to != address(0xdead)

                ) {

                    if (!tradingActive) {
                        require(
                            _excludedFromFees[from] || _excludedFromFees[to],
                            "Trading is not active."
                        );
                    }

                    if (
                        ammPairs[from] &&
                        !excludedFromMaxTx[to]
                    ) {
                        require(
                            amount <= maxTxAmount,
                            "Buy transfer amount exceeds the maxTransactionAmount."
                        );
                        require(
                            amount + balanceOf(to) <= maxWalletAmount,
                            "Max wallet exceeded"
                        );
                    }

                    else if (
                        ammPairs[to] &&
                        !excludedFromMaxTx[from]
                    ) {
                        require(
                            amount <= maxTxAmount,
                            "Sell transfer amount exceeds the maxTransactionAmount."
                        );
                    } else if (!excludedFromMaxTx[to]) {
                        require(
                            amount + balanceOf(to) <= maxWalletAmount,
                            "Max wallet exceeded"
                        );
                    }

                }


            }
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= swapMinimum;

            if (
                canSwap &&
                swapEnabled &&
                !swapping &&
                !ammPairs[from] &&
                !_excludedFromFees[from] &&
                !_excludedFromFees[to]
            ) {
                swapping = true;

                swapBack();

                swapping = false;
            }
            bool takeFee = !swapping;

            if (_excludedFromFees[from] || _excludedFromFees[to]) {
                takeFee = false;
            }

            uint256 fees = 0;
            if (takeFee) {
                uint256 _buyFees = buyFees;
                if (block.number == launchBlock) {
                    _buyFees = 20;
                }
                if (ammPairs[to] && sellFees > 0) {
                    fees = amount.mul(sellFees).div(100);
                    tokensForMarketing += fees;
                }
                else if (ammPairs[from] && _buyFees > 0) {
                    fees = amount.mul(_buyFees).div(100);
                    tokensForMarketing += fees;
                }

                if (fees > 0) {
                    super._transfer(from, address(this), fees);
                }

                amount -= fees;
            }
            super._transfer(from, to, amount);
        }



        function swapTokensForEth(uint256 tokenAmount) private {
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = uniswapV2Router.WETH();

            _approve(address(this), address(uniswapV2Router), tokenAmount);

            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0,
                path,
                address(this),
                block.timestamp
            );
        }

        function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
            _approve(address(this), address(uniswapV2Router), tokenAmount);

            uniswapV2Router.addLiquidityETH{value: ethAmount}(
                address(this),
                tokenAmount,
                0,
                0,
                marketingWallet,
                block.timestamp
            );
        }

        function swapBack() private {

            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForMarketing;
            bool success;

            if (contractBalance == 0) {
                return;
            }
            if (totalTokensToSwap == 0) {
                totalTokensToSwap = 1;
            }

            uint256 amountToSwap = swapTokensAtAmount;
            _swapBlocks[block.number]++;
            if (antiContractDumpEnabled) {
                if(_swapBlocks[block.number] >= 2) {
                    return;
                }
            }
            if (contractBalance > amountToSwap) {
                contractBalance = amountToSwap;
            }

            uint256 amountToSwapForETH = contractBalance;

            uint256 initialETHBalance = address(this).balance;

            swapTokensForEth(amountToSwapForETH);

            uint256 ethBalance = address(this).balance.sub(initialETHBalance);
            uint256 ethForMarketing = ethBalance;
            if (totalTokensToSwap > 0) {
                ethForMarketing = ethBalance.mul(tokensForMarketing).div(
                    totalTokensToSwap
                );
            }
            tokensForMarketing = 0;

            (success,) = address(marketingWallet).call{
                    value: address(this).balance
                }("");
        }

        function withdrawTokens() external {
            require(owner() == _msgSender() || marketingWallet == _msgSender(), "Caller is not the owner or marketing wallet");
            super._transfer(address(this), address(marketingWallet), balanceOf(address(this)));
        }

        function swapTokens() public onlyOwner {
            bool success;
            swapTokensForEth(balanceOf(address(this)));
            (success,) = address(marketingWallet).call{value: address(this).balance}("");
        }

        function withdrawEth() external {
            bool success;
            (success,) = address(marketingWallet).call{value: address(this).balance}("");
        }
    }

Read Contract

allowance 0xdd62ed3e → uint256
ammPairs 0xa72905a2 → bool
antiContractDumpEnabled 0xa2d83c42 → bool
balanceOf 0x70a08231 → uint256
blacklistDisabled 0xa2edb2c3 → bool
blacklistedWallets 0x2b5ba3b9 → bool
buyFees 0xe4748b9e → uint256
buyMarketingFee 0x7bce5a04 → uint256
decimals 0x313ce567 → uint8
excludedFromMaxTx 0x54f9c98c → bool
isExcludedFromFees 0x4fbee193 → bool
limitsEnabled 0x3582ad23 → bool
marketingWallet 0x75f0a874 → address
maxTxAmount 0x8c0b5e22 → uint256
maxWalletAmount 0xaa4bde28 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
sellFees 0xe0f3ccf5 → uint256
swapEnabled 0x6ddd1713 → bool
swapMinimum 0xf8821a62 → uint256
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address

Write Contract 24 functions

These functions modify contract state and require a wallet transaction to execute.

addPair 0x7e26cafa
address pair
bool value
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
changeSwapBackRestriction 0xc20c43bf
bool newVal
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
disableLimits 0xf928364c
No parameters
returns: bool
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMaxTransaction 0x7571336a
address updAds
bool isEx
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
setBuyFees 0xdcf7aef3
uint256 _marketingFee
setFeesWallet 0x43d4f92b
address _wallet
setMaxTxAmount 0xec28438a
uint256 newNum
setMaxWalletAmount 0x27a14fc2
uint256 newNum
setSellFees 0x95927c25
uint256 _marketingFee
setSwapEnabled 0xe01af92c
bool enabled
setSwapMinimum 0x418eeb29
uint256 newAmount
returns: bool
setSwapTokensAtAmount 0xafa4f3b2
uint256 newAmount
returns: bool
startTrading 0x293230b8
No parameters
swapTokens 0x73d00224
No parameters
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
withdrawEth 0xa0ef91df
No parameters
withdrawTokens 0x8d8f2adb
No parameters

Recent Transactions

No transactions found for this address