ETH Price: $2,940.55 (-6.07%)
Gas: 6 Gwei

Token

Venom (VEN)
 

Overview

Max Total Supply

500,000,000 VEN

Holders

117

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
191,520.358312932 VEN

Value
$0.00
0x7bf5e7f398a9b9370dd881e78364b0b1f3bea808
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:
Venom

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-06
*/

/**
/**
*/

// SPDX-License-Identifier: MIT LICENCE
pragma solidity ^0.8.4;



abstract contract Context {

    function _msgSender() internal view virtual returns (address payable) {
        return payable(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;
    }
}

interface IERC20 {

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

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

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

    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 waiveOwnership() 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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Venom is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Venom";
    string private _symbol = "VEN";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0xF2236BBd938AF426AFfF073E8998cdaa838b3922);
    address payable public DevFee = payable(0xF2236BBd938AF426AFfF073E8998cdaa838b3922);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 private _buyLiquidityFee = 1;
    uint256 private _buyMarketingFee = 2;
    uint256 private _buyDevFee = 2;
    uint256 private _sellLiquidityFee = 5;
    uint256 private _sellMarketingFee = 5;
    uint256 private _sellDevFee = 15;

    uint256 private _liquidityShare = 1;
    uint256 private _marketingShare = 2;
    uint256 private _devShare = 2;

    uint256 public _totalTaxIfBuying = 4;
    uint256 public _totalTaxIfSelling = 25;
    uint256 private _totalDistributionShares = 29;

    uint256 public _totalSupply = 500 * 10**6 * 10**9;
    uint256 private _maxTxAmount = 500 * 10**6 * 10**9;
    uint256 private _walletMax = 500 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 25000 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_devShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

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

    function _approve(address owner, address spender, uint256 amount) private {
        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 addMarketPair(address account) public onlyOwner {
        isMarketPair[account] = true;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyDevFee = newDevTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellDevFee = newDevTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newdevShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _devShare = newdevShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_devShare);
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setDevFeeAddress(address newAddress) external onlyOwner() {
        DevFee = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBDev = amountReceived.mul(_devShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBDev);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBDev > 0)
            transferToAddressETH(DevFee, amountBNBDev);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    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 takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"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":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DevFee","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newdevShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","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":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600581526020017f56656e6f6d000000000000000000000000000000000000000000000000000000815250600290805190602001906200005192919062000b42565b506040518060400160405280600381526020017f56454e0000000000000000000000000000000000000000000000000000000000815250600390805190602001906200009f92919062000b42565b506009600460006101000a81548160ff021916908360ff16021790555073f2236bbd938af426afff073e8998cdaa838b3922600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f2236bbd938af426afff073e8998cdaa838b3922600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506001600c556002600d556002600e556005600f556005601055600f60115560016012556002601355600260145560046015556019601655601d6017556706f05b59d3b200006018556706f05b59d3b200006019556706f05b59d3b20000601a556516bcc41e9000601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200026657600080fd5b5060006200027962000aae60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037757600080fd5b505afa1580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000c09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041557600080fd5b505afa1580156200042a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000450919062000c09565b6040518363ffffffff1660e01b81526004016200046f92919062000c7e565b602060405180830381600087803b1580156200048a57600080fd5b505af11580156200049f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c5919062000c09565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860006200060162000ab660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e3600e54620006cf600d54600c5462000adf60201b6200228a1790919060201c565b62000adf60201b6200228a1790919060201c565b601581905550620007226011546200070e601054600f5462000adf60201b6200228a1790919060201c565b62000adf60201b6200228a1790919060201c565b601681905550620007616014546200074d60135460125462000adf60201b6200228a1790919060201c565b62000adf60201b6200228a1790919060201c565b6017819055506001600960006200077d62000ab660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620008b662000ab660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009f062000aae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a3e62000aae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a9f919062000ccd565b60405180910390a35062000e6d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000af0919062000cfb565b90508381101562000b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2f9062000cab565b60405180910390fd5b8091505092915050565b82805462000b509062000d96565b90600052602060002090601f01602090048101928262000b74576000855562000bc0565b82601f1062000b8f57805160ff191683800117855562000bc0565b8280016001018555821562000bc0579182015b8281111562000bbf57825182559160200191906001019062000ba2565b5b50905062000bcf919062000bd3565b5090565b5b8082111562000bee57600081600090555060010162000bd4565b5090565b60008151905062000c038162000e53565b92915050565b60006020828403121562000c1c57600080fd5b600062000c2c8482850162000bf2565b91505092915050565b62000c408162000d58565b82525050565b600062000c55601b8362000cea565b915062000c628262000e2a565b602082019050919050565b62000c788162000d8c565b82525050565b600060408201905062000c95600083018562000c35565b62000ca4602083018462000c35565b9392505050565b6000602082019050818103600083015262000cc68162000c46565b9050919050565b600060208201905062000ce4600083018462000c6d565b92915050565b600082825260208201905092915050565b600062000d088262000d8c565b915062000d158362000d8c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d4d5762000d4c62000dcc565b5b828201905092915050565b600062000d658262000d6c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000daf57607f821691505b6020821081141562000dc65762000dc562000dfb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000e5e8162000d58565b811462000e6a57600080fd5b50565b60805160601c6144f262000e9360003960008181610d970152610dc301526144f26000f3fe6080604052600436106102555760003560e01c80638b42507f11610139578063c867d60b116100b6578063e207a92b1161007a578063e207a92b14610921578063ef422a181461094a578063f0cd1dac14610973578063f2fde38b1461099e578063f84ba65d146109c7578063f872858a146109f05761025c565b8063c867d60b14610828578063d158272d14610865578063d687b4d114610890578063da00097d146108b9578063dd62ed3e146108e45761025c565b8063a5d69d1f116100fd578063a5d69d1f14610745578063a9059cbb1461076e578063c2d4640e146107ab578063c49b9a80146107d4578063c816841b146107fd5761025c565b80638b42507f1461065e5780638da5cb5b1461069b578063914eb66a146106c657806395d89b41146106dd578063a457c2d7146107085761025c565b806339509351116101d25780634cb80fd5116101965780634cb80fd5146105285780635342acb4146105515780635881f3ef1461058e5780635997ed4c146105cb57806370a08231146105f657806382eefb43146106335761025c565b8063395093511461042f5780633b97084a1461046c5780633eaaf86b146104955780633ecad271146104c05780634a74bb02146104fd5761025c565b80631870517a116102195780631870517a1461034857806323b872dd1461037157806327c8f835146103ae5780632b112e49146103d9578063313ce567146104045761025c565b806306fdde0314610261578063087332141461028c578063095ea7b3146102b55780631694505e146102f257806318160ddd1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a1b565b6040516102839190613ca3565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae91906138ad565b610aad565b005b3480156102c157600080fd5b506102dc60048036038101906102d7919061381f565b610b8d565b6040516102e99190613c6d565b60405180910390f35b3480156102fe57600080fd5b50610307610bab565b6040516103149190613c88565b60405180910390f35b34801561032957600080fd5b50610332610bd1565b60405161033f9190613de5565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906138ad565b610bdb565b005b34801561037d57600080fd5b5061039860048036038101906103939190613794565b610cbb565b6040516103a59190613c6d565b60405180910390f35b3480156103ba57600080fd5b506103c3610d95565b6040516103d09190613bad565b60405180910390f35b3480156103e557600080fd5b506103ee610db9565b6040516103fb9190613de5565b60405180910390f35b34801561041057600080fd5b50610419610dfd565b6040516104269190613e8a565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061381f565b610e14565b6040516104639190613c6d565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613884565b610ec7565b005b3480156104a157600080fd5b506104aa610f66565b6040516104b79190613de5565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613706565b610f6c565b6040516104f49190613c6d565b60405180910390f35b34801561050957600080fd5b50610512610f8c565b60405161051f9190613c6d565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613706565b610f9f565b005b34801561055d57600080fd5b5061057860048036038101906105739190613706565b611078565b6040516105859190613c6d565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613706565b611098565b6040516105c29190613bad565b60405180910390f35b3480156105d757600080fd5b506105e06115f6565b6040516105ed9190613bc8565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613706565b61161c565b60405161062a9190613de5565b60405180910390f35b34801561063f57600080fd5b50610648611665565b6040516106559190613de5565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190613706565b61166b565b6040516106929190613c6d565b60405180910390f35b3480156106a757600080fd5b506106b061168b565b6040516106bd9190613bad565b60405180910390f35b3480156106d257600080fd5b506106db6116b4565b005b3480156106e957600080fd5b506106f2611807565b6040516106ff9190613ca3565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a919061381f565b611899565b60405161073c9190613c6d565b60405180910390f35b34801561075157600080fd5b5061076c6004803603810190610767919061385b565b611966565b005b34801561077a57600080fd5b506107956004803603810190610790919061381f565b611a18565b6040516107a29190613c6d565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd91906138ad565b611a37565b005b3480156107e057600080fd5b506107fb60048036038101906107f6919061385b565b611b17565b005b34801561080957600080fd5b50610812611c00565b60405161081f9190613bad565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190613706565b611c26565b60405161085c9190613c6d565b60405180910390f35b34801561087157600080fd5b5061087a611c46565b6040516108879190613bc8565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190613706565b611c6c565b005b3480156108c557600080fd5b506108ce611d45565b6040516108db9190613c6d565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613758565b611d58565b6040516109189190613de5565b60405180910390f35b34801561092d57600080fd5b5061094860048036038101906109439190613706565b611ddf565b005b34801561095657600080fd5b50610971600480360381019061096c91906137e3565b611ecf565b005b34801561097f57600080fd5b50610988611fbf565b6040516109959190613de5565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190613706565b611fc5565b005b3480156109d357600080fd5b506109ee60048036038101906109e991906137e3565b612187565b005b3480156109fc57600080fd5b50610a05612277565b604051610a129190613c6d565b60405180910390f35b606060028054610a2a906140df565b80601f0160208091040260200160405190810160405280929190818152602001828054610a56906140df565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b610ab56122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990613d85565b60405180910390fd5b82600f819055508160108190555080601181905550610b82601154610b74601054600f5461228a90919063ffffffff16565b61228a90919063ffffffff16565b601681905550505050565b6000610ba1610b9a6122e8565b84846122f0565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610be36122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6790613d85565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610cb0600e54610ca2600d54600c5461228a90919063ffffffff16565b61228a90919063ffffffff16565b601581905550505050565b6000610cc88484846124bb565b50610d8a84610cd56122e8565b610d858560405180606001604052806028815260200161447060289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d3b6122e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa09092919063ffffffff16565b6122f0565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610df8610de77f000000000000000000000000000000000000000000000000000000000000000061161c565b601854612b0490919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b6000610ebd610e216122e8565b84610eb88560076000610e326122e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461228a90919063ffffffff16565b6122f0565b6001905092915050565b610ecf6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5390613d85565b60405180910390fd5b80601b8190555050565b60185481565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b610fa76122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613d85565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60006110a26122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690613d85565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561117a57600080fd5b505afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b2919061372f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561121457600080fd5b505afa158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c919061372f565b6040518363ffffffff1660e01b8152600401611269929190613be3565b60206040518083038186803b15801561128157600080fd5b505afa158015611295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b9919061372f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561147a578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561133657600080fd5b505afa15801561134a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136e919061372f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113d057600080fd5b505afa1580156113e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611408919061372f565b6040518363ffffffff1660e01b8152600401611425929190613be3565b602060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611477919061372f565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60165481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116bc6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090613d85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611816906140df565b80601f0160208091040260200160405190810160405280929190818152602001828054611842906140df565b801561188f5780601f106118645761010080835404028352916020019161188f565b820191906000526020600020905b81548152906001019060200180831161187257829003601f168201915b5050505050905090565b600061195c6118a66122e8565b846119578560405180606001604052806025815260200161449860259139600760006118d06122e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa09092919063ffffffff16565b6122f0565b6001905092915050565b61196e6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290613d85565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611a2c611a256122e8565b84846124bb565b506001905092915050565b611a3f6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613d85565b60405180910390fd5b826012819055508160138190555080601481905550611b0c601454611afe60135460125461228a90919063ffffffff16565b61228a90919063ffffffff16565b601781905550505050565b611b1f6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba390613d85565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611bf59190613c6d565b60405180910390a150565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c746122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613d85565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611de76122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b90613d85565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ed76122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90613d85565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611fcd6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190613d85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190613d05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61218f6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461221c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221390613d85565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b60008082846122999190613efa565b9050838110156122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590613d25565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790613ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790613dc5565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124ae9190613de5565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252390613da5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390613cc5565b60405180910390fd5b601d60149054906101000a900460ff16156125c3576125bc848484612b4e565b9050612a99565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126675750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126b2576019548211156126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890613d45565b60405180910390fd5b5b60006126bd3061161c565b90506000601b5482101590508080156126e35750601d60149054906101000a900460ff16155b80156127395750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127515750601d60159054906101000a900460ff165b1561277b57601d60169054906101000a900460ff161561277157601b5491505b61277a82612d21565b5b612804846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa09092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128ea5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128fe576128f9878787612f12565b612900565b845b9050601d60179054906101000a900460ff1680156129685750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299757601a5461298b8261297d8961161c565b61228a90919063ffffffff16565b111561299657600080fd5b5b6129e981600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461228a90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a899190613de5565b60405180910390a3600193505050505b9392505050565b6000838311158290612ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adf9190613ca3565b60405180910390fd5b5060008385612af79190613fdb565b9050809150509392505050565b6000612b4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612aa0565b905092915050565b6000612bd9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa09092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c6e82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461228a90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0e9190613de5565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612d7a6002612d6c601754612d5e6012548761313990919063ffffffff16565b6131b490919063ffffffff16565b6131b490919063ffffffff16565b90506000612d918284612b0490919063ffffffff16565b9050612d9c816131fe565b60004790506000612dcd612dbc60026012546131b490919063ffffffff16565b601754612b0490919063ffffffff16565b90506000612e0b6002612dfd84612def6012548861313990919063ffffffff16565b6131b490919063ffffffff16565b6131b490919063ffffffff16565b90506000612e3683612e286014548761313990919063ffffffff16565b6131b490919063ffffffff16565b90506000612e5f82612e518588612b0490919063ffffffff16565b612b0490919063ffffffff16565b90506000811115612e9757612e96600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826134fb565b5b6000821115612ecd57612ecc600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836134fb565b5b600083118015612edd5750600087115b15612eed57612eec8784613546565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f9a57612f936064612f856015548661313990919063ffffffff16565b6131b490919063ffffffff16565b9050613018565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156130175761301460646130066016548661313990919063ffffffff16565b6131b490919063ffffffff16565b90505b5b600081111561311c5761307381600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461228a90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131139190613de5565b60405180910390a35b61312f8184612b0490919063ffffffff16565b9150509392505050565b60008083141561314c57600090506131ae565b6000828461315a9190613f81565b90508284826131699190613f50565b146131a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a090613d65565b60405180910390fd5b809150505b92915050565b60006131f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061363a565b905092915050565b6000600267ffffffffffffffff811115613241577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561326f5781602001602082028036833780820191505090505b50905030816000815181106132ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561334f57600080fd5b505afa158015613363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613387919061372f565b816001815181106133c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061342830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f0565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161348c959493929190613e30565b600060405180830381600087803b1580156134a657600080fd5b505af11580156134ba573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516134ef929190613e00565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613541573d6000803e3d6000fd5b505050565b61357330601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f0565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135bf61168b565b426040518863ffffffff1660e01b81526004016135e196959493929190613c0c565b6060604051808303818588803b1580156135fa57600080fd5b505af115801561360e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061363391906138fc565b5050505050565b60008083118290613681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136789190613ca3565b60405180910390fd5b50600083856136909190613f50565b9050809150509392505050565b6000813590506136ac8161442a565b92915050565b6000815190506136c18161442a565b92915050565b6000813590506136d681614441565b92915050565b6000813590506136eb81614458565b92915050565b60008151905061370081614458565b92915050565b60006020828403121561371857600080fd5b60006137268482850161369d565b91505092915050565b60006020828403121561374157600080fd5b600061374f848285016136b2565b91505092915050565b6000806040838503121561376b57600080fd5b60006137798582860161369d565b925050602061378a8582860161369d565b9150509250929050565b6000806000606084860312156137a957600080fd5b60006137b78682870161369d565b93505060206137c88682870161369d565b92505060406137d9868287016136dc565b9150509250925092565b600080604083850312156137f657600080fd5b60006138048582860161369d565b9250506020613815858286016136c7565b9150509250929050565b6000806040838503121561383257600080fd5b60006138408582860161369d565b9250506020613851858286016136dc565b9150509250929050565b60006020828403121561386d57600080fd5b600061387b848285016136c7565b91505092915050565b60006020828403121561389657600080fd5b60006138a4848285016136dc565b91505092915050565b6000806000606084860312156138c257600080fd5b60006138d0868287016136dc565b93505060206138e1868287016136dc565b92505060406138f2868287016136dc565b9150509250925092565b60008060006060848603121561391157600080fd5b600061391f868287016136f1565b9350506020613930868287016136f1565b9250506040613941868287016136f1565b9150509250925092565b60006139578383613972565b60208301905092915050565b61396c81614021565b82525050565b61397b8161400f565b82525050565b61398a8161400f565b82525050565b600061399b82613eb5565b6139a58185613ed8565b93506139b083613ea5565b8060005b838110156139e15781516139c8888261394b565b97506139d383613ecb565b9250506001810190506139b4565b5085935050505092915050565b6139f781614033565b82525050565b613a0681614076565b82525050565b613a158161409a565b82525050565b6000613a2682613ec0565b613a308185613ee9565b9350613a408185602086016140ac565b613a498161419e565b840191505092915050565b6000613a61602383613ee9565b9150613a6c826141af565b604082019050919050565b6000613a84602483613ee9565b9150613a8f826141fe565b604082019050919050565b6000613aa7602683613ee9565b9150613ab28261424d565b604082019050919050565b6000613aca601b83613ee9565b9150613ad58261429c565b602082019050919050565b6000613aed602883613ee9565b9150613af8826142c5565b604082019050919050565b6000613b10602183613ee9565b9150613b1b82614314565b604082019050919050565b6000613b33602083613ee9565b9150613b3e82614363565b602082019050919050565b6000613b56602583613ee9565b9150613b618261438c565b604082019050919050565b6000613b79602283613ee9565b9150613b84826143db565b604082019050919050565b613b988161405f565b82525050565b613ba781614069565b82525050565b6000602082019050613bc26000830184613981565b92915050565b6000602082019050613bdd6000830184613963565b92915050565b6000604082019050613bf86000830185613981565b613c056020830184613981565b9392505050565b600060c082019050613c216000830189613981565b613c2e6020830188613b8f565b613c3b6040830187613a0c565b613c486060830186613a0c565b613c556080830185613981565b613c6260a0830184613b8f565b979650505050505050565b6000602082019050613c8260008301846139ee565b92915050565b6000602082019050613c9d60008301846139fd565b92915050565b60006020820190508181036000830152613cbd8184613a1b565b905092915050565b60006020820190508181036000830152613cde81613a54565b9050919050565b60006020820190508181036000830152613cfe81613a77565b9050919050565b60006020820190508181036000830152613d1e81613a9a565b9050919050565b60006020820190508181036000830152613d3e81613abd565b9050919050565b60006020820190508181036000830152613d5e81613ae0565b9050919050565b60006020820190508181036000830152613d7e81613b03565b9050919050565b60006020820190508181036000830152613d9e81613b26565b9050919050565b60006020820190508181036000830152613dbe81613b49565b9050919050565b60006020820190508181036000830152613dde81613b6c565b9050919050565b6000602082019050613dfa6000830184613b8f565b92915050565b6000604082019050613e156000830185613b8f565b8181036020830152613e278184613990565b90509392505050565b600060a082019050613e456000830188613b8f565b613e526020830187613a0c565b8181036040830152613e648186613990565b9050613e736060830185613981565b613e806080830184613b8f565b9695505050505050565b6000602082019050613e9f6000830184613b9e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613f058261405f565b9150613f108361405f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f4557613f44614111565b5b828201905092915050565b6000613f5b8261405f565b9150613f668361405f565b925082613f7657613f75614140565b5b828204905092915050565b6000613f8c8261405f565b9150613f978361405f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fd057613fcf614111565b5b828202905092915050565b6000613fe68261405f565b9150613ff18361405f565b92508282101561400457614003614111565b5b828203905092915050565b600061401a8261403f565b9050919050565b600061402c8261403f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061408182614088565b9050919050565b60006140938261403f565b9050919050565b60006140a58261405f565b9050919050565b60005b838110156140ca5780820151818401526020810190506140af565b838111156140d9576000848401525b50505050565b600060028204905060018216806140f757607f821691505b6020821081141561410b5761410a61416f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6144338161400f565b811461443e57600080fd5b50565b61444a81614033565b811461445557600080fd5b50565b6144618161405f565b811461446c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fbd6c8b5675dd43f509a87b0fb8349498a0449b9c64a0d81f178c274f5b6216764736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80638b42507f11610139578063c867d60b116100b6578063e207a92b1161007a578063e207a92b14610921578063ef422a181461094a578063f0cd1dac14610973578063f2fde38b1461099e578063f84ba65d146109c7578063f872858a146109f05761025c565b8063c867d60b14610828578063d158272d14610865578063d687b4d114610890578063da00097d146108b9578063dd62ed3e146108e45761025c565b8063a5d69d1f116100fd578063a5d69d1f14610745578063a9059cbb1461076e578063c2d4640e146107ab578063c49b9a80146107d4578063c816841b146107fd5761025c565b80638b42507f1461065e5780638da5cb5b1461069b578063914eb66a146106c657806395d89b41146106dd578063a457c2d7146107085761025c565b806339509351116101d25780634cb80fd5116101965780634cb80fd5146105285780635342acb4146105515780635881f3ef1461058e5780635997ed4c146105cb57806370a08231146105f657806382eefb43146106335761025c565b8063395093511461042f5780633b97084a1461046c5780633eaaf86b146104955780633ecad271146104c05780634a74bb02146104fd5761025c565b80631870517a116102195780631870517a1461034857806323b872dd1461037157806327c8f835146103ae5780632b112e49146103d9578063313ce567146104045761025c565b806306fdde0314610261578063087332141461028c578063095ea7b3146102b55780631694505e146102f257806318160ddd1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a1b565b6040516102839190613ca3565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae91906138ad565b610aad565b005b3480156102c157600080fd5b506102dc60048036038101906102d7919061381f565b610b8d565b6040516102e99190613c6d565b60405180910390f35b3480156102fe57600080fd5b50610307610bab565b6040516103149190613c88565b60405180910390f35b34801561032957600080fd5b50610332610bd1565b60405161033f9190613de5565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906138ad565b610bdb565b005b34801561037d57600080fd5b5061039860048036038101906103939190613794565b610cbb565b6040516103a59190613c6d565b60405180910390f35b3480156103ba57600080fd5b506103c3610d95565b6040516103d09190613bad565b60405180910390f35b3480156103e557600080fd5b506103ee610db9565b6040516103fb9190613de5565b60405180910390f35b34801561041057600080fd5b50610419610dfd565b6040516104269190613e8a565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061381f565b610e14565b6040516104639190613c6d565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613884565b610ec7565b005b3480156104a157600080fd5b506104aa610f66565b6040516104b79190613de5565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613706565b610f6c565b6040516104f49190613c6d565b60405180910390f35b34801561050957600080fd5b50610512610f8c565b60405161051f9190613c6d565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613706565b610f9f565b005b34801561055d57600080fd5b5061057860048036038101906105739190613706565b611078565b6040516105859190613c6d565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613706565b611098565b6040516105c29190613bad565b60405180910390f35b3480156105d757600080fd5b506105e06115f6565b6040516105ed9190613bc8565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613706565b61161c565b60405161062a9190613de5565b60405180910390f35b34801561063f57600080fd5b50610648611665565b6040516106559190613de5565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190613706565b61166b565b6040516106929190613c6d565b60405180910390f35b3480156106a757600080fd5b506106b061168b565b6040516106bd9190613bad565b60405180910390f35b3480156106d257600080fd5b506106db6116b4565b005b3480156106e957600080fd5b506106f2611807565b6040516106ff9190613ca3565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a919061381f565b611899565b60405161073c9190613c6d565b60405180910390f35b34801561075157600080fd5b5061076c6004803603810190610767919061385b565b611966565b005b34801561077a57600080fd5b506107956004803603810190610790919061381f565b611a18565b6040516107a29190613c6d565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd91906138ad565b611a37565b005b3480156107e057600080fd5b506107fb60048036038101906107f6919061385b565b611b17565b005b34801561080957600080fd5b50610812611c00565b60405161081f9190613bad565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190613706565b611c26565b60405161085c9190613c6d565b60405180910390f35b34801561087157600080fd5b5061087a611c46565b6040516108879190613bc8565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190613706565b611c6c565b005b3480156108c557600080fd5b506108ce611d45565b6040516108db9190613c6d565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613758565b611d58565b6040516109189190613de5565b60405180910390f35b34801561092d57600080fd5b5061094860048036038101906109439190613706565b611ddf565b005b34801561095657600080fd5b50610971600480360381019061096c91906137e3565b611ecf565b005b34801561097f57600080fd5b50610988611fbf565b6040516109959190613de5565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190613706565b611fc5565b005b3480156109d357600080fd5b506109ee60048036038101906109e991906137e3565b612187565b005b3480156109fc57600080fd5b50610a05612277565b604051610a129190613c6d565b60405180910390f35b606060028054610a2a906140df565b80601f0160208091040260200160405190810160405280929190818152602001828054610a56906140df565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b610ab56122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990613d85565b60405180910390fd5b82600f819055508160108190555080601181905550610b82601154610b74601054600f5461228a90919063ffffffff16565b61228a90919063ffffffff16565b601681905550505050565b6000610ba1610b9a6122e8565b84846122f0565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610be36122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6790613d85565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610cb0600e54610ca2600d54600c5461228a90919063ffffffff16565b61228a90919063ffffffff16565b601581905550505050565b6000610cc88484846124bb565b50610d8a84610cd56122e8565b610d858560405180606001604052806028815260200161447060289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d3b6122e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa09092919063ffffffff16565b6122f0565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000610df8610de77f000000000000000000000000000000000000000000000000000000000000dead61161c565b601854612b0490919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b6000610ebd610e216122e8565b84610eb88560076000610e326122e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461228a90919063ffffffff16565b6122f0565b6001905092915050565b610ecf6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5390613d85565b60405180910390fd5b80601b8190555050565b60185481565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b610fa76122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613d85565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60006110a26122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690613d85565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561117a57600080fd5b505afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b2919061372f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561121457600080fd5b505afa158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c919061372f565b6040518363ffffffff1660e01b8152600401611269929190613be3565b60206040518083038186803b15801561128157600080fd5b505afa158015611295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b9919061372f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561147a578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561133657600080fd5b505afa15801561134a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136e919061372f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113d057600080fd5b505afa1580156113e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611408919061372f565b6040518363ffffffff1660e01b8152600401611425929190613be3565b602060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611477919061372f565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60165481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116bc6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090613d85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611816906140df565b80601f0160208091040260200160405190810160405280929190818152602001828054611842906140df565b801561188f5780601f106118645761010080835404028352916020019161188f565b820191906000526020600020905b81548152906001019060200180831161187257829003601f168201915b5050505050905090565b600061195c6118a66122e8565b846119578560405180606001604052806025815260200161449860259139600760006118d06122e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa09092919063ffffffff16565b6122f0565b6001905092915050565b61196e6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290613d85565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611a2c611a256122e8565b84846124bb565b506001905092915050565b611a3f6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613d85565b60405180910390fd5b826012819055508160138190555080601481905550611b0c601454611afe60135460125461228a90919063ffffffff16565b61228a90919063ffffffff16565b601781905550505050565b611b1f6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba390613d85565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611bf59190613c6d565b60405180910390a150565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c746122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613d85565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611de76122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b90613d85565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ed76122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90613d85565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611fcd6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190613d85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190613d05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61218f6122e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461221c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221390613d85565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b60008082846122999190613efa565b9050838110156122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590613d25565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790613ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790613dc5565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124ae9190613de5565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252390613da5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390613cc5565b60405180910390fd5b601d60149054906101000a900460ff16156125c3576125bc848484612b4e565b9050612a99565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126675750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126b2576019548211156126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890613d45565b60405180910390fd5b5b60006126bd3061161c565b90506000601b5482101590508080156126e35750601d60149054906101000a900460ff16155b80156127395750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127515750601d60159054906101000a900460ff165b1561277b57601d60169054906101000a900460ff161561277157601b5491505b61277a82612d21565b5b612804846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa09092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128ea5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128fe576128f9878787612f12565b612900565b845b9050601d60179054906101000a900460ff1680156129685750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299757601a5461298b8261297d8961161c565b61228a90919063ffffffff16565b111561299657600080fd5b5b6129e981600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461228a90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a899190613de5565b60405180910390a3600193505050505b9392505050565b6000838311158290612ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adf9190613ca3565b60405180910390fd5b5060008385612af79190613fdb565b9050809150509392505050565b6000612b4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612aa0565b905092915050565b6000612bd9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa09092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c6e82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461228a90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0e9190613de5565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612d7a6002612d6c601754612d5e6012548761313990919063ffffffff16565b6131b490919063ffffffff16565b6131b490919063ffffffff16565b90506000612d918284612b0490919063ffffffff16565b9050612d9c816131fe565b60004790506000612dcd612dbc60026012546131b490919063ffffffff16565b601754612b0490919063ffffffff16565b90506000612e0b6002612dfd84612def6012548861313990919063ffffffff16565b6131b490919063ffffffff16565b6131b490919063ffffffff16565b90506000612e3683612e286014548761313990919063ffffffff16565b6131b490919063ffffffff16565b90506000612e5f82612e518588612b0490919063ffffffff16565b612b0490919063ffffffff16565b90506000811115612e9757612e96600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826134fb565b5b6000821115612ecd57612ecc600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836134fb565b5b600083118015612edd5750600087115b15612eed57612eec8784613546565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f9a57612f936064612f856015548661313990919063ffffffff16565b6131b490919063ffffffff16565b9050613018565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156130175761301460646130066016548661313990919063ffffffff16565b6131b490919063ffffffff16565b90505b5b600081111561311c5761307381600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461228a90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131139190613de5565b60405180910390a35b61312f8184612b0490919063ffffffff16565b9150509392505050565b60008083141561314c57600090506131ae565b6000828461315a9190613f81565b90508284826131699190613f50565b146131a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a090613d65565b60405180910390fd5b809150505b92915050565b60006131f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061363a565b905092915050565b6000600267ffffffffffffffff811115613241577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561326f5781602001602082028036833780820191505090505b50905030816000815181106132ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561334f57600080fd5b505afa158015613363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613387919061372f565b816001815181106133c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061342830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f0565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161348c959493929190613e30565b600060405180830381600087803b1580156134a657600080fd5b505af11580156134ba573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516134ef929190613e00565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613541573d6000803e3d6000fd5b505050565b61357330601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f0565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135bf61168b565b426040518863ffffffff1660e01b81526004016135e196959493929190613c0c565b6060604051808303818588803b1580156135fa57600080fd5b505af115801561360e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061363391906138fc565b5050505050565b60008083118290613681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136789190613ca3565b60405180910390fd5b50600083856136909190613f50565b9050809150509392505050565b6000813590506136ac8161442a565b92915050565b6000815190506136c18161442a565b92915050565b6000813590506136d681614441565b92915050565b6000813590506136eb81614458565b92915050565b60008151905061370081614458565b92915050565b60006020828403121561371857600080fd5b60006137268482850161369d565b91505092915050565b60006020828403121561374157600080fd5b600061374f848285016136b2565b91505092915050565b6000806040838503121561376b57600080fd5b60006137798582860161369d565b925050602061378a8582860161369d565b9150509250929050565b6000806000606084860312156137a957600080fd5b60006137b78682870161369d565b93505060206137c88682870161369d565b92505060406137d9868287016136dc565b9150509250925092565b600080604083850312156137f657600080fd5b60006138048582860161369d565b9250506020613815858286016136c7565b9150509250929050565b6000806040838503121561383257600080fd5b60006138408582860161369d565b9250506020613851858286016136dc565b9150509250929050565b60006020828403121561386d57600080fd5b600061387b848285016136c7565b91505092915050565b60006020828403121561389657600080fd5b60006138a4848285016136dc565b91505092915050565b6000806000606084860312156138c257600080fd5b60006138d0868287016136dc565b93505060206138e1868287016136dc565b92505060406138f2868287016136dc565b9150509250925092565b60008060006060848603121561391157600080fd5b600061391f868287016136f1565b9350506020613930868287016136f1565b9250506040613941868287016136f1565b9150509250925092565b60006139578383613972565b60208301905092915050565b61396c81614021565b82525050565b61397b8161400f565b82525050565b61398a8161400f565b82525050565b600061399b82613eb5565b6139a58185613ed8565b93506139b083613ea5565b8060005b838110156139e15781516139c8888261394b565b97506139d383613ecb565b9250506001810190506139b4565b5085935050505092915050565b6139f781614033565b82525050565b613a0681614076565b82525050565b613a158161409a565b82525050565b6000613a2682613ec0565b613a308185613ee9565b9350613a408185602086016140ac565b613a498161419e565b840191505092915050565b6000613a61602383613ee9565b9150613a6c826141af565b604082019050919050565b6000613a84602483613ee9565b9150613a8f826141fe565b604082019050919050565b6000613aa7602683613ee9565b9150613ab28261424d565b604082019050919050565b6000613aca601b83613ee9565b9150613ad58261429c565b602082019050919050565b6000613aed602883613ee9565b9150613af8826142c5565b604082019050919050565b6000613b10602183613ee9565b9150613b1b82614314565b604082019050919050565b6000613b33602083613ee9565b9150613b3e82614363565b602082019050919050565b6000613b56602583613ee9565b9150613b618261438c565b604082019050919050565b6000613b79602283613ee9565b9150613b84826143db565b604082019050919050565b613b988161405f565b82525050565b613ba781614069565b82525050565b6000602082019050613bc26000830184613981565b92915050565b6000602082019050613bdd6000830184613963565b92915050565b6000604082019050613bf86000830185613981565b613c056020830184613981565b9392505050565b600060c082019050613c216000830189613981565b613c2e6020830188613b8f565b613c3b6040830187613a0c565b613c486060830186613a0c565b613c556080830185613981565b613c6260a0830184613b8f565b979650505050505050565b6000602082019050613c8260008301846139ee565b92915050565b6000602082019050613c9d60008301846139fd565b92915050565b60006020820190508181036000830152613cbd8184613a1b565b905092915050565b60006020820190508181036000830152613cde81613a54565b9050919050565b60006020820190508181036000830152613cfe81613a77565b9050919050565b60006020820190508181036000830152613d1e81613a9a565b9050919050565b60006020820190508181036000830152613d3e81613abd565b9050919050565b60006020820190508181036000830152613d5e81613ae0565b9050919050565b60006020820190508181036000830152613d7e81613b03565b9050919050565b60006020820190508181036000830152613d9e81613b26565b9050919050565b60006020820190508181036000830152613dbe81613b49565b9050919050565b60006020820190508181036000830152613dde81613b6c565b9050919050565b6000602082019050613dfa6000830184613b8f565b92915050565b6000604082019050613e156000830185613b8f565b8181036020830152613e278184613990565b90509392505050565b600060a082019050613e456000830188613b8f565b613e526020830187613a0c565b8181036040830152613e648186613990565b9050613e736060830185613981565b613e806080830184613b8f565b9695505050505050565b6000602082019050613e9f6000830184613b9e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613f058261405f565b9150613f108361405f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f4557613f44614111565b5b828201905092915050565b6000613f5b8261405f565b9150613f668361405f565b925082613f7657613f75614140565b5b828204905092915050565b6000613f8c8261405f565b9150613f978361405f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fd057613fcf614111565b5b828202905092915050565b6000613fe68261405f565b9150613ff18361405f565b92508282101561400457614003614111565b5b828203905092915050565b600061401a8261403f565b9050919050565b600061402c8261403f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061408182614088565b9050919050565b60006140938261403f565b9050919050565b60006140a58261405f565b9050919050565b60005b838110156140ca5780820151818401526020810190506140af565b838111156140d9576000848401525b50505050565b600060028204905060018216806140f757607f821691505b6020821081141561410b5761410a61416f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6144338161400f565b811461443e57600080fd5b50565b61444a81614033565b811461445557600080fd5b50565b6144618161405f565b811461446c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fbd6c8b5675dd43f509a87b0fb8349498a0449b9c64a0d81f178c274f5b6216764736f6c63430008040033

Deployed Bytecode Sourcemap

13948:14049:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17550:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19967:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18716:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15576:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17827:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19630:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22753:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14381:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17736:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18213:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20678:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15343:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14773:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15691:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20810:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14602:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21669:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14291:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17935:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15244:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14718:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5487:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5712:145;;;;;;;;;;;;;:::i;:::-;;17641:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18439:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21258:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22578:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20316:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21079:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15624:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14659:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14185:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20957:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15738:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18062:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19230:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19487:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15201:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5865:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19342:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15790:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17550:83;17587:13;17620:5;17613:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17550:83;:::o;19967:337::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20110:15:::1;20090:17;:35;;;;20156:15;20136:17;:35;;;;20196:9;20182:11;:23;;;;20239:57;20284:11;;20239:40;20261:17;;20239;;:21;;:40;;;;:::i;:::-;:44;;:57;;;;:::i;:::-;20218:18;:78;;;;19967:337:::0;;;:::o;18716:161::-;18791:4;18808:39;18817:12;:10;:12::i;:::-;18831:7;18840:6;18808:8;:39::i;:::-;18865:4;18858:11;;18716:161;;;;:::o;15576:41::-;;;;;;;;;;;;;:::o;17827:100::-;17880:7;17907:12;;17900:19;;17827:100;:::o;19630:329::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19771:15:::1;19752:16;:34;;;;19816:15;19797:16;:34;;;;19855:9;19842:10;:22;;;;19897:54;19940:10;;19897:38;19918:16;;19897;;:20;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;19877:17;:74;;;;19630:329:::0;;;:::o;22753:313::-;22851:4;22868:36;22878:6;22886:9;22897:6;22868:9;:36::i;:::-;;22915:121;22924:6;22932:12;:10;:12::i;:::-;22946:89;22984:6;22946:89;;;;;;;;;;;;;;;;;:11;:19;22958:6;22946:19;;;;;;;;;;;;;;;:33;22966:12;:10;:12::i;:::-;22946:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22915:8;:121::i;:::-;23054:4;23047:11;;22753:313;;;;;:::o;14381:81::-;;;:::o;21395:128::-;21448:7;21475:40;21492:22;21502:11;21492:9;:22::i;:::-;21475:12;;:16;;:40;;;;:::i;:::-;21468:47;;21395:128;:::o;17736:83::-;17777:5;17802:9;;;;;;;;;;;17795:16;;17736:83;:::o;18213:218::-;18301:4;18318:83;18327:12;:10;:12::i;:::-;18341:7;18350:50;18389:10;18350:11;:25;18362:12;:10;:12::i;:::-;18350:25;;;;;;;;;;;;;;;:34;18376:7;18350:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18318:8;:83::i;:::-;18419:4;18412:11;;18213:218;;;;:::o;20678:124::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20786:8:::1;20760:23;:34;;;;20678:124:::0;:::o;15343:49::-;;;;:::o;14773:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15691:40::-;;;;;;;;;;;;;:::o;20810:139::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20930:10:::1;20897:22;;:44;;;;;;;;;;;;;;;;;;20810:139:::0;:::o;14602:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;21669:807::-;21749:22;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21786:35:::1;21843:16;21786:74;;21909:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21891:53;;;21953:4;21960:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21891:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21874:110;;22026:1;22000:28;;:14;:28;;;21997:225;;;22114:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22096:74;;;22179:4;22186:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22096:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22079:131;;21997:225;22248:14;22234:11;;:28;;;;;;;;;;;;;;;;;;22314:16;22296:15;;:34;;;;;;;;;;;;;;;;;;22412:4;22368:19;:41;22396:11;;;;;;;;;;;22368:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;22464:4;22427:12;:34;22448:11;;;;;;;;;;;22427:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;5691:1;21669:807:::0;;;:::o;14291:83::-;;;;;;;;;;;;;:::o;17935:119::-;18001:7;18028:9;:18;18038:7;18028:18;;;;;;;;;;;;;;;;18021:25;;17935:119;;;:::o;15244:38::-;;;;:::o;14718:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5487:79::-;5525:7;5552:6;;;;;;;;;;;5545:13;;5487:79;:::o;5712:145::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5816:1:::1;5779:40;;5800:6;::::0;::::1;;;;;;;;5779:40;;;;;;;;;;;;5847:1;5830:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5712:145::o:0;17641:87::-;17680:13;17713:7;17706:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17641:87;:::o;18439:269::-;18532:4;18549:129;18558:12;:10;:12::i;:::-;18572:7;18581:96;18620:15;18581:96;;;;;;;;;;;;;;;;;:11;:25;18593:12;:10;:12::i;:::-;18581:25;;;;;;;;;;;;;;;:34;18607:7;18581:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18549:8;:129::i;:::-;18696:4;18689:11;;18439:269;;;;:::o;21258:125::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21367:8:::1;21339:25;;:36;;;;;;;;;;;;;;;;;;21258:125:::0;:::o;22578:167::-;22656:4;22673:42;22683:12;:10;:12::i;:::-;22697:9;22708:6;22673:9;:42::i;:::-;;22733:4;22726:11;;22578:167;;;;:::o;20316:354::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20474:17:::1;20456:15;:35;;;;20520:17;20502:15;:35;;;;20560:11;20548:9;:23;;;;20611:51;20652:9;;20611:36;20631:15;;20611;;:19;;:36;;;;:::i;:::-;:40;;:51;;;;:::i;:::-;20584:24;:78;;;;20316:354:::0;;;:::o;21079:171::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21180:8:::1;21156:21;;:32;;;;;;;;;;;;;;;;;;21204:38;21233:8;21204:38;;;;;;:::i;:::-;;;;;;;;21079:171:::0;:::o;15624:26::-;;;;;;;;;;;;;:::o;14659:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14185:99::-;;;;;;;;;;;;;:::o;20957:114::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21052:10:::1;21035:6;;:28;;;;;;;;;;;;;;;;;;20957:114:::0;:::o;15738:45::-;;;;;;;;;;;;;:::o;18062:143::-;18143:7;18170:11;:18;18182:5;18170:18;;;;;;;;;;;;;;;:27;18189:7;18170:27;;;;;;;;;;;;;;;;18163:34;;18062:143;;;;:::o;19230:104::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19322:4:::1;19298:12;:21;19311:7;19298:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19230:104:::0;:::o;19487:135::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19606:8:::1;19577:17;:26;19595:7;19577:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;19487:135:::0;;:::o;15201:36::-;;;;:::o;5865:244::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5974:1:::1;5954:22;;:8;:22;;;;5946:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6064:8;6035:38;;6056:6;::::0;::::1;;;;;;;;6035:38;;;;;;;;;;;;6093:8;6084:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5865:244:::0;:::o;19342:127::-;5631:12;:10;:12::i;:::-;5621:22;;:6;;;;;;;;;;:22;;;5613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19455:6:::1;19429:15;:23;19445:6;19429:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19342:127:::0;;:::o;15790:35::-;;;;;;;;;;;;;:::o;1191:181::-;1249:7;1269:9;1285:1;1281;:5;;;;:::i;:::-;1269:17;;1310:1;1305;:6;;1297:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1363:1;1356:8;;;1191:181;;;;:::o;123:115::-;176:15;219:10;204:26;;123:115;:::o;18885:337::-;18995:1;18978:19;;:5;:19;;;;18970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19076:1;19057:21;;:7;:21;;;;19049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19160:6;19130:11;:18;19142:5;19130:18;;;;;;;;;;;;;;;:27;19149:7;19130:27;;;;;;;;;;;;;;;:36;;;;19198:7;19182:32;;19191:5;19182:32;;;19207:6;19182:32;;;;;;:::i;:::-;;;;;;;;18885:337;;;:::o;23074:1707::-;23161:4;23206:1;23188:20;;:6;:20;;;;23180:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23290:1;23269:23;;:9;:23;;;;23261:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23348:16;;;;;;;;;;;23345:1429;;;23398:41;23413:6;23421:9;23432:6;23398:14;:41::i;:::-;23391:48;;;;23345:1429;23495:15;:23;23511:6;23495:23;;;;;;;;;;;;;;;;;;;;;;;;;23494:24;:55;;;;;23523:15;:26;23539:9;23523:26;;;;;;;;;;;;;;;;;;;;;;;;;23522:27;23494:55;23491:170;;;23588:12;;23578:6;:22;;23570:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23491:170;23689:28;23720:24;23738:4;23720:9;:24::i;:::-;23689:55;;23759:28;23814:23;;23790:20;:47;;23759:78;;23870:23;:44;;;;;23898:16;;;;;;;;;;;23897:17;23870:44;:69;;;;;23919:12;:20;23932:6;23919:20;;;;;;;;;;;;;;;;;;;;;;;;;23918:21;23870:69;:94;;;;;23943:21;;;;;;;;;;;23870:94;23866:305;;;24002:25;;;;;;;;;;;23999:97;;;24073:23;;24050:46;;23999:97;24115:36;24130:20;24115:14;:36::i;:::-;23866:305;24207:53;24229:6;24207:53;;;;;;;;;;;;;;;;;:9;:17;24217:6;24207:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24187:9;:17;24197:6;24187:17;;;;;;;;;;;;;;;:73;;;;24277:19;24300:17;:25;24318:6;24300:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;24329:17;:28;24347:9;24329:28;;;;;;;;;;;;;;;;;;;;;;;;;24300:57;24299:148;;24413:34;24421:6;24429:9;24440:6;24413:7;:34::i;:::-;24299:148;;;24404:6;24299:148;24277:170;;24467:16;;;;;;;;;;;:51;;;;;24488:19;:30;24508:9;24488:30;;;;;;;;;;;;;;;;;;;;;;;;;24487:31;24467:51;24464:133;;;24586:10;;24545:37;24570:11;24545:20;24555:9;24545;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;24537:60;;;;;;24464:133;24637:37;24662:11;24637:9;:20;24647:9;24637:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24614:9;:20;24624:9;24614:20;;;;;;;;;;;;;;;:60;;;;24713:9;24696:40;;24705:6;24696:40;;;24724:11;24696:40;;;;;;:::i;:::-;;;;;;;;24758:4;24751:11;;;;;23074:1707;;;;;;:::o;1524:192::-;1610:7;1643:1;1638;:6;;1646:12;1630:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1670:9;1686:1;1682;:5;;;;:::i;:::-;1670:17;;1707:1;1700:8;;;1524:192;;;;;:::o;1380:136::-;1438:7;1465:43;1469:1;1472;1465:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1458:50;;1380:136;;;;:::o;24789:330::-;24882:4;24919:53;24941:6;24919:53;;;;;;;;;;;;;;;;;:9;:17;24929:6;24919:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24899:9;:17;24909:6;24899:17;;;;;;;;;;;;;;;:73;;;;25006:32;25031:6;25006:9;:20;25016:9;25006:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24983:9;:20;24993:9;24983:20;;;;;;;;;;;;;;;:55;;;;25071:9;25054:35;;25063:6;25054:35;;;25082:6;25054:35;;;;;;:::i;:::-;;;;;;;;25107:4;25100:11;;24789:330;;;;;:::o;25127:1032::-;16267:4;16248:16;;:23;;;;;;;;;;;;;;;;;;25209:19:::1;25231:65;25294:1;25231:58;25264:24;;25231:28;25243:15;;25231:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;25209:87;;25307:21;25331:24;25343:11;25331:7;:11;;:24;;;;:::i;:::-;25307:48;;25368:31;25385:13;25368:16;:31::i;:::-;25410:22;25435:21;25410:46;;25469:19;25491:52;25520:22;25540:1;25520:15;;:19;;:22;;;;:::i;:::-;25491:24;;:28;;:52;;;;:::i;:::-;25469:74;;25564:26;25593:59;25650:1;25593:52;25633:11;25593:35;25612:15;;25593:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25564:88;;25663:20;25686:46;25720:11;25686:29;25705:9;;25686:14;:18;;:29;;;;:::i;:::-;:33;;:46;;;;:::i;:::-;25663:69;;25743:26;25772:56;25815:12;25772:38;25791:18;25772:14;:18;;:38;;;;:::i;:::-;:42;;:56;;;;:::i;:::-;25743:85;;25865:1;25844:18;:22;25841:104;;;25881:64;25902:22;;;;;;;;;;;25926:18;25881:20;:64::i;:::-;25841:104;25976:1;25961:12;:16;25958:76;;;25992:42;26013:6;;;;;;;;;;;26021:12;25992:20;:42::i;:::-;25958:76;26071:1;26050:18;:22;:41;;;;;26090:1;26076:11;:15;26050:41;26047:104;;;26106:45;26119:11;26132:18;26106:12;:45::i;:::-;26047:104;16282:1;;;;;;;16313:5:::0;16294:16;;:24;;;;;;;;;;;;;;;;;;25127:1032;:::o;27366:622::-;27452:7;27482:17;27502:1;27482:21;;27527:12;:20;27540:6;27527:20;;;;;;;;;;;;;;;;;;;;;;;;;27524:223;;;27576:38;27610:3;27576:29;27587:17;;27576:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27564:50;;27524:223;;;27644:12;:23;27657:9;27644:23;;;;;;;;;;;;;;;;;;;;;;;;;27641:106;;;27696:39;27731:3;27696:30;27707:18;;27696:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27684:51;;27641:106;27524:223;27782:1;27770:9;:13;27767:173;;;27827:39;27856:9;27827;:24;27845:4;27827:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27800:9;:24;27818:4;27800:24;;;;;;;;;;;;;;;:66;;;;27911:4;27886:42;;27895:6;27886:42;;;27918:9;27886:42;;;;;;:::i;:::-;;;;;;;;27767:173;27959:21;27970:9;27959:6;:10;;:21;;;;:::i;:::-;27952:28;;;27366:622;;;;;:::o;1724:250::-;1782:7;1811:1;1806;:6;1802:47;;;1836:1;1829:8;;;;1802:47;1861:9;1877:1;1873;:5;;;;:::i;:::-;1861:17;;1906:1;1901;1897;:5;;;;:::i;:::-;:10;1889:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1965:1;1958:8;;;1724:250;;;;;:::o;1982:132::-;2040:7;2067:39;2071:1;2074;2067:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2060:46;;1982:132;;;;:::o;26171:666::-;26297:21;26335:1;26321:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26297:40;;26366:4;26348;26353:1;26348:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26392:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26382:4;26387:1;26382:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26427:62;26444:4;26459:15;;;;;;;;;;;26477:11;26427:8;:62::i;:::-;26528:15;;;;;;;;;;;:66;;;26609:11;26635:1;26679:4;26706;26742:15;26528:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26794:35;26811:11;26824:4;26794:35;;;;;;;:::i;:::-;;;;;;;;26171:666;;:::o;21531:126::-;21623:9;:18;;:26;21642:6;21623:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21531:126;;:::o;26845:513::-;26993:62;27010:4;27025:15;;;;;;;;;;;27043:11;26993:8;:62::i;:::-;27098:15;;;;;;;;;;;:31;;;27137:9;27170:4;27190:11;27216:1;27259;27302:7;:5;:7::i;:::-;27324:15;27098:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26845:513;;:::o;2122:278::-;2208:7;2240:1;2236;:5;2243:12;2228:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2267:9;2283:1;2279;:5;;;;:::i;:::-;2267:17;;2391:1;2384:8;;;2122:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;2328:6;2336;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;2738:6;2746;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;3139:6;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;3404:6;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:552::-;3690:6;3698;3706;3755:2;3743:9;3734:7;3730:23;3726:32;3723:2;;;3771:1;3768;3761:12;3723:2;3814:1;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3785:117;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;4069:2;4095:53;4140:7;4131:6;4120:9;4116:22;4095:53;:::i;:::-;4085:63;;4040:118;3713:452;;;;;:::o;4171:596::-;4259:6;4267;4275;4324:2;4312:9;4303:7;4299:23;4295:32;4292:2;;;4340:1;4337;4330:12;4292:2;4383:1;4408:64;4464:7;4455:6;4444:9;4440:22;4408:64;:::i;:::-;4398:74;;4354:128;4521:2;4547:64;4603:7;4594:6;4583:9;4579:22;4547:64;:::i;:::-;4537:74;;4492:129;4660:2;4686:64;4742:7;4733:6;4722:9;4718:22;4686:64;:::i;:::-;4676:74;;4631:129;4282:485;;;;;:::o;4773:179::-;4842:10;4863:46;4905:3;4897:6;4863:46;:::i;:::-;4941:4;4936:3;4932:14;4918:28;;4853:99;;;;:::o;4958:142::-;5061:32;5087:5;5061:32;:::i;:::-;5056:3;5049:45;5039:61;;:::o;5106:108::-;5183:24;5201:5;5183:24;:::i;:::-;5178:3;5171:37;5161:53;;:::o;5220:118::-;5307:24;5325:5;5307:24;:::i;:::-;5302:3;5295:37;5285:53;;:::o;5374:732::-;5493:3;5522:54;5570:5;5522:54;:::i;:::-;5592:86;5671:6;5666:3;5592:86;:::i;:::-;5585:93;;5702:56;5752:5;5702:56;:::i;:::-;5781:7;5812:1;5797:284;5822:6;5819:1;5816:13;5797:284;;;5898:6;5892:13;5925:63;5984:3;5969:13;5925:63;:::i;:::-;5918:70;;6011:60;6064:6;6011:60;:::i;:::-;6001:70;;5857:224;5844:1;5841;5837:9;5832:14;;5797:284;;;5801:14;6097:3;6090:10;;5498:608;;;;;;;:::o;6112:109::-;6193:21;6208:5;6193:21;:::i;:::-;6188:3;6181:34;6171:50;;:::o;6227:185::-;6341:64;6399:5;6341:64;:::i;:::-;6336:3;6329:77;6319:93;;:::o;6418:147::-;6513:45;6552:5;6513:45;:::i;:::-;6508:3;6501:58;6491:74;;:::o;6571:364::-;6659:3;6687:39;6720:5;6687:39;:::i;:::-;6742:71;6806:6;6801:3;6742:71;:::i;:::-;6735:78;;6822:52;6867:6;6862:3;6855:4;6848:5;6844:16;6822:52;:::i;:::-;6899:29;6921:6;6899:29;:::i;:::-;6894:3;6890:39;6883:46;;6663:272;;;;;:::o;6941:366::-;7083:3;7104:67;7168:2;7163:3;7104:67;:::i;:::-;7097:74;;7180:93;7269:3;7180:93;:::i;:::-;7298:2;7293:3;7289:12;7282:19;;7087:220;;;:::o;7313:366::-;7455:3;7476:67;7540:2;7535:3;7476:67;:::i;:::-;7469:74;;7552:93;7641:3;7552:93;:::i;:::-;7670:2;7665:3;7661:12;7654:19;;7459:220;;;:::o;7685:366::-;7827:3;7848:67;7912:2;7907:3;7848:67;:::i;:::-;7841:74;;7924:93;8013:3;7924:93;:::i;:::-;8042:2;8037:3;8033:12;8026:19;;7831:220;;;:::o;8057:366::-;8199:3;8220:67;8284:2;8279:3;8220:67;:::i;:::-;8213:74;;8296:93;8385:3;8296:93;:::i;:::-;8414:2;8409:3;8405:12;8398:19;;8203:220;;;:::o;8429:366::-;8571:3;8592:67;8656:2;8651:3;8592:67;:::i;:::-;8585:74;;8668:93;8757:3;8668:93;:::i;:::-;8786:2;8781:3;8777:12;8770:19;;8575:220;;;:::o;8801:366::-;8943:3;8964:67;9028:2;9023:3;8964:67;:::i;:::-;8957:74;;9040:93;9129:3;9040:93;:::i;:::-;9158:2;9153:3;9149:12;9142:19;;8947:220;;;:::o;9173:366::-;9315:3;9336:67;9400:2;9395:3;9336:67;:::i;:::-;9329:74;;9412:93;9501:3;9412:93;:::i;:::-;9530:2;9525:3;9521:12;9514:19;;9319:220;;;:::o;9545:366::-;9687:3;9708:67;9772:2;9767:3;9708:67;:::i;:::-;9701:74;;9784:93;9873:3;9784:93;:::i;:::-;9902:2;9897:3;9893:12;9886:19;;9691:220;;;:::o;9917:366::-;10059:3;10080:67;10144:2;10139:3;10080:67;:::i;:::-;10073:74;;10156:93;10245:3;10156:93;:::i;:::-;10274:2;10269:3;10265:12;10258:19;;10063:220;;;:::o;10289:118::-;10376:24;10394:5;10376:24;:::i;:::-;10371:3;10364:37;10354:53;;:::o;10413:112::-;10496:22;10512:5;10496:22;:::i;:::-;10491:3;10484:35;10474:51;;:::o;10531:222::-;10624:4;10662:2;10651:9;10647:18;10639:26;;10675:71;10743:1;10732:9;10728:17;10719:6;10675:71;:::i;:::-;10629:124;;;;:::o;10759:254::-;10868:4;10906:2;10895:9;10891:18;10883:26;;10919:87;11003:1;10992:9;10988:17;10979:6;10919:87;:::i;:::-;10873:140;;;;:::o;11019:332::-;11140:4;11178:2;11167:9;11163:18;11155:26;;11191:71;11259:1;11248:9;11244:17;11235:6;11191:71;:::i;:::-;11272:72;11340:2;11329:9;11325:18;11316:6;11272:72;:::i;:::-;11145:206;;;;;:::o;11357:807::-;11606:4;11644:3;11633:9;11629:19;11621:27;;11658:71;11726:1;11715:9;11711:17;11702:6;11658:71;:::i;:::-;11739:72;11807:2;11796:9;11792:18;11783:6;11739:72;:::i;:::-;11821:80;11897:2;11886:9;11882:18;11873:6;11821:80;:::i;:::-;11911;11987:2;11976:9;11972:18;11963:6;11911:80;:::i;:::-;12001:73;12069:3;12058:9;12054:19;12045:6;12001:73;:::i;:::-;12084;12152:3;12141:9;12137:19;12128:6;12084:73;:::i;:::-;11611:553;;;;;;;;;:::o;12170:210::-;12257:4;12295:2;12284:9;12280:18;12272:26;;12308:65;12370:1;12359:9;12355:17;12346:6;12308:65;:::i;:::-;12262:118;;;;:::o;12386:276::-;12506:4;12544:2;12533:9;12529:18;12521:26;;12557:98;12652:1;12641:9;12637:17;12628:6;12557:98;:::i;:::-;12511:151;;;;:::o;12668:313::-;12781:4;12819:2;12808:9;12804:18;12796:26;;12868:9;12862:4;12858:20;12854:1;12843:9;12839:17;12832:47;12896:78;12969:4;12960:6;12896:78;:::i;:::-;12888:86;;12786:195;;;;:::o;12987:419::-;13153:4;13191:2;13180:9;13176:18;13168:26;;13240:9;13234:4;13230:20;13226:1;13215:9;13211:17;13204:47;13268:131;13394:4;13268:131;:::i;:::-;13260:139;;13158:248;;;:::o;13412:419::-;13578:4;13616:2;13605:9;13601:18;13593:26;;13665:9;13659:4;13655:20;13651:1;13640:9;13636:17;13629:47;13693:131;13819:4;13693:131;:::i;:::-;13685:139;;13583:248;;;:::o;13837:419::-;14003:4;14041:2;14030:9;14026:18;14018:26;;14090:9;14084:4;14080:20;14076:1;14065:9;14061:17;14054:47;14118:131;14244:4;14118:131;:::i;:::-;14110:139;;14008:248;;;:::o;14262:419::-;14428:4;14466:2;14455:9;14451:18;14443:26;;14515:9;14509:4;14505:20;14501:1;14490:9;14486:17;14479:47;14543:131;14669:4;14543:131;:::i;:::-;14535:139;;14433:248;;;:::o;14687:419::-;14853:4;14891:2;14880:9;14876:18;14868:26;;14940:9;14934:4;14930:20;14926:1;14915:9;14911:17;14904:47;14968:131;15094:4;14968:131;:::i;:::-;14960:139;;14858:248;;;:::o;15112:419::-;15278:4;15316:2;15305:9;15301:18;15293:26;;15365:9;15359:4;15355:20;15351:1;15340:9;15336:17;15329:47;15393:131;15519:4;15393:131;:::i;:::-;15385:139;;15283:248;;;:::o;15537:419::-;15703:4;15741:2;15730:9;15726:18;15718:26;;15790:9;15784:4;15780:20;15776:1;15765:9;15761:17;15754:47;15818:131;15944:4;15818:131;:::i;:::-;15810:139;;15708:248;;;:::o;15962:419::-;16128:4;16166:2;16155:9;16151:18;16143:26;;16215:9;16209:4;16205:20;16201:1;16190:9;16186:17;16179:47;16243:131;16369:4;16243:131;:::i;:::-;16235:139;;16133:248;;;:::o;16387:419::-;16553:4;16591:2;16580:9;16576:18;16568:26;;16640:9;16634:4;16630:20;16626:1;16615:9;16611:17;16604:47;16668:131;16794:4;16668:131;:::i;:::-;16660:139;;16558:248;;;:::o;16812:222::-;16905:4;16943:2;16932:9;16928:18;16920:26;;16956:71;17024:1;17013:9;17009:17;17000:6;16956:71;:::i;:::-;16910:124;;;;:::o;17040:483::-;17211:4;17249:2;17238:9;17234:18;17226:26;;17262:71;17330:1;17319:9;17315:17;17306:6;17262:71;:::i;:::-;17380:9;17374:4;17370:20;17365:2;17354:9;17350:18;17343:48;17408:108;17511:4;17502:6;17408:108;:::i;:::-;17400:116;;17216:307;;;;;:::o;17529:831::-;17792:4;17830:3;17819:9;17815:19;17807:27;;17844:71;17912:1;17901:9;17897:17;17888:6;17844:71;:::i;:::-;17925:80;18001:2;17990:9;17986:18;17977:6;17925:80;:::i;:::-;18052:9;18046:4;18042:20;18037:2;18026:9;18022:18;18015:48;18080:108;18183:4;18174:6;18080:108;:::i;:::-;18072:116;;18198:72;18266:2;18255:9;18251:18;18242:6;18198:72;:::i;:::-;18280:73;18348:3;18337:9;18333:19;18324:6;18280:73;:::i;:::-;17797:563;;;;;;;;:::o;18366:214::-;18455:4;18493:2;18482:9;18478:18;18470:26;;18506:67;18570:1;18559:9;18555:17;18546:6;18506:67;:::i;:::-;18460:120;;;;:::o;18586:132::-;18653:4;18676:3;18668:11;;18706:4;18701:3;18697:14;18689:22;;18658:60;;;:::o;18724:114::-;18791:6;18825:5;18819:12;18809:22;;18798:40;;;:::o;18844:99::-;18896:6;18930:5;18924:12;18914:22;;18903:40;;;:::o;18949:113::-;19019:4;19051;19046:3;19042:14;19034:22;;19024:38;;;:::o;19068:184::-;19167:11;19201:6;19196:3;19189:19;19241:4;19236:3;19232:14;19217:29;;19179:73;;;;:::o;19258:169::-;19342:11;19376:6;19371:3;19364:19;19416:4;19411:3;19407:14;19392:29;;19354:73;;;;:::o;19433:305::-;19473:3;19492:20;19510:1;19492:20;:::i;:::-;19487:25;;19526:20;19544:1;19526:20;:::i;:::-;19521:25;;19680:1;19612:66;19608:74;19605:1;19602:81;19599:2;;;19686:18;;:::i;:::-;19599:2;19730:1;19727;19723:9;19716:16;;19477:261;;;;:::o;19744:185::-;19784:1;19801:20;19819:1;19801:20;:::i;:::-;19796:25;;19835:20;19853:1;19835:20;:::i;:::-;19830:25;;19874:1;19864:2;;19879:18;;:::i;:::-;19864:2;19921:1;19918;19914:9;19909:14;;19786:143;;;;:::o;19935:348::-;19975:7;19998:20;20016:1;19998:20;:::i;:::-;19993:25;;20032:20;20050:1;20032:20;:::i;:::-;20027:25;;20220:1;20152:66;20148:74;20145:1;20142:81;20137:1;20130:9;20123:17;20119:105;20116:2;;;20227:18;;:::i;:::-;20116:2;20275:1;20272;20268:9;20257:20;;19983:300;;;;:::o;20289:191::-;20329:4;20349:20;20367:1;20349:20;:::i;:::-;20344:25;;20383:20;20401:1;20383:20;:::i;:::-;20378:25;;20422:1;20419;20416:8;20413:2;;;20427:18;;:::i;:::-;20413:2;20472:1;20469;20465:9;20457:17;;20334:146;;;;:::o;20486:96::-;20523:7;20552:24;20570:5;20552:24;:::i;:::-;20541:35;;20531:51;;;:::o;20588:104::-;20633:7;20662:24;20680:5;20662:24;:::i;:::-;20651:35;;20641:51;;;:::o;20698:90::-;20732:7;20775:5;20768:13;20761:21;20750:32;;20740:48;;;:::o;20794:126::-;20831:7;20871:42;20864:5;20860:54;20849:65;;20839:81;;;:::o;20926:77::-;20963:7;20992:5;20981:16;;20971:32;;;:::o;21009:86::-;21044:7;21084:4;21077:5;21073:16;21062:27;;21052:43;;;:::o;21101:180::-;21178:9;21211:64;21269:5;21211:64;:::i;:::-;21198:77;;21188:93;;;:::o;21287:140::-;21364:9;21397:24;21415:5;21397:24;:::i;:::-;21384:37;;21374:53;;;:::o;21433:121::-;21491:9;21524:24;21542:5;21524:24;:::i;:::-;21511:37;;21501:53;;;:::o;21560:307::-;21628:1;21638:113;21652:6;21649:1;21646:13;21638:113;;;21737:1;21732:3;21728:11;21722:18;21718:1;21713:3;21709:11;21702:39;21674:2;21671:1;21667:10;21662:15;;21638:113;;;21769:6;21766:1;21763:13;21760:2;;;21849:1;21840:6;21835:3;21831:16;21824:27;21760:2;21609:258;;;;:::o;21873:320::-;21917:6;21954:1;21948:4;21944:12;21934:22;;22001:1;21995:4;21991:12;22022:18;22012:2;;22078:4;22070:6;22066:17;22056:27;;22012:2;22140;22132:6;22129:14;22109:18;22106:38;22103:2;;;22159:18;;:::i;:::-;22103:2;21924:269;;;;:::o;22199:180::-;22247:77;22244:1;22237:88;22344:4;22341:1;22334:15;22368:4;22365:1;22358:15;22385:180;22433:77;22430:1;22423:88;22530:4;22527:1;22520:15;22554:4;22551:1;22544:15;22571:180;22619:77;22616:1;22609:88;22716:4;22713:1;22706:15;22740:4;22737:1;22730:15;22757:102;22798:6;22849:2;22845:7;22840:2;22833:5;22829:14;22825:28;22815:38;;22805:54;;;:::o;22865:222::-;23005:34;23001:1;22993:6;22989:14;22982:58;23074:5;23069:2;23061:6;23057:15;23050:30;22971:116;:::o;23093:223::-;23233:34;23229:1;23221:6;23217:14;23210:58;23302:6;23297:2;23289:6;23285:15;23278:31;23199:117;:::o;23322:225::-;23462:34;23458:1;23450:6;23446:14;23439:58;23531:8;23526:2;23518:6;23514:15;23507:33;23428:119;:::o;23553:177::-;23693:29;23689:1;23681:6;23677:14;23670:53;23659:71;:::o;23736:227::-;23876:34;23872:1;23864:6;23860:14;23853:58;23945:10;23940:2;23932:6;23928:15;23921:35;23842:121;:::o;23969:220::-;24109:34;24105:1;24097:6;24093:14;24086:58;24178:3;24173:2;24165:6;24161:15;24154:28;24075:114;:::o;24195:182::-;24335:34;24331:1;24323:6;24319:14;24312:58;24301:76;:::o;24383:224::-;24523:34;24519:1;24511:6;24507:14;24500:58;24592:7;24587:2;24579:6;24575:15;24568:32;24489:118;:::o;24613:221::-;24753:34;24749:1;24741:6;24737:14;24730:58;24822:4;24817:2;24809:6;24805:15;24798:29;24719:115;:::o;24840:122::-;24913:24;24931:5;24913:24;:::i;:::-;24906:5;24903:35;24893:2;;24952:1;24949;24942:12;24893:2;24883:79;:::o;24968:116::-;25038:21;25053:5;25038:21;:::i;:::-;25031:5;25028:32;25018:2;;25074:1;25071;25064:12;25018:2;25008:76;:::o;25090:122::-;25163:24;25181:5;25163:24;:::i;:::-;25156:5;25153:35;25143:2;;25202:1;25199;25192:12;25143:2;25133:79;:::o

Swarm Source

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