false
false
0
The new Blockscout UI is now open source! Learn how to deploy it here
- We're indexing this chain right now. Some of the counts may be inaccurate.

Contract Address Details

0xF9a06e3afAadbcCccc8824A1255A88d648cA0Ef6

Token
TaikoSwap (TKS)
Creator
0x6efbe2–854efc at 0xd32c0f–a34728
Balance
0 ETH
Tokens
Fetching tokens...
Transactions
163 Transactions
Transfers
457 Transfers
Gas Used
9,338,826
Last Balance Update
748425
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
TaikoSwap




Optimization enabled
true
Compiler version
v0.8.0+commit.c7dfd78e




Optimization runs
200
EVM Version
default




Verified at
2024-05-27T12:15:25.082061Z

Constructor Arguments

0x0000000000000000000000006391c46ac4d308adce3aa49ce18488f25b176378

Arg [0] (address) : 0x6391c46ac4d308adce3aa49ce18488f25b176378

              

Contract source code

// SPDX-License-Identifier: MIT
/*

Website: https://www.swaptko.xyz/
TG: https://t.me/swaptaiko
X: https://x.com/swaptaiko

*/

pragma solidity 0.8.0;

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

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "cannot set owner to 0 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);
    }

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract TaikoSwap is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    
    bool public transferDelayEnabled = false;
    address payable private _taxWallet;

    uint256 private _finalBuyTax=4;
    uint256 private _finalSellTax=4;

    uint8 private constant _decimals = 18;
    uint256 private  _tTotal = 1000000 * 10 **_decimals;

    string private constant _name = unicode"TaikoSwap";
    string private constant _symbol = unicode"TKS";

    uint256 public _taxSwapThreshold= 2500 * 10 **_decimals;
    uint256 public _maxTaxSwap= 5000 * 10 **_decimals;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    
    mapping (address => address) internal _delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

      /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    event MaxTxAmountUpdated(uint _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor (address router) {
        _taxWallet = payable(_msgSender());
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;
        
        uniswapV2Router = IUniswapV2Router02(router);
        _approve(address(this), address(uniswapV2Router), _tTotal);

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

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

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount=0;
        if (from != owner() && to != owner()) {
            
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                taxAmount = amount.mul(_finalBuyTax).div(100);
            }

            if(to == uniswapV2Pair && from!= address(this) ){
                taxAmount = amount.mul(_finalSellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance>_taxSwapThreshold) {
                swapTokensForEth(min(amount,min(contractTokenBalance,_maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this),taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }

    function _mint(address account, uint256 amount) internal {
        require(account != address(0), 'ERC20: mint to the zero address');

        _tTotal = _tTotal.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /// @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef).
    function mint(address _to, uint256 _amount) public onlyOwner {
        _mint(_to, _amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        if(tokenAmount==0){return;}
        if(!tradingOpen){return;}
        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 sendETHToFee(uint256 amount) private {
        _taxWallet.transfer(amount);
    }

    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        IUniswapV2Factory factory=IUniswapV2Factory(uniswapV2Router.factory());
        uniswapV2Pair = factory.getPair(address(this),uniswapV2Router.WETH());
        if(uniswapV2Pair==address(0x0)){
          uniswapV2Pair = factory.createPair(address(this), uniswapV2Router.WETH());
        }
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
    }

    receive() external payable {}

    function manualSwap() external {
        require(_msgSender()==_taxWallet);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegator The address to get delegatee for
     */
    function delegates(address delegator)
        external
        view
        returns (address)
    {
        return _delegates[delegator];
    }

   /**
    * @notice Delegate votes from `msg.sender` to `delegatee`
    * @param delegatee The address to delegate votes to
    */
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
    {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                DELEGATION_TYPEHASH,
                delegatee,
                nonce,
                expiry
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                structHash
            )
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "cub::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "cub::delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "cub::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account)
        external
        view
        returns (uint256)
    {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber)
        external
        view
        returns (uint256)
    {
        require(blockNumber < block.number, "cub::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee)
        internal
    {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); // balance of underlying cubs (not scaled);
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld - amount;
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld + amount;
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes) internal
    {
        uint32 blockNumber = safe32(block.number, "cub::_writeCheckpoint: block number exceeds 32 bits");

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function getChainId() internal view returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }   
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"router","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"DelegateChanged","inputs":[{"type":"address","name":"delegator","internalType":"address","indexed":true},{"type":"address","name":"fromDelegate","internalType":"address","indexed":true},{"type":"address","name":"toDelegate","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"DelegateVotesChanged","inputs":[{"type":"address","name":"delegate","internalType":"address","indexed":true},{"type":"uint256","name":"previousBalance","internalType":"uint256","indexed":false},{"type":"uint256","name":"newBalance","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"MaxTxAmountUpdated","inputs":[{"type":"uint256","name":"_maxTxAmount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DELEGATION_TYPEHASH","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_TYPEHASH","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTaxSwap","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_taxSwapThreshold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"fromBlock","internalType":"uint32"},{"type":"uint256","name":"votes","internalType":"uint256"}],"name":"checkpoints","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint32","name":"","internalType":"uint32"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"delegate","inputs":[{"type":"address","name":"delegatee","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"delegateBySig","inputs":[{"type":"address","name":"delegatee","internalType":"address"},{"type":"uint256","name":"nonce","internalType":"uint256"},{"type":"uint256","name":"expiry","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"delegates","inputs":[{"type":"address","name":"delegator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCurrentVotes","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getPriorVotes","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"blockNumber","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"manualSwap","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"","internalType":"uint32"}],"name":"numCheckpoints","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"openTrading","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferDelayEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x60806040526004805460ff191681556005819055600655620000246012600a62000453565b6200003390620f42406200053e565b600755620000446012600a62000453565b62000052906109c46200053e565b600855620000636012600a62000453565b62000071906113886200053e565b600955600b805461ffff60a81b191690553480156200008f57600080fd5b5060405162002ced38038062002ced833981016040819052620000b29162000347565b6000620000be6200026f565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001126200026f565b600480546001600160a01b039290921661010002610100600160a81b0319909216919091179055600754600160006200014a6200026f565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160036000620001846200027360201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553080825260039094528281208054861660019081179091556004546101009004831682529290208054909416909117909255600a80548484166001600160a01b031990911617908190556007546200020f93919091169062000282565b620002196200026f565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620002609190620003fd565b60405180910390a35062000576565b3390565b6000546001600160a01b031690565b6001600160a01b038316620002b45760405162461bcd60e51b8152600401620002ab90620003b9565b60405180910390fd5b6001600160a01b038216620002dd5760405162461bcd60e51b8152600401620002ab9062000377565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906200033a908590620003fd565b60405180910390a3505050565b60006020828403121562000359578081fd5b81516001600160a01b038116811462000370578182fd5b9392505050565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b80825b60018086116200041a57506200044a565b8187048211156200042f576200042f62000560565b808616156200043d57918102915b9490941c93800262000409565b94509492505050565b60006200037060001960ff851684600082620004725750600162000370565b81620004815750600062000370565b81600181146200049a5760028114620004a557620004d9565b600191505062000370565b60ff841115620004b957620004b962000560565b6001841b915084821115620004d257620004d262000560565b5062000370565b5060208310610133831016604e8410600b841016171562000511575081810a838111156200050b576200050b62000560565b62000370565b62000520848484600162000406565b80860482111562000535576200053562000560565b02949350505050565b60008160001904831182151516156200055b576200055b62000560565b500290565b634e487b7160e01b600052601160045260246000fd5b61276780620005866000396000f3fe6080604052600436106101bb5760003560e01c8063782d6fe1116100ec578063c3cda5201161008a578063dd62ed3e11610064578063dd62ed3e1461049c578063e7a324dc146104bc578063f1127ed8146104d1578063f2fde38b146104ff576101c2565b8063c3cda52014610452578063c876d0b914610472578063c9567bf914610487576101c2565b806395d89b41116100c657806395d89b41146103e8578063a9059cbb146103fd578063b4b5ea571461041d578063bf474bed1461043d576101c2565b8063782d6fe1146103935780637ecebe00146103b35780638da5cb5b146103d3576101c2565b806340c10f19116101595780635c19a95c116101335780635c19a95c146103115780636fcfff451461033157806370a082311461035e578063715018a61461037e576101c2565b806340c10f19146102ad57806351bc3c85146102cf578063587cde1e146102e4576101c2565b806318160ddd1161019557806318160ddd1461024157806320606b701461025657806323b872dd1461026b578063313ce5671461028b576101c2565b806306fdde03146101c7578063095ea7b3146101f25780630faee56f1461021f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc61051f565b6040516101e991906120e8565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004611ec4565b610542565b6040516101e9919061206e565b34801561022b57600080fd5b50610234610560565b6040516101e99190612079565b34801561024d57600080fd5b50610234610566565b34801561026257600080fd5b5061023461056c565b34801561027757600080fd5b50610212610286366004611e84565b610590565b34801561029757600080fd5b506102a0610617565b6040516101e9919061259a565b3480156102b957600080fd5b506102cd6102c8366004611ec4565b61061c565b005b3480156102db57600080fd5b506102cd610668565b3480156102f057600080fd5b506103046102ff366004611e14565b6106c0565b6040516101e99190611fec565b34801561031d57600080fd5b506102cd61032c366004611e14565b6106de565b34801561033d57600080fd5b5061035161034c366004611e14565b6106eb565b6040516101e99190612573565b34801561036a57600080fd5b50610234610379366004611e14565b610703565b34801561038a57600080fd5b506102cd61071e565b34801561039f57600080fd5b506102346103ae366004611ec4565b61079d565b3480156103bf57600080fd5b506102346103ce366004611e14565b6109c2565b3480156103df57600080fd5b506103046109d4565b3480156103f457600080fd5b506101dc6109e3565b34801561040957600080fd5b50610212610418366004611ec4565b610a00565b34801561042957600080fd5b50610234610438366004611e14565b610a14565b34801561044957600080fd5b50610234610a89565b34801561045e57600080fd5b506102cd61046d366004611eef565b610a8f565b34801561047e57600080fd5b50610212610c6a565b34801561049357600080fd5b506102cd610c73565b3480156104a857600080fd5b506102346104b7366004611e4c565b6110ea565b3480156104c857600080fd5b50610234611115565b3480156104dd57600080fd5b506104f16104ec366004611f4f565b611139565b6040516101e9929190612584565b34801561050b57600080fd5b506102cd61051a366004611e14565b611166565b60408051808201909152600981526805461696b6f537761760bc1b602082015290565b600061055661054f6111ca565b84846111ce565b5060015b92915050565b60095481565b60075490565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600061059d848484611282565b61060d846105a96111ca565b610608856040518060600160405280602881526020016126d7602891396001600160a01b038a166000908152600260205260408120906105e76111ca565b6001600160a01b0316815260208101919091526040016000205491906115c9565b6111ce565b5060019392505050565b601290565b6106246111ca565b6000546001600160a01b0390811691161461065a5760405162461bcd60e51b81526004016106519061233f565b60405180910390fd5b6106648282611603565b5050565b60045461010090046001600160a01b03166106816111ca565b6001600160a01b03161461069457600080fd5b600061069f30610703565b905080156106b0576106b0816116b7565b478015610664576106648161187d565b6001600160a01b039081166000908152600c60205260409020541690565b6106e833826118bb565b50565b600e6020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526001602052604090205490565b6107266111ca565b6000546001600160a01b039081169116146107535760405162461bcd60e51b81526004016106519061233f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60004382106107be5760405162461bcd60e51b8152600401610651906122b8565b6001600160a01b0383166000908152600e602052604090205463ffffffff16806107ec57600091505061055a565b6001600160a01b0384166000908152600d602052604081208491610811600185612655565b63ffffffff9081168252602082019290925260400160002054161161087a576001600160a01b0384166000908152600d6020526040812090610854600184612655565b63ffffffff1663ffffffff1681526020019081526020016000206001015491505061055a565b6001600160a01b0384166000908152600d6020908152604080832083805290915290205463ffffffff168310156108b557600091505061055a565b6000806108c3600184612655565b90505b8163ffffffff168163ffffffff16111561098b57600060026108e88484612655565b6108f291906125fc565b6108fc9083612655565b6001600160a01b0388166000908152600d6020908152604080832063ffffffff808616855290835292819020815180830190925280549093168082526001909301549181019190915291925087141561095f5760200151945061055a9350505050565b805163ffffffff1687111561097657819350610984565b610981600183612655565b92505b50506108c6565b506001600160a01b0385166000908152600d6020908152604080832063ffffffff9094168352929052206001015491505092915050565b600f6020526000908152604090205481565b6000546001600160a01b031690565b604080518082019091526003815262544b5360e81b602082015290565b6000610556610a0d6111ca565b8484611282565b6001600160a01b0381166000908152600e602052604081205463ffffffff1680610a3f576000610a82565b6001600160a01b0383166000908152600d6020526040812090610a63600184612655565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60085481565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610aba61051f565b80519060200120610ac9611950565b30604051602001610add94939291906120a6565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001610b2e9493929190612082565b60405160208183030381529060405280519060200120905060008282604051602001610b5b929190611fd1565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610b9894939291906120ca565b6020604051602081039080840390855afa158015610bba573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bed5760405162461bcd60e51b8152600401610651906121f7565b6001600160a01b0381166000908152600f60205260408120805491610c118361267a565b919050558914610c335760405162461bcd60e51b8152600401610651906123bd565b87421115610c535760405162461bcd60e51b81526004016106519061223c565b610c5d818b6118bb565b505050505b505050505050565b60045460ff1681565b610c7b6111ca565b6000546001600160a01b03908116911614610ca85760405162461bcd60e51b81526004016106519061233f565b600b54600160a01b900460ff1615610cd25760405162461bcd60e51b815260040161065190612487565b600a546040805163c45a015560e01b815290516000926001600160a01b03169163c45a0155916004808301926020929190829003018186803b158015610d1757600080fd5b505afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190611e30565b9050806001600160a01b031663e6a4390530600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610daf57600080fd5b505afa158015610dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de79190611e30565b6040518363ffffffff1660e01b8152600401610e04929190612000565b60206040518083038186803b158015610e1c57600080fd5b505afa158015610e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e549190611e30565b600b80546001600160a01b0319166001600160a01b03928316179081905516610f9d57806001600160a01b031663c9c6539630600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed557600080fd5b505afa158015610ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0d9190611e30565b6040518363ffffffff1660e01b8152600401610f2a929190612000565b602060405180830381600087803b158015610f4457600080fd5b505af1158015610f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611e30565b600b80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b031663f305d7194730610fb981610703565b600080610fc46109d4565b426040518863ffffffff1660e01b8152600401610fe696959493929190612033565b6060604051808303818588803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110389190611fa4565b5050600b54600a5460405163095ea7b360e01b81526001600160a01b03928316935063095ea7b3926110729216906000199060040161201a565b602060405180830381600087803b15801561108c57600080fd5b505af11580156110a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c49190611f84565b5050600b805460ff60a01b1960ff60b01b19909116600160b01b1716600160a01b179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600d6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b61116e6111ca565b6000546001600160a01b0390811691161461119b5760405162461bcd60e51b81526004016106519061233f565b6001600160a01b0381166111c15760405162461bcd60e51b815260040161065190612281565b6106e881611954565b3390565b6001600160a01b0383166111f45760405162461bcd60e51b815260040161065190612443565b6001600160a01b03821661121a5760405162461bcd60e51b81526004016106519061217e565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611275908590612079565b60405180910390a3505050565b6001600160a01b0383166112a85760405162461bcd60e51b8152600401610651906123fe565b6001600160a01b0382166112ce5760405162461bcd60e51b81526004016106519061213b565b600081116112ee5760405162461bcd60e51b815260040161065190612374565b60006112f86109d4565b6001600160a01b0316846001600160a01b031614158015611332575061131c6109d4565b6001600160a01b0316836001600160a01b031614155b1561148457600b546001600160a01b0385811691161480156113625750600a546001600160a01b03848116911614155b801561138757506001600160a01b03831660009081526003602052604090205460ff16155b156113af576113ac60646113a6600554856119a490919063ffffffff16565b906119e9565b90505b600b546001600160a01b0384811691161480156113d557506001600160a01b0384163014155b156113f7576113f460646113a6600654856119a490919063ffffffff16565b90505b600061140230610703565b600b54909150600160a81b900460ff1615801561142c5750600b546001600160a01b038581169116145b80156114415750600b54600160b01b900460ff165b801561144e575060085481115b156114825761147061146b8461146684600954611a2b565b611a2b565b6116b7565b478015611480576114804761187d565b505b505b80156114fc57306000908152600160205260409020546114a49082611a40565b30600081815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114f3908590612079565b60405180910390a35b6001600160a01b03841660009081526001602052604090205461151f9083611a6f565b6001600160a01b0385166000908152600160205260409020556115646115458383611a6f565b6001600160a01b03851660009081526001602052604090205490611a40565b6001600160a01b0380851660008181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115ae8585611a6f565b6040516115bb9190612079565b60405180910390a350505050565b600081848411156115ed5760405162461bcd60e51b815260040161065191906120e8565b5060006115fa848661263e565b95945050505050565b6001600160a01b0382166116295760405162461bcd60e51b8152600401610651906124be565b6007546116369082611a40565b6007556001600160a01b03821660009081526001602052604090205461165c9082611a40565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ab908590612079565b60405180910390a35050565b600b805460ff60a81b1916600160a81b179055806116d45761186d565b600b54600160a01b900460ff166116ea5761186d565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061172d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561178157600080fd5b505afa158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190611e30565b816001815181106117da57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600a5461180091309116846111ce565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906118399085906000908690309042906004016124f5565b600060405180830381600087803b15801561185357600080fd5b505af1158015611867573d6000803e3d6000fd5b50505050505b50600b805460ff60a81b19169055565b6004546040516101009091046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015610664573d6000803e3d6000fd5b6001600160a01b038083166000908152600c6020526040812054909116906118e284610703565b6001600160a01b038581166000818152600c602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461194a828483611ab1565b50505050565b4690565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000826119b35750600061055a565b60006119bf838561261f565b9050826119cc85836125e8565b14610a825760405162461bcd60e51b8152600401610651906122fe565b6000610a8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c15565b6000818311611a3a5782610a82565b50919050565b600080611a4d83856125a8565b905083811015610a825760405162461bcd60e51b8152600401610651906121c0565b6000610a8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115c9565b816001600160a01b0316836001600160a01b031614158015611ad35750600081115b15611c10576001600160a01b03831615611b76576001600160a01b0383166000908152600e602052604081205463ffffffff169081611b13576000611b56565b6001600160a01b0385166000908152600d6020526040812090611b37600185612655565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611b64848361263e565b9050611b7286848484611c43565b5050505b6001600160a01b03821615611c10576001600160a01b0382166000908152600e602052604081205463ffffffff169081611bb1576000611bf4565b6001600160a01b0384166000908152600d6020526040812090611bd5600185612655565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611c0284836125a8565b9050610c6285848484611c43565b505050565b60008183611c365760405162461bcd60e51b815260040161065191906120e8565b5060006115fa84866125e8565b6000611c67436040518060600160405280603381526020016126ff60339139611de4565b905060008463ffffffff16118015611cc157506001600160a01b0385166000908152600d6020526040812063ffffffff831691611ca5600188612655565b63ffffffff908116825260208201929092526040016000205416145b15611d0a576001600160a01b0385166000908152600d602052604081208391611ceb600188612655565b63ffffffff168152602081019190915260400160002060010155611d9a565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152600d83528581208a851682529092529390209151825463ffffffff191691161781559051600191820155611d699085906125c0565b6001600160a01b0386166000908152600e60205260409020805463ffffffff191663ffffffff929092169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611dd5929190612565565b60405180910390a25050505050565b6000816401000000008410611e0c5760405162461bcd60e51b815260040161065191906120e8565b509192915050565b600060208284031215611e25578081fd5b8135610a82816126c1565b600060208284031215611e41578081fd5b8151610a82816126c1565b60008060408385031215611e5e578081fd5b8235611e69816126c1565b91506020830135611e79816126c1565b809150509250929050565b600080600060608486031215611e98578081fd5b8335611ea3816126c1565b92506020840135611eb3816126c1565b929592945050506040919091013590565b60008060408385031215611ed6578182fd5b8235611ee1816126c1565b946020939093013593505050565b60008060008060008060c08789031215611f07578182fd5b8635611f12816126c1565b95506020870135945060408701359350606087013560ff81168114611f35578283fd5b9598949750929560808101359460a0909101359350915050565b60008060408385031215611f61578182fd5b8235611f6c816126c1565b9150602083013563ffffffff81168114611e79578182fd5b600060208284031215611f95578081fd5b81518015158114610a82578182fd5b600080600060608486031215611fb8578283fd5b8351925060208401519150604084015190509250925092565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b90815260200190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015612114578581018301518582016040015282016120f8565b818111156121255783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526025908201527f6375623a3a64656c656761746542795369673a20696e76616c6964207369676e604082015264617475726560d81b606082015260800190565b60208082526025908201527f6375623a3a64656c656761746542795369673a207369676e61747572652065786040820152641c1a5c995960da1b606082015260800190565b6020808252601d908201527f63616e6e6f7420736574206f776e657220746f20302061646472657373000000604082015260600190565b60208082526026908201527f6375623a3a6765745072696f72566f7465733a206e6f742079657420646574656040820152651c9b5a5b995960d21b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526021908201527f6375623a3a64656c656761746542795369673a20696e76616c6964206e6f6e636040820152606560f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526017908201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156125445784516001600160a01b03168352938301939183019160010161251f565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b63ffffffff91909116815260200190565b63ffffffff929092168252602082015260400190565b60ff91909116815260200190565b600082198211156125bb576125bb612695565b500190565b600063ffffffff8083168185168083038211156125df576125df612695565b01949350505050565b6000826125f7576125f76126ab565b500490565b600063ffffffff80841680612613576126136126ab565b92169190910492915050565b600081600019048311821515161561263957612639612695565b500290565b60008282101561265057612650612695565b500390565b600063ffffffff8381169083168181101561267257612672612695565b039392505050565b600060001982141561268e5761268e612695565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146106e857600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63656375623a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a26469706673582212203fd45183a1bd80241bc5ca8d3e1a148d46ab51aef8808428a0cf74474df5ba8264736f6c634300080000330000000000000000000000006391c46ac4d308adce3aa49ce18488f25b176378

Deployed ByteCode

0x6080604052600436106101bb5760003560e01c8063782d6fe1116100ec578063c3cda5201161008a578063dd62ed3e11610064578063dd62ed3e1461049c578063e7a324dc146104bc578063f1127ed8146104d1578063f2fde38b146104ff576101c2565b8063c3cda52014610452578063c876d0b914610472578063c9567bf914610487576101c2565b806395d89b41116100c657806395d89b41146103e8578063a9059cbb146103fd578063b4b5ea571461041d578063bf474bed1461043d576101c2565b8063782d6fe1146103935780637ecebe00146103b35780638da5cb5b146103d3576101c2565b806340c10f19116101595780635c19a95c116101335780635c19a95c146103115780636fcfff451461033157806370a082311461035e578063715018a61461037e576101c2565b806340c10f19146102ad57806351bc3c85146102cf578063587cde1e146102e4576101c2565b806318160ddd1161019557806318160ddd1461024157806320606b701461025657806323b872dd1461026b578063313ce5671461028b576101c2565b806306fdde03146101c7578063095ea7b3146101f25780630faee56f1461021f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc61051f565b6040516101e991906120e8565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004611ec4565b610542565b6040516101e9919061206e565b34801561022b57600080fd5b50610234610560565b6040516101e99190612079565b34801561024d57600080fd5b50610234610566565b34801561026257600080fd5b5061023461056c565b34801561027757600080fd5b50610212610286366004611e84565b610590565b34801561029757600080fd5b506102a0610617565b6040516101e9919061259a565b3480156102b957600080fd5b506102cd6102c8366004611ec4565b61061c565b005b3480156102db57600080fd5b506102cd610668565b3480156102f057600080fd5b506103046102ff366004611e14565b6106c0565b6040516101e99190611fec565b34801561031d57600080fd5b506102cd61032c366004611e14565b6106de565b34801561033d57600080fd5b5061035161034c366004611e14565b6106eb565b6040516101e99190612573565b34801561036a57600080fd5b50610234610379366004611e14565b610703565b34801561038a57600080fd5b506102cd61071e565b34801561039f57600080fd5b506102346103ae366004611ec4565b61079d565b3480156103bf57600080fd5b506102346103ce366004611e14565b6109c2565b3480156103df57600080fd5b506103046109d4565b3480156103f457600080fd5b506101dc6109e3565b34801561040957600080fd5b50610212610418366004611ec4565b610a00565b34801561042957600080fd5b50610234610438366004611e14565b610a14565b34801561044957600080fd5b50610234610a89565b34801561045e57600080fd5b506102cd61046d366004611eef565b610a8f565b34801561047e57600080fd5b50610212610c6a565b34801561049357600080fd5b506102cd610c73565b3480156104a857600080fd5b506102346104b7366004611e4c565b6110ea565b3480156104c857600080fd5b50610234611115565b3480156104dd57600080fd5b506104f16104ec366004611f4f565b611139565b6040516101e9929190612584565b34801561050b57600080fd5b506102cd61051a366004611e14565b611166565b60408051808201909152600981526805461696b6f537761760bc1b602082015290565b600061055661054f6111ca565b84846111ce565b5060015b92915050565b60095481565b60075490565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600061059d848484611282565b61060d846105a96111ca565b610608856040518060600160405280602881526020016126d7602891396001600160a01b038a166000908152600260205260408120906105e76111ca565b6001600160a01b0316815260208101919091526040016000205491906115c9565b6111ce565b5060019392505050565b601290565b6106246111ca565b6000546001600160a01b0390811691161461065a5760405162461bcd60e51b81526004016106519061233f565b60405180910390fd5b6106648282611603565b5050565b60045461010090046001600160a01b03166106816111ca565b6001600160a01b03161461069457600080fd5b600061069f30610703565b905080156106b0576106b0816116b7565b478015610664576106648161187d565b6001600160a01b039081166000908152600c60205260409020541690565b6106e833826118bb565b50565b600e6020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526001602052604090205490565b6107266111ca565b6000546001600160a01b039081169116146107535760405162461bcd60e51b81526004016106519061233f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60004382106107be5760405162461bcd60e51b8152600401610651906122b8565b6001600160a01b0383166000908152600e602052604090205463ffffffff16806107ec57600091505061055a565b6001600160a01b0384166000908152600d602052604081208491610811600185612655565b63ffffffff9081168252602082019290925260400160002054161161087a576001600160a01b0384166000908152600d6020526040812090610854600184612655565b63ffffffff1663ffffffff1681526020019081526020016000206001015491505061055a565b6001600160a01b0384166000908152600d6020908152604080832083805290915290205463ffffffff168310156108b557600091505061055a565b6000806108c3600184612655565b90505b8163ffffffff168163ffffffff16111561098b57600060026108e88484612655565b6108f291906125fc565b6108fc9083612655565b6001600160a01b0388166000908152600d6020908152604080832063ffffffff808616855290835292819020815180830190925280549093168082526001909301549181019190915291925087141561095f5760200151945061055a9350505050565b805163ffffffff1687111561097657819350610984565b610981600183612655565b92505b50506108c6565b506001600160a01b0385166000908152600d6020908152604080832063ffffffff9094168352929052206001015491505092915050565b600f6020526000908152604090205481565b6000546001600160a01b031690565b604080518082019091526003815262544b5360e81b602082015290565b6000610556610a0d6111ca565b8484611282565b6001600160a01b0381166000908152600e602052604081205463ffffffff1680610a3f576000610a82565b6001600160a01b0383166000908152600d6020526040812090610a63600184612655565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60085481565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610aba61051f565b80519060200120610ac9611950565b30604051602001610add94939291906120a6565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001610b2e9493929190612082565b60405160208183030381529060405280519060200120905060008282604051602001610b5b929190611fd1565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610b9894939291906120ca565b6020604051602081039080840390855afa158015610bba573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bed5760405162461bcd60e51b8152600401610651906121f7565b6001600160a01b0381166000908152600f60205260408120805491610c118361267a565b919050558914610c335760405162461bcd60e51b8152600401610651906123bd565b87421115610c535760405162461bcd60e51b81526004016106519061223c565b610c5d818b6118bb565b505050505b505050505050565b60045460ff1681565b610c7b6111ca565b6000546001600160a01b03908116911614610ca85760405162461bcd60e51b81526004016106519061233f565b600b54600160a01b900460ff1615610cd25760405162461bcd60e51b815260040161065190612487565b600a546040805163c45a015560e01b815290516000926001600160a01b03169163c45a0155916004808301926020929190829003018186803b158015610d1757600080fd5b505afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190611e30565b9050806001600160a01b031663e6a4390530600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610daf57600080fd5b505afa158015610dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de79190611e30565b6040518363ffffffff1660e01b8152600401610e04929190612000565b60206040518083038186803b158015610e1c57600080fd5b505afa158015610e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e549190611e30565b600b80546001600160a01b0319166001600160a01b03928316179081905516610f9d57806001600160a01b031663c9c6539630600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed557600080fd5b505afa158015610ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0d9190611e30565b6040518363ffffffff1660e01b8152600401610f2a929190612000565b602060405180830381600087803b158015610f4457600080fd5b505af1158015610f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611e30565b600b80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b031663f305d7194730610fb981610703565b600080610fc46109d4565b426040518863ffffffff1660e01b8152600401610fe696959493929190612033565b6060604051808303818588803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110389190611fa4565b5050600b54600a5460405163095ea7b360e01b81526001600160a01b03928316935063095ea7b3926110729216906000199060040161201a565b602060405180830381600087803b15801561108c57600080fd5b505af11580156110a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c49190611f84565b5050600b805460ff60a01b1960ff60b01b19909116600160b01b1716600160a01b179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600d6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b61116e6111ca565b6000546001600160a01b0390811691161461119b5760405162461bcd60e51b81526004016106519061233f565b6001600160a01b0381166111c15760405162461bcd60e51b815260040161065190612281565b6106e881611954565b3390565b6001600160a01b0383166111f45760405162461bcd60e51b815260040161065190612443565b6001600160a01b03821661121a5760405162461bcd60e51b81526004016106519061217e565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611275908590612079565b60405180910390a3505050565b6001600160a01b0383166112a85760405162461bcd60e51b8152600401610651906123fe565b6001600160a01b0382166112ce5760405162461bcd60e51b81526004016106519061213b565b600081116112ee5760405162461bcd60e51b815260040161065190612374565b60006112f86109d4565b6001600160a01b0316846001600160a01b031614158015611332575061131c6109d4565b6001600160a01b0316836001600160a01b031614155b1561148457600b546001600160a01b0385811691161480156113625750600a546001600160a01b03848116911614155b801561138757506001600160a01b03831660009081526003602052604090205460ff16155b156113af576113ac60646113a6600554856119a490919063ffffffff16565b906119e9565b90505b600b546001600160a01b0384811691161480156113d557506001600160a01b0384163014155b156113f7576113f460646113a6600654856119a490919063ffffffff16565b90505b600061140230610703565b600b54909150600160a81b900460ff1615801561142c5750600b546001600160a01b038581169116145b80156114415750600b54600160b01b900460ff165b801561144e575060085481115b156114825761147061146b8461146684600954611a2b565b611a2b565b6116b7565b478015611480576114804761187d565b505b505b80156114fc57306000908152600160205260409020546114a49082611a40565b30600081815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114f3908590612079565b60405180910390a35b6001600160a01b03841660009081526001602052604090205461151f9083611a6f565b6001600160a01b0385166000908152600160205260409020556115646115458383611a6f565b6001600160a01b03851660009081526001602052604090205490611a40565b6001600160a01b0380851660008181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115ae8585611a6f565b6040516115bb9190612079565b60405180910390a350505050565b600081848411156115ed5760405162461bcd60e51b815260040161065191906120e8565b5060006115fa848661263e565b95945050505050565b6001600160a01b0382166116295760405162461bcd60e51b8152600401610651906124be565b6007546116369082611a40565b6007556001600160a01b03821660009081526001602052604090205461165c9082611a40565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ab908590612079565b60405180910390a35050565b600b805460ff60a81b1916600160a81b179055806116d45761186d565b600b54600160a01b900460ff166116ea5761186d565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061172d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561178157600080fd5b505afa158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190611e30565b816001815181106117da57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600a5461180091309116846111ce565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906118399085906000908690309042906004016124f5565b600060405180830381600087803b15801561185357600080fd5b505af1158015611867573d6000803e3d6000fd5b50505050505b50600b805460ff60a81b19169055565b6004546040516101009091046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015610664573d6000803e3d6000fd5b6001600160a01b038083166000908152600c6020526040812054909116906118e284610703565b6001600160a01b038581166000818152600c602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461194a828483611ab1565b50505050565b4690565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000826119b35750600061055a565b60006119bf838561261f565b9050826119cc85836125e8565b14610a825760405162461bcd60e51b8152600401610651906122fe565b6000610a8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c15565b6000818311611a3a5782610a82565b50919050565b600080611a4d83856125a8565b905083811015610a825760405162461bcd60e51b8152600401610651906121c0565b6000610a8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115c9565b816001600160a01b0316836001600160a01b031614158015611ad35750600081115b15611c10576001600160a01b03831615611b76576001600160a01b0383166000908152600e602052604081205463ffffffff169081611b13576000611b56565b6001600160a01b0385166000908152600d6020526040812090611b37600185612655565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611b64848361263e565b9050611b7286848484611c43565b5050505b6001600160a01b03821615611c10576001600160a01b0382166000908152600e602052604081205463ffffffff169081611bb1576000611bf4565b6001600160a01b0384166000908152600d6020526040812090611bd5600185612655565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611c0284836125a8565b9050610c6285848484611c43565b505050565b60008183611c365760405162461bcd60e51b815260040161065191906120e8565b5060006115fa84866125e8565b6000611c67436040518060600160405280603381526020016126ff60339139611de4565b905060008463ffffffff16118015611cc157506001600160a01b0385166000908152600d6020526040812063ffffffff831691611ca5600188612655565b63ffffffff908116825260208201929092526040016000205416145b15611d0a576001600160a01b0385166000908152600d602052604081208391611ceb600188612655565b63ffffffff168152602081019190915260400160002060010155611d9a565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152600d83528581208a851682529092529390209151825463ffffffff191691161781559051600191820155611d699085906125c0565b6001600160a01b0386166000908152600e60205260409020805463ffffffff191663ffffffff929092169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611dd5929190612565565b60405180910390a25050505050565b6000816401000000008410611e0c5760405162461bcd60e51b815260040161065191906120e8565b509192915050565b600060208284031215611e25578081fd5b8135610a82816126c1565b600060208284031215611e41578081fd5b8151610a82816126c1565b60008060408385031215611e5e578081fd5b8235611e69816126c1565b91506020830135611e79816126c1565b809150509250929050565b600080600060608486031215611e98578081fd5b8335611ea3816126c1565b92506020840135611eb3816126c1565b929592945050506040919091013590565b60008060408385031215611ed6578182fd5b8235611ee1816126c1565b946020939093013593505050565b60008060008060008060c08789031215611f07578182fd5b8635611f12816126c1565b95506020870135945060408701359350606087013560ff81168114611f35578283fd5b9598949750929560808101359460a0909101359350915050565b60008060408385031215611f61578182fd5b8235611f6c816126c1565b9150602083013563ffffffff81168114611e79578182fd5b600060208284031215611f95578081fd5b81518015158114610a82578182fd5b600080600060608486031215611fb8578283fd5b8351925060208401519150604084015190509250925092565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b90815260200190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015612114578581018301518582016040015282016120f8565b818111156121255783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526025908201527f6375623a3a64656c656761746542795369673a20696e76616c6964207369676e604082015264617475726560d81b606082015260800190565b60208082526025908201527f6375623a3a64656c656761746542795369673a207369676e61747572652065786040820152641c1a5c995960da1b606082015260800190565b6020808252601d908201527f63616e6e6f7420736574206f776e657220746f20302061646472657373000000604082015260600190565b60208082526026908201527f6375623a3a6765745072696f72566f7465733a206e6f742079657420646574656040820152651c9b5a5b995960d21b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526021908201527f6375623a3a64656c656761746542795369673a20696e76616c6964206e6f6e636040820152606560f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526017908201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156125445784516001600160a01b03168352938301939183019160010161251f565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b63ffffffff91909116815260200190565b63ffffffff929092168252602082015260400190565b60ff91909116815260200190565b600082198211156125bb576125bb612695565b500190565b600063ffffffff8083168185168083038211156125df576125df612695565b01949350505050565b6000826125f7576125f76126ab565b500490565b600063ffffffff80841680612613576126136126ab565b92169190910492915050565b600081600019048311821515161561263957612639612695565b500290565b60008282101561265057612650612695565b500390565b600063ffffffff8381169083168181101561267257612672612695565b039392505050565b600060001982141561268e5761268e612695565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146106e857600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63656375623a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a26469706673582212203fd45183a1bd80241bc5ca8d3e1a148d46ab51aef8808428a0cf74474df5ba8264736f6c63430008000033