ETH Price: $2,137.41 (-10.04%)

Token

Sefkey (SEFK)
 

Overview

Max Total Supply

5,000,000 SEFK

Holders

24

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 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:
SefKey

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-25
*/

/*
    SEFKEY

    Website: https://sefkey.com/
    Twitter: https://twitter.com/SefkeyErc20
    Telegram: https://t.me/SefkeyERC20_Portal

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

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

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

}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

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

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

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

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

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

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            _totalSupply -= amount;
        }

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

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

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

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

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

    function WETH() external pure returns (address);

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

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

contract SefKey is ERC20, Ownable {
    struct Tax {
        uint256 marketingTax;
    }

    uint256 private constant _totalSupply = 5_000_000 * 1e18;

    DexRouter public immutable uniswapRouter;
    address public immutable pairAddress;

    Tax public buyTaxes = Tax(3);
    Tax public sellTaxes = Tax(5);
    Tax public transferTaxes = Tax(3);

    mapping(address => bool) private whitelisted;
    mapping(address => uint256) private _holderLastTransferTimestamp;

    uint256 public swapTokensAtAmount = _totalSupply / 5_000_000;
    bool public swapAndLiquifyEnabled = true;
    bool public isSwapping = false;
    bool public tradingEnabled = false;
    uint256 public startTradingBlock;
    bool public transferDelayEnabled = true;
    bool public launchTax;

    address public marketingWallet = 0x2246964dB19Db2e617944b910Bf0d705Cb4f115C ;
    
    uint256 public maxWalletPercentage = 3;

    event BuyFeesUpdated(uint256 indexed _trFee);
    event SellFeesUpdated(uint256 indexed _trFee);
    event marketingWalletChanged(address indexed _trWallet);
    event SwapThresholdUpdated(uint256 indexed _newThreshold);
    event InternalSwapStatusUpdated(bool indexed _status);
    event Whitelist(address indexed _target, bool indexed _status);
    event MaxWChanged(uint256 percentage);

    constructor() ERC20("Sefkey", "SEFK") {

        uniswapRouter = DexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pairAddress = DexFactory(uniswapRouter.factory()).createPair(
            address(this),
            uniswapRouter.WETH()
        );
        whitelisted[msg.sender] = true;
        whitelisted[address(uniswapRouter)] = true;
        whitelisted[address(this)] = true;       
        _mint(msg.sender, _totalSupply);
        launchTax = false;
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        launchTax=true;
        startTradingBlock = block.number;
    }

    function removeLimits() external onlyOwner{
        maxWalletPercentage =100;
        transferDelayEnabled=false;
        transferTaxes.marketingTax = 0;
    }
    
    function _taxCalc(address _from, address _to, uint256 _amount) internal returns (uint256) {
        if (whitelisted[_from] || whitelisted[_to]) {
            return _amount;
        }

        uint256 totalTax = transferTaxes.marketingTax;
        if (launchTax) {
            if (block.number > startTradingBlock + 35) {
                buyTaxes.marketingTax = 3;
                sellTaxes.marketingTax = 5;
                launchTax = false;

            } else if (block.number <= startTradingBlock + 5) {
                buyTaxes.marketingTax = 20;
                sellTaxes.marketingTax = 20;
            } else if (block.number <= startTradingBlock + 20) {
                buyTaxes.marketingTax = 10;
                sellTaxes.marketingTax = 20;
            } else if (block.number <= startTradingBlock + 35) {
                buyTaxes.marketingTax = 5;
                sellTaxes.marketingTax = 20;
            }
        }
        if (_to == pairAddress) {
            totalTax = sellTaxes.marketingTax;
        } else if (_from == pairAddress) {
            totalTax = buyTaxes.marketingTax;
        }

        uint256 tax = 0;
        if (totalTax > 0) {
            tax = (_amount * totalTax) / 100;
            super._transfer(_from, address(this), tax);
        }
        return (_amount - tax);
    }

    function _transfer(address _from, address _to, uint256 _amount) internal virtual override {

        if (transferDelayEnabled) {
            if (_to != address(pairAddress) && _to != address(pairAddress)) {
                require(_holderLastTransferTimestamp[tx.origin] < block.number, "Only one transfer per block allowed.");
                _holderLastTransferTimestamp[tx.origin] = block.number;
            }
        }   

        require(_from != address(0), "transfer from address zero");
        require(_to != address(0), "transfer to address zero");
        require(_amount > 0, "Transfer amount must be greater than zero");

        uint256 maxWalletAmount = _totalSupply * maxWalletPercentage / 100;

        if (!whitelisted[_from] && !whitelisted[_to] && _to != address(0) && _to != address(this) && _to != pairAddress) {
            require(balanceOf(_to) + _amount <= maxWalletAmount, "Exceeds maximum wallet amount");
        }

        uint256 toTransfer = _taxCalc(_from, _to, _amount);

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
        if (!whitelisted[_from] && !whitelisted[_to]) {
            require(tradingEnabled, "Trading not active");
            if (pairAddress == _to && swapAndLiquifyEnabled && canSwap && !isSwapping) {
                internalSwap();
            }
        }
        super._transfer(_from, _to, toTransfer);
    }

    function internalSwap() internal {
        isSwapping = true;
        uint256 taxAmount = balanceOf(address(this)); 
        if (taxAmount == 0) {
            return;
        }
        swapToETH(balanceOf(address(this)));
       (bool success, ) = marketingWallet.call{value: address(this).balance}("");
        require(success , "Transfer failed.");
        isSwapping = false;
    }  

    function swapToETH(uint256 _amount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();
        _approve(address(this), address(uniswapRouter), _amount);
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"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":true,"internalType":"uint256","name":"_trFee","type":"uint256"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"InternalSwapStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"MaxWChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_trFee","type":"uint256"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_newThreshold","type":"uint256"}],"name":"SwapThresholdUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_target","type":"address"},{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"Whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_trWallet","type":"address"}],"name":"marketingWalletChanged","type":"event"},{"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":"buyTaxes","outputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","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":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxes","outputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract DexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

600360c08190526006819055600560e08190526007556101206040526101008190526008556200003e624c4b406a0422ca8b0a00a425000000620003eb565b600b55600c805462ffffff19166001179055600e8054752246964db19db2e617944b910bf0d705cb4f115c000161ff01600160b01b03199091161790556003600f553480156200008c575f80fd5b50604051806040016040528060068152602001655365666b657960d01b815250604051806040016040528060048152602001635345464b60e01b8152508160039081620000da9190620004aa565b506004620000e98282620004aa565b5050505f620000fd6200031e60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200019e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001c4919062000572565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000212573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000238919062000572565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000283573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a9919062000572565b6001600160a01b0390811660a052335f818152600960205260408082208054600160ff1991821681179092556080519095168352818320805486168217905530835291208054909316179091556200030d906a0422ca8b0a00a42500000062000322565b600e805461ff0019169055620005c7565b3390565b6001600160a01b0382166200037d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f828254620003909190620005a1565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f826200040657634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200043457607f821691505b6020821081036200045357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003e6575f81815260208120601f850160051c81016020861015620004815750805b601f850160051c820191505b81811015620004a2578281556001016200048d565b505050505050565b81516001600160401b03811115620004c657620004c66200040b565b620004de81620004d784546200041f565b8462000459565b602080601f83116001811462000514575f8415620004fc5750858301515b5f19600386901b1c1916600185901b178555620004a2565b5f85815260208120601f198616915b82811015620005445788860151825594840194600190910190840162000523565b50858210156200056257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000583575f80fd5b81516001600160a01b03811681146200059a575f80fd5b9392505050565b80820180821115620005c157634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a051611744620006285f395f818161048701528181610a0f01528181610a4c01528181610ca901528181610e1b01528181610f810152610fc301525f81816103560152818161131e015281816113d5015261141101526117445ff3fe6080604052600436106101bd575f3560e01c806375f0a874116100f2578063a457c2d711610092578063c876d0b911610062578063c876d0b9146104e6578063dd62ed3e146104ff578063e2f456051461051e578063f66895a314610533575f80fd5b8063a457c2d714610457578063a8b0898214610476578063a9059cbb146104a9578063b8863115146104c8575f80fd5b8063864701a5116100cd578063864701a5146103fc5780638a8c523c146104125780638da5cb5b1461042657806395d89b4114610443575f80fd5b806375f0a874146103a457806376be96f3146103c9578063830351ff146103de575f80fd5b80634ada218b1161015d57806370a082311161013857806370a08231146102fb578063715018a61461032f578063735de9f714610345578063751039fc14610390575f80fd5b80634ada218b146102b15780635331803c146102d0578063599ca397146102e6575f80fd5b806323b872dd1161019857806323b872dd1461023f578063313ce5671461025e57806339509351146102795780634a74bb0214610298575f80fd5b806306fdde03146101c8578063095ea7b3146101f257806318160ddd14610221575f80fd5b366101c457005b5f80fd5b3480156101d3575f80fd5b506101dc610549565b6040516101e99190611477565b60405180910390f35b3480156101fd575f80fd5b5061021161020c3660046114d9565b6105d9565b60405190151581526020016101e9565b34801561022c575f80fd5b506002545b6040519081526020016101e9565b34801561024a575f80fd5b50610211610259366004611503565b6105f2565b348015610269575f80fd5b50604051601281526020016101e9565b348015610284575f80fd5b506102116102933660046114d9565b610617565b3480156102a3575f80fd5b50600c546102119060ff1681565b3480156102bc575f80fd5b50600c546102119062010000900460ff1681565b3480156102db575f80fd5b506008546102319081565b3480156102f1575f80fd5b50610231600f5481565b348015610306575f80fd5b50610231610315366004611541565b6001600160a01b03165f9081526020819052604090205490565b34801561033a575f80fd5b50610343610638565b005b348015610350575f80fd5b506103787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e9565b34801561039b575f80fd5b506103436106b4565b3480156103af575f80fd5b50600e54610378906201000090046001600160a01b031681565b3480156103d4575f80fd5b50610231600d5481565b3480156103e9575f80fd5b50600e5461021190610100900460ff1681565b348015610407575f80fd5b506006546102319081565b34801561041d575f80fd5b506103436106f3565b348015610431575f80fd5b506005546001600160a01b0316610378565b34801561044e575f80fd5b506101dc61079c565b348015610462575f80fd5b506102116104713660046114d9565b6107ab565b348015610481575f80fd5b506103787f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b4575f80fd5b506102116104c33660046114d9565b610830565b3480156104d3575f80fd5b50600c5461021190610100900460ff1681565b3480156104f1575f80fd5b50600e546102119060ff1681565b34801561050a575f80fd5b5061023161051936600461155c565b61083d565b348015610529575f80fd5b50610231600b5481565b34801561053e575f80fd5b506007546102319081565b60606003805461055890611593565b80601f016020809104026020016040519081016040528092919081815260200182805461058490611593565b80156105cf5780601f106105a6576101008083540402835291602001916105cf565b820191905f5260205f20905b8154815290600101906020018083116105b257829003601f168201915b5050505050905090565b5f336105e6818585610867565b60019150505b92915050565b5f336105ff85828561098a565b61060a858585610a02565b60019150505b9392505050565b5f336105e6818585610629838361083d565b61063391906115df565b610867565b6005546001600160a01b0316331461066b5760405162461bcd60e51b8152600401610662906115f2565b60405180910390fd5b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146106de5760405162461bcd60e51b8152600401610662906115f2565b6064600f55600e805460ff191690555f600855565b6005546001600160a01b0316331461071d5760405162461bcd60e51b8152600401610662906115f2565b600c5462010000900460ff16156107765760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610662565b600c805462ff0000191662010000179055600e805461ff00191661010017905543600d55565b60606004805461055890611593565b5f33816107b8828661083d565b9050838110156108185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610662565b6108258286868403610867565b506001949350505050565b5f336105e6818585610a02565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610662565b6001600160a01b03821661092a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610662565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610995848461083d565b90505f1981146109fc57818110156109ef5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610662565b6109fc8484848403610867565b50505050565b600e5460ff1615610b01577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015610a8157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15610b0157325f908152600a60205260409020544311610aef5760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79206f6e65207472616e736665722070657220626c6f636b20616c6c6f6044820152633bb2b21760e11b6064820152608401610662565b325f908152600a602052604090204390555b6001600160a01b038316610b575760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f0000000000006044820152606401610662565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f00000000000000006044820152606401610662565b5f8111610c0e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610662565b5f6064600f546a0422ca8b0a00a425000000610c2a9190611627565b610c34919061163e565b6001600160a01b0385165f9081526009602052604090205490915060ff16158015610c7757506001600160a01b0383165f9081526009602052604090205460ff16155b8015610c8b57506001600160a01b03831615155b8015610ca057506001600160a01b0383163014155b8015610cde57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15610d5b578082610d03856001600160a01b03165f9081526020819052604090205490565b610d0d91906115df565b1115610d5b5760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e740000006044820152606401610662565b5f610d67858585610e8f565b600b54305f90815260208181526040808320546001600160a01b038b16845260099092529091205492935010159060ff16158015610dbd57506001600160a01b0385165f9081526009602052604090205460ff16155b15610e7c57600c5462010000900460ff16610e0f5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610662565b846001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148015610e525750600c5460ff165b8015610e5b5750805b8015610e6f5750600c54610100900460ff16155b15610e7c57610e7c61103d565b610e87868684611127565b505050505050565b6001600160a01b0383165f9081526009602052604081205460ff1680610ecc57506001600160a01b0383165f9081526009602052604090205460ff165b15610ed8575080610610565b600854600e54610100900460ff1615610f7f57600d54610ef99060236115df565b431115610f1a5760036006556005600755600e805461ff0019169055610f7f565b600d54610f289060056115df565b4311610f3d5760146006819055600755610f7f565b600d54610f4b9060146115df565b4311610f6057600a6006556014600755610f7f565b600d54610f6e9060236115df565b4311610f7f57600560065560146007555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610fc15750600754610fff565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610fff57506006545b5f81156110295760646110128386611627565b61101c919061163e565b9050611029863083611127565b611033818561165d565b9695505050505050565b600c805461ff001916610100179055305f908152602081905260408120549050805f036110675750565b305f9081526020819052604090205461107f906112c9565b600e546040515f916201000090046001600160a01b03169047908381818185875af1925050503d805f81146110cf576040519150601f19603f3d011682016040523d82523d5f602084013e6110d4565b606091505b50509050806111185760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610662565b5050600c805461ff0019169055565b6001600160a01b03831661118b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610662565b6001600160a01b0382166111ed5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610662565b6001600160a01b0383165f90815260208190526040902054818110156112645760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610662565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109fc565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106112fc576112fc611670565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611378573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139c9190611684565b816001815181106113af576113af611670565b60200260200101906001600160a01b031690816001600160a01b0316815250506113fa307f000000000000000000000000000000000000000000000000000000000000000084610867565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061144e9085905f9086903090429060040161169f565b5f604051808303815f87803b158015611465575f80fd5b505af1158015610e87573d5f803e3d5ffd5b5f6020808352835180828501525f5b818110156114a257858101830151858201604001528201611486565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114d6575f80fd5b50565b5f80604083850312156114ea575f80fd5b82356114f5816114c2565b946020939093013593505050565b5f805f60608486031215611515575f80fd5b8335611520816114c2565b92506020840135611530816114c2565b929592945050506040919091013590565b5f60208284031215611551575f80fd5b8135610610816114c2565b5f806040838503121561156d575f80fd5b8235611578816114c2565b91506020830135611588816114c2565b809150509250929050565b600181811c908216806115a757607f821691505b6020821081036115c557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105ec576105ec6115cb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80820281158282048414176105ec576105ec6115cb565b5f8261165857634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156105ec576105ec6115cb565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611694575f80fd5b8151610610816114c2565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156116ed5784516001600160a01b0316835293830193918301916001016116c8565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208d129c753f039328c5832494c442ac795d3cc997878ee09e40f79f254174692f64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101bd575f3560e01c806375f0a874116100f2578063a457c2d711610092578063c876d0b911610062578063c876d0b9146104e6578063dd62ed3e146104ff578063e2f456051461051e578063f66895a314610533575f80fd5b8063a457c2d714610457578063a8b0898214610476578063a9059cbb146104a9578063b8863115146104c8575f80fd5b8063864701a5116100cd578063864701a5146103fc5780638a8c523c146104125780638da5cb5b1461042657806395d89b4114610443575f80fd5b806375f0a874146103a457806376be96f3146103c9578063830351ff146103de575f80fd5b80634ada218b1161015d57806370a082311161013857806370a08231146102fb578063715018a61461032f578063735de9f714610345578063751039fc14610390575f80fd5b80634ada218b146102b15780635331803c146102d0578063599ca397146102e6575f80fd5b806323b872dd1161019857806323b872dd1461023f578063313ce5671461025e57806339509351146102795780634a74bb0214610298575f80fd5b806306fdde03146101c8578063095ea7b3146101f257806318160ddd14610221575f80fd5b366101c457005b5f80fd5b3480156101d3575f80fd5b506101dc610549565b6040516101e99190611477565b60405180910390f35b3480156101fd575f80fd5b5061021161020c3660046114d9565b6105d9565b60405190151581526020016101e9565b34801561022c575f80fd5b506002545b6040519081526020016101e9565b34801561024a575f80fd5b50610211610259366004611503565b6105f2565b348015610269575f80fd5b50604051601281526020016101e9565b348015610284575f80fd5b506102116102933660046114d9565b610617565b3480156102a3575f80fd5b50600c546102119060ff1681565b3480156102bc575f80fd5b50600c546102119062010000900460ff1681565b3480156102db575f80fd5b506008546102319081565b3480156102f1575f80fd5b50610231600f5481565b348015610306575f80fd5b50610231610315366004611541565b6001600160a01b03165f9081526020819052604090205490565b34801561033a575f80fd5b50610343610638565b005b348015610350575f80fd5b506103787f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016101e9565b34801561039b575f80fd5b506103436106b4565b3480156103af575f80fd5b50600e54610378906201000090046001600160a01b031681565b3480156103d4575f80fd5b50610231600d5481565b3480156103e9575f80fd5b50600e5461021190610100900460ff1681565b348015610407575f80fd5b506006546102319081565b34801561041d575f80fd5b506103436106f3565b348015610431575f80fd5b506005546001600160a01b0316610378565b34801561044e575f80fd5b506101dc61079c565b348015610462575f80fd5b506102116104713660046114d9565b6107ab565b348015610481575f80fd5b506103787f00000000000000000000000043ef46f87888f27f63781f3e7aca6e930ff208f681565b3480156104b4575f80fd5b506102116104c33660046114d9565b610830565b3480156104d3575f80fd5b50600c5461021190610100900460ff1681565b3480156104f1575f80fd5b50600e546102119060ff1681565b34801561050a575f80fd5b5061023161051936600461155c565b61083d565b348015610529575f80fd5b50610231600b5481565b34801561053e575f80fd5b506007546102319081565b60606003805461055890611593565b80601f016020809104026020016040519081016040528092919081815260200182805461058490611593565b80156105cf5780601f106105a6576101008083540402835291602001916105cf565b820191905f5260205f20905b8154815290600101906020018083116105b257829003601f168201915b5050505050905090565b5f336105e6818585610867565b60019150505b92915050565b5f336105ff85828561098a565b61060a858585610a02565b60019150505b9392505050565b5f336105e6818585610629838361083d565b61063391906115df565b610867565b6005546001600160a01b0316331461066b5760405162461bcd60e51b8152600401610662906115f2565b60405180910390fd5b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146106de5760405162461bcd60e51b8152600401610662906115f2565b6064600f55600e805460ff191690555f600855565b6005546001600160a01b0316331461071d5760405162461bcd60e51b8152600401610662906115f2565b600c5462010000900460ff16156107765760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610662565b600c805462ff0000191662010000179055600e805461ff00191661010017905543600d55565b60606004805461055890611593565b5f33816107b8828661083d565b9050838110156108185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610662565b6108258286868403610867565b506001949350505050565b5f336105e6818585610a02565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610662565b6001600160a01b03821661092a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610662565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610995848461083d565b90505f1981146109fc57818110156109ef5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610662565b6109fc8484848403610867565b50505050565b600e5460ff1615610b01577f00000000000000000000000043ef46f87888f27f63781f3e7aca6e930ff208f66001600160a01b0316826001600160a01b031614158015610a8157507f00000000000000000000000043ef46f87888f27f63781f3e7aca6e930ff208f66001600160a01b0316826001600160a01b031614155b15610b0157325f908152600a60205260409020544311610aef5760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79206f6e65207472616e736665722070657220626c6f636b20616c6c6f6044820152633bb2b21760e11b6064820152608401610662565b325f908152600a602052604090204390555b6001600160a01b038316610b575760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f0000000000006044820152606401610662565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f00000000000000006044820152606401610662565b5f8111610c0e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610662565b5f6064600f546a0422ca8b0a00a425000000610c2a9190611627565b610c34919061163e565b6001600160a01b0385165f9081526009602052604090205490915060ff16158015610c7757506001600160a01b0383165f9081526009602052604090205460ff16155b8015610c8b57506001600160a01b03831615155b8015610ca057506001600160a01b0383163014155b8015610cde57507f00000000000000000000000043ef46f87888f27f63781f3e7aca6e930ff208f66001600160a01b0316836001600160a01b031614155b15610d5b578082610d03856001600160a01b03165f9081526020819052604090205490565b610d0d91906115df565b1115610d5b5760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e740000006044820152606401610662565b5f610d67858585610e8f565b600b54305f90815260208181526040808320546001600160a01b038b16845260099092529091205492935010159060ff16158015610dbd57506001600160a01b0385165f9081526009602052604090205460ff16155b15610e7c57600c5462010000900460ff16610e0f5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610662565b846001600160a01b03167f00000000000000000000000043ef46f87888f27f63781f3e7aca6e930ff208f66001600160a01b0316148015610e525750600c5460ff165b8015610e5b5750805b8015610e6f5750600c54610100900460ff16155b15610e7c57610e7c61103d565b610e87868684611127565b505050505050565b6001600160a01b0383165f9081526009602052604081205460ff1680610ecc57506001600160a01b0383165f9081526009602052604090205460ff165b15610ed8575080610610565b600854600e54610100900460ff1615610f7f57600d54610ef99060236115df565b431115610f1a5760036006556005600755600e805461ff0019169055610f7f565b600d54610f289060056115df565b4311610f3d5760146006819055600755610f7f565b600d54610f4b9060146115df565b4311610f6057600a6006556014600755610f7f565b600d54610f6e9060236115df565b4311610f7f57600560065560146007555b7f00000000000000000000000043ef46f87888f27f63781f3e7aca6e930ff208f66001600160a01b0316846001600160a01b031603610fc15750600754610fff565b7f00000000000000000000000043ef46f87888f27f63781f3e7aca6e930ff208f66001600160a01b0316856001600160a01b031603610fff57506006545b5f81156110295760646110128386611627565b61101c919061163e565b9050611029863083611127565b611033818561165d565b9695505050505050565b600c805461ff001916610100179055305f908152602081905260408120549050805f036110675750565b305f9081526020819052604090205461107f906112c9565b600e546040515f916201000090046001600160a01b03169047908381818185875af1925050503d805f81146110cf576040519150601f19603f3d011682016040523d82523d5f602084013e6110d4565b606091505b50509050806111185760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610662565b5050600c805461ff0019169055565b6001600160a01b03831661118b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610662565b6001600160a01b0382166111ed5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610662565b6001600160a01b0383165f90815260208190526040902054818110156112645760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610662565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109fc565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106112fc576112fc611670565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611378573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139c9190611684565b816001815181106113af576113af611670565b60200260200101906001600160a01b031690816001600160a01b0316815250506113fa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610867565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061144e9085905f9086903090429060040161169f565b5f604051808303815f87803b158015611465575f80fd5b505af1158015610e87573d5f803e3d5ffd5b5f6020808352835180828501525f5b818110156114a257858101830151858201604001528201611486565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114d6575f80fd5b50565b5f80604083850312156114ea575f80fd5b82356114f5816114c2565b946020939093013593505050565b5f805f60608486031215611515575f80fd5b8335611520816114c2565b92506020840135611530816114c2565b929592945050506040919091013590565b5f60208284031215611551575f80fd5b8135610610816114c2565b5f806040838503121561156d575f80fd5b8235611578816114c2565b91506020830135611588816114c2565b809150509250929050565b600181811c908216806115a757607f821691505b6020821081036115c557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105ec576105ec6115cb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80820281158282048414176105ec576105ec6115cb565b5f8261165857634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156105ec576105ec6115cb565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611694575f80fd5b8151610610816114c2565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156116ed5784516001600160a01b0316835293830193918301916001016116c8565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208d129c753f039328c5832494c442ac795d3cc997878ee09e40f79f254174692f64736f6c63430008140033

Deployed Bytecode Sourcemap

9097:5915:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3491:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4423:201;;;;;;;;;;-1:-1:-1;4423:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4423:201:0;1023:187:1;3812:108:0;;;;;;;;;;-1:-1:-1;3900:12:0;;3812:108;;;1361:25:1;;;1349:2;1334:18;3812:108:0;1215:177:1;4632:261:0;;;;;;;;;;-1:-1:-1;4632:261:0;;;;;:::i;:::-;;:::i;3711:93::-;;;;;;;;;;-1:-1:-1;3711:93:0;;3794:2;2000:36:1;;1988:2;1973:18;3711:93:0;1858:184:1;4901:238:0;;;;;;;;;;-1:-1:-1;4901:238:0;;;;;:::i;:::-;;:::i;9657:40::-;;;;;;;;;;-1:-1:-1;9657:40:0;;;;;;;;9741:34;;;;;;;;;;-1:-1:-1;9741:34:0;;;;;;;;;;;9424:33;;;;;;;;;;-1:-1:-1;9424:33:0;;;;;;9986:38;;;;;;;;;;;;;;;;3928:127;;;;;;;;;;-1:-1:-1;3928:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4029:18:0;4002:7;4029:18;;;;;;;;;;;;3928:127;2030:148;;;;;;;;;;;;;:::i;:::-;;9261:40;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2480:32:1;;;2462:51;;2450:2;2435:18;9261:40:0;2299:220:1;11158:163:0;;;;;;;;;;;;;:::i;9897:75::-;;;;;;;;;;-1:-1:-1;9897:75:0;;;;;;;-1:-1:-1;;;;;9897:75:0;;;9782:32;;;;;;;;;;;;;;;;9867:21;;;;;;;;;;-1:-1:-1;9867:21:0;;;;;;;;;;;9353:28;;;;;;;;;;-1:-1:-1;9353:28:0;;;;;;10933:217;;;;;;;;;;;;;:::i;1816:79::-;;;;;;;;;;-1:-1:-1;1881:6:0;;-1:-1:-1;;;;;1881:6:0;1816:79;;3599:104;;;;;;;;;;;;;:::i;5147:436::-;;;;;;;;;;-1:-1:-1;5147:436:0;;;;;:::i;:::-;;:::i;9308:36::-;;;;;;;;;;;;;;;4063:193;;;;;;;;;;-1:-1:-1;4063:193:0;;;;;:::i;:::-;;:::i;9704:30::-;;;;;;;;;;-1:-1:-1;9704:30:0;;;;;;;;;;;9821:39;;;;;;;;;;-1:-1:-1;9821:39:0;;;;;;;;4264:151;;;;;;;;;;-1:-1:-1;4264:151:0;;;;;:::i;:::-;;:::i;9590:60::-;;;;;;;;;;;;;;;;9388:29;;;;;;;;;;-1:-1:-1;9388:29:0;;;;;;3491:100;3545:13;3578:5;3571:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3491:100;:::o;4423:201::-;4506:4;328:10;4562:32;328:10;4578:7;4587:6;4562:8;:32::i;:::-;4612:4;4605:11;;;4423:201;;;;;:::o;4632:261::-;4729:4;328:10;4787:38;4803:4;328:10;4818:6;4787:15;:38::i;:::-;4836:27;4846:4;4852:2;4856:6;4836:9;:27::i;:::-;4881:4;4874:11;;;4632:261;;;;;;:::o;4901:238::-;4989:4;328:10;5045:64;328:10;5061:7;5098:10;5070:25;328:10;5061:7;5070:9;:25::i;:::-;:38;;;;:::i;:::-;5045:8;:64::i;2030:148::-;1943:6;;-1:-1:-1;;;;;1943:6:0;328:10;1943:22;1935:67;;;;-1:-1:-1;;;1935:67:0;;;;;;;:::i;:::-;;;;;;;;;2121:6:::1;::::0;2100:40:::1;::::0;2137:1:::1;::::0;-1:-1:-1;;;;;2121:6:0::1;::::0;2100:40:::1;::::0;2137:1;;2100:40:::1;2151:6;:19:::0;;-1:-1:-1;;;;;;2151:19:0::1;::::0;;2030:148::o;11158:163::-;1943:6;;-1:-1:-1;;;;;1943:6:0;328:10;1943:22;1935:67;;;;-1:-1:-1;;;1935:67:0;;;;;;;:::i;:::-;11232:3:::1;11211:19;:24:::0;11246:20:::1;:26:::0;;-1:-1:-1;;11246:26:0::1;::::0;;11267:5:::1;11283:13;:30:::0;11158:163::o;10933:217::-;1943:6;;-1:-1:-1;;;;;1943:6:0;328:10;1943:22;1935:67;;;;-1:-1:-1;;;1935:67:0;;;;;;;:::i;:::-;10997:14:::1;::::0;;;::::1;;;10996:15;10988:54;;;::::0;-1:-1:-1;;;10988:54:0;;4335:2:1;10988:54:0::1;::::0;::::1;4317:21:1::0;4374:2;4354:18;;;4347:30;4413:28;4393:18;;;4386:56;4459:18;;10988:54:0::1;4133:350:1::0;10988:54:0::1;11053:14;:21:::0;;-1:-1:-1;;11053:21:0::1;::::0;::::1;::::0;;11085:9:::1;:14:::0;;-1:-1:-1;;11085:14:0::1;11053:21;11085:14;::::0;;11130:12:::1;11110:17;:32:::0;10933:217::o;3599:104::-;3655:13;3688:7;3681:14;;;;;:::i;5147:436::-;5240:4;328:10;5240:4;5323:25;328:10;5340:7;5323:9;:25::i;:::-;5296:52;;5387:15;5367:16;:35;;5359:85;;;;-1:-1:-1;;;5359:85:0;;4690:2:1;5359:85:0;;;4672:21:1;4729:2;4709:18;;;4702:30;4768:34;4748:18;;;4741:62;-1:-1:-1;;;4819:18:1;;;4812:35;4864:19;;5359:85:0;4488:401:1;5359:85:0;5480:60;5489:5;5496:7;5524:15;5505:16;:34;5480:8;:60::i;:::-;-1:-1:-1;5571:4:0;;5147:436;-1:-1:-1;;;;5147:436:0:o;4063:193::-;4142:4;328:10;4198:28;328:10;4215:2;4219:6;4198:9;:28::i;4264:151::-;-1:-1:-1;;;;;4380:18:0;;;4353:7;4380:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4264:151::o;7286:346::-;-1:-1:-1;;;;;7388:19:0;;7380:68;;;;-1:-1:-1;;;7380:68:0;;5096:2:1;7380:68:0;;;5078:21:1;5135:2;5115:18;;;5108:30;5174:34;5154:18;;;5147:62;-1:-1:-1;;;5225:18:1;;;5218:34;5269:19;;7380:68:0;4894:400:1;7380:68:0;-1:-1:-1;;;;;7467:21:0;;7459:68;;;;-1:-1:-1;;;7459:68:0;;5501:2:1;7459:68:0;;;5483:21:1;5540:2;5520:18;;;5513:30;5579:34;5559:18;;;5552:62;-1:-1:-1;;;5630:18:1;;;5623:32;5672:19;;7459:68:0;5299:398:1;7459:68:0;-1:-1:-1;;;;;7540:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7592:32;;1361:25:1;;;7592:32:0;;1334:18:1;7592:32:0;;;;;;;7286:346;;;:::o;7640:419::-;7741:24;7768:25;7778:5;7785:7;7768:9;:25::i;:::-;7741:52;;-1:-1:-1;;7808:16:0;:37;7804:248;;7890:6;7870:16;:26;;7862:68;;;;-1:-1:-1;;;7862:68:0;;5904:2:1;7862:68:0;;;5886:21:1;5943:2;5923:18;;;5916:30;5982:31;5962:18;;;5955:59;6031:18;;7862:68:0;5702:353:1;7862:68:0;7974:51;7983:5;7990:7;8018:6;7999:16;:25;7974:8;:51::i;:::-;7730:329;7640:419;;;:::o;12688:1421::-;12795:20;;;;12791:327;;;12851:11;-1:-1:-1;;;;;12836:27:0;:3;-1:-1:-1;;;;;12836:27:0;;;:58;;;;;12882:11;-1:-1:-1;;;;;12867:27:0;:3;-1:-1:-1;;;;;12867:27:0;;;12836:58;12832:275;;;12952:9;12923:39;;;;:28;:39;;;;;;12965:12;-1:-1:-1;12915:103:0;;;;-1:-1:-1;;;12915:103:0;;6262:2:1;12915:103:0;;;6244:21:1;6301:2;6281:18;;;6274:30;6340:34;6320:18;;;6313:62;-1:-1:-1;;;6391:18:1;;;6384:34;6435:19;;12915:103:0;6060:400:1;12915:103:0;13066:9;13037:39;;;;:28;:39;;;;;13079:12;13037:54;;12832:275;-1:-1:-1;;;;;13141:19:0;;13133:58;;;;-1:-1:-1;;;13133:58:0;;6667:2:1;13133:58:0;;;6649:21:1;6706:2;6686:18;;;6679:30;6745:28;6725:18;;;6718:56;6791:18;;13133:58:0;6465:350:1;13133:58:0;-1:-1:-1;;;;;13210:17:0;;13202:54;;;;-1:-1:-1;;;13202:54:0;;7022:2:1;13202:54:0;;;7004:21:1;7061:2;7041:18;;;7034:30;7100:26;7080:18;;;7073:54;7144:18;;13202:54:0;6820:348:1;13202:54:0;13285:1;13275:7;:11;13267:65;;;;-1:-1:-1;;;13267:65:0;;7375:2:1;13267:65:0;;;7357:21:1;7414:2;7394:18;;;7387:30;7453:34;7433:18;;;7426:62;-1:-1:-1;;;7504:18:1;;;7497:39;7553:19;;13267:65:0;7173:405:1;13267:65:0;13345:23;13408:3;13386:19;;9236:16;13371:34;;;;:::i;:::-;:40;;;;:::i;:::-;-1:-1:-1;;;;;13429:18:0;;;;;;:11;:18;;;;;;13345:66;;-1:-1:-1;13429:18:0;;13428:19;:40;;;;-1:-1:-1;;;;;;13452:16:0;;;;;;:11;:16;;;;;;;;13451:17;13428:40;:61;;;;-1:-1:-1;;;;;;13472:17:0;;;;13428:61;:85;;;;-1:-1:-1;;;;;;13493:20:0;;13508:4;13493:20;;13428:85;:107;;;;;13524:11;-1:-1:-1;;;;;13517:18:0;:3;-1:-1:-1;;;;;13517:18:0;;;13428:107;13424:225;;;13588:15;13577:7;13560:14;13570:3;-1:-1:-1;;;;;4029:18:0;4002:7;4029:18;;;;;;;;;;;;3928:127;13560:14;:24;;;;:::i;:::-;:43;;13552:85;;;;-1:-1:-1;;;13552:85:0;;8180:2:1;13552:85:0;;;8162:21:1;8219:2;8199:18;;;8192:30;8258:31;8238:18;;;8231:59;8307:18;;13552:85:0;7978:353:1;13552:85:0;13661:18;13682:29;13691:5;13698:3;13703:7;13682:8;:29::i;:::-;13767:18;;13757:4;13724:12;4029:18;;;;;;;;;;;;-1:-1:-1;;;;;13801:18:0;;;;:11;:18;;;;;;;13661:50;;-1:-1:-1;;13739:46:0;;13801:18;;13800:19;:40;;;;-1:-1:-1;;;;;;13824:16:0;;;;;;:11;:16;;;;;;;;13823:17;13800:40;13796:256;;;13865:14;;;;;;;13857:45;;;;-1:-1:-1;;;13857:45:0;;8538:2:1;13857:45:0;;;8520:21:1;8577:2;8557:18;;;8550:30;-1:-1:-1;;;8596:18:1;;;8589:48;8654:18;;13857:45:0;8336:342:1;13857:45:0;13936:3;-1:-1:-1;;;;;13921:18:0;:11;-1:-1:-1;;;;;13921:18:0;;:43;;;;-1:-1:-1;13943:21:0;;;;13921:43;:54;;;;;13968:7;13921:54;:69;;;;-1:-1:-1;13980:10:0;;;;;;;13979:11;13921:69;13917:124;;;14011:14;:12;:14::i;:::-;14062:39;14078:5;14085:3;14090:10;14062:15;:39::i;:::-;12778:1331;;;12688:1421;;;:::o;11333:1347::-;-1:-1:-1;;;;;11438:18:0;;11414:7;11438:18;;;:11;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;11460:16:0;;;;;;:11;:16;;;;;;;;11438:38;11434:85;;;-1:-1:-1;11500:7:0;11493:14;;11434:85;11550:13;:26;11591:9;;;;;;;11587:696;;;11636:17;;:22;;11656:2;11636:22;:::i;:::-;11621:12;:37;11617:655;;;11703:1;11679:8;:25;11748:1;11723:9;:26;11768:9;:17;;-1:-1:-1;;11768:17:0;;;11617:655;;;11829:17;;:21;;11849:1;11829:21;:::i;:::-;11813:12;:37;11809:463;;11895:2;11871:8;:26;;;11916:9;:27;11809:463;;;11985:17;;:22;;12005:2;11985:22;:::i;:::-;11969:12;:38;11965:307;;12052:2;12028:8;:26;12098:2;12073:9;:27;11965:307;;;12142:17;;:22;;12162:2;12142:22;:::i;:::-;12126:12;:38;12122:150;;12209:1;12185:8;:25;12254:2;12229:9;:27;12122:150;12304:11;-1:-1:-1;;;;;12297:18:0;:3;-1:-1:-1;;;;;12297:18:0;;12293:175;;-1:-1:-1;12343:9:0;:22;12293:175;;;12396:11;-1:-1:-1;;;;;12387:20:0;:5;-1:-1:-1;;;;;12387:20:0;;12383:85;;-1:-1:-1;12435:8:0;:21;12383:85;12480:11;12510:12;;12506:134;;12568:3;12546:18;12556:8;12546:7;:18;:::i;:::-;12545:26;;;;:::i;:::-;12539:32;;12586:42;12602:5;12617:4;12624:3;12586:15;:42::i;:::-;12658:13;12668:3;12658:7;:13;:::i;:::-;12650:22;11333:1347;-1:-1:-1;;;;;;11333:1347:0:o;14117:394::-;14161:10;:17;;-1:-1:-1;;14161:17:0;;;;;14227:4;-1:-1:-1;4029:18:0;;;;;;;;;;;14189:44;;14249:9;14262:1;14249:14;14245:53;;14280:7;14117:394::o;14245:53::-;14336:4;4002:7;4029:18;;;;;;;;;;;14308:35;;:9;:35::i;:::-;14372:15;;:54;;14354:12;;14372:15;;;-1:-1:-1;;;;;14372:15:0;;14400:21;;14354:12;14372:54;14354:12;14372:54;14400:21;14372:15;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14353:73;;;14445:7;14437:37;;;;-1:-1:-1;;;14437:37:0;;9228:2:1;14437:37:0;;;9210:21:1;9267:2;9247:18;;;9240:30;-1:-1:-1;;;9286:18:1;;;9279:46;9342:18;;14437:37:0;9026:340:1;14437:37:0;-1:-1:-1;;14485:10:0;:18;;-1:-1:-1;;14485:18:0;;;14117:394::o;5591:641::-;-1:-1:-1;;;;;5688:18:0;;5680:68;;;;-1:-1:-1;;;5680:68:0;;9573:2:1;5680:68:0;;;9555:21:1;9612:2;9592:18;;;9585:30;9651:34;9631:18;;;9624:62;-1:-1:-1;;;9702:18:1;;;9695:35;9747:19;;5680:68:0;9371:401:1;5680:68:0;-1:-1:-1;;;;;5767:16:0;;5759:64;;;;-1:-1:-1;;;5759:64:0;;9979:2:1;5759:64:0;;;9961:21:1;10018:2;9998:18;;;9991:30;10057:34;10037:18;;;10030:62;-1:-1:-1;;;10108:18:1;;;10101:33;10151:19;;5759:64:0;9777:399:1;5759:64:0;-1:-1:-1;;;;;5909:15:0;;5887:19;5909:15;;;;;;;;;;;5943:21;;;;5935:72;;;;-1:-1:-1;;;5935:72:0;;10383:2:1;5935:72:0;;;10365:21:1;10422:2;10402:18;;;10395:30;10461:34;10441:18;;;10434:62;-1:-1:-1;;;10512:18:1;;;10505:36;10558:19;;5935:72:0;10181:402:1;5935:72:0;-1:-1:-1;;;;;6043:15:0;;;:9;:15;;;;;;;;;;;6061:20;;;6043:38;;6096:13;;;;;;;;;;:23;;;;;;6148:26;;1361:25:1;;;6096:13:0;;6148:26;;1334:18:1;6148:26:0;;;;;;;6187:37;8067:91;14521:447;14601:16;;;14615:1;14601:16;;;;;;;;14577:21;;14601:16;;;;;;;;;;-1:-1:-1;14601:16:0;14577:40;;14646:4;14628;14633:1;14628:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;14628:23:0;;;-1:-1:-1;;;;;14628:23:0;;;;;14672:13;-1:-1:-1;;;;;14672:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14662:4;14667:1;14662:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;14662:30:0;;;-1:-1:-1;;;;;14662:30:0;;;;;14703:56;14720:4;14735:13;14751:7;14703:8;:56::i;:::-;14770:190;;-1:-1:-1;;;14770:190:0;;-1:-1:-1;;;;;14770:13:0;:64;;;;:190;;14849:7;;14871:1;;14887:4;;14914;;14934:15;;14770:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2047:247::-;2106:6;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;2732:388::-;2800:6;2808;2861:2;2849:9;2840:7;2836:23;2832:32;2829:52;;;2877:1;2874;2867:12;2829:52;2916:9;2903:23;2935:31;2960:5;2935:31;:::i;:::-;2985:5;-1:-1:-1;3042:2:1;3027:18;;3014:32;3055:33;3014:32;3055:33;:::i;:::-;3107:7;3097:17;;;2732:388;;;;;:::o;3125:380::-;3204:1;3200:12;;;;3247;;;3268:61;;3322:4;3314:6;3310:17;3300:27;;3268:61;3375:2;3367:6;3364:14;3344:18;3341:38;3338:161;;3421:10;3416:3;3412:20;3409:1;3402:31;3456:4;3453:1;3446:15;3484:4;3481:1;3474:15;3338:161;;3125:380;;;:::o;3510:127::-;3571:10;3566:3;3562:20;3559:1;3552:31;3602:4;3599:1;3592:15;3626:4;3623:1;3616:15;3642:125;3707:9;;;3728:10;;;3725:36;;;3741:18;;:::i;3772:356::-;3974:2;3956:21;;;3993:18;;;3986:30;4052:34;4047:2;4032:18;;4025:62;4119:2;4104:18;;3772:356::o;7583:168::-;7656:9;;;7687;;7704:15;;;7698:22;;7684:37;7674:71;;7725:18;;:::i;7756:217::-;7796:1;7822;7812:132;;7866:10;7861:3;7857:20;7854:1;7847:31;7901:4;7898:1;7891:15;7929:4;7926:1;7919:15;7812:132;-1:-1:-1;7958:9:1;;7756:217::o;8683:128::-;8750:9;;;8771:11;;;8768:37;;;8785:18;;:::i;10720:127::-;10781:10;10776:3;10772:20;10769:1;10762:31;10812:4;10809:1;10802:15;10836:4;10833:1;10826:15;10852:251;10922:6;10975:2;10963:9;10954:7;10950:23;10946:32;10943:52;;;10991:1;10988;10981:12;10943:52;11023:9;11017:16;11042:31;11067:5;11042:31;:::i;11108:980::-;11370:4;11418:3;11407:9;11403:19;11449:6;11438:9;11431:25;11475:2;11513:6;11508:2;11497:9;11493:18;11486:34;11556:3;11551:2;11540:9;11536:18;11529:31;11580:6;11615;11609:13;11646:6;11638;11631:22;11684:3;11673:9;11669:19;11662:26;;11723:2;11715:6;11711:15;11697:29;;11744:1;11754:195;11768:6;11765:1;11762:13;11754:195;;;11833:13;;-1:-1:-1;;;;;11829:39:1;11817:52;;11924:15;;;;11889:12;;;;11865:1;11783:9;11754:195;;;-1:-1:-1;;;;;;;12005:32:1;;;;12000:2;11985:18;;11978:60;-1:-1:-1;;;12069:3:1;12054:19;12047:35;11966:3;11108:980;-1:-1:-1;;;11108:980:1:o

Swarm Source

ipfs://8d129c753f039328c5832494c442ac795d3cc997878ee09e40f79f254174692f
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.