ETH Price: $2,383.12 (-0.30%)

Token

X Hiring (XHIRE)
 

Overview

Max Total Supply

1,000,000,000,000 XHIRE

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.059484965508246784 XHIRE

Value
$0.00
0x64c4360b38898132d4d5a02a80e58c580865b22c
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:
XHiring

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-02
*/

/*
https://twitter.com/xDaily/status/1697661240615768506?t=UOovyrRpB9cQ8ytKsL9whA&s=19'
https://twitter.com/XHiring

PORTAL: https://t.me/XHiringETH
TWITTER: https://twitter.com/XHiringETH

*/

// 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 XHiring is ERC20, Ownable {

    string _name = unicode"X Hiring";
    string _symbol = unicode"XHIRE";

    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 = 20;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 25;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 1000000000000 * 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 live() 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)) * 87 / 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":[{"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":"live","outputs":[],"stateMutability":"nonpayable","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"}]

60806040526040518060400160405280600881526020017f5820486972696e67000000000000000000000000000000000000000000000000815250600690816200004a919062000bd0565b506040518060400160405280600581526020017f58484952450000000000000000000000000000000000000000000000000000008152506007908162000091919062000bd0565b50600160115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009d0565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009d0565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009d0565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009d0565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bd0565b50806004908162000218919062000bd0565b5050505f6200022c620004f760201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601490505f80601990505f806c0c9f2c9cd04674edea4000000090506103e8601482620002f8919062000ce1565b62000304919062000d58565b600e819055506103e86014826200031c919062000ce1565b62000328919062000d58565b6010819055506103e860018262000340919062000ce1565b6200034c919062000d58565b600f81905550846013819055508360148190555060145460135462000372919062000d8f565b601281905550826016819055508160178190555060175460165462000398919062000d8f565b60158190555033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000400620003f2620004fe60201b60201c565b60016200052660201b60201c565b620004133060016200052660201b60201c565b6200042861dead60016200052660201b60201c565b6200045c600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200052660201b60201c565b6200047e62000470620004fe60201b60201c565b60016200066f60201b60201c565b620004913060016200066f60201b60201c565b620004a661dead60016200066f60201b60201c565b620004da600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066f60201b60201c565b620004ec33826200076860201b60201c565b505050505062000f86565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000536620004f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005be9062000e27565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000663919062000e63565b60405180910390a25050565b6200067f620004f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000710576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007079062000e27565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d09062000ecc565b60405180910390fd5b620007ec5f83836200090560201b60201c565b62000803816002546200090a60201b90919060201c565b6002819055506200085a815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200090a60201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f9919062000efd565b60405180910390a35050565b505050565b5f8082846200091a919062000d8f565b90508381101562000962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009599062000f66565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009e857607f821691505b602082108103620009fe57620009fd620009a3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a25565b62000a6e868362000a25565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ab862000ab262000aac8462000a86565b62000a8f565b62000a86565b9050919050565b5f819050919050565b62000ad38362000a98565b62000aeb62000ae28262000abf565b84845462000a31565b825550505050565b5f90565b62000b0162000af3565b62000b0e81848462000ac8565b505050565b5b8181101562000b355762000b295f8262000af7565b60018101905062000b14565b5050565b601f82111562000b845762000b4e8162000a04565b62000b598462000a16565b8101602085101562000b69578190505b62000b8162000b788562000a16565b83018262000b13565b50505b505050565b5f82821c905092915050565b5f62000ba65f198460080262000b89565b1980831691505092915050565b5f62000bc0838362000b95565b9150826002028217905092915050565b62000bdb826200096c565b67ffffffffffffffff81111562000bf75762000bf662000976565b5b62000c038254620009d0565b62000c1082828562000b39565b5f60209050601f83116001811462000c46575f841562000c31578287015190505b62000c3d858262000bb3565b86555062000cac565b601f19841662000c568662000a04565b5f5b8281101562000c7f5784890151825560018201915060208501945060208101905062000c58565b8683101562000c9f578489015162000c9b601f89168262000b95565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ced8262000a86565b915062000cfa8362000a86565b925082820262000d0a8162000a86565b9150828204841483151762000d245762000d2362000cb4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d648262000a86565b915062000d718362000a86565b92508262000d845762000d8362000d2b565b5b828204905092915050565b5f62000d9b8262000a86565b915062000da88362000a86565b925082820190508082111562000dc35762000dc262000cb4565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e0f60208362000dc9565b915062000e1c8262000dd9565b602082019050919050565b5f6020820190508181035f83015262000e408162000e01565b9050919050565b5f8115159050919050565b62000e5d8162000e47565b82525050565b5f60208201905062000e785f83018462000e52565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb4601f8362000dc9565b915062000ec18262000e7e565b602082019050919050565b5f6020820190508181035f83015262000ee58162000ea6565b9050919050565b62000ef78162000a86565b82525050565b5f60208201905062000f125f83018462000eec565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f4e601b8362000dc9565b915062000f5b8262000f18565b602082019050919050565b5f6020820190508181035f83015262000f7f8162000f40565b9050919050565b614db38062000f945f395ff3fe608060405260043610610280575f3560e01c8063751039fc1161014e578063a457c2d7116100c0578063c3f70b5211610079578063c3f70b521461094b578063dd62ed3e14610975578063df6f93be146109b1578063f2fde38b146109db578063f9f92be414610a03578063fe575a8714610a2b57610287565b8063a457c2d71461081b578063a9059cbb14610857578063b62496f514610893578063b69ef8a8146108cf578063be857504146108f9578063c02466681461092357610287565b8063945674fe11610112578063945674fe14610749578063957aa58c1461077357806395d89b41146107895780639a7a23d6146107b35780639ee2e924146107db5780639fccce32146107f157610287565b8063751039fc146106a35780637571336a146106b957806375e3661e146106e157806387dd95c0146107095780638da5cb5b1461071f57610287565b806323b872dd116101f25780634fbee193116101ab5780634fbee193146105995780635de0f2a0146105d55780635ec065e7146105ff5780636c7e15c91461062757806370a0823114610651578063715018a61461068d57610287565b806323b872dd14610479578063313ce567146104b557806339509351146104df57806346469afb1461051b57806348d791551461054557806349bd5a5e1461056f57610287565b806318160ddd1161024457806318160ddd146103815780631816467f146103ab5780631a8145bb146103d35780631bff7898146103fd5780631d9305bf1461042757806322eb66311461044f57610287565b806306fdde031461028b578063095ea7b3146102b55780630e947809146102f157806310d5de531461031b5780631694505e1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a67565b6040516102ac9190613ba5565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613c56565b610af7565b6040516102e89190613cae565b60405180910390f35b3480156102fc575f80fd5b50610305610b14565b6040516103129190613cae565b60405180910390f35b348015610326575f80fd5b50610341600480360381019061033c9190613cc7565b610b26565b60405161034e9190613cae565b60405180910390f35b348015610362575f80fd5b5061036b610b43565b6040516103789190613d4d565b60405180910390f35b34801561038c575f80fd5b50610395610b68565b6040516103a29190613d75565b60405180910390f35b3480156103b6575f80fd5b506103d160048036038101906103cc9190613cc7565b610b71565b005b3480156103de575f80fd5b506103e7610cc5565b6040516103f49190613d75565b60405180910390f35b348015610408575f80fd5b50610411610ccb565b60405161041e9190613d75565b60405180910390f35b348015610432575f80fd5b5061044d60048036038101906104489190613d8e565b610cd1565b005b34801561045a575f80fd5b50610463610db5565b6040516104709190613d75565b60405180910390f35b348015610484575f80fd5b5061049f600480360381019061049a9190613df2565b610dbb565b6040516104ac9190613cae565b60405180910390f35b3480156104c0575f80fd5b506104c9610e8f565b6040516104d69190613e5d565b60405180910390f35b3480156104ea575f80fd5b5061050560048036038101906105009190613c56565b610e97565b6040516105129190613cae565b60405180910390f35b348015610526575f80fd5b5061052f610f45565b60405161053c9190613d75565b60405180910390f35b348015610550575f80fd5b50610559610f4b565b6040516105669190613d75565b60405180910390f35b34801561057a575f80fd5b50610583610f51565b6040516105909190613e85565b60405180910390f35b3480156105a4575f80fd5b506105bf60048036038101906105ba9190613cc7565b610f76565b6040516105cc9190613cae565b60405180910390f35b3480156105e0575f80fd5b506105e9610fc8565b6040516105f69190613d75565b60405180910390f35b34801561060a575f80fd5b5061062560048036038101906106209190613ec8565b610fce565b005b348015610632575f80fd5b5061063b611081565b6040516106489190613d75565b60405180910390f35b34801561065c575f80fd5b5061067760048036038101906106729190613cc7565b611087565b6040516106849190613d75565b60405180910390f35b348015610698575f80fd5b506106a16110cc565b005b3480156106ae575f80fd5b506106b761121f565b005b3480156106c4575f80fd5b506106df60048036038101906106da9190613ef3565b6112d0565b005b3480156106ec575f80fd5b5061070760048036038101906107029190613cc7565b6113be565b005b348015610714575f80fd5b5061071d6115e5565b005b34801561072a575f80fd5b5061073361178e565b6040516107409190613e85565b60405180910390f35b348015610754575f80fd5b5061075d6117b6565b60405161076a9190613cae565b60405180910390f35b34801561077e575f80fd5b506107876117c9565b005b348015610794575f80fd5b5061079d611bcf565b6040516107aa9190613ba5565b60405180910390f35b3480156107be575f80fd5b506107d960048036038101906107d49190613ef3565b611c5f565b005b3480156107e6575f80fd5b506107ef611d92565b005b3480156107fc575f80fd5b50610805611ea5565b6040516108129190613d75565b60405180910390f35b348015610826575f80fd5b50610841600480360381019061083c9190613c56565b611eab565b60405161084e9190613cae565b60405180910390f35b348015610862575f80fd5b5061087d60048036038101906108789190613c56565b611f73565b60405161088a9190613cae565b60405180910390f35b34801561089e575f80fd5b506108b960048036038101906108b49190613cc7565b611f90565b6040516108c69190613cae565b60405180910390f35b3480156108da575f80fd5b506108e3611fad565b6040516108f09190613d75565b60405180910390f35b348015610904575f80fd5b5061090d611fb3565b60405161091a9190613d75565b60405180910390f35b34801561092e575f80fd5b5061094960048036038101906109449190613ef3565b611fb9565b005b348015610956575f80fd5b5061095f6120f5565b60405161096c9190613d75565b60405180910390f35b348015610980575f80fd5b5061099b60048036038101906109969190613f31565b6120fb565b6040516109a89190613d75565b60405180910390f35b3480156109bc575f80fd5b506109c561217d565b6040516109d29190613d75565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613cc7565b612183565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613cc7565b6122d7565b005b348015610a36575f80fd5b50610a516004803603810190610a4c9190613cc7565b612500565b604051610a5e9190613cae565b60405180910390f35b606060038054610a7690613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613f9c565b8015610aed5780601f10610ac457610100808354040283529160200191610aed565b820191905f5260205f20905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b5f610b0a610b0361251d565b8484612524565b6001905092915050565b60115f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610b7961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614016565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60155481565b610cd961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e90614016565b60405180910390fd5b8360138190555081601481905550601454601354610d859190614061565b6012819055508260168190555080601781905550601754601654610da99190614061565b60158190555050505050565b60165481565b5f610dc78484846126e7565b610e8484610dd361251d565b610e7f85604051806060016040528060288152602001614d316028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e3661251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b600190509392505050565b5f6012905090565b5f610f3b610ea361251d565b84610f368560015f610eb361251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130f390919063ffffffff16565b612524565b6001905092915050565b60125481565b60105481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b610fd661251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614016565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110d461251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61122761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90614016565b60405180910390fd5b5f60115f6101000a81548160ff021916908315150217905550565b6112d861251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90614016565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113c661251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b9906140de565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614146565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7534c63860313c46c473e4e98328f37017e9674e2162faf1a3ad7a96236c3b7b60405160405180910390a250565b6115ed61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290614016565b60405180910390fd5b5f4790505f81116116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b8906141d4565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117079061421f565b5f6040518083038185875af1925050503d805f8114611741576040519150601f19603f3d011682016040523d82523d5f602084013e611746565b606091505b505090508061178a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117819061427d565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160019054906101000a900460ff1681565b6117d161251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614016565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506118828160016112d0565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561190b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192f91906142af565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611994573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b891906142af565b6040518363ffffffff1660e01b81526004016119d59291906142da565b6020604051808303815f875af11580156119f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1591906142af565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016112d0565b611aac60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613150565b5f4790505f60646057611abe30611087565b611ac89190614301565b611ad2919061436f565b9050611b003060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611b86969594939291906143d8565b60606040518083038185885af1158015611ba2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611bc7919061444b565b505050505050565b606060048054611bde90613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0a90613f9c565b8015611c555780601f10611c2c57610100808354040283529160200191611c55565b820191905f5260205f20905b815481529060010190602001808311611c3857829003601f168201915b5050505050905090565b611c6761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90614016565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b9061450b565b60405180910390fd5b611d8e8282613150565b5050565b611d9a61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90614016565b60405180910390fd5b5f611e3230611087565b90505f8111611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d90614599565b60405180910390fd5b611ea230600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126e7565b50565b60195481565b5f611f69611eb761251d565b84611f6485604051806060016040528060258152602001614d596025913960015f611ee061251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b6001905092915050565b5f611f86611f7f61251d565b84846126e7565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b60175481565b611fc161251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690614016565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120e99190613cae565b60405180910390a25050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60145481565b61218b61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090614016565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122df61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906140de565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90614601565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85560405160405180910390a250565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061471d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126da9190613d75565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614839565b60405180910390fd5b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906148a1565b60405180910390fd5b5f81036128645761285f83835f6131ee565b61308c565b60115f9054906101000a900460ff1615612c585761288061178e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ee57506128be61178e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561292657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600b5f9054906101000a900460ff16155b15612c5757601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a1a5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ac157600e54811115612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b9061492f565b60405180910390fd5b601054612a7083611087565b82612a7b9190614061565b1115612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab390614997565b60405180910390fd5b612c56565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b5e5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bad57600e54811115612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614a25565b60405180910390fd5b612c55565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c5457601054612c0783611087565b82612c129190614061565b1115612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90614997565b60405180910390fd5b5b5b5b5b5b5f612c6230611087565b90505f600f548210159050808015612c865750600b5f9054906101000a900460ff16155b8015612cd95750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d2c5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d7f5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dc0576001600b5f6101000a81548160ff021916908315150217905550612da6613477565b5f600b5f6101000a81548160ff0219169083151502179055505b5f600b5f9054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e6e5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e77575f90505b5f811561307c57601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ed557505f601554115b15612f6d57612f026064612ef46015548861369d90919063ffffffff16565b61371490919063ffffffff16565b905060155460175482612f159190614301565b612f1f919061436f565b60185f828254612f2f9190614061565b9250508190555060155460165482612f479190614301565b612f51919061436f565b60195f828254612f619190614061565b92505081905550613059565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc457505f601254115b1561305857612ff16064612fe36012548861369d90919063ffffffff16565b61371490919063ffffffff16565b9050601254601454826130049190614301565b61300e919061436f565b60185f82825461301e9190614061565b92505081905550601254601354826130369190614301565b613040919061436f565b60195f8282546130509190614061565b925050819055505b5b5f81111561306d5761306c8730836131ee565b5b80856130799190614a43565b94505b6130878787876131ee565b505050505b505050565b5f8383111582906130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9190613ba5565b60405180910390fd5b505f83856130e69190614a43565b9050809150509392505050565b5f8082846131019190614061565b905083811015613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d90614ac0565b60405180910390fd5b8091505092915050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361325c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613253906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c190614839565b60405180910390fd5b6132d583838361375d565b61333e81604051806060016040528060268152602001614d0b602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133cd815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130f390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161346a9190613d75565b60405180910390a3505050565b5f61348130611087565b90505f6019546018546134949190614061565b90505f808314806134a457505f82145b156134b15750505061369b565b5f1515601160019054906101000a900460ff161515036134f8576014600f546134da9190614301565b8311156134f3576014600f546134f09190614301565b92505b613504565b61350130611087565b92505b5f600383601854866135169190614301565b613520919061436f565b61352a919061436f565b90505f613540828661376290919063ffffffff16565b90505f47905061354f826137ab565b5f613563824761376290919063ffffffff16565b90505f61358d8761357f6019548561369d90919063ffffffff16565b61371490919063ffffffff16565b90505f818361359c9190614a43565b90505f6018819055505f6019819055505f861180156135ba57505f81115b15613607576135c986826139e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826018546040516135fe93929190614ade565b60405180910390a15b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364c9061421f565b5f6040518083038185875af1925050503d805f8114613686576040519150601f19603f3d011682016040523d82523d5f602084013e61368b565b606091505b5050809750505050505050505050505b565b5f8083036136ad575f905061370e565b5f82846136ba9190614301565b90508284826136c9919061436f565b14613709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370090614b83565b60405180910390fd5b809150505b92915050565b5f61375583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aba565b905092915050565b505050565b5f6137a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613091565b905092915050565b5f600267ffffffffffffffff8111156137c7576137c6614ba1565b5b6040519080825280602002602001820160405280156137f55781602001602082028036833780820191505090505b50905030815f8151811061380c5761380b614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d491906142af565b816001815181106138e8576138e7614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139b0959493929190614cb2565b5f604051808303815f87803b1580156139c7575f80fd5b505af11580156139d9573d5f803e3d5ffd5b505050505050565b613a0d3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613a72969594939291906143d8565b60606040518083038185885af1158015613a8e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613ab3919061444b565b5050505050565b5f8083118290613b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af79190613ba5565b60405180910390fd5b505f8385613b0e919061436f565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b52578082015181840152602081019050613b37565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b7782613b1b565b613b818185613b25565b9350613b91818560208601613b35565b613b9a81613b5d565b840191505092915050565b5f6020820190508181035f830152613bbd8184613b6d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613bf282613bc9565b9050919050565b613c0281613be8565b8114613c0c575f80fd5b50565b5f81359050613c1d81613bf9565b92915050565b5f819050919050565b613c3581613c23565b8114613c3f575f80fd5b50565b5f81359050613c5081613c2c565b92915050565b5f8060408385031215613c6c57613c6b613bc5565b5b5f613c7985828601613c0f565b9250506020613c8a85828601613c42565b9150509250929050565b5f8115159050919050565b613ca881613c94565b82525050565b5f602082019050613cc15f830184613c9f565b92915050565b5f60208284031215613cdc57613cdb613bc5565b5b5f613ce984828501613c0f565b91505092915050565b5f819050919050565b5f613d15613d10613d0b84613bc9565b613cf2565b613bc9565b9050919050565b5f613d2682613cfb565b9050919050565b5f613d3782613d1c565b9050919050565b613d4781613d2d565b82525050565b5f602082019050613d605f830184613d3e565b92915050565b613d6f81613c23565b82525050565b5f602082019050613d885f830184613d66565b92915050565b5f805f8060808587031215613da657613da5613bc5565b5b5f613db387828801613c42565b9450506020613dc487828801613c42565b9350506040613dd587828801613c42565b9250506060613de687828801613c42565b91505092959194509250565b5f805f60608486031215613e0957613e08613bc5565b5b5f613e1686828701613c0f565b9350506020613e2786828701613c0f565b9250506040613e3886828701613c42565b9150509250925092565b5f60ff82169050919050565b613e5781613e42565b82525050565b5f602082019050613e705f830184613e4e565b92915050565b613e7f81613be8565b82525050565b5f602082019050613e985f830184613e76565b92915050565b613ea781613c94565b8114613eb1575f80fd5b50565b5f81359050613ec281613e9e565b92915050565b5f60208284031215613edd57613edc613bc5565b5b5f613eea84828501613eb4565b91505092915050565b5f8060408385031215613f0957613f08613bc5565b5b5f613f1685828601613c0f565b9250506020613f2785828601613eb4565b9150509250929050565b5f8060408385031215613f4757613f46613bc5565b5b5f613f5485828601613c0f565b9250506020613f6585828601613c0f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fb357607f821691505b602082108103613fc657613fc5613f6f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614000602083613b25565b915061400b82613fcc565b602082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61406b82613c23565b915061407683613c23565b925082820190508082111561408e5761408d614034565b5b92915050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6140c8600f83613b25565b91506140d382614094565b602082019050919050565b5f6020820190508181035f8301526140f5816140bc565b9050919050565b7f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000005f82015250565b5f614130601a83613b25565b915061413b826140fc565b602082019050919050565b5f6020820190508181035f83015261415d81614124565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141be602283613b25565b91506141c982614164565b604082019050919050565b5f6020820190508181035f8301526141eb816141b2565b9050919050565b5f81905092915050565b50565b5f61420a5f836141f2565b9150614215826141fc565b5f82019050919050565b5f614229826141ff565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614267601b83613b25565b915061427282614233565b602082019050919050565b5f6020820190508181035f8301526142948161425b565b9050919050565b5f815190506142a981613bf9565b92915050565b5f602082840312156142c4576142c3613bc5565b5b5f6142d18482850161429b565b91505092915050565b5f6040820190506142ed5f830185613e76565b6142fa6020830184613e76565b9392505050565b5f61430b82613c23565b915061431683613c23565b925082820261432481613c23565b9150828204841483151761433b5761433a614034565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61437982613c23565b915061438483613c23565b92508261439457614393614342565b5b828204905092915050565b5f819050919050565b5f6143c26143bd6143b88461439f565b613cf2565b613c23565b9050919050565b6143d2816143a8565b82525050565b5f60c0820190506143eb5f830189613e76565b6143f86020830188613d66565b61440560408301876143c9565b61441260608301866143c9565b61441f6080830185613e76565b61442c60a0830184613d66565b979650505050505050565b5f8151905061444581613c2c565b92915050565b5f805f6060848603121561446257614461613bc5565b5b5f61446f86828701614437565b935050602061448086828701614437565b925050604061449186828701614437565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6144f5603983613b25565b91506145008261449b565b604082019050919050565b5f6020820190508181035f830152614522816144e9565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f614583602483613b25565b915061458e82614529565b604082019050919050565b5f6020820190508181035f8301526145b081614577565b9050919050565b7f4163636f756e7420697320616c726561647920626c61636b6c697374656400005f82015250565b5f6145eb601e83613b25565b91506145f6826145b7565b602082019050919050565b5f6020820190508181035f830152614618816145df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614679602483613b25565b91506146848261461f565b604082019050919050565b5f6020820190508181035f8301526146a68161466d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614707602283613b25565b9150614712826146ad565b604082019050919050565b5f6020820190508181035f830152614734816146fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614795602583613b25565b91506147a08261473b565b604082019050919050565b5f6020820190508181035f8301526147c281614789565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614823602383613b25565b915061482e826147c9565b604082019050919050565b5f6020820190508181035f83015261485081614817565b9050919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f61488b601583613b25565b915061489682614857565b602082019050919050565b5f6020820190508181035f8301526148b88161487f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614919603583613b25565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614981601383613b25565b915061498c8261494d565b602082019050919050565b5f6020820190508181035f8301526149ae81614975565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614a0f603683613b25565b9150614a1a826149b5565b604082019050919050565b5f6020820190508181035f830152614a3c81614a03565b9050919050565b5f614a4d82613c23565b9150614a5883613c23565b9250828203905081811115614a7057614a6f614034565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614aaa601b83613b25565b9150614ab582614a76565b602082019050919050565b5f6020820190508181035f830152614ad781614a9e565b9050919050565b5f606082019050614af15f830186613d66565b614afe6020830185613d66565b614b0b6040830184613d66565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b6d602183613b25565b9150614b7882614b13565b604082019050919050565b5f6020820190508181035f830152614b9a81614b61565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c2d81613be8565b82525050565b5f614c3e8383614c24565b60208301905092915050565b5f602082019050919050565b5f614c6082614bfb565b614c6a8185614c05565b9350614c7583614c15565b805f5b83811015614ca5578151614c8c8882614c33565b9750614c9783614c4a565b925050600181019050614c78565b5085935050505092915050565b5f60a082019050614cc55f830188613d66565b614cd260208301876143c9565b8181036040830152614ce48186614c56565b9050614cf36060830185613e76565b614d006080830184613d66565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201436777e2359af0696dfd656ed40e4372a112c2410917553532f2e4c10aa158664736f6c63430008150033

