ETH Price: $3,620.90 (-2.76%)

Token

ERC-20: TxWorx (TX)
 

Overview

Max Total Supply

100,000,000 TX

Holders

444

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TxWorx

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : NuToken.sol
/**

https://txworx.com
https://x.com/txworx
https://t.me/txworx

**/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;
pragma experimental ABIEncoderV2;

abstract contract Ownable {
    address private _owner;

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

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

library SafeERC20 {
    function safeTransfer(address token, address to, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: INTERNAL TRANSFER_FAILED');
    }
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external;
}

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

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

    function WETH() external pure returns (address);

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

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

contract TxWorx is Ownable {
    string private constant _name = unicode"TxWorx";
    string private constant _symbol = unicode"TX";
    uint256 private constant _totalSupply = 100_000_000 * 1e9;

    uint256 public maxTransactionAmount = 1_000_000 * 1e9;
    uint256 public maxWallet = 1_000_000 * 1e9;
    uint256 public swapTokensAtAmount = 200_000 * 1e9;

    address private revWallet = 0x93754d7edf28C88ee8112bEA1F06b45129a9a5a2;
    address private treasuryWallet = 0xEfF8884A5529B16f5A38956B606C7698142bD88a;
    address private teamWallet = 0x4Fd77Cf09094a017396e83ABD01F185a4Bea05AA;
    address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    uint16 public buyTotalFees = 200;
    uint16 public sellTotalFees = 500;

    uint8 public revFee = 50;
    uint8 public treasuryFee = 25;
    uint8 public teamFee = 25;

    bool private swapping;
    bool public limitsInEffect = true;
    bool private launched;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    event SwapAndLiquify(uint256 tokensSwapped, uint256 teamETH, uint256 revETH, uint256 TreasuryETH);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    IUniswapV2Router02 public constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public immutable uniswapV2Pair;

    constructor() {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), WETH);
        automatedMarketMakerPairs[uniswapV2Pair] = true;


        setExcludedFromFees(owner(), true);
        setExcludedFromFees(address(this), true);
        setExcludedFromFees(address(0xdead), true);
        setExcludedFromFees(teamWallet, true);
        setExcludedFromFees(revWallet, true);
        setExcludedFromFees(treasuryWallet, true);

        setExcludedFromMaxTransaction(owner(), true);
        setExcludedFromMaxTransaction(address(uniswapV2Router), true);
        setExcludedFromMaxTransaction(address(this), true);
        setExcludedFromMaxTransaction(address(0xdead), true);
        setExcludedFromMaxTransaction(address(uniswapV2Pair), true);
        setExcludedFromMaxTransaction(teamWallet, true);
        setExcludedFromMaxTransaction(revWallet, true);
        setExcludedFromMaxTransaction(treasuryWallet, true);


        _balances[msg.sender] = 3_000_000 * 1e9;
        emit Transfer(address(0), msg.sender, _balances[msg.sender]);

        _balances[treasuryWallet] = 7_000_000 * 1e9;
        emit Transfer(address(0), treasuryWallet, _balances[treasuryWallet]);

        _balances[address(this)] = 90_000_000 * 1e9;
        emit Transfer(address(0), address(this), _balances[address(this)]);

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
    }

    receive() external payable {}

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

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

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

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

    function approve(address spender, uint256 amount) external returns (bool) {
        _approve(msg.sender, spender, amount);
        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 recipient, uint256 amount) external returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {
        uint256 currentAllowance = _allowances[sender][msg.sender];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, msg.sender, currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

        if (!launched && (from != owner() && from != address(this) && to != owner())) {
            revert("Trading not enabled");
        }

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTx");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount,"Sell transfer amount exceeds the maxTx");
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;

        if (canSwap && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 senderBalance = _balances[from];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 1000;
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 1000;
            }

            if (fees > 0) {
                unchecked {
                    amount = amount - fees;
                    _balances[from] -= fees;
                    _balances[address(this)] += fees;
                }
                emit Transfer(from, address(this), fees);
            }
        }
        unchecked {
            _balances[from] -= amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function setDistributionFees(uint8 _RevFee, uint8 _TreasuryFee, uint8 _teamFee) external onlyOwner {
        revFee = _RevFee;
        treasuryFee = _TreasuryFee;
        teamFee = _teamFee;
        require((revFee + treasuryFee + teamFee) == 100, "Distribution have to be equal to 100%");
    }

    function setFees(uint8 _buyTotalFees, uint8 _sellTotalFees) external onlyOwner {
        require(_buyTotalFees <= 900);
        require(_sellTotalFees <= 900);
        buyTotalFees = _buyTotalFees;
        sellTotalFees = _sellTotalFees;
    }

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

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

    function airdropWallets(address[] memory addresses, uint256[] memory amounts) external onlyOwner {
        require(!launched, "Already launched");
        for (uint256 i = 0; i < addresses.length; i++) {
            require(_balances[msg.sender] >= amounts[i], "ERC20: transfer amount exceeds balance");
            _balances[addresses[i]] += amounts[i];
            _balances[msg.sender] -= amounts[i];
            emit Transfer(msg.sender, addresses[i], amounts[i]);
        }
    }

    function addLP() external payable onlyOwner {
        require(!launched, "Already launched");
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            _balances[address(this)],
            0,
            0,
            teamWallet,
            block.timestamp
        );

        launched = true;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed");
        automatedMarketMakerPairs[pair] = value;
    }

    function setSwapAtAmount(uint256 newSwapAmount) external onlyOwner {
        require(newSwapAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% of the supply");
        require(newSwapAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% of the supply");
        swapTokensAtAmount = newSwapAmount;
    }

    function setMaxTxnAmount(uint256 newMaxTx) external onlyOwner {
        require(newMaxTx >= ((totalSupply() * 1) / 1000) / 1e9, "Cannot set max transaction lower than 0.1%");
        maxTransactionAmount = newMaxTx * (10**9);
    }

    function setMaxWalletAmount(uint256 newMaxWallet) external onlyOwner {
        require(newMaxWallet >= ((totalSupply() * 1) / 1000) / 1e9, "Cannot set max wallet lower than 0.1%");
        maxWallet = newMaxWallet * (10**9);
    }

    function updateRevWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        revWallet = newAddress;
    }

    function updateTreasuryWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        treasuryWallet = newAddress;
    }

    function updateTeamWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        teamWallet = newAddress;
    }

    function excludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function withdrawStuckToken(address token, address to) external onlyOwner {
        uint256 _contractBalance = IERC20(token).balanceOf(address(this));
        SafeERC20.safeTransfer(token, to, _contractBalance); // Use safeTransfer
    }

    function withdrawStuckETH(address addr) external onlyOwner {
        require(addr != address(0), "Invalid address");

        (bool success, ) = addr.call{value: address(this).balance}("");
        require(success, "Withdrawal failed");
    }

    function swapBack() private {
        uint256 swapThreshold = swapTokensAtAmount;
        bool success;

        if (balanceOf(address(this)) > swapTokensAtAmount * 20) {
            swapThreshold = swapTokensAtAmount * 20;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

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

        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0) {
            uint256 ethForRev = (ethBalance * revFee) / 100;
            uint256 ethForTeam = (ethBalance * teamFee) / 100;
            uint256 ethForTreasury = ethBalance - ethForRev - ethForTeam;

            (success, ) = address(teamWallet).call{value: ethForTeam}("");
            (success, ) = address(treasuryWallet).call{value: ethForTreasury}("");
            (success, ) = address(revWallet).call{value: ethForRev}("");

            emit SwapAndLiquify(swapThreshold, ethForTeam, ethForRev, ethForTreasury);
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"teamETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"revETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TreasuryETH","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"addLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_RevFee","type":"uint8"},{"internalType":"uint8","name":"_TreasuryFee","type":"uint8"},{"internalType":"uint8","name":"_teamFee","type":"uint8"}],"name":"setDistributionFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"_sellTotalFees","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTx","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapAmount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405266038d7ea4c68000600181905560025565b5e620f48000600355600480546001600160a01b03199081167393754d7edf28c88ee8112bea1f06b45129a9a5a2179091556005805490911673eff8884a5529b16f5a38956b606c7698142bd88a179055600680547c010019193201f400c84fd77cf09094a017396e83abd01f185a4bea05aa600161ff0160d81b0319909116179055348015620000a4575f80fd5b505f80546001600160a01b031916331790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163c45a01559160048083019260209291908290030181865afa15801562000105573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200012b91906200063e565b6040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201526001600160a01b03919091169063c9c65396906044016020604051808303815f875af11580156200018b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b191906200063e565b6001600160a01b031660808190525f908152600b60205260409020805460ff19166001179055620001f5620001ed5f546001600160a01b031690565b60016200040d565b620002023060016200040d565b6200021161dead60016200040d565b6006546200022a906001600160a01b031660016200040d565b60045462000243906001600160a01b031660016200040d565b6005546200025c906001600160a01b031660016200040d565b6200027a620002725f546001600160a01b031690565b600162000494565b6200029b737a250d5630b4cf539739df2c5dacb4c659f2488d600162000494565b620002a830600162000494565b620002b761dead600162000494565b608051620002c790600162000494565b600654620002e0906001600160a01b0316600162000494565b600454620002f9906001600160a01b0316600162000494565b60055462000312906001600160a01b0316600162000494565b335f818152600760209081526040808320660aa87bee5380009081905590519081525f8051602062002f62833981519152910160405180910390a3600580546001600160a01b039081165f908152600760205260408082206618de76816d80009055925490911680825282822054925190925f8051602062002f6283398151915291620003a191815260200190565b60405180910390a3305f81815260076020908152604080832067013fbe85edc900009081905590519081525f8051602062002f62833981519152910160405180910390a36200040730737a250d5630b4cf539739df2c5dacb4c659f2488d5f1962000517565b6200066d565b33620004205f546001600160a01b031690565b6001600160a01b0316146200046a5760405162461bcd60e51b815260206004820181905260248201525f8051602062002f4283398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b33620004a75f546001600160a01b031690565b6001600160a01b031614620004ed5760405162461bcd60e51b815260206004820181905260248201525f8051602062002f42833981519152604482015260640162000461565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b0383166200057b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000461565b6001600160a01b038216620005de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000461565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f602082840312156200064f575f80fd5b81516001600160a01b038116811462000666575f80fd5b9392505050565b6080516128b56200068d5f395f81816103bd0152610f8201526128b55ff3fe60806040526004361061022b575f3560e01c8063751039fc11610129578063bc37e1a3116100a8578063d85ba0631161006d578063d85ba063146106dd578063dd62ed3e146106fe578063e2f4560514610742578063e710794714610757578063f8b45b0514610776575f80fd5b8063bc37e1a314610661578063c8c8ebe414610669578063cc32d1761461067e578063d201b01e1461069e578063d7c94efd146106bd575f80fd5b806395d89b41116100ee57806395d89b41146105bb5780639a7a23d6146105e5578063a9059cbb14610604578063adfa29e514610623578063bc205ad314610642575f80fd5b8063751039fc146105165780637cb332bb1461052a578063809d458d1461054957806385ecafd7146105685780638da5cb5b1461059f575f80fd5b806349bd5a5e116101b557806366650dae1161017a57806366650dae1461045c5780636a486a8e1461047b57806370a08231146104af578063715018a6146104e357806374010ece146104f7575f80fd5b806349bd5a5e146103ac5780634a62bb65146103df5780634fcd2446146103ff578063590ffdce1461041e5780636402511e1461043d575f80fd5b806321d37e39116101fb57806321d37e391461030857806323b872dd1461033a57806327a14fc214610359578063313ce5671461037a5780633c090c461461038d575f80fd5b806306fdde0314610236578063095ea7b3146102765780631694505e146102a557806318160ddd146102e4575f80fd5b3661023257005b5f80fd5b348015610241575f80fd5b506040805180820190915260068152650a8f0aedee4f60d31b60208201525b60405161026d91906122db565b60405180910390f35b348015610281575f80fd5b50610295610290366004612328565b61078b565b604051901515815260200161026d565b3480156102b0575f80fd5b506102cc737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161026d565b3480156102ef575f80fd5b5067016345785d8a00005b60405190815260200161026d565b348015610313575f80fd5b5060065461032890600160c01b900460ff1681565b60405160ff909116815260200161026d565b348015610345575f80fd5b50610295610354366004612350565b6107a1565b348015610364575f80fd5b50610378610373366004612389565b610855565b005b348015610385575f80fd5b506009610328565b348015610398575f80fd5b506103786103a73660046123b0565b61092d565b3480156103b7575f80fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ea575f80fd5b5060065461029590600160e01b900460ff1681565b34801561040a575f80fd5b506103786104193660046123f0565b610a35565b348015610429575f80fd5b50610378610438366004612431565b610ac0565b348015610448575f80fd5b50610378610457366004612389565b610b22565b348015610467575f80fd5b50610378610476366004612431565b610c79565b348015610486575f80fd5b5060065461049c90600160b01b900461ffff1681565b60405161ffff909116815260200161026d565b3480156104ba575f80fd5b506102fa6104c9366004612466565b6001600160a01b03165f9081526007602052604090205490565b3480156104ee575f80fd5b50610378610cdb565b348015610502575f80fd5b50610378610511366004612389565b610d24565b348015610521575f80fd5b50610378610e01565b348015610535575f80fd5b50610378610544366004612466565b610e48565b348015610554575f80fd5b50610378610563366004612466565b610ec8565b348015610573575f80fd5b50610295610582366004612466565b6001600160a01b03165f9081526009602052604090205460ff1690565b3480156105aa575f80fd5b505f546001600160a01b03166102cc565b3480156105c6575f80fd5b506040805180820190915260028152610a8b60f31b6020820152610260565b3480156105f0575f80fd5b506103786105ff366004612431565b610f48565b34801561060f575f80fd5b5061029561061e366004612328565b61102b565b34801561062e575f80fd5b5061037861063d366004612466565b611037565b34801561064d575f80fd5b5061037861065c366004612486565b6110b7565b610378611164565b348015610674575f80fd5b506102fa60015481565b348015610689575f80fd5b5060065461032890600160c81b900460ff1681565b3480156106a9575f80fd5b506103786106b8366004612466565b6112b2565b3480156106c8575f80fd5b5060065461032890600160d01b900460ff1681565b3480156106e8575f80fd5b5060065461049c90600160a01b900461ffff1681565b348015610709575f80fd5b506102fa610718366004612486565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b34801561074d575f80fd5b506102fa60035481565b348015610762575f80fd5b5061037861077136600461257e565b6113c9565b348015610781575f80fd5b506102fa60025481565b5f610797338484611603565b5060015b92915050565b6001600160a01b0383165f9081526008602090815260408083203384529091528120545f19811461083f57828110156108325760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61083f8533858403611603565b61084a858585611726565b506001949350505050565b336108675f546001600160a01b031690565b6001600160a01b03161461088d5760405162461bcd60e51b815260040161082990612638565b633b9aca006103e86108a867016345785d8a00006001612681565b6108b29190612698565b6108bc9190612698565b8110156109195760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d61782077616c6c6574206c6f776572207468616e60448201526420302e312560d81b6064820152608401610829565b61092781633b9aca00612681565b60025550565b3361093f5f546001600160a01b031690565b6001600160a01b0316146109655760405162461bcd60e51b815260040161082990612638565b6006805461ffff60c01b1916600160c01b60ff868116820260ff60c81b191692909217600160c81b86841681029190911760ff60d01b1916600160d01b8685168102919091179485905584048316936109c6939181048216929004166126b7565b6109d091906126b7565b60ff16606414610a305760405162461bcd60e51b815260206004820152602560248201527f446973747269627574696f6e206861766520746f20626520657175616c20746f604482015264203130302560d81b6064820152608401610829565b505050565b33610a475f546001600160a01b031690565b6001600160a01b031614610a6d5760405162461bcd60e51b815260040161082990612638565b6103848260ff161115610a7e575f80fd5b6103848160ff161115610a8f575f80fd5b6006805463ffffffff60a01b191660ff938416600160a01b0261ffff60b01b19161791909216600160b01b02179055565b33610ad25f546001600160a01b031690565b6001600160a01b031614610af85760405162461bcd60e51b815260040161082990612638565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b33610b345f546001600160a01b031690565b6001600160a01b031614610b5a5760405162461bcd60e51b815260040161082990612638565b620186a0610b7167016345785d8a00006001612681565b610b7b9190612698565b811015610be85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527420302e30303125206f662074686520737570706c7960581b6064820152608401610829565b6103e8610bfe67016345785d8a00006005612681565b610c089190612698565b811115610c745760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f7420626520686967686572207468616044820152736e20302e3525206f662074686520737570706c7960601b6064820152608401610829565b600355565b33610c8b5f546001600160a01b031690565b6001600160a01b031614610cb15760405162461bcd60e51b815260040161082990612638565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b33610ced5f546001600160a01b031690565b6001600160a01b031614610d135760405162461bcd60e51b815260040161082990612638565b5f80546001600160a01b0319169055565b33610d365f546001600160a01b031690565b6001600160a01b031614610d5c5760405162461bcd60e51b815260040161082990612638565b633b9aca006103e8610d7767016345785d8a00006001612681565b610d819190612698565b610d8b9190612698565b811015610ded5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d6178207472616e73616374696f6e206c6f776572604482015269207468616e20302e312560b01b6064820152608401610829565b610dfb81633b9aca00612681565b60015550565b33610e135f546001600160a01b031690565b6001600160a01b031614610e395760405162461bcd60e51b815260040161082990612638565b6006805460ff60e01b19169055565b33610e5a5f546001600160a01b031690565b6001600160a01b031614610e805760405162461bcd60e51b815260040161082990612638565b6001600160a01b038116610ea65760405162461bcd60e51b8152600401610829906126d0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b33610eda5f546001600160a01b031690565b6001600160a01b031614610f005760405162461bcd60e51b815260040161082990612638565b6001600160a01b038116610f265760405162461bcd60e51b8152600401610829906126d0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b33610f5a5f546001600160a01b031690565b6001600160a01b031614610f805760405162461bcd60e51b815260040161082990612638565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110015760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610829565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f610797338484611726565b336110495f546001600160a01b031690565b6001600160a01b03161461106f5760405162461bcd60e51b815260040161082990612638565b6001600160a01b0381166110955760405162461bcd60e51b8152600401610829906126d0565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b336110c95f546001600160a01b031690565b6001600160a01b0316146110ef5760405162461bcd60e51b815260040161082990612638565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611133573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111579190612700565b9050610a30838383611ea3565b336111765f546001600160a01b031690565b6001600160a01b03161461119c5760405162461bcd60e51b815260040161082990612638565b600654600160e81b900460ff16156111e95760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610829565b305f8181526007602052604080822054600654915163f305d71960e01b8152600481019490945260248401526044830182905260648301919091526001600160a01b031660848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990349060c40160606040518083038185885af1158015611275573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061129a9190612717565b50506006805460ff60e81b1916600160e81b17905550565b336112c45f546001600160a01b031690565b6001600160a01b0316146112ea5760405162461bcd60e51b815260040161082990612638565b6001600160a01b0381166113325760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610829565b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f811461137b576040519150601f19603f3d011682016040523d82523d5f602084013e611380565b606091505b50509050806113c55760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b0819985a5b1959607a1b6044820152606401610829565b5050565b336113db5f546001600160a01b031690565b6001600160a01b0316146114015760405162461bcd60e51b815260040161082990612638565b600654600160e81b900460ff161561144e5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610829565b5f5b8251811015610a305781818151811061146b5761146b612742565b602002602001015160075f336001600160a01b03166001600160a01b031681526020019081526020015f205410156114b55760405162461bcd60e51b815260040161082990612756565b8181815181106114c7576114c7612742565b602002602001015160075f8584815181106114e4576114e4612742565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f828254611519919061279c565b9250508190555081818151811061153257611532612742565b602002602001015160075f336001600160a01b03166001600160a01b031681526020019081526020015f205f82825461156b91906127af565b9250508190555082818151811061158457611584612742565b60200260200101516001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8484815181106115d2576115d2612742565b60200260200101516040516115e991815260200190565b60405180910390a3806115fb816127c2565b915050611450565b6001600160a01b0383166116655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610829565b6001600160a01b0382166116c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610829565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661178a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610829565b6001600160a01b0382166117ec5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610829565b5f811161184d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610829565b600654600160e81b900460ff161580156118a157505f546001600160a01b0384811691161480159061188857506001600160a01b0383163014155b80156118a157505f546001600160a01b03838116911614155b156118e45760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610829565b600654600160e01b900460ff1615611ba5575f546001600160a01b0384811691161480159061192057505f546001600160a01b03838116911614155b801561193457506001600160a01b03821615155b801561194b57506001600160a01b03821661dead14155b80156119615750600654600160d81b900460ff16155b15611ba5576001600160a01b0383165f908152600b602052604090205460ff1680156119a557506001600160a01b0382165f908152600a602052604090205460ff16155b15611a7857600154811115611a0a5760405162461bcd60e51b815260206004820152602560248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152640dac2f0a8f60db1b6064820152608401610829565b6002546001600160a01b0383165f90815260076020526040902054611a2f908361279c565b1115611a735760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610829565b611ba5565b6001600160a01b0382165f908152600b602052604090205460ff168015611ab757506001600160a01b0383165f908152600a602052604090205460ff16155b15611b1d57600154811115611a735760405162461bcd60e51b815260206004820152602660248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015265040dac2f0a8f60d31b6064820152608401610829565b6001600160a01b0382165f908152600a602052604090205460ff16611ba5576002546001600160a01b0383165f90815260076020526040902054611b61908361279c565b1115611ba55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610829565b600354305f90815260076020526040902054108015908190611bd15750600654600160d81b900460ff16155b8015611bf557506001600160a01b0384165f908152600b602052604090205460ff16155b8015611c1957506001600160a01b0384165f9081526009602052604090205460ff16155b8015611c3d57506001600160a01b0383165f9081526009602052604090205460ff16155b15611c6b576006805460ff60d81b1916600160d81b179055611c5d611fca565b6006805460ff60d81b191690555b6006546001600160a01b0385165f9081526009602052604090205460ff600160d81b909204821615911680611cb757506001600160a01b0384165f9081526009602052604090205460ff165b15611cbf57505f5b6001600160a01b0385165f9081526007602052604090205483811015611cf75760405162461bcd60e51b815260040161082990612756565b5f8215611e31576001600160a01b0386165f908152600b602052604090205460ff168015611d315750600654600160b01b900461ffff1615155b15611d63576006546103e890611d5290600160b01b900461ffff1687612681565b611d5c9190612698565b9050611dc4565b6001600160a01b0387165f908152600b602052604090205460ff168015611d965750600654600160a01b900461ffff1615155b15611dc4576006546103e890611db790600160a01b900461ffff1687612681565b611dc19190612698565b90505b8015611e31576001600160a01b0387165f8181526007602090815260408083208054869003905530808452928190208054860190555184815297849003979192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b6001600160a01b038088165f8181526007602052604080822080548a900390559289168082529083902080548901905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e929089815260200190565b60405180910390a350505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691611efe91906127da565b5f604051808303815f865af19150503d805f8114611f37576040519150601f19603f3d011682016040523d82523d5f602084013e611f3c565b606091505b5091509150818015611f66575080511580611f66575080806020019051810190611f6691906127f5565b611fc35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657248656c7065723a20494e5445524e414c205452414e5346456044820152671497d1905253115160c21b6064820152608401610829565b5050505050565b6003545f611fd9826014612681565b305f908152600760205260409020541115611fff57600354611ffc906014612681565b91505b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061203257612032612742565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061207a5761207a612742565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906120d19086905f90869030904290600401612810565b5f604051808303815f87803b1580156120e8575f80fd5b505af11580156120fa573d5f803e3d5ffd5b5047925050811590506122b3576006545f9060649061212390600160c01b900460ff1684612681565b61212d9190612698565b6006549091505f9060649061214c90600160d01b900460ff1685612681565b6121569190612698565b90505f8161216484866127af565b61216e91906127af565b6006546040519192506001600160a01b03169083905f81818185875af1925050503d805f81146121b9576040519150601f19603f3d011682016040523d82523d5f602084013e6121be565b606091505b50506005546040519197506001600160a01b03169082905f81818185875af1925050503d805f811461220b576040519150601f19603f3d011682016040523d82523d5f602084013e612210565b606091505b50506004546040519197506001600160a01b03169084905f81818185875af1925050503d805f811461225d576040519150601f19603f3d011682016040523d82523d5f602084013e612262565b606091505b50506040805189815260208101859052908101859052606081018390529096507f93efcf28fbf701a930e0ad258987a2e4f08eb3aa99f9c02029e7ba049f69405f9060800160405180910390a15050505b50505050565b5f5b838110156122d35781810151838201526020016122bb565b50505f910152565b602081525f82518060208401526122f98160408501602087016122b9565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114612323575f80fd5b919050565b5f8060408385031215612339575f80fd5b6123428361230d565b946020939093013593505050565b5f805f60608486031215612362575f80fd5b61236b8461230d565b92506123796020850161230d565b9150604084013590509250925092565b5f60208284031215612399575f80fd5b5035919050565b803560ff81168114612323575f80fd5b5f805f606084860312156123c2575f80fd5b6123cb846123a0565b92506123d9602085016123a0565b91506123e7604085016123a0565b90509250925092565b5f8060408385031215612401575f80fd5b61240a836123a0565b9150612418602084016123a0565b90509250929050565b801515811461242e575f80fd5b50565b5f8060408385031215612442575f80fd5b61244b8361230d565b9150602083013561245b81612421565b809150509250929050565b5f60208284031215612476575f80fd5b61247f8261230d565b9392505050565b5f8060408385031215612497575f80fd5b6124a08361230d565b91506124186020840161230d565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124eb576124eb6124ae565b604052919050565b5f67ffffffffffffffff82111561250c5761250c6124ae565b5060051b60200190565b5f82601f830112612525575f80fd5b8135602061253a612535836124f3565b6124c2565b82815260059290921b84018101918181019086841115612558575f80fd5b8286015b84811015612573578035835291830191830161255c565b509695505050505050565b5f806040838503121561258f575f80fd5b823567ffffffffffffffff808211156125a6575f80fd5b818501915085601f8301126125b9575f80fd5b813560206125c9612535836124f3565b82815260059290921b840181019181810190898411156125e7575f80fd5b948201945b8386101561260c576125fd8661230d565b825294820194908201906125ec565b96505086013592505080821115612621575f80fd5b5061262e85828601612516565b9150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761079b5761079b61266d565b5f826126b257634e487b7160e01b5f52601260045260245ffd5b500490565b60ff818116838216019081111561079b5761079b61266d565b602080825260169082015275416464726573732063616e6e6f74206265207a65726f60501b604082015260600190565b5f60208284031215612710575f80fd5b5051919050565b5f805f60608486031215612729575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8082018082111561079b5761079b61266d565b8181038181111561079b5761079b61266d565b5f600182016127d3576127d361266d565b5060010190565b5f82516127eb8184602087016122b9565b9190910192915050565b5f60208284031215612805575f80fd5b815161247f81612421565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561285e5784516001600160a01b031683529383019391830191600101612839565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212209d7efe8925e8262ed085794774ddda0ecfe78f95b9e60a366dc7b0923b97af8a64736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061022b575f3560e01c8063751039fc11610129578063bc37e1a3116100a8578063d85ba0631161006d578063d85ba063146106dd578063dd62ed3e146106fe578063e2f4560514610742578063e710794714610757578063f8b45b0514610776575f80fd5b8063bc37e1a314610661578063c8c8ebe414610669578063cc32d1761461067e578063d201b01e1461069e578063d7c94efd146106bd575f80fd5b806395d89b41116100ee57806395d89b41146105bb5780639a7a23d6146105e5578063a9059cbb14610604578063adfa29e514610623578063bc205ad314610642575f80fd5b8063751039fc146105165780637cb332bb1461052a578063809d458d1461054957806385ecafd7146105685780638da5cb5b1461059f575f80fd5b806349bd5a5e116101b557806366650dae1161017a57806366650dae1461045c5780636a486a8e1461047b57806370a08231146104af578063715018a6146104e357806374010ece146104f7575f80fd5b806349bd5a5e146103ac5780634a62bb65146103df5780634fcd2446146103ff578063590ffdce1461041e5780636402511e1461043d575f80fd5b806321d37e39116101fb57806321d37e391461030857806323b872dd1461033a57806327a14fc214610359578063313ce5671461037a5780633c090c461461038d575f80fd5b806306fdde0314610236578063095ea7b3146102765780631694505e146102a557806318160ddd146102e4575f80fd5b3661023257005b5f80fd5b348015610241575f80fd5b506040805180820190915260068152650a8f0aedee4f60d31b60208201525b60405161026d91906122db565b60405180910390f35b348015610281575f80fd5b50610295610290366004612328565b61078b565b604051901515815260200161026d565b3480156102b0575f80fd5b506102cc737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161026d565b3480156102ef575f80fd5b5067016345785d8a00005b60405190815260200161026d565b348015610313575f80fd5b5060065461032890600160c01b900460ff1681565b60405160ff909116815260200161026d565b348015610345575f80fd5b50610295610354366004612350565b6107a1565b348015610364575f80fd5b50610378610373366004612389565b610855565b005b348015610385575f80fd5b506009610328565b348015610398575f80fd5b506103786103a73660046123b0565b61092d565b3480156103b7575f80fd5b506102cc7f0000000000000000000000007f095edd7745fa3c471736dae4874211dea9ed3581565b3480156103ea575f80fd5b5060065461029590600160e01b900460ff1681565b34801561040a575f80fd5b506103786104193660046123f0565b610a35565b348015610429575f80fd5b50610378610438366004612431565b610ac0565b348015610448575f80fd5b50610378610457366004612389565b610b22565b348015610467575f80fd5b50610378610476366004612431565b610c79565b348015610486575f80fd5b5060065461049c90600160b01b900461ffff1681565b60405161ffff909116815260200161026d565b3480156104ba575f80fd5b506102fa6104c9366004612466565b6001600160a01b03165f9081526007602052604090205490565b3480156104ee575f80fd5b50610378610cdb565b348015610502575f80fd5b50610378610511366004612389565b610d24565b348015610521575f80fd5b50610378610e01565b348015610535575f80fd5b50610378610544366004612466565b610e48565b348015610554575f80fd5b50610378610563366004612466565b610ec8565b348015610573575f80fd5b50610295610582366004612466565b6001600160a01b03165f9081526009602052604090205460ff1690565b3480156105aa575f80fd5b505f546001600160a01b03166102cc565b3480156105c6575f80fd5b506040805180820190915260028152610a8b60f31b6020820152610260565b3480156105f0575f80fd5b506103786105ff366004612431565b610f48565b34801561060f575f80fd5b5061029561061e366004612328565b61102b565b34801561062e575f80fd5b5061037861063d366004612466565b611037565b34801561064d575f80fd5b5061037861065c366004612486565b6110b7565b610378611164565b348015610674575f80fd5b506102fa60015481565b348015610689575f80fd5b5060065461032890600160c81b900460ff1681565b3480156106a9575f80fd5b506103786106b8366004612466565b6112b2565b3480156106c8575f80fd5b5060065461032890600160d01b900460ff1681565b3480156106e8575f80fd5b5060065461049c90600160a01b900461ffff1681565b348015610709575f80fd5b506102fa610718366004612486565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b34801561074d575f80fd5b506102fa60035481565b348015610762575f80fd5b5061037861077136600461257e565b6113c9565b348015610781575f80fd5b506102fa60025481565b5f610797338484611603565b5060015b92915050565b6001600160a01b0383165f9081526008602090815260408083203384529091528120545f19811461083f57828110156108325760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61083f8533858403611603565b61084a858585611726565b506001949350505050565b336108675f546001600160a01b031690565b6001600160a01b03161461088d5760405162461bcd60e51b815260040161082990612638565b633b9aca006103e86108a867016345785d8a00006001612681565b6108b29190612698565b6108bc9190612698565b8110156109195760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d61782077616c6c6574206c6f776572207468616e60448201526420302e312560d81b6064820152608401610829565b61092781633b9aca00612681565b60025550565b3361093f5f546001600160a01b031690565b6001600160a01b0316146109655760405162461bcd60e51b815260040161082990612638565b6006805461ffff60c01b1916600160c01b60ff868116820260ff60c81b191692909217600160c81b86841681029190911760ff60d01b1916600160d01b8685168102919091179485905584048316936109c6939181048216929004166126b7565b6109d091906126b7565b60ff16606414610a305760405162461bcd60e51b815260206004820152602560248201527f446973747269627574696f6e206861766520746f20626520657175616c20746f604482015264203130302560d81b6064820152608401610829565b505050565b33610a475f546001600160a01b031690565b6001600160a01b031614610a6d5760405162461bcd60e51b815260040161082990612638565b6103848260ff161115610a7e575f80fd5b6103848160ff161115610a8f575f80fd5b6006805463ffffffff60a01b191660ff938416600160a01b0261ffff60b01b19161791909216600160b01b02179055565b33610ad25f546001600160a01b031690565b6001600160a01b031614610af85760405162461bcd60e51b815260040161082990612638565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b33610b345f546001600160a01b031690565b6001600160a01b031614610b5a5760405162461bcd60e51b815260040161082990612638565b620186a0610b7167016345785d8a00006001612681565b610b7b9190612698565b811015610be85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527420302e30303125206f662074686520737570706c7960581b6064820152608401610829565b6103e8610bfe67016345785d8a00006005612681565b610c089190612698565b811115610c745760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f7420626520686967686572207468616044820152736e20302e3525206f662074686520737570706c7960601b6064820152608401610829565b600355565b33610c8b5f546001600160a01b031690565b6001600160a01b031614610cb15760405162461bcd60e51b815260040161082990612638565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b33610ced5f546001600160a01b031690565b6001600160a01b031614610d135760405162461bcd60e51b815260040161082990612638565b5f80546001600160a01b0319169055565b33610d365f546001600160a01b031690565b6001600160a01b031614610d5c5760405162461bcd60e51b815260040161082990612638565b633b9aca006103e8610d7767016345785d8a00006001612681565b610d819190612698565b610d8b9190612698565b811015610ded5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d6178207472616e73616374696f6e206c6f776572604482015269207468616e20302e312560b01b6064820152608401610829565b610dfb81633b9aca00612681565b60015550565b33610e135f546001600160a01b031690565b6001600160a01b031614610e395760405162461bcd60e51b815260040161082990612638565b6006805460ff60e01b19169055565b33610e5a5f546001600160a01b031690565b6001600160a01b031614610e805760405162461bcd60e51b815260040161082990612638565b6001600160a01b038116610ea65760405162461bcd60e51b8152600401610829906126d0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b33610eda5f546001600160a01b031690565b6001600160a01b031614610f005760405162461bcd60e51b815260040161082990612638565b6001600160a01b038116610f265760405162461bcd60e51b8152600401610829906126d0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b33610f5a5f546001600160a01b031690565b6001600160a01b031614610f805760405162461bcd60e51b815260040161082990612638565b7f0000000000000000000000007f095edd7745fa3c471736dae4874211dea9ed356001600160a01b0316826001600160a01b0316036110015760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610829565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f610797338484611726565b336110495f546001600160a01b031690565b6001600160a01b03161461106f5760405162461bcd60e51b815260040161082990612638565b6001600160a01b0381166110955760405162461bcd60e51b8152600401610829906126d0565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b336110c95f546001600160a01b031690565b6001600160a01b0316146110ef5760405162461bcd60e51b815260040161082990612638565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611133573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111579190612700565b9050610a30838383611ea3565b336111765f546001600160a01b031690565b6001600160a01b03161461119c5760405162461bcd60e51b815260040161082990612638565b600654600160e81b900460ff16156111e95760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610829565b305f8181526007602052604080822054600654915163f305d71960e01b8152600481019490945260248401526044830182905260648301919091526001600160a01b031660848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990349060c40160606040518083038185885af1158015611275573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061129a9190612717565b50506006805460ff60e81b1916600160e81b17905550565b336112c45f546001600160a01b031690565b6001600160a01b0316146112ea5760405162461bcd60e51b815260040161082990612638565b6001600160a01b0381166113325760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610829565b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f811461137b576040519150601f19603f3d011682016040523d82523d5f602084013e611380565b606091505b50509050806113c55760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b0819985a5b1959607a1b6044820152606401610829565b5050565b336113db5f546001600160a01b031690565b6001600160a01b0316146114015760405162461bcd60e51b815260040161082990612638565b600654600160e81b900460ff161561144e5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610829565b5f5b8251811015610a305781818151811061146b5761146b612742565b602002602001015160075f336001600160a01b03166001600160a01b031681526020019081526020015f205410156114b55760405162461bcd60e51b815260040161082990612756565b8181815181106114c7576114c7612742565b602002602001015160075f8584815181106114e4576114e4612742565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f828254611519919061279c565b9250508190555081818151811061153257611532612742565b602002602001015160075f336001600160a01b03166001600160a01b031681526020019081526020015f205f82825461156b91906127af565b9250508190555082818151811061158457611584612742565b60200260200101516001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8484815181106115d2576115d2612742565b60200260200101516040516115e991815260200190565b60405180910390a3806115fb816127c2565b915050611450565b6001600160a01b0383166116655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610829565b6001600160a01b0382166116c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610829565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661178a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610829565b6001600160a01b0382166117ec5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610829565b5f811161184d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610829565b600654600160e81b900460ff161580156118a157505f546001600160a01b0384811691161480159061188857506001600160a01b0383163014155b80156118a157505f546001600160a01b03838116911614155b156118e45760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610829565b600654600160e01b900460ff1615611ba5575f546001600160a01b0384811691161480159061192057505f546001600160a01b03838116911614155b801561193457506001600160a01b03821615155b801561194b57506001600160a01b03821661dead14155b80156119615750600654600160d81b900460ff16155b15611ba5576001600160a01b0383165f908152600b602052604090205460ff1680156119a557506001600160a01b0382165f908152600a602052604090205460ff16155b15611a7857600154811115611a0a5760405162461bcd60e51b815260206004820152602560248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152640dac2f0a8f60db1b6064820152608401610829565b6002546001600160a01b0383165f90815260076020526040902054611a2f908361279c565b1115611a735760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610829565b611ba5565b6001600160a01b0382165f908152600b602052604090205460ff168015611ab757506001600160a01b0383165f908152600a602052604090205460ff16155b15611b1d57600154811115611a735760405162461bcd60e51b815260206004820152602660248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015265040dac2f0a8f60d31b6064820152608401610829565b6001600160a01b0382165f908152600a602052604090205460ff16611ba5576002546001600160a01b0383165f90815260076020526040902054611b61908361279c565b1115611ba55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610829565b600354305f90815260076020526040902054108015908190611bd15750600654600160d81b900460ff16155b8015611bf557506001600160a01b0384165f908152600b602052604090205460ff16155b8015611c1957506001600160a01b0384165f9081526009602052604090205460ff16155b8015611c3d57506001600160a01b0383165f9081526009602052604090205460ff16155b15611c6b576006805460ff60d81b1916600160d81b179055611c5d611fca565b6006805460ff60d81b191690555b6006546001600160a01b0385165f9081526009602052604090205460ff600160d81b909204821615911680611cb757506001600160a01b0384165f9081526009602052604090205460ff165b15611cbf57505f5b6001600160a01b0385165f9081526007602052604090205483811015611cf75760405162461bcd60e51b815260040161082990612756565b5f8215611e31576001600160a01b0386165f908152600b602052604090205460ff168015611d315750600654600160b01b900461ffff1615155b15611d63576006546103e890611d5290600160b01b900461ffff1687612681565b611d5c9190612698565b9050611dc4565b6001600160a01b0387165f908152600b602052604090205460ff168015611d965750600654600160a01b900461ffff1615155b15611dc4576006546103e890611db790600160a01b900461ffff1687612681565b611dc19190612698565b90505b8015611e31576001600160a01b0387165f8181526007602090815260408083208054869003905530808452928190208054860190555184815297849003979192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b6001600160a01b038088165f8181526007602052604080822080548a900390559289168082529083902080548901905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e929089815260200190565b60405180910390a350505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691611efe91906127da565b5f604051808303815f865af19150503d805f8114611f37576040519150601f19603f3d011682016040523d82523d5f602084013e611f3c565b606091505b5091509150818015611f66575080511580611f66575080806020019051810190611f6691906127f5565b611fc35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657248656c7065723a20494e5445524e414c205452414e5346456044820152671497d1905253115160c21b6064820152608401610829565b5050505050565b6003545f611fd9826014612681565b305f908152600760205260409020541115611fff57600354611ffc906014612681565b91505b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061203257612032612742565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061207a5761207a612742565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906120d19086905f90869030904290600401612810565b5f604051808303815f87803b1580156120e8575f80fd5b505af11580156120fa573d5f803e3d5ffd5b5047925050811590506122b3576006545f9060649061212390600160c01b900460ff1684612681565b61212d9190612698565b6006549091505f9060649061214c90600160d01b900460ff1685612681565b6121569190612698565b90505f8161216484866127af565b61216e91906127af565b6006546040519192506001600160a01b03169083905f81818185875af1925050503d805f81146121b9576040519150601f19603f3d011682016040523d82523d5f602084013e6121be565b606091505b50506005546040519197506001600160a01b03169082905f81818185875af1925050503d805f811461220b576040519150601f19603f3d011682016040523d82523d5f602084013e612210565b606091505b50506004546040519197506001600160a01b03169084905f81818185875af1925050503d805f811461225d576040519150601f19603f3d011682016040523d82523d5f602084013e612262565b606091505b50506040805189815260208101859052908101859052606081018390529096507f93efcf28fbf701a930e0ad258987a2e4f08eb3aa99f9c02029e7ba049f69405f9060800160405180910390a15050505b50505050565b5f5b838110156122d35781810151838201526020016122bb565b50505f910152565b602081525f82518060208401526122f98160408501602087016122b9565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114612323575f80fd5b919050565b5f8060408385031215612339575f80fd5b6123428361230d565b946020939093013593505050565b5f805f60608486031215612362575f80fd5b61236b8461230d565b92506123796020850161230d565b9150604084013590509250925092565b5f60208284031215612399575f80fd5b5035919050565b803560ff81168114612323575f80fd5b5f805f606084860312156123c2575f80fd5b6123cb846123a0565b92506123d9602085016123a0565b91506123e7604085016123a0565b90509250925092565b5f8060408385031215612401575f80fd5b61240a836123a0565b9150612418602084016123a0565b90509250929050565b801515811461242e575f80fd5b50565b5f8060408385031215612442575f80fd5b61244b8361230d565b9150602083013561245b81612421565b809150509250929050565b5f60208284031215612476575f80fd5b61247f8261230d565b9392505050565b5f8060408385031215612497575f80fd5b6124a08361230d565b91506124186020840161230d565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124eb576124eb6124ae565b604052919050565b5f67ffffffffffffffff82111561250c5761250c6124ae565b5060051b60200190565b5f82601f830112612525575f80fd5b8135602061253a612535836124f3565b6124c2565b82815260059290921b84018101918181019086841115612558575f80fd5b8286015b84811015612573578035835291830191830161255c565b509695505050505050565b5f806040838503121561258f575f80fd5b823567ffffffffffffffff808211156125a6575f80fd5b818501915085601f8301126125b9575f80fd5b813560206125c9612535836124f3565b82815260059290921b840181019181810190898411156125e7575f80fd5b948201945b8386101561260c576125fd8661230d565b825294820194908201906125ec565b96505086013592505080821115612621575f80fd5b5061262e85828601612516565b9150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761079b5761079b61266d565b5f826126b257634e487b7160e01b5f52601260045260245ffd5b500490565b60ff818116838216019081111561079b5761079b61266d565b602080825260169082015275416464726573732063616e6e6f74206265207a65726f60501b604082015260600190565b5f60208284031215612710575f80fd5b5051919050565b5f805f60608486031215612729575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8082018082111561079b5761079b61266d565b8181038181111561079b5761079b61266d565b5f600182016127d3576127d361266d565b5060010190565b5f82516127eb8184602087016122b9565b9190910192915050565b5f60208284031215612805575f80fd5b815161247f81612421565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561285e5784516001600160a01b031683529383019391830191600101612839565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212209d7efe8925e8262ed085794774ddda0ecfe78f95b9e60a366dc7b0923b97af8a64736f6c63430008150033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.