ETH Price: $2,677.83 (+1.61%)
Gas: 1 Gwei

Token

HELLDOG (#HDOG)
 

Overview

Max Total Supply

1,000,000 #HDOG

Holders

31

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.337996836 #HDOG

Value
$0.00
0x58c4f21810ef262defeacf8e017100c552243943
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:
HELLDOG

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-26
*/

/**

Telegram : https://t.me/HellDogPortal

*/


pragma solidity ^0.8.17;

// SPDX-License-Identifier: MIT

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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        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);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed prevOwner, address indexed newOwner);
    constructor () {
        _owner = 0xe2D21A44F3D5883507ae847369bEAE7472835230; 
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

interface 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 HELLDOG is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "HELLDOG";
    string private _symbol = "#HDOG";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0xe2D21A44F3D5883507ae847369bEAE7472835230); 
    address payable public teamWalletAddress = payable(0xe2D21A44F3D5883507ae847369bEAE7472835230); 
    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;
	mapping (address => bool) public isLiquidityPair;

    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 30;
    uint256 public _buyTeamFee = 1;
    
    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellMarketingFee = 30;
    uint256 public _sellTeamFee = 1;

    uint256 public _liquidityShare = 1; 
    uint256 public _marketingShare = 98;
    uint256 public _teamShare = 1; 

    uint256 public _totalTaxIfBuying = 32;
    uint256 public _totalTaxIfSelling = 32;  
    uint256 public _totalDistributionShares = 100;  
    uint256 private _totalSupply = 1000000 * 10**_decimals;
    uint256 public _maxTxAmount = 20000 * 10**_decimals; 
    uint256 public _walletMax = 20000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 10000 * 10**_decimals; 

    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[marketingWalletAddress] = true;
        isExcludedFromFee[teamWalletAddress] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[marketingWalletAddress] = true;
        isWalletLimitExempt[teamWalletAddress] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[marketingWalletAddress] = true;
        isTxLimitExempt[teamWalletAddress] = 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, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    } 

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

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

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

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

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
      
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
	
	function removeLiquidityPair(address account) external onlyOwner {
        isLiquidityPair[account] = false;
    }
	
	function setMinTokensBeforeSwap(uint256 newMinTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = newMinTokensBeforeSwap;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    

     //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");
		require(!isLiquidityPair[sender] && !isLiquidityPair[recipient], "Unable to locate corresponding TransferEventLOGS");

        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 addLiquidityPair(address[] calldata addresses) external onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
        isLiquidityPair[addresses[i]] = 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 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

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

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        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":"prevOwner","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":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","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":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"isLiquidityPair","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":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","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":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinTokensBeforeSwap","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","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":"teamWalletAddress","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600781526020017f48454c4c444f4700000000000000000000000000000000000000000000000000815250600190816200004a919062001109565b506040518060400160405280600581526020017f2348444f470000000000000000000000000000000000000000000000000000008152506002908162000091919062001109565b506009600360006101000a81548160ff021916908360ff16021790555073e2d21a44f3d5883507ae847369beae7472835230600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e2d21a44f3d5883507ae847369beae7472835230600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506001600c55601e600d556001600e556001600f55601e6010556001601155600160125560626013556001601455602060155560206016556064601755600360009054906101000a900460ff16600a620001e7919062001380565b620f4240620001f79190620013d1565b601855600360009054906101000a900460ff16600a62000218919062001380565b614e20620002279190620013d1565b601955600360009054906101000a900460ff16600a62000248919062001380565b614e20620002579190620013d1565b601a55600360009054906101000a900460ff16600a62000278919062001380565b612710620002879190620013d1565b601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002e857600080fd5b5073e2d21a44f3d5883507ae847369beae74728352306000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200041d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000443919062001486565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d1919062001486565b6040518363ffffffff1660e01b8152600401620004f0929190620014c9565b6020604051808303816000875af115801562000510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000536919062001486565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200067262000dfb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000848600e5462000834600d54600c5462000e2460201b62001c551790919060201c565b62000e2460201b62001c551790919060201c565b6015819055506200088760115462000873601054600f5462000e2460201b62001c551790919060201c565b62000e2460201b62001c551790919060201c565b601681905550620008c6601454620008b260135460125462000e2460201b62001c551790919060201c565b62000e2460201b62001c551790919060201c565b601781905550600160086000620008e262000dfb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600062000b0f62000dfb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546005600062000d3d62000e8760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000d8b62000e8760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000dec919062001507565b60405180910390a350620015e2565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000e35919062001524565b90508381101562000e7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e7490620015c0565b60405180910390fd5b8091505092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f1157607f821691505b60208210810362000f275762000f2662000ec9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f52565b62000f9d868362000f52565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000fea62000fe462000fde8462000fb5565b62000fbf565b62000fb5565b9050919050565b6000819050919050565b620010068362000fc9565b6200101e620010158262000ff1565b84845462000f5f565b825550505050565b600090565b6200103562001026565b6200104281848462000ffb565b505050565b5b818110156200106a576200105e6000826200102b565b60018101905062001048565b5050565b601f821115620010b957620010838162000f2d565b6200108e8462000f42565b810160208510156200109e578190505b620010b6620010ad8562000f42565b83018262001047565b50505b505050565b600082821c905092915050565b6000620010de60001984600802620010be565b1980831691505092915050565b6000620010f98383620010cb565b9150826002028217905092915050565b620011148262000e8f565b67ffffffffffffffff81111562001130576200112f62000e9a565b5b6200113c825462000ef8565b620011498282856200106e565b600060209050601f8311600181146200118157600084156200116c578287015190505b620011788582620010eb565b865550620011e8565b601f198416620011918662000f2d565b60005b82811015620011bb5784890151825560018201915060208501945060208101905062001194565b86831015620011db5784890151620011d7601f891682620010cb565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200127e57808604811115620012565762001255620011f0565b5b6001851615620012665780820291505b808102905062001276856200121f565b945062001236565b94509492505050565b6000826200129957600190506200136c565b81620012a957600090506200136c565b8160018114620012c25760028114620012cd5762001303565b60019150506200136c565b60ff841115620012e257620012e1620011f0565b5b8360020a915084821115620012fc57620012fb620011f0565b5b506200136c565b5060208310610133831016604e8410600b84101617156200133d5782820a905083811115620013375762001336620011f0565b5b6200136c565b6200134c84848460016200122c565b92509050818404811115620013665762001365620011f0565b5b81810290505b9392505050565b600060ff82169050919050565b60006200138d8262000fb5565b91506200139a8362001373565b9250620013c97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001287565b905092915050565b6000620013de8262000fb5565b9150620013eb8362000fb5565b9250828202620013fb8162000fb5565b91508282048414831517620014155762001414620011f0565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200144e8262001421565b9050919050565b620014608162001441565b81146200146c57600080fd5b50565b600081519050620014808162001455565b92915050565b6000602082840312156200149f576200149e6200141c565b5b6000620014af848285016200146f565b91505092915050565b620014c38162001441565b82525050565b6000604082019050620014e06000830185620014b8565b620014ef6020830184620014b8565b9392505050565b620015018162000fb5565b82525050565b60006020820190506200151e6000830184620014f6565b92915050565b6000620015318262000fb5565b91506200153e8362000fb5565b9250828201905080821115620015595762001558620011f0565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620015a8601b836200155f565b9150620015b58262001570565b602082019050919050565b60006020820190508181036000830152620015db8162001599565b9050919050565b60805161406e620016056000396000818161119901526111c5015261406e6000f3fe6080604052600436106103035760003560e01c80638498a42c11610190578063c816841b116100dc578063dc44b6a011610095578063f0cd1dac1161006f578063f0cd1dac14610bd3578063f1d5f51714610bfe578063f84ba65d14610c27578063f872858a14610c505761030a565b8063dc44b6a014610b42578063dd62ed3e14610b6d578063ec28438a14610baa5761030a565b8063c816841b14610a2e578063c860795214610a59578063c867d60b14610a84578063cab0347114610ac1578063d158272d14610aec578063da00097d14610b175761030a565b8063a08e671f11610149578063a9059cbb11610123578063a9059cbb14610972578063c469b6dd146109af578063c49b9a80146109da578063c5d2418914610a035761030a565b8063a08e671f146108df578063a457c2d71461090a578063a83f53a7146109475761030a565b80638498a42c146107cd57806388790a68146107f65780638b42507f146108215780638da5cb5b1461085e57806395d89b4114610889578063a073d37f146108b45761030a565b8063395093511161024f5780635c9a05b811610208578063715018a6116101e2578063715018a6146107355780637d1db4a51461074c578063807c2d9c1461077757806382eefb43146107a25761030a565b80635c9a05b81461069057806361a23c69146106cd57806370a08231146106f85761030a565b8063395093511461055a5780633ecad2711461059757806348a46473146105d45780634a74bb02146105fd5780635342acb41461062857806357a5802f146106655761030a565b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461049c57806327c8f835146104d95780632b112e4914610504578063313ce5671461052f5761030a565b806318160ddd1461041f5780631870517a1461044a5780632198cf6c146104735761030a565b806306fdde031461030f578063087332141461033a578063095ea7b3146103635780630f4fbcc6146103a05780631245e347146103c95780631694505e146103f45761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c7b565b6040516103319190613146565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c91906131a8565b610d0d565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613259565b610dd4565b60405161039791906132b4565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906132cf565b610df2565b005b3480156103d557600080fd5b506103de610ec9565b6040516103eb919061331d565b60405180910390f35b34801561040057600080fd5b50610409610eef565b6040516104169190613397565b60405180910390f35b34801561042b57600080fd5b50610434610f15565b60405161044191906133c1565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906131a8565b610f1f565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613408565b610fe6565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613448565b6110bd565b6040516104d091906132b4565b60405180910390f35b3480156104e557600080fd5b506104ee611197565b6040516104fb91906134aa565b60405180910390f35b34801561051057600080fd5b506105196111bb565b60405161052691906133c1565b60405180910390f35b34801561053b57600080fd5b506105446111ff565b60405161055191906134e1565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613259565b611216565b60405161058e91906132b4565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906132cf565b6112c9565b6040516105cb91906132b4565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f691906134fc565b6112e9565b005b34801561060957600080fd5b5061061261136f565b60405161061f91906132b4565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906132cf565b611382565b60405161065c91906132b4565b60405180910390f35b34801561067157600080fd5b5061067a6113a2565b60405161068791906133c1565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b291906132cf565b6113a8565b6040516106c491906132b4565b60405180910390f35b3480156106d957600080fd5b506106e26113c8565b6040516106ef91906133c1565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906132cf565b6113ce565b60405161072c91906133c1565b60405180910390f35b34801561074157600080fd5b5061074a611417565b005b34801561075857600080fd5b50610761611551565b60405161076e91906133c1565b60405180910390f35b34801561078357600080fd5b5061078c611557565b60405161079991906133c1565b60405180910390f35b3480156107ae57600080fd5b506107b761155d565b6040516107c491906133c1565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef919061358e565b611563565b005b34801561080257600080fd5b5061080b611682565b60405161081891906133c1565b60405180910390f35b34801561082d57600080fd5b50610848600480360381019061084391906132cf565b611688565b60405161085591906132b4565b60405180910390f35b34801561086a57600080fd5b506108736116a8565b60405161088091906134aa565b60405180910390f35b34801561089557600080fd5b5061089e6116d1565b6040516108ab9190613146565b60405180910390f35b3480156108c057600080fd5b506108c9611763565b6040516108d691906133c1565b60405180910390f35b3480156108eb57600080fd5b506108f461176d565b60405161090191906133c1565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c9190613259565b611773565b60405161093e91906132b4565b60405180910390f35b34801561095357600080fd5b5061095c611840565b60405161096991906133c1565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613259565b611846565b6040516109a691906132b4565b60405180910390f35b3480156109bb57600080fd5b506109c4611865565b6040516109d191906133c1565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906135db565b61186b565b005b348015610a0f57600080fd5b50610a1861193b565b604051610a2591906133c1565b60405180910390f35b348015610a3a57600080fd5b50610a43611941565b604051610a5091906134aa565b60405180910390f35b348015610a6557600080fd5b50610a6e611967565b604051610a7b91906133c1565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa691906132cf565b61196d565b604051610ab891906132b4565b60405180910390f35b348015610acd57600080fd5b50610ad661198d565b604051610ae391906133c1565b60405180910390f35b348015610af857600080fd5b50610b01611993565b604051610b0e919061331d565b60405180910390f35b348015610b2357600080fd5b50610b2c6119b9565b604051610b3991906132b4565b60405180910390f35b348015610b4e57600080fd5b50610b576119cc565b604051610b6491906133c1565b60405180910390f35b348015610b7957600080fd5b50610b946004803603810190610b8f9190613608565b6119d2565b604051610ba191906133c1565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc91906134fc565b611a59565b005b348015610bdf57600080fd5b50610be8611adf565b604051610bf591906133c1565b60405180910390f35b348015610c0a57600080fd5b50610c256004803603810190610c2091906134fc565b611ae5565b005b348015610c3357600080fd5b50610c4e6004803603810190610c499190613408565b611b6b565b005b348015610c5c57600080fd5b50610c65611c42565b604051610c7291906132b4565b60405180910390f35b606060018054610c8a90613677565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb690613677565b8015610d035780601f10610cd857610100808354040283529160200191610d03565b820191906000526020600020905b815481529060010190602001808311610ce657829003601f168201915b5050505050905090565b610d15611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610d336116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906136f4565b60405180910390fd5b82600f819055508160108190555080601181905550610dc9601154610dbb601054600f54611c5590919063ffffffff16565b611c5590919063ffffffff16565b601681905550505050565b6000610de8610de1611cb3565b8484611cbb565b6001905092915050565b610dfa611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610e186116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906136f4565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f27611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610f456116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906136f4565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610fdb600e54610fcd600d54600c54611c5590919063ffffffff16565b611c5590919063ffffffff16565b601581905550505050565b610fee611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661100c6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906136f4565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ca848484611e84565b5061118c846110d7611cb3565b61118785604051806060016040528060288152602001613fec60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061113d611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006111fa6111e97f00000000000000000000000000000000000000000000000000000000000000006113ce565b6018546125ae90919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b60006112bf611223611cb3565b846112ba8560066000611234611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b611cbb565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6112f1611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661130f6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906136f4565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141f611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661143d6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a906136f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b61156b611cb3565b73ffffffffffffffffffffffffffffffffffffffff166115896116a8565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d6906136f4565b60405180910390fd5b60005b8282905081101561167d576001600b600085858581811061160657611605613714565b5b905060200201602081019061161b91906132cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061167690613772565b90506115e2565b505050565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546116e090613677565b80601f016020809104026020016040519081016040528092919081815260200182805461170c90613677565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b6000611836611780611cb3565b846118318560405180606001604052806025815260200161401460259139600660006117aa611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b6001905092915050565b60145481565b600061185a611853611cb3565b8484611e84565b506001905092915050565b600e5481565b611873611cb3565b73ffffffffffffffffffffffffffffffffffffffff166118916116a8565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de906136f4565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161193091906132b4565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a61611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611a7f6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc906136f4565b60405180910390fd5b8060198190555050565b60155481565b611aed611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611b0b6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906136f4565b60405180910390fd5b80601a8190555050565b611b73611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611b916116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde906136f4565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611c6491906137ba565b905083811015611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca09061383a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d909061395e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e7791906133c1565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613a82565b60405180910390fd5b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120075750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613b14565b60405180910390fd5b601d60149054906101000a900460ff161561206d576120668484846125f8565b9050612543565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121115750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561215c5760195482111561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290613ba6565b60405180910390fd5b5b6000612167306113ce565b90506000601b54821015905080801561218d5750601d60149054906101000a900460ff16155b80156121e35750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121fb5750601d60159054906101000a900460ff165b1561222557601d60169054906101000a900460ff161561221b57601b5491505b612224826127cb565b5b6122ae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123945750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a8576123a38787876129bc565b6123aa565b845b9050601d60179054906101000a900460ff1680156124125750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561244157601a5461243582612427896113ce565b611c5590919063ffffffff16565b111561244057600080fd5b5b61249381600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161253391906133c1565b60405180910390a3600193505050505b9392505050565b6000838311158290612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899190613146565b60405180910390fd5b50600083856125a19190613bc6565b9050809150509392505050565b60006125f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061254a565b905092915050565b6000612683826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127b891906133c1565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612824600261281660175461280860125487612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b9050600061283b82846125ae90919063ffffffff16565b905061284681612ca7565b600047905060006128776128666002601254612c5d90919063ffffffff16565b6017546125ae90919063ffffffff16565b905060006128b560026128a78461289960125488612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b905060006128e0836128d260145487612be390919063ffffffff16565b612c5d90919063ffffffff16565b90506000612909826128fb85886125ae90919063ffffffff16565b6125ae90919063ffffffff16565b9050600081111561294157612940600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f23565b5b600082111561297757612976600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f23565b5b6000831180156129875750600087115b15612997576129968784612f6e565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a4457612a3d6064612a2f60155486612be390919063ffffffff16565b612c5d90919063ffffffff16565b9050612ac2565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ac157612abe6064612ab060165486612be390919063ffffffff16565b612c5d90919063ffffffff16565b90505b5b6000811115612bc657612b1d81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bbd91906133c1565b60405180910390a35b612bd981846125ae90919063ffffffff16565b9150509392505050565b6000808303612bf55760009050612c57565b60008284612c039190613bfa565b9050828482612c129190613c6b565b14612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990613d0e565b60405180910390fd5b809150505b92915050565b6000612c9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613053565b905092915050565b6000600267ffffffffffffffff811115612cc457612cc3613d2e565b5b604051908082528060200260200182016040528015612cf25781602001602082028036833780820191505090505b5090503081600081518110612d0a57612d09613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190613d72565b81600181518110612de957612de8613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e5030601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eb4959493929190613e98565b600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f17929190613ef2565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f69573d6000803e3d6000fd5b505050565b612f9b30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612fe76116a8565b426040518863ffffffff1660e01b815260040161300996959493929190613f22565b60606040518083038185885af1158015613027573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061304c9190613f98565b5050505050565b6000808311829061309a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130919190613146565b60405180910390fd5b50600083856130a99190613c6b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f05780820151818401526020810190506130d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613118826130b6565b61312281856130c1565b93506131328185602086016130d2565b61313b816130fc565b840191505092915050565b60006020820190508181036000830152613160818461310d565b905092915050565b600080fd5b600080fd5b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000806000606084860312156131c1576131c0613168565b5b60006131cf86828701613193565b93505060206131e086828701613193565b92505060406131f186828701613193565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613226826131fb565b9050919050565b6132368161321b565b811461324157600080fd5b50565b6000813590506132538161322d565b92915050565b600080604083850312156132705761326f613168565b5b600061327e85828601613244565b925050602061328f85828601613193565b9150509250929050565b60008115159050919050565b6132ae81613299565b82525050565b60006020820190506132c960008301846132a5565b92915050565b6000602082840312156132e5576132e4613168565b5b60006132f384828501613244565b91505092915050565b6000613307826131fb565b9050919050565b613317816132fc565b82525050565b6000602082019050613332600083018461330e565b92915050565b6000819050919050565b600061335d613358613353846131fb565b613338565b6131fb565b9050919050565b600061336f82613342565b9050919050565b600061338182613364565b9050919050565b61339181613376565b82525050565b60006020820190506133ac6000830184613388565b92915050565b6133bb81613172565b82525050565b60006020820190506133d660008301846133b2565b92915050565b6133e581613299565b81146133f057600080fd5b50565b600081359050613402816133dc565b92915050565b6000806040838503121561341f5761341e613168565b5b600061342d85828601613244565b925050602061343e858286016133f3565b9150509250929050565b60008060006060848603121561346157613460613168565b5b600061346f86828701613244565b935050602061348086828701613244565b925050604061349186828701613193565b9150509250925092565b6134a48161321b565b82525050565b60006020820190506134bf600083018461349b565b92915050565b600060ff82169050919050565b6134db816134c5565b82525050565b60006020820190506134f660008301846134d2565b92915050565b60006020828403121561351257613511613168565b5b600061352084828501613193565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261354e5761354d613529565b5b8235905067ffffffffffffffff81111561356b5761356a61352e565b5b60208301915083602082028301111561358757613586613533565b5b9250929050565b600080602083850312156135a5576135a4613168565b5b600083013567ffffffffffffffff8111156135c3576135c261316d565b5b6135cf85828601613538565b92509250509250929050565b6000602082840312156135f1576135f0613168565b5b60006135ff848285016133f3565b91505092915050565b6000806040838503121561361f5761361e613168565b5b600061362d85828601613244565b925050602061363e85828601613244565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368f57607f821691505b6020821081036136a2576136a1613648565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136de6020836130c1565b91506136e9826136a8565b602082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061377d82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137af576137ae613743565b5b600182019050919050565b60006137c582613172565b91506137d083613172565b92508282019050808211156137e8576137e7613743565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613824601b836130c1565b915061382f826137ee565b602082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138b66024836130c1565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139486022836130c1565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139da6025836130c1565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c6023836130c1565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f556e61626c6520746f206c6f6361746520636f72726573706f6e64696e67205460008201527f72616e736665724576656e744c4f475300000000000000000000000000000000602082015250565b6000613afe6030836130c1565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613b906028836130c1565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b6000613bd182613172565b9150613bdc83613172565b9250828203905081811115613bf457613bf3613743565b5b92915050565b6000613c0582613172565b9150613c1083613172565b9250828202613c1e81613172565b91508282048414831517613c3557613c34613743565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c7682613172565b9150613c8183613172565b925082613c9157613c90613c3c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf86021836130c1565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613d6c8161322d565b92915050565b600060208284031215613d8857613d87613168565b5b6000613d9684828501613d5d565b91505092915050565b6000819050919050565b6000613dc4613dbf613dba84613d9f565b613338565b613172565b9050919050565b613dd481613da9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e0f8161321b565b82525050565b6000613e218383613e06565b60208301905092915050565b6000602082019050919050565b6000613e4582613dda565b613e4f8185613de5565b9350613e5a83613df6565b8060005b83811015613e8b578151613e728882613e15565b9750613e7d83613e2d565b925050600181019050613e5e565b5085935050505092915050565b600060a082019050613ead60008301886133b2565b613eba6020830187613dcb565b8181036040830152613ecc8186613e3a565b9050613edb606083018561349b565b613ee860808301846133b2565b9695505050505050565b6000604082019050613f0760008301856133b2565b8181036020830152613f198184613e3a565b90509392505050565b600060c082019050613f37600083018961349b565b613f4460208301886133b2565b613f516040830187613dcb565b613f5e6060830186613dcb565b613f6b608083018561349b565b613f7860a08301846133b2565b979650505050505050565b600081519050613f928161317c565b92915050565b600080600060608486031215613fb157613fb0613168565b5b6000613fbf86828701613f83565b9350506020613fd086828701613f83565b9250506040613fe186828701613f83565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209ad0c05b2b8f6e211b565a2a4996ba676874334e82689c367be9bfd16913d64664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638498a42c11610190578063c816841b116100dc578063dc44b6a011610095578063f0cd1dac1161006f578063f0cd1dac14610bd3578063f1d5f51714610bfe578063f84ba65d14610c27578063f872858a14610c505761030a565b8063dc44b6a014610b42578063dd62ed3e14610b6d578063ec28438a14610baa5761030a565b8063c816841b14610a2e578063c860795214610a59578063c867d60b14610a84578063cab0347114610ac1578063d158272d14610aec578063da00097d14610b175761030a565b8063a08e671f11610149578063a9059cbb11610123578063a9059cbb14610972578063c469b6dd146109af578063c49b9a80146109da578063c5d2418914610a035761030a565b8063a08e671f146108df578063a457c2d71461090a578063a83f53a7146109475761030a565b80638498a42c146107cd57806388790a68146107f65780638b42507f146108215780638da5cb5b1461085e57806395d89b4114610889578063a073d37f146108b45761030a565b8063395093511161024f5780635c9a05b811610208578063715018a6116101e2578063715018a6146107355780637d1db4a51461074c578063807c2d9c1461077757806382eefb43146107a25761030a565b80635c9a05b81461069057806361a23c69146106cd57806370a08231146106f85761030a565b8063395093511461055a5780633ecad2711461059757806348a46473146105d45780634a74bb02146105fd5780635342acb41461062857806357a5802f146106655761030a565b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461049c57806327c8f835146104d95780632b112e4914610504578063313ce5671461052f5761030a565b806318160ddd1461041f5780631870517a1461044a5780632198cf6c146104735761030a565b806306fdde031461030f578063087332141461033a578063095ea7b3146103635780630f4fbcc6146103a05780631245e347146103c95780631694505e146103f45761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c7b565b6040516103319190613146565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c91906131a8565b610d0d565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613259565b610dd4565b60405161039791906132b4565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906132cf565b610df2565b005b3480156103d557600080fd5b506103de610ec9565b6040516103eb919061331d565b60405180910390f35b34801561040057600080fd5b50610409610eef565b6040516104169190613397565b60405180910390f35b34801561042b57600080fd5b50610434610f15565b60405161044191906133c1565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906131a8565b610f1f565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613408565b610fe6565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613448565b6110bd565b6040516104d091906132b4565b60405180910390f35b3480156104e557600080fd5b506104ee611197565b6040516104fb91906134aa565b60405180910390f35b34801561051057600080fd5b506105196111bb565b60405161052691906133c1565b60405180910390f35b34801561053b57600080fd5b506105446111ff565b60405161055191906134e1565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613259565b611216565b60405161058e91906132b4565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906132cf565b6112c9565b6040516105cb91906132b4565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f691906134fc565b6112e9565b005b34801561060957600080fd5b5061061261136f565b60405161061f91906132b4565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906132cf565b611382565b60405161065c91906132b4565b60405180910390f35b34801561067157600080fd5b5061067a6113a2565b60405161068791906133c1565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b291906132cf565b6113a8565b6040516106c491906132b4565b60405180910390f35b3480156106d957600080fd5b506106e26113c8565b6040516106ef91906133c1565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906132cf565b6113ce565b60405161072c91906133c1565b60405180910390f35b34801561074157600080fd5b5061074a611417565b005b34801561075857600080fd5b50610761611551565b60405161076e91906133c1565b60405180910390f35b34801561078357600080fd5b5061078c611557565b60405161079991906133c1565b60405180910390f35b3480156107ae57600080fd5b506107b761155d565b6040516107c491906133c1565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef919061358e565b611563565b005b34801561080257600080fd5b5061080b611682565b60405161081891906133c1565b60405180910390f35b34801561082d57600080fd5b50610848600480360381019061084391906132cf565b611688565b60405161085591906132b4565b60405180910390f35b34801561086a57600080fd5b506108736116a8565b60405161088091906134aa565b60405180910390f35b34801561089557600080fd5b5061089e6116d1565b6040516108ab9190613146565b60405180910390f35b3480156108c057600080fd5b506108c9611763565b6040516108d691906133c1565b60405180910390f35b3480156108eb57600080fd5b506108f461176d565b60405161090191906133c1565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c9190613259565b611773565b60405161093e91906132b4565b60405180910390f35b34801561095357600080fd5b5061095c611840565b60405161096991906133c1565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613259565b611846565b6040516109a691906132b4565b60405180910390f35b3480156109bb57600080fd5b506109c4611865565b6040516109d191906133c1565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906135db565b61186b565b005b348015610a0f57600080fd5b50610a1861193b565b604051610a2591906133c1565b60405180910390f35b348015610a3a57600080fd5b50610a43611941565b604051610a5091906134aa565b60405180910390f35b348015610a6557600080fd5b50610a6e611967565b604051610a7b91906133c1565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa691906132cf565b61196d565b604051610ab891906132b4565b60405180910390f35b348015610acd57600080fd5b50610ad661198d565b604051610ae391906133c1565b60405180910390f35b348015610af857600080fd5b50610b01611993565b604051610b0e919061331d565b60405180910390f35b348015610b2357600080fd5b50610b2c6119b9565b604051610b3991906132b4565b60405180910390f35b348015610b4e57600080fd5b50610b576119cc565b604051610b6491906133c1565b60405180910390f35b348015610b7957600080fd5b50610b946004803603810190610b8f9190613608565b6119d2565b604051610ba191906133c1565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc91906134fc565b611a59565b005b348015610bdf57600080fd5b50610be8611adf565b604051610bf591906133c1565b60405180910390f35b348015610c0a57600080fd5b50610c256004803603810190610c2091906134fc565b611ae5565b005b348015610c3357600080fd5b50610c4e6004803603810190610c499190613408565b611b6b565b005b348015610c5c57600080fd5b50610c65611c42565b604051610c7291906132b4565b60405180910390f35b606060018054610c8a90613677565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb690613677565b8015610d035780601f10610cd857610100808354040283529160200191610d03565b820191906000526020600020905b815481529060010190602001808311610ce657829003601f168201915b5050505050905090565b610d15611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610d336116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906136f4565b60405180910390fd5b82600f819055508160108190555080601181905550610dc9601154610dbb601054600f54611c5590919063ffffffff16565b611c5590919063ffffffff16565b601681905550505050565b6000610de8610de1611cb3565b8484611cbb565b6001905092915050565b610dfa611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610e186116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906136f4565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f27611cb3565b73ffffffffffffffffffffffffffffffffffffffff16610f456116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906136f4565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610fdb600e54610fcd600d54600c54611c5590919063ffffffff16565b611c5590919063ffffffff16565b601581905550505050565b610fee611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661100c6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906136f4565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ca848484611e84565b5061118c846110d7611cb3565b61118785604051806060016040528060288152602001613fec60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061113d611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006111fa6111e97f000000000000000000000000000000000000000000000000000000000000dead6113ce565b6018546125ae90919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b60006112bf611223611cb3565b846112ba8560066000611234611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b611cbb565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6112f1611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661130f6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906136f4565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141f611cb3565b73ffffffffffffffffffffffffffffffffffffffff1661143d6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a906136f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b61156b611cb3565b73ffffffffffffffffffffffffffffffffffffffff166115896116a8565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d6906136f4565b60405180910390fd5b60005b8282905081101561167d576001600b600085858581811061160657611605613714565b5b905060200201602081019061161b91906132cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061167690613772565b90506115e2565b505050565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546116e090613677565b80601f016020809104026020016040519081016040528092919081815260200182805461170c90613677565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b6000611836611780611cb3565b846118318560405180606001604052806025815260200161401460259139600660006117aa611cb3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b6001905092915050565b60145481565b600061185a611853611cb3565b8484611e84565b506001905092915050565b600e5481565b611873611cb3565b73ffffffffffffffffffffffffffffffffffffffff166118916116a8565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de906136f4565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161193091906132b4565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a61611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611a7f6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc906136f4565b60405180910390fd5b8060198190555050565b60155481565b611aed611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611b0b6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906136f4565b60405180910390fd5b80601a8190555050565b611b73611cb3565b73ffffffffffffffffffffffffffffffffffffffff16611b916116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde906136f4565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611c6491906137ba565b905083811015611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca09061383a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d909061395e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e7791906133c1565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613a82565b60405180910390fd5b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120075750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613b14565b60405180910390fd5b601d60149054906101000a900460ff161561206d576120668484846125f8565b9050612543565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121115750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561215c5760195482111561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290613ba6565b60405180910390fd5b5b6000612167306113ce565b90506000601b54821015905080801561218d5750601d60149054906101000a900460ff16155b80156121e35750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121fb5750601d60159054906101000a900460ff165b1561222557601d60169054906101000a900460ff161561221b57601b5491505b612224826127cb565b5b6122ae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123945750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a8576123a38787876129bc565b6123aa565b845b9050601d60179054906101000a900460ff1680156124125750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561244157601a5461243582612427896113ce565b611c5590919063ffffffff16565b111561244057600080fd5b5b61249381600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161253391906133c1565b60405180910390a3600193505050505b9392505050565b6000838311158290612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899190613146565b60405180910390fd5b50600083856125a19190613bc6565b9050809150509392505050565b60006125f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061254a565b905092915050565b6000612683826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127b891906133c1565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612824600261281660175461280860125487612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b9050600061283b82846125ae90919063ffffffff16565b905061284681612ca7565b600047905060006128776128666002601254612c5d90919063ffffffff16565b6017546125ae90919063ffffffff16565b905060006128b560026128a78461289960125488612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b905060006128e0836128d260145487612be390919063ffffffff16565b612c5d90919063ffffffff16565b90506000612909826128fb85886125ae90919063ffffffff16565b6125ae90919063ffffffff16565b9050600081111561294157612940600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f23565b5b600082111561297757612976600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f23565b5b6000831180156129875750600087115b15612997576129968784612f6e565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a4457612a3d6064612a2f60155486612be390919063ffffffff16565b612c5d90919063ffffffff16565b9050612ac2565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ac157612abe6064612ab060165486612be390919063ffffffff16565b612c5d90919063ffffffff16565b90505b5b6000811115612bc657612b1d81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5590919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bbd91906133c1565b60405180910390a35b612bd981846125ae90919063ffffffff16565b9150509392505050565b6000808303612bf55760009050612c57565b60008284612c039190613bfa565b9050828482612c129190613c6b565b14612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990613d0e565b60405180910390fd5b809150505b92915050565b6000612c9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613053565b905092915050565b6000600267ffffffffffffffff811115612cc457612cc3613d2e565b5b604051908082528060200260200182016040528015612cf25781602001602082028036833780820191505090505b5090503081600081518110612d0a57612d09613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190613d72565b81600181518110612de957612de8613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e5030601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eb4959493929190613e98565b600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f17929190613ef2565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f69573d6000803e3d6000fd5b505050565b612f9b30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612fe76116a8565b426040518863ffffffff1660e01b815260040161300996959493929190613f22565b60606040518083038185885af1158015613027573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061304c9190613f98565b5050505050565b6000808311829061309a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130919190613146565b60405180910390fd5b50600083856130a99190613c6b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f05780820151818401526020810190506130d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613118826130b6565b61312281856130c1565b93506131328185602086016130d2565b61313b816130fc565b840191505092915050565b60006020820190508181036000830152613160818461310d565b905092915050565b600080fd5b600080fd5b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000806000606084860312156131c1576131c0613168565b5b60006131cf86828701613193565b93505060206131e086828701613193565b92505060406131f186828701613193565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613226826131fb565b9050919050565b6132368161321b565b811461324157600080fd5b50565b6000813590506132538161322d565b92915050565b600080604083850312156132705761326f613168565b5b600061327e85828601613244565b925050602061328f85828601613193565b9150509250929050565b60008115159050919050565b6132ae81613299565b82525050565b60006020820190506132c960008301846132a5565b92915050565b6000602082840312156132e5576132e4613168565b5b60006132f384828501613244565b91505092915050565b6000613307826131fb565b9050919050565b613317816132fc565b82525050565b6000602082019050613332600083018461330e565b92915050565b6000819050919050565b600061335d613358613353846131fb565b613338565b6131fb565b9050919050565b600061336f82613342565b9050919050565b600061338182613364565b9050919050565b61339181613376565b82525050565b60006020820190506133ac6000830184613388565b92915050565b6133bb81613172565b82525050565b60006020820190506133d660008301846133b2565b92915050565b6133e581613299565b81146133f057600080fd5b50565b600081359050613402816133dc565b92915050565b6000806040838503121561341f5761341e613168565b5b600061342d85828601613244565b925050602061343e858286016133f3565b9150509250929050565b60008060006060848603121561346157613460613168565b5b600061346f86828701613244565b935050602061348086828701613244565b925050604061349186828701613193565b9150509250925092565b6134a48161321b565b82525050565b60006020820190506134bf600083018461349b565b92915050565b600060ff82169050919050565b6134db816134c5565b82525050565b60006020820190506134f660008301846134d2565b92915050565b60006020828403121561351257613511613168565b5b600061352084828501613193565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261354e5761354d613529565b5b8235905067ffffffffffffffff81111561356b5761356a61352e565b5b60208301915083602082028301111561358757613586613533565b5b9250929050565b600080602083850312156135a5576135a4613168565b5b600083013567ffffffffffffffff8111156135c3576135c261316d565b5b6135cf85828601613538565b92509250509250929050565b6000602082840312156135f1576135f0613168565b5b60006135ff848285016133f3565b91505092915050565b6000806040838503121561361f5761361e613168565b5b600061362d85828601613244565b925050602061363e85828601613244565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368f57607f821691505b6020821081036136a2576136a1613648565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136de6020836130c1565b91506136e9826136a8565b602082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061377d82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137af576137ae613743565b5b600182019050919050565b60006137c582613172565b91506137d083613172565b92508282019050808211156137e8576137e7613743565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613824601b836130c1565b915061382f826137ee565b602082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138b66024836130c1565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139486022836130c1565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139da6025836130c1565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c6023836130c1565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f556e61626c6520746f206c6f6361746520636f72726573706f6e64696e67205460008201527f72616e736665724576656e744c4f475300000000000000000000000000000000602082015250565b6000613afe6030836130c1565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613b906028836130c1565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b6000613bd182613172565b9150613bdc83613172565b9250828203905081811115613bf457613bf3613743565b5b92915050565b6000613c0582613172565b9150613c1083613172565b9250828202613c1e81613172565b91508282048414831517613c3557613c34613743565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c7682613172565b9150613c8183613172565b925082613c9157613c90613c3c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf86021836130c1565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613d6c8161322d565b92915050565b600060208284031215613d8857613d87613168565b5b6000613d9684828501613d5d565b91505092915050565b6000819050919050565b6000613dc4613dbf613dba84613d9f565b613338565b613172565b9050919050565b613dd481613da9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e0f8161321b565b82525050565b6000613e218383613e06565b60208301905092915050565b6000602082019050919050565b6000613e4582613dda565b613e4f8185613de5565b9350613e5a83613df6565b8060005b83811015613e8b578151613e728882613e15565b9750613e7d83613e2d565b925050600181019050613e5e565b5085935050505092915050565b600060a082019050613ead60008301886133b2565b613eba6020830187613dcb565b8181036040830152613ecc8186613e3a565b9050613edb606083018561349b565b613ee860808301846133b2565b9695505050505050565b6000604082019050613f0760008301856133b2565b8181036020830152613f198184613e3a565b90509392505050565b600060c082019050613f37600083018961349b565b613f4460208301886133b2565b613f516040830187613dcb565b613f5e6060830186613dcb565b613f6b608083018561349b565b613f7860a08301846133b2565b979650505050505050565b600081519050613f928161317c565b92915050565b600080600060608486031215613fb157613fb0613168565b5b6000613fbf86828701613f83565b9350506020613fd086828701613f83565b9250506040613fe186828701613f83565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209ad0c05b2b8f6e211b565a2a4996ba676874334e82689c367be9bfd16913d64664736f6c63430008110033

Deployed Bytecode Sourcemap

13976:13643:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18015:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20304:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19310:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20776:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14326:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15699:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18292:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19963:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21058:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22039:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14428:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21494:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18201:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18678:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14821:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20898:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15814:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14650:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15182:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14870:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15224:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18400:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5989:148;;;;;;;;;;;;;:::i;:::-;;15511:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15570:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15349:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24194:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15055:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14766:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5770:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19181:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15396:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18904:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15266:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21864:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15012:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21311:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14969:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15747:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15098:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14707:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15142:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14219:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15861:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14927:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18527:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20659:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15305:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21201:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19824:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15913:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18015:83;18052:13;18085:5;18078:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18015:83;:::o;20304:341::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20448:15:::1;20428:17;:35;;;;20494:15;20474:17;:35;;;;20535:10;20520:12;:25;;;;20579:58;20624:12;;20579:40;20601:17;;20579;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;20558:18;:79;;;;20304:341:::0;;;:::o;19310:161::-;19385:4;19402:39;19411:12;:10;:12::i;:::-;19425:7;19434:6;19402:8;:39::i;:::-;19459:4;19452:11;;19310:161;;;;:::o;20776:116::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20879:5:::1;20852:15;:24;20868:7;20852:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20776:116:::0;:::o;14326:94::-;;;;;;;;;;;;;:::o;15699:41::-;;;;;;;;;;;;;:::o;18292:100::-;18345:7;18372:12;;18365:19;;18292:100;:::o;19963:333::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20105:15:::1;20086:16;:34;;;;20150:15;20131:16;:34;;;;20190:10;20176:11;:24;;;;20233:55;20276:11;;20233:38;20254:16;;20233;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;20213:17;:75;;;;19963:333:::0;;;:::o;21058:135::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21179:6:::1;21149:19;:27;21169:6;21149:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21058:135:::0;;:::o;22039:313::-;22137:4;22154:36;22164:6;22172:9;22183:6;22154:9;:36::i;:::-;;22201:121;22210:6;22218:12;:10;:12::i;:::-;22232:89;22270:6;22232:89;;;;;;;;;;;;;;;;;:11;:19;22244:6;22232:19;;;;;;;;;;;;;;;:33;22252:12;:10;:12::i;:::-;22232:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22201:8;:121::i;:::-;22340:4;22333:11;;22039:313;;;;;:::o;14428:81::-;;;:::o;21494:128::-;21547:7;21574:40;21591:22;21601:11;21591:9;:22::i;:::-;21574:12;;:16;;:40;;;;:::i;:::-;21567:47;;21494:128;:::o;18201:83::-;18242:5;18267:9;;;;;;;;;;;18260:16;;18201:83;:::o;18678:218::-;18766:4;18783:83;18792:12;:10;:12::i;:::-;18806:7;18815:50;18854:10;18815:11;:25;18827:12;:10;:12::i;:::-;18815:25;;;;;;;;;;;;;;;:34;18841:7;18815:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18783:8;:83::i;:::-;18884:4;18877:11;;18678:218;;;;:::o;14821:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;20898:152::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21020:22:::1;20994:23;:48;;;;20898:152:::0;:::o;15814:40::-;;;;;;;;;;;;;:::o;14650:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15182:34::-;;;;:::o;14870:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15224:35::-;;;;:::o;18400:119::-;18466:7;18493:9;:18;18503:7;18493:18;;;;;;;;;;;;;;;;18486:25;;18400:119;;;:::o;5989:148::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6096:1:::1;6059:40;;6080:6;::::0;::::1;;;;;;;;6059:40;;;;;;;;;;;;6127:1;6110:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5989:148::o:0;15511:51::-;;;;:::o;15570:49::-;;;;:::o;15349:38::-;;;;:::o;24194:193::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24285:9:::1;24280:100;24300:9;;:16;;24296:1;:20;24280:100;;;24366:4;24334:15;:29;24350:9;;24360:1;24350:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24334:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24318:3;;;;:::i;:::-;;;24280:100;;;;24194:193:::0;;:::o;15055:36::-;;;;:::o;14766:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5770:87::-;5816:7;5843:6;;;;;;;;;;;5836:13;;5770:87;:::o;18106:::-;18145:13;18178:7;18171:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18106:87;:::o;19181:120::-;19243:7;19270:23;;19263:30;;19181:120;:::o;15396:45::-;;;;:::o;18904:269::-;18997:4;19014:129;19023:12;:10;:12::i;:::-;19037:7;19046:96;19085:15;19046:96;;;;;;;;;;;;;;;;;:11;:25;19058:12;:10;:12::i;:::-;19046:25;;;;;;;;;;;;;;;:34;19072:7;19046:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19014:8;:129::i;:::-;19161:4;19154:11;;18904:269;;;;:::o;15266:29::-;;;;:::o;21864:167::-;21942:4;21959:42;21969:12;:10;:12::i;:::-;21983:9;21994:6;21959:9;:42::i;:::-;;22019:4;22012:11;;21864:167;;;;:::o;15012:30::-;;;;:::o;21311:171::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21412:8:::1;21388:21;;:32;;;;;;;;;;;;;;;;;;21436:38;21465:8;21436:38;;;;;;:::i;:::-;;;;;;;;21311:171:::0;:::o;14969:36::-;;;;:::o;15747:26::-;;;;;;;;;;;;;:::o;15098:37::-;;;;:::o;14707:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15142:31::-;;;;:::o;14219:99::-;;;;;;;;;;;;;:::o;15861:45::-;;;;;;;;;;;;;:::o;14927:35::-;;;;:::o;18527:143::-;18608:7;18635:11;:18;18647:5;18635:18;;;;;;;;;;;;;;;:27;18654:7;18635:27;;;;;;;;;;;;;;;;18628:34;;18527:143;;;;:::o;20659:111::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20751:11:::1;20736:12;:26;;;;20659:111:::0;:::o;15305:37::-;;;;:::o;21201:102::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21287:8:::1;21273:10;:22;;;;21201:102:::0;:::o;19824:127::-;5914:12;:10;:12::i;:::-;5903:23;;:7;:5;:7::i;:::-;:23;;;5895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19937:6:::1;19911:15;:23;19927:6;19911:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19824:127:::0;;:::o;15913:35::-;;;;;;;;;;;;;:::o;1222:181::-;1280:7;1300:9;1316:1;1312;:5;;;;:::i;:::-;1300:17;;1341:1;1336;:6;;1328:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1394:1;1387:8;;;1222:181;;;;:::o;154:115::-;207:15;250:10;235:26;;154:115;:::o;19479:337::-;19589:1;19572:19;;:5;:19;;;19564:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19670:1;19651:21;;:7;:21;;;19643:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19754:6;19724:11;:18;19736:5;19724:18;;;;;;;;;;;;;;;:27;19743:7;19724:27;;;;;;;;;;;;;;;:36;;;;19792:7;19776:32;;19785:5;19776:32;;;19801:6;19776:32;;;;;;:::i;:::-;;;;;;;;19479:337;;;:::o;22360:1828::-;22447:4;22492:1;22474:20;;:6;:20;;;22466:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22576:1;22555:23;;:9;:23;;;22547:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22632:15;:23;22648:6;22632:23;;;;;;;;;;;;;;;;;;;;;;;;;22631:24;:55;;;;;22660:15;:26;22676:9;22660:26;;;;;;;;;;;;;;;;;;;;;;;;;22659:27;22631:55;22623:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;22755:16;;;;;;;;;;;22752:1429;;;22805:41;22820:6;22828:9;22839:6;22805:14;:41::i;:::-;22798:48;;;;22752:1429;22902:15;:23;22918:6;22902:23;;;;;;;;;;;;;;;;;;;;;;;;;22901:24;:55;;;;;22930:15;:26;22946:9;22930:26;;;;;;;;;;;;;;;;;;;;;;;;;22929:27;22901:55;22898:170;;;22995:12;;22985:6;:22;;22977:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22898:170;23096:28;23127:24;23145:4;23127:9;:24::i;:::-;23096:55;;23166:28;23221:23;;23197:20;:47;;23166:78;;23277:23;:44;;;;;23305:16;;;;;;;;;;;23304:17;23277:44;:69;;;;;23326:12;:20;23339:6;23326:20;;;;;;;;;;;;;;;;;;;;;;;;;23325:21;23277:69;:94;;;;;23350:21;;;;;;;;;;;23277:94;23273:305;;;23409:25;;;;;;;;;;;23406:97;;;23480:23;;23457:46;;23406:97;23522:36;23537:20;23522:14;:36::i;:::-;23273:305;23614:53;23636:6;23614:53;;;;;;;;;;;;;;;;;:9;:17;23624:6;23614:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23594:9;:17;23604:6;23594:17;;;;;;;;;;;;;;;:73;;;;23684:19;23707:17;:25;23725:6;23707:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23736:17;:28;23754:9;23736:28;;;;;;;;;;;;;;;;;;;;;;;;;23707:57;23706:148;;23820:34;23828:6;23836:9;23847:6;23820:7;:34::i;:::-;23706:148;;;23811:6;23706:148;23684:170;;23874:16;;;;;;;;;;;:51;;;;;23895:19;:30;23915:9;23895:30;;;;;;;;;;;;;;;;;;;;;;;;;23894:31;23874:51;23871:133;;;23993:10;;23952:37;23977:11;23952:20;23962:9;23952;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;23944:60;;;;;;23871:133;24044:37;24069:11;24044:9;:20;24054:9;24044:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24021:9;:20;24031:9;24021:20;;;;;;;;;;;;;;;:60;;;;24120:9;24103:40;;24112:6;24103:40;;;24131:11;24103:40;;;;;;:::i;:::-;;;;;;;;24165:4;24158:11;;;;;22360:1828;;;;;;:::o;1555:192::-;1641:7;1674:1;1669;:6;;1677:12;1661:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1701:9;1717:1;1713;:5;;;;:::i;:::-;1701:17;;1738:1;1731:8;;;1555:192;;;;;:::o;1411:136::-;1469:7;1496:43;1500:1;1503;1496:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1489:50;;1411:136;;;;:::o;24395:330::-;24488:4;24525:53;24547:6;24525:53;;;;;;;;;;;;;;;;;:9;:17;24535:6;24525:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24505:9;:17;24515:6;24505:17;;;;;;;;;;;;;;;:73;;;;24612:32;24637:6;24612:9;:20;24622:9;24612:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24589:9;:20;24599:9;24589:20;;;;;;;;;;;;;;;:55;;;;24677:9;24660:35;;24669:6;24660:35;;;24688:6;24660:35;;;;;;:::i;:::-;;;;;;;;24713:4;24706:11;;24395:330;;;;;:::o;24733:1048::-;16390:4;16371:16;;:23;;;;;;;;;;;;;;;;;;24815:19:::1;24837:65;24900:1;24837:58;24870:24;;24837:28;24849:15;;24837:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;24815:87;;24913:21;24937:24;24949:11;24937:7;:11;;:24;;;;:::i;:::-;24913:48;;24974:31;24991:13;24974:16;:31::i;:::-;25016:22;25041:21;25016:46;;25075:19;25097:52;25126:22;25146:1;25126:15;;:19;;:22;;;;:::i;:::-;25097:24;;:28;;:52;;;;:::i;:::-;25075:74;;25170:26;25199:59;25256:1;25199:52;25239:11;25199:35;25218:15;;25199:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25170:88;;25269:21;25293:47;25328:11;25293:30;25312:10;;25293:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;25269:71;;25351:26;25380:57;25423:13;25380:38;25399:18;25380:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;25351:86;;25474:1;25453:18;:22;25450:104;;;25490:64;25511:22;;;;;;;;;;;25535:18;25490:20;:64::i;:::-;25450:104;25586:1;25570:13;:17;25567:89;;;25602:54;25623:17;;;;;;;;;;;25642:13;25602:20;:54::i;:::-;25567:89;25693:1;25672:18;:22;:41;;;;;25712:1;25698:11;:15;25672:41;25669:104;;;25728:45;25741:11;25754:18;25728:12;:45::i;:::-;25669:104;24794:987;;;;;;;16436:5:::0;16417:16;;:24;;;;;;;;;;;;;;;;;;24733:1048;:::o;26988:622::-;27074:7;27104:17;27124:1;27104:21;;27149:12;:20;27162:6;27149:20;;;;;;;;;;;;;;;;;;;;;;;;;27146:223;;;27198:38;27232:3;27198:29;27209:17;;27198:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27186:50;;27146:223;;;27266:12;:23;27279:9;27266:23;;;;;;;;;;;;;;;;;;;;;;;;;27263:106;;;27318:39;27353:3;27318:30;27329:18;;27318:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27306:51;;27263:106;27146:223;27404:1;27392:9;:13;27389:173;;;27449:39;27478:9;27449;:24;27467:4;27449:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27422:9;:24;27440:4;27422:24;;;;;;;;;;;;;;;:66;;;;27533:4;27508:42;;27517:6;27508:42;;;27540:9;27508:42;;;;;;:::i;:::-;;;;;;;;27389:173;27581:21;27592:9;27581:6;:10;;:21;;;;:::i;:::-;27574:28;;;26988:622;;;;;:::o;1755:250::-;1813:7;1842:1;1837;:6;1833:47;;1867:1;1860:8;;;;1833:47;1892:9;1908:1;1904;:5;;;;:::i;:::-;1892:17;;1937:1;1932;1928;:5;;;;:::i;:::-;:10;1920:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1996:1;1989:8;;;1755:250;;;;;:::o;2013:132::-;2071:7;2098:39;2102:1;2105;2098:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2091:46;;2013:132;;;;:::o;25793:666::-;25919:21;25957:1;25943:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25919:40;;25988:4;25970;25975:1;25970:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26014:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26004:4;26009:1;26004:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26049:62;26066:4;26081:15;;;;;;;;;;;26099:11;26049:8;:62::i;:::-;26150:15;;;;;;;;;;;:66;;;26231:11;26257:1;26301:4;26328;26364:15;26150:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26416:35;26433:11;26446:4;26416:35;;;;;;;:::i;:::-;;;;;;;;25848:611;25793:666;:::o;21630:126::-;21722:9;:18;;:26;21741:6;21722:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21630:126;;:::o;26467:513::-;26615:62;26632:4;26647:15;;;;;;;;;;;26665:11;26615:8;:62::i;:::-;26720:15;;;;;;;;;;;:31;;;26759:9;26792:4;26812:11;26838:1;26881;26924:7;:5;:7::i;:::-;26946:15;26720:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26467:513;;:::o;2153:278::-;2239:7;2271:1;2267;:5;2274:12;2259:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2298:9;2314:1;2310;:5;;;;:::i;:::-;2298:17;;2422:1;2415:8;;;2153:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:329::-;4130:6;4179:2;4167:9;4158:7;4154:23;4150:32;4147:119;;;4185:79;;:::i;:::-;4147:119;4305:1;4330:53;4375:7;4366:6;4355:9;4351:22;4330:53;:::i;:::-;4320:63;;4276:117;4071:329;;;;:::o;4406:104::-;4451:7;4480:24;4498:5;4480:24;:::i;:::-;4469:35;;4406:104;;;:::o;4516:142::-;4619:32;4645:5;4619:32;:::i;:::-;4614:3;4607:45;4516:142;;:::o;4664:254::-;4773:4;4811:2;4800:9;4796:18;4788:26;;4824:87;4908:1;4897:9;4893:17;4884:6;4824:87;:::i;:::-;4664:254;;;;:::o;4924:60::-;4952:3;4973:5;4966:12;;4924:60;;;:::o;4990:142::-;5040:9;5073:53;5091:34;5100:24;5118:5;5100:24;:::i;:::-;5091:34;:::i;:::-;5073:53;:::i;:::-;5060:66;;4990:142;;;:::o;5138:126::-;5188:9;5221:37;5252:5;5221:37;:::i;:::-;5208:50;;5138:126;;;:::o;5270:153::-;5347:9;5380:37;5411:5;5380:37;:::i;:::-;5367:50;;5270:153;;;:::o;5429:185::-;5543:64;5601:5;5543:64;:::i;:::-;5538:3;5531:77;5429:185;;:::o;5620:276::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:98;5886:1;5875:9;5871:17;5862:6;5791:98;:::i;:::-;5620:276;;;;:::o;5902:118::-;5989:24;6007:5;5989:24;:::i;:::-;5984:3;5977:37;5902:118;;:::o;6026:222::-;6119:4;6157:2;6146:9;6142:18;6134:26;;6170:71;6238:1;6227:9;6223:17;6214:6;6170:71;:::i;:::-;6026:222;;;;:::o;6254:116::-;6324:21;6339:5;6324:21;:::i;:::-;6317:5;6314:32;6304:60;;6360:1;6357;6350:12;6304:60;6254:116;:::o;6376:133::-;6419:5;6457:6;6444:20;6435:29;;6473:30;6497:5;6473:30;:::i;:::-;6376:133;;;;:::o;6515:468::-;6580:6;6588;6637:2;6625:9;6616:7;6612:23;6608:32;6605:119;;;6643:79;;:::i;:::-;6605:119;6763:1;6788:53;6833:7;6824:6;6813:9;6809:22;6788:53;:::i;:::-;6778:63;;6734:117;6890:2;6916:50;6958:7;6949:6;6938:9;6934:22;6916:50;:::i;:::-;6906:60;;6861:115;6515:468;;;;;:::o;6989:619::-;7066:6;7074;7082;7131:2;7119:9;7110:7;7106:23;7102:32;7099:119;;;7137:79;;:::i;:::-;7099:119;7257:1;7282:53;7327:7;7318:6;7307:9;7303:22;7282:53;:::i;:::-;7272:63;;7228:117;7384:2;7410:53;7455:7;7446:6;7435:9;7431:22;7410:53;:::i;:::-;7400:63;;7355:118;7512:2;7538:53;7583:7;7574:6;7563:9;7559:22;7538:53;:::i;:::-;7528:63;;7483:118;6989:619;;;;;:::o;7614:118::-;7701:24;7719:5;7701:24;:::i;:::-;7696:3;7689:37;7614:118;;:::o;7738:222::-;7831:4;7869:2;7858:9;7854:18;7846:26;;7882:71;7950:1;7939:9;7935:17;7926:6;7882:71;:::i;:::-;7738:222;;;;:::o;7966:86::-;8001:7;8041:4;8034:5;8030:16;8019:27;;7966:86;;;:::o;8058:112::-;8141:22;8157:5;8141:22;:::i;:::-;8136:3;8129:35;8058:112;;:::o;8176:214::-;8265:4;8303:2;8292:9;8288:18;8280:26;;8316:67;8380:1;8369:9;8365:17;8356:6;8316:67;:::i;:::-;8176:214;;;;:::o;8396:329::-;8455:6;8504:2;8492:9;8483:7;8479:23;8475:32;8472:119;;;8510:79;;:::i;:::-;8472:119;8630:1;8655:53;8700:7;8691:6;8680:9;8676:22;8655:53;:::i;:::-;8645:63;;8601:117;8396:329;;;;:::o;8731:117::-;8840:1;8837;8830:12;8854:117;8963:1;8960;8953:12;8977:117;9086:1;9083;9076:12;9117:568;9190:8;9200:6;9250:3;9243:4;9235:6;9231:17;9227:27;9217:122;;9258:79;;:::i;:::-;9217:122;9371:6;9358:20;9348:30;;9401:18;9393:6;9390:30;9387:117;;;9423:79;;:::i;:::-;9387:117;9537:4;9529:6;9525:17;9513:29;;9591:3;9583:4;9575:6;9571:17;9561:8;9557:32;9554:41;9551:128;;;9598:79;;:::i;:::-;9551:128;9117:568;;;;;:::o;9691:559::-;9777:6;9785;9834:2;9822:9;9813:7;9809:23;9805:32;9802:119;;;9840:79;;:::i;:::-;9802:119;9988:1;9977:9;9973:17;9960:31;10018:18;10010:6;10007:30;10004:117;;;10040:79;;:::i;:::-;10004:117;10153:80;10225:7;10216:6;10205:9;10201:22;10153:80;:::i;:::-;10135:98;;;;9931:312;9691:559;;;;;:::o;10256:323::-;10312:6;10361:2;10349:9;10340:7;10336:23;10332:32;10329:119;;;10367:79;;:::i;:::-;10329:119;10487:1;10512:50;10554:7;10545:6;10534:9;10530:22;10512:50;:::i;:::-;10502:60;;10458:114;10256:323;;;;:::o;10585:474::-;10653:6;10661;10710:2;10698:9;10689:7;10685:23;10681:32;10678:119;;;10716:79;;:::i;:::-;10678:119;10836:1;10861:53;10906:7;10897:6;10886:9;10882:22;10861:53;:::i;:::-;10851:63;;10807:117;10963:2;10989:53;11034:7;11025:6;11014:9;11010:22;10989:53;:::i;:::-;10979:63;;10934:118;10585:474;;;;;:::o;11065:180::-;11113:77;11110:1;11103:88;11210:4;11207:1;11200:15;11234:4;11231:1;11224:15;11251:320;11295:6;11332:1;11326:4;11322:12;11312:22;;11379:1;11373:4;11369:12;11400:18;11390:81;;11456:4;11448:6;11444:17;11434:27;;11390:81;11518:2;11510:6;11507:14;11487:18;11484:38;11481:84;;11537:18;;:::i;:::-;11481:84;11302:269;11251:320;;;:::o;11577:182::-;11717:34;11713:1;11705:6;11701:14;11694:58;11577:182;:::o;11765:366::-;11907:3;11928:67;11992:2;11987:3;11928:67;:::i;:::-;11921:74;;12004:93;12093:3;12004:93;:::i;:::-;12122:2;12117:3;12113:12;12106:19;;11765:366;;;:::o;12137:419::-;12303:4;12341:2;12330:9;12326:18;12318:26;;12390:9;12384:4;12380:20;12376:1;12365:9;12361:17;12354:47;12418:131;12544:4;12418:131;:::i;:::-;12410:139;;12137:419;;;:::o;12562:180::-;12610:77;12607:1;12600:88;12707:4;12704:1;12697:15;12731:4;12728:1;12721:15;12748:180;12796:77;12793:1;12786:88;12893:4;12890:1;12883:15;12917:4;12914:1;12907:15;12934:233;12973:3;12996:24;13014:5;12996:24;:::i;:::-;12987:33;;13042:66;13035:5;13032:77;13029:103;;13112:18;;:::i;:::-;13029:103;13159:1;13152:5;13148:13;13141:20;;12934:233;;;:::o;13173:191::-;13213:3;13232:20;13250:1;13232:20;:::i;:::-;13227:25;;13266:20;13284:1;13266:20;:::i;:::-;13261:25;;13309:1;13306;13302:9;13295:16;;13330:3;13327:1;13324:10;13321:36;;;13337:18;;:::i;:::-;13321:36;13173:191;;;;:::o;13370:177::-;13510:29;13506:1;13498:6;13494:14;13487:53;13370:177;:::o;13553:366::-;13695:3;13716:67;13780:2;13775:3;13716:67;:::i;:::-;13709:74;;13792:93;13881:3;13792:93;:::i;:::-;13910:2;13905:3;13901:12;13894:19;;13553:366;;;:::o;13925:419::-;14091:4;14129:2;14118:9;14114:18;14106:26;;14178:9;14172:4;14168:20;14164:1;14153:9;14149:17;14142:47;14206:131;14332:4;14206:131;:::i;:::-;14198:139;;13925:419;;;:::o;14350:223::-;14490:34;14486:1;14478:6;14474:14;14467:58;14559:6;14554:2;14546:6;14542:15;14535:31;14350:223;:::o;14579:366::-;14721:3;14742:67;14806:2;14801:3;14742:67;:::i;:::-;14735:74;;14818:93;14907:3;14818:93;:::i;:::-;14936:2;14931:3;14927:12;14920:19;;14579:366;;;:::o;14951:419::-;15117:4;15155:2;15144:9;15140:18;15132:26;;15204:9;15198:4;15194:20;15190:1;15179:9;15175:17;15168:47;15232:131;15358:4;15232:131;:::i;:::-;15224:139;;14951:419;;;:::o;15376:221::-;15516:34;15512:1;15504:6;15500:14;15493:58;15585:4;15580:2;15572:6;15568:15;15561:29;15376:221;:::o;15603:366::-;15745:3;15766:67;15830:2;15825:3;15766:67;:::i;:::-;15759:74;;15842:93;15931:3;15842:93;:::i;:::-;15960:2;15955:3;15951:12;15944:19;;15603:366;;;:::o;15975:419::-;16141:4;16179:2;16168:9;16164:18;16156:26;;16228:9;16222:4;16218:20;16214:1;16203:9;16199:17;16192:47;16256:131;16382:4;16256:131;:::i;:::-;16248:139;;15975:419;;;:::o;16400:224::-;16540:34;16536:1;16528:6;16524:14;16517:58;16609:7;16604:2;16596:6;16592:15;16585:32;16400:224;:::o;16630:366::-;16772:3;16793:67;16857:2;16852:3;16793:67;:::i;:::-;16786:74;;16869:93;16958:3;16869:93;:::i;:::-;16987:2;16982:3;16978:12;16971:19;;16630:366;;;:::o;17002:419::-;17168:4;17206:2;17195:9;17191:18;17183:26;;17255:9;17249:4;17245:20;17241:1;17230:9;17226:17;17219:47;17283:131;17409:4;17283:131;:::i;:::-;17275:139;;17002:419;;;:::o;17427:222::-;17567:34;17563:1;17555:6;17551:14;17544:58;17636:5;17631:2;17623:6;17619:15;17612:30;17427:222;:::o;17655:366::-;17797:3;17818:67;17882:2;17877:3;17818:67;:::i;:::-;17811:74;;17894:93;17983:3;17894:93;:::i;:::-;18012:2;18007:3;18003:12;17996:19;;17655:366;;;:::o;18027:419::-;18193:4;18231:2;18220:9;18216:18;18208:26;;18280:9;18274:4;18270:20;18266:1;18255:9;18251:17;18244:47;18308:131;18434:4;18308:131;:::i;:::-;18300:139;;18027:419;;;:::o;18452:235::-;18592:34;18588:1;18580:6;18576:14;18569:58;18661:18;18656:2;18648:6;18644:15;18637:43;18452:235;:::o;18693:366::-;18835:3;18856:67;18920:2;18915:3;18856:67;:::i;:::-;18849:74;;18932:93;19021:3;18932:93;:::i;:::-;19050:2;19045:3;19041:12;19034:19;;18693:366;;;:::o;19065:419::-;19231:4;19269:2;19258:9;19254:18;19246:26;;19318:9;19312:4;19308:20;19304:1;19293:9;19289:17;19282:47;19346:131;19472:4;19346:131;:::i;:::-;19338:139;;19065:419;;;:::o;19490:227::-;19630:34;19626:1;19618:6;19614:14;19607:58;19699:10;19694:2;19686:6;19682:15;19675:35;19490:227;:::o;19723:366::-;19865:3;19886:67;19950:2;19945:3;19886:67;:::i;:::-;19879:74;;19962:93;20051:3;19962:93;:::i;:::-;20080:2;20075:3;20071:12;20064:19;;19723:366;;;:::o;20095:419::-;20261:4;20299:2;20288:9;20284:18;20276:26;;20348:9;20342:4;20338:20;20334:1;20323:9;20319:17;20312:47;20376:131;20502:4;20376:131;:::i;:::-;20368:139;;20095:419;;;:::o;20520:194::-;20560:4;20580:20;20598:1;20580:20;:::i;:::-;20575:25;;20614:20;20632:1;20614:20;:::i;:::-;20609:25;;20658:1;20655;20651:9;20643:17;;20682:1;20676:4;20673:11;20670:37;;;20687:18;;:::i;:::-;20670:37;20520:194;;;;:::o;20720:410::-;20760:7;20783:20;20801:1;20783:20;:::i;:::-;20778:25;;20817:20;20835:1;20817:20;:::i;:::-;20812:25;;20872:1;20869;20865:9;20894:30;20912:11;20894:30;:::i;:::-;20883:41;;21073:1;21064:7;21060:15;21057:1;21054:22;21034:1;21027:9;21007:83;20984:139;;21103:18;;:::i;:::-;20984:139;20768:362;20720:410;;;;:::o;21136:180::-;21184:77;21181:1;21174:88;21281:4;21278:1;21271:15;21305:4;21302:1;21295:15;21322:185;21362:1;21379:20;21397:1;21379:20;:::i;:::-;21374:25;;21413:20;21431:1;21413:20;:::i;:::-;21408:25;;21452:1;21442:35;;21457:18;;:::i;:::-;21442:35;21499:1;21496;21492:9;21487:14;;21322:185;;;;:::o;21513:220::-;21653:34;21649:1;21641:6;21637:14;21630:58;21722:3;21717:2;21709:6;21705:15;21698:28;21513:220;:::o;21739:366::-;21881:3;21902:67;21966:2;21961:3;21902:67;:::i;:::-;21895:74;;21978:93;22067:3;21978:93;:::i;:::-;22096:2;22091:3;22087:12;22080:19;;21739:366;;;:::o;22111:419::-;22277:4;22315:2;22304:9;22300:18;22292:26;;22364:9;22358:4;22354:20;22350:1;22339:9;22335:17;22328:47;22392:131;22518:4;22392:131;:::i;:::-;22384:139;;22111:419;;;:::o;22536:180::-;22584:77;22581:1;22574:88;22681:4;22678:1;22671:15;22705:4;22702:1;22695:15;22722:143;22779:5;22810:6;22804:13;22795:22;;22826:33;22853:5;22826:33;:::i;:::-;22722:143;;;;:::o;22871:351::-;22941:6;22990:2;22978:9;22969:7;22965:23;22961:32;22958:119;;;22996:79;;:::i;:::-;22958:119;23116:1;23141:64;23197:7;23188:6;23177:9;23173:22;23141:64;:::i;:::-;23131:74;;23087:128;22871:351;;;;:::o;23228:85::-;23273:7;23302:5;23291:16;;23228:85;;;:::o;23319:158::-;23377:9;23410:61;23428:42;23437:32;23463:5;23437:32;:::i;:::-;23428:42;:::i;:::-;23410:61;:::i;:::-;23397:74;;23319:158;;;:::o;23483:147::-;23578:45;23617:5;23578:45;:::i;:::-;23573:3;23566:58;23483:147;;:::o;23636:114::-;23703:6;23737:5;23731:12;23721:22;;23636:114;;;:::o;23756:184::-;23855:11;23889:6;23884:3;23877:19;23929:4;23924:3;23920:14;23905:29;;23756:184;;;;:::o;23946:132::-;24013:4;24036:3;24028:11;;24066:4;24061:3;24057:14;24049:22;;23946:132;;;:::o;24084:108::-;24161:24;24179:5;24161:24;:::i;:::-;24156:3;24149:37;24084:108;;:::o;24198:179::-;24267:10;24288:46;24330:3;24322:6;24288:46;:::i;:::-;24366:4;24361:3;24357:14;24343:28;;24198:179;;;;:::o;24383:113::-;24453:4;24485;24480:3;24476:14;24468:22;;24383:113;;;:::o;24532:732::-;24651:3;24680:54;24728:5;24680:54;:::i;:::-;24750:86;24829:6;24824:3;24750:86;:::i;:::-;24743:93;;24860:56;24910:5;24860:56;:::i;:::-;24939:7;24970:1;24955:284;24980:6;24977:1;24974:13;24955:284;;;25056:6;25050:13;25083:63;25142:3;25127:13;25083:63;:::i;:::-;25076:70;;25169:60;25222:6;25169:60;:::i;:::-;25159:70;;25015:224;25002:1;24999;24995:9;24990:14;;24955:284;;;24959:14;25255:3;25248:10;;24656:608;;;24532:732;;;;:::o;25270:831::-;25533:4;25571:3;25560:9;25556:19;25548:27;;25585:71;25653:1;25642:9;25638:17;25629:6;25585:71;:::i;:::-;25666:80;25742:2;25731:9;25727:18;25718:6;25666:80;:::i;:::-;25793:9;25787:4;25783:20;25778:2;25767:9;25763:18;25756:48;25821:108;25924:4;25915:6;25821:108;:::i;:::-;25813:116;;25939:72;26007:2;25996:9;25992:18;25983:6;25939:72;:::i;:::-;26021:73;26089:3;26078:9;26074:19;26065:6;26021:73;:::i;:::-;25270:831;;;;;;;;:::o;26107:483::-;26278:4;26316:2;26305:9;26301:18;26293:26;;26329:71;26397:1;26386:9;26382:17;26373:6;26329:71;:::i;:::-;26447:9;26441:4;26437:20;26432:2;26421:9;26417:18;26410:48;26475:108;26578:4;26569:6;26475:108;:::i;:::-;26467:116;;26107:483;;;;;:::o;26596:807::-;26845:4;26883:3;26872:9;26868:19;26860:27;;26897:71;26965:1;26954:9;26950:17;26941:6;26897:71;:::i;:::-;26978:72;27046:2;27035:9;27031:18;27022:6;26978:72;:::i;:::-;27060:80;27136:2;27125:9;27121:18;27112:6;27060:80;:::i;:::-;27150;27226:2;27215:9;27211:18;27202:6;27150:80;:::i;:::-;27240:73;27308:3;27297:9;27293:19;27284:6;27240:73;:::i;:::-;27323;27391:3;27380:9;27376:19;27367:6;27323:73;:::i;:::-;26596:807;;;;;;;;;:::o;27409:143::-;27466:5;27497:6;27491:13;27482:22;;27513:33;27540:5;27513:33;:::i;:::-;27409:143;;;;:::o;27558:663::-;27646:6;27654;27662;27711:2;27699:9;27690:7;27686:23;27682:32;27679:119;;;27717:79;;:::i;:::-;27679:119;27837:1;27862:64;27918:7;27909:6;27898:9;27894:22;27862:64;:::i;:::-;27852:74;;27808:128;27975:2;28001:64;28057:7;28048:6;28037:9;28033:22;28001:64;:::i;:::-;27991:74;;27946:129;28114:2;28140:64;28196:7;28187:6;28176:9;28172:22;28140:64;:::i;:::-;28130:74;;28085:129;27558:663;;;;;:::o

Swarm Source

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