Deployed Bytecode

0x608060405260043610610280575f3560e01c8063751039fc1161014e578063a457c2d7116100c0578063c3f70b5211610079578063c3f70b521461094b578063dd62ed3e14610975578063df6f93be146109b1578063f2fde38b146109db578063f9f92be414610a03578063fe575a8714610a2b57610287565b8063a457c2d71461081b578063a9059cbb14610857578063b62496f514610893578063b69ef8a8146108cf578063be857504146108f9578063c02466681461092357610287565b8063945674fe11610112578063945674fe14610749578063957aa58c1461077357806395d89b41146107895780639a7a23d6146107b35780639ee2e924146107db5780639fccce32146107f157610287565b8063751039fc146106a35780637571336a146106b957806375e3661e146106e157806387dd95c0146107095780638da5cb5b1461071f57610287565b806323b872dd116101f25780634fbee193116101ab5780634fbee193146105995780635de0f2a0146105d55780635ec065e7146105ff5780636c7e15c91461062757806370a0823114610651578063715018a61461068d57610287565b806323b872dd14610479578063313ce567146104b557806339509351146104df57806346469afb1461051b57806348d791551461054557806349bd5a5e1461056f57610287565b806318160ddd1161024457806318160ddd146103815780631816467f146103ab5780631a8145bb146103d35780631bff7898146103fd5780631d9305bf1461042757806322eb66311461044f57610287565b806306fdde031461028b578063095ea7b3146102b55780630e947809146102f157806310d5de531461031b5780631694505e1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a67565b6040516102ac9190613ba5565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613c56565b610af7565b6040516102e89190613cae565b60405180910390f35b3480156102fc575f80fd5b50610305610b14565b6040516103129190613cae565b60405180910390f35b348015610326575f80fd5b50610341600480360381019061033c9190613cc7565b610b26565b60405161034e9190613cae565b60405180910390f35b348015610362575f80fd5b5061036b610b43565b6040516103789190613d4d565b60405180910390f35b34801561038c575f80fd5b50610395610b68565b6040516103a29190613d75565b60405180910390f35b3480156103b6575f80fd5b506103d160048036038101906103cc9190613cc7565b610b71565b005b3480156103de575f80fd5b506103e7610cc5565b6040516103f49190613d75565b60405180910390f35b348015610408575f80fd5b50610411610ccb565b60405161041e9190613d75565b60405180910390f35b348015610432575f80fd5b5061044d60048036038101906104489190613d8e565b610cd1565b005b34801561045a575f80fd5b50610463610db5565b6040516104709190613d75565b60405180910390f35b348015610484575f80fd5b5061049f600480360381019061049a9190613df2565b610dbb565b6040516104ac9190613cae565b60405180910390f35b3480156104c0575f80fd5b506104c9610e8f565b6040516104d69190613e5d565b60405180910390f35b3480156104ea575f80fd5b5061050560048036038101906105009190613c56565b610e97565b6040516105129190613cae565b60405180910390f35b348015610526575f80fd5b5061052f610f45565b60405161053c9190613d75565b60405180910390f35b348015610550575f80fd5b50610559610f4b565b6040516105669190613d75565b60405180910390f35b34801561057a575f80fd5b50610583610f51565b6040516105909190613e85565b60405180910390f35b3480156105a4575f80fd5b506105bf60048036038101906105ba9190613cc7565b610f76565b6040516105cc9190613cae565b60405180910390f35b3480156105e0575f80fd5b506105e9610fc8565b6040516105f69190613d75565b60405180910390f35b34801561060a575f80fd5b5061062560048036038101906106209190613ec8565b610fce565b005b348015610632575f80fd5b5061063b611081565b6040516106489190613d75565b60405180910390f35b34801561065c575f80fd5b5061067760048036038101906106729190613cc7565b611087565b6040516106849190613d75565b60405180910390f35b348015610698575f80fd5b506106a16110cc565b005b3480156106ae575f80fd5b506106b761121f565b005b3480156106c4575f80fd5b506106df60048036038101906106da9190613ef3565b6112d0565b005b3480156106ec575f80fd5b5061070760048036038101906107029190613cc7565b6113be565b005b348015610714575f80fd5b5061071d6115e5565b005b34801561072a575f80fd5b5061073361178e565b6040516107409190613e85565b60405180910390f35b348015610754575f80fd5b5061075d6117b6565b60405161076a9190613cae565b60405180910390f35b34801561077e575f80fd5b506107876117c9565b005b348015610794575f80fd5b5061079d611bcf565b6040516107aa9190613ba5565b60405180910390f35b3480156107be575f80fd5b506107d960048036038101906107d49190613ef3565b611c5f565b005b3480156107e6575f80fd5b506107ef611d92565b005b3480156107fc575f80fd5b50610805611ea5565b6040516108129190613d75565b60405180910390f35b348015610826575f80fd5b50610841600480360381019061083c9190613c56565b611eab565b60405161084e9190613cae565b60405180910390f35b348015610862575f80fd5b5061087d60048036038101906108789190613c56565b611f73565b60405161088a9190613cae565b60405180910390f35b34801561089e575f80fd5b506108b960048036038101906108b49190613cc7565b611f90565b6040516108c69190613cae565b60405180910390f35b3480156108da575f80fd5b506108e3611fad565b6040516108f09190613d75565b60405180910390f35b348015610904575f80fd5b5061090d611fb3565b60405161091a9190613d75565b60405180910390f35b34801561092e575f80fd5b5061094960048036038101906109449190613ef3565b611fb9565b005b348015610956575f80fd5b5061095f6120f5565b60405161096c9190613d75565b60405180910390f35b348015610980575f80fd5b5061099b60048036038101906109969190613f31565b6120fb565b6040516109a89190613d75565b60405180910390f35b3480156109bc575f80fd5b506109c561217d565b6040516109d29190613d75565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613cc7565b612183565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613cc7565b6122d7565b005b348015610a36575f80fd5b50610a516004803603810190610a4c9190613cc7565b612500565b604051610a5e9190613cae565b60405180910390f35b606060038054610a7690613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613f9c565b8015610aed5780601f10610ac457610100808354040283529160200191610aed565b820191905f5260205f20905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b5f610b0a610b0361251d565b8484612524565b6001905092915050565b60115f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610b7961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614016565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60155481565b610cd961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e90614016565b60405180910390fd5b8360138190555081601481905550601454601354610d859190614061565b6012819055508260168190555080601781905550601754601654610da99190614061565b60158190555050505050565b60165481565b5f610dc78484846126e7565b610e8484610dd361251d565b610e7f85604051806060016040528060288152602001614d316028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e3661251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b600190509392505050565b5f6012905090565b5f610f3b610ea361251d565b84610f368560015f610eb361251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130f390919063ffffffff16565b612524565b6001905092915050565b60125481565b60105481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b610fd661251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614016565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110d461251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61122761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90614016565b60405180910390fd5b5f60115f6101000a81548160ff021916908315150217905550565b6112d861251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90614016565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113c661251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b9906140de565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614146565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7534c63860313c46c473e4e98328f37017e9674e2162faf1a3ad7a96236c3b7b60405160405180910390a250565b6115ed61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290614016565b60405180910390fd5b5f4790505f81116116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b8906141d4565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117079061421f565b5f6040518083038185875af1925050503d805f8114611741576040519150601f19603f3d011682016040523d82523d5f602084013e611746565b606091505b505090508061178a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117819061427d565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160019054906101000a900460ff1681565b6117d161251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614016565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506118828160016112d0565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561190b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192f91906142af565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611994573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b891906142af565b6040518363ffffffff1660e01b81526004016119d59291906142da565b6020604051808303815f875af11580156119f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1591906142af565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016112d0565b611aac60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613150565b5f4790505f60646057611abe30611087565b611ac89190614301565b611ad2919061436f565b9050611b003060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611b86969594939291906143d8565b60606040518083038185885af1158015611ba2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611bc7919061444b565b505050505050565b606060048054611bde90613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0a90613f9c565b8015611c555780601f10611c2c57610100808354040283529160200191611c55565b820191905f5260205f20905b815481529060010190602001808311611c3857829003601f168201915b5050505050905090565b611c6761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90614016565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b9061450b565b60405180910390fd5b611d8e8282613150565b5050565b611d9a61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90614016565b60405180910390fd5b5f611e3230611087565b90505f8111611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d90614599565b60405180910390fd5b611ea230600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126e7565b50565b60195481565b5f611f69611eb761251d565b84611f6485604051806060016040528060258152602001614d596025913960015f611ee061251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b6001905092915050565b5f611f86611f7f61251d565b84846126e7565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b60175481565b611fc161251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690614016565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120e99190613cae565b60405180910390a25050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60145481565b61218b61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090614016565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122df61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906140de565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90614601565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85560405160405180910390a250565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061471d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126da9190613d75565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614839565b60405180910390fd5b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906148a1565b60405180910390fd5b5f81036128645761285f83835f6131ee565b61308c565b60115f9054906101000a900460ff1615612c585761288061178e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ee57506128be61178e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561292657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600b5f9054906101000a900460ff16155b15612c5757601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a1a5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ac157600e54811115612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b9061492f565b60405180910390fd5b601054612a7083611087565b82612a7b9190614061565b1115612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab390614997565b60405180910390fd5b612c56565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b5e5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bad57600e54811115612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614a25565b60405180910390fd5b612c55565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c5457601054612c0783611087565b82612c129190614061565b1115612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90614997565b60405180910390fd5b5b5b5b5b5b5f612c6230611087565b90505f600f548210159050808015612c865750600b5f9054906101000a900460ff16155b8015612cd95750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d2c5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d7f5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dc0576001600b5f6101000a81548160ff021916908315150217905550612da6613477565b5f600b5f6101000a81548160ff0219169083151502179055505b5f600b5f9054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e6e5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e77575f90505b5f811561307c57601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ed557505f601554115b15612f6d57612f026064612ef46015548861369d90919063ffffffff16565b61371490919063ffffffff16565b905060155460175482612f159190614301565b612f1f919061436f565b60185f828254612f2f9190614061565b9250508190555060155460165482612f479190614301565b612f51919061436f565b60195f828254612f619190614061565b92505081905550613059565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc457505f601254115b1561305857612ff16064612fe36012548861369d90919063ffffffff16565b61371490919063ffffffff16565b9050601254601454826130049190614301565b61300e919061436f565b60185f82825461301e9190614061565b92505081905550601254601354826130369190614301565b613040919061436f565b60195f8282546130509190614061565b925050819055505b5b5f81111561306d5761306c8730836131ee565b5b80856130799190614a43565b94505b6130878787876131ee565b505050505b505050565b5f8383111582906130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9190613ba5565b60405180910390fd5b505f83856130e69190614a43565b9050809150509392505050565b5f8082846131019190614061565b905083811015613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d90614ac0565b60405180910390fd5b8091505092915050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361325c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613253906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c190614839565b60405180910390fd5b6132d583838361375d565b61333e81604051806060016040528060268152602001614d0b602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133cd815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130f390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161346a9190613d75565b60405180910390a3505050565b5f61348130611087565b90505f6019546018546134949190614061565b90505f808314806134a457505f82145b156134b15750505061369b565b5f1515601160019054906101000a900460ff161515036134f8576014600f546134da9190614301565b8311156134f3576014600f546134f09190614301565b92505b613504565b61350130611087565b92505b5f600383601854866135169190614301565b613520919061436f565b61352a919061436f565b90505f613540828661376290919063ffffffff16565b90505f47905061354f826137ab565b5f613563824761376290919063ffffffff16565b90505f61358d8761357f6019548561369d90919063ffffffff16565b61371490919063ffffffff16565b90505f818361359c9190614a43565b90505f6018819055505f6019819055505f861180156135ba57505f81115b15613607576135c986826139e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826018546040516135fe93929190614ade565b60405180910390a15b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364c9061421f565b5f6040518083038185875af1925050503d805f8114613686576040519150601f19603f3d011682016040523d82523d5f602084013e61368b565b606091505b5050809750505050505050505050505b565b5f8083036136ad575f905061370e565b5f82846136ba9190614301565b90508284826136c9919061436f565b14613709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370090614b83565b60405180910390fd5b809150505b92915050565b5f61375583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aba565b905092915050565b505050565b5f6137a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613091565b905092915050565b5f600267ffffffffffffffff8111156137c7576137c6614ba1565b5b6040519080825280602002602001820160405280156137f55781602001602082028036833780820191505090505b50905030815f8151811061380c5761380b614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d491906142af565b816001815181106138e8576138e7614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139b0959493929190614cb2565b5f604051808303815f87803b1580156139c7575f80fd5b505af11580156139d9573d5f803e3d5ffd5b505050505050565b613a0d3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613a72969594939291906143d8565b60606040518083038185885af1158015613a8e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613ab3919061444b565b5050505050565b5f8083118290613b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af79190613ba5565b60405180910390fd5b505f8385613b0e919061436f565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b52578082015181840152602081019050613b37565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b7782613b1b565b613b818185613b25565b9350613b91818560208601613b35565b613b9a81613b5d565b840191505092915050565b5f6020820190508181035f830152613bbd8184613b6d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613bf282613bc9565b9050919050565b613c0281613be8565b8114613c0c575f80fd5b50565b5f81359050613c1d81613bf9565b92915050565b5f819050919050565b613c3581613c23565b8114613c3f575f80fd5b50565b5f81359050613c5081613c2c565b92915050565b5f8060408385031215613c6c57613c6b613bc5565b5b5f613c7985828601613c0f565b9250506020613c8a85828601613c42565b9150509250929050565b5f8115159050919050565b613ca881613c94565b82525050565b5f602082019050613cc15f830184613c9f565b92915050565b5f60208284031215613cdc57613cdb613bc5565b5b5f613ce984828501613c0f565b91505092915050565b5f819050919050565b5f613d15613d10613d0b84613bc9565b613cf2565b613bc9565b9050919050565b5f613d2682613cfb565b9050919050565b5f613d3782613d1c565b9050919050565b613d4781613d2d565b82525050565b5f602082019050613d605f830184613d3e565b92915050565b613d6f81613c23565b82525050565b5f602082019050613d885f830184613d66565b92915050565b5f805f8060808587031215613da657613da5613bc5565b5b5f613db387828801613c42565b9450506020613dc487828801613c42565b9350506040613dd587828801613c42565b9250506060613de687828801613c42565b91505092959194509250565b5f805f60608486031215613e0957613e08613bc5565b5b5f613e1686828701613c0f565b9350506020613e2786828701613c0f565b9250506040613e3886828701613c42565b9150509250925092565b5f60ff82169050919050565b613e5781613e42565b82525050565b5f602082019050613e705f830184613e4e565b92915050565b613e7f81613be8565b82525050565b5f602082019050613e985f830184613e76565b92915050565b613ea781613c94565b8114613eb1575f80fd5b50565b5f81359050613ec281613e9e565b92915050565b5f60208284031215613edd57613edc613bc5565b5b5f613eea84828501613eb4565b91505092915050565b5f8060408385031215613f0957613f08613bc5565b5b5f613f1685828601613c0f565b9250506020613f2785828601613eb4565b9150509250929050565b5f8060408385031215613f4757613f46613bc5565b5b5f613f5485828601613c0f565b9250506020613f6585828601613c0f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fb357607f821691505b602082108103613fc657613fc5613f6f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614000602083613b25565b915061400b82613fcc565b602082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61406b82613c23565b915061407683613c23565b925082820190508082111561408e5761408d614034565b5b92915050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6140c8600f83613b25565b91506140d382614094565b602082019050919050565b5f6020820190508181035f8301526140f5816140bc565b9050919050565b7f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000005f82015250565b5f614130601a83613b25565b915061413b826140fc565b602082019050919050565b5f6020820190508181035f83015261415d81614124565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141be602283613b25565b91506141c982614164565b604082019050919050565b5f6020820190508181035f8301526141eb816141b2565b9050919050565b5f81905092915050565b50565b5f61420a5f836141f2565b9150614215826141fc565b5f82019050919050565b5f614229826141ff565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614267601b83613b25565b915061427282614233565b602082019050919050565b5f6020820190508181035f8301526142948161425b565b9050919050565b5f815190506142a981613bf9565b92915050565b5f602082840312156142c4576142c3613bc5565b5b5f6142d18482850161429b565b91505092915050565b5f6040820190506142ed5f830185613e76565b6142fa6020830184613e76565b9392505050565b5f61430b82613c23565b915061431683613c23565b925082820261432481613c23565b9150828204841483151761433b5761433a614034565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61437982613c23565b915061438483613c23565b92508261439457614393614342565b5b828204905092915050565b5f819050919050565b5f6143c26143bd6143b88461439f565b613cf2565b613c23565b9050919050565b6143d2816143a8565b82525050565b5f60c0820190506143eb5f830189613e76565b6143f86020830188613d66565b61440560408301876143c9565b61441260608301866143c9565b61441f6080830185613e76565b61442c60a0830184613d66565b979650505050505050565b5f8151905061444581613c2c565b92915050565b5f805f6060848603121561446257614461613bc5565b5b5f61446f86828701614437565b935050602061448086828701614437565b925050604061449186828701614437565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6144f5603983613b25565b91506145008261449b565b604082019050919050565b5f6020820190508181035f830152614522816144e9565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f614583602483613b25565b915061458e82614529565b604082019050919050565b5f6020820190508181035f8301526145b081614577565b9050919050565b7f4163636f756e7420697320616c726561647920626c61636b6c697374656400005f82015250565b5f6145eb601e83613b25565b91506145f6826145b7565b602082019050919050565b5f6020820190508181035f830152614618816145df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614679602483613b25565b91506146848261461f565b604082019050919050565b5f6020820190508181035f8301526146a68161466d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614707602283613b25565b9150614712826146ad565b604082019050919050565b5f6020820190508181035f830152614734816146fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614795602583613b25565b91506147a08261473b565b604082019050919050565b5f6020820190508181035f8301526147c281614789565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614823602383613b25565b915061482e826147c9565b604082019050919050565b5f6020820190508181035f83015261485081614817565b9050919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f61488b601583613b25565b915061489682614857565b602082019050919050565b5f6020820190508181035f8301526148b88161487f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614919603583613b25565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614981601383613b25565b915061498c8261494d565b602082019050919050565b5f6020820190508181035f8301526149ae81614975565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614a0f603683613b25565b9150614a1a826149b5565b604082019050919050565b5f6020820190508181035f830152614a3c81614a03565b9050919050565b5f614a4d82613c23565b9150614a5883613c23565b9250828203905081811115614a7057614a6f614034565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614aaa601b83613b25565b9150614ab582614a76565b602082019050919050565b5f6020820190508181035f830152614ad781614a9e565b9050919050565b5f606082019050614af15f830186613d66565b614afe6020830185613d66565b614b0b6040830184613d66565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b6d602183613b25565b9150614b7882614b13565b604082019050919050565b5f6020820190508181035f830152614b9a81614b61565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c2d81613be8565b82525050565b5f614c3e8383614c24565b60208301905092915050565b5f602082019050919050565b5f614c6082614bfb565b614c6a8185614c05565b9350614c7583614c15565b805f5b83811015614ca5578151614c8c8882614c33565b9750614c9783614c4a565b925050600181019050614c78565b5085935050505092915050565b5f60a082019050614cc55f830188613d66565b614cd260208301876143c9565b8181036040830152614ce48186614c56565b9050614cf36060830185613e76565b614d006080830184613d66565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201436777e2359af0696dfd656ed40e4372a112c2410917553532f2e4c10aa158664736f6c63430008150033

