ETH Price: $3,386.03 (-1.50%)
Gas: 2 Gwei

Token

BOG COIN (BOG)
 

Overview

Max Total Supply

10,000,000 BOG

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.850528291595707085 BOG

Value
$0.00
0x058c85033833fb4bbbe0265173c6f5875c014dbc
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:
BITCOINOG

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-03
*/

/*


PORTAL: https://t.me/BogCoinPortal
TWITTER: https://t.me/BogCoinPortal

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // 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;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
       
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }

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

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

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


 
contract BITCOINOG is ERC20, Ownable {

    string _name = unicode"BOG COIN";
    string _symbol = unicode"BOG";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;


    mapping(address => bool) public isBlacklisted;

    event Blacklisted(address indexed account);
    event Unblacklisted(address indexed account);
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 22;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 25;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 10000000 * 1e18;
 
        maxTransaction = totalSupply * 20 / 1000; // 2%
        maxWalletHolding = totalSupply * 20 / 1000; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);

       
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
     
        
        
        
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 

    function goLive() external onlyOwner{



        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this)) * 90 / 100;
        

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

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

     function blacklist(address account) external onlyOwner {
        require(account != address(0), "Invalid address");
        require(!isBlacklisted[account], "Account is already blacklisted");
        
        isBlacklisted[account] = true;
        emit Blacklisted(account);
    }

    function unblacklist(address account) external onlyOwner {
        require(account != address(0), "Invalid address");
        require(isBlacklisted[account], "Account is not blacklisted");
        
        isBlacklisted[account] = false;
        emit Unblacklisted(account);
    }


    

    function removeStuckEther() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function removeStuckTokenBalance() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function removeLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function activateEmptyContract(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function editFees(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
       
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newDevWallet) external onlyOwner{
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[msg.sender], "Sender is blacklisted");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    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),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 3;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Blacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Unblacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"activateEmptyContract","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":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"editFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600881526020017f424f4720434f494e000000000000000000000000000000000000000000000000815250600690816200004a919062000bce565b506040518060400160405280600381526020017f424f4700000000000000000000000000000000000000000000000000000000008152506007908162000091919062000bce565b50600160115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009ce565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009ce565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009ce565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bce565b50806004908162000218919062000bce565b5050505f6200022c620004f560201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601690505f80601990505f806a084595161401484a00000090506103e8601482620002f6919062000cdf565b62000302919062000d56565b600e819055506103e86014826200031a919062000cdf565b62000326919062000d56565b6010819055506103e86001826200033e919062000cdf565b6200034a919062000d56565b600f81905550846013819055508360148190555060145460135462000370919062000d8d565b601281905550826016819055508160178190555060175460165462000396919062000d8d565b60158190555033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003fe620003f0620004fc60201b60201c565b60016200052460201b60201c565b620004113060016200052460201b60201c565b6200042661dead60016200052460201b60201c565b6200045a600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200052460201b60201c565b6200047c6200046e620004fc60201b60201c565b60016200066d60201b60201c565b6200048f3060016200066d60201b60201c565b620004a461dead60016200066d60201b60201c565b620004d8600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066d60201b60201c565b620004ea33826200076660201b60201c565b505050505062000f84565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000534620004f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005bc9062000e25565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000661919062000e61565b60405180910390a25050565b6200067d620004f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200070e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007059062000e25565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ce9062000eca565b60405180910390fd5b620007ea5f83836200090360201b60201c565b62000801816002546200090860201b90919060201c565b60028190555062000858815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200090860201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f7919062000efb565b60405180910390a35050565b505050565b5f80828462000918919062000d8d565b90508381101562000960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009579062000f64565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009e657607f821691505b602082108103620009fc57620009fb620009a1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a23565b62000a6c868362000a23565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ab662000ab062000aaa8462000a84565b62000a8d565b62000a84565b9050919050565b5f819050919050565b62000ad18362000a96565b62000ae962000ae08262000abd565b84845462000a2f565b825550505050565b5f90565b62000aff62000af1565b62000b0c81848462000ac6565b505050565b5b8181101562000b335762000b275f8262000af5565b60018101905062000b12565b5050565b601f82111562000b825762000b4c8162000a02565b62000b578462000a14565b8101602085101562000b67578190505b62000b7f62000b768562000a14565b83018262000b11565b50505b505050565b5f82821c905092915050565b5f62000ba45f198460080262000b87565b1980831691505092915050565b5f62000bbe838362000b93565b9150826002028217905092915050565b62000bd9826200096a565b67ffffffffffffffff81111562000bf55762000bf462000974565b5b62000c018254620009ce565b62000c0e82828562000b37565b5f60209050601f83116001811462000c44575f841562000c2f578287015190505b62000c3b858262000bb1565b86555062000caa565b601f19841662000c548662000a02565b5f5b8281101562000c7d5784890151825560018201915060208501945060208101905062000c56565b8683101562000c9d578489015162000c99601f89168262000b93565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ceb8262000a84565b915062000cf88362000a84565b925082820262000d088162000a84565b9150828204841483151762000d225762000d2162000cb2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d628262000a84565b915062000d6f8362000a84565b92508262000d825762000d8162000d29565b5b828204905092915050565b5f62000d998262000a84565b915062000da68362000a84565b925082820190508082111562000dc15762000dc062000cb2565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e0d60208362000dc7565b915062000e1a8262000dd7565b602082019050919050565b5f6020820190508181035f83015262000e3e8162000dff565b9050919050565b5f8115159050919050565b62000e5b8162000e45565b82525050565b5f60208201905062000e765f83018462000e50565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb2601f8362000dc7565b915062000ebf8262000e7c565b602082019050919050565b5f6020820190508181035f83015262000ee38162000ea4565b9050919050565b62000ef58162000a84565b82525050565b5f60208201905062000f105f83018462000eea565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f4c601b8362000dc7565b915062000f598262000f16565b602082019050919050565b5f6020820190508181035f83015262000f7d8162000f3e565b9050919050565b614db38062000f925f395ff3fe608060405260043610610280575f3560e01c8063715018a61161014e578063a457c2d7116100c0578063c3f70b5211610079578063c3f70b521461094b578063dd62ed3e14610975578063df6f93be146109b1578063f2fde38b146109db578063f9f92be414610a03578063fe575a8714610a2b57610287565b8063a457c2d71461081b578063a9059cbb14610857578063b62496f514610893578063b69ef8a8146108cf578063be857504146108f9578063c02466681461092357610287565b80638da5cb5b116101125780638da5cb5b14610735578063945674fe1461075f57806395d89b41146107895780639a7a23d6146107b35780639ee2e924146107db5780639fccce32146107f157610287565b8063715018a6146106a3578063751039fc146106b95780637571336a146106cf57806375e3661e146106f757806387dd95c01461071f57610287565b806323b872dd116101f257806349bd5a5e116101ab57806349bd5a5e146105855780634fbee193146105af5780635de0f2a0146105eb5780635ec065e7146106155780636c7e15c91461063d57806370a082311461066757610287565b806323b872dd146104795780632c28f579146104b5578063313ce567146104cb57806339509351146104f557806346469afb1461053157806348d791551461055b57610287565b806318160ddd1161024457806318160ddd146103815780631816467f146103ab5780631a8145bb146103d35780631bff7898146103fd5780631d9305bf1461042757806322eb66311461044f57610287565b806306fdde031461028b578063095ea7b3146102b55780630e947809146102f157806310d5de531461031b5780631694505e1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a67565b6040516102ac9190613ba5565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613c56565b610af7565b6040516102e89190613cae565b60405180910390f35b3480156102fc575f80fd5b50610305610b14565b6040516103129190613cae565b60405180910390f35b348015610326575f80fd5b50610341600480360381019061033c9190613cc7565b610b26565b60405161034e9190613cae565b60405180910390f35b348015610362575f80fd5b5061036b610b43565b6040516103789190613d4d565b60405180910390f35b34801561038c575f80fd5b50610395610b68565b6040516103a29190613d75565b60405180910390f35b3480156103b6575f80fd5b506103d160048036038101906103cc9190613cc7565b610b71565b005b3480156103de575f80fd5b506103e7610cc5565b6040516103f49190613d75565b60405180910390f35b348015610408575f80fd5b50610411610ccb565b60405161041e9190613d75565b60405180910390f35b348015610432575f80fd5b5061044d60048036038101906104489190613d8e565b610cd1565b005b34801561045a575f80fd5b50610463610db5565b6040516104709190613d75565b60405180910390f35b348015610484575f80fd5b5061049f600480360381019061049a9190613df2565b610dbb565b6040516104ac9190613cae565b60405180910390f35b3480156104c0575f80fd5b506104c9610e8f565b005b3480156104d6575f80fd5b506104df611295565b6040516104ec9190613e5d565b60405180910390f35b348015610500575f80fd5b5061051b60048036038101906105169190613c56565b61129d565b6040516105289190613cae565b60405180910390f35b34801561053c575f80fd5b5061054561134b565b6040516105529190613d75565b60405180910390f35b348015610566575f80fd5b5061056f611351565b60405161057c9190613d75565b60405180910390f35b348015610590575f80fd5b50610599611357565b6040516105a69190613e85565b60405180910390f35b3480156105ba575f80fd5b506105d560048036038101906105d09190613cc7565b61137c565b6040516105e29190613cae565b60405180910390f35b3480156105f6575f80fd5b506105ff6113ce565b60405161060c9190613d75565b60405180910390f35b348015610620575f80fd5b5061063b60048036038101906106369190613ec8565b6113d4565b005b348015610648575f80fd5b50610651611487565b60405161065e9190613d75565b60405180910390f35b348015610672575f80fd5b5061068d60048036038101906106889190613cc7565b61148d565b60405161069a9190613d75565b60405180910390f35b3480156106ae575f80fd5b506106b76114d2565b005b3480156106c4575f80fd5b506106cd611625565b005b3480156106da575f80fd5b506106f560048036038101906106f09190613ef3565b6116d6565b005b348015610702575f80fd5b5061071d60048036038101906107189190613cc7565b6117c4565b005b34801561072a575f80fd5b506107336119eb565b005b348015610740575f80fd5b50610749611b94565b6040516107569190613e85565b60405180910390f35b34801561076a575f80fd5b50610773611bbc565b6040516107809190613cae565b60405180910390f35b348015610794575f80fd5b5061079d611bcf565b6040516107aa9190613ba5565b60405180910390f35b3480156107be575f80fd5b506107d960048036038101906107d49190613ef3565b611c5f565b005b3480156107e6575f80fd5b506107ef611d92565b005b3480156107fc575f80fd5b50610805611ea5565b6040516108129190613d75565b60405180910390f35b348015610826575f80fd5b50610841600480360381019061083c9190613c56565b611eab565b60405161084e9190613cae565b60405180910390f35b348015610862575f80fd5b5061087d60048036038101906108789190613c56565b611f73565b60405161088a9190613cae565b60405180910390f35b34801561089e575f80fd5b506108b960048036038101906108b49190613cc7565b611f90565b6040516108c69190613cae565b60405180910390f35b3480156108da575f80fd5b506108e3611fad565b6040516108f09190613d75565b60405180910390f35b348015610904575f80fd5b5061090d611fb3565b60405161091a9190613d75565b60405180910390f35b34801561092e575f80fd5b5061094960048036038101906109449190613ef3565b611fb9565b005b348015610956575f80fd5b5061095f6120f5565b60405161096c9190613d75565b60405180910390f35b348015610980575f80fd5b5061099b60048036038101906109969190613f31565b6120fb565b6040516109a89190613d75565b60405180910390f35b3480156109bc575f80fd5b506109c561217d565b6040516109d29190613d75565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613cc7565b612183565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613cc7565b6122d7565b005b348015610a36575f80fd5b50610a516004803603810190610a4c9190613cc7565b612500565b604051610a5e9190613cae565b60405180910390f35b606060038054610a7690613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613f9c565b8015610aed5780601f10610ac457610100808354040283529160200191610aed565b820191905f5260205f20905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b5f610b0a610b0361251d565b8484612524565b6001905092915050565b60115f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610b7961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614016565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60155481565b610cd961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e90614016565b60405180910390fd5b8360138190555081601481905550601454601354610d859190614061565b6012819055508260168190555080601781905550601754601654610da99190614061565b60158190555050505050565b60165481565b5f610dc78484846126e7565b610e8484610dd361251d565b610e7f85604051806060016040528060288152602001614d316028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e3661251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b600190509392505050565b610e9761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90614016565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610f488160016116d6565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff591906140a8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107e91906140a8565b6040518363ffffffff1660e01b815260040161109b9291906140d3565b6020604051808303815f875af11580156110b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110db91906140a8565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061114660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016116d6565b61117260095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016130f3565b5f4790505f6064605a6111843061148d565b61118e91906140fa565b6111989190614168565b90506111c63060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161124c969594939291906141d1565b60606040518083038185885af1158015611268573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061128d9190614244565b505050505050565b5f6012905090565b5f6113416112a961251d565b8461133c8560015f6112b961251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461319190919063ffffffff16565b612524565b6001905092915050565b60125481565b60105481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b6113dc61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614016565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114da61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61162d61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290614016565b60405180910390fd5b5f60115f6101000a81548160ff021916908315150217905550565b6116de61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390614016565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117cc61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906142de565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614346565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7534c63860313c46c473e4e98328f37017e9674e2162faf1a3ad7a96236c3b7b60405160405180910390a250565b6119f361251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7890614016565b60405180910390fd5b5f4790505f8111611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe906143d4565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611b0d9061441f565b5f6040518083038185875af1925050503d805f8114611b47576040519150601f19603f3d011682016040523d82523d5f602084013e611b4c565b606091505b5050905080611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b879061447d565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160019054906101000a900460ff1681565b606060048054611bde90613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0a90613f9c565b8015611c555780601f10611c2c57610100808354040283529160200191611c55565b820191905f5260205f20905b815481529060010190602001808311611c3857829003601f168201915b5050505050905090565b611c6761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90614016565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b9061450b565b60405180910390fd5b611d8e82826130f3565b5050565b611d9a61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90614016565b60405180910390fd5b5f611e323061148d565b90505f8111611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d90614599565b60405180910390fd5b611ea230600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126e7565b50565b60195481565b5f611f69611eb761251d565b84611f6485604051806060016040528060258152602001614d596025913960015f611ee061251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b6001905092915050565b5f611f86611f7f61251d565b84846126e7565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b60175481565b611fc161251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690614016565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120e99190613cae565b60405180910390a25050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60145481565b61218b61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090614016565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122df61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906142de565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90614601565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85560405160405180910390a250565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061471d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126da9190613d75565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614839565b60405180910390fd5b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906148a1565b60405180910390fd5b5f81036128645761285f83835f6131ee565b61308c565b60115f9054906101000a900460ff1615612c5857612880611b94565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ee57506128be611b94565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561292657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600b5f9054906101000a900460ff16155b15612c5757601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a1a5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ac157600e54811115612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b9061492f565b60405180910390fd5b601054612a708361148d565b82612a7b9190614061565b1115612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab390614997565b60405180910390fd5b612c56565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b5e5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bad57600e54811115612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614a25565b60405180910390fd5b612c55565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c5457601054612c078361148d565b82612c129190614061565b1115612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90614997565b60405180910390fd5b5b5b5b5b5b5f612c623061148d565b90505f600f548210159050808015612c865750600b5f9054906101000a900460ff16155b8015612cd95750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d2c5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d7f5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dc0576001600b5f6101000a81548160ff021916908315150217905550612da6613477565b5f600b5f6101000a81548160ff0219169083151502179055505b5f600b5f9054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e6e5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e77575f90505b5f811561307c57601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ed557505f601554115b15612f6d57612f026064612ef46015548861369d90919063ffffffff16565b61371490919063ffffffff16565b905060155460175482612f1591906140fa565b612f1f9190614168565b60185f828254612f2f9190614061565b9250508190555060155460165482612f4791906140fa565b612f519190614168565b60195f828254612f619190614061565b92505081905550613059565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc457505f601254115b1561305857612ff16064612fe36012548861369d90919063ffffffff16565b61371490919063ffffffff16565b90506012546014548261300491906140fa565b61300e9190614168565b60185f82825461301e9190614061565b925050819055506012546013548261303691906140fa565b6130409190614168565b60195f8282546130509190614061565b925050819055505b5b5f81111561306d5761306c8730836131ee565b5b80856130799190614a43565b94505b6130878787876131ee565b505050505b505050565b5f8383111582906130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9190613ba5565b60405180910390fd5b505f83856130e69190614a43565b9050809150509392505050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f80828461319f9190614061565b9050838110156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db90614ac0565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361325c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613253906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c190614839565b60405180910390fd5b6132d583838361375d565b61333e81604051806060016040528060268152602001614d0b602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133cd815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461319190919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161346a9190613d75565b60405180910390a3505050565b5f6134813061148d565b90505f6019546018546134949190614061565b90505f808314806134a457505f82145b156134b15750505061369b565b5f1515601160019054906101000a900460ff161515036134f8576014600f546134da91906140fa565b8311156134f3576014600f546134f091906140fa565b92505b613504565b6135013061148d565b92505b5f6003836018548661351691906140fa565b6135209190614168565b61352a9190614168565b90505f613540828661376290919063ffffffff16565b90505f47905061354f826137ab565b5f613563824761376290919063ffffffff16565b90505f61358d8761357f6019548561369d90919063ffffffff16565b61371490919063ffffffff16565b90505f818361359c9190614a43565b90505f6018819055505f6019819055505f861180156135ba57505f81115b15613607576135c986826139e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826018546040516135fe93929190614ade565b60405180910390a15b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364c9061441f565b5f6040518083038185875af1925050503d805f8114613686576040519150601f19603f3d011682016040523d82523d5f602084013e61368b565b606091505b5050809750505050505050505050505b565b5f8083036136ad575f905061370e565b5f82846136ba91906140fa565b90508284826136c99190614168565b14613709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370090614b83565b60405180910390fd5b809150505b92915050565b5f61375583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aba565b905092915050565b505050565b5f6137a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613091565b905092915050565b5f600267ffffffffffffffff8111156137c7576137c6614ba1565b5b6040519080825280602002602001820160405280156137f55781602001602082028036833780820191505090505b50905030815f8151811061380c5761380b614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d491906140a8565b816001815181106138e8576138e7614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139b0959493929190614cb2565b5f604051808303815f87803b1580156139c7575f80fd5b505af11580156139d9573d5f803e3d5ffd5b505050505050565b613a0d3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613a72969594939291906141d1565b60606040518083038185885af1158015613a8e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613ab39190614244565b5050505050565b5f8083118290613b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af79190613ba5565b60405180910390fd5b505f8385613b0e9190614168565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b52578082015181840152602081019050613b37565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b7782613b1b565b613b818185613b25565b9350613b91818560208601613b35565b613b9a81613b5d565b840191505092915050565b5f6020820190508181035f830152613bbd8184613b6d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613bf282613bc9565b9050919050565b613c0281613be8565b8114613c0c575f80fd5b50565b5f81359050613c1d81613bf9565b92915050565b5f819050919050565b613c3581613c23565b8114613c3f575f80fd5b50565b5f81359050613c5081613c2c565b92915050565b5f8060408385031215613c6c57613c6b613bc5565b5b5f613c7985828601613c0f565b9250506020613c8a85828601613c42565b9150509250929050565b5f8115159050919050565b613ca881613c94565b82525050565b5f602082019050613cc15f830184613c9f565b92915050565b5f60208284031215613cdc57613cdb613bc5565b5b5f613ce984828501613c0f565b91505092915050565b5f819050919050565b5f613d15613d10613d0b84613bc9565b613cf2565b613bc9565b9050919050565b5f613d2682613cfb565b9050919050565b5f613d3782613d1c565b9050919050565b613d4781613d2d565b82525050565b5f602082019050613d605f830184613d3e565b92915050565b613d6f81613c23565b82525050565b5f602082019050613d885f830184613d66565b92915050565b5f805f8060808587031215613da657613da5613bc5565b5b5f613db387828801613c42565b9450506020613dc487828801613c42565b9350506040613dd587828801613c42565b9250506060613de687828801613c42565b91505092959194509250565b5f805f60608486031215613e0957613e08613bc5565b5b5f613e1686828701613c0f565b9350506020613e2786828701613c0f565b9250506040613e3886828701613c42565b9150509250925092565b5f60ff82169050919050565b613e5781613e42565b82525050565b5f602082019050613e705f830184613e4e565b92915050565b613e7f81613be8565b82525050565b5f602082019050613e985f830184613e76565b92915050565b613ea781613c94565b8114613eb1575f80fd5b50565b5f81359050613ec281613e9e565b92915050565b5f60208284031215613edd57613edc613bc5565b5b5f613eea84828501613eb4565b91505092915050565b5f8060408385031215613f0957613f08613bc5565b5b5f613f1685828601613c0f565b9250506020613f2785828601613eb4565b9150509250929050565b5f8060408385031215613f4757613f46613bc5565b5b5f613f5485828601613c0f565b9250506020613f6585828601613c0f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fb357607f821691505b602082108103613fc657613fc5613f6f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614000602083613b25565b915061400b82613fcc565b602082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61406b82613c23565b915061407683613c23565b925082820190508082111561408e5761408d614034565b5b92915050565b5f815190506140a281613bf9565b92915050565b5f602082840312156140bd576140bc613bc5565b5b5f6140ca84828501614094565b91505092915050565b5f6040820190506140e65f830185613e76565b6140f36020830184613e76565b9392505050565b5f61410482613c23565b915061410f83613c23565b925082820261411d81613c23565b9150828204841483151761413457614133614034565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61417282613c23565b915061417d83613c23565b92508261418d5761418c61413b565b5b828204905092915050565b5f819050919050565b5f6141bb6141b66141b184614198565b613cf2565b613c23565b9050919050565b6141cb816141a1565b82525050565b5f60c0820190506141e45f830189613e76565b6141f16020830188613d66565b6141fe60408301876141c2565b61420b60608301866141c2565b6142186080830185613e76565b61422560a0830184613d66565b979650505050505050565b5f8151905061423e81613c2c565b92915050565b5f805f6060848603121561425b5761425a613bc5565b5b5f61426886828701614230565b935050602061427986828701614230565b925050604061428a86828701614230565b9150509250925092565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6142c8600f83613b25565b91506142d382614294565b602082019050919050565b5f6020820190508181035f8301526142f5816142bc565b9050919050565b7f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000005f82015250565b5f614330601a83613b25565b915061433b826142fc565b602082019050919050565b5f6020820190508181035f83015261435d81614324565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143be602283613b25565b91506143c982614364565b604082019050919050565b5f6020820190508181035f8301526143eb816143b2565b9050919050565b5f81905092915050565b50565b5f61440a5f836143f2565b9150614415826143fc565b5f82019050919050565b5f614429826143ff565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614467601b83613b25565b915061447282614433565b602082019050919050565b5f6020820190508181035f8301526144948161445b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6144f5603983613b25565b91506145008261449b565b604082019050919050565b5f6020820190508181035f830152614522816144e9565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f614583602483613b25565b915061458e82614529565b604082019050919050565b5f6020820190508181035f8301526145b081614577565b9050919050565b7f4163636f756e7420697320616c726561647920626c61636b6c697374656400005f82015250565b5f6145eb601e83613b25565b91506145f6826145b7565b602082019050919050565b5f6020820190508181035f830152614618816145df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614679602483613b25565b91506146848261461f565b604082019050919050565b5f6020820190508181035f8301526146a68161466d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614707602283613b25565b9150614712826146ad565b604082019050919050565b5f6020820190508181035f830152614734816146fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614795602583613b25565b91506147a08261473b565b604082019050919050565b5f6020820190508181035f8301526147c281614789565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614823602383613b25565b915061482e826147c9565b604082019050919050565b5f6020820190508181035f83015261485081614817565b9050919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f61488b601583613b25565b915061489682614857565b602082019050919050565b5f6020820190508181035f8301526148b88161487f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614919603583613b25565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614981601383613b25565b915061498c8261494d565b602082019050919050565b5f6020820190508181035f8301526149ae81614975565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614a0f603683613b25565b9150614a1a826149b5565b604082019050919050565b5f6020820190508181035f830152614a3c81614a03565b9050919050565b5f614a4d82613c23565b9150614a5883613c23565b9250828203905081811115614a7057614a6f614034565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614aaa601b83613b25565b9150614ab582614a76565b602082019050919050565b5f6020820190508181035f830152614ad781614a9e565b9050919050565b5f606082019050614af15f830186613d66565b614afe6020830185613d66565b614b0b6040830184613d66565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b6d602183613b25565b9150614b7882614b13565b604082019050919050565b5f6020820190508181035f830152614b9a81614b61565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c2d81613be8565b82525050565b5f614c3e8383614c24565b60208301905092915050565b5f602082019050919050565b5f614c6082614bfb565b614c6a8185614c05565b9350614c7583614c15565b805f5b83811015614ca5578151614c8c8882614c33565b9750614c9783614c4a565b925050600181019050614c78565b5085935050505092915050565b5f60a082019050614cc55f830188613d66565b614cd260208301876141c2565b8181036040830152614ce48186614c56565b9050614cf36060830185613e76565b614d006080830184613d66565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e52a0e29c17c1b4e9d7428ae081bca6b4241a96cc1c6c2b3ae3f217a00d6541864736f6c63430008150033

Deployed Bytecode

0x608060405260043610610280575f3560e01c8063715018a61161014e578063a457c2d7116100c0578063c3f70b5211610079578063c3f70b521461094b578063dd62ed3e14610975578063df6f93be146109b1578063f2fde38b146109db578063f9f92be414610a03578063fe575a8714610a2b57610287565b8063a457c2d71461081b578063a9059cbb14610857578063b62496f514610893578063b69ef8a8146108cf578063be857504146108f9578063c02466681461092357610287565b80638da5cb5b116101125780638da5cb5b14610735578063945674fe1461075f57806395d89b41146107895780639a7a23d6146107b35780639ee2e924146107db5780639fccce32146107f157610287565b8063715018a6146106a3578063751039fc146106b95780637571336a146106cf57806375e3661e146106f757806387dd95c01461071f57610287565b806323b872dd116101f257806349bd5a5e116101ab57806349bd5a5e146105855780634fbee193146105af5780635de0f2a0146105eb5780635ec065e7146106155780636c7e15c91461063d57806370a082311461066757610287565b806323b872dd146104795780632c28f579146104b5578063313ce567146104cb57806339509351146104f557806346469afb1461053157806348d791551461055b57610287565b806318160ddd1161024457806318160ddd146103815780631816467f146103ab5780631a8145bb146103d35780631bff7898146103fd5780631d9305bf1461042757806322eb66311461044f57610287565b806306fdde031461028b578063095ea7b3146102b55780630e947809146102f157806310d5de531461031b5780631694505e1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a67565b6040516102ac9190613ba5565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613c56565b610af7565b6040516102e89190613cae565b60405180910390f35b3480156102fc575f80fd5b50610305610b14565b6040516103129190613cae565b60405180910390f35b348015610326575f80fd5b50610341600480360381019061033c9190613cc7565b610b26565b60405161034e9190613cae565b60405180910390f35b348015610362575f80fd5b5061036b610b43565b6040516103789190613d4d565b60405180910390f35b34801561038c575f80fd5b50610395610b68565b6040516103a29190613d75565b60405180910390f35b3480156103b6575f80fd5b506103d160048036038101906103cc9190613cc7565b610b71565b005b3480156103de575f80fd5b506103e7610cc5565b6040516103f49190613d75565b60405180910390f35b348015610408575f80fd5b50610411610ccb565b60405161041e9190613d75565b60405180910390f35b348015610432575f80fd5b5061044d60048036038101906104489190613d8e565b610cd1565b005b34801561045a575f80fd5b50610463610db5565b6040516104709190613d75565b60405180910390f35b348015610484575f80fd5b5061049f600480360381019061049a9190613df2565b610dbb565b6040516104ac9190613cae565b60405180910390f35b3480156104c0575f80fd5b506104c9610e8f565b005b3480156104d6575f80fd5b506104df611295565b6040516104ec9190613e5d565b60405180910390f35b348015610500575f80fd5b5061051b60048036038101906105169190613c56565b61129d565b6040516105289190613cae565b60405180910390f35b34801561053c575f80fd5b5061054561134b565b6040516105529190613d75565b60405180910390f35b348015610566575f80fd5b5061056f611351565b60405161057c9190613d75565b60405180910390f35b348015610590575f80fd5b50610599611357565b6040516105a69190613e85565b60405180910390f35b3480156105ba575f80fd5b506105d560048036038101906105d09190613cc7565b61137c565b6040516105e29190613cae565b60405180910390f35b3480156105f6575f80fd5b506105ff6113ce565b60405161060c9190613d75565b60405180910390f35b348015610620575f80fd5b5061063b60048036038101906106369190613ec8565b6113d4565b005b348015610648575f80fd5b50610651611487565b60405161065e9190613d75565b60405180910390f35b348015610672575f80fd5b5061068d60048036038101906106889190613cc7565b61148d565b60405161069a9190613d75565b60405180910390f35b3480156106ae575f80fd5b506106b76114d2565b005b3480156106c4575f80fd5b506106cd611625565b005b3480156106da575f80fd5b506106f560048036038101906106f09190613ef3565b6116d6565b005b348015610702575f80fd5b5061071d60048036038101906107189190613cc7565b6117c4565b005b34801561072a575f80fd5b506107336119eb565b005b348015610740575f80fd5b50610749611b94565b6040516107569190613e85565b60405180910390f35b34801561076a575f80fd5b50610773611bbc565b6040516107809190613cae565b60405180910390f35b348015610794575f80fd5b5061079d611bcf565b6040516107aa9190613ba5565b60405180910390f35b3480156107be575f80fd5b506107d960048036038101906107d49190613ef3565b611c5f565b005b3480156107e6575f80fd5b506107ef611d92565b005b3480156107fc575f80fd5b50610805611ea5565b6040516108129190613d75565b60405180910390f35b348015610826575f80fd5b50610841600480360381019061083c9190613c56565b611eab565b60405161084e9190613cae565b60405180910390f35b348015610862575f80fd5b5061087d60048036038101906108789190613c56565b611f73565b60405161088a9190613cae565b60405180910390f35b34801561089e575f80fd5b506108b960048036038101906108b49190613cc7565b611f90565b6040516108c69190613cae565b60405180910390f35b3480156108da575f80fd5b506108e3611fad565b6040516108f09190613d75565b60405180910390f35b348015610904575f80fd5b5061090d611fb3565b60405161091a9190613d75565b60405180910390f35b34801561092e575f80fd5b5061094960048036038101906109449190613ef3565b611fb9565b005b348015610956575f80fd5b5061095f6120f5565b60405161096c9190613d75565b60405180910390f35b348015610980575f80fd5b5061099b60048036038101906109969190613f31565b6120fb565b6040516109a89190613d75565b60405180910390f35b3480156109bc575f80fd5b506109c561217d565b6040516109d29190613d75565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613cc7565b612183565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613cc7565b6122d7565b005b348015610a36575f80fd5b50610a516004803603810190610a4c9190613cc7565b612500565b604051610a5e9190613cae565b60405180910390f35b606060038054610a7690613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613f9c565b8015610aed5780601f10610ac457610100808354040283529160200191610aed565b820191905f5260205f20905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b5f610b0a610b0361251d565b8484612524565b6001905092915050565b60115f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610b7961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614016565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60155481565b610cd961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e90614016565b60405180910390fd5b8360138190555081601481905550601454601354610d859190614061565b6012819055508260168190555080601781905550601754601654610da99190614061565b60158190555050505050565b60165481565b5f610dc78484846126e7565b610e8484610dd361251d565b610e7f85604051806060016040528060288152602001614d316028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e3661251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b600190509392505050565b610e9761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90614016565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610f488160016116d6565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff591906140a8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107e91906140a8565b6040518363ffffffff1660e01b815260040161109b9291906140d3565b6020604051808303815f875af11580156110b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110db91906140a8565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061114660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016116d6565b61117260095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016130f3565b5f4790505f6064605a6111843061148d565b61118e91906140fa565b6111989190614168565b90506111c63060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161124c969594939291906141d1565b60606040518083038185885af1158015611268573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061128d9190614244565b505050505050565b5f6012905090565b5f6113416112a961251d565b8461133c8560015f6112b961251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461319190919063ffffffff16565b612524565b6001905092915050565b60125481565b60105481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b6113dc61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614016565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114da61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61162d61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290614016565b60405180910390fd5b5f60115f6101000a81548160ff021916908315150217905550565b6116de61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390614016565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117cc61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906142de565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614346565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7534c63860313c46c473e4e98328f37017e9674e2162faf1a3ad7a96236c3b7b60405160405180910390a250565b6119f361251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7890614016565b60405180910390fd5b5f4790505f8111611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe906143d4565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611b0d9061441f565b5f6040518083038185875af1925050503d805f8114611b47576040519150601f19603f3d011682016040523d82523d5f602084013e611b4c565b606091505b5050905080611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b879061447d565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160019054906101000a900460ff1681565b606060048054611bde90613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0a90613f9c565b8015611c555780601f10611c2c57610100808354040283529160200191611c55565b820191905f5260205f20905b815481529060010190602001808311611c3857829003601f168201915b5050505050905090565b611c6761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90614016565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b9061450b565b60405180910390fd5b611d8e82826130f3565b5050565b611d9a61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90614016565b60405180910390fd5b5f611e323061148d565b90505f8111611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d90614599565b60405180910390fd5b611ea230600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126e7565b50565b60195481565b5f611f69611eb761251d565b84611f6485604051806060016040528060258152602001614d596025913960015f611ee061251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b6001905092915050565b5f611f86611f7f61251d565b84846126e7565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b60175481565b611fc161251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690614016565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120e99190613cae565b60405180910390a25050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60145481565b61218b61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090614016565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122df61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906142de565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90614601565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85560405160405180910390a250565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061471d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126da9190613d75565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614839565b60405180910390fd5b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906148a1565b60405180910390fd5b5f81036128645761285f83835f6131ee565b61308c565b60115f9054906101000a900460ff1615612c5857612880611b94565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ee57506128be611b94565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561292657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600b5f9054906101000a900460ff16155b15612c5757601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a1a5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ac157600e54811115612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b9061492f565b60405180910390fd5b601054612a708361148d565b82612a7b9190614061565b1115612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab390614997565b60405180910390fd5b612c56565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b5e5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bad57600e54811115612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614a25565b60405180910390fd5b612c55565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c5457601054612c078361148d565b82612c129190614061565b1115612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90614997565b60405180910390fd5b5b5b5b5b5b5f612c623061148d565b90505f600f548210159050808015612c865750600b5f9054906101000a900460ff16155b8015612cd95750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d2c5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d7f5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dc0576001600b5f6101000a81548160ff021916908315150217905550612da6613477565b5f600b5f6101000a81548160ff0219169083151502179055505b5f600b5f9054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e6e5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e77575f90505b5f811561307c57601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ed557505f601554115b15612f6d57612f026064612ef46015548861369d90919063ffffffff16565b61371490919063ffffffff16565b905060155460175482612f1591906140fa565b612f1f9190614168565b60185f828254612f2f9190614061565b9250508190555060155460165482612f4791906140fa565b612f519190614168565b60195f828254612f619190614061565b92505081905550613059565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc457505f601254115b1561305857612ff16064612fe36012548861369d90919063ffffffff16565b61371490919063ffffffff16565b90506012546014548261300491906140fa565b61300e9190614168565b60185f82825461301e9190614061565b925050819055506012546013548261303691906140fa565b6130409190614168565b60195f8282546130509190614061565b925050819055505b5b5f81111561306d5761306c8730836131ee565b5b80856130799190614a43565b94505b6130878787876131ee565b505050505b505050565b5f8383111582906130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9190613ba5565b60405180910390fd5b505f83856130e69190614a43565b9050809150509392505050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f80828461319f9190614061565b9050838110156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db90614ac0565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361325c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613253906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c190614839565b60405180910390fd5b6132d583838361375d565b61333e81604051806060016040528060268152602001614d0b602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133cd815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461319190919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161346a9190613d75565b60405180910390a3505050565b5f6134813061148d565b90505f6019546018546134949190614061565b90505f808314806134a457505f82145b156134b15750505061369b565b5f1515601160019054906101000a900460ff161515036134f8576014600f546134da91906140fa565b8311156134f3576014600f546134f091906140fa565b92505b613504565b6135013061148d565b92505b5f6003836018548661351691906140fa565b6135209190614168565b61352a9190614168565b90505f613540828661376290919063ffffffff16565b90505f47905061354f826137ab565b5f613563824761376290919063ffffffff16565b90505f61358d8761357f6019548561369d90919063ffffffff16565b61371490919063ffffffff16565b90505f818361359c9190614a43565b90505f6018819055505f6019819055505f861180156135ba57505f81115b15613607576135c986826139e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826018546040516135fe93929190614ade565b60405180910390a15b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364c9061441f565b5f6040518083038185875af1925050503d805f8114613686576040519150601f19603f3d011682016040523d82523d5f602084013e61368b565b606091505b5050809750505050505050505050505b565b5f8083036136ad575f905061370e565b5f82846136ba91906140fa565b90508284826136c99190614168565b14613709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370090614b83565b60405180910390fd5b809150505b92915050565b5f61375583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aba565b905092915050565b505050565b5f6137a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613091565b905092915050565b5f600267ffffffffffffffff8111156137c7576137c6614ba1565b5b6040519080825280602002602001820160405280156137f55781602001602082028036833780820191505090505b50905030815f8151811061380c5761380b614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d491906140a8565b816001815181106138e8576138e7614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139b0959493929190614cb2565b5f604051808303815f87803b1580156139c7575f80fd5b505af11580156139d9573d5f803e3d5ffd5b505050505050565b613a0d3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613a72969594939291906141d1565b60606040518083038185885af1158015613a8e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613ab39190614244565b5050505050565b5f8083118290613b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af79190613ba5565b60405180910390fd5b505f8385613b0e9190614168565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b52578082015181840152602081019050613b37565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b7782613b1b565b613b818185613b25565b9350613b91818560208601613b35565b613b9a81613b5d565b840191505092915050565b5f6020820190508181035f830152613bbd8184613b6d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613bf282613bc9565b9050919050565b613c0281613be8565b8114613c0c575f80fd5b50565b5f81359050613c1d81613bf9565b92915050565b5f819050919050565b613c3581613c23565b8114613c3f575f80fd5b50565b5f81359050613c5081613c2c565b92915050565b5f8060408385031215613c6c57613c6b613bc5565b5b5f613c7985828601613c0f565b9250506020613c8a85828601613c42565b9150509250929050565b5f8115159050919050565b613ca881613c94565b82525050565b5f602082019050613cc15f830184613c9f565b92915050565b5f60208284031215613cdc57613cdb613bc5565b5b5f613ce984828501613c0f565b91505092915050565b5f819050919050565b5f613d15613d10613d0b84613bc9565b613cf2565b613bc9565b9050919050565b5f613d2682613cfb565b9050919050565b5f613d3782613d1c565b9050919050565b613d4781613d2d565b82525050565b5f602082019050613d605f830184613d3e565b92915050565b613d6f81613c23565b82525050565b5f602082019050613d885f830184613d66565b92915050565b5f805f8060808587031215613da657613da5613bc5565b5b5f613db387828801613c42565b9450506020613dc487828801613c42565b9350506040613dd587828801613c42565b9250506060613de687828801613c42565b91505092959194509250565b5f805f60608486031215613e0957613e08613bc5565b5b5f613e1686828701613c0f565b9350506020613e2786828701613c0f565b9250506040613e3886828701613c42565b9150509250925092565b5f60ff82169050919050565b613e5781613e42565b82525050565b5f602082019050613e705f830184613e4e565b92915050565b613e7f81613be8565b82525050565b5f602082019050613e985f830184613e76565b92915050565b613ea781613c94565b8114613eb1575f80fd5b50565b5f81359050613ec281613e9e565b92915050565b5f60208284031215613edd57613edc613bc5565b5b5f613eea84828501613eb4565b91505092915050565b5f8060408385031215613f0957613f08613bc5565b5b5f613f1685828601613c0f565b9250506020613f2785828601613eb4565b9150509250929050565b5f8060408385031215613f4757613f46613bc5565b5b5f613f5485828601613c0f565b9250506020613f6585828601613c0f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fb357607f821691505b602082108103613fc657613fc5613f6f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614000602083613b25565b915061400b82613fcc565b602082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61406b82613c23565b915061407683613c23565b925082820190508082111561408e5761408d614034565b5b92915050565b5f815190506140a281613bf9565b92915050565b5f602082840312156140bd576140bc613bc5565b5b5f6140ca84828501614094565b91505092915050565b5f6040820190506140e65f830185613e76565b6140f36020830184613e76565b9392505050565b5f61410482613c23565b915061410f83613c23565b925082820261411d81613c23565b9150828204841483151761413457614133614034565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61417282613c23565b915061417d83613c23565b92508261418d5761418c61413b565b5b828204905092915050565b5f819050919050565b5f6141bb6141b66141b184614198565b613cf2565b613c23565b9050919050565b6141cb816141a1565b82525050565b5f60c0820190506141e45f830189613e76565b6141f16020830188613d66565b6141fe60408301876141c2565b61420b60608301866141c2565b6142186080830185613e76565b61422560a0830184613d66565b979650505050505050565b5f8151905061423e81613c2c565b92915050565b5f805f6060848603121561425b5761425a613bc5565b5b5f61426886828701614230565b935050602061427986828701614230565b925050604061428a86828701614230565b9150509250925092565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6142c8600f83613b25565b91506142d382614294565b602082019050919050565b5f6020820190508181035f8301526142f5816142bc565b9050919050565b7f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000005f82015250565b5f614330601a83613b25565b915061433b826142fc565b602082019050919050565b5f6020820190508181035f83015261435d81614324565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143be602283613b25565b91506143c982614364565b604082019050919050565b5f6020820190508181035f8301526143eb816143b2565b9050919050565b5f81905092915050565b50565b5f61440a5f836143f2565b9150614415826143fc565b5f82019050919050565b5f614429826143ff565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614467601b83613b25565b915061447282614433565b602082019050919050565b5f6020820190508181035f8301526144948161445b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6144f5603983613b25565b91506145008261449b565b604082019050919050565b5f6020820190508181035f830152614522816144e9565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f614583602483613b25565b915061458e82614529565b604082019050919050565b5f6020820190508181035f8301526145b081614577565b9050919050565b7f4163636f756e7420697320616c726561647920626c61636b6c697374656400005f82015250565b5f6145eb601e83613b25565b91506145f6826145b7565b602082019050919050565b5f6020820190508181035f830152614618816145df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614679602483613b25565b91506146848261461f565b604082019050919050565b5f6020820190508181035f8301526146a68161466d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614707602283613b25565b9150614712826146ad565b604082019050919050565b5f6020820190508181035f830152614734816146fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614795602583613b25565b91506147a08261473b565b604082019050919050565b5f6020820190508181035f8301526147c281614789565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614823602383613b25565b915061482e826147c9565b604082019050919050565b5f6020820190508181035f83015261485081614817565b9050919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f61488b601583613b25565b915061489682614857565b602082019050919050565b5f6020820190508181035f8301526148b88161487f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614919603583613b25565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614981601383613b25565b915061498c8261494d565b602082019050919050565b5f6020820190508181035f8301526149ae81614975565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614a0f603683613b25565b9150614a1a826149b5565b604082019050919050565b5f6020820190508181035f830152614a3c81614a03565b9050919050565b5f614a4d82613c23565b9150614a5883613c23565b9250828203905081811115614a7057614a6f614034565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614aaa601b83613b25565b9150614ab582614a76565b602082019050919050565b5f6020820190508181035f830152614ad781614a9e565b9050919050565b5f606082019050614af15f830186613d66565b614afe6020830185613d66565b614b0b6040830184613d66565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b6d602183613b25565b9150614b7882614b13565b604082019050919050565b5f6020820190508181035f830152614b9a81614b61565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c2d81613be8565b82525050565b5f614c3e8383614c24565b60208301905092915050565b5f602082019050919050565b5f614c6082614bfb565b614c6a8185614c05565b9350614c7583614c15565b805f5b83811015614ca5578151614c8c8882614c33565b9750614c9783614c4a565b925050600181019050614c78565b5085935050505092915050565b5f60a082019050614cc55f830188613d66565b614cd260208301876141c2565b8181036040830152614ce48186614c56565b9050614cf36060830185613e76565b614d006080830184613d66565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e52a0e29c17c1b4e9d7428ae081bca6b4241a96cc1c6c2b3ae3f217a00d6541864736f6c63430008150033

Deployed Bytecode Sourcemap

17576:13307:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4839:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5753:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18192:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18765:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17735:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5160:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24759:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18474:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18373:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23723:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18407:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5930:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21130:1037;;;;;;;;;;;;;:::i;:::-;;5059:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6293:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18275:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18151:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17783:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24932:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18109:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23449:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18308:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5276:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10820:148;;;;;;;;;;;;;:::i;:::-;;23359:81;;;;;;;;;;;;;:::i;:::-;;23567:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22470:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22774:313;;;;;;;;;;;;;:::i;:::-;;10606:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18229:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4947:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24308:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23095:256;;;;;;;;;;;;;:::i;:::-;;18514:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6519:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5411:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18988:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18009:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18439:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24117:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18073:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5594:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18339:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10976:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22176:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17822:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4839:100;4893:13;4926:5;4919:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4839:100;:::o;5753:169::-;5836:4;5853:39;5862:12;:10;:12::i;:::-;5876:7;5885:6;5853:8;:39::i;:::-;5910:4;5903:11;;5753:169;;;;:::o;18192:30::-;;;;;;;;;;;;;:::o;18765:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17735:41::-;;;;;;;;;;;;;:::o;5160:108::-;5221:7;5248:12;;5241:19;;5160:108;:::o;24759:165::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24871:9:::1;;;;;;;;;;;24840:41;;24857:12;24840:41;;;;;;;;;;;;24904:12;24892:9;;:24;;;;;;;;;;;;;;;;;;24759:165:::0;:::o;18474:33::-;;;;:::o;18373:27::-;;;;:::o;23723:386::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23896:7:::1;23884:9;:19;;;;23926:7;23914:9;:19;;;;23970:9;;23958;;:21;;;;:::i;:::-;23944:11;:35;;;;24003:8;23990:10;:21;;;;24035:8;24022:10;:21;;;;24082:10;;24069;;:23;;;;:::i;:::-;24054:12;:38;;;;23723:386:::0;;;;:::o;18407:25::-;;;;:::o;5930:355::-;6070:4;6087:36;6097:6;6105:9;6116:6;6087:9;:36::i;:::-;6134:121;6143:6;6151:12;:10;:12::i;:::-;6165:89;6203:6;6165:89;;;;;;;;;;;;;;;;;:11;:19;6177:6;6165:19;;;;;;;;;;;;;;;:33;6185:12;:10;:12::i;:::-;6165:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6134:8;:121::i;:::-;6273:4;6266:11;;5930:355;;;;;:::o;21130:1037::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21183:35:::1;21240:42;21183:100;;21297:58;21331:16;21350:4;21297:25;:58::i;:::-;21384:16;21366:15;;:34;;;;;;;;;;;;;;;;;;21448:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21430:56;;;21495:4;21502:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21430:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21414:13;;:112;;;;;;;;;;;;;;;;;;21537:55;21571:13;;;;;;;;;;;21587:4;21537:25;:55::i;:::-;21603:58;21640:13;;;;;;;;;;;21656:4;21603:28;:58::i;:::-;21682:17;21702:21;21682:41;;21734:19;21788:3;21783:2;21756:24;21774:4;21756:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21734:57;;21822:62;21839:4;21854:15;;;;;;;;;;;21872:11;21822:8;:62::i;:::-;21897:15;;;;;;;;;;;:31;;;21936:9;21969:4;21989:11;22019:1;22066::::0;22109:9:::1;;;;;;;;;;;22133:15;21897:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21166:1001;;;21130:1037::o:0;5059:93::-;5117:5;5142:2;5135:9;;5059:93;:::o;6293:218::-;6381:4;6398:83;6407:12;:10;:12::i;:::-;6421:7;6430:50;6469:10;6430:11;:25;6442:12;:10;:12::i;:::-;6430:25;;;;;;;;;;;;;;;:34;6456:7;6430:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6398:8;:83::i;:::-;6499:4;6492:11;;6293:218;;;;:::o;18275:26::-;;;;:::o;18151:31::-;;;;:::o;17783:28::-;;;;;;;;;;;;;:::o;24932:125::-;24997:4;25021:19;:28;25041:7;25021:28;;;;;;;;;;;;;;;;;;;;;;;;;25014:35;;24932:125;;;:::o;18109:35::-;;;;:::o;23449:109::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23543:7:::1;23523:17;;:27;;;;;;;;;;;;;;;;;;23449:109:::0;:::o;18308:24::-;;;;:::o;5276:127::-;5350:7;5377:9;:18;5387:7;5377:18;;;;;;;;;;;;;;;;5370:25;;5276:127;;;:::o;10820:148::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10927:1:::1;10890:40;;10911:6;;;;;;;;;;;10890:40;;;;;;;;;;;;10958:1;10941:6;;:19;;;;;;;;;;;;;;;;;;10820:148::o:0;23359:81::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23427:5:::1;23413:11;;:19;;;;;;;;;;;;;;;;;;23359:81::o:0;23567:144::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23699:4:::1;23657:31;:39;23689:6;23657:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23567:144:::0;;:::o;22470:286::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22565:1:::1;22546:21;;:7;:21;;::::0;22538:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22606:13;:22;22620:7;22606:22;;;;;;;;;;;;;;;;;;;;;;;;;22598:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22705:5;22680:13;:22;22694:7;22680:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;22740:7;22726:22;;;;;;;;;;;;22470:286:::0;:::o;22774:313::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22832:18:::1;22853:21;22832:42;;22906:1;22893:10;:14;22885:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22958:12;22983:9;;;;;;;;;;;22975:23;;23006:10;22975:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22957:64;;;23040:7;23032:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22821:266;;22774:313::o:0;10606:79::-;10644:7;10671:6;;;;;;;;;;;10664:13;;10606:79;:::o;18229:37::-;;;;;;;;;;;;;:::o;4947:104::-;5003:13;5036:7;5029:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4947:104;:::o;24308:245::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24415:13:::1;;;;;;;;;;;24407:21;;:4;:21;;::::0;24399:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24504:41;24533:4;24539:5;24504:28;:41::i;:::-;24308:245:::0;;:::o;23095:256::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23160:20:::1;23183:24;23201:4;23183:9;:24::i;:::-;23160:47;;23241:1;23226:12;:16;23218:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23294:49;23312:4;23319:9;;;;;;;;;;;23330:12;23294:9;:49::i;:::-;23149:202;23095:256::o:0;18514:27::-;;;;:::o;6519:269::-;6612:4;6629:129;6638:12;:10;:12::i;:::-;6652:7;6661:96;6700:15;6661:96;;;;;;;;;;;;;;;;;:11;:25;6673:12;:10;:12::i;:::-;6661:25;;;;;;;;;;;;;;;:34;6687:7;6661:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6629:8;:129::i;:::-;6776:4;6769:11;;6519:269;;;;:::o;5411:175::-;5497:4;5514:42;5524:12;:10;:12::i;:::-;5538:9;5549:6;5514:9;:42::i;:::-;5574:4;5567:11;;5411:175;;;;:::o;18988:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18009:22::-;;;;:::o;18439:25::-;;;;:::o;24117:182::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24233:8:::1;24202:19;:28;24222:7;24202:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24273:7;24257:34;;;24282:8;24257:34;;;;;;:::i;:::-;;;;;;;;24117:182:::0;;:::o;18073:29::-;;;;:::o;5594:151::-;5683:7;5710:11;:18;5722:5;5710:18;;;;;;;;;;;;;;;:27;5729:7;5710:27;;;;;;;;;;;;;;;;5703:34;;5594:151;;;;:::o;18339:24::-;;;;:::o;10976:169::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11100:8:::1;11071:38;;11092:6;;;;;;;;;;;11071:38;;;;;;;;;;;;11129:8;11120:6;;:17;;;;;;;;;;;;;;;;;;10976:169:::0;:::o;22176:286::-;10743:12;:10;:12::i;:::-;10733:22;;:6;;;;;;;;;;;:22;;;10725:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22269:1:::1;22250:21;;:7;:21;;::::0;22242:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22311:13;:22;22325:7;22311:22;;;;;;;;;;;;;;;;;;;;;;;;;22310:23;22302:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22414:4;22389:13;:22;22403:7;22389:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22446:7;22434:20;;;;;;;;;;;;22176:286:::0;:::o;17822:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;192:98::-;245:7;272:10;265:17;;192:98;:::o;8195:381::-;8348:1;8331:19;;:5;:19;;;8323:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8429:1;8410:21;;:7;:21;;;8402:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8514:6;8484:11;:18;8496:5;8484:18;;;;;;;;;;;;;;;:27;8503:7;8484:27;;;;;;;;;;;;;;;:36;;;;8552:7;8536:32;;8545:5;8536:32;;;8561:6;8536:32;;;;;;:::i;:::-;;;;;;;;8195:381;;;:::o;25066:3193::-;25214:1;25198:18;;:4;:18;;;25190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25291:1;25277:16;;:2;:16;;;25269:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25353:13;:25;25367:10;25353:25;;;;;;;;;;;;;;;;;;;;;;;;;25352:26;25344:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25439:1;25429:6;:11;25426:92;;25457:28;25473:4;25479:2;25483:1;25457:15;:28::i;:::-;25500:7;;25426:92;25534:11;;;;;;;;;;;25531:1083;;;25591:7;:5;:7::i;:::-;25583:15;;:4;:15;;;;:49;;;;;25625:7;:5;:7::i;:::-;25619:13;;:2;:13;;;;25583:49;:86;;;;;25667:1;25653:16;;:2;:16;;;;25583:86;:128;;;;;25704:6;25690:21;;:2;:21;;;;25583:128;:160;;;;;25733:10;;;;;;;;;;;25732:11;25583:160;25561:1042;;;25827:25;:31;25853:4;25827:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25863:31;:35;25895:2;25863:35;;;;;;;;;;;;;;;;;;;;;;;;;25862:36;25827:71;25823:765;;;25945:14;;25935:6;:24;;25927:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;26078:16;;26061:13;26071:2;26061:9;:13::i;:::-;26052:6;:22;;;;:::i;:::-;:42;;26044:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25823:765;;;26197:25;:29;26223:2;26197:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26231:31;:37;26263:4;26231:37;;;;;;;;;;;;;;;;;;;;;;;;;26230:38;26197:71;26193:395;;;26315:14;;26305:6;:24;;26297:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26193:395;;;26435:31;:35;26467:2;26435:35;;;;;;;;;;;;;;;;;;;;;;;;;26431:157;;26528:16;;26511:13;26521:2;26511:9;:13::i;:::-;26502:6;:22;;;;:::i;:::-;:42;;26494:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26431:157;26193:395;25823:765;25561:1042;25531:1083;26627:28;26658:24;26676:4;26658:9;:24::i;:::-;26627:55;;26696:12;26735:20;;26711;:44;;26696:59;;26787:7;:35;;;;;26812:10;;;;;;;;;;;26811:11;26787:35;:84;;;;;26840:25;:31;26866:4;26840:31;;;;;;;;;;;;;;;;;;;;;;;;;26839:32;26787:84;:127;;;;;26889:19;:25;26909:4;26889:25;;;;;;;;;;;;;;;;;;;;;;;;;26888:26;26787:127;:168;;;;;26932:19;:23;26952:2;26932:23;;;;;;;;;;;;;;;;;;;;;;;;;26931:24;26787:168;26769:306;;;26995:4;26982:10;;:17;;;;;;;;;;;;;;;;;;27017:10;:8;:10::i;:::-;27058:5;27045:10;;:18;;;;;;;;;;;;;;;;;;26769:306;27088:12;27104:10;;;;;;;;;;;27103:11;27088:26;;27216:19;:25;27236:4;27216:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27245:19;:23;27265:2;27245:23;;;;;;;;;;;;;;;;;;;;;;;;;27216:52;27213:99;;;27295:5;27285:15;;27213:99;27325:12;27429:7;27426:779;;;27480:25;:29;27506:2;27480:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;27528:1;27513:12;;:16;27480:49;27476:576;;;27556:33;27585:3;27556:24;27567:12;;27556:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27549:40;;27650:12;;27637:10;;27630:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27608:18;;:54;;;;;;;:::i;:::-;;;;;;;;27717:12;;27704:10;;27697:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27681:12;;:48;;;;;;;:::i;:::-;;;;;;;;27476:576;;;27790:25;:31;27816:4;27790:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27839:1;27825:11;;:15;27790:50;27787:265;;;27868:32;27896:3;27868:23;27879:11;;27868:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27861:39;;27960:11;;27948:9;;27941:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27919:18;;:52;;;;;;;:::i;:::-;;;;;;;;28025:11;;28013:9;;28006:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27990:12;;:46;;;;;;;:::i;:::-;;;;;;;;27787:265;27476:576;28079:1;28072:4;:8;28069:93;;;28104:42;28120:4;28134;28141;28104:15;:42::i;:::-;28069:93;28189:4;28179:14;;;;;:::i;:::-;;;27426:779;28218:33;28234:4;28240:2;28244:6;28218:15;:33::i;:::-;25179:3080;;;;25066:3193;;;;:::o;9083:193::-;9169:7;9202:1;9197;:6;;9205:12;9189:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9229:9;9245:1;9241;:5;;;;:::i;:::-;9229:17;;9267:1;9260:8;;;9083:193;;;;;:::o;24562:189::-;24679:5;24645:25;:31;24671:4;24645:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24737:5;24703:40;;24731:4;24703:40;;;;;;;;;;;;24562:189;;:::o;8749:182::-;8807:7;8827:9;8843:1;8839;:5;;;;:::i;:::-;8827:17;;8868:1;8863;:6;;8855:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8922:1;8915:8;;;8749:182;;;;:::o;6796:575::-;6954:1;6936:20;;:6;:20;;;6928:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7038:1;7017:23;;:9;:23;;;7009:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7094:47;7115:6;7123:9;7134:6;7094:20;:47::i;:::-;7175:71;7197:6;7175:71;;;;;;;;;;;;;;;;;:9;:17;7185:6;7175:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7155:9;:17;7165:6;7155:17;;;;;;;;;;;;;;;:91;;;;7280:32;7305:6;7280:9;:20;7290:9;7280:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7257:9;:20;7267:9;7257:20;;;;;;;;;;;;;;;:55;;;;7345:9;7328:35;;7337:6;7328:35;;;7356:6;7328:35;;;;;;:::i;:::-;;;;;;;;6796:575;;;:::o;29403:1477::-;29442:23;29468:24;29486:4;29468:9;:24::i;:::-;29442:50;;29503:25;29552:12;;29531:18;;:33;;;;:::i;:::-;29503:61;;29575:12;29623:1;29604:15;:20;:46;;;;29649:1;29628:17;:22;29604:46;29601:60;;;29653:7;;;;;29601:60;29698:5;29677:26;;:17;;;;;;;;;;;:26;;;29674:254;;29763:2;29740:20;;:25;;;;:::i;:::-;29722:15;:43;29719:125;;;29826:2;29803:20;;:25;;;;:::i;:::-;29785:43;;29719:125;29674:254;;;29892:24;29910:4;29892:9;:24::i;:::-;29874:42;;29674:254;30000:23;30085:1;30065:17;30044:18;;30026:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30000:86;;30097:26;30126:36;30146:15;30126;:19;;:36;;;;:::i;:::-;30097:65;;30176:25;30204:21;30176:49;;30239:36;30256:18;30239:16;:36::i;:::-;30290:18;30311:44;30337:17;30311:21;:25;;:44;;;;:::i;:::-;30290:65;;30369:17;30389:51;30422:17;30389:28;30404:12;;30389:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30369:71;;30451:23;30490:9;30477:10;:22;;;;:::i;:::-;30451:48;;30537:1;30516:18;:22;;;;30564:1;30549:12;:16;;;;30600:1;30582:15;:19;:42;;;;;30623:1;30605:15;:19;30582:42;30579:210;;;30640:46;30653:15;30670;30640:12;:46::i;:::-;30706:71;30721:18;30741:15;30758:18;;30706:71;;;;;;;;:::i;:::-;;;;;;;;30579:210;30823:9;;;;;;;;;;;30815:23;;30846:21;30815:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30802:70;;;;;29431:1449;;;;;;;;;29403:1477;:::o;9284:254::-;9342:7;9373:1;9368;:6;9364:47;;9398:1;9391:8;;;;9364:47;9424:9;9440:1;9436;:5;;;;:::i;:::-;9424:17;;9469:1;9464;9460;:5;;;;:::i;:::-;:10;9452:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9529:1;9522:8;;;9284:254;;;;;:::o;9546:132::-;9604:7;9631:39;9635:1;9638;9631:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9624:46;;9546:132;;;;:::o;8584:125::-;;;;:::o;8939:136::-;8997:7;9024:43;9028:1;9031;9024:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9017:50;;8939:136;;;;:::o;28268:597::-;28397:21;28435:1;28421:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28397:40;;28466:4;28448;28453:1;28448:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28492:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28482:4;28487:1;28482:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28528:62;28545:4;28560:15;;;;;;;;;;;28578:11;28528:8;:62::i;:::-;28630:15;;;;;;;;;;;:66;;;28711:11;28737:1;28781:4;28808;28828:15;28630:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28323:542;28268:597;:::o;28874:520::-;29022:62;29039:4;29054:15;;;;;;;;;;;29072:11;29022:8;:62::i;:::-;29128:15;;;;;;;;;;;:31;;;29167:9;29200:4;29220:11;29246:1;29289;29340:4;29360:15;29128:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28874:520;;:::o;9686:279::-;9772:7;9804:1;9800;:5;9807:12;9792:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9831:9;9847:1;9843;:5;;;;:::i;:::-;9831:17;;9956:1;9949:8;;;9686:279;;;;;:::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;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:765::-;5197:6;5205;5213;5221;5270:3;5258:9;5249:7;5245:23;5241:33;5238:120;;;5277:79;;:::i;:::-;5238:120;5397:1;5422:53;5467:7;5458:6;5447:9;5443:22;5422:53;:::i;:::-;5412:63;;5368:117;5524:2;5550:53;5595:7;5586:6;5575:9;5571:22;5550:53;:::i;:::-;5540:63;;5495:118;5652:2;5678:53;5723:7;5714:6;5703:9;5699:22;5678:53;:::i;:::-;5668:63;;5623:118;5780:2;5806:53;5851:7;5842:6;5831:9;5827:22;5806:53;:::i;:::-;5796:63;;5751:118;5111:765;;;;;;;:::o;5882:619::-;5959:6;5967;5975;6024:2;6012:9;6003:7;5999:23;5995:32;5992:119;;;6030:79;;:::i;:::-;5992:119;6150:1;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6121:117;6277:2;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6248:118;6405:2;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6376:118;5882:619;;;;;:::o;6507:86::-;6542:7;6582:4;6575:5;6571:16;6560:27;;6507:86;;;:::o;6599:112::-;6682:22;6698:5;6682:22;:::i;:::-;6677:3;6670:35;6599:112;;:::o;6717:214::-;6806:4;6844:2;6833:9;6829:18;6821:26;;6857:67;6921:1;6910:9;6906:17;6897:6;6857:67;:::i;:::-;6717:214;;;;:::o;6937:118::-;7024:24;7042:5;7024:24;:::i;:::-;7019:3;7012:37;6937:118;;:::o;7061:222::-;7154:4;7192:2;7181:9;7177:18;7169:26;;7205:71;7273:1;7262:9;7258:17;7249:6;7205:71;:::i;:::-;7061:222;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:323::-;7606:6;7655:2;7643:9;7634:7;7630:23;7626:32;7623:119;;;7661:79;;:::i;:::-;7623:119;7781:1;7806:50;7848:7;7839:6;7828:9;7824:22;7806:50;:::i;:::-;7796:60;;7752:114;7550:323;;;;:::o;7879:468::-;7944:6;7952;8001:2;7989:9;7980:7;7976:23;7972:32;7969:119;;;8007:79;;:::i;:::-;7969:119;8127:1;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8098:117;8254:2;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8225:115;7879:468;;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:180::-;8881:77;8878:1;8871:88;8978:4;8975:1;8968:15;9002:4;8999:1;8992:15;9019:320;9063:6;9100:1;9094:4;9090:12;9080:22;;9147:1;9141:4;9137:12;9168:18;9158:81;;9224:4;9216:6;9212:17;9202:27;;9158:81;9286:2;9278:6;9275:14;9255:18;9252:38;9249:84;;9305:18;;:::i;:::-;9249:84;9070:269;9019:320;;;:::o;9345:182::-;9485:34;9481:1;9473:6;9469:14;9462:58;9345:182;:::o;9533:366::-;9675:3;9696:67;9760:2;9755:3;9696:67;:::i;:::-;9689:74;;9772:93;9861:3;9772:93;:::i;:::-;9890:2;9885:3;9881:12;9874:19;;9533:366;;;:::o;9905:419::-;10071:4;10109:2;10098:9;10094:18;10086:26;;10158:9;10152:4;10148:20;10144:1;10133:9;10129:17;10122:47;10186:131;10312:4;10186:131;:::i;:::-;10178:139;;9905:419;;;:::o;10330:180::-;10378:77;10375:1;10368:88;10475:4;10472:1;10465:15;10499:4;10496:1;10489:15;10516:191;10556:3;10575:20;10593:1;10575:20;:::i;:::-;10570:25;;10609:20;10627:1;10609:20;:::i;:::-;10604:25;;10652:1;10649;10645:9;10638:16;;10673:3;10670:1;10667:10;10664:36;;;10680:18;;:::i;:::-;10664:36;10516:191;;;;:::o;10713:143::-;10770:5;10801:6;10795:13;10786:22;;10817:33;10844:5;10817:33;:::i;:::-;10713:143;;;;:::o;10862:351::-;10932:6;10981:2;10969:9;10960:7;10956:23;10952:32;10949:119;;;10987:79;;:::i;:::-;10949:119;11107:1;11132:64;11188:7;11179:6;11168:9;11164:22;11132:64;:::i;:::-;11122:74;;11078:128;10862:351;;;;:::o;11219:332::-;11340:4;11378:2;11367:9;11363:18;11355:26;;11391:71;11459:1;11448:9;11444:17;11435:6;11391:71;:::i;:::-;11472:72;11540:2;11529:9;11525:18;11516:6;11472:72;:::i;:::-;11219:332;;;;;:::o;11557:410::-;11597:7;11620:20;11638:1;11620:20;:::i;:::-;11615:25;;11654:20;11672:1;11654:20;:::i;:::-;11649:25;;11709:1;11706;11702:9;11731:30;11749:11;11731:30;:::i;:::-;11720:41;;11910:1;11901:7;11897:15;11894:1;11891:22;11871:1;11864:9;11844:83;11821:139;;11940:18;;:::i;:::-;11821:139;11605:362;11557:410;;;;:::o;11973:180::-;12021:77;12018:1;12011:88;12118:4;12115:1;12108:15;12142:4;12139:1;12132:15;12159:185;12199:1;12216:20;12234:1;12216:20;:::i;:::-;12211:25;;12250:20;12268:1;12250:20;:::i;:::-;12245:25;;12289:1;12279:35;;12294:18;;:::i;:::-;12279:35;12336:1;12333;12329:9;12324:14;;12159:185;;;;:::o;12350:85::-;12395:7;12424:5;12413:16;;12350:85;;;:::o;12441:158::-;12499:9;12532:61;12550:42;12559:32;12585:5;12559:32;:::i;:::-;12550:42;:::i;:::-;12532:61;:::i;:::-;12519:74;;12441:158;;;:::o;12605:147::-;12700:45;12739:5;12700:45;:::i;:::-;12695:3;12688:58;12605:147;;:::o;12758:807::-;13007:4;13045:3;13034:9;13030:19;13022:27;;13059:71;13127:1;13116:9;13112:17;13103:6;13059:71;:::i;:::-;13140:72;13208:2;13197:9;13193:18;13184:6;13140:72;:::i;:::-;13222:80;13298:2;13287:9;13283:18;13274:6;13222:80;:::i;:::-;13312;13388:2;13377:9;13373:18;13364:6;13312:80;:::i;:::-;13402:73;13470:3;13459:9;13455:19;13446:6;13402:73;:::i;:::-;13485;13553:3;13542:9;13538:19;13529:6;13485:73;:::i;:::-;12758:807;;;;;;;;;:::o;13571:143::-;13628:5;13659:6;13653:13;13644:22;;13675:33;13702:5;13675:33;:::i;:::-;13571:143;;;;:::o;13720:663::-;13808:6;13816;13824;13873:2;13861:9;13852:7;13848:23;13844:32;13841:119;;;13879:79;;:::i;:::-;13841:119;13999:1;14024:64;14080:7;14071:6;14060:9;14056:22;14024:64;:::i;:::-;14014:74;;13970:128;14137:2;14163:64;14219:7;14210:6;14199:9;14195:22;14163:64;:::i;:::-;14153:74;;14108:129;14276:2;14302:64;14358:7;14349:6;14338:9;14334:22;14302:64;:::i;:::-;14292:74;;14247:129;13720:663;;;;;:::o;14389:165::-;14529:17;14525:1;14517:6;14513:14;14506:41;14389:165;:::o;14560:366::-;14702:3;14723:67;14787:2;14782:3;14723:67;:::i;:::-;14716:74;;14799:93;14888:3;14799:93;:::i;:::-;14917:2;14912:3;14908:12;14901:19;;14560:366;;;:::o;14932:419::-;15098:4;15136:2;15125:9;15121:18;15113:26;;15185:9;15179:4;15175:20;15171:1;15160:9;15156:17;15149:47;15213:131;15339:4;15213:131;:::i;:::-;15205:139;;14932:419;;;:::o;15357:176::-;15497:28;15493:1;15485:6;15481:14;15474:52;15357:176;:::o;15539:366::-;15681:3;15702:67;15766:2;15761:3;15702:67;:::i;:::-;15695:74;;15778:93;15867:3;15778:93;:::i;:::-;15896:2;15891:3;15887:12;15880:19;;15539:366;;;:::o;15911:419::-;16077:4;16115:2;16104:9;16100:18;16092:26;;16164:9;16158:4;16154:20;16150:1;16139:9;16135:17;16128:47;16192:131;16318:4;16192:131;:::i;:::-;16184:139;;15911:419;;;:::o;16336:221::-;16476:34;16472:1;16464:6;16460:14;16453:58;16545:4;16540:2;16532:6;16528:15;16521:29;16336:221;:::o;16563:366::-;16705:3;16726:67;16790:2;16785:3;16726:67;:::i;:::-;16719:74;;16802:93;16891:3;16802:93;:::i;:::-;16920:2;16915:3;16911:12;16904:19;;16563:366;;;:::o;16935:419::-;17101:4;17139:2;17128:9;17124:18;17116:26;;17188:9;17182:4;17178:20;17174:1;17163:9;17159:17;17152:47;17216:131;17342:4;17216:131;:::i;:::-;17208:139;;16935:419;;;:::o;17360:147::-;17461:11;17498:3;17483:18;;17360:147;;;;:::o;17513:114::-;;:::o;17633:398::-;17792:3;17813:83;17894:1;17889:3;17813:83;:::i;:::-;17806:90;;17905:93;17994:3;17905:93;:::i;:::-;18023:1;18018:3;18014:11;18007:18;;17633:398;;;:::o;18037:379::-;18221:3;18243:147;18386:3;18243:147;:::i;:::-;18236:154;;18407:3;18400:10;;18037:379;;;:::o;18422:177::-;18562:29;18558:1;18550:6;18546:14;18539:53;18422:177;:::o;18605:366::-;18747:3;18768:67;18832:2;18827:3;18768:67;:::i;:::-;18761:74;;18844:93;18933:3;18844:93;:::i;:::-;18962:2;18957:3;18953:12;18946:19;;18605:366;;;:::o;18977:419::-;19143:4;19181:2;19170:9;19166:18;19158:26;;19230:9;19224:4;19220:20;19216:1;19205:9;19201:17;19194:47;19258:131;19384:4;19258:131;:::i;:::-;19250:139;;18977:419;;;:::o;19402:244::-;19542:34;19538:1;19530:6;19526:14;19519:58;19611:27;19606:2;19598:6;19594:15;19587:52;19402:244;:::o;19652:366::-;19794:3;19815:67;19879:2;19874:3;19815:67;:::i;:::-;19808:74;;19891:93;19980:3;19891:93;:::i;:::-;20009:2;20004:3;20000:12;19993:19;;19652:366;;;:::o;20024:419::-;20190:4;20228:2;20217:9;20213:18;20205:26;;20277:9;20271:4;20267:20;20263:1;20252:9;20248:17;20241:47;20305:131;20431:4;20305:131;:::i;:::-;20297:139;;20024:419;;;:::o;20449:223::-;20589:34;20585:1;20577:6;20573:14;20566:58;20658:6;20653:2;20645:6;20641:15;20634:31;20449:223;:::o;20678:366::-;20820:3;20841:67;20905:2;20900:3;20841:67;:::i;:::-;20834:74;;20917:93;21006:3;20917:93;:::i;:::-;21035:2;21030:3;21026:12;21019:19;;20678:366;;;:::o;21050:419::-;21216:4;21254:2;21243:9;21239:18;21231:26;;21303:9;21297:4;21293:20;21289:1;21278:9;21274:17;21267:47;21331:131;21457:4;21331:131;:::i;:::-;21323:139;;21050:419;;;:::o;21475:180::-;21615:32;21611:1;21603:6;21599:14;21592:56;21475:180;:::o;21661:366::-;21803:3;21824:67;21888:2;21883:3;21824:67;:::i;:::-;21817:74;;21900:93;21989:3;21900:93;:::i;:::-;22018:2;22013:3;22009:12;22002:19;;21661:366;;;:::o;22033:419::-;22199:4;22237:2;22226:9;22222:18;22214:26;;22286:9;22280:4;22276:20;22272:1;22261:9;22257:17;22250:47;22314:131;22440:4;22314:131;:::i;:::-;22306:139;;22033:419;;;:::o;22458:223::-;22598:34;22594:1;22586:6;22582:14;22575:58;22667:6;22662:2;22654:6;22650:15;22643:31;22458:223;:::o;22687:366::-;22829:3;22850:67;22914:2;22909:3;22850:67;:::i;:::-;22843:74;;22926:93;23015:3;22926:93;:::i;:::-;23044:2;23039:3;23035:12;23028:19;;22687:366;;;:::o;23059:419::-;23225:4;23263:2;23252:9;23248:18;23240:26;;23312:9;23306:4;23302:20;23298:1;23287:9;23283:17;23276:47;23340:131;23466:4;23340:131;:::i;:::-;23332:139;;23059:419;;;:::o;23484:221::-;23624:34;23620:1;23612:6;23608:14;23601:58;23693:4;23688:2;23680:6;23676:15;23669:29;23484:221;:::o;23711:366::-;23853:3;23874:67;23938:2;23933:3;23874:67;:::i;:::-;23867:74;;23950:93;24039:3;23950:93;:::i;:::-;24068:2;24063:3;24059:12;24052:19;;23711:366;;;:::o;24083:419::-;24249:4;24287:2;24276:9;24272:18;24264:26;;24336:9;24330:4;24326:20;24322:1;24311:9;24307:17;24300:47;24364:131;24490:4;24364:131;:::i;:::-;24356:139;;24083:419;;;:::o;24508:224::-;24648:34;24644:1;24636:6;24632:14;24625:58;24717:7;24712:2;24704:6;24700:15;24693:32;24508:224;:::o;24738:366::-;24880:3;24901:67;24965:2;24960:3;24901:67;:::i;:::-;24894:74;;24977:93;25066:3;24977:93;:::i;:::-;25095:2;25090:3;25086:12;25079:19;;24738:366;;;:::o;25110:419::-;25276:4;25314:2;25303:9;25299:18;25291:26;;25363:9;25357:4;25353:20;25349:1;25338:9;25334:17;25327:47;25391:131;25517:4;25391:131;:::i;:::-;25383:139;;25110:419;;;:::o;25535:222::-;25675:34;25671:1;25663:6;25659:14;25652:58;25744:5;25739:2;25731:6;25727:15;25720:30;25535:222;:::o;25763:366::-;25905:3;25926:67;25990:2;25985:3;25926:67;:::i;:::-;25919:74;;26002:93;26091:3;26002:93;:::i;:::-;26120:2;26115:3;26111:12;26104:19;;25763:366;;;:::o;26135:419::-;26301:4;26339:2;26328:9;26324:18;26316:26;;26388:9;26382:4;26378:20;26374:1;26363:9;26359:17;26352:47;26416:131;26542:4;26416:131;:::i;:::-;26408:139;;26135:419;;;:::o;26560:171::-;26700:23;26696:1;26688:6;26684:14;26677:47;26560:171;:::o;26737:366::-;26879:3;26900:67;26964:2;26959:3;26900:67;:::i;:::-;26893:74;;26976:93;27065:3;26976:93;:::i;:::-;27094:2;27089:3;27085:12;27078:19;;26737:366;;;:::o;27109:419::-;27275:4;27313:2;27302:9;27298:18;27290:26;;27362:9;27356:4;27352:20;27348:1;27337:9;27333:17;27326:47;27390:131;27516:4;27390:131;:::i;:::-;27382:139;;27109:419;;;:::o;27534:240::-;27674:34;27670:1;27662:6;27658:14;27651:58;27743:23;27738:2;27730:6;27726:15;27719:48;27534:240;:::o;27780:366::-;27922:3;27943:67;28007:2;28002:3;27943:67;:::i;:::-;27936:74;;28019:93;28108:3;28019:93;:::i;:::-;28137:2;28132:3;28128:12;28121:19;;27780:366;;;:::o;28152:419::-;28318:4;28356:2;28345:9;28341:18;28333:26;;28405:9;28399:4;28395:20;28391:1;28380:9;28376:17;28369:47;28433:131;28559:4;28433:131;:::i;:::-;28425:139;;28152:419;;;:::o;28577:169::-;28717:21;28713:1;28705:6;28701:14;28694:45;28577:169;:::o;28752:366::-;28894:3;28915:67;28979:2;28974:3;28915:67;:::i;:::-;28908:74;;28991:93;29080:3;28991:93;:::i;:::-;29109:2;29104:3;29100:12;29093:19;;28752:366;;;:::o;29124:419::-;29290:4;29328:2;29317:9;29313:18;29305:26;;29377:9;29371:4;29367:20;29363:1;29352:9;29348:17;29341:47;29405:131;29531:4;29405:131;:::i;:::-;29397:139;;29124:419;;;:::o;29549:241::-;29689:34;29685:1;29677:6;29673:14;29666:58;29758:24;29753:2;29745:6;29741:15;29734:49;29549:241;:::o;29796:366::-;29938:3;29959:67;30023:2;30018:3;29959:67;:::i;:::-;29952:74;;30035:93;30124:3;30035:93;:::i;:::-;30153:2;30148:3;30144:12;30137:19;;29796:366;;;:::o;30168:419::-;30334:4;30372:2;30361:9;30357:18;30349:26;;30421:9;30415:4;30411:20;30407:1;30396:9;30392:17;30385:47;30449:131;30575:4;30449:131;:::i;:::-;30441:139;;30168:419;;;:::o;30593:194::-;30633:4;30653:20;30671:1;30653:20;:::i;:::-;30648:25;;30687:20;30705:1;30687:20;:::i;:::-;30682:25;;30731:1;30728;30724:9;30716:17;;30755:1;30749:4;30746:11;30743:37;;;30760:18;;:::i;:::-;30743:37;30593:194;;;;:::o;30793:177::-;30933:29;30929:1;30921:6;30917:14;30910:53;30793:177;:::o;30976:366::-;31118:3;31139:67;31203:2;31198:3;31139:67;:::i;:::-;31132:74;;31215:93;31304:3;31215:93;:::i;:::-;31333:2;31328:3;31324:12;31317:19;;30976:366;;;:::o;31348:419::-;31514:4;31552:2;31541:9;31537:18;31529:26;;31601:9;31595:4;31591:20;31587:1;31576:9;31572:17;31565:47;31629:131;31755:4;31629:131;:::i;:::-;31621:139;;31348:419;;;:::o;31773:442::-;31922:4;31960:2;31949:9;31945:18;31937:26;;31973:71;32041:1;32030:9;32026:17;32017:6;31973:71;:::i;:::-;32054:72;32122:2;32111:9;32107:18;32098:6;32054:72;:::i;:::-;32136;32204:2;32193:9;32189:18;32180:6;32136:72;:::i;:::-;31773:442;;;;;;:::o;32221:220::-;32361:34;32357:1;32349:6;32345:14;32338:58;32430:3;32425:2;32417:6;32413:15;32406:28;32221:220;:::o;32447:366::-;32589:3;32610:67;32674:2;32669:3;32610:67;:::i;:::-;32603:74;;32686:93;32775:3;32686:93;:::i;:::-;32804:2;32799:3;32795:12;32788:19;;32447:366;;;:::o;32819:419::-;32985:4;33023:2;33012:9;33008:18;33000:26;;33072:9;33066:4;33062:20;33058:1;33047:9;33043:17;33036:47;33100:131;33226:4;33100:131;:::i;:::-;33092:139;;32819:419;;;:::o;33244:180::-;33292:77;33289:1;33282:88;33389:4;33386:1;33379:15;33413:4;33410:1;33403:15;33430:180;33478:77;33475:1;33468:88;33575:4;33572:1;33565:15;33599:4;33596:1;33589:15;33616:114;33683:6;33717:5;33711:12;33701:22;;33616:114;;;:::o;33736:184::-;33835:11;33869:6;33864:3;33857:19;33909:4;33904:3;33900:14;33885:29;;33736:184;;;;:::o;33926:132::-;33993:4;34016:3;34008:11;;34046:4;34041:3;34037:14;34029:22;;33926:132;;;:::o;34064:108::-;34141:24;34159:5;34141:24;:::i;:::-;34136:3;34129:37;34064:108;;:::o;34178:179::-;34247:10;34268:46;34310:3;34302:6;34268:46;:::i;:::-;34346:4;34341:3;34337:14;34323:28;;34178:179;;;;:::o;34363:113::-;34433:4;34465;34460:3;34456:14;34448:22;;34363:113;;;:::o;34512:732::-;34631:3;34660:54;34708:5;34660:54;:::i;:::-;34730:86;34809:6;34804:3;34730:86;:::i;:::-;34723:93;;34840:56;34890:5;34840:56;:::i;:::-;34919:7;34950:1;34935:284;34960:6;34957:1;34954:13;34935:284;;;35036:6;35030:13;35063:63;35122:3;35107:13;35063:63;:::i;:::-;35056:70;;35149:60;35202:6;35149:60;:::i;:::-;35139:70;;34995:224;34982:1;34979;34975:9;34970:14;;34935:284;;;34939:14;35235:3;35228:10;;34636:608;;;34512:732;;;;:::o;35250:831::-;35513:4;35551:3;35540:9;35536:19;35528:27;;35565:71;35633:1;35622:9;35618:17;35609:6;35565:71;:::i;:::-;35646:80;35722:2;35711:9;35707:18;35698:6;35646:80;:::i;:::-;35773:9;35767:4;35763:20;35758:2;35747:9;35743:18;35736:48;35801:108;35904:4;35895:6;35801:108;:::i;:::-;35793:116;;35919:72;35987:2;35976:9;35972:18;35963:6;35919:72;:::i;:::-;36001:73;36069:3;36058:9;36054:19;36045:6;36001:73;:::i;:::-;35250:831;;;;;;;;:::o

Swarm Source

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