ETH Price: $2,634.20 (-3.07%)

Token

Lagertha (LGTHA)
 

Overview

Max Total Supply

1,000,000,000 LGTHA

Holders

55

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
46,060,578.274329103 LGTHA

Value
$0.00
0x8c559f5d471f8a9c89fd657ec77b0d269e377a38
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:
LGTHA

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-21
*/

/*

    ██       ██████  ████████ ██   ██  █████  
    ██      ██          ██    ██   ██ ██   ██ 
    ██      ██   ███    ██    ███████ ███████ 
    ██      ██    ██    ██    ██   ██ ██   ██ 
    ███████  ██████     ██    ██   ██ ██   ██ 
                                          

    This is the tale of Lagetha, a famous shieldmaiden and Ragnar's wife.

    LINKS:
    Website: https://lgtha.com
    Telegram: https://t.me/lgthaeth
    Medium: https://medium.com/@lgtha/
    Twitter: https://twitter.com/lgthaeth

    */
    pragma solidity 0.8.11;
    // SPDX-License-Identifier: Unlicensed

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

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

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

        function name() external pure returns (string memory);
        function symbol() external pure returns (string memory);
        function decimals() external pure returns (uint8);
        function totalSupply() external view returns (uint);
        function balanceOf(address owner) external view returns (uint);
        function allowance(address owner, address spender) external view returns (uint);
        function approve(address spender, uint value) external returns (bool);
        function transfer(address to, uint value) external returns (bool);
        function transferFrom(address from, address to, uint value) external returns (bool);
        function DOMAIN_SEPARATOR() external view returns (bytes32);
        function PERMIT_TYPEHASH() external pure returns (bytes32);
        function nonces(address owner) external view returns (uint);
        function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

        function MINIMUM_LIQUIDITY() external pure returns (uint);
        function factory() external view returns (address);
        function token0() external view returns (address);
        function token1() external view returns (address);
        function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
        function price0CumulativeLast() external view returns (uint);
        function price1CumulativeLast() external view returns (uint);
        function kLast() external view returns (uint);
        function mint(address to) external returns (uint liquidity);
        function burn(address to) external returns (uint amount0, uint amount1);
        function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
        function skim(address to) external;
        function sync() external;
        function initialize(address, address) external;
        }

    interface IUniswapV2Factory {
        event PairCreated(address indexed token0, address indexed token1, address pair, uint);
        function feeTo() external view returns (address);
        function feeToSetter() external view returns (address);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
        function allPairs(uint) external view returns (address pair);
        function allPairsLength() external view returns (uint);
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function setFeeTo(address) external;
        function setFeeToSetter(address) external;
    }

    interface 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 {
        using SafeMath for uint256;
        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 9;
        }

        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 recipient, uint256 amount) public virtual override returns (bool) {
            _transfer(_msgSender(), recipient, 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) {
            _approve(_msgSender(), spender, amount);
            return true;
        }

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

        function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
            return true;
        }

        function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
            return true;

        }

        function _transfer(

            address sender,
            address recipient,
            uint256 amount
            ) internal virtual {
            require(sender != address(0), "ERC20: transfer from the zero address");
            require(recipient != address(0), "ERC20: transfer to the zero address");
            _beforeTokenTransfer(sender, recipient, amount);
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
            _balances[account] = _balances[account].add(amount);

            emit Transfer(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);

            _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
            _totalSupply = _totalSupply.sub(amount);

            emit Transfer(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 _beforeTokenTransfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {}

    }

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

        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            return mod(a, b, "SafeMath: modulo by zero");
        }
        function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            require(b != 0, errorMessage);
            return a % b;
        }
    }


    contract Ownable is Context {
        address private _owner;

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

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

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

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

        function renounceOwnership() public virtual onlyOwner {
            emit OwnershipTransferred(_owner, address(0));
            _owner = address(0);
        }
        function transferOwnership(address newOwner) public virtual onlyOwner {
            require(newOwner != address(0), "Ownable: new owner is the zero address");
            emit OwnershipTransferred(_owner, newOwner);
            _owner = newOwner;
        }
    }

    library SafeMathInt {
        int256 private constant MIN_INT256 = int256(1) << 255;
        int256 private constant MAX_INT256 = ~(int256(1) << 255);

        function mul(int256 a, int256 b) internal pure returns (int256) {
            int256 c = a * b;
            require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
            require((b == 0) || (c / b == a));
            return c;
        }

        function div(int256 a, int256 b) internal pure returns (int256) {
            require(b != -1 || a != MIN_INT256);
            return a / b;
        }

        function sub(int256 a, int256 b) internal pure returns (int256) {
            int256 c = a - b;
            require((b >= 0 && c <= a) || (b < 0 && c > a));
            return c;
        }

        function add(int256 a, int256 b) internal pure returns (int256) {
            int256 c = a + b;
            require((b >= 0 && c >= a) || (b < 0 && c < a));
            return c;
        }

        function abs(int256 a) internal pure returns (int256) {
            require(a != MIN_INT256);
            return a < 0 ? -a : a;
        }
        function toUint256Safe(int256 a) internal pure returns (uint256) {
            require(a >= 0);
            return uint256(a);
        }
    }

    library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
    }


    interface IUniswapV2Router01 {
        function factory() external pure returns (address);
        function WETH() external pure returns (address);
        function addLiquidity(
            address tokenA,
            address tokenB,
            uint amountADesired,
            uint amountBDesired,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline
        ) external returns (uint amountA, uint amountB, uint liquidity);
        function addLiquidityETH(
            address token,
            uint amountTokenDesired,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
        function removeLiquidity(
            address tokenA,
            address tokenB,
            uint liquidity,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline
        ) external returns (uint amountA, uint amountB);

        function removeLiquidityETH(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external returns (uint amountToken, uint amountETH);
        function removeLiquidityWithPermit(
            address tokenA,
            address tokenB,
            uint liquidity,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline,
            bool approveMax, uint8 v, bytes32 r, bytes32 s
        ) external returns (uint amountA, uint amountB);
        function removeLiquidityETHWithPermit(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline,
            bool approveMax, uint8 v, bytes32 r, bytes32 s
        ) external returns (uint amountToken, uint amountETH);
        function swapExactTokensForTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);
        function swapTokensForExactTokens(
            uint amountOut,

            uint amountInMax,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);
        function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
            external
            payable
            returns (uint[] memory amounts);
        function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
            external
            returns (uint[] memory amounts);
        function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
            external
            returns (uint[] memory amounts);
            function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
            external
            payable
            returns (uint[] memory amounts);
        function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
        function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
        function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
        function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
        function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
    }


    interface IUniswapV2Router02 is IUniswapV2Router01 {
        function removeLiquidityETHSupportingFeeOnTransferTokens(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline

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

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

        ) external;
        function swapExactETHForTokensSupportingFeeOnTransferTokens(
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
            ) external payable;
        function swapExactTokensForETHSupportingFeeOnTransferTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external;
    }
    contract LGTHA is ERC20, Ownable {
        using SafeMath for uint256;

        IUniswapV2Router02 public immutable uniswapV2Router;

        address public immutable uniswapV2Pair;
        address public constant deadAddress = address(0xdead);

        bool private swapping;
        bool private botsShaken;

        address public marketingWallet;
        address public lpLocker;
        
        uint256 public maxTransactionAmount;
        uint256 public swapTokensAtAmount;

        uint256 public maxWallet;

        bool public swapEnabled = true;

        uint256 public buyTotalFees;
        uint256 public buyMarketingFee;
        uint256 public buyLiquidityFee;
        uint256 public buyBurnFee;
        
        uint256 public sellTotalFees;
        uint256 public sellMarketingFee;
        uint256 public sellLiquidityFee;
        uint256 public sellBurnFee;
        
        uint256 public tokensForMarketing;
        uint256 public tokensForLiquidity;
        uint256 public tokensForBurn;

        mapping (address => bool) private _isExcludedFromFees;
        mapping (address => bool) public _isExcludedMaxTransactionAmount;

        mapping (address => bool) public automatedMarketMakerPairs;
        event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
        event ExcludeFromFees(address indexed account, bool isExcluded);
        event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
        event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
        event SwapAndLiquify(
            uint256 tokensSwapped,
            uint256 ethReceived,
            uint256 tokensIntoLiquidity
        );
        event BuyBackTriggered(uint256 amount);

        constructor() ERC20("Lagertha", "LGTHA") {
            address newOwner = address(owner());
            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            excludeFromMaxTransaction(address(_uniswapV2Router), true);
            uniswapV2Router = _uniswapV2Router;
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
            excludeFromMaxTransaction(address(uniswapV2Pair), true);
            _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
            
            uint256 _buyMarketingFee = 30;
            uint256 _buyLiquidityFee = 0;
            uint256 _buyBurnFee = 0;
        
            uint256 _sellMarketingFee = 45;
            uint256 _sellLiquidityFee = 0;
            uint256 _sellBurnFee = 0;
            
            uint256 totalSupply = 1 * 1e9 * 1e9;
            
            maxTransactionAmount = (totalSupply * 1 / 100) + (1 * 1e9); // 1% maxTransactionAmountTxn
            swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap wallet
            maxWallet = (totalSupply * 2 / 100) + (1 * 1e9); // 2% max wallet

            buyMarketingFee = _buyMarketingFee;
            buyLiquidityFee = _buyLiquidityFee;
            buyBurnFee = _buyBurnFee;
            buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
            
            sellMarketingFee = _sellMarketingFee;
            sellLiquidityFee = _sellLiquidityFee;
            sellBurnFee = _sellBurnFee;
            sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
            
            marketingWallet = address(0xA1b866E2aa76fEA3337e6CBD4c636aB03184062C); // Marketing / Development wallet
            lpLocker = address(0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214); // LP Locker CA (Unicrypt)

            excludeFromFees(newOwner, true); // Owner address
            excludeFromFees(address(this), true); // CA
            excludeFromFees(address(0xdead), true); // Burn address
            excludeFromFees(marketingWallet, true); // Marketing / Development wallet
            excludeFromFees(lpLocker, true); // LP Locker
            
            excludeFromMaxTransaction(newOwner, true); // Owner address
            excludeFromMaxTransaction(address(this), true); // CA
            excludeFromMaxTransaction(address(0xdead), true); // Burn address
            excludeFromMaxTransaction(marketingWallet, true); // Marketing / Development wallet
            excludeFromMaxTransaction(lpLocker, true); // LP Locker

            _mint(newOwner, totalSupply);

            transferOwnership(newOwner);
        }

        receive() external payable {
        }

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

        function updateLimits(uint256 _maxTransactionAmount, uint256 _maxWallet) external onlyOwner {
            require(_maxTransactionAmount >= (totalSupply() * 1 / 100)/1e9, "Cannot set maxTransactionAmount lower than 1%");
            require(_maxWallet >= (totalSupply() * 2 / 100)/1e9, "Cannot set maxWallet lower than 2%");
            maxTransactionAmount = (_maxTransactionAmount * 1e9) + (1 * 1e9) ;
            maxWallet = (_maxWallet * 1e9) + (1 * 1e9);
        }

        function removeLimits() external onlyOwner {
            maxTransactionAmount = totalSupply();
            maxWallet = totalSupply();
        }
        
        function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
            _isExcludedMaxTransactionAmount[updAds] = isEx;
        }

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

        function updateFees(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _buyBurnFee, uint256 _sellMarketingFee, 
        uint256 _sellLiquidityFee, uint256 _sellBurnFee) external onlyOwner {
            buyMarketingFee = _buyMarketingFee;
            buyLiquidityFee = _buyLiquidityFee;
            buyBurnFee = _buyBurnFee;
            buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
            sellMarketingFee = _sellMarketingFee;
            sellLiquidityFee = _sellLiquidityFee;
            sellBurnFee = _sellBurnFee;
            sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
            require(sellTotalFees <= 45, "Must keep sell fees at 45% or less");
            require(buyTotalFees <= 30, "Must keep buy fees at 30% or less");
        }

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

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

        function _setAutomatedMarketMakerPair(address pair, bool value) private {
            automatedMarketMakerPairs[pair] = value;
            emit SetAutomatedMarketMakerPair(pair, value);
        }

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

        function _transfer(
            address from,
            address to,
            uint256 amount
        ) internal override {
            require(from != address(0), "ERC20: transfer from the zero address");
            require(to != address(0), "ERC20: transfer to the zero address");
            
            if(amount == 0) {
                super._transfer(from, to, 0);
                return;
            }
                if (
                    from != owner() &&

                    to != owner() &&
                    to != address(0) &&
                    to != address(0xdead) &&
                    !swapping
                ){
                    //when buy
                    if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                            require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                            require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");

                    }
                    
                    //when sell
                    else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                            require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                    }
                }
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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


            if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
                takeFee = false;
            }
            uint256 fees = 0;
            if(takeFee){
                if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                    fees = amount.mul(sellTotalFees).div(100);
                    tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                    tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                    tokensForBurn += fees * sellBurnFee / sellTotalFees;
                }
                else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                    fees = amount.mul(buyTotalFees).div(100);
                    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                    tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                    tokensForBurn += fees * buyBurnFee / buyTotalFees;
                }
                
                if(fees > 0){    
                    super._transfer(from, address(this), (fees - tokensForBurn));
                }

                if(tokensForBurn > 0){
                    super._transfer(from, deadAddress, tokensForBurn);
                    tokensForBurn = 0;
                }
                amount -= fees;
            }
            super._transfer(from, to, amount);
        }

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

            path[1] = uniswapV2Router.WETH();
            _approve(address(this), address(uniswapV2Router), tokenAmount);
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0,
                path,
                address(this),
                block.timestamp
            );
        }
        function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
            _approve(address(this), address(uniswapV2Router), tokenAmount);
            uniswapV2Router.addLiquidityETH{value: ethAmount}(
                address(this),
                tokenAmount,
                0,
                0,
                deadAddress,
                block.timestamp
            );
        }

        function swapBack() private {
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
            
            if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
            uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
            uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
            uint256 initialETHBalance = address(this).balance;
            swapTokensForEth(amountToSwapForETH); 
            uint256 ethBalance = address(this).balance.sub(initialETHBalance);
            uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);

            uint256 ethForLiquidity = ethBalance - ethForMarketing;

            tokensForLiquidity = 0;
            tokensForMarketing = 0;
            
            (bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
            if(liquidityTokens > 0 && ethForLiquidity > 0){
                addLiquidity(liquidityTokens, ethForLiquidity);
                emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
            }

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

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":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLocker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"view","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":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"swapEnabled","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBurnFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805460ff191660011790553480156200001e57600080fd5b5060408051808201825260088152674c6167657274686160c01b6020808301918252835180850190945260058452644c4754484160d81b9084015281519192916200006c9160039162000878565b5080516200008290600490602084019062000878565b5050506000620000976200049960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062002fd7833981519152908290a3506000620000e96005546001600160a01b031690565b9050737a250d5630b4cf539739df2c5dacb4c659f2488d6200010d8160016200049d565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e91906200091e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f291906200091e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026691906200091e565b6001600160a01b031660a0819052620002819060016200049d565b60a0516200029190600162000517565b601e600080602d8180670de0b6b3a76400006064620002b28260016200095f565b620002be919062000981565b620002ce90633b9aca00620009a4565b600855620186a0620002e28260196200095f565b620002ee919062000981565b6009556064620003008260026200095f565b6200030c919062000981565b6200031c90633b9aca00620009a4565b600a55600d879055600e869055600f859055846200033b8789620009a4565b620003479190620009a4565b600c5560118490556012839055601382905581620003668486620009a4565b620003729190620009a4565b601055600680546001600160a01b031990811673a1b866e2aa76fea3337e6cbd4c636ab03184062c179091556007805490911673663a5c229c09b049e36dcc11a9b0d4a8eb9db214179055620003ca8960016200056b565b620003d73060016200056b565b620003e661dead60016200056b565b600654620003ff906001600160a01b031660016200056b565b60075462000418906001600160a01b031660016200056b565b620004258960016200049d565b620004323060016200049d565b6200044161dead60016200049d565b6006546200045a906001600160a01b031660016200049d565b60075462000473906001600160a01b031660016200049d565b6200047f898262000615565b6200048a8962000711565b505050505050505050620009fc565b3390565b6005546001600160a01b03163314620004ec5760405162461bcd60e51b8152602060048201819052602482015260008051602062002fb783398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005b65760405162461bcd60e51b8152602060048201819052602482015260008051602062002fb78339815191526044820152606401620004e3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200066d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004e3565b62000689816002546200080e60201b620011941790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006bc918390620011946200080e821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b031633146200075c5760405162461bcd60e51b8152602060048201819052602482015260008051602062002fb78339815191526044820152606401620004e3565b6001600160a01b038116620007c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620004e3565b6005546040516001600160a01b0380841692169060008051602062002fd783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806200081d8385620009a4565b905083811015620008715760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004e3565b9392505050565b8280546200088690620009bf565b90600052602060002090601f016020900481019282620008aa5760008555620008f5565b82601f10620008c557805160ff1916838001178555620008f5565b82800160010185558215620008f5579182015b82811115620008f5578251825591602001919060010190620008d8565b506200090392915062000907565b5090565b5b8082111562000903576000815560010162000908565b6000602082840312156200093157600080fd5b81516001600160a01b03811681146200087157600080fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200097c576200097c62000949565b500290565b6000826200099f57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009ba57620009ba62000949565b500190565b600181811c90821680620009d457607f821691505b60208210811415620009f657634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161256b62000a4c6000396000818161045a0152610c3001526000818161035301528181611df401528181611ead01528181611ee901528181611f5b0152611fb8015261256b6000f3fe6080604052600436106102765760003560e01c80637bce5a041161014f578063b62496f5116100c1578063e2f456051161007a578063e2f456051461079e578063e71dc3f5146107b4578063f11a24d3146107ca578063f2fde38b146107e0578063f637434214610800578063f8b45b051461081657600080fd5b8063b62496f5146106bc578063c0246668146106ec578063c8c8ebe41461070c578063d257b34f14610722578063d85ba06314610742578063dd62ed3e1461075857600080fd5b8063992c58e411610113578063992c58e4146106065780639a7a23d614610626578063a2240e1914610646578063a457c2d714610666578063a9059cbb14610686578063adb873bd146106a657600080fd5b80637bce5a04146105875780638da5cb5b1461059d57806392136913146105bb578063924de9b7146105d157806395d89b41146105f157600080fd5b8063313ce567116101e85780636ddd1713116101ac5780636ddd1713146104cb57806370a08231146104e5578063715018a61461051b578063751039fc146105325780637571336a1461054757806375f0a8741461056757600080fd5b8063313ce5671461040c578063395093511461042857806349bd5a5e146104485780634fbee1931461047c5780636a486a8e146104b557600080fd5b806318160ddd1161023a57806318160ddd146103755780631a8145bb146103945780631d777856146103aa5780631f3fed8f146103c057806323b872dd146103d657806327c8f835146103f657600080fd5b806303fc20131461028257806306fdde03146102bf578063095ea7b3146102e157806310d5de53146103115780631694505e1461034157600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102cb57600080fd5b506102d461082c565b6040516102b69190612064565b3480156102ed57600080fd5b506103016102fc3660046120d1565b6108be565b60405190151581526020016102b6565b34801561031d57600080fd5b5061030161032c3660046120fd565b60186020526000908152604090205460ff1681565b34801561034d57600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b34801561038157600080fd5b506002545b6040519081526020016102b6565b3480156103a057600080fd5b5061038660155481565b3480156103b657600080fd5b5061038660165481565b3480156103cc57600080fd5b5061038660145481565b3480156103e257600080fd5b506103016103f136600461211a565b6108d5565b34801561040257600080fd5b506102a261dead81565b34801561041857600080fd5b50604051600981526020016102b6565b34801561043457600080fd5b506103016104433660046120d1565b61093e565b34801561045457600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b34801561048857600080fd5b506103016104973660046120fd565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156104c157600080fd5b5061038660105481565b3480156104d757600080fd5b50600b546103019060ff1681565b3480156104f157600080fd5b506103866105003660046120fd565b6001600160a01b031660009081526020819052604090205490565b34801561052757600080fd5b50610530610974565b005b34801561053e57600080fd5b506105306109f1565b34801561055357600080fd5b5061053061056236600461216b565b610a29565b34801561057357600080fd5b506006546102a2906001600160a01b031681565b34801561059357600080fd5b50610386600d5481565b3480156105a957600080fd5b506005546001600160a01b03166102a2565b3480156105c757600080fd5b5061038660115481565b3480156105dd57600080fd5b506105306105ec3660046121a0565b610a7e565b3480156105fd57600080fd5b506102d4610abb565b34801561061257600080fd5b506105306106213660046121bb565b610aca565b34801561063257600080fd5b5061053061064136600461216b565b610c04565b34801561065257600080fd5b506105306106613660046121fe565b610ce4565b34801561067257600080fd5b506103016106813660046120d1565b610e6d565b34801561069257600080fd5b506103016106a13660046120d1565b610ebc565b3480156106b257600080fd5b5061038660135481565b3480156106c857600080fd5b506103016106d73660046120fd565b60196020526000908152604090205460ff1681565b3480156106f857600080fd5b5061053061070736600461216b565b610ec9565b34801561071857600080fd5b5061038660085481565b34801561072e57600080fd5b5061030161073d366004612220565b610f52565b34801561074e57600080fd5b50610386600c5481565b34801561076457600080fd5b50610386610773366004612239565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107aa57600080fd5b5061038660095481565b3480156107c057600080fd5b50610386600f5481565b3480156107d657600080fd5b50610386600e5481565b3480156107ec57600080fd5b506105306107fb3660046120fd565b6110a9565b34801561080c57600080fd5b5061038660125481565b34801561082257600080fd5b50610386600a5481565b60606003805461083b90612272565b80601f016020809104026020016040519081016040528092919081815260200182805461086790612272565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b60006108cb3384846111fa565b5060015b92915050565b60006108e284848461131f565b610934843361092f856040518060600160405280602881526020016124e9602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611928565b6111fa565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108cb91859061092f9086611194565b6005546001600160a01b031633146109a75760405162461bcd60e51b815260040161099e906122ad565b60405180910390fd5b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161099e906122ad565b600254600855600254600a55565b6005546001600160a01b03163314610a535760405162461bcd60e51b815260040161099e906122ad565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610aa85760405162461bcd60e51b815260040161099e906122ad565b600b805460ff1916911515919091179055565b60606004805461083b90612272565b6005546001600160a01b03163314610af45760405162461bcd60e51b815260040161099e906122ad565b600d869055600e859055600f84905583610b0e86886122f8565b610b1891906122f8565b600c5560118390556012829055601381905580610b3583856122f8565b610b3f91906122f8565b6010819055602d1015610b9f5760405162461bcd60e51b815260206004820152602260248201527f4d757374206b6565702073656c6c206665657320617420343525206f72206c65604482015261737360f01b606482015260840161099e565b601e600c541115610bfc5760405162461bcd60e51b815260206004820152602160248201527f4d757374206b65657020627579206665657320617420333025206f72206c65736044820152607360f81b606482015260840161099e565b505050505050565b6005546001600160a01b03163314610c2e5760405162461bcd60e51b815260040161099e906122ad565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610cd65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161099e565b610ce08282611962565b5050565b6005546001600160a01b03163314610d0e5760405162461bcd60e51b815260040161099e906122ad565b633b9aca006064610d1e60025490565b610d29906001612310565b610d33919061232f565b610d3d919061232f565b821015610da25760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b606482015260840161099e565b633b9aca006064610db260025490565b610dbd906002612310565b610dc7919061232f565b610dd1919061232f565b811015610e2b5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261322560f01b606482015260840161099e565b610e3982633b9aca00612310565b610e4790633b9aca006122f8565b600855610e5881633b9aca00612310565b610e6690633b9aca006122f8565b600a555050565b60006108cb338461092f85604051806060016040528060258152602001612511602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611928565b60006108cb33848461131f565b6005546001600160a01b03163314610ef35760405162461bcd60e51b815260040161099e906122ad565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b03163314610f7f5760405162461bcd60e51b815260040161099e906122ad565b620186a0610f8c60025490565b610f97906001612310565b610fa1919061232f565b82101561100e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161099e565b6103e861101a60025490565b611025906005612310565b61102f919061232f565b82111561109b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161099e565b50600981905560015b919050565b6005546001600160a01b031633146110d35760405162461bcd60e51b815260040161099e906122ad565b6001600160a01b0381166111385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806111a183856122f8565b9050838110156111f35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161099e565b9392505050565b6001600160a01b03831661125c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099e565b6001600160a01b0382166112bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166113455760405162461bcd60e51b815260040161099e90612351565b6001600160a01b03821661136b5760405162461bcd60e51b815260040161099e90612396565b806113815761137c838360006119b6565b505050565b6005546001600160a01b038481169116148015906113ad57506005546001600160a01b03838116911614155b80156113c157506001600160a01b03821615155b80156113d857506001600160a01b03821661dead14155b80156113ee5750600554600160a01b900460ff16155b156115cf576001600160a01b03831660009081526019602052604090205460ff16801561143457506001600160a01b03821660009081526018602052604090205460ff16155b15611518576008548111156114a95760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161099e565b600a546001600160a01b0383166000908152602081905260409020546114cf90836122f8565b11156115135760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161099e565b6115cf565b6001600160a01b03821660009081526019602052604090205460ff16801561155957506001600160a01b03831660009081526018602052604090205460ff16155b156115cf576008548111156115cf5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161099e565b30600090815260208190526040902054600954811080159081906115f55750600b5460ff165b801561160b5750600554600160a01b900460ff16155b801561163057506001600160a01b03851660009081526019602052604090205460ff16155b801561165557506001600160a01b03851660009081526017602052604090205460ff16155b801561167a57506001600160a01b03841660009081526017602052604090205460ff16155b156116a8576005805460ff60a01b1916600160a01b17905561169a611abf565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526017602052604090205460ff600160a01b9092048216159116806116f657506001600160a01b03851660009081526017602052604090205460ff165b156116ff575060005b60008115611914576001600160a01b03861660009081526019602052604090205460ff16801561173157506000601054115b156117ef57611756606461175060105488611c9a90919063ffffffff16565b90611d19565b9050601054601254826117699190612310565b611773919061232f565b6015600082825461178491906122f8565b90915550506010546011546117999083612310565b6117a3919061232f565b601460008282546117b491906122f8565b90915550506010546013546117c99083612310565b6117d3919061232f565b601660008282546117e491906122f8565b909155506118cc9050565b6001600160a01b03871660009081526019602052604090205460ff16801561181957506000600c54115b156118cc576118386064611750600c5488611c9a90919063ffffffff16565b9050600c54600e548261184b9190612310565b611855919061232f565b6015600082825461186691906122f8565b9091555050600c54600d5461187b9083612310565b611885919061232f565b6014600082825461189691906122f8565b9091555050600c54600f546118ab9083612310565b6118b5919061232f565b601660008282546118c691906122f8565b90915550505b80156118ea576118ea8730601654846118e591906123d9565b6119b6565b60165415611907576119018761dead6016546119b6565b60006016555b61191181866123d9565b94505b61191f8787876119b6565b50505050505050565b6000818484111561194c5760405162461bcd60e51b815260040161099e9190612064565b50600061195984866123d9565b95945050505050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166119dc5760405162461bcd60e51b815260040161099e90612351565b6001600160a01b038216611a025760405162461bcd60e51b815260040161099e90612396565b611a3f816040518060600160405280602681526020016124c3602691396001600160a01b0386166000908152602081905260409020549190611928565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611a6e9082611194565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611312565b3060009081526020819052604081205490506000601454601554611ae391906122f8565b9050811580611af0575080155b15611af9575050565b600060028260155485611b0c9190612310565b611b16919061232f565b611b20919061232f565b90506000611b2e8483611d5b565b905047611b3a82611d9d565b6000611b464783611d5b565b90506000611b638661175060145485611c9a90919063ffffffff16565b90506000611b7182846123d9565b60006015819055601481905560065460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611bce576040519150601f19603f3d011682016040523d82523d6000602084013e611bd3565b606091505b50509050600087118015611be75750600082115b15611c3a57611bf68783611f55565b601554604080518881526020810185905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611c87576040519150601f19603f3d011682016040523d82523d6000602084013e611c8c565b606091505b505050505050505050505050565b600082611ca9575060006108cf565b6000611cb58385612310565b905082611cc2858361232f565b146111f35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161099e565b60006111f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612036565b60006111f383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611928565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611dd257611dd26123f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e749190612406565b81600181518110611e8757611e876123f0565b60200260200101906001600160a01b031690816001600160a01b031681525050611ed2307f0000000000000000000000000000000000000000000000000000000000000000846111fa565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611f27908590600090869030904290600401612423565b600060405180830381600087803b158015611f4157600080fd5b505af1158015610bfc573d6000803e3d6000fd5b611f80307f0000000000000000000000000000000000000000000000000000000000000000846111fa565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561200a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061202f9190612494565b5050505050565b600081836120575760405162461bcd60e51b815260040161099e9190612064565b506000611959848661232f565b600060208083528351808285015260005b8181101561209157858101830151858201604001528201612075565b818111156120a3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146120ce57600080fd5b50565b600080604083850312156120e457600080fd5b82356120ef816120b9565b946020939093013593505050565b60006020828403121561210f57600080fd5b81356111f3816120b9565b60008060006060848603121561212f57600080fd5b833561213a816120b9565b9250602084013561214a816120b9565b929592945050506040919091013590565b803580151581146110a457600080fd5b6000806040838503121561217e57600080fd5b8235612189816120b9565b91506121976020840161215b565b90509250929050565b6000602082840312156121b257600080fd5b6111f38261215b565b60008060008060008060c087890312156121d457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561221157600080fd5b50508035926020909101359150565b60006020828403121561223257600080fd5b5035919050565b6000806040838503121561224c57600080fd5b8235612257816120b9565b91506020830135612267816120b9565b809150509250929050565b600181811c9082168061228657607f821691505b602082108114156122a757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561230b5761230b6122e2565b500190565b600081600019048311821515161561232a5761232a6122e2565b500290565b60008261234c57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156123eb576123eb6122e2565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561241857600080fd5b81516111f3816120b9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124735784516001600160a01b03168352938301939183019160010161244e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124a957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122033c0764a5d11ca6f5c5ffc05acd8a8d556fe1075d2d54ae3ba21b10eb5c584d764736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106102765760003560e01c80637bce5a041161014f578063b62496f5116100c1578063e2f456051161007a578063e2f456051461079e578063e71dc3f5146107b4578063f11a24d3146107ca578063f2fde38b146107e0578063f637434214610800578063f8b45b051461081657600080fd5b8063b62496f5146106bc578063c0246668146106ec578063c8c8ebe41461070c578063d257b34f14610722578063d85ba06314610742578063dd62ed3e1461075857600080fd5b8063992c58e411610113578063992c58e4146106065780639a7a23d614610626578063a2240e1914610646578063a457c2d714610666578063a9059cbb14610686578063adb873bd146106a657600080fd5b80637bce5a04146105875780638da5cb5b1461059d57806392136913146105bb578063924de9b7146105d157806395d89b41146105f157600080fd5b8063313ce567116101e85780636ddd1713116101ac5780636ddd1713146104cb57806370a08231146104e5578063715018a61461051b578063751039fc146105325780637571336a1461054757806375f0a8741461056757600080fd5b8063313ce5671461040c578063395093511461042857806349bd5a5e146104485780634fbee1931461047c5780636a486a8e146104b557600080fd5b806318160ddd1161023a57806318160ddd146103755780631a8145bb146103945780631d777856146103aa5780631f3fed8f146103c057806323b872dd146103d657806327c8f835146103f657600080fd5b806303fc20131461028257806306fdde03146102bf578063095ea7b3146102e157806310d5de53146103115780631694505e1461034157600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102cb57600080fd5b506102d461082c565b6040516102b69190612064565b3480156102ed57600080fd5b506103016102fc3660046120d1565b6108be565b60405190151581526020016102b6565b34801561031d57600080fd5b5061030161032c3660046120fd565b60186020526000908152604090205460ff1681565b34801561034d57600080fd5b506102a27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561038157600080fd5b506002545b6040519081526020016102b6565b3480156103a057600080fd5b5061038660155481565b3480156103b657600080fd5b5061038660165481565b3480156103cc57600080fd5b5061038660145481565b3480156103e257600080fd5b506103016103f136600461211a565b6108d5565b34801561040257600080fd5b506102a261dead81565b34801561041857600080fd5b50604051600981526020016102b6565b34801561043457600080fd5b506103016104433660046120d1565b61093e565b34801561045457600080fd5b506102a27f000000000000000000000000850e9716ab772666932cb096bfe693ef4bc0ebb381565b34801561048857600080fd5b506103016104973660046120fd565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156104c157600080fd5b5061038660105481565b3480156104d757600080fd5b50600b546103019060ff1681565b3480156104f157600080fd5b506103866105003660046120fd565b6001600160a01b031660009081526020819052604090205490565b34801561052757600080fd5b50610530610974565b005b34801561053e57600080fd5b506105306109f1565b34801561055357600080fd5b5061053061056236600461216b565b610a29565b34801561057357600080fd5b506006546102a2906001600160a01b031681565b34801561059357600080fd5b50610386600d5481565b3480156105a957600080fd5b506005546001600160a01b03166102a2565b3480156105c757600080fd5b5061038660115481565b3480156105dd57600080fd5b506105306105ec3660046121a0565b610a7e565b3480156105fd57600080fd5b506102d4610abb565b34801561061257600080fd5b506105306106213660046121bb565b610aca565b34801561063257600080fd5b5061053061064136600461216b565b610c04565b34801561065257600080fd5b506105306106613660046121fe565b610ce4565b34801561067257600080fd5b506103016106813660046120d1565b610e6d565b34801561069257600080fd5b506103016106a13660046120d1565b610ebc565b3480156106b257600080fd5b5061038660135481565b3480156106c857600080fd5b506103016106d73660046120fd565b60196020526000908152604090205460ff1681565b3480156106f857600080fd5b5061053061070736600461216b565b610ec9565b34801561071857600080fd5b5061038660085481565b34801561072e57600080fd5b5061030161073d366004612220565b610f52565b34801561074e57600080fd5b50610386600c5481565b34801561076457600080fd5b50610386610773366004612239565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107aa57600080fd5b5061038660095481565b3480156107c057600080fd5b50610386600f5481565b3480156107d657600080fd5b50610386600e5481565b3480156107ec57600080fd5b506105306107fb3660046120fd565b6110a9565b34801561080c57600080fd5b5061038660125481565b34801561082257600080fd5b50610386600a5481565b60606003805461083b90612272565b80601f016020809104026020016040519081016040528092919081815260200182805461086790612272565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b60006108cb3384846111fa565b5060015b92915050565b60006108e284848461131f565b610934843361092f856040518060600160405280602881526020016124e9602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611928565b6111fa565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108cb91859061092f9086611194565b6005546001600160a01b031633146109a75760405162461bcd60e51b815260040161099e906122ad565b60405180910390fd5b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161099e906122ad565b600254600855600254600a55565b6005546001600160a01b03163314610a535760405162461bcd60e51b815260040161099e906122ad565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610aa85760405162461bcd60e51b815260040161099e906122ad565b600b805460ff1916911515919091179055565b60606004805461083b90612272565b6005546001600160a01b03163314610af45760405162461bcd60e51b815260040161099e906122ad565b600d869055600e859055600f84905583610b0e86886122f8565b610b1891906122f8565b600c5560118390556012829055601381905580610b3583856122f8565b610b3f91906122f8565b6010819055602d1015610b9f5760405162461bcd60e51b815260206004820152602260248201527f4d757374206b6565702073656c6c206665657320617420343525206f72206c65604482015261737360f01b606482015260840161099e565b601e600c541115610bfc5760405162461bcd60e51b815260206004820152602160248201527f4d757374206b65657020627579206665657320617420333025206f72206c65736044820152607360f81b606482015260840161099e565b505050505050565b6005546001600160a01b03163314610c2e5760405162461bcd60e51b815260040161099e906122ad565b7f000000000000000000000000850e9716ab772666932cb096bfe693ef4bc0ebb36001600160a01b0316826001600160a01b03161415610cd65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161099e565b610ce08282611962565b5050565b6005546001600160a01b03163314610d0e5760405162461bcd60e51b815260040161099e906122ad565b633b9aca006064610d1e60025490565b610d29906001612310565b610d33919061232f565b610d3d919061232f565b821015610da25760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b606482015260840161099e565b633b9aca006064610db260025490565b610dbd906002612310565b610dc7919061232f565b610dd1919061232f565b811015610e2b5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261322560f01b606482015260840161099e565b610e3982633b9aca00612310565b610e4790633b9aca006122f8565b600855610e5881633b9aca00612310565b610e6690633b9aca006122f8565b600a555050565b60006108cb338461092f85604051806060016040528060258152602001612511602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611928565b60006108cb33848461131f565b6005546001600160a01b03163314610ef35760405162461bcd60e51b815260040161099e906122ad565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b03163314610f7f5760405162461bcd60e51b815260040161099e906122ad565b620186a0610f8c60025490565b610f97906001612310565b610fa1919061232f565b82101561100e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161099e565b6103e861101a60025490565b611025906005612310565b61102f919061232f565b82111561109b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161099e565b50600981905560015b919050565b6005546001600160a01b031633146110d35760405162461bcd60e51b815260040161099e906122ad565b6001600160a01b0381166111385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806111a183856122f8565b9050838110156111f35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161099e565b9392505050565b6001600160a01b03831661125c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099e565b6001600160a01b0382166112bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166113455760405162461bcd60e51b815260040161099e90612351565b6001600160a01b03821661136b5760405162461bcd60e51b815260040161099e90612396565b806113815761137c838360006119b6565b505050565b6005546001600160a01b038481169116148015906113ad57506005546001600160a01b03838116911614155b80156113c157506001600160a01b03821615155b80156113d857506001600160a01b03821661dead14155b80156113ee5750600554600160a01b900460ff16155b156115cf576001600160a01b03831660009081526019602052604090205460ff16801561143457506001600160a01b03821660009081526018602052604090205460ff16155b15611518576008548111156114a95760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161099e565b600a546001600160a01b0383166000908152602081905260409020546114cf90836122f8565b11156115135760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161099e565b6115cf565b6001600160a01b03821660009081526019602052604090205460ff16801561155957506001600160a01b03831660009081526018602052604090205460ff16155b156115cf576008548111156115cf5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161099e565b30600090815260208190526040902054600954811080159081906115f55750600b5460ff165b801561160b5750600554600160a01b900460ff16155b801561163057506001600160a01b03851660009081526019602052604090205460ff16155b801561165557506001600160a01b03851660009081526017602052604090205460ff16155b801561167a57506001600160a01b03841660009081526017602052604090205460ff16155b156116a8576005805460ff60a01b1916600160a01b17905561169a611abf565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526017602052604090205460ff600160a01b9092048216159116806116f657506001600160a01b03851660009081526017602052604090205460ff165b156116ff575060005b60008115611914576001600160a01b03861660009081526019602052604090205460ff16801561173157506000601054115b156117ef57611756606461175060105488611c9a90919063ffffffff16565b90611d19565b9050601054601254826117699190612310565b611773919061232f565b6015600082825461178491906122f8565b90915550506010546011546117999083612310565b6117a3919061232f565b601460008282546117b491906122f8565b90915550506010546013546117c99083612310565b6117d3919061232f565b601660008282546117e491906122f8565b909155506118cc9050565b6001600160a01b03871660009081526019602052604090205460ff16801561181957506000600c54115b156118cc576118386064611750600c5488611c9a90919063ffffffff16565b9050600c54600e548261184b9190612310565b611855919061232f565b6015600082825461186691906122f8565b9091555050600c54600d5461187b9083612310565b611885919061232f565b6014600082825461189691906122f8565b9091555050600c54600f546118ab9083612310565b6118b5919061232f565b601660008282546118c691906122f8565b90915550505b80156118ea576118ea8730601654846118e591906123d9565b6119b6565b60165415611907576119018761dead6016546119b6565b60006016555b61191181866123d9565b94505b61191f8787876119b6565b50505050505050565b6000818484111561194c5760405162461bcd60e51b815260040161099e9190612064565b50600061195984866123d9565b95945050505050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166119dc5760405162461bcd60e51b815260040161099e90612351565b6001600160a01b038216611a025760405162461bcd60e51b815260040161099e90612396565b611a3f816040518060600160405280602681526020016124c3602691396001600160a01b0386166000908152602081905260409020549190611928565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611a6e9082611194565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611312565b3060009081526020819052604081205490506000601454601554611ae391906122f8565b9050811580611af0575080155b15611af9575050565b600060028260155485611b0c9190612310565b611b16919061232f565b611b20919061232f565b90506000611b2e8483611d5b565b905047611b3a82611d9d565b6000611b464783611d5b565b90506000611b638661175060145485611c9a90919063ffffffff16565b90506000611b7182846123d9565b60006015819055601481905560065460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611bce576040519150601f19603f3d011682016040523d82523d6000602084013e611bd3565b606091505b50509050600087118015611be75750600082115b15611c3a57611bf68783611f55565b601554604080518881526020810185905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611c87576040519150601f19603f3d011682016040523d82523d6000602084013e611c8c565b606091505b505050505050505050505050565b600082611ca9575060006108cf565b6000611cb58385612310565b905082611cc2858361232f565b146111f35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161099e565b60006111f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612036565b60006111f383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611928565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611dd257611dd26123f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e749190612406565b81600181518110611e8757611e876123f0565b60200260200101906001600160a01b031690816001600160a01b031681525050611ed2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111fa565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611f27908590600090869030904290600401612423565b600060405180830381600087803b158015611f4157600080fd5b505af1158015610bfc573d6000803e3d6000fd5b611f80307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111fa565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561200a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061202f9190612494565b5050505050565b600081836120575760405162461bcd60e51b815260040161099e9190612064565b506000611959848661232f565b600060208083528351808285015260005b8181101561209157858101830151858201604001528201612075565b818111156120a3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146120ce57600080fd5b50565b600080604083850312156120e457600080fd5b82356120ef816120b9565b946020939093013593505050565b60006020828403121561210f57600080fd5b81356111f3816120b9565b60008060006060848603121561212f57600080fd5b833561213a816120b9565b9250602084013561214a816120b9565b929592945050506040919091013590565b803580151581146110a457600080fd5b6000806040838503121561217e57600080fd5b8235612189816120b9565b91506121976020840161215b565b90509250929050565b6000602082840312156121b257600080fd5b6111f38261215b565b60008060008060008060c087890312156121d457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561221157600080fd5b50508035926020909101359150565b60006020828403121561223257600080fd5b5035919050565b6000806040838503121561224c57600080fd5b8235612257816120b9565b91506020830135612267816120b9565b809150509250929050565b600181811c9082168061228657607f821691505b602082108114156122a757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561230b5761230b6122e2565b500190565b600081600019048311821515161561232a5761232a6122e2565b500290565b60008261234c57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156123eb576123eb6122e2565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561241857600080fd5b81516111f3816120b9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124735784516001600160a01b03168352938301939183019160010161244e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124a957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122033c0764a5d11ca6f5c5ffc05acd8a8d556fe1075d2d54ae3ba21b10eb5c584d764736f6c634300080b0033

Deployed Bytecode Sourcemap

19683:13283:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20054:23;;;;;;;;;;-1:-1:-1;20054:23:0;;;;-1:-1:-1;;;;;20054:23:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;20054:23:0;;;;;;;;5907:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6910:181::-;;;;;;;;;;-1:-1:-1;6910:181:0;;;;;:::i;:::-;;:::i;:::-;;;1445:14:1;;1438:22;1420:41;;1408:2;1393:18;6910:181:0;1280:187:1;20799:64:0;;;;;;;;;;-1:-1:-1;20799:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19766:51;;;;;;;;;;;;;;;6263:116;;;;;;;;;;-1:-1:-1;6355:12:0;;6263:116;;;2105:25:1;;;2093:2;2078:18;6263:116:0;1959:177:1;20650:33:0;;;;;;;;;;;;;;;;20694:28;;;;;;;;;;;;;;;;20606:33;;;;;;;;;;;;;;;;7103:387;;;;;;;;;;-1:-1:-1;7103:387:0;;;;;:::i;:::-;;:::i;19879:53::-;;;;;;;;;;;;19925:6;19879:53;;6151:100;;;;;;;;;;-1:-1:-1;6151:100:0;;6238:1;2744:36:1;;2732:2;2717:18;6151:100:0;2602:184:1;7502:230:0;;;;;;;;;;-1:-1:-1;7502:230:0;;;;;:::i;:::-;;:::i;19830:38::-;;;;;;;;;;;;;;;27161:133;;;;;;;;;;-1:-1:-1;27161:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;27254:28:0;27226:4;27254:28;;;:19;:28;;;;;;;;;27161:133;20436:28;;;;;;;;;;;;;;;;20227:30;;;;;;;;;;-1:-1:-1;20227:30:0;;;;;;;;6391:135;;;;;;;;;;-1:-1:-1;6391:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;6496:18:0;6465:7;6496:18;;;;;;;;;;;;6391:135;12341:160;;;;;;;;;;;;;:::i;:::-;;25210:146;;;;;;;;;;;;;:::i;25376:152::-;;;;;;;;;;-1:-1:-1;25376:152:0;;;;;:::i;:::-;;:::i;20013:30::-;;;;;;;;;;-1:-1:-1;20013:30:0;;;;-1:-1:-1;;;;;20013:30:0;;;20308;;;;;;;;;;;;;;;;12099:87;;;;;;;;;;-1:-1:-1;12168:6:0;;-1:-1:-1;;;;;12168:6:0;12099:87;;20475:31;;;;;;;;;;;;;;;;25540:109;;;;;;;;;;-1:-1:-1;25540:109:0;;;;;:::i;:::-;;:::i;6027:112::-;;;;;;;;;;;;;:::i;25661:806::-;;;;;;;;;;-1:-1:-1;25661:806:0;;;;;:::i;:::-;;:::i;26685:254::-;;;;;;;;;;-1:-1:-1;26685:254:0;;;;;:::i;:::-;;:::i;24725:473::-;;;;;;;;;;-1:-1:-1;24725:473:0;;;;;:::i;:::-;;:::i;7744:283::-;;;;;;;;;;-1:-1:-1;7744:283:0;;;;;:::i;:::-;;:::i;6538:187::-;;;;;;;;;;-1:-1:-1;6538:187:0;;;;;:::i;:::-;;:::i;20559:26::-;;;;;;;;;;;;;;;;20876:58;;;;;;;;;;-1:-1:-1;20876:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26479:194;;;;;;;;;;-1:-1:-1;26479:194:0;;;;;:::i;:::-;;:::i;20098:35::-;;;;;;;;;;;;;;;;24303:410;;;;;;;;;;-1:-1:-1;24303:410:0;;;;;:::i;:::-;;:::i;20270:27::-;;;;;;;;;;;;;;;;6739:159;;;;;;;;;;-1:-1:-1;6739:159:0;;;;;:::i;:::-;-1:-1:-1;;;;;6859:18:0;;;6828:7;6859:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6739:159;20144:33;;;;;;;;;;;;;;;;20390:25;;;;;;;;;;;;;;;;20349:30;;;;;;;;;;;;;;;;12511:260;;;;;;;;;;-1:-1:-1;12511:260:0;;;;;:::i;:::-;;:::i;20517:31::-;;;;;;;;;;;;;;;;20190:24;;;;;;;;;;;;;;;;5907:108;5961:13;5998:5;5991:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5907:108;:::o;6910:181::-;6993:4;7014:39;945:10;7037:7;7046:6;7014:8;:39::i;:::-;-1:-1:-1;7075:4:0;6910:181;;;;;:::o;7103:387::-;7259:4;7280:36;7290:6;7298:9;7309:6;7280:9;:36::i;:::-;7331:121;7340:6;945:10;7362:89;7400:6;7362:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7362:19:0;;;;;;:11;:19;;;;;;;;945:10;7362:33;;;;;;;;;;:37;:89::i;:::-;7331:8;:121::i;:::-;-1:-1:-1;7474:4:0;7103:387;;;;;:::o;7502:230::-;945:10;7590:4;7643:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7643:34:0;;;;;;;;;;7590:4;;7611:83;;7634:7;;7643:50;;7682:10;7643:38;:50::i;12341:160::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;;;;;;;;;12436:6:::1;::::0;12415:40:::1;::::0;12452:1:::1;::::0;-1:-1:-1;;;;;12436:6:0::1;::::0;12415:40:::1;::::0;12452:1;;12415:40:::1;12470:6;:19:::0;;-1:-1:-1;;;;;;12470:19:0::1;::::0;;12341:160::o;25210:146::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;6355:12;;25268:20:::1;:36:::0;6355:12;;25319:9:::1;:25:::0;25210:146::o;25376:152::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25470:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25470:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25376:152::o;25540:109::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;25616:11:::1;:21:::0;;-1:-1:-1;;25616:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25540:109::o;6027:112::-;6083:13;6120:7;6113:14;;;;;:::i;25661:806::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;25874:15:::1;:34:::0;;;25923:15:::1;:34:::0;;;25972:10:::1;:24:::0;;;25985:11;26026:33:::1;25941:16:::0;25892;26026:33:::1;:::i;:::-;:46;;;;:::i;:::-;26011:12;:61:::0;26087:16:::1;:36:::0;;;26138:16:::1;:36:::0;;;26189:11:::1;:26:::0;;;26203:12;26246:35:::1;26157:17:::0;26106;26246:35:::1;:::i;:::-;:49;;;;:::i;:::-;26230:13;:65:::0;;;26335:2:::1;-1:-1:-1::0;26318:19:0::1;26310:66;;;::::0;-1:-1:-1;;;26310:66:0;;6033:2:1;26310:66:0::1;::::0;::::1;6015:21:1::0;6072:2;6052:18;;;6045:30;6111:34;6091:18;;;6084:62;-1:-1:-1;;;6162:18:1;;;6155:32;6204:19;;26310:66:0::1;5831:398:1::0;26310:66:0::1;26415:2;26399:12;;:18;;26391:64;;;::::0;-1:-1:-1;;;26391:64:0;;6436:2:1;26391:64:0::1;::::0;::::1;6418:21:1::0;6475:2;6455:18;;;6448:30;6514:34;6494:18;;;6487:62;-1:-1:-1;;;6565:18:1;;;6558:31;6606:19;;26391:64:0::1;6234:397:1::0;26391:64:0::1;25661:806:::0;;;;;;:::o;26685:254::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;26796:13:::1;-1:-1:-1::0;;;;;26788:21:0::1;:4;-1:-1:-1::0;;;;;26788:21:0::1;;;26780:91;;;::::0;-1:-1:-1;;;26780:91:0;;6838:2:1;26780:91:0::1;::::0;::::1;6820:21:1::0;6877:2;6857:18;;;6850:30;6916:34;6896:18;;;6889:62;6987:27;6967:18;;;6960:55;7032:19;;26780:91:0::1;6636:421:1::0;26780:91:0::1;26886:41;26915:4;26921:5;26886:28;:41::i;:::-;26685:254:::0;;:::o;24725:473::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;24891:3:::1;24886;24866:13;6355:12:::0;;;6263:116;24866:13:::1;:17;::::0;24882:1:::1;24866:17;:::i;:::-;:23;;;;:::i;:::-;24865:29;;;;:::i;:::-;24840:21;:54;;24832:112;;;::::0;-1:-1:-1;;;24832:112:0;;7659:2:1;24832:112:0::1;::::0;::::1;7641:21:1::0;7698:2;7678:18;;;7671:30;7737:34;7717:18;;;7710:62;-1:-1:-1;;;7788:18:1;;;7781:43;7841:19;;24832:112:0::1;7457:409:1::0;24832:112:0::1;25007:3;25002;24982:13;6355:12:::0;;;6263:116;24982:13:::1;:17;::::0;24998:1:::1;24982:17;:::i;:::-;:23;;;;:::i;:::-;24981:29;;;;:::i;:::-;24967:10;:43;;24959:90;;;::::0;-1:-1:-1;;;24959:90:0;;8073:2:1;24959:90:0::1;::::0;::::1;8055:21:1::0;8112:2;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;-1:-1:-1;;;8202:18:1;;;8195:32;8244:19;;24959:90:0::1;7871:398:1::0;24959:90:0::1;25088:27;:21:::0;25112:3:::1;25088:27;:::i;:::-;25087:41;::::0;25120:7:::1;25087:41;:::i;:::-;25064:20;:64:::0;25157:16:::1;:10:::0;25170:3:::1;25157:16;:::i;:::-;25156:30;::::0;25178:7:::1;25156:30;:::i;:::-;25144:9;:42:::0;-1:-1:-1;;24725:473:0:o;7744:283::-;7837:4;7858:129;945:10;7881:7;7890:96;7929:15;7890:96;;;;;;;;;;;;;;;;;945:10;7890:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7890:34:0;;;;;;;;;;;;:38;:96::i;6538:187::-;6624:4;6645:42;945:10;6669:9;6680:6;6645:9;:42::i;26479:194::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26568:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;26568:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26627:34;;1420:41:1;;;26627:34:0::1;::::0;1393:18:1;26627:34:0::1;;;;;;;26479:194:::0;;:::o;24303:410::-;12242:6;;24384:4;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;24445:6:::1;24425:13;6355:12:::0;;;6263:116;24425:13:::1;:17;::::0;24441:1:::1;24425:17;:::i;:::-;:26;;;;:::i;:::-;24412:9;:39;;24404:105;;;::::0;-1:-1:-1;;;24404:105:0;;8476:2:1;24404:105:0::1;::::0;::::1;8458:21:1::0;8515:2;8495:18;;;8488:30;8554:34;8534:18;;;8527:62;-1:-1:-1;;;8605:18:1;;;8598:51;8666:19;;24404:105:0::1;8274:417:1::0;24404:105:0::1;24565:4;24545:13;6355:12:::0;;;6263:116;24545:13:::1;:17;::::0;24561:1:::1;24545:17;:::i;:::-;:24;;;;:::i;:::-;24532:9;:37;;24524:102;;;::::0;-1:-1:-1;;;24524:102:0;;8898:2:1;24524:102:0::1;::::0;::::1;8880:21:1::0;8937:2;8917:18;;;8910:30;8976:34;8956:18;;;8949:62;-1:-1:-1;;;9027:18:1;;;9020:50;9087:19;;24524:102:0::1;8696:416:1::0;24524:102:0::1;-1:-1:-1::0;24641:18:0::1;:30:::0;;;24693:4:::1;12316:1;24303:410:::0;;;:::o;12511:260::-;12242:6;;-1:-1:-1;;;;;12242:6:0;945:10;12242:22;12234:67;;;;-1:-1:-1;;;12234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12604:22:0;::::1;12596:73;;;::::0;-1:-1:-1;;;12596:73:0;;9319:2:1;12596:73:0::1;::::0;::::1;9301:21:1::0;9358:2;9338:18;;;9331:30;9397:34;9377:18;;;9370:62;-1:-1:-1;;;9448:18:1;;;9441:36;9494:19;;12596:73:0::1;9117:402:1::0;12596:73:0::1;12710:6;::::0;12689:38:::1;::::0;-1:-1:-1;;;;;12689:38:0;;::::1;::::0;12710:6:::1;::::0;12689:38:::1;::::0;12710:6:::1;::::0;12689:38:::1;12742:6;:17:::0;;-1:-1:-1;;;;;;12742:17:0::1;-1:-1:-1::0;;;;;12742:17:0;;;::::1;::::0;;;::::1;::::0;;12511:260::o;10158:197::-;10216:7;;10252:5;10256:1;10252;:5;:::i;:::-;10240:17;;10285:1;10280;:6;;10272:46;;;;-1:-1:-1;;;10272:46:0;;9726:2:1;10272:46:0;;;9708:21:1;9765:2;9745:18;;;9738:30;9804:29;9784:18;;;9777:57;9851:18;;10272:46:0;9524:351:1;10272:46:0;10342:1;10158:197;-1:-1:-1;;;10158:197:0:o;9532:418::-;-1:-1:-1;;;;;9690:19:0;;9682:68;;;;-1:-1:-1;;;9682:68:0;;10082:2:1;9682:68:0;;;10064:21:1;10121:2;10101:18;;;10094:30;10160:34;10140:18;;;10133:62;-1:-1:-1;;;10211:18:1;;;10204:34;10255:19;;9682:68:0;9880:400:1;9682:68:0;-1:-1:-1;;;;;9773:21:0;;9765:68;;;;-1:-1:-1;;;9765:68:0;;10487:2:1;9765:68:0;;;10469:21:1;10526:2;10506:18;;;10499:30;10565:34;10545:18;;;10538:62;-1:-1:-1;;;10616:18:1;;;10609:32;10658:19;;9765:68:0;10285:398:1;9765:68:0;-1:-1:-1;;;;;9850:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9906:32;;2105:25:1;;;9906:32:0;;2078:18:1;9906:32:0;;;;;;;;9532:418;;;:::o;27306:3354::-;-1:-1:-1;;;;;27458:18:0;;27450:68;;;;-1:-1:-1;;;27450:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27541:16:0;;27533:64;;;;-1:-1:-1;;;27533:64:0;;;;;;;:::i;:::-;27629:11;27626:104;;27661:28;27677:4;27683:2;27687:1;27661:15;:28::i;:::-;27306:3354;;;:::o;27626:104::-;12168:6;;-1:-1:-1;;;;;27774:15:0;;;12168:6;;27774:15;;;;:55;;-1:-1:-1;12168:6:0;;-1:-1:-1;;;;;27816:13:0;;;12168:6;;27816:13;;27774:55;:96;;;;-1:-1:-1;;;;;;27854:16:0;;;;27774:96;:142;;;;-1:-1:-1;;;;;;27895:21:0;;27909:6;27895:21;;27774:142;:176;;;;-1:-1:-1;27942:8:0;;-1:-1:-1;;;27942:8:0;;;;27941:9;27774:176;27748:934;;;-1:-1:-1;;;;;28028:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;28064:35:0;;;;;;:31;:35;;;;;;;;28063:36;28028:71;28024:639;;;28150:20;;28140:6;:30;;28132:96;;;;-1:-1:-1;;;28132:96:0;;11700:2:1;28132:96:0;;;11682:21:1;11739:2;11719:18;;;11712:30;11778:34;11758:18;;;11751:62;-1:-1:-1;;;11829:18:1;;;11822:51;11890:19;;28132:96:0;11498:417:1;28132:96:0;28293:9;;-1:-1:-1;;;;;6496:18:0;;6465:7;6496:18;;;;;;;;;;;28267:22;;:6;:22;:::i;:::-;:35;;28259:67;;;;-1:-1:-1;;;28259:67:0;;12122:2:1;28259:67:0;;;12104:21:1;12161:2;12141:18;;;12134:30;-1:-1:-1;;;12180:18:1;;;12173:49;12239:18;;28259:67:0;11920:343:1;28259:67:0;28024:639;;;-1:-1:-1;;;;;28438:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;28472:37:0;;;;;;:31;:37;;;;;;;;28471:38;28438:71;28434:229;;;28560:20;;28550:6;:30;;28542:97;;;;-1:-1:-1;;;28542:97:0;;12470:2:1;28542:97:0;;;12452:21:1;12509:2;12489:18;;;12482:30;12548:34;12528:18;;;12521:62;-1:-1:-1;;;12599:18:1;;;12592:52;12661:19;;28542:97:0;12268:418:1;28542:97:0;28745:4;28696:28;6496:18;;;;;;;;;;;28805;;28781:42;;;;;;;28862:39;;-1:-1:-1;28890:11:0;;;;28862:39;:69;;;;-1:-1:-1;28923:8:0;;-1:-1:-1;;;28923:8:0;;;;28922:9;28862:69;:122;;;;-1:-1:-1;;;;;;28953:31:0;;;;;;:25;:31;;;;;;;;28952:32;28862:122;:169;;;;-1:-1:-1;;;;;;29006:25:0;;;;;;:19;:25;;;;;;;;29005:26;28862:169;:214;;;;-1:-1:-1;;;;;;29053:23:0;;;;;;:19;:23;;;;;;;;29052:24;28862:214;28840:367;;;29111:8;:15;;-1:-1:-1;;;;29111:15:0;-1:-1:-1;;;29111:15:0;;;29146:10;:8;:10::i;:::-;29175:8;:16;;-1:-1:-1;;;;29175:16:0;;;28840:367;29237:8;;-1:-1:-1;;;;;29267:25:0;;29221:12;29267:25;;;:19;:25;;;;;;29237:8;-1:-1:-1;;;29237:8:0;;;;;29236:9;;29267:25;;:52;;-1:-1:-1;;;;;;29296:23:0;;;;;;:19;:23;;;;;;;;29267:52;29264:107;;;-1:-1:-1;29350:5:0;29264:107;29385:12;29419:7;29416:1185;;;-1:-1:-1;;;;;29450:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29499:1;29483:13;;:17;29450:50;29446:779;;;29531:34;29561:3;29531:25;29542:13;;29531:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;29524:41;;29636:13;;29617:16;;29610:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29588:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29720:13:0;;29701:16;;29694:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;29672:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29794:13:0;;29780:11;;29773:18;;:4;:18;:::i;:::-;:34;;;;:::i;:::-;29756:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;29446:779:0;;-1:-1:-1;29446:779:0;;-1:-1:-1;;;;;29853:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29903:1;29888:12;;:16;29853:51;29850:375;;;29936:33;29965:3;29936:24;29947:12;;29936:6;:10;;:24;;;;:::i;:33::-;29929:40;;30039:12;;30021:15;;30014:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29992:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;30121:12:0;;30103:15;;30096:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;30074:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;30193:12:0;;30180:10;;30173:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;30156:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;29850:375:0;30264:8;;30261:119;;30300:60;30316:4;30330;30345:13;;30338:4;:20;;;;:::i;:::-;30300:15;:60::i;:::-;30403:13;;:17;30400:153;;30444:49;30460:4;19925:6;30479:13;;30444:15;:49::i;:::-;30532:1;30516:13;:17;30400:153;30571:14;30581:4;30571:14;;:::i;:::-;;;29416:1185;30615:33;30631:4;30637:2;30641:6;30615:15;:33::i;:::-;27435:3225;;;;27306:3354;;;:::o;10525:210::-;10611:7;10651:12;10643:6;;;;10635:29;;;;-1:-1:-1;;;10635:29:0;;;;;;;;:::i;:::-;-1:-1:-1;10679:9:0;10691:5;10695:1;10691;:5;:::i;:::-;10679:17;10525:210;-1:-1:-1;;;;;10525:210:0:o;26951:198::-;-1:-1:-1;;;;;27038:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;27038:39:0;;;;;;;;;;27097:40;;27038:39;;:31;27097:40;;;26951:198;;:::o;8039:619::-;-1:-1:-1;;;;;8205:20:0;;8197:70;;;;-1:-1:-1;;;8197:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8290:23:0;;8282:71;;;;-1:-1:-1;;;8282:71:0;;;;;;;:::i;:::-;8450;8472:6;8450:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8450:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;8430:17:0;;;:9;:17;;;;;;;;;;;:91;;;;8559:20;;;;;;;:32;;8584:6;8559:24;:32::i;:::-;-1:-1:-1;;;;;8536:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;8611:35;2105:25:1;;;8536:20:0;;8611:35;;;;;;2078:18:1;8611:35:0;1959:177:1;31619:1330:0;31706:4;31662:23;6496:18;;;;;;;;;;;31662:50;;31727:25;31776:18;;31755;;:39;;;;:::i;:::-;31727:67;-1:-1:-1;31826:20:0;;;:46;;-1:-1:-1;31850:22:0;;31826:46;31823:60;;;31875:7;;31619:1330::o;31823:60::-;31897:23;31982:1;31962:17;31941:18;;31923:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;31897:86;-1:-1:-1;31998:26:0;32027:36;:15;31897:86;32027:19;:36::i;:::-;31998:65;-1:-1:-1;32106:21:0;32142:36;31998:65;32142:16;:36::i;:::-;32194:18;32215:44;:21;32241:17;32215:25;:44::i;:::-;32194:65;;32274:23;32300:57;32339:17;32300:34;32315:18;;32300:10;:14;;:34;;;;:::i;:57::-;32274:83;-1:-1:-1;32374:23:0;32400:28;32274:83;32400:10;:28;:::i;:::-;32466:1;32445:18;:22;;;32482:18;:22;;;32559:15;;32551:57;;32374:54;;-1:-1:-1;32466:1:0;;-1:-1:-1;;;;;32559:15:0;;;;32588;;32466:1;32551:57;32466:1;32551:57;32588:15;32559;32551:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32533:75;;;32644:1;32626:15;:19;:42;;;;;32667:1;32649:15;:19;32626:42;32623:222;;;32688:46;32701:15;32718;32688:12;:46::i;:::-;32810:18;;32758:71;;;13233:25:1;;;13289:2;13274:18;;13267:34;;;13317:18;;;13310:34;;;;32758:71:0;;;;;;13221:2:1;32758:71:0;;;32623:222;32882:15;;32874:63;;-1:-1:-1;;;;;32882:15:0;;;;32911:21;;32874:63;;;;32911:21;32882:15;32874:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;31619:1330:0:o;10747:276::-;10805:7;10833:6;10829:55;;-1:-1:-1;10867:1:0;10860:8;;10829:55;10898:9;10910:5;10914:1;10910;:5;:::i;:::-;10898:17;-1:-1:-1;10947:1:0;10938:5;10942:1;10898:17;10938:5;:::i;:::-;:10;10930:56;;;;-1:-1:-1;;;10930:56:0;;13557:2:1;10930:56:0;;;13539:21:1;13596:2;13576:18;;;13569:30;13635:34;13615:18;;;13608:62;-1:-1:-1;;;13686:18:1;;;13679:31;13727:19;;10930:56:0;13355:397:1;11035:140:0;11093:7;11124:39;11128:1;11131;11124:39;;;;;;;;;;;;;;;;;:3;:39::i;10367:144::-;10425:7;10456:43;10460:1;10463;10456:43;;;;;;;;;;;;;;;;;:3;:43::i;30672:521::-;30766:16;;;30780:1;30766:16;;;;;;;;30742:21;;30766:16;;;;;;;;;;-1:-1:-1;30766:16:0;30742:40;;30815:4;30797;30802:1;30797:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;30797:23:0;;;-1:-1:-1;;;;;30797:23:0;;;;;30847:15;-1:-1:-1;;;;;30847:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30837:4;30842:1;30837:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;30837:32:0;;;-1:-1:-1;;;;;30837:32:0;;;;;30884:62;30901:4;30916:15;30934:11;30884:8;:62::i;:::-;30961:220;;-1:-1:-1;;;30961:220:0;;-1:-1:-1;;;;;30961:15:0;:66;;;;:220;;31046:11;;31076:1;;31096:4;;31127;;31151:15;;30961:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31203:404;31288:62;31305:4;31320:15;31338:11;31288:8;:62::i;:::-;31365:230;;-1:-1:-1;;;31365:230:0;;31441:4;31365:230;;;15603:34:1;15653:18;;;15646:34;;;31495:1:0;15696:18:1;;;15689:34;;;15739:18;;;15732:34;19925:6:0;15782:19:1;;;15775:44;31565:15:0;15835:19:1;;;15828:35;31365:15:0;-1:-1:-1;;;;;31365:31:0;;;;31404:9;;15537:19:1;;31365:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31203:404;;:::o;11187:205::-;11273:7;11312:12;11305:5;11297:28;;;;-1:-1:-1;;;11297:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11340:9:0;11352:5;11356:1;11352;:5;:::i;222:597:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;824:131::-;-1:-1:-1;;;;;899:31:1;;889:42;;879:70;;945:1;942;935:12;879:70;824:131;:::o;960:315::-;1028:6;1036;1089:2;1077:9;1068:7;1064:23;1060:32;1057:52;;;1105:1;1102;1095:12;1057:52;1144:9;1131:23;1163:31;1188:5;1163:31;:::i;:::-;1213:5;1265:2;1250:18;;;;1237:32;;-1:-1:-1;;;960:315:1:o;1472:247::-;1531:6;1584:2;1572:9;1563:7;1559:23;1555:32;1552:52;;;1600:1;1597;1590:12;1552:52;1639:9;1626:23;1658:31;1683:5;1658:31;:::i;2141:456::-;2218:6;2226;2234;2287:2;2275:9;2266:7;2262:23;2258:32;2255:52;;;2303:1;2300;2293:12;2255:52;2342:9;2329:23;2361:31;2386:5;2361:31;:::i;:::-;2411:5;-1:-1:-1;2468:2:1;2453:18;;2440:32;2481:33;2440:32;2481:33;:::i;:::-;2141:456;;2533:7;;-1:-1:-1;;;2587:2:1;2572:18;;;;2559:32;;2141:456::o;2791:160::-;2856:20;;2912:13;;2905:21;2895:32;;2885:60;;2941:1;2938;2931:12;2956:315;3021:6;3029;3082:2;3070:9;3061:7;3057:23;3053:32;3050:52;;;3098:1;3095;3088:12;3050:52;3137:9;3124:23;3156:31;3181:5;3156:31;:::i;:::-;3206:5;-1:-1:-1;3230:35:1;3261:2;3246:18;;3230:35;:::i;:::-;3220:45;;2956:315;;;;;:::o;3276:180::-;3332:6;3385:2;3373:9;3364:7;3360:23;3356:32;3353:52;;;3401:1;3398;3391:12;3353:52;3424:26;3440:9;3424:26;:::i;3461:523::-;3565:6;3573;3581;3589;3597;3605;3658:3;3646:9;3637:7;3633:23;3629:33;3626:53;;;3675:1;3672;3665:12;3626:53;-1:-1:-1;;3698:23:1;;;3768:2;3753:18;;3740:32;;-1:-1:-1;3819:2:1;3804:18;;3791:32;;3870:2;3855:18;;3842:32;;-1:-1:-1;3921:3:1;3906:19;;3893:33;;-1:-1:-1;3973:3:1;3958:19;3945:33;;-1:-1:-1;3461:523:1;-1:-1:-1;3461:523:1:o;3989:248::-;4057:6;4065;4118:2;4106:9;4097:7;4093:23;4089:32;4086:52;;;4134:1;4131;4124:12;4086:52;-1:-1:-1;;4157:23:1;;;4227:2;4212:18;;;4199:32;;-1:-1:-1;3989:248:1:o;4242:180::-;4301:6;4354:2;4342:9;4333:7;4329:23;4325:32;4322:52;;;4370:1;4367;4360:12;4322:52;-1:-1:-1;4393:23:1;;4242:180;-1:-1:-1;4242:180:1:o;4427:388::-;4495:6;4503;4556:2;4544:9;4535:7;4531:23;4527:32;4524:52;;;4572:1;4569;4562:12;4524:52;4611:9;4598:23;4630:31;4655:5;4630:31;:::i;:::-;4680:5;-1:-1:-1;4737:2:1;4722:18;;4709:32;4750:33;4709:32;4750:33;:::i;:::-;4802:7;4792:17;;;4427:388;;;;;:::o;4820:380::-;4899:1;4895:12;;;;4942;;;4963:61;;5017:4;5009:6;5005:17;4995:27;;4963:61;5070:2;5062:6;5059:14;5039:18;5036:38;5033:161;;;5116:10;5111:3;5107:20;5104:1;5097:31;5151:4;5148:1;5141:15;5179:4;5176:1;5169:15;5033:161;;4820:380;;;:::o;5205:356::-;5407:2;5389:21;;;5426:18;;;5419:30;5485:34;5480:2;5465:18;;5458:62;5552:2;5537:18;;5205:356::o;5566:127::-;5627:10;5622:3;5618:20;5615:1;5608:31;5658:4;5655:1;5648:15;5682:4;5679:1;5672:15;5698:128;5738:3;5769:1;5765:6;5762:1;5759:13;5756:39;;;5775:18;;:::i;:::-;-1:-1:-1;5811:9:1;;5698:128::o;7062:168::-;7102:7;7168:1;7164;7160:6;7156:14;7153:1;7150:21;7145:1;7138:9;7131:17;7127:45;7124:71;;;7175:18;;:::i;:::-;-1:-1:-1;7215:9:1;;7062:168::o;7235:217::-;7275:1;7301;7291:132;;7345:10;7340:3;7336:20;7333:1;7326:31;7380:4;7377:1;7370:15;7408:4;7405:1;7398:15;7291:132;-1:-1:-1;7437:9:1;;7235:217::o;10688:401::-;10890:2;10872:21;;;10929:2;10909:18;;;10902:30;10968:34;10963:2;10948:18;;10941:62;-1:-1:-1;;;11034:2:1;11019:18;;11012:35;11079:3;11064:19;;10688:401::o;11094:399::-;11296:2;11278:21;;;11335:2;11315:18;;;11308:30;11374:34;11369:2;11354:18;;11347:62;-1:-1:-1;;;11440:2:1;11425:18;;11418:33;11483:3;11468:19;;11094:399::o;12691:125::-;12731:4;12759:1;12756;12753:8;12750:34;;;12764:18;;:::i;:::-;-1:-1:-1;12801:9:1;;12691:125::o;13889:127::-;13950:10;13945:3;13941:20;13938:1;13931:31;13981:4;13978:1;13971:15;14005:4;14002:1;13995:15;14021:251;14091:6;14144:2;14132:9;14123:7;14119:23;14115:32;14112:52;;;14160:1;14157;14150:12;14112:52;14192:9;14186:16;14211:31;14236:5;14211:31;:::i;14277:980::-;14539:4;14587:3;14576:9;14572:19;14618:6;14607:9;14600:25;14644:2;14682:6;14677:2;14666:9;14662:18;14655:34;14725:3;14720:2;14709:9;14705:18;14698:31;14749:6;14784;14778:13;14815:6;14807;14800:22;14853:3;14842:9;14838:19;14831:26;;14892:2;14884:6;14880:15;14866:29;;14913:1;14923:195;14937:6;14934:1;14931:13;14923:195;;;15002:13;;-1:-1:-1;;;;;14998:39:1;14986:52;;15093:15;;;;15058:12;;;;15034:1;14952:9;14923:195;;;-1:-1:-1;;;;;;;15174:32:1;;;;15169:2;15154:18;;15147:60;-1:-1:-1;;;15238:3:1;15223:19;15216:35;15135:3;14277:980;-1:-1:-1;;;14277:980:1:o;15874:306::-;15962:6;15970;15978;16031:2;16019:9;16010:7;16006:23;16002:32;15999:52;;;16047:1;16044;16037:12;15999:52;16076:9;16070:16;16060:26;;16126:2;16115:9;16111:18;16105:25;16095:35;;16170:2;16159:9;16155:18;16149:25;16139:35;;15874:306;;;;;:::o

Swarm Source

ipfs://33c0764a5d11ca6f5c5ffc05acd8a8d556fe1075d2d54ae3ba21b10eb5c584d7
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.