ETH Price: $2,301.98 (+1.63%)

Token

CHAOSTIC (CHAOSTIC)
 

Overview

Max Total Supply

1,000,000,000 CHAOSTIC

Holders

33

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,000,000 CHAOSTIC

Value
$0.00
0xb49617b323f42132afa3f211c99ceaad6dfd46c7
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:
CHAOSTIC

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-21
*/

/**
  ___  _  _   __    __   ____  ____  __  ___ 
 / __)/ )( \ / _\  /  \ / ___)(_  _)(  )/ __)
( (__ ) __ (/    \(  O )\___ \  )(   )(( (__ 
 \___)\_)(_/\_/\_/ \__/ (____/ (__) (__)\___)

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

interface IBEP20 {
    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 IBEP20Metadata is IBEP20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address 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,
                "BEP20: 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,
                "BEP20: decreased allowance below zero"));
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: 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), "BEP20: 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 _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 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 (uint256);

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

    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out,
               uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

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

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract CHAOSTIC is BEP20, Ownable { // 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 0;
    uint256 internal buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; //
    address payable public devWallet; //

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    bool public swapAndLiquifyEnabled = true;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = false; 
    uint256 private gasPriceLimit = 7 * 1 gwei; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public launchtimestamp; // FOR LAUNCH TIMESTAMP 
    uint256 public cooldowntimer = 5; // DEFAULT COOLDOWN TIMER

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDevWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee, uint256 buyDevFee, uint256 sellDevFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() BEP20("CHAOSTIC", "CHAOSTIC") { // 
        marketingWallet = payable(0xecd253C7B1c59ECDA363d7C91c8E79a1Db00dBe5); // 
        devWallet = payable(0xecd253C7B1c59ECDA363d7C91c8E79a1Db00dBe5); // 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 3;
        sellMarketingFees = 3;
        buyBurnFee = 0;
        sellBurnFee = 0;
        buyDevFee = 0;
        sellDevFee = 0;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyMarketingFees.add(buyDevFee);
        totalSellFees = sellMarketingFees.add(sellDevFee);

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), uniswapV2Router.WETH());

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 totalSupply = (1_000_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply
        maxWallet = _totalSupply / 50; // 2%
        swapTokensAtAmount = _totalSupply / 100; // 0.7%;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

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

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDevWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        devWallet = payable(wallet);
        emit updateDevWallet(wallet);
    }
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 100, "max wallet cannot be set to less than 1%");
        maxWallet = value;
    }

    // TAKES ALL BNB FROM THE CONTRACT ADDRESS AND SENDS IT TO OWNERS WALLET
    function Sweep() external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // THIS IS THE ONE YOU USE TO TRASNFER OWNER IF U EVER DO
    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

        totalSellFees = sellMarketingFees.add(sellDevFee);
        totalBuyFees = buyMarketingFees.add(buyDevFee);

        // 
        require(totalSellFees <= 99 && totalBuyFees <= 99, "t");

        emit UpdateFees(sellMarketingFees, sellBurnFee, sellDevFee, buyMarketingFees,
                        buyBurnFee, buyDevFee);
    }

    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), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 burnFee;
        uint256 devFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
                devFee = buyDevFee;

                if (limitsInEffect) {
                require(block.number > launchblock + 0,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferBlock[tx.origin] = block.number;
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
            }

            if (maxWalletEnabled) {
            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWallet,
                    "Exceeds maximum wallet token amount." );
            }
            }

            uint256 totalFees = marketingFees.add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                swapping = true;
             
                uint256 swapBalance = swapTokensAtAmount;
                swapAndSendDividends(swapBalance);
                buyAmount = 0;
                sellAmount = 0;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens = amount.mul(burnFee).div(100);

            amount = amount.sub(fees + burntokens);

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }
           
        }

        super._transfer(from, to, amount);
        
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    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, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _marketDevTotal = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee);

        uint256 feePortions;
        if (_marketDevTotal > 0) {
            feePortions = address(this).balance.div(_marketDevTotal);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }
        
        if (devPayout > 0) {
            (successOp1, ) = address(devWallet).call{value: devPayout}("");
        }

        emit SendDividends(
            marketingPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"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":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","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":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","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":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","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":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","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":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","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":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"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":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600161ff0160a01b03191661dead17905560006009819055600a556010805460ff199081166001908117909255601880548216909217909155601c805490911690556401a13b8600601d5560056022553480156200006557600080fd5b506040805180820182526008808252674348414f5354494360c01b602080840182815285518087019096529285528401528151919291620000a99160039162000637565b508051620000bf90600490602084019062000637565b5050506000620000d46200047560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d805473ecd253c7b1c59ecda363d7c91c8e79a1db00dbe56001600160a01b03199182168117909255600e8054909116909117905560036014819055601281905560006015819055601381905560168190556017819055737a250d5630b4cf539739df2c5dacb4c659f2488d91620001a79162000479602090811b6200161017901c565b600c81905550620001cb6017546012546200047960201b620016101790919060201c565b600b55600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000228573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024e9190620006dd565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d79190620006dd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034b9190620006dd565b600780546001600160a01b0319166001600160a01b0392909216918217905562000377906001620004e7565b306000908152601960205260408082208054600160ff1991821681179092553384528284208054821683179055600d546001600160a01b0316845291909220805490911690911790556b033b2e3c9fd0803ce8000000620003eb620003e46005546001600160a01b031690565b826200053b565b6032600254620003fc919062000708565b600f55600254620004109060649062000708565b6011556001601b60006200042c6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601b909252902080549091166001179055506200078e9050565b3390565b6000806200048883856200072b565b905083811015620004e05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b9392505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620005935760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004d7565b620005af816002546200047960201b620016101790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620005e29183906200161062000479821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620006459062000752565b90600052602060002090601f016020900481019282620006695760008555620006b4565b82601f106200068457805160ff1916838001178555620006b4565b82800160010185558215620006b4579182015b82811115620006b457825182559160200191906001019062000697565b50620006c2929150620006c6565b5090565b5b80821115620006c25760008155600101620006c7565b600060208284031215620006f057600080fd5b81516001600160a01b0381168114620004e057600080fd5b6000826200072657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200074d57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200076757607f821691505b6020821081036200078857634e487b7160e01b600052602260045260246000fd5b50919050565b6129a1806200079e6000396000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063a614ff75116100f7578063d5e3725111610095578063e71dc3f51161006f578063e71dc3f514610942578063f2fde38b14610958578063f8b45b0514610978578063fc6b151c1461098e57600080fd5b8063d5e37251146108c6578063dd62ed3e146108e6578063e2f456051461092c57600080fd5b8063b4942988116100d1578063b494298814610846578063b62496f51461085c578063b74e3b111461088c578063d045a329146108ac57600080fd5b8063a614ff75146107f0578063a9059cbb14610810578063adb873bd1461083057600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107845780639c3b4fdc146107a4578063a0d82dc5146107ba578063a457c2d7146107d057600080fd5b806395451c291461073957806395d89b411461074f578063992c58e41461076457600080fd5b806375f0a874146106905780637fdde05c146106b05780638a8c523c146106d05780638c3c82b2146106e55780638da5cb5b146106fb5780638ea5220f1461071957600080fd5b806349bd5a5e1161026a5780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461061057806370a0823114610625578063715018a61461065b57806375829def1461067057600080fd5b80635d098b38146105b05780635eee4bae146105d0578063679ca6e9146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b806318160ddd116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b806318160ddd1461041b5780631d7b1fb41461043a5780631f53ac021461045057600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab578063095ea7b3146103cb5780631694505e146103fb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b506103876103823660046123c0565b6109ae565b005b34801561039557600080fd5b5061039e610a7f565b60405161035e91906123d9565b3480156103b757600080fd5b506103876103c6366004612458565b610b11565b3480156103d757600080fd5b506103eb6103e636600461248d565b610b9a565b604051901515815260200161035e565b34801561040757600080fd5b5060065461034a906001600160a01b031681565b34801561042757600080fd5b506002545b60405190815260200161035e565b34801561044657600080fd5b5061042c60225481565b34801561045c57600080fd5b5061038761046b3660046124b9565b610bb1565b34801561047c57600080fd5b5061038761048b3660046125ac565b610c48565b34801561049c57600080fd5b506103eb6104ab36600461266e565b610da0565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b506103eb6104e736600461248d565b610e09565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601c546103eb9060ff1681565b34801561053257600080fd5b506018546103eb9060ff1681565b34801561054c57600080fd5b506008546103eb90600160a81b900460ff1681565b34801561056d57600080fd5b506103eb61057c3660046124b9565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105a657600080fd5b5061042c60145481565b3480156105bc57600080fd5b506103876105cb3660046124b9565b610e3f565b3480156105dc57600080fd5b506103876105eb3660046123c0565b610ecf565b3480156105fc57600080fd5b5061038761060b3660046126af565b610f11565b34801561061c57600080fd5b50610387610f4e565b34801561063157600080fd5b5061042c6106403660046124b9565b6001600160a01b031660009081526020819052604090205490565b34801561066757600080fd5b50610387610fab565b34801561067c57600080fd5b5061038761068b3660046124b9565b61101f565b34801561069c57600080fd5b50600d5461034a906001600160a01b031681565b3480156106bc57600080fd5b506103876106cb366004612458565b611090565b3480156106dc57600080fd5b506103876110e5565b3480156106f157600080fd5b5061042c60215481565b34801561070757600080fd5b506005546001600160a01b031661034a565b34801561072557600080fd5b50600e5461034a906001600160a01b031681565b34801561074557600080fd5b5061042c60125481565b34801561075b57600080fd5b5061039e61116c565b34801561077057600080fd5b5061038761077f3660046126ca565b61117b565b34801561079057600080fd5b5061038761079f366004612458565b611294565b3480156107b057600080fd5b5061042c60165481565b3480156107c657600080fd5b5061042c60175481565b3480156107dc57600080fd5b506103eb6107eb36600461248d565b6112c8565b3480156107fc57600080fd5b5061038761080b3660046126af565b611317565b34801561081c57600080fd5b506103eb61082b36600461248d565b611354565b34801561083c57600080fd5b5061042c60135481565b34801561085257600080fd5b5061042c60205481565b34801561086857600080fd5b506103eb6108773660046124b9565b601a6020526000908152604090205460ff1681565b34801561089857600080fd5b506103876108a73660046123c0565b611361565b3480156108b857600080fd5b506010546103eb9060ff1681565b3480156108d257600080fd5b506103876108e13660046126af565b6113f1565b3480156108f257600080fd5b5061042c61090136600461270d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093857600080fd5b5061042c60115481565b34801561094e57600080fd5b5061042c60155481565b34801561096457600080fd5b506103876109733660046124b9565b611473565b34801561098457600080fd5b5061042c600f5481565b34801561099a57600080fd5b506103876109a93660046123c0565b61155e565b6005546001600160a01b031633146109e15760405162461bcd60e51b81526004016109d890612746565b60405180910390fd5b6109f381670de0b6b3a7640000612791565b90506000610a0e600954600a5461161090919063ffffffff16565b90506000610a3182610a2b600a548661167690919063ffffffff16565b906116f8565b90506000610a4e83610a2b6009548761167690919063ffffffff16565b9050610a598461173a565b600a54610a6690836118eb565b600a55600954610a7690826118eb565b60095550505050565b606060038054610a8e906127b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906127b0565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b3b5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000610ba733848461192d565b5060015b92915050565b6005546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa91015b60405180910390a150565b6005546001600160a01b03163314610c725760405162461bcd60e51b81526004016109d890612746565b8051825114610cc35760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109d8565b60c882511115610d205760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109d8565b60005b8251811015610d9b576000838281518110610d4057610d406127ea565b602002602001015190506000838381518110610d5e57610d5e6127ea565b6020026020010151670de0b6b3a7640000610d799190612791565b9050610d86338383611a52565b50508080610d9390612800565b915050610d23565b505050565b6000610dad848484611bd5565b610dff8433610dfa856040518060600160405280602881526020016128f9602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121b2565b61192d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba7918590610dfa9086611610565b6005546001600160a01b03163314610e695760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610c3d565b6005546001600160a01b03163314610ef95760405162461bcd60e51b81526004016109d890612746565b610f0b81670de0b6b3a7640000612791565b60115550565b6005546001600160a01b03163314610f3b5760405162461bcd60e51b81526004016109d890612746565b601c805460ff1916911515919091179055565b6005546001600160a01b03163314610f785760405162461bcd60e51b81526004016109d890612746565b6040514790339082156108fc029083906000818181858888f19350505050158015610fa7573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b81526004016109d890612746565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110495760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b90935292208054909116909117905561108d81611473565b50565b6005546001600160a01b031633146110ba5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110f5760405162461bcd60e51b81526004016109d890612746565b600854600160a81b900460ff161561112657600080fd5b6008805460ff60a81b1916600160a81b17905543602055426021556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b606060048054610a8e906127b0565b6005546001600160a01b031633146111a55760405162461bcd60e51b81526004016109d890612746565b6014869055601584905560128590556013839055601682905560178190556111cd8582611610565b600b556016546014546111df91611610565b600c55600b546063108015906111f857506063600c5411155b6112285760405162461bcd60e51b81526020600482015260016024820152601d60fa1b60448201526064016109d8565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146112be5760405162461bcd60e51b81526004016109d890612746565b610fa782826121ec565b6000610ba73384610dfa85604051806060016040528060258152602001612947602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121b2565b6005546001600160a01b031633146113415760405162461bcd60e51b81526004016109d890612746565b6010805460ff1916911515919091179055565b6000610ba7338484611bd5565b6005546001600160a01b0316331461138b5760405162461bcd60e51b81526004016109d890612746565b61012c8111156113ec5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109d8565b602255565b6005546001600160a01b0316331461141b5760405162461bcd60e51b81526004016109d890612746565b60185481151560ff90911615150361143257600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610c3d565b6005546001600160a01b0316331461149d5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b0381166115025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115885760405162461bcd60e51b81526004016109d890612746565b61159a81670de0b6b3a7640000612791565b905060646002546115ab9190612819565b81101561160b5760405162461bcd60e51b815260206004820152602860248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015267207468616e20312560c01b60648201526084016109d8565b600f55565b60008061161d838561283b565b90508381101561166f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109d8565b9392505050565b60008260000361168857506000610bab565b60006116948385612791565b9050826116a18583612819565b1461166f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109d8565b600061166f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612240565b806000036117455750565b61174e8161226e565b60165460145460019182916000916117669190611610565b60175460125461177591611610565b61177f919061283b565b9050600081156117965761179347836116f8565b90505b6000816117b060125460145461161090919063ffffffff16565b6117ba9190612791565b90506000826117d660175460165461161090919063ffffffff16565b6117e09190612791565b9050811561184057600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611835576040519150601f19603f3d011682016040523d82523d6000602084013e61183a565b606091505b50909650505b801561189e57600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611893576040519150601f19603f3d011682016040523d82523d6000602084013e611898565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9828780156118ca5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061166f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b2565b6001600160a01b03831661198f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0382166119f05760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ab65760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109d8565b6001600160a01b038216611b185760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109d8565b611b5581604051806060016040528060268152602001612921602691396001600160a01b03861660009081526020819052604090205491906121b2565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611b849082611610565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a45565b6001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6001600160a01b038216611c9c5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0383166000908152601b60205260408120548190819060ff16611d1957600854600160a81b900460ff16611d195760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109d8565b83600003611d3557611d2d86866000611a52565b505050505050565b600854600160a01b900460ff16158015611d6857506001600160a01b03861660009081526019602052604090205460ff16155b8015611d8d57506001600160a01b03851660009081526019602052604090205460ff16155b156121a7576001600160a01b0385166000908152601a602052604090205460ff168015611e4d57601254601354601754601c54929650909450925060ff1615611e4857602254326000908152601f6020526040902054611ded919061283b565b421015611e355760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601f602052604090204290555b612074565b601454601554601654601c54929650909450925060ff1615611fe757602054611e7790600061283b565b4311611eba5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109d8565b601d543a1115611f0c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109d8565b326000908152601e6020526040902054439003611f625760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109d8565b602254326000908152601f6020526040902054611f7f919061283b565b421015611fc75760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601e60209081526040808320439055601f90915290204290555b60105460ff1615612074576001600160a01b038616600090815260208190526040902054600f54612018878361283b565b11156120725760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109d8565b505b60006120808584611610565b3060009081526020819052604090205460115491925090811080159081906120c157506001600160a01b038a166000908152601a602052604090205460ff16155b156120fe576008805460ff60a01b1916600160a01b1790556011546120e58161173a565b506000600a8190556009556008805460ff60a01b191690555b600061210f6064610a2b8b87611676565b905060006121226064610a2b8c8b611676565b9050612138612131828461283b565b8b906118eb565b995085156121555760095461214d9083611610565b600955612166565b600a546121629083611610565b600a555b6121718c3084611a52565b80156121a05760085461218f908d906001600160a01b031683611a52565b60025461219c90826118eb565b6002555b5050505050505b611d2d868686611a52565b600081848411156121d65760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612853565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836122615760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612819565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a3576122a36127ea565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612320919061286a565b81600181518110612333576123336127ea565b6001600160a01b039283166020918202929092010152600654612359913091168461192d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612392908590600090869030904290600401612887565b600060405180830381600087803b1580156123ac57600080fd5b505af1158015611d2d573d6000803e3d6000fd5b6000602082840312156123d257600080fd5b5035919050565b600060208083528351808285015260005b81811015612406578581018301518582016040015282016123ea565b81811115612418576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461108d57600080fd5b8035801515811461245357600080fd5b919050565b6000806040838503121561246b57600080fd5b82356124768161242e565b915061248460208401612443565b90509250929050565b600080604083850312156124a057600080fd5b82356124ab8161242e565b946020939093013593505050565b6000602082840312156124cb57600080fd5b813561166f8161242e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612515576125156124d6565b604052919050565b600067ffffffffffffffff821115612537576125376124d6565b5060051b60200190565b600082601f83011261255257600080fd5b813560206125676125628361251d565b6124ec565b82815260059290921b8401810191818101908684111561258657600080fd5b8286015b848110156125a1578035835291830191830161258a565b509695505050505050565b600080604083850312156125bf57600080fd5b823567ffffffffffffffff808211156125d757600080fd5b818501915085601f8301126125eb57600080fd5b813560206125fb6125628361251d565b82815260059290921b8401810191818101908984111561261a57600080fd5b948201945b838610156126415785356126328161242e565b8252948201949082019061261f565b9650508601359250508082111561265757600080fd5b5061266485828601612541565b9150509250929050565b60008060006060848603121561268357600080fd5b833561268e8161242e565b9250602084013561269e8161242e565b929592945050506040919091013590565b6000602082840312156126c157600080fd5b61166f82612443565b60008060008060008060c087890312156126e357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561272057600080fd5b823561272b8161242e565b9150602083013561273b8161242e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156127ab576127ab61277b565b500290565b600181811c908216806127c457607f821691505b6020821081036127e457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016128125761281261277b565b5060010190565b60008261283657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561284e5761284e61277b565b500190565b6000828210156128655761286561277b565b500390565b60006020828403121561287c57600080fd5b815161166f8161242e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d75784516001600160a01b0316835293830193918301916001016128b2565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202f1ec05f86c439ed3215a4c336a043eb4f78a2dabb3b81111323ae14d0baa02b64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063a614ff75116100f7578063d5e3725111610095578063e71dc3f51161006f578063e71dc3f514610942578063f2fde38b14610958578063f8b45b0514610978578063fc6b151c1461098e57600080fd5b8063d5e37251146108c6578063dd62ed3e146108e6578063e2f456051461092c57600080fd5b8063b4942988116100d1578063b494298814610846578063b62496f51461085c578063b74e3b111461088c578063d045a329146108ac57600080fd5b8063a614ff75146107f0578063a9059cbb14610810578063adb873bd1461083057600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107845780639c3b4fdc146107a4578063a0d82dc5146107ba578063a457c2d7146107d057600080fd5b806395451c291461073957806395d89b411461074f578063992c58e41461076457600080fd5b806375f0a874146106905780637fdde05c146106b05780638a8c523c146106d05780638c3c82b2146106e55780638da5cb5b146106fb5780638ea5220f1461071957600080fd5b806349bd5a5e1161026a5780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461061057806370a0823114610625578063715018a61461065b57806375829def1461067057600080fd5b80635d098b38146105b05780635eee4bae146105d0578063679ca6e9146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b806318160ddd116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b806318160ddd1461041b5780631d7b1fb41461043a5780631f53ac021461045057600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab578063095ea7b3146103cb5780631694505e146103fb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b506103876103823660046123c0565b6109ae565b005b34801561039557600080fd5b5061039e610a7f565b60405161035e91906123d9565b3480156103b757600080fd5b506103876103c6366004612458565b610b11565b3480156103d757600080fd5b506103eb6103e636600461248d565b610b9a565b604051901515815260200161035e565b34801561040757600080fd5b5060065461034a906001600160a01b031681565b34801561042757600080fd5b506002545b60405190815260200161035e565b34801561044657600080fd5b5061042c60225481565b34801561045c57600080fd5b5061038761046b3660046124b9565b610bb1565b34801561047c57600080fd5b5061038761048b3660046125ac565b610c48565b34801561049c57600080fd5b506103eb6104ab36600461266e565b610da0565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b506103eb6104e736600461248d565b610e09565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601c546103eb9060ff1681565b34801561053257600080fd5b506018546103eb9060ff1681565b34801561054c57600080fd5b506008546103eb90600160a81b900460ff1681565b34801561056d57600080fd5b506103eb61057c3660046124b9565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105a657600080fd5b5061042c60145481565b3480156105bc57600080fd5b506103876105cb3660046124b9565b610e3f565b3480156105dc57600080fd5b506103876105eb3660046123c0565b610ecf565b3480156105fc57600080fd5b5061038761060b3660046126af565b610f11565b34801561061c57600080fd5b50610387610f4e565b34801561063157600080fd5b5061042c6106403660046124b9565b6001600160a01b031660009081526020819052604090205490565b34801561066757600080fd5b50610387610fab565b34801561067c57600080fd5b5061038761068b3660046124b9565b61101f565b34801561069c57600080fd5b50600d5461034a906001600160a01b031681565b3480156106bc57600080fd5b506103876106cb366004612458565b611090565b3480156106dc57600080fd5b506103876110e5565b3480156106f157600080fd5b5061042c60215481565b34801561070757600080fd5b506005546001600160a01b031661034a565b34801561072557600080fd5b50600e5461034a906001600160a01b031681565b34801561074557600080fd5b5061042c60125481565b34801561075b57600080fd5b5061039e61116c565b34801561077057600080fd5b5061038761077f3660046126ca565b61117b565b34801561079057600080fd5b5061038761079f366004612458565b611294565b3480156107b057600080fd5b5061042c60165481565b3480156107c657600080fd5b5061042c60175481565b3480156107dc57600080fd5b506103eb6107eb36600461248d565b6112c8565b3480156107fc57600080fd5b5061038761080b3660046126af565b611317565b34801561081c57600080fd5b506103eb61082b36600461248d565b611354565b34801561083c57600080fd5b5061042c60135481565b34801561085257600080fd5b5061042c60205481565b34801561086857600080fd5b506103eb6108773660046124b9565b601a6020526000908152604090205460ff1681565b34801561089857600080fd5b506103876108a73660046123c0565b611361565b3480156108b857600080fd5b506010546103eb9060ff1681565b3480156108d257600080fd5b506103876108e13660046126af565b6113f1565b3480156108f257600080fd5b5061042c61090136600461270d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093857600080fd5b5061042c60115481565b34801561094e57600080fd5b5061042c60155481565b34801561096457600080fd5b506103876109733660046124b9565b611473565b34801561098457600080fd5b5061042c600f5481565b34801561099a57600080fd5b506103876109a93660046123c0565b61155e565b6005546001600160a01b031633146109e15760405162461bcd60e51b81526004016109d890612746565b60405180910390fd5b6109f381670de0b6b3a7640000612791565b90506000610a0e600954600a5461161090919063ffffffff16565b90506000610a3182610a2b600a548661167690919063ffffffff16565b906116f8565b90506000610a4e83610a2b6009548761167690919063ffffffff16565b9050610a598461173a565b600a54610a6690836118eb565b600a55600954610a7690826118eb565b60095550505050565b606060038054610a8e906127b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906127b0565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b3b5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000610ba733848461192d565b5060015b92915050565b6005546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa91015b60405180910390a150565b6005546001600160a01b03163314610c725760405162461bcd60e51b81526004016109d890612746565b8051825114610cc35760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109d8565b60c882511115610d205760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109d8565b60005b8251811015610d9b576000838281518110610d4057610d406127ea565b602002602001015190506000838381518110610d5e57610d5e6127ea565b6020026020010151670de0b6b3a7640000610d799190612791565b9050610d86338383611a52565b50508080610d9390612800565b915050610d23565b505050565b6000610dad848484611bd5565b610dff8433610dfa856040518060600160405280602881526020016128f9602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121b2565b61192d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba7918590610dfa9086611610565b6005546001600160a01b03163314610e695760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610c3d565b6005546001600160a01b03163314610ef95760405162461bcd60e51b81526004016109d890612746565b610f0b81670de0b6b3a7640000612791565b60115550565b6005546001600160a01b03163314610f3b5760405162461bcd60e51b81526004016109d890612746565b601c805460ff1916911515919091179055565b6005546001600160a01b03163314610f785760405162461bcd60e51b81526004016109d890612746565b6040514790339082156108fc029083906000818181858888f19350505050158015610fa7573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b81526004016109d890612746565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110495760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b90935292208054909116909117905561108d81611473565b50565b6005546001600160a01b031633146110ba5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110f5760405162461bcd60e51b81526004016109d890612746565b600854600160a81b900460ff161561112657600080fd5b6008805460ff60a81b1916600160a81b17905543602055426021556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b606060048054610a8e906127b0565b6005546001600160a01b031633146111a55760405162461bcd60e51b81526004016109d890612746565b6014869055601584905560128590556013839055601682905560178190556111cd8582611610565b600b556016546014546111df91611610565b600c55600b546063108015906111f857506063600c5411155b6112285760405162461bcd60e51b81526020600482015260016024820152601d60fa1b60448201526064016109d8565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146112be5760405162461bcd60e51b81526004016109d890612746565b610fa782826121ec565b6000610ba73384610dfa85604051806060016040528060258152602001612947602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121b2565b6005546001600160a01b031633146113415760405162461bcd60e51b81526004016109d890612746565b6010805460ff1916911515919091179055565b6000610ba7338484611bd5565b6005546001600160a01b0316331461138b5760405162461bcd60e51b81526004016109d890612746565b61012c8111156113ec5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109d8565b602255565b6005546001600160a01b0316331461141b5760405162461bcd60e51b81526004016109d890612746565b60185481151560ff90911615150361143257600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610c3d565b6005546001600160a01b0316331461149d5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b0381166115025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115885760405162461bcd60e51b81526004016109d890612746565b61159a81670de0b6b3a7640000612791565b905060646002546115ab9190612819565b81101561160b5760405162461bcd60e51b815260206004820152602860248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015267207468616e20312560c01b60648201526084016109d8565b600f55565b60008061161d838561283b565b90508381101561166f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109d8565b9392505050565b60008260000361168857506000610bab565b60006116948385612791565b9050826116a18583612819565b1461166f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109d8565b600061166f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612240565b806000036117455750565b61174e8161226e565b60165460145460019182916000916117669190611610565b60175460125461177591611610565b61177f919061283b565b9050600081156117965761179347836116f8565b90505b6000816117b060125460145461161090919063ffffffff16565b6117ba9190612791565b90506000826117d660175460165461161090919063ffffffff16565b6117e09190612791565b9050811561184057600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611835576040519150601f19603f3d011682016040523d82523d6000602084013e61183a565b606091505b50909650505b801561189e57600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611893576040519150601f19603f3d011682016040523d82523d6000602084013e611898565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9828780156118ca5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061166f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b2565b6001600160a01b03831661198f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0382166119f05760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ab65760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109d8565b6001600160a01b038216611b185760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109d8565b611b5581604051806060016040528060268152602001612921602691396001600160a01b03861660009081526020819052604090205491906121b2565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611b849082611610565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a45565b6001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6001600160a01b038216611c9c5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0383166000908152601b60205260408120548190819060ff16611d1957600854600160a81b900460ff16611d195760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109d8565b83600003611d3557611d2d86866000611a52565b505050505050565b600854600160a01b900460ff16158015611d6857506001600160a01b03861660009081526019602052604090205460ff16155b8015611d8d57506001600160a01b03851660009081526019602052604090205460ff16155b156121a7576001600160a01b0385166000908152601a602052604090205460ff168015611e4d57601254601354601754601c54929650909450925060ff1615611e4857602254326000908152601f6020526040902054611ded919061283b565b421015611e355760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601f602052604090204290555b612074565b601454601554601654601c54929650909450925060ff1615611fe757602054611e7790600061283b565b4311611eba5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109d8565b601d543a1115611f0c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109d8565b326000908152601e6020526040902054439003611f625760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109d8565b602254326000908152601f6020526040902054611f7f919061283b565b421015611fc75760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601e60209081526040808320439055601f90915290204290555b60105460ff1615612074576001600160a01b038616600090815260208190526040902054600f54612018878361283b565b11156120725760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109d8565b505b60006120808584611610565b3060009081526020819052604090205460115491925090811080159081906120c157506001600160a01b038a166000908152601a602052604090205460ff16155b156120fe576008805460ff60a01b1916600160a01b1790556011546120e58161173a565b506000600a8190556009556008805460ff60a01b191690555b600061210f6064610a2b8b87611676565b905060006121226064610a2b8c8b611676565b9050612138612131828461283b565b8b906118eb565b995085156121555760095461214d9083611610565b600955612166565b600a546121629083611610565b600a555b6121718c3084611a52565b80156121a05760085461218f908d906001600160a01b031683611a52565b60025461219c90826118eb565b6002555b5050505050505b611d2d868686611a52565b600081848411156121d65760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612853565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836122615760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612819565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a3576122a36127ea565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612320919061286a565b81600181518110612333576123336127ea565b6001600160a01b039283166020918202929092010152600654612359913091168461192d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612392908590600090869030904290600401612887565b600060405180830381600087803b1580156123ac57600080fd5b505af1158015611d2d573d6000803e3d6000fd5b6000602082840312156123d257600080fd5b5035919050565b600060208083528351808285015260005b81811015612406578581018301518582016040015282016123ea565b81811115612418576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461108d57600080fd5b8035801515811461245357600080fd5b919050565b6000806040838503121561246b57600080fd5b82356124768161242e565b915061248460208401612443565b90509250929050565b600080604083850312156124a057600080fd5b82356124ab8161242e565b946020939093013593505050565b6000602082840312156124cb57600080fd5b813561166f8161242e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612515576125156124d6565b604052919050565b600067ffffffffffffffff821115612537576125376124d6565b5060051b60200190565b600082601f83011261255257600080fd5b813560206125676125628361251d565b6124ec565b82815260059290921b8401810191818101908684111561258657600080fd5b8286015b848110156125a1578035835291830191830161258a565b509695505050505050565b600080604083850312156125bf57600080fd5b823567ffffffffffffffff808211156125d757600080fd5b818501915085601f8301126125eb57600080fd5b813560206125fb6125628361251d565b82815260059290921b8401810191818101908984111561261a57600080fd5b948201945b838610156126415785356126328161242e565b8252948201949082019061261f565b9650508601359250508082111561265757600080fd5b5061266485828601612541565b9150509250929050565b60008060006060848603121561268357600080fd5b833561268e8161242e565b9250602084013561269e8161242e565b929592945050506040919091013590565b6000602082840312156126c157600080fd5b61166f82612443565b60008060008060008060c087890312156126e357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561272057600080fd5b823561272b8161242e565b9150602083013561273b8161242e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156127ab576127ab61277b565b500290565b600181811c908216806127c457607f821691505b6020821081036127e457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016128125761281261277b565b5060010190565b60008261283657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561284e5761284e61277b565b500190565b6000828210156128655761286561277b565b500390565b60006020828403121561287c57600080fd5b815161166f8161242e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d75784516001600160a01b0316835293830193918301916001016128b2565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202f1ec05f86c439ed3215a4c336a043eb4f78a2dabb3b81111323ae14d0baa02b64736f6c634300080d0033

Deployed Bytecode Sourcemap

15554:14871:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15721:64;;;;;;;;;;-1:-1:-1;15721:64:0;;;;-1:-1:-1;;;;;15721:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;15721:64:0;;;;;;;;28352:443;;;;;;;;;;-1:-1:-1;28352:443:0;;;;;:::i;:::-;;:::i;:::-;;3437:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20280:181::-;;;;;;;;;;-1:-1:-1;20280:181:0;;;;;:::i;:::-;;:::i;4351:169::-;;;;;;;;;;-1:-1:-1;4351:169:0;;;;;:::i;:::-;;:::i;:::-;;;2115:14:1;;2108:22;2090:41;;2078:2;2063:18;4351:169:0;1950:187:1;15636:41:0;;;;;;;;;;-1:-1:-1;15636:41:0;;;;-1:-1:-1;;;;;15636:41:0;;;3758:108;;;;;;;;;;-1:-1:-1;3846:12:0;;3758:108;;;2523:25:1;;;2511:2;2496:18;3758:108:0;2377:177:1;17063:32:0;;;;;;;;;;;;;;;;20081:187;;;;;;;;;;-1:-1:-1;20081:187:0;;;;;:::i;:::-;;:::i;29861:561::-;;;;;;;;;;-1:-1:-1;29861:561:0;;;;;:::i;:::-;;:::i;4528:345::-;;;;;;;;;;-1:-1:-1;4528:345:0;;;;;:::i;:::-;;:::i;19486:93::-;;;;;;;;;;-1:-1:-1;19486:93:0;;19569:2;5901:36:1;;5889:2;5874:18;19486:93:0;5759:184:1;4881:218:0;;;;;;;;;;-1:-1:-1;4881:218:0;;;;;:::i;:::-;;:::i;15686:28::-;;;;;;;;;;-1:-1:-1;15686:28:0;;;;-1:-1:-1;;;;;15686:28:0;;;16672:34;;;;;;;;;;-1:-1:-1;16672:34:0;;;;;;;;16425:40;;;;;;;;;;-1:-1:-1;16425:40:0;;;;;;;;15820:34;;;;;;;;;;-1:-1:-1;15820:34:0;;;;-1:-1:-1;;;15820:34:0;;;;;;23200:126;;;;;;;;;;-1:-1:-1;23200:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23290:28:0;23266:4;23290:28;;;:19;:28;;;;;;;;;23200:126;16290:31;;;;;;;;;;;;;;;;19868:205;;;;;;;;;;-1:-1:-1;19868:205:0;;;;;:::i;:::-;;:::i;21488:120::-;;;;;;;;;;-1:-1:-1;21488:120:0;;;;;:::i;:::-;;:::i;20624:99::-;;;;;;;;;;-1:-1:-1;20624:99:0;;;;;:::i;:::-;;:::i;21334:146::-;;;;;;;;;;;;;:::i;3874:127::-;;;;;;;;;;-1:-1:-1;3874:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3975:18:0;3948:7;3975:18;;;;;;;;;;;;3874:127;7329:148;;;;;;;;;;;;;:::i;22239:212::-;;;;;;;;;;-1:-1:-1;22239:212:0;;;;;:::i;:::-;;:::i;16013:38::-;;;;;;;;;;-1:-1:-1;16013:38:0;;;;-1:-1:-1;;;;;16013:38:0;;;20469:147;;;;;;;;;;-1:-1:-1;20469:147:0;;;;;:::i;:::-;;:::i;19624:232::-;;;;;;;;;;;;;:::i;17001:30::-;;;;;;;;;;;;;;;;7115:79;;;;;;;;;;-1:-1:-1;7180:6:0;;-1:-1:-1;;;;;7180:6:0;7115:79;;16061:32;;;;;;;;;;-1:-1:-1;16061:32:0;;;;-1:-1:-1;;;;;16061:32:0;;;16218;;;;;;;;;;;;;;;;3545:104;;;;;;;;;;;;;:::i;22459:733::-;;;;;;;;;;-1:-1:-1;22459:733:0;;;;;:::i;:::-;;:::i;21832:140::-;;;;;;;;;;-1:-1:-1;21832:140:0;;;;;:::i;:::-;;:::i;16360:24::-;;;;;;;;;;;;;;;;16391:25;;;;;;;;;;;;;;;;5107:286;;;;;;;;;;-1:-1:-1;5107:286:0;;;;;:::i;:::-;;:::i;20731:103::-;;;;;;;;;;-1:-1:-1;20731:103:0;;;;;:::i;:::-;;:::i;4009:175::-;;;;;;;;;;-1:-1:-1;4009:175:0;;;;;:::i;:::-;;:::i;16257:26::-;;;;;;;;;;;;;;;;16950;;;;;;;;;;;;;;;;16533:57;;;;;;;;;;-1:-1:-1;16533:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20842:174;;;;;;;;;;-1:-1:-1;20842:174:0;;;;;:::i;:::-;;:::i;16136:35::-;;;;;;;;;;-1:-1:-1;16136:35:0;;;;;;;;21616:208;;;;;;;;;;-1:-1:-1;21616:208:0;;;;;:::i;:::-;;:::i;4192:151::-;;;;;;;;;;-1:-1:-1;4192:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4308:18:0;;;4281:7;4308:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4192:151;16178:33;;;;;;;;;;;;;;;;16328:25;;;;;;;;;;;;;;;;7485:244;;;;;;;;;;-1:-1:-1;7485:244:0;;;;;:::i;:::-;;:::i;16105:24::-;;;;;;;;;;;;;;;;21030:218;;;;;;;;;;-1:-1:-1;21030:218:0;;;;;:::i;:::-;;:::i;28352:443::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;;;;;;;;;28440:17:::1;:6:::0;28450::::1;28440:17;:::i;:::-;28431:26;;28468:19;28490:25;28504:10;;28490:9;;:13;;:25;;;;:::i;:::-;28468:47;;28526:15;28544:38;28570:11;28544:21;28555:9;;28544:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;28526:56;;28593:16;28612:39;28639:11;28612:22;28623:10;;28612:6;:10;;:22;;;;:::i;:39::-;28593:58;;28664:28;28685:6;28664:20;:28::i;:::-;28717:9;::::0;:22:::1;::::0;28731:7;28717:13:::1;:22::i;:::-;28705:9;:34:::0;28763:10:::1;::::0;:24:::1;::::0;28778:8;28763:14:::1;:24::i;:::-;28750:10;:37:::0;-1:-1:-1;;;;28352:443:0:o;3437:100::-;3491:13;3524:5;3517:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3437:100;:::o;20280:181::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20364:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20364:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20419:34;;2090:41:1;;;20419:34:0::1;::::0;2063:18:1;20419:34:0::1;;;;;;;20280:181:::0;;:::o;4351:169::-;4434:4;4451:39;375:10;4474:7;4483:6;4451:8;:39::i;:::-;-1:-1:-1;4508:4:0;4351:169;;;;;:::o;20081:187::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20149:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;20149:34:0::1;20179:4;20149:34;::::0;;20194:9:::1;:27:::0;;-1:-1:-1;;;;;;20194:27:0::1;::::0;::::1;::::0;;20237:23;;160:51:1;;;20237:23:0::1;::::0;133:18:1;20237:23:0::1;;;;;;;;20081:187:::0;:::o;29861:561::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;30033:6:::1;:13;30008:14;:21;:38;30000:81;;;::::0;-1:-1:-1;;;30000:81:0;;8531:2:1;30000:81:0::1;::::0;::::1;8513:21:1::0;8570:2;8550:18;;;8543:30;8609:32;8589:18;;;8582:60;8659:18;;30000:81:0::1;8329:354:1::0;30000:81:0::1;30125:3;30100:14;:21;:28;;30092:75;;;::::0;-1:-1:-1;;;30092:75:0;;8890:2:1;30092:75:0::1;::::0;::::1;8872:21:1::0;8929:2;8909:18;;;8902:30;8968:34;8948:18;;;8941:62;-1:-1:-1;;;9019:18:1;;;9012:32;9061:19;;30092:75:0::1;8688:398:1::0;30092:75:0::1;30183:9;30178:237;30202:14;:21;30198:1;:25;30178:237;;;30245:14;30262;30277:1;30262:17;;;;;;;;:::i;:::-;;;;;;;30245:34;;30294:21;30318:6;30325:1;30318:9;;;;;;;;:::i;:::-;;;;;;;30331:6;30318:20;;;;:::i;:::-;30294:44;;30353:50;30369:10;30381:6;30389:13;30353:15;:50::i;:::-;30230:185;;30225:3;;;;;:::i;:::-;;;;30178:237;;;;29861:561:::0;;:::o;4528:345::-;4641:4;4658:36;4668:6;4676:9;4687:6;4658:9;:36::i;:::-;4705:138;4714:6;375:10;4736:106;4774:6;4736:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4736:19:0;;;;;;:11;:19;;;;;;;;375:10;4736:33;;;;;;;;;;:37;:106::i;:::-;4705:8;:138::i;:::-;-1:-1:-1;4861:4:0;4528:345;;;;;:::o;4881:218::-;375:10;4969:4;5018:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5018:34:0;;;;;;;;;;4969:4;;4986:83;;5009:7;;5018:50;;5057:10;5018:38;:50::i;19868:205::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19942:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;19942:34:0::1;19972:4;19942:34;::::0;;19987:15:::1;:33:::0;;-1:-1:-1;;;;;;19987:33:0::1;::::0;::::1;::::0;;20036:29;;160:51:1;;;20036:29:0::1;::::0;133:18:1;20036:29:0::1;14:203:1::0;21488:120:0;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;21583:17:::1;:6:::0;21593::::1;21583:17;:::i;:::-;21562:18;:38:::0;-1:-1:-1;21488:120:0:o;20624:99::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;20693:14:::1;:22:::0;;-1:-1:-1;;20693:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20624:99::o;21334:146::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;21433:39:::1;::::0;21401:21:::1;::::0;21441:10:::1;::::0;21433:39;::::1;;;::::0;21401:21;;21381:17:::1;21433:39:::0;21381:17;21433:39;21401:21;21441:10;21433:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21370:110;21334:146::o:0;7329:148::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;7420:6:::1;::::0;7399:40:::1;::::0;7436:1:::1;::::0;-1:-1:-1;;;;;7420:6:0::1;::::0;7399:40:::1;::::0;7436:1;;7399:40:::1;7450:6;:19:::0;;-1:-1:-1;;;;;;7450:19:0::1;::::0;;7329:148::o;22239:212::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22308:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:36;;22340:4:::1;-1:-1:-1::0;;22308:36:0;;::::1;::::0;::::1;::::0;;;22355:33:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;22416:27:::1;22308:29:::0;22416:17:::1;:27::i;:::-;22239:212:::0;:::o;20469:147::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20558:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;20558:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20469:147::o;19624:232::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;19688:14:::1;::::0;-1:-1:-1;;;19688:14:0;::::1;;;19687:15;19679:24;;;::::0;::::1;;19714:14;:21:::0;;-1:-1:-1;;;;19714:21:0::1;-1:-1:-1::0;;;19714:21:0::1;::::0;;19760:12:::1;19746:11;:26:::0;19801:15:::1;19783;:33:::0;19832:16:::1;::::0;::::1;::::0;19714:21;;19832:16:::1;19624:232::o:0;3545:104::-;3601:13;3634:7;3627:14;;;;;:::i;22459:733::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;22647:16:::1;:31:::0;;;22689:10:::1;:20:::0;;;22720:17:::1;:33:::0;;;22764:11:::1;:22:::0;;;22797:9:::1;:18:::0;;;22826:10:::1;:20:::0;;;22875:33:::1;22740:13:::0;22839:7;22875:21:::1;:33::i;:::-;22859:13;:49:::0;22955:9:::1;::::0;22934:16:::1;::::0;:31:::1;::::0;:20:::1;:31::i;:::-;22919:12;:46:::0;22999:13:::1;::::0;23016:2:::1;-1:-1:-1::0;22999:19:0;::::1;::::0;:41:::1;;;23038:2;23022:12;;:18;;22999:41;22991:55;;;::::0;-1:-1:-1;;;22991:55:0;;9565:2:1;22991:55:0::1;::::0;::::1;9547:21:1::0;9604:1;9584:18;;;9577:29;-1:-1:-1;;;9622:18:1;;;9615:31;9663:18;;22991:55:0::1;9363:324:1::0;22991:55:0::1;23075:17;::::0;23094:11:::1;::::0;23107:10:::1;::::0;23119:16:::1;::::0;23162:10:::1;::::0;23174:9:::1;::::0;23064:120:::1;::::0;;9979:25:1;;;10035:2;10020:18;;10013:34;;;;10063:18;;;10056:34;;;;10121:2;10106:18;;10099:34;10164:3;10149:19;;10142:35;10208:3;10193:19;;10186:35;23064:120:0::1;::::0;9966:3:1;9951:19;23064:120:0::1;;;;;;;22459:733:::0;;;;;;:::o;21832:140::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;21923:41:::1;21952:4;21958:5;21923:28;:41::i;5107:286::-:0;5200:4;5217:146;375:10;5240:7;5249:113;5288:15;5249:113;;;;;;;;;;;;;;;;;375:10;5249:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5249:34:0;;;;;;;;;;;;:38;:113::i;20731:103::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;20802:16:::1;:24:::0;;-1:-1:-1;;20802:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20731:103::o;4009:175::-;4095:4;4112:42;375:10;4136:9;4147:6;4112:9;:42::i;20842:174::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;20930:3:::1;20921:5;:12;;20913:63;;;::::0;-1:-1:-1;;;20913:63:0;;10434:2:1;20913:63:0::1;::::0;::::1;10416:21:1::0;10473:2;10453:18;;;10446:30;10512:34;10492:18;;;10485:62;-1:-1:-1;;;10563:18:1;;;10556:36;10609:19;;20913:63:0::1;10232:402:1::0;20913:63:0::1;20987:13;:21:::0;20842:174::o;21616:208::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;21696:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;21688:41:::1;;;::::0;::::1;;21740:21;:31:::0;;-1:-1:-1;;21740:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21787:29:::1;::::0;2090:41:1;;;21787:29:0::1;::::0;2078:2:1;2063:18;21787:29:0::1;1950:187:1::0;7485:244:0;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7574:22:0;::::1;7566:73;;;::::0;-1:-1:-1;;;7566:73:0;;10841:2:1;7566:73:0::1;::::0;::::1;10823:21:1::0;10880:2;10860:18;;;10853:30;10919:34;10899:18;;;10892:62;-1:-1:-1;;;10970:18:1;;;10963:36;11016:19;;7566:73:0::1;10639:402:1::0;7566:73:0::1;7676:6;::::0;7655:38:::1;::::0;-1:-1:-1;;;;;7655:38:0;;::::1;::::0;7676:6:::1;::::0;7655:38:::1;::::0;7676:6:::1;::::0;7655:38:::1;7704:6;:17:::0;;-1:-1:-1;;;;;;7704:17:0::1;-1:-1:-1::0;;;;;7704:17:0;;;::::1;::::0;;;::::1;::::0;;7485:244::o;21030:218::-;7242:6;;-1:-1:-1;;;;;7242:6:0;375:10;7242:22;7234:67;;;;-1:-1:-1;;;7234:67:0;;;;;;;:::i;:::-;21105:16:::1;:5:::0;21114:6:::1;21105:16;:::i;:::-;21097:24;;21164:3;21149:12;;:18;;;;:::i;:::-;21140:5;:27;;21132:80;;;::::0;-1:-1:-1;;;21132:80:0;;11470:2:1;21132:80:0::1;::::0;::::1;11452:21:1::0;11509:2;11489:18;;;11482:30;11548:34;11528:18;;;11521:62;-1:-1:-1;;;11599:18:1;;;11592:38;11647:19;;21132:80:0::1;11268:404:1::0;21132:80:0::1;21223:9;:17:::0;21030:218::o;671:179::-;729:7;;761:5;765:1;761;:5;:::i;:::-;749:17;;790:1;785;:6;;777:46;;;;-1:-1:-1;;;777:46:0;;12012:2:1;777:46:0;;;11994:21:1;12051:2;12031:18;;;12024:30;12090:29;12070:18;;;12063:57;12137:18;;777:46:0;11810:351:1;777:46:0;841:1;671:179;-1:-1:-1;;;671:179:0:o;1200:248::-;1258:7;1282:1;1287;1282:6;1278:47;;-1:-1:-1;1312:1:0;1305:8;;1278:47;1337:9;1349:5;1353:1;1349;:5;:::i;:::-;1337:17;-1:-1:-1;1382:1:0;1373:5;1377:1;1337:17;1373:5;:::i;:::-;:10;1365:56;;;;-1:-1:-1;;;1365:56:0;;12368:2:1;1365:56:0;;;12350:21:1;12407:2;12387:18;;;12380:30;12446:34;12426:18;;;12419:62;-1:-1:-1;;;12497:18:1;;;12490:31;12538:19;;1365:56:0;12166:397:1;1456:132:0;1514:7;1541:39;1545:1;1548;1541:39;;;;;;;;;;;;;;;;;:3;:39::i;28828:1025::-;28897:6;28907:1;28897:11;28893:50;;28828:1025;:::o;28893:50::-;28953:24;28970:6;28953:16;:24::i;:::-;29146:9;;29125:16;;29005:4;;;;28990:12;;29125:31;;:16;:20;:31::i;:::-;29111:10;;29089:17;;:33;;:21;:33::i;:::-;:67;;;;:::i;:::-;29063:93;-1:-1:-1;29169:19:0;29203;;29199:108;;29253:42;:21;29279:15;29253:25;:42::i;:::-;29239:56;;29199:108;29317:23;29385:11;29343:39;29364:17;;29343:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29317:79;;29407:17;29455:11;29427:25;29441:10;;29427:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;29407:59;-1:-1:-1;29491:19:0;;29487:123;;29549:15;;29541:57;;-1:-1:-1;;;;;29549:15:0;;;;29578;;29541:57;;;;29578:15;29549;29541:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29527:71:0;;-1:-1:-1;;29487:123:0;29634:13;;29630:108;;29689:9;;29681:45;;-1:-1:-1;;;;;29689:9:0;;;;29712;;29681:45;;;;29712:9;29689;29681:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29664:62:0;;-1:-1:-1;;29630:108:0;29755:90;29783:15;29813:7;:21;;;;;29824:10;29813:21;29755:90;;;12946:25:1;;;13014:14;;13007:22;13002:2;12987:18;;12980:50;12919:18;29755:90:0;;;;;;;28882:971;;;;;;28828:1025;:::o;858:136::-;916:7;943:43;947:1;950;943:43;;;;;;;;;;;;;;;;;:3;:43::i;6333:346::-;-1:-1:-1;;;;;6435:19:0;;6427:68;;;;-1:-1:-1;;;6427:68:0;;13243:2:1;6427:68:0;;;13225:21:1;13282:2;13262:18;;;13255:30;13321:34;13301:18;;;13294:62;-1:-1:-1;;;13372:18:1;;;13365:34;13416:19;;6427:68:0;13041:400:1;6427:68:0;-1:-1:-1;;;;;6514:21:0;;6506:68;;;;-1:-1:-1;;;6506:68:0;;13648:2:1;6506:68:0;;;13630:21:1;13687:2;13667:18;;;13660:30;13726:34;13706:18;;;13699:62;-1:-1:-1;;;13777:18:1;;;13770:32;13819:19;;6506:68:0;13446:398:1;6506:68:0;-1:-1:-1;;;;;6587:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6639:32;;2523:25:1;;;6639:32:0;;2496:18:1;6639:32:0;;;;;;;;6333:346;;;:::o;5401:538::-;-1:-1:-1;;;;;5507:20:0;;5499:70;;;;-1:-1:-1;;;5499:70:0;;14051:2:1;5499:70:0;;;14033:21:1;14090:2;14070:18;;;14063:30;14129:34;14109:18;;;14102:62;-1:-1:-1;;;14180:18:1;;;14173:35;14225:19;;5499:70:0;13849:401:1;5499:70:0;-1:-1:-1;;;;;5588:23:0;;5580:71;;;;-1:-1:-1;;;5580:71:0;;14457:2:1;5580:71:0;;;14439:21:1;14496:2;14476:18;;;14469:30;14535:34;14515:18;;;14508:62;-1:-1:-1;;;14586:18:1;;;14579:33;14629:19;;5580:71:0;14255:399:1;5580:71:0;5744:70;5766:6;5744:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5744:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;5724:17:0;;;:9;:17;;;;;;;;;;;:90;;;;5848:20;;;;;;;:32;;5873:6;5848:24;:32::i;:::-;-1:-1:-1;;;;;5825:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5896:35;2523:25:1;;;5825:20:0;;5896:35;;;;;;2496:18:1;5896:35:0;2377:177:1;23334:3494:0;-1:-1:-1;;;;;23434:18:0;;23426:69;;;;-1:-1:-1;;;23426:69:0;;14861:2:1;23426:69:0;;;14843:21:1;14900:2;14880:18;;;14873:30;14939:34;14919:18;;;14912:62;-1:-1:-1;;;14990:18:1;;;14983:36;15036:19;;23426:69:0;14659:402:1;23426:69:0;-1:-1:-1;;;;;23514:16:0;;23506:65;;;;-1:-1:-1;;;23506:65:0;;15268:2:1;23506:65:0;;;15250:21:1;15307:2;15287:18;;;15280:30;15346:34;15326:18;;;15319:62;-1:-1:-1;;;15397:18:1;;;15390:34;15441:19;;23506:65:0;15066:400:1;23506:65:0;-1:-1:-1;;;;;23674:39:0;;23584:21;23674:39;;;:33;:39;;;;;;23584:21;;;;23674:39;;23669:142;;23738:14;;-1:-1:-1;;;23738:14:0;;;;23730:59;;;;-1:-1:-1;;;23730:59:0;;15673:2:1;23730:59:0;;;15655:21:1;;;15692:18;;;15685:30;15751:34;15731:18;;;15724:62;15803:18;;23730:59:0;15471:356:1;23730:59:0;23827:6;23837:1;23827:11;23823:2942;;23855:28;23871:4;23877:2;23881:1;23855:15;:28::i;:::-;23898:7;;;23334:3494;;;:::o;23823:2942::-;23961:8;;-1:-1:-1;;;23961:8:0;;;;23960:9;:39;;;;-1:-1:-1;;;;;;23974:25:0;;;;;;:19;:25;;;;;;;;23973:26;23960:39;:67;;;;-1:-1:-1;;;;;;24004:23:0;;;;;;:19;:23;;;;;;;;24003:24;23960:67;23942:2823;;;-1:-1:-1;;;;;24071:29:0;;24054:14;24071:29;;;:25;:29;;;;;;;;24115:1494;;;;24165:17;;24211:11;;24250:10;;24285:14;;24165:17;;-1:-1:-1;24211:11:0;;-1:-1:-1;24250:10:0;-1:-1:-1;24285:14:0;;24281:269;;;24389:13;;24376:9;24347:39;;;;:28;:39;;;;;;:55;;24389:13;24347:55;:::i;:::-;24328:15;:74;;24320:134;;;;-1:-1:-1;;;24320:134:0;;16034:2:1;24320:134:0;;;16016:21:1;16073:2;16053:18;;;16046:30;-1:-1:-1;;;16092:18:1;;;16085:52;16154:18;;24320:134:0;15832:346:1;24320:134:0;24502:9;24473:39;;;;:28;:39;;;;;24515:15;24473:57;;24281:269;24115:1494;;;24634:16;;24679:10;;24717:9;;24751:14;;24634:16;;-1:-1:-1;24679:10:0;;-1:-1:-1;24717:9:0;-1:-1:-1;24751:14:0;;24747:598;;;24809:11;;:15;;24823:1;24809:15;:::i;:::-;24794:12;:30;24786:60;;;;-1:-1:-1;;;24786:60:0;;16385:2:1;24786:60:0;;;16367:21:1;16424:2;16404:18;;;16397:30;-1:-1:-1;;;16443:18:1;;;16436:48;16501:18;;24786:60:0;16183:342:1;24786:60:0;24888:13;;24873:11;:28;;24865:64;;;;-1:-1:-1;;;24865:64:0;;16732:2:1;24865:64:0;;;16714:21:1;16771:2;16751:18;;;16744:30;16810:26;16790:18;;;16783:54;16854:18;;24865:64:0;16530:348:1;24865:64:0;24981:9;24956:35;;;;:24;:35;;;;;;24995:12;24956:51;;24948:83;;;;-1:-1:-1;;;24948:83:0;;17085:2:1;24948:83:0;;;17067:21:1;17124:2;17104:18;;;17097:30;-1:-1:-1;;;17143:18:1;;;17136:50;17203:18;;24948:83:0;16883:344:1;24948:83:0;25119:13;;25106:9;25077:39;;;;:28;:39;;;;;;:55;;25119:13;25077:55;:::i;:::-;25058:15;:74;;25050:134;;;;-1:-1:-1;;;25050:134:0;;16034:2:1;25050:134:0;;;16016:21:1;16073:2;16053:18;;;16046:30;-1:-1:-1;;;16092:18:1;;;16085:52;16154:18;;25050:134:0;15832:346:1;25050:134:0;25228:9;25203:35;;;;:24;:35;;;;;;;;25241:12;25203:50;;25272:28;:39;;;;;25314:15;25272:57;;24747:598;25365:16;;;;25361:233;;;-1:-1:-1;;;;;3975:18:0;;25398:32;3975:18;;;;;;;;;;;25506:9;;25469:33;25496:6;3975:18;25469:33;:::i;:::-;:46;;25461:117;;;;-1:-1:-1;;;25461:117:0;;17434:2:1;25461:117:0;;;17416:21:1;17473:2;17453:18;;;17446:30;17512:34;17492:18;;;17485:62;-1:-1:-1;;;17563:18:1;;;17556:34;17607:19;;25461:117:0;17232:400:1;25461:117:0;25383:211;25361:233;25625:17;25645:25;:13;25663:6;25645:17;:25::i;:::-;25736:4;25687:28;3975:18;;;;;;;;;;;25798;;25625:45;;-1:-1:-1;3975:18:0;25774:42;;;;;;;25837:43;;-1:-1:-1;;;;;;25849:31:0;;;;;;:25;:31;;;;;;;;25848:32;25837:43;25833:325;;;25901:8;:15;;-1:-1:-1;;;;25901:15:0;-1:-1:-1;;;25901:15:0;;;25972:18;;26009:33;25972:18;26009:20;:33::i;:::-;-1:-1:-1;26073:1:0;26061:9;:13;;;26093:10;:14;26126:8;:16;;-1:-1:-1;;;;26126:16:0;;;25833:325;26174:12;26189:30;26215:3;26189:21;:6;26200:9;26189:10;:21::i;:30::-;26174:45;-1:-1:-1;26234:18:0;26255:28;26279:3;26255:19;:6;26266:7;26255:10;:19::i;:28::-;26234:49;-1:-1:-1;26309:29:0;26320:17;26234:49;26320:4;:17;:::i;:::-;26309:6;;:10;:29::i;:::-;26300:38;;26359:9;26355:155;;;26402:10;;:20;;26417:4;26402:14;:20::i;:::-;26389:10;:33;26355:155;;;26475:9;;:19;;26489:4;26475:13;:19::i;:::-;26463:9;:31;26355:155;26526:42;26542:4;26556;26563;26526:15;:42::i;:::-;26589:14;;26585:156;;26646:4;;26624:39;;26640:4;;-1:-1:-1;;;;;26646:4:0;26652:10;26624:15;:39::i;:::-;26697:12;;:28;;26714:10;26697:16;:28::i;:::-;26682:12;:43;26585:156;24039:2726;;;;;;23942:2823;26777:33;26793:4;26799:2;26803:6;26777:15;:33::i;1002:190::-;1088:7;1124:12;1116:6;;;;1108:29;;;;-1:-1:-1;;;1108:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1148:9:0;1160:5;1164:1;1160;:5;:::i;:::-;1148:17;1002:190;-1:-1:-1;;;;;1002:190:0:o;21980:188::-;-1:-1:-1;;;;;22063:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22063:39:0;;;;;;;;;;22120:40;;22063:39;;:31;22120:40;;;21980:188;;:::o;1596:189::-;1682:7;1717:12;1710:5;1702:28;;;;-1:-1:-1;;;1702:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1741:9:0;1753:5;1757:1;1753;:5;:::i;27324:499::-;27414:16;;;27428:1;27414:16;;;;;;;;27390:21;;27414:16;;;;;;;;;;-1:-1:-1;27414:16:0;27390:40;;27459:4;27441;27446:1;27441:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27441:23:0;;;:7;;;;;;;;;;:23;;;;27485:15;;:22;;;-1:-1:-1;;;27485:22:0;;;;:15;;;;;:20;;:22;;;;;27441:7;;27485:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27475:4;27480:1;27475:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27475:32:0;;;:7;;;;;;;;;:32;27550:15;;27518:62;;27535:4;;27550:15;27568:11;27518:8;:62::i;:::-;27591:15;;:224;;-1:-1:-1;;;27591:224:0;;-1:-1:-1;;;;;27591:15:0;;;;:66;;:224;;27672:11;;27591:15;;27742:4;;27769;;27789:15;;27591:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222:180:1;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:597::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;845:6;842:1;839:13;836:91;;;915:1;910:2;901:6;890:9;886:22;882:31;875:42;836:91;-1:-1:-1;988:2:1;967:15;-1:-1:-1;;963:29:1;948:45;;;;995:2;944:54;;407:597;-1:-1:-1;;;407:597:1:o;1009:131::-;-1:-1:-1;;;;;1084:31:1;;1074:42;;1064:70;;1130:1;1127;1120:12;1145:160;1210:20;;1266:13;;1259:21;1249:32;;1239:60;;1295:1;1292;1285:12;1239:60;1145:160;;;:::o;1310:315::-;1375:6;1383;1436:2;1424:9;1415:7;1411:23;1407:32;1404:52;;;1452:1;1449;1442:12;1404:52;1491:9;1478:23;1510:31;1535:5;1510:31;:::i;:::-;1560:5;-1:-1:-1;1584:35:1;1615:2;1600:18;;1584:35;:::i;:::-;1574:45;;1310:315;;;;;:::o;1630:::-;1698:6;1706;1759:2;1747:9;1738:7;1734:23;1730:32;1727:52;;;1775:1;1772;1765:12;1727:52;1814:9;1801:23;1833:31;1858:5;1833:31;:::i;:::-;1883:5;1935:2;1920:18;;;;1907:32;;-1:-1:-1;;;1630:315:1:o;2559:247::-;2618:6;2671:2;2659:9;2650:7;2646:23;2642:32;2639:52;;;2687:1;2684;2677:12;2639:52;2726:9;2713:23;2745:31;2770:5;2745:31;:::i;2811:127::-;2872:10;2867:3;2863:20;2860:1;2853:31;2903:4;2900:1;2893:15;2927:4;2924:1;2917:15;2943:275;3014:2;3008:9;3079:2;3060:13;;-1:-1:-1;;3056:27:1;3044:40;;3114:18;3099:34;;3135:22;;;3096:62;3093:88;;;3161:18;;:::i;:::-;3197:2;3190:22;2943:275;;-1:-1:-1;2943:275:1:o;3223:183::-;3283:4;3316:18;3308:6;3305:30;3302:56;;;3338:18;;:::i;:::-;-1:-1:-1;3383:1:1;3379:14;3395:4;3375:25;;3223:183::o;3411:662::-;3465:5;3518:3;3511:4;3503:6;3499:17;3495:27;3485:55;;3536:1;3533;3526:12;3485:55;3572:6;3559:20;3598:4;3622:60;3638:43;3678:2;3638:43;:::i;:::-;3622:60;:::i;:::-;3716:15;;;3802:1;3798:10;;;;3786:23;;3782:32;;;3747:12;;;;3826:15;;;3823:35;;;3854:1;3851;3844:12;3823:35;3890:2;3882:6;3878:15;3902:142;3918:6;3913:3;3910:15;3902:142;;;3984:17;;3972:30;;4022:12;;;;3935;;3902:142;;;-1:-1:-1;4062:5:1;3411:662;-1:-1:-1;;;;;;3411:662:1:o;4078:1215::-;4196:6;4204;4257:2;4245:9;4236:7;4232:23;4228:32;4225:52;;;4273:1;4270;4263:12;4225:52;4313:9;4300:23;4342:18;4383:2;4375:6;4372:14;4369:34;;;4399:1;4396;4389:12;4369:34;4437:6;4426:9;4422:22;4412:32;;4482:7;4475:4;4471:2;4467:13;4463:27;4453:55;;4504:1;4501;4494:12;4453:55;4540:2;4527:16;4562:4;4586:60;4602:43;4642:2;4602:43;:::i;4586:60::-;4680:15;;;4762:1;4758:10;;;;4750:19;;4746:28;;;4711:12;;;;4786:19;;;4783:39;;;4818:1;4815;4808:12;4783:39;4842:11;;;;4862:217;4878:6;4873:3;4870:15;4862:217;;;4958:3;4945:17;4975:31;5000:5;4975:31;:::i;:::-;5019:18;;4895:12;;;;5057;;;;4862:217;;;5098:5;-1:-1:-1;;5141:18:1;;5128:32;;-1:-1:-1;;5172:16:1;;;5169:36;;;5201:1;5198;5191:12;5169:36;;5224:63;5279:7;5268:8;5257:9;5253:24;5224:63;:::i;:::-;5214:73;;;4078:1215;;;;;:::o;5298:456::-;5375:6;5383;5391;5444:2;5432:9;5423:7;5419:23;5415:32;5412:52;;;5460:1;5457;5450:12;5412:52;5499:9;5486:23;5518:31;5543:5;5518:31;:::i;:::-;5568:5;-1:-1:-1;5625:2:1;5610:18;;5597:32;5638:33;5597:32;5638:33;:::i;:::-;5298:456;;5690:7;;-1:-1:-1;;;5744:2:1;5729:18;;;;5716:32;;5298:456::o;5948:180::-;6004:6;6057:2;6045:9;6036:7;6032:23;6028:32;6025:52;;;6073:1;6070;6063:12;6025:52;6096:26;6112:9;6096:26;:::i;6357:523::-;6461:6;6469;6477;6485;6493;6501;6554:3;6542:9;6533:7;6529:23;6525:33;6522:53;;;6571:1;6568;6561:12;6522:53;-1:-1:-1;;6594:23:1;;;6664:2;6649:18;;6636:32;;-1:-1:-1;6715:2:1;6700:18;;6687:32;;6766:2;6751:18;;6738:32;;-1:-1:-1;6817:3:1;6802:19;;6789:33;;-1:-1:-1;6869:3:1;6854:19;6841:33;;-1:-1:-1;6357:523:1;-1:-1:-1;6357:523:1:o;6885:388::-;6953:6;6961;7014:2;7002:9;6993:7;6989:23;6985:32;6982:52;;;7030:1;7027;7020:12;6982:52;7069:9;7056:23;7088:31;7113:5;7088:31;:::i;:::-;7138:5;-1:-1:-1;7195:2:1;7180:18;;7167:32;7208:33;7167:32;7208:33;:::i;:::-;7260:7;7250:17;;;6885:388;;;;;:::o;7278:356::-;7480:2;7462:21;;;7499:18;;;7492:30;7558:34;7553:2;7538:18;;7531:62;7625:2;7610:18;;7278:356::o;7639:127::-;7700:10;7695:3;7691:20;7688:1;7681:31;7731:4;7728:1;7721:15;7755:4;7752:1;7745:15;7771:168;7811:7;7877:1;7873;7869:6;7865:14;7862:1;7859:21;7854:1;7847:9;7840:17;7836:45;7833:71;;;7884:18;;:::i;:::-;-1:-1:-1;7924:9:1;;7771:168::o;7944:380::-;8023:1;8019:12;;;;8066;;;8087:61;;8141:4;8133:6;8129:17;8119:27;;8087:61;8194:2;8186:6;8183:14;8163:18;8160:38;8157:161;;8240:10;8235:3;8231:20;8228:1;8221:31;8275:4;8272:1;8265:15;8303:4;8300:1;8293:15;8157:161;;7944:380;;;:::o;9091:127::-;9152:10;9147:3;9143:20;9140:1;9133:31;9183:4;9180:1;9173:15;9207:4;9204:1;9197:15;9223:135;9262:3;9283:17;;;9280:43;;9303:18;;:::i;:::-;-1:-1:-1;9350:1:1;9339:13;;9223:135::o;11046:217::-;11086:1;11112;11102:132;;11156:10;11151:3;11147:20;11144:1;11137:31;11191:4;11188:1;11181:15;11219:4;11216:1;11209:15;11102:132;-1:-1:-1;11248:9:1;;11046:217::o;11677:128::-;11717:3;11748:1;11744:6;11741:1;11738:13;11735:39;;;11754:18;;:::i;:::-;-1:-1:-1;11790:9:1;;11677:128::o;17637:125::-;17677:4;17705:1;17702;17699:8;17696:34;;;17710:18;;:::i;:::-;-1:-1:-1;17747:9:1;;17637:125::o;17767:251::-;17837:6;17890:2;17878:9;17869:7;17865:23;17861:32;17858:52;;;17906:1;17903;17896:12;17858:52;17938:9;17932:16;17957:31;17982:5;17957:31;:::i;18023:980::-;18285:4;18333:3;18322:9;18318:19;18364:6;18353:9;18346:25;18390:2;18428:6;18423:2;18412:9;18408:18;18401:34;18471:3;18466:2;18455:9;18451:18;18444:31;18495:6;18530;18524:13;18561:6;18553;18546:22;18599:3;18588:9;18584:19;18577:26;;18638:2;18630:6;18626:15;18612:29;;18659:1;18669:195;18683:6;18680:1;18677:13;18669:195;;;18748:13;;-1:-1:-1;;;;;18744:39:1;18732:52;;18839:15;;;;18804:12;;;;18780:1;18698:9;18669:195;;;-1:-1:-1;;;;;;;18920:32:1;;;;18915:2;18900:18;;18893:60;-1:-1:-1;;;18984:3:1;18969:19;18962:35;18881:3;18023:980;-1:-1:-1;;;18023:980:1:o

Swarm Source

ipfs://2f1ec05f86c439ed3215a4c336a043eb4f78a2dabb3b81111323ae14d0baa02b
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.