Deployed Bytecode Sourcemap

17690:13303:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4953:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5867:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18306:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18879:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17849:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5274:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24869:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18588:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18487:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23833:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18521:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6044:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5173:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6407:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18389:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18265:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17897:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25042:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18223:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23559:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18422:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5390:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10934:148;;;;;;;;;;;;;:::i;:::-;;23469:81;;;;;;;;;;;;;:::i;:::-;;23677:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22580:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22884:313;;;;;;;;;;;;;:::i;:::-;;10720:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18343:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21242:1035;;;;;;;;;;;;;:::i;:::-;;5061:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24418:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23205:256;;;;;;;;;;;;;:::i;:::-;;18628:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6633:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5525:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19102:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18123:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18553:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24227:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18187:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5708:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18453:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11090:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22286:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17936:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4953:100;5007:13;5040:5;5033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4953:100;:::o;5867:169::-;5950:4;5967:39;5976:12;:10;:12::i;:::-;5990:7;5999:6;5967:8;:39::i;:::-;6024:4;6017:11;;5867:169;;;;:::o;18306:30::-;;;;;;;;;;;;;:::o;18879:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17849:41::-;;;;;;;;;;;;;:::o;5274:108::-;5335:7;5362:12;;5355:19;;5274:108;:::o;24869:165::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24981:9:::1;;;;;;;;;;;24950:41;;24967:12;24950:41;;;;;;;;;;;;25014:12;25002:9;;:24;;;;;;;;;;;;;;;;;;24869:165:::0;:::o;18588:33::-;;;;:::o;18487:27::-;;;;:::o;23833:386::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24006:7:::1;23994:9;:19;;;;24036:7;24024:9;:19;;;;24080:9;;24068;;:21;;;;:::i;:::-;24054:11;:35;;;;24113:8;24100:10;:21;;;;24145:8;24132:10;:21;;;;24192:10;;24179;;:23;;;;:::i;:::-;24164:12;:38;;;;23833:386:::0;;;;:::o;18521:25::-;;;;:::o;6044:355::-;6184:4;6201:36;6211:6;6219:9;6230:6;6201:9;:36::i;:::-;6248:121;6257:6;6265:12;:10;:12::i;:::-;6279:89;6317:6;6279:89;;;;;;;;;;;;;;;;;:11;:19;6291:6;6279:19;;;;;;;;;;;;;;;:33;6299:12;:10;:12::i;:::-;6279:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6248:8;:121::i;:::-;6387:4;6380:11;;6044:355;;;;;:::o;5173:93::-;5231:5;5256:2;5249:9;;5173:93;:::o;6407:218::-;6495:4;6512:83;6521:12;:10;:12::i;:::-;6535:7;6544:50;6583:10;6544:11;:25;6556:12;:10;:12::i;:::-;6544:25;;;;;;;;;;;;;;;:34;6570:7;6544:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6512:8;:83::i;:::-;6613:4;6606:11;;6407:218;;;;:::o;18389:26::-;;;;:::o;18265:31::-;;;;:::o;17897:28::-;;;;;;;;;;;;;:::o;25042:125::-;25107:4;25131:19;:28;25151:7;25131:28;;;;;;;;;;;;;;;;;;;;;;;;;25124:35;;25042:125;;;:::o;18223:35::-;;;;:::o;23559:109::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23653:7:::1;23633:17;;:27;;;;;;;;;;;;;;;;;;23559:109:::0;:::o;18422:24::-;;;;:::o;5390:127::-;5464:7;5491:9;:18;5501:7;5491:18;;;;;;;;;;;;;;;;5484:25;;5390:127;;;:::o;10934:148::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11041:1:::1;11004:40;;11025:6;;;;;;;;;;;11004:40;;;;;;;;;;;;11072:1;11055:6;;:19;;;;;;;;;;;;;;;;;;10934:148::o:0;23469:81::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23537:5:::1;23523:11;;:19;;;;;;;;;;;;;;;;;;23469:81::o:0;23677:144::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23809:4:::1;23767:31;:39;23799:6;23767:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23677:144:::0;;:::o;22580:286::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22675:1:::1;22656:21;;:7;:21;;::::0;22648:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22716:13;:22;22730:7;22716:22;;;;;;;;;;;;;;;;;;;;;;;;;22708:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22815:5;22790:13;:22;22804:7;22790:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;22850:7;22836:22;;;;;;;;;;;;22580:286:::0;:::o;22884:313::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22942:18:::1;22963:21;22942:42;;23016:1;23003:10;:14;22995:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23068:12;23093:9;;;;;;;;;;;23085:23;;23116:10;23085:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23067:64;;;23150:7;23142:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22931:266;;22884:313::o:0;10720:79::-;10758:7;10785:6;;;;;;;;;;;10778:13;;10720:79;:::o;18343:37::-;;;;;;;;;;;;;:::o;21242:1035::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21293:35:::1;21350:42;21293:100;;21407:58;21441:16;21460:4;21407:25;:58::i;:::-;21494:16;21476:15;;:34;;;;;;;;;;;;;;;;;;21558:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21540:56;;;21605:4;21612:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21540:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21524:13;;:112;;;;;;;;;;;;;;;;;;21647:55;21681:13;;;;;;;;;;;21697:4;21647:25;:55::i;:::-;21713:58;21750:13;;;;;;;;;;;21766:4;21713:28;:58::i;:::-;21792:17;21812:21;21792:41;;21844:19;21898:3;21893:2;21866:24;21884:4;21866:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21844:57;;21932:62;21949:4;21964:15;;;;;;;;;;;21982:11;21932:8;:62::i;:::-;22007:15;;;;;;;;;;;:31;;;22046:9;22079:4;22099:11;22129:1;22176::::0;22219:9:::1;;;;;;;;;;;22243:15;22007:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21276:1001;;;21242:1035::o:0;5061:104::-;5117:13;5150:7;5143:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5061:104;:::o;24418:245::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24525:13:::1;;;;;;;;;;;24517:21;;:4;:21;;::::0;24509:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24614:41;24643:4;24649:5;24614:28;:41::i;:::-;24418:245:::0;;:::o;23205:256::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23270:20:::1;23293:24;23311:4;23293:9;:24::i;:::-;23270:47;;23351:1;23336:12;:16;23328:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23404:49;23422:4;23429:9;;;;;;;;;;;23440:12;23404:9;:49::i;:::-;23259:202;23205:256::o:0;18628:27::-;;;;:::o;6633:269::-;6726:4;6743:129;6752:12;:10;:12::i;:::-;6766:7;6775:96;6814:15;6775:96;;;;;;;;;;;;;;;;;:11;:25;6787:12;:10;:12::i;:::-;6775:25;;;;;;;;;;;;;;;:34;6801:7;6775:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6743:8;:129::i;:::-;6890:4;6883:11;;6633:269;;;;:::o;5525:175::-;5611:4;5628:42;5638:12;:10;:12::i;:::-;5652:9;5663:6;5628:9;:42::i;:::-;5688:4;5681:11;;5525:175;;;;:::o;19102:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18123:22::-;;;;:::o;18553:25::-;;;;:::o;24227:182::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24343:8:::1;24312:19;:28;24332:7;24312:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24383:7;24367:34;;;24392:8;24367:34;;;;;;:::i;:::-;;;;;;;;24227:182:::0;;:::o;18187:29::-;;;;:::o;5708:151::-;5797:7;5824:11;:18;5836:5;5824:18;;;;;;;;;;;;;;;:27;5843:7;5824:27;;;;;;;;;;;;;;;;5817:34;;5708:151;;;;:::o;18453:24::-;;;;:::o;11090:169::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11214:8:::1;11185:38;;11206:6;;;;;;;;;;;11185:38;;;;;;;;;;;;11243:8;11234:6;;:17;;;;;;;;;;;;;;;;;;11090:169:::0;:::o;22286:286::-;10857:12;:10;:12::i;:::-;10847:22;;:6;;;;;;;;;;;:22;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22379:1:::1;22360:21;;:7;:21;;::::0;22352:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22421:13;:22;22435:7;22421:22;;;;;;;;;;;;;;;;;;;;;;;;;22420:23;22412:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22524:4;22499:13;:22;22513:7;22499:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22556:7;22544:20;;;;;;;;;;;;22286:286:::0;:::o;17936:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;306:98::-;359:7;386:10;379:17;;306:98;:::o;8309:381::-;8462:1;8445:19;;:5;:19;;;8437:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8543:1;8524:21;;:7;:21;;;8516:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8628:6;8598:11;:18;8610:5;8598:18;;;;;;;;;;;;;;;:27;8617:7;8598:27;;;;;;;;;;;;;;;:36;;;;8666:7;8650:32;;8659:5;8650:32;;;8675:6;8650:32;;;;;;:::i;:::-;;;;;;;;8309:381;;;:::o;25176:3193::-;25324:1;25308:18;;:4;:18;;;25300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25401:1;25387:16;;:2;:16;;;25379:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25463:13;:25;25477:10;25463:25;;;;;;;;;;;;;;;;;;;;;;;;;25462:26;25454:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25549:1;25539:6;:11;25536:92;;25567:28;25583:4;25589:2;25593:1;25567:15;:28::i;:::-;25610:7;;25536:92;25644:11;;;;;;;;;;;25641:1083;;;25701:7;:5;:7::i;:::-;25693:15;;:4;:15;;;;:49;;;;;25735:7;:5;:7::i;:::-;25729:13;;:2;:13;;;;25693:49;:86;;;;;25777:1;25763:16;;:2;:16;;;;25693:86;:128;;;;;25814:6;25800:21;;:2;:21;;;;25693:128;:160;;;;;25843:10;;;;;;;;;;;25842:11;25693:160;25671:1042;;;25937:25;:31;25963:4;25937:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25973:31;:35;26005:2;25973:35;;;;;;;;;;;;;;;;;;;;;;;;;25972:36;25937:71;25933:765;;;26055:14;;26045:6;:24;;26037:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;26188:16;;26171:13;26181:2;26171:9;:13::i;:::-;26162:6;:22;;;;:::i;:::-;:42;;26154:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25933:765;;;26307:25;:29;26333:2;26307:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26341:31;:37;26373:4;26341:37;;;;;;;;;;;;;;;;;;;;;;;;;26340:38;26307:71;26303:395;;;26425:14;;26415:6;:24;;26407:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26303:395;;;26545:31;:35;26577:2;26545:35;;;;;;;;;;;;;;;;;;;;;;;;;26541:157;;26638:16;;26621:13;26631:2;26621:9;:13::i;:::-;26612:6;:22;;;;:::i;:::-;:42;;26604:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26541:157;26303:395;25933:765;25671:1042;25641:1083;26737:28;26768:24;26786:4;26768:9;:24::i;:::-;26737:55;;26806:12;26845:20;;26821;:44;;26806:59;;26897:7;:35;;;;;26922:10;;;;;;;;;;;26921:11;26897:35;:84;;;;;26950:25;:31;26976:4;26950:31;;;;;;;;;;;;;;;;;;;;;;;;;26949:32;26897:84;:127;;;;;26999:19;:25;27019:4;26999:25;;;;;;;;;;;;;;;;;;;;;;;;;26998:26;26897:127;:168;;;;;27042:19;:23;27062:2;27042:23;;;;;;;;;;;;;;;;;;;;;;;;;27041:24;26897:168;26879:306;;;27105:4;27092:10;;:17;;;;;;;;;;;;;;;;;;27127:10;:8;:10::i;:::-;27168:5;27155:10;;:18;;;;;;;;;;;;;;;;;;26879:306;27198:12;27214:10;;;;;;;;;;;27213:11;27198:26;;27326:19;:25;27346:4;27326:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27355:19;:23;27375:2;27355:23;;;;;;;;;;;;;;;;;;;;;;;;;27326:52;27323:99;;;27405:5;27395:15;;27323:99;27435:12;27539:7;27536:779;;;27590:25;:29;27616:2;27590:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;27638:1;27623:12;;:16;27590:49;27586:576;;;27666:33;27695:3;27666:24;27677:12;;27666:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27659:40;;27760:12;;27747:10;;27740:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27718:18;;:54;;;;;;;:::i;:::-;;;;;;;;27827:12;;27814:10;;27807:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27791:12;;:48;;;;;;;:::i;:::-;;;;;;;;27586:576;;;27900:25;:31;27926:4;27900:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27949:1;27935:11;;:15;27900:50;27897:265;;;27978:32;28006:3;27978:23;27989:11;;27978:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27971:39;;28070:11;;28058:9;;28051:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;28029:18;;:52;;;;;;;:::i;:::-;;;;;;;;28135:11;;28123:9;;28116:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;28100:12;;:46;;;;;;;:::i;:::-;;;;;;;;27897:265;27586:576;28189:1;28182:4;:8;28179:93;;;28214:42;28230:4;28244;28251;28214:15;:42::i;:::-;28179:93;28299:4;28289:14;;;;;:::i;:::-;;;27536:779;28328:33;28344:4;28350:2;28354:6;28328:15;:33::i;:::-;25289:3080;;;;25176:3193;;;;:::o;9197:193::-;9283:7;9316:1;9311;:6;;9319:12;9303:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9343:9;9359:1;9355;:5;;;;:::i;:::-;9343:17;;9381:1;9374:8;;;9197:193;;;;;:::o;8863:182::-;8921:7;8941:9;8957:1;8953;:5;;;;:::i;:::-;8941:17;;8982:1;8977;:6;;8969:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9036:1;9029:8;;;8863:182;;;;:::o;24672:189::-;24789:5;24755:25;:31;24781:4;24755:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24847:5;24813:40;;24841:4;24813:40;;;;;;;;;;;;24672:189;;:::o;6910:575::-;7068:1;7050:20;;:6;:20;;;7042:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7152:1;7131:23;;:9;:23;;;7123:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7208:47;7229:6;7237:9;7248:6;7208:20;:47::i;:::-;7289:71;7311:6;7289:71;;;;;;;;;;;;;;;;;:9;:17;7299:6;7289:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7269:9;:17;7279:6;7269:17;;;;;;;;;;;;;;;:91;;;;7394:32;7419:6;7394:9;:20;7404:9;7394:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7371:9;:20;7381:9;7371:20;;;;;;;;;;;;;;;:55;;;;7459:9;7442:35;;7451:6;7442:35;;;7470:6;7442:35;;;;;;:::i;:::-;;;;;;;;6910:575;;;:::o;29513:1477::-;29552:23;29578:24;29596:4;29578:9;:24::i;:::-;29552:50;;29613:25;29662:12;;29641:18;;:33;;;;:::i;:::-;29613:61;;29685:12;29733:1;29714:15;:20;:46;;;;29759:1;29738:17;:22;29714:46;29711:60;;;29763:7;;;;;29711:60;29808:5;29787:26;;:17;;;;;;;;;;;:26;;;29784:254;;29873:2;29850:20;;:25;;;;:::i;:::-;29832:15;:43;29829:125;;;29936:2;29913:20;;:25;;;;:::i;:::-;29895:43;;29829:125;29784:254;;;30002:24;30020:4;30002:9;:24::i;:::-;29984:42;;29784:254;30110:23;30195:1;30175:17;30154:18;;30136:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30110:86;;30207:26;30236:36;30256:15;30236;:19;;:36;;;;:::i;:::-;30207:65;;30286:25;30314:21;30286:49;;30349:36;30366:18;30349:16;:36::i;:::-;30400:18;30421:44;30447:17;30421:21;:25;;:44;;;;:::i;:::-;30400:65;;30479:17;30499:51;30532:17;30499:28;30514:12;;30499:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30479:71;;30561:23;30600:9;30587:10;:22;;;;:::i;:::-;30561:48;;30647:1;30626:18;:22;;;;30674:1;30659:12;:16;;;;30710:1;30692:15;:19;:42;;;;;30733:1;30715:15;:19;30692:42;30689:210;;;30750:46;30763:15;30780;30750:12;:46::i;:::-;30816:71;30831:18;30851:15;30868:18;;30816:71;;;;;;;;:::i;:::-;;;;;;;;30689:210;30933:9;;;;;;;;;;;30925:23;;30956:21;30925:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30912:70;;;;;29541:1449;;;;;;;;;29513:1477;:::o;9398:254::-;9456:7;9487:1;9482;:6;9478:47;;9512:1;9505:8;;;;9478:47;9538:9;9554:1;9550;:5;;;;:::i;:::-;9538:17;;9583:1;9578;9574;:5;;;;:::i;:::-;:10;9566:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9643:1;9636:8;;;9398:254;;;;;:::o;9660:132::-;9718:7;9745:39;9749:1;9752;9745:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9738:46;;9660:132;;;;:::o;8698:125::-;;;;:::o;9053:136::-;9111:7;9138:43;9142:1;9145;9138:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9131:50;;9053:136;;;;:::o;28378:597::-;28507:21;28545:1;28531:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28507:40;;28576:4;28558;28563:1;28558:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28602:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28592:4;28597:1;28592:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28638:62;28655:4;28670:15;;;;;;;;;;;28688:11;28638:8;:62::i;:::-;28740:15;;;;;;;;;;;:66;;;28821:11;28847:1;28891:4;28918;28938:15;28740:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28433:542;28378:597;:::o;28984:520::-;29132:62;29149:4;29164:15;;;;;;;;;;;29182:11;29132:8;:62::i;:::-;29238:15;;;;;;;;;;;:31;;;29277:9;29310:4;29330:11;29356:1;29399;29450:4;29470:15;29238:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28984:520;;:::o;9800:279::-;9886:7;9918:1;9914;:5;9921:12;9906:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9945:9;9961:1;9957;:5;;;;:::i;:::-;9945:17;;10070:1;10063:8;;;9800: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:165::-;10853:17;10849:1;10841:6;10837:14;10830:41;10713:165;:::o;10884:366::-;11026:3;11047:67;11111:2;11106:3;11047:67;:::i;:::-;11040:74;;11123:93;11212:3;11123:93;:::i;:::-;11241:2;11236:3;11232:12;11225:19;;10884:366;;;:::o;11256:419::-;11422:4;11460:2;11449:9;11445:18;11437:26;;11509:9;11503:4;11499:20;11495:1;11484:9;11480:17;11473:47;11537:131;11663:4;11537:131;:::i;:::-;11529:139;;11256:419;;;:::o;11681:176::-;11821:28;11817:1;11809:6;11805:14;11798:52;11681:176;:::o;11863:366::-;12005:3;12026:67;12090:2;12085:3;12026:67;:::i;:::-;12019:74;;12102:93;12191:3;12102:93;:::i;:::-;12220:2;12215:3;12211:12;12204:19;;11863:366;;;:::o;12235:419::-;12401:4;12439:2;12428:9;12424:18;12416:26;;12488:9;12482:4;12478:20;12474:1;12463:9;12459:17;12452:47;12516:131;12642:4;12516:131;:::i;:::-;12508:139;;12235:419;;;:::o;12660:221::-;12800:34;12796:1;12788:6;12784:14;12777:58;12869:4;12864:2;12856:6;12852:15;12845:29;12660:221;:::o;12887:366::-;13029:3;13050:67;13114:2;13109:3;13050:67;:::i;:::-;13043:74;;13126:93;13215:3;13126:93;:::i;:::-;13244:2;13239:3;13235:12;13228:19;;12887:366;;;:::o;13259:419::-;13425:4;13463:2;13452:9;13448:18;13440:26;;13512:9;13506:4;13502:20;13498:1;13487:9;13483:17;13476:47;13540:131;13666:4;13540:131;:::i;:::-;13532:139;;13259:419;;;:::o;13684:147::-;13785:11;13822:3;13807:18;;13684:147;;;;:::o;13837:114::-;;:::o;13957:398::-;14116:3;14137:83;14218:1;14213:3;14137:83;:::i;:::-;14130:90;;14229:93;14318:3;14229:93;:::i;:::-;14347:1;14342:3;14338:11;14331:18;;13957:398;;;:::o;14361:379::-;14545:3;14567:147;14710:3;14567:147;:::i;:::-;14560:154;;14731:3;14724:10;;14361:379;;;:::o;14746:177::-;14886:29;14882:1;14874:6;14870:14;14863:53;14746:177;:::o;14929:366::-;15071:3;15092:67;15156:2;15151:3;15092:67;:::i;:::-;15085:74;;15168:93;15257:3;15168:93;:::i;:::-;15286:2;15281:3;15277:12;15270:19;;14929:366;;;:::o;15301:419::-;15467:4;15505:2;15494:9;15490:18;15482:26;;15554:9;15548:4;15544:20;15540:1;15529:9;15525:17;15518:47;15582:131;15708:4;15582:131;:::i;:::-;15574:139;;15301:419;;;:::o;15726:143::-;15783:5;15814:6;15808:13;15799:22;;15830:33;15857:5;15830:33;:::i;:::-;15726:143;;;;:::o;15875:351::-;15945:6;15994:2;15982:9;15973:7;15969:23;15965:32;15962:119;;;16000:79;;:::i;:::-;15962:119;16120:1;16145:64;16201:7;16192:6;16181:9;16177:22;16145:64;:::i;:::-;16135:74;;16091:128;15875:351;;;;:::o;16232:332::-;16353:4;16391:2;16380:9;16376:18;16368:26;;16404:71;16472:1;16461:9;16457:17;16448:6;16404:71;:::i;:::-;16485:72;16553:2;16542:9;16538:18;16529:6;16485:72;:::i;:::-;16232:332;;;;;:::o;16570:410::-;16610:7;16633:20;16651:1;16633:20;:::i;:::-;16628:25;;16667:20;16685:1;16667:20;:::i;:::-;16662:25;;16722:1;16719;16715:9;16744:30;16762:11;16744:30;:::i;:::-;16733:41;;16923:1;16914:7;16910:15;16907:1;16904:22;16884:1;16877:9;16857:83;16834:139;;16953:18;;:::i;:::-;16834:139;16618:362;16570:410;;;;:::o;16986:180::-;17034:77;17031:1;17024:88;17131:4;17128:1;17121:15;17155:4;17152:1;17145:15;17172:185;17212:1;17229:20;17247:1;17229:20;:::i;:::-;17224:25;;17263:20;17281:1;17263:20;:::i;:::-;17258:25;;17302:1;17292:35;;17307:18;;:::i;:::-;17292:35;17349:1;17346;17342:9;17337:14;;17172:185;;;;:::o;17363:85::-;17408:7;17437:5;17426:16;;17363:85;;;:::o;17454:158::-;17512:9;17545:61;17563:42;17572:32;17598:5;17572:32;:::i;:::-;17563:42;:::i;:::-;17545:61;:::i;:::-;17532:74;;17454:158;;;:::o;17618:147::-;17713:45;17752:5;17713:45;:::i;:::-;17708:3;17701:58;17618:147;;:::o;17771:807::-;18020:4;18058:3;18047:9;18043:19;18035:27;;18072:71;18140:1;18129:9;18125:17;18116:6;18072:71;:::i;:::-;18153:72;18221:2;18210:9;18206:18;18197:6;18153:72;:::i;:::-;18235:80;18311:2;18300:9;18296:18;18287:6;18235:80;:::i;:::-;18325;18401:2;18390:9;18386:18;18377:6;18325:80;:::i;:::-;18415:73;18483:3;18472:9;18468:19;18459:6;18415:73;:::i;:::-;18498;18566:3;18555:9;18551:19;18542:6;18498:73;:::i;:::-;17771:807;;;;;;;;;:::o;18584:143::-;18641:5;18672:6;18666:13;18657:22;;18688:33;18715:5;18688:33;:::i;:::-;18584:143;;;;:::o;18733:663::-;18821:6;18829;18837;18886:2;18874:9;18865:7;18861:23;18857:32;18854:119;;;18892:79;;:::i;:::-;18854:119;19012:1;19037:64;19093:7;19084:6;19073:9;19069:22;19037:64;:::i;:::-;19027:74;;18983:128;19150:2;19176:64;19232:7;19223:6;19212:9;19208:22;19176:64;:::i;:::-;19166:74;;19121:129;19289:2;19315:64;19371:7;19362:6;19351:9;19347:22;19315:64;:::i;:::-;19305:74;;19260:129;18733:663;;;;;:::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://1436777e2359af0696dfd656ed40e4372a112c2410917553532f2e4c10aa1586
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.