ETH Price: $2,621.28 (+0.93%)

Token

Bitcoin Protocol (SEGWIT)
 

Overview

Max Total Supply

1,000,000,000,000,000,000 SEGWIT

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
189,050,000,000,000 SEGWIT

Value
$0.00
0x17f50ea08ebd0bd4148de58e57c72c08803c5634
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:
SEGWIT

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-25
*/

/**
https://twitter.com/SegwitERC
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        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;

        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) {
        require(b != -1 || a != MIN_INT256);

        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 SEGWIT is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) private _isSniper;
    bool private _swapping;
    uint256 private _launchTime;

    address public feeWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyLiquidityFee;
    uint256 private _buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellLiquidityFee;
    uint256 private _sellDevFee;
    
    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForDev;
    
    /******************/

    // exlcude 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 feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event AutoNukeLP();
    event ManualNukeLP();

    constructor() ERC20("Bitcoin Protocol", "SEGWIT") {
        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 buyMarketingFee = 0;
        uint256 buyLiquidityFee = 0;
        uint256 buyDevFee = 0;

        uint256 sellMarketingFee = 0;
        uint256 sellLiquidityFee = 0;
        uint256 sellDevFee = 0;
        
        uint256 totalSupply = 1e18 * 1e9;
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet

        _buyMarketingFee = buyMarketingFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyDevFee = buyDevFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee + _buyDevFee;
        
        _sellMarketingFee = sellMarketingFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellDevFee = sellDevFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee;
        
        feeWallet = address(owner()); // set as fee wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e9, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e9;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e9;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner {
        _buyMarketingFee = marketingFee;
        _buyLiquidityFee = liquidityFee;
        _buyDevFee = devFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee + _buyDevFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
    
    function updateSellFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner {
        _sellMarketingFee = marketingFee;
        _sellLiquidityFee = liquidityFee;
        _sellDevFee = devFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee;
    }

    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 updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            if (snipers_[i] != uniswapV2Pair && snipers_[i] != address(uniswapV2Router)) {
                _isSniper[snipers_[i]] = true;
            }
        }
    }
    
    function delSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            _isSniper[snipers_[i]] = false;
        }
    }
    
    function isSniper(address addr) public view returns (bool) {
        return _isSniper[addr];
    }

    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(!_isSniper[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (block.timestamp == _launchTime) _isSniper[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // 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] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                _tokensForLiquidity += fees * _sellLiquidityFee / sellTotalFees;
                _tokensForDev += fees * _sellDevFee / sellTotalFees;
                _tokensForMarketing += fees * _sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / buyTotalFees;
                _tokensForDev += fees * _buyDevFee / buyTotalFees;
                _tokensForMarketing += fees * _buyMarketingFee / buyTotalFees;
            }
            
            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
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForDev;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount * 20) {
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(_tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDev = 0;
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function withdrawFees() external {
        payable(feeWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

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"},{"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":"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":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"delSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"setSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280601081526020017f426974636f696e2050726f746f636f6c000000000000000000000000000000008152506040518060400160405280600681526020017f53454757495400000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000b0a565b5080600490805190602001906200010092919062000b0a565b505050600062000115620005d660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001e0816001620005de60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000286919062000c24565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000c24565b6040518363ffffffff1660e01b81526004016200033392919062000c67565b6020604051808303816000875af115801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000c24565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003c160a0516001620005de60201b60201c565b620003d660a0516001620006db60201b60201c565b60008060008060008060006b033b2e3c9fd0803ce80000009050606460028262000401919062000ccd565b6200040d919062000d5d565b600a81905550606460028262000424919062000ccd565b62000430919062000d5d565b600c81905550612710600a8262000448919062000ccd565b62000454919062000d5d565b600b8190555086601181905550856012819055508460138190555060135460125460115462000484919062000d95565b62000490919062000d95565b601081905550836015819055508260168190555081601781905550601754601654601554620004c0919062000d95565b620004cc919062000d95565b601481905550620004e26200077c60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000544620005366200077c60201b60201c565b6001620007a660201b60201c565b62000557306001620007a660201b60201c565b6200056c61dead6001620007a660201b60201c565b6200058e620005806200077c60201b60201c565b6001620005de60201b60201c565b620005a1306001620005de60201b60201c565b620005b661dead6001620005de60201b60201c565b620005c83382620008f360201b60201c565b505050505050505062001026565b600033905090565b620005ee620005d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000680576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006779062000e53565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007b6620005d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083f9062000e53565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008e7919062000e92565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000966576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200095d9062000eff565b60405180910390fd5b6200097a6000838362000aa260201b60201c565b620009968160025462000aa760201b6200242b1790919060201c565b600281905550620009f4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000aa760201b6200242b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a96919062000f32565b60405180910390a35050565b505050565b600080828462000ab8919062000d95565b90508381101562000b00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af79062000f9f565b60405180910390fd5b8091505092915050565b82805462000b189062000ff0565b90600052602060002090601f01602090048101928262000b3c576000855562000b88565b82601f1062000b5757805160ff191683800117855562000b88565b8280016001018555821562000b88579182015b8281111562000b8757825182559160200191906001019062000b6a565b5b50905062000b97919062000b9b565b5090565b5b8082111562000bb657600081600090555060010162000b9c565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bec8262000bbf565b9050919050565b62000bfe8162000bdf565b811462000c0a57600080fd5b50565b60008151905062000c1e8162000bf3565b92915050565b60006020828403121562000c3d5762000c3c62000bba565b5b600062000c4d8482850162000c0d565b91505092915050565b62000c618162000bdf565b82525050565b600060408201905062000c7e600083018562000c56565b62000c8d602083018462000c56565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cda8262000c94565b915062000ce78362000c94565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d235762000d2262000c9e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d6a8262000c94565b915062000d778362000c94565b92508262000d8a5762000d8962000d2e565b5b828204905092915050565b600062000da28262000c94565b915062000daf8362000c94565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000de75762000de662000c9e565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e3b60208362000df2565b915062000e488262000e03565b602082019050919050565b6000602082019050818103600083015262000e6e8162000e2c565b9050919050565b60008115159050919050565b62000e8c8162000e75565b82525050565b600060208201905062000ea9600083018462000e81565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ee7601f8362000df2565b915062000ef48262000eaf565b602082019050919050565b6000602082019050818103600083015262000f1a8162000ed8565b9050919050565b62000f2c8162000c94565b82525050565b600060208201905062000f49600083018462000f21565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f87601b8362000df2565b915062000f948262000f4f565b602082019050919050565b6000602082019050818103600083015262000fba8162000f78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200100957607f821691505b6020821081141562001020576200101f62000fc1565b5b50919050565b60805160a0516154606200109260003960008181610ed90152818161100901528181611a720152612b04015260008181610b890152818161107a01528181612aac01528181613ae301528181613bc401528181613beb01528181613c870152613cae01526154606000f3fe60806040526004361061026b5760003560e01c8063892ba40811610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b8063a457c2d711610108578063a457c2d714610734578063a9059cbb14610771578063b62496f5146107ae578063bbc0c742146107eb578063c024666814610816578063c17b5b8c1461083f57610272565b8063892ba408146106755780638a8c523c1461069e5780638da5cb5b146106b557806395d89b41146106e05780639a7a23d61461070b57610272565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e1461057957806370a08231146105a4578063715018a6146105e1578063751039fc146105f85780637571336a146106235780638095d5641461064c57610272565b806349bd5a5e146104945780634a62bb65146104bf5780634fbee193146104ea5780635e80148e14610527578063667185241461055057610272565b806318160ddd1161022f57806318160ddd14610384578063203e727e146103af57806323b872dd146103d8578063313ce567146104155780633950935114610440578063476343ee1461047d57610272565b806306fdde0314610277578063095ea7b3146102a25780630f3a325f146102df57806310d5de531461031c5780631694505e1461035957610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a61565b6040516102999190613e5e565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190613f28565b610af3565b6040516102d69190613f83565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613f9e565b610b11565b6040516103139190613f83565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613f9e565b610b67565b6040516103509190613f83565b60405180910390f35b34801561036557600080fd5b5061036e610b87565b60405161037b919061402a565b60405180910390f35b34801561039057600080fd5b50610399610bab565b6040516103a69190614054565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d1919061406f565b610bb5565b005b3480156103e457600080fd5b506103ff60048036038101906103fa919061409c565b610cd7565b60405161040c9190613f83565b60405180910390f35b34801561042157600080fd5b5061042a610db0565b604051610437919061410b565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613f28565b610db9565b6040516104749190613f83565b60405180910390f35b34801561048957600080fd5b50610492610e6c565b005b3480156104a057600080fd5b506104a9610ed7565b6040516104b69190614135565b60405180910390f35b3480156104cb57600080fd5b506104d4610efb565b6040516104e19190613f83565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613f9e565b610f0e565b60405161051e9190613f83565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614298565b610f64565b005b34801561055c57600080fd5b5061057760048036038101906105729190613f9e565b611172565b005b34801561058557600080fd5b5061058e6112c9565b60405161059b9190614054565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613f9e565b6112cf565b6040516105d89190614054565b60405180910390f35b3480156105ed57600080fd5b506105f6611317565b005b34801561060457600080fd5b5061060d61146f565b60405161061a9190613f83565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603810190610645919061430d565b61152a565b005b34801561065857600080fd5b50610673600480360381019061066e919061434d565b61161c565b005b34801561068157600080fd5b5061069c60048036038101906106979190614298565b611736565b005b3480156106aa57600080fd5b506106b3611862565b005b3480156106c157600080fd5b506106ca61191d565b6040516106d79190614135565b60405180910390f35b3480156106ec57600080fd5b506106f5611947565b6040516107029190613e5e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d919061430d565b6119d9565b005b34801561074057600080fd5b5061075b60048036038101906107569190613f28565b611b0d565b6040516107689190613f83565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613f28565b611bda565b6040516107a59190613f83565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613f9e565b611bf8565b6040516107e29190613f83565b60405180910390f35b3480156107f757600080fd5b50610800611c18565b60405161080d9190613f83565b60405180910390f35b34801561082257600080fd5b5061083d6004803603810190610838919061430d565b611c2b565b005b34801561084b57600080fd5b506108666004803603810190610861919061434d565b611d6b565b005b34801561087457600080fd5b5061088f600480360381019061088a919061406f565b611e3f565b005b34801561089d57600080fd5b506108a6611f61565b6040516108b39190613f83565b60405180910390f35b3480156108c857600080fd5b506108d1611f74565b6040516108de9190614054565b60405180910390f35b3480156108f357600080fd5b5061090e6004803603810190610909919061406f565b611f7a565b60405161091b9190613f83565b60405180910390f35b34801561093057600080fd5b506109396120ea565b6040516109469190614054565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906143a0565b6120f0565b6040516109839190614054565b60405180910390f35b34801561099857600080fd5b506109a1612177565b6040516109ae9190614054565b60405180910390f35b3480156109c357600080fd5b506109cc61217d565b6040516109d99190613f83565b60405180910390f35b3480156109ee57600080fd5b506109f7612238565b604051610a049190614135565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f9e565b61225e565b005b348015610a4257600080fd5b50610a4b612425565b604051610a589190614054565b60405180910390f35b606060038054610a709061440f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c9061440f565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b5050505050905090565b6000610b07610b00612489565b8484612491565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610bbd612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c439061448d565b60405180910390fd5b633b9aca006103e86001610c5e610bab565b610c6891906144dc565b610c729190614565565b610c7c9190614565565b811015610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590614608565b60405180910390fd5b633b9aca0081610cce91906144dc565b600a8190555050565b6000610ce484848461265c565b610da584610cf0612489565b610da0856040518060600160405280602881526020016153de60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d56612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b612491565b600190509392505050565b60006009905090565b6000610e62610dc6612489565b84610e5d8560016000610dd7612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242b90919063ffffffff16565b612491565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ed4573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f6c612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff29061448d565b60405180910390fd5b60005b815181101561116e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061105157611050614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156110e357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106110c2576110c1614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b1561115b5760016006600084848151811061110157611100614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061116690614657565b915050610ffe565b5050565b61117a612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061448d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131f612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a59061448d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611479612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff9061448d565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611532612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061448d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611624612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa9061448d565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546116db91906146a0565b6116e591906146a0565b601081905550600a6010541115611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614742565b60405180910390fd5b505050565b61173e612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49061448d565b60405180910390fd5b60005b815181101561185e576000600660008484815181106117f2576117f1614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185690614657565b9150506117d0565b5050565b61186a612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f09061448d565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119569061440f565b80601f01602080910402602001604051908101604052809291908181526020018280546119829061440f565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b5050505050905090565b6119e1612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061448d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906147d4565b60405180910390fd5b611b098282613432565b5050565b6000611bd0611b1a612489565b84611bcb856040518060600160405280602581526020016154066025913960016000611b44612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b612491565b6001905092915050565b6000611bee611be7612489565b848461265c565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611c33612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb99061448d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d5f9190613f83565b60405180910390a25050565b611d73612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99061448d565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611e2a91906146a0565b611e3491906146a0565b601481905550505050565b611e47612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd9061448d565b60405180910390fd5b633b9aca006103e86005611ee8610bab565b611ef291906144dc565b611efc9190614565565b611f069190614565565b811015611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90614866565b60405180910390fd5b633b9aca0081611f5891906144dc565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611f84612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a9061448d565b60405180910390fd5b620186a06001612021610bab565b61202b91906144dc565b6120359190614565565b821015612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906148f8565b60405180910390fd5b6103e86005612084610bab565b61208e91906144dc565b6120989190614565565b8211156120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d19061498a565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612187612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d9061448d565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612266612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ec9061448d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614a1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461243a91906146a0565b90508381101561247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690614a88565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890614b1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256890614bac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161264f9190614054565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390614cd0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090614d88565b60405180910390fd5b60008114156127e3576127de838360006134d3565b6133c9565b600854421415612846576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f095761286361191d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128d157506128a161191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612944575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295d5750600760009054906101000a900460ff16155b15612f0857600d60019054906101000a900460ff16612a5757601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a175750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90614df4565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c1f57612a7461191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612afb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b5357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c1e5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614eac565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cc25750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6957600a54811115612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390614f3e565b60405180910390fd5b600c54612d18836112cf565b82612d2391906146a0565b1115612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b90614faa565b60405180910390fd5b612f07565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e0c5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5b57600a54811115612e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4d9061503c565b60405180910390fd5b612f06565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0557600c54612eb8836112cf565b82612ec391906146a0565b1115612f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efb90614faa565b60405180910390fd5b5b5b5b5b5b6000612f14306112cf565b90506000600b548210159050808015612f3a5750600760009054906101000a900460ff16155b8015612f905750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fe65750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561303c5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613080576001600760006101000a81548160ff021916908315150217905550613064613768565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131365750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561314057600090505b600081156133b957601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a357506000601454115b15613270576131d060646131c26014548861393090919063ffffffff16565b6139ab90919063ffffffff16565b9050601454601654826131e391906144dc565b6131ed9190614565565b601960008282546131fe91906146a0565b925050819055506014546017548261321691906144dc565b6132209190614565565b601a600082825461323191906146a0565b925050819055506014546015548261324991906144dc565b6132539190614565565b6018600082825461326491906146a0565b92505081905550613395565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132cb57506000601054115b15613394576132f860646132ea6010548861393090919063ffffffff16565b6139ab90919063ffffffff16565b90506010546012548261330b91906144dc565b6133159190614565565b6019600082825461332691906146a0565b925050819055506010546013548261333e91906144dc565b6133489190614565565b601a600082825461335991906146a0565b925050819055506010546011548261337191906144dc565b61337b9190614565565b6018600082825461338c91906146a0565b925050819055505b5b60008111156133aa576133a98730836134d3565b5b80856133b6919061505c565b94505b6133c48787876134d3565b505050505b505050565b6000838311158290613416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340d9190613e5e565b60405180910390fd5b5060008385613425919061505c565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353a90614c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135aa90614cd0565b60405180910390fd5b6135be8383836139f5565b613629816040518060600160405280602681526020016153b8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136bc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375b9190614054565b60405180910390a3505050565b6000613773306112cf565b90506000601a5460185460195461378a91906146a0565b61379491906146a0565b905060008214806137a55750600081145b156137b157505061392e565b6014600b546137c091906144dc565b8211156137d9576014600b546137d691906144dc565b91505b6000600282601954856137ec91906144dc565b6137f69190614565565b6138009190614565565b9050600061381782856139fa90919063ffffffff16565b9050600047905061382782613a44565b600061383c82476139fa90919063ffffffff16565b90506000613867866138596018548561393090919063ffffffff16565b6139ab90919063ffffffff16565b9050600061389287613884601a548661393090919063ffffffff16565b6139ab90919063ffffffff16565b905060008183856138a3919061505c565b6138ad919061505c565b9050600060198190555060006018819055506000601a819055506000871180156138d75750600081115b15613924576138e68782613c81565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161391b93929190615090565b60405180910390a15b5050505050505050505b565b60008083141561394357600090506139a5565b6000828461395191906144dc565b90508284826139609190614565565b146139a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399790615139565b60405180910390fd5b809150505b92915050565b60006139ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d62565b905092915050565b505050565b6000613a3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133ce565b905092915050565b6000600267ffffffffffffffff811115613a6157613a60614155565b5b604051908082528060200260200182016040528015613a8f5781602001602082028036833780820191505090505b5090503081600081518110613aa757613aa6614628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b70919061516e565b81600181518110613b8457613b83614628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613be9307f000000000000000000000000000000000000000000000000000000000000000084612491565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c4b959493929190615294565b600060405180830381600087803b158015613c6557600080fd5b505af1158015613c79573d6000803e3d6000fd5b505050505050565b613cac307f000000000000000000000000000000000000000000000000000000000000000084612491565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cf661191d565b426040518863ffffffff1660e01b8152600401613d18969594939291906152ee565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b9190615364565b5050505050565b60008083118290613da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da09190613e5e565b60405180910390fd5b5060008385613db89190614565565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dff578082015181840152602081019050613de4565b83811115613e0e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e3082613dc5565b613e3a8185613dd0565b9350613e4a818560208601613de1565b613e5381613e14565b840191505092915050565b60006020820190508181036000830152613e788184613e25565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ebf82613e94565b9050919050565b613ecf81613eb4565b8114613eda57600080fd5b50565b600081359050613eec81613ec6565b92915050565b6000819050919050565b613f0581613ef2565b8114613f1057600080fd5b50565b600081359050613f2281613efc565b92915050565b60008060408385031215613f3f57613f3e613e8a565b5b6000613f4d85828601613edd565b9250506020613f5e85828601613f13565b9150509250929050565b60008115159050919050565b613f7d81613f68565b82525050565b6000602082019050613f986000830184613f74565b92915050565b600060208284031215613fb457613fb3613e8a565b5b6000613fc284828501613edd565b91505092915050565b6000819050919050565b6000613ff0613feb613fe684613e94565b613fcb565b613e94565b9050919050565b600061400282613fd5565b9050919050565b600061401482613ff7565b9050919050565b61402481614009565b82525050565b600060208201905061403f600083018461401b565b92915050565b61404e81613ef2565b82525050565b60006020820190506140696000830184614045565b92915050565b60006020828403121561408557614084613e8a565b5b600061409384828501613f13565b91505092915050565b6000806000606084860312156140b5576140b4613e8a565b5b60006140c386828701613edd565b93505060206140d486828701613edd565b92505060406140e586828701613f13565b9150509250925092565b600060ff82169050919050565b614105816140ef565b82525050565b600060208201905061412060008301846140fc565b92915050565b61412f81613eb4565b82525050565b600060208201905061414a6000830184614126565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61418d82613e14565b810181811067ffffffffffffffff821117156141ac576141ab614155565b5b80604052505050565b60006141bf613e80565b90506141cb8282614184565b919050565b600067ffffffffffffffff8211156141eb576141ea614155565b5b602082029050602081019050919050565b600080fd5b600061421461420f846141d0565b6141b5565b90508083825260208201905060208402830185811115614237576142366141fc565b5b835b81811015614260578061424c8882613edd565b845260208401935050602081019050614239565b5050509392505050565b600082601f83011261427f5761427e614150565b5b813561428f848260208601614201565b91505092915050565b6000602082840312156142ae576142ad613e8a565b5b600082013567ffffffffffffffff8111156142cc576142cb613e8f565b5b6142d88482850161426a565b91505092915050565b6142ea81613f68565b81146142f557600080fd5b50565b600081359050614307816142e1565b92915050565b6000806040838503121561432457614323613e8a565b5b600061433285828601613edd565b9250506020614343858286016142f8565b9150509250929050565b60008060006060848603121561436657614365613e8a565b5b600061437486828701613f13565b935050602061438586828701613f13565b925050604061439686828701613f13565b9150509250925092565b600080604083850312156143b7576143b6613e8a565b5b60006143c585828601613edd565b92505060206143d685828601613edd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442757607f821691505b6020821081141561443b5761443a6143e0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614477602083613dd0565b915061448282614441565b602082019050919050565b600060208201905081810360008301526144a68161446a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e782613ef2565b91506144f283613ef2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452b5761452a6144ad565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061457082613ef2565b915061457b83613ef2565b92508261458b5761458a614536565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145f2602f83613dd0565b91506145fd82614596565b604082019050919050565b60006020820190508181036000830152614621816145e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061466282613ef2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614695576146946144ad565b5b600182019050919050565b60006146ab82613ef2565b91506146b683613ef2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146eb576146ea6144ad565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061472c601d83613dd0565b9150614737826146f6565b602082019050919050565b6000602082019050818103600083015261475b8161471f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147be603983613dd0565b91506147c982614762565b604082019050919050565b600060208201905081810360008301526147ed816147b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614850602483613dd0565b915061485b826147f4565b604082019050919050565b6000602082019050818103600083015261487f81614843565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148e2603583613dd0565b91506148ed82614886565b604082019050919050565b60006020820190508181036000830152614911816148d5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614974603483613dd0565b915061497f82614918565b604082019050919050565b600060208201905081810360008301526149a381614967565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a06602683613dd0565b9150614a11826149aa565b604082019050919050565b60006020820190508181036000830152614a35816149f9565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a72601b83613dd0565b9150614a7d82614a3c565b602082019050919050565b60006020820190508181036000830152614aa181614a65565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b04602483613dd0565b9150614b0f82614aa8565b604082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b96602283613dd0565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c28602583613dd0565b9150614c3382614bcc565b604082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cba602383613dd0565b9150614cc582614c5e565b604082019050919050565b60006020820190508181036000830152614ce981614cad565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d72604d83613dd0565b9150614d7d82614cf0565b606082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614dde601683613dd0565b9150614de982614da8565b602082019050919050565b60006020820190508181036000830152614e0d81614dd1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e96604983613dd0565b9150614ea182614e14565b606082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614f28603583613dd0565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f94601383613dd0565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615026603683613dd0565b915061503182614fca565b604082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613ef2565b915061507283613ef2565b925082821015615085576150846144ad565b5b828203905092915050565b60006060820190506150a56000830186614045565b6150b26020830185614045565b6150bf6040830184614045565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615123602183613dd0565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b60008151905061516881613ec6565b92915050565b60006020828403121561518457615183613e8a565b5b600061519284828501615159565b91505092915050565b6000819050919050565b60006151c06151bb6151b68461519b565b613fcb565b613ef2565b9050919050565b6151d0816151a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61520b81613eb4565b82525050565b600061521d8383615202565b60208301905092915050565b6000602082019050919050565b6000615241826151d6565b61524b81856151e1565b9350615256836151f2565b8060005b8381101561528757815161526e8882615211565b975061527983615229565b92505060018101905061525a565b5085935050505092915050565b600060a0820190506152a96000830188614045565b6152b660208301876151c7565b81810360408301526152c88186615236565b90506152d76060830185614126565b6152e46080830184614045565b9695505050505050565b600060c0820190506153036000830189614126565b6153106020830188614045565b61531d60408301876151c7565b61532a60608301866151c7565b6153376080830185614126565b61534460a0830184614045565b979650505050505050565b60008151905061535e81613efc565b92915050565b60008060006060848603121561537d5761537c613e8a565b5b600061538b8682870161534f565b935050602061539c8682870161534f565b92505060406153ad8682870161534f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b54668bec45265f3d6c06fdbce39c73621af0d07264fcd48ef5273605e7e5bda64736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063892ba40811610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b8063a457c2d711610108578063a457c2d714610734578063a9059cbb14610771578063b62496f5146107ae578063bbc0c742146107eb578063c024666814610816578063c17b5b8c1461083f57610272565b8063892ba408146106755780638a8c523c1461069e5780638da5cb5b146106b557806395d89b41146106e05780639a7a23d61461070b57610272565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e1461057957806370a08231146105a4578063715018a6146105e1578063751039fc146105f85780637571336a146106235780638095d5641461064c57610272565b806349bd5a5e146104945780634a62bb65146104bf5780634fbee193146104ea5780635e80148e14610527578063667185241461055057610272565b806318160ddd1161022f57806318160ddd14610384578063203e727e146103af57806323b872dd146103d8578063313ce567146104155780633950935114610440578063476343ee1461047d57610272565b806306fdde0314610277578063095ea7b3146102a25780630f3a325f146102df57806310d5de531461031c5780631694505e1461035957610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a61565b6040516102999190613e5e565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190613f28565b610af3565b6040516102d69190613f83565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613f9e565b610b11565b6040516103139190613f83565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613f9e565b610b67565b6040516103509190613f83565b60405180910390f35b34801561036557600080fd5b5061036e610b87565b60405161037b919061402a565b60405180910390f35b34801561039057600080fd5b50610399610bab565b6040516103a69190614054565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d1919061406f565b610bb5565b005b3480156103e457600080fd5b506103ff60048036038101906103fa919061409c565b610cd7565b60405161040c9190613f83565b60405180910390f35b34801561042157600080fd5b5061042a610db0565b604051610437919061410b565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613f28565b610db9565b6040516104749190613f83565b60405180910390f35b34801561048957600080fd5b50610492610e6c565b005b3480156104a057600080fd5b506104a9610ed7565b6040516104b69190614135565b60405180910390f35b3480156104cb57600080fd5b506104d4610efb565b6040516104e19190613f83565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613f9e565b610f0e565b60405161051e9190613f83565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614298565b610f64565b005b34801561055c57600080fd5b5061057760048036038101906105729190613f9e565b611172565b005b34801561058557600080fd5b5061058e6112c9565b60405161059b9190614054565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613f9e565b6112cf565b6040516105d89190614054565b60405180910390f35b3480156105ed57600080fd5b506105f6611317565b005b34801561060457600080fd5b5061060d61146f565b60405161061a9190613f83565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603810190610645919061430d565b61152a565b005b34801561065857600080fd5b50610673600480360381019061066e919061434d565b61161c565b005b34801561068157600080fd5b5061069c60048036038101906106979190614298565b611736565b005b3480156106aa57600080fd5b506106b3611862565b005b3480156106c157600080fd5b506106ca61191d565b6040516106d79190614135565b60405180910390f35b3480156106ec57600080fd5b506106f5611947565b6040516107029190613e5e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d919061430d565b6119d9565b005b34801561074057600080fd5b5061075b60048036038101906107569190613f28565b611b0d565b6040516107689190613f83565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613f28565b611bda565b6040516107a59190613f83565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613f9e565b611bf8565b6040516107e29190613f83565b60405180910390f35b3480156107f757600080fd5b50610800611c18565b60405161080d9190613f83565b60405180910390f35b34801561082257600080fd5b5061083d6004803603810190610838919061430d565b611c2b565b005b34801561084b57600080fd5b506108666004803603810190610861919061434d565b611d6b565b005b34801561087457600080fd5b5061088f600480360381019061088a919061406f565b611e3f565b005b34801561089d57600080fd5b506108a6611f61565b6040516108b39190613f83565b60405180910390f35b3480156108c857600080fd5b506108d1611f74565b6040516108de9190614054565b60405180910390f35b3480156108f357600080fd5b5061090e6004803603810190610909919061406f565b611f7a565b60405161091b9190613f83565b60405180910390f35b34801561093057600080fd5b506109396120ea565b6040516109469190614054565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906143a0565b6120f0565b6040516109839190614054565b60405180910390f35b34801561099857600080fd5b506109a1612177565b6040516109ae9190614054565b60405180910390f35b3480156109c357600080fd5b506109cc61217d565b6040516109d99190613f83565b60405180910390f35b3480156109ee57600080fd5b506109f7612238565b604051610a049190614135565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f9e565b61225e565b005b348015610a4257600080fd5b50610a4b612425565b604051610a589190614054565b60405180910390f35b606060038054610a709061440f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c9061440f565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b5050505050905090565b6000610b07610b00612489565b8484612491565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610bbd612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c439061448d565b60405180910390fd5b633b9aca006103e86001610c5e610bab565b610c6891906144dc565b610c729190614565565b610c7c9190614565565b811015610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590614608565b60405180910390fd5b633b9aca0081610cce91906144dc565b600a8190555050565b6000610ce484848461265c565b610da584610cf0612489565b610da0856040518060600160405280602881526020016153de60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d56612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b612491565b600190509392505050565b60006009905090565b6000610e62610dc6612489565b84610e5d8560016000610dd7612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242b90919063ffffffff16565b612491565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ed4573d6000803e3d6000fd5b50565b7f000000000000000000000000c7c9dfc63b30f194f4e330e2abadfc7caf74273d81565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f6c612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff29061448d565b60405180910390fd5b60005b815181101561116e577f000000000000000000000000c7c9dfc63b30f194f4e330e2abadfc7caf74273d73ffffffffffffffffffffffffffffffffffffffff1682828151811061105157611050614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156110e357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168282815181106110c2576110c1614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b1561115b5760016006600084848151811061110157611100614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061116690614657565b915050610ffe565b5050565b61117a612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061448d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131f612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a59061448d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611479612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff9061448d565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611532612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061448d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611624612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa9061448d565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546116db91906146a0565b6116e591906146a0565b601081905550600a6010541115611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614742565b60405180910390fd5b505050565b61173e612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49061448d565b60405180910390fd5b60005b815181101561185e576000600660008484815181106117f2576117f1614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185690614657565b9150506117d0565b5050565b61186a612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f09061448d565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119569061440f565b80601f01602080910402602001604051908101604052809291908181526020018280546119829061440f565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b5050505050905090565b6119e1612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061448d565b60405180910390fd5b7f000000000000000000000000c7c9dfc63b30f194f4e330e2abadfc7caf74273d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906147d4565b60405180910390fd5b611b098282613432565b5050565b6000611bd0611b1a612489565b84611bcb856040518060600160405280602581526020016154066025913960016000611b44612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b612491565b6001905092915050565b6000611bee611be7612489565b848461265c565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611c33612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb99061448d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d5f9190613f83565b60405180910390a25050565b611d73612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99061448d565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611e2a91906146a0565b611e3491906146a0565b601481905550505050565b611e47612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd9061448d565b60405180910390fd5b633b9aca006103e86005611ee8610bab565b611ef291906144dc565b611efc9190614565565b611f069190614565565b811015611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90614866565b60405180910390fd5b633b9aca0081611f5891906144dc565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611f84612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a9061448d565b60405180910390fd5b620186a06001612021610bab565b61202b91906144dc565b6120359190614565565b821015612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906148f8565b60405180910390fd5b6103e86005612084610bab565b61208e91906144dc565b6120989190614565565b8211156120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d19061498a565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612187612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d9061448d565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612266612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ec9061448d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614a1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461243a91906146a0565b90508381101561247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690614a88565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890614b1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256890614bac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161264f9190614054565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390614cd0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090614d88565b60405180910390fd5b60008114156127e3576127de838360006134d3565b6133c9565b600854421415612846576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f095761286361191d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128d157506128a161191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612944575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295d5750600760009054906101000a900460ff16155b15612f0857600d60019054906101000a900460ff16612a5757601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a175750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90614df4565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c1f57612a7461191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612afb57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b5357507f000000000000000000000000c7c9dfc63b30f194f4e330e2abadfc7caf74273d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c1e5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614eac565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cc25750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6957600a54811115612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390614f3e565b60405180910390fd5b600c54612d18836112cf565b82612d2391906146a0565b1115612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b90614faa565b60405180910390fd5b612f07565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e0c5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5b57600a54811115612e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4d9061503c565b60405180910390fd5b612f06565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0557600c54612eb8836112cf565b82612ec391906146a0565b1115612f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efb90614faa565b60405180910390fd5b5b5b5b5b5b6000612f14306112cf565b90506000600b548210159050808015612f3a5750600760009054906101000a900460ff16155b8015612f905750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fe65750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561303c5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613080576001600760006101000a81548160ff021916908315150217905550613064613768565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131365750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561314057600090505b600081156133b957601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a357506000601454115b15613270576131d060646131c26014548861393090919063ffffffff16565b6139ab90919063ffffffff16565b9050601454601654826131e391906144dc565b6131ed9190614565565b601960008282546131fe91906146a0565b925050819055506014546017548261321691906144dc565b6132209190614565565b601a600082825461323191906146a0565b925050819055506014546015548261324991906144dc565b6132539190614565565b6018600082825461326491906146a0565b92505081905550613395565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132cb57506000601054115b15613394576132f860646132ea6010548861393090919063ffffffff16565b6139ab90919063ffffffff16565b90506010546012548261330b91906144dc565b6133159190614565565b6019600082825461332691906146a0565b925050819055506010546013548261333e91906144dc565b6133489190614565565b601a600082825461335991906146a0565b925050819055506010546011548261337191906144dc565b61337b9190614565565b6018600082825461338c91906146a0565b925050819055505b5b60008111156133aa576133a98730836134d3565b5b80856133b6919061505c565b94505b6133c48787876134d3565b505050505b505050565b6000838311158290613416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340d9190613e5e565b60405180910390fd5b5060008385613425919061505c565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353a90614c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135aa90614cd0565b60405180910390fd5b6135be8383836139f5565b613629816040518060600160405280602681526020016153b8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136bc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375b9190614054565b60405180910390a3505050565b6000613773306112cf565b90506000601a5460185460195461378a91906146a0565b61379491906146a0565b905060008214806137a55750600081145b156137b157505061392e565b6014600b546137c091906144dc565b8211156137d9576014600b546137d691906144dc565b91505b6000600282601954856137ec91906144dc565b6137f69190614565565b6138009190614565565b9050600061381782856139fa90919063ffffffff16565b9050600047905061382782613a44565b600061383c82476139fa90919063ffffffff16565b90506000613867866138596018548561393090919063ffffffff16565b6139ab90919063ffffffff16565b9050600061389287613884601a548661393090919063ffffffff16565b6139ab90919063ffffffff16565b905060008183856138a3919061505c565b6138ad919061505c565b9050600060198190555060006018819055506000601a819055506000871180156138d75750600081115b15613924576138e68782613c81565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161391b93929190615090565b60405180910390a15b5050505050505050505b565b60008083141561394357600090506139a5565b6000828461395191906144dc565b90508284826139609190614565565b146139a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399790615139565b60405180910390fd5b809150505b92915050565b60006139ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d62565b905092915050565b505050565b6000613a3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133ce565b905092915050565b6000600267ffffffffffffffff811115613a6157613a60614155565b5b604051908082528060200260200182016040528015613a8f5781602001602082028036833780820191505090505b5090503081600081518110613aa757613aa6614628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b70919061516e565b81600181518110613b8457613b83614628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613be9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612491565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c4b959493929190615294565b600060405180830381600087803b158015613c6557600080fd5b505af1158015613c79573d6000803e3d6000fd5b505050505050565b613cac307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612491565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cf661191d565b426040518863ffffffff1660e01b8152600401613d18969594939291906152ee565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b9190615364565b5050505050565b60008083118290613da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da09190613e5e565b60405180910390fd5b5060008385613db89190614565565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dff578082015181840152602081019050613de4565b83811115613e0e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e3082613dc5565b613e3a8185613dd0565b9350613e4a818560208601613de1565b613e5381613e14565b840191505092915050565b60006020820190508181036000830152613e788184613e25565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ebf82613e94565b9050919050565b613ecf81613eb4565b8114613eda57600080fd5b50565b600081359050613eec81613ec6565b92915050565b6000819050919050565b613f0581613ef2565b8114613f1057600080fd5b50565b600081359050613f2281613efc565b92915050565b60008060408385031215613f3f57613f3e613e8a565b5b6000613f4d85828601613edd565b9250506020613f5e85828601613f13565b9150509250929050565b60008115159050919050565b613f7d81613f68565b82525050565b6000602082019050613f986000830184613f74565b92915050565b600060208284031215613fb457613fb3613e8a565b5b6000613fc284828501613edd565b91505092915050565b6000819050919050565b6000613ff0613feb613fe684613e94565b613fcb565b613e94565b9050919050565b600061400282613fd5565b9050919050565b600061401482613ff7565b9050919050565b61402481614009565b82525050565b600060208201905061403f600083018461401b565b92915050565b61404e81613ef2565b82525050565b60006020820190506140696000830184614045565b92915050565b60006020828403121561408557614084613e8a565b5b600061409384828501613f13565b91505092915050565b6000806000606084860312156140b5576140b4613e8a565b5b60006140c386828701613edd565b93505060206140d486828701613edd565b92505060406140e586828701613f13565b9150509250925092565b600060ff82169050919050565b614105816140ef565b82525050565b600060208201905061412060008301846140fc565b92915050565b61412f81613eb4565b82525050565b600060208201905061414a6000830184614126565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61418d82613e14565b810181811067ffffffffffffffff821117156141ac576141ab614155565b5b80604052505050565b60006141bf613e80565b90506141cb8282614184565b919050565b600067ffffffffffffffff8211156141eb576141ea614155565b5b602082029050602081019050919050565b600080fd5b600061421461420f846141d0565b6141b5565b90508083825260208201905060208402830185811115614237576142366141fc565b5b835b81811015614260578061424c8882613edd565b845260208401935050602081019050614239565b5050509392505050565b600082601f83011261427f5761427e614150565b5b813561428f848260208601614201565b91505092915050565b6000602082840312156142ae576142ad613e8a565b5b600082013567ffffffffffffffff8111156142cc576142cb613e8f565b5b6142d88482850161426a565b91505092915050565b6142ea81613f68565b81146142f557600080fd5b50565b600081359050614307816142e1565b92915050565b6000806040838503121561432457614323613e8a565b5b600061433285828601613edd565b9250506020614343858286016142f8565b9150509250929050565b60008060006060848603121561436657614365613e8a565b5b600061437486828701613f13565b935050602061438586828701613f13565b925050604061439686828701613f13565b9150509250925092565b600080604083850312156143b7576143b6613e8a565b5b60006143c585828601613edd565b92505060206143d685828601613edd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442757607f821691505b6020821081141561443b5761443a6143e0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614477602083613dd0565b915061448282614441565b602082019050919050565b600060208201905081810360008301526144a68161446a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e782613ef2565b91506144f283613ef2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452b5761452a6144ad565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061457082613ef2565b915061457b83613ef2565b92508261458b5761458a614536565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145f2602f83613dd0565b91506145fd82614596565b604082019050919050565b60006020820190508181036000830152614621816145e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061466282613ef2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614695576146946144ad565b5b600182019050919050565b60006146ab82613ef2565b91506146b683613ef2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146eb576146ea6144ad565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061472c601d83613dd0565b9150614737826146f6565b602082019050919050565b6000602082019050818103600083015261475b8161471f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147be603983613dd0565b91506147c982614762565b604082019050919050565b600060208201905081810360008301526147ed816147b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614850602483613dd0565b915061485b826147f4565b604082019050919050565b6000602082019050818103600083015261487f81614843565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148e2603583613dd0565b91506148ed82614886565b604082019050919050565b60006020820190508181036000830152614911816148d5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614974603483613dd0565b915061497f82614918565b604082019050919050565b600060208201905081810360008301526149a381614967565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a06602683613dd0565b9150614a11826149aa565b604082019050919050565b60006020820190508181036000830152614a35816149f9565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a72601b83613dd0565b9150614a7d82614a3c565b602082019050919050565b60006020820190508181036000830152614aa181614a65565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b04602483613dd0565b9150614b0f82614aa8565b604082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b96602283613dd0565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c28602583613dd0565b9150614c3382614bcc565b604082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cba602383613dd0565b9150614cc582614c5e565b604082019050919050565b60006020820190508181036000830152614ce981614cad565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d72604d83613dd0565b9150614d7d82614cf0565b606082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614dde601683613dd0565b9150614de982614da8565b602082019050919050565b60006020820190508181036000830152614e0d81614dd1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e96604983613dd0565b9150614ea182614e14565b606082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614f28603583613dd0565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f94601383613dd0565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615026603683613dd0565b915061503182614fca565b604082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613ef2565b915061507283613ef2565b925082821015615085576150846144ad565b5b828203905092915050565b60006060820190506150a56000830186614045565b6150b26020830185614045565b6150bf6040830184614045565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615123602183613dd0565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b60008151905061516881613ec6565b92915050565b60006020828403121561518457615183613e8a565b5b600061519284828501615159565b91505092915050565b6000819050919050565b60006151c06151bb6151b68461519b565b613fcb565b613ef2565b9050919050565b6151d0816151a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61520b81613eb4565b82525050565b600061521d8383615202565b60208301905092915050565b6000602082019050919050565b6000615241826151d6565b61524b81856151e1565b9350615256836151f2565b8060005b8381101561528757815161526e8882615211565b975061527983615229565b92505060018101905061525a565b5085935050505092915050565b600060a0820190506152a96000830188614045565b6152b660208301876151c7565b81810360408301526152c88186615236565b90506152d76060830185614126565b6152e46080830184614045565b9695505050505050565b600060c0820190506153036000830189614126565b6153106020830188614045565b61531d60408301876151c7565b61532a60608301866151c7565b6153376080830185614126565b61534460a0830184614045565b979650505050505050565b60008151905061535e81613efc565b92915050565b60008060006060848603121561537d5761537c613e8a565b5b600061538b8682870161534f565b935050602061539c8682870161534f565b92505060406153ad8682870161534f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b54668bec45265f3d6c06fdbce39c73621af0d07264fcd48ef5273605e7e5bda64736f6c634300080b0033

Deployed Bytecode Sourcemap

17549:15135:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4968:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5881:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25587:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18890:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17625:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5288:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22831:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6058:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5188:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6421:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32542:102;;;;;;;;;;;;;:::i;:::-;;17683:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18005:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24948:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25085:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24783:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18468:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5404:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10923:148;;;;;;;;;;;;;:::i;:::-;;22041:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23290:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23446:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25391:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21862:123;;;;;;;;;;;;;:::i;:::-;;10709:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5076:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24331:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6647:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5539:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19112:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18045:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24141:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23827:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23069:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18269:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17882:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22437:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18317:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5722:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17924:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22227:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17845:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11079:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17964:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4968:100;5022:13;5055:5;5048:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4968:100;:::o;5881:169::-;5964:4;5981:39;5990:12;:10;:12::i;:::-;6004:7;6013:6;5981:8;:39::i;:::-;6038:4;6031:11;;5881:169;;;;:::o;25587:100::-;25640:4;25664:9;:15;25674:4;25664:15;;;;;;;;;;;;;;;;;;;;;;;;;25657:22;;25587:100;;;:::o;18890:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17625:51::-;;;:::o;5288:108::-;5349:7;5376:12;;5369:19;;5288:108;:::o;22831:230::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22952:3:::1;22944:4;22940:1;22924:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22923:32;;;;:::i;:::-;22913:6;:42;;22905:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23050:3;23041:6;:12;;;;:::i;:::-;23018:20;:35;;;;22831:230:::0;:::o;6058:355::-;6198:4;6215:36;6225:6;6233:9;6244:6;6215:9;:36::i;:::-;6262:121;6271:6;6279:12;:10;:12::i;:::-;6293:89;6331:6;6293:89;;;;;;;;;;;;;;;;;:11;:19;6305:6;6293:19;;;;;;;;;;;;;;;:33;6313:12;:10;:12::i;:::-;6293:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6262:8;:121::i;:::-;6401:4;6394:11;;6058:355;;;;;:::o;5188:92::-;5246:5;5271:1;5264:8;;5188:92;:::o;6421:218::-;6509:4;6526:83;6535:12;:10;:12::i;:::-;6549:7;6558:50;6597:10;6558:11;:25;6570:12;:10;:12::i;:::-;6558:25;;;;;;;;;;;;;;;:34;6584:7;6558:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6526:8;:83::i;:::-;6627:4;6620:11;;6421:218;;;;:::o;32542:102::-;32594:9;;;;;;;;;;;32586:27;;:50;32614:21;32586:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32542:102::o;17683:38::-;;;:::o;18005:33::-;;;;;;;;;;;;;:::o;24948:125::-;25013:4;25037:19;:28;25057:7;25037:28;;;;;;;;;;;;;;;;;;;;;;;;;25030:35;;24948:125;;;:::o;25085:294::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25167:6:::1;25162:210;25183:8;:15;25179:1;:19;25162:210;;;25239:13;25224:28;;:8;25233:1;25224:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:71;;;;;25279:15;25256:39;;:8;25265:1;25256:11;;;;;;;;:::i;:::-;;;;;;;;:39;;;;25224:71;25220:141;;;25341:4;25316:9;:22;25326:8;25335:1;25326:11;;;;;;;;:::i;:::-;;;;;;;;25316:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25220:141;25200:3;;;;;:::i;:::-;;;;25162:210;;;;25085:294:::0;:::o;24783:157::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24890:9:::1;;;;;;;;;;;24862:38;;24879:9;24862:38;;;;;;;;;;;;24923:9;24911;;:21;;;;;;;;;;;;;;;;;;24783:157:::0;:::o;18468:28::-;;;;:::o;5404:127::-;5478:7;5505:9;:18;5515:7;5505:18;;;;;;;;;;;;;;;;5498:25;;5404:127;;;:::o;10923:148::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11030:1:::1;10993:40;;11014:6;;;;;;;;;;;10993:40;;;;;;;;;;;;11061:1;11044:6;;:19;;;;;;;;;;;;;;;;;;10923:148::o:0;22041:121::-;22093:4;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22127:5:::1;22110:14;;:22;;;;;;;;;;;;;;;;;;22150:4;22143:11;;22041:121:::0;:::o;23290:144::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23422:4:::1;23380:31;:39;23412:6;23380:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23290:144:::0;;:::o;23446:369::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23578:12:::1;23559:16;:31;;;;23620:12;23601:16;:31;;;;23656:6;23643:10;:19;;;;23726:10;;23707:16;;23688;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;23673:12;:63;;;;23771:2;23755:12;;:18;;23747:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23446:369:::0;;;:::o;25391:184::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25473:6:::1;25468:100;25489:8;:15;25485:1;:19;25468:100;;;25551:5;25526:9;:22;25536:8;25545:1;25536:11;;;;;;;;:::i;:::-;;;;;;;;25526:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25506:3;;;;;:::i;:::-;;;;25468:100;;;;25391:184:::0;:::o;21862:123::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21933:4:::1;21917:13;;:20;;;;;;;;;;;;;;;;;;21962:15;21948:11;:29;;;;21862:123::o:0;10709:79::-;10747:7;10774:6;;;;;;;;;;;10767:13;;10709:79;:::o;5076:104::-;5132:13;5165:7;5158:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5076:104;:::o;24331:244::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24438:13:::1;24430:21;;:4;:21;;;;24422:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24526:41;24555:4;24561:5;24526:28;:41::i;:::-;24331:244:::0;;:::o;6647:269::-;6740:4;6757:129;6766:12;:10;:12::i;:::-;6780:7;6789:96;6828:15;6789:96;;;;;;;;;;;;;;;;;:11;:25;6801:12;:10;:12::i;:::-;6789:25;;;;;;;;;;;;;;;:34;6815:7;6789:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6757:8;:129::i;:::-;6904:4;6897:11;;6647:269;;;;:::o;5539:175::-;5625:4;5642:42;5652:12;:10;:12::i;:::-;5666:9;5677:6;5642:9;:42::i;:::-;5702:4;5695:11;;5539:175;;;;:::o;19112:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18045:33::-;;;;;;;;;;;;;:::o;24141:182::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24257:8:::1;24226:19;:28;24246:7;24226:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24297:7;24281:34;;;24306:8;24281:34;;;;;;:::i;:::-;;;;;;;;24141:182:::0;;:::o;23827:306::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23961:12:::1;23941:17;:32;;;;24004:12;23984:17;:32;;;;24041:6;24027:11;:20;;;;24114:11;;24094:17;;24074;;:37;;;;:::i;:::-;:51;;;;:::i;:::-;24058:13;:67;;;;23827:306:::0;;;:::o;23069:209::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23191:3:::1;23185:4;23181:1;23165:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23164:30;;;;:::i;:::-;23154:6;:40;;23146:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23267:3;23258:6;:12;;;;:::i;:::-;23246:9;:24;;;;23069:209:::0;:::o;18269:39::-;;;;;;;;;;;;;:::o;17882:35::-;;;;:::o;22437:382::-;22518:4;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22575:6:::1;22571:1;22555:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22542:9;:39;;22534:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22690:4;22686:1;22670:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22657:9;:37;;22649:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22782:9;22761:18;:30;;;;22808:4;22801:11;;22437:382:::0;;;:::o;18317:27::-;;;;:::o;5722:151::-;5811:7;5838:11;:18;5850:5;5838:18;;;;;;;;;;;;;;;:27;5857:7;5838:27;;;;;;;;;;;;;;;;5831:34;;5722:151;;;;:::o;17924:33::-;;;;:::o;22227:135::-;22287:4;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22327:5:::1;22304:20;;:28;;;;;;;;;;;;;;;;;;22350:4;22343:11;;22227:135:::0;:::o;17845:24::-;;;;;;;;;;;;;:::o;11079:244::-;10846:12;:10;:12::i;:::-;10836:22;;:6;;;;;;;;;;;:22;;;10828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11188:1:::1;11168:22;;:8;:22;;;;11160:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11278:8;11249:38;;11270:6;;;;;;;;;;;11249:38;;;;;;;;;;;;11307:8;11298:6;;:17;;;;;;;;;;;;;;;;;;11079:244:::0;:::o;17964:24::-;;;;:::o;8861:181::-;8919:7;8939:9;8955:1;8951;:5;;;;:::i;:::-;8939:17;;8980:1;8975;:6;;8967:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9033:1;9026:8;;;8861:181;;;;:::o;137:98::-;190:7;217:10;210:17;;137:98;:::o;8317:380::-;8470:1;8453:19;;:5;:19;;;;8445:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8551:1;8532:21;;:7;:21;;;;8524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8635:6;8605:11;:18;8617:5;8605:18;;;;;;;;;;;;;;;:27;8624:7;8605:27;;;;;;;;;;;;;;;:36;;;;8673:7;8657:32;;8666:5;8657:32;;;8682:6;8657:32;;;;;;:::i;:::-;;;;;;;;8317:380;;;:::o;25695:4269::-;25843:1;25827:18;;:4;:18;;;;25819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25920:1;25906:16;;:2;:16;;;;25898:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25982:9;:15;25992:4;25982:15;;;;;;;;;;;;;;;;;;;;;;;;;25981:16;25973:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;26115:1;26105:6;:11;26101:93;;;26133:28;26149:4;26155:2;26159:1;26133:15;:28::i;:::-;26176:7;;26101:93;26237:11;;26218:15;:30;26214:56;;;26266:4;26250:9;:13;26260:2;26250:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;26214:56;26295:14;;;;;;;;;;;26291:1838;;;26356:7;:5;:7::i;:::-;26348:15;;:4;:15;;;;:49;;;;;26390:7;:5;:7::i;:::-;26384:13;;:2;:13;;;;26348:49;:86;;;;;26432:1;26418:16;;:2;:16;;;;26348:86;:128;;;;;26469:6;26455:21;;:2;:21;;;;26348:128;:159;;;;;26498:9;;;;;;;;;;;26497:10;26348:159;26326:1792;;;26547:13;;;;;;;;;;;26542:150;;26593:19;:25;26613:4;26593:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26622:19;:23;26642:2;26622:23;;;;;;;;;;;;;;;;;;;;;;;;;26593:52;26585:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26542:150;26850:20;;;;;;;;;;;26846:423;;;26904:7;:5;:7::i;:::-;26898:13;;:2;:13;;;;:47;;;;;26929:15;26915:30;;:2;:30;;;;26898:47;:79;;;;;26963:13;26949:28;;:2;:28;;;;26898:79;26894:356;;;27055:12;27013:28;:39;27042:9;27013:39;;;;;;;;;;;;;;;;:54;27005:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27214:12;27172:28;:39;27201:9;27172:39;;;;;;;;;;;;;;;:54;;;;26894:356;26846:423;27339:25;:31;27365:4;27339:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27375:31;:35;27407:2;27375:35;;;;;;;;;;;;;;;;;;;;;;;;;27374:36;27339:71;27335:768;;;27453:20;;27443:6;:30;;27435:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27588:9;;27571:13;27581:2;27571:9;:13::i;:::-;27562:6;:22;;;;:::i;:::-;:35;;27554:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27335:768;;;27716:25;:29;27742:2;27716:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27750:31;:37;27782:4;27750:37;;;;;;;;;;;;;;;;;;;;;;;;;27749:38;27716:71;27712:391;;;27830:20;;27820:6;:30;;27812:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27712:391;;;27957:31;:35;27989:2;27957:35;;;;;;;;;;;;;;;;;;;;;;;;;27952:151;;28050:9;;28033:13;28043:2;28033:9;:13::i;:::-;28024:6;:22;;;;:::i;:::-;:35;;28016:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27952:151;27712:391;27335:768;26326:1792;26291:1838;28143:28;28174:24;28192:4;28174:9;:24::i;:::-;28143:55;;28209:12;28248:18;;28224:20;:42;;28209:57;;28295:7;:34;;;;;28320:9;;;;;;;;;;;28319:10;28295:34;:83;;;;;28347:25;:31;28373:4;28347:31;;;;;;;;;;;;;;;;;;;;;;;;;28346:32;28295:83;:126;;;;;28396:19;:25;28416:4;28396:25;;;;;;;;;;;;;;;;;;;;;;;;;28395:26;28295:126;:167;;;;;28439:19;:23;28459:2;28439:23;;;;;;;;;;;;;;;;;;;;;;;;;28438:24;28295:167;28277:297;;;28501:4;28489:9;;:16;;;;;;;;;;;;;;;;;;28520:10;:8;:10::i;:::-;28557:5;28545:9;;:17;;;;;;;;;;;;;;;;;;28277:297;28586:12;28602:9;;;;;;;;;;;28601:10;28586:25;;28713:19;:25;28733:4;28713:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28742:19;:23;28762:2;28742:23;;;;;;;;;;;;;;;;;;;;;;;;;28713:52;28709:100;;;28792:5;28782:15;;28709:100;28829:12;28934:7;28930:981;;;28986:25;:29;29012:2;28986:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29035:1;29019:13;;:17;28986:50;28982:762;;;29064:34;29094:3;29064:25;29075:13;;29064:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29057:41;;29167:13;;29147:17;;29140:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;29117:19;;:63;;;;;;;:::i;:::-;;;;;;;;29237:13;;29223:11;;29216:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;29199:13;;:51;;;;;;;:::i;:::-;;;;;;;;29319:13;;29299:17;;29292:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;29269:19;;:63;;;;;;;:::i;:::-;;;;;;;;28982:762;;;29394:25;:31;29420:4;29394:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29444:1;29429:12;;:16;29394:51;29390:354;;;29470:33;29499:3;29470:24;29481:12;;29470:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29463:40;;29568:12;;29549:16;;29542:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29519:19;;:61;;;;;;;:::i;:::-;;;;;;;;29636:12;;29623:10;;29616:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;29599:13;;:49;;;;;;;:::i;:::-;;;;;;;;29716:12;;29697:16;;29690:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29667:19;;:61;;;;;;;:::i;:::-;;;;;;;;29390:354;28982:762;29783:1;29776:4;:8;29772:91;;;29805:42;29821:4;29835;29842;29805:15;:42::i;:::-;29772:91;29895:4;29885:14;;;;;:::i;:::-;;;28930:981;29923:33;29939:4;29945:2;29949:6;29923:15;:33::i;:::-;25808:4156;;;;25695:4269;;;;:::o;9194:192::-;9280:7;9313:1;9308;:6;;9316:12;9300:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9340:9;9356:1;9352;:5;;;;:::i;:::-;9340:17;;9377:1;9370:8;;;9194:192;;;;;:::o;24583:188::-;24700:5;24666:25;:31;24692:4;24666:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24757:5;24723:40;;24751:4;24723:40;;;;;;;;;;;;24583:188;;:::o;6924:573::-;7082:1;7064:20;;:6;:20;;;;7056:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7166:1;7145:23;;:9;:23;;;;7137:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7221:47;7242:6;7250:9;7261:6;7221:20;:47::i;:::-;7301:71;7323:6;7301:71;;;;;;;;;;;;;;;;;:9;:17;7311:6;7301:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7281:9;:17;7291:6;7281:17;;;;;;;;;;;;;;;:91;;;;7406:32;7431:6;7406:9;:20;7416:9;7406:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7383:9;:20;7393:9;7383:20;;;;;;;;;;;;;;;:55;;;;7471:9;7454:35;;7463:6;7454:35;;;7482:6;7454:35;;;;;;:::i;:::-;;;;;;;;6924:573;;;:::o;31096:1438::-;31135:23;31161:24;31179:4;31161:9;:24::i;:::-;31135:50;;31196:25;31268:13;;31246:19;;31224;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;31196:85;;31325:1;31306:15;:20;:46;;;;31351:1;31330:17;:22;31306:46;31302:59;;;31354:7;;;;31302:59;31414:2;31393:18;;:23;;;;:::i;:::-;31375:15;:41;31371:113;;;31470:2;31449:18;;:23;;;;:::i;:::-;31431:41;;31371:113;31553:23;31639:1;31619:17;31597:19;;31579:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;31553:87;;31651:26;31680:36;31700:15;31680;:19;;:36;;;;:::i;:::-;31651:65;;31737:25;31765:21;31737:49;;31799:37;31817:18;31799:17;:37::i;:::-;31858:18;31879:44;31905:17;31879:21;:25;;:44;;;;:::i;:::-;31858:65;;31934:23;31960:58;32000:17;31960:35;31975:19;;31960:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;31934:84;;32029:17;32049:52;32083:17;32049:29;32064:13;;32049:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;32029:72;;32112:23;32169:9;32151:15;32138:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;32112:66;;32221:1;32199:19;:23;;;;32255:1;32233:19;:23;;;;32283:1;32267:13;:17;;;;32335:1;32317:15;:19;:42;;;;;32358:1;32340:15;:19;32317:42;32313:214;;;32376:47;32390:15;32407;32376:13;:47::i;:::-;32443:72;32458:18;32478:15;32495:19;;32443:72;;;;;;;;:::i;:::-;;;;;;;;32313:214;31124:1410;;;;;;;;;31096:1438;:::o;9394:250::-;9452:7;9481:1;9476;:6;9472:47;;;9506:1;9499:8;;;;9472:47;9531:9;9547:1;9543;:5;;;;:::i;:::-;9531:17;;9576:1;9571;9567;:5;;;;:::i;:::-;:10;9559:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9635:1;9628:8;;;9394:250;;;;;:::o;9652:132::-;9710:7;9737:39;9741:1;9744;9737:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9730:46;;9652:132;;;;:::o;8705:125::-;;;;:::o;9050:136::-;9108:7;9135:43;9139:1;9142;9135:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9128:50;;9050:136;;;;:::o;29972:590::-;30099:21;30137:1;30123:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30099:40;;30168:4;30150;30155:1;30150:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30194:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30184:4;30189:1;30184:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30229:62;30246:4;30261:15;30279:11;30229:8;:62::i;:::-;30330:15;:66;;;30411:11;30437:1;30481:4;30508;30528:15;30330:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30028:534;29972:590;:::o;30574:514::-;30723:62;30740:4;30755:15;30773:11;30723:8;:62::i;:::-;30828:15;:31;;;30867:9;30900:4;30920:11;30946:1;30989;31032:7;:5;:7::i;:::-;31054:15;30828:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30574:514;;:::o;9792:278::-;9878:7;9910:1;9906;:5;9913:12;9898:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9937:9;9953:1;9949;:5;;;;:::i;:::-;9937:17;;10061:1;10054:8;;;9792:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:117::-;7010:1;7007;7000:12;7024:180;7072:77;7069:1;7062:88;7169:4;7166:1;7159:15;7193:4;7190:1;7183:15;7210:281;7293:27;7315:4;7293:27;:::i;:::-;7285:6;7281:40;7423:6;7411:10;7408:22;7387:18;7375:10;7372:34;7369:62;7366:88;;;7434:18;;:::i;:::-;7366:88;7474:10;7470:2;7463:22;7253:238;7210:281;;:::o;7497:129::-;7531:6;7558:20;;:::i;:::-;7548:30;;7587:33;7615:4;7607:6;7587:33;:::i;:::-;7497:129;;;:::o;7632:311::-;7709:4;7799:18;7791:6;7788:30;7785:56;;;7821:18;;:::i;:::-;7785:56;7871:4;7863:6;7859:17;7851:25;;7931:4;7925;7921:15;7913:23;;7632:311;;;:::o;7949:117::-;8058:1;8055;8048:12;8089:710;8185:5;8210:81;8226:64;8283:6;8226:64;:::i;:::-;8210:81;:::i;:::-;8201:90;;8311:5;8340:6;8333:5;8326:21;8374:4;8367:5;8363:16;8356:23;;8427:4;8419:6;8415:17;8407:6;8403:30;8456:3;8448:6;8445:15;8442:122;;;8475:79;;:::i;:::-;8442:122;8590:6;8573:220;8607:6;8602:3;8599:15;8573:220;;;8682:3;8711:37;8744:3;8732:10;8711:37;:::i;:::-;8706:3;8699:50;8778:4;8773:3;8769:14;8762:21;;8649:144;8633:4;8628:3;8624:14;8617:21;;8573:220;;;8577:21;8191:608;;8089:710;;;;;:::o;8822:370::-;8893:5;8942:3;8935:4;8927:6;8923:17;8919:27;8909:122;;8950:79;;:::i;:::-;8909:122;9067:6;9054:20;9092:94;9182:3;9174:6;9167:4;9159:6;9155:17;9092:94;:::i;:::-;9083:103;;8899:293;8822:370;;;;:::o;9198:539::-;9282:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:119;;;9337:79;;:::i;:::-;9299:119;9485:1;9474:9;9470:17;9457:31;9515:18;9507:6;9504:30;9501:117;;;9537:79;;:::i;:::-;9501:117;9642:78;9712:7;9703:6;9692:9;9688:22;9642:78;:::i;:::-;9632:88;;9428:302;9198:539;;;;:::o;9743:116::-;9813:21;9828:5;9813:21;:::i;:::-;9806:5;9803:32;9793:60;;9849:1;9846;9839:12;9793:60;9743:116;:::o;9865:133::-;9908:5;9946:6;9933:20;9924:29;;9962:30;9986:5;9962:30;:::i;:::-;9865:133;;;;:::o;10004:468::-;10069:6;10077;10126:2;10114:9;10105:7;10101:23;10097:32;10094:119;;;10132:79;;:::i;:::-;10094:119;10252:1;10277:53;10322:7;10313:6;10302:9;10298:22;10277:53;:::i;:::-;10267:63;;10223:117;10379:2;10405:50;10447:7;10438:6;10427:9;10423:22;10405:50;:::i;:::-;10395:60;;10350:115;10004:468;;;;;:::o;10478:619::-;10555:6;10563;10571;10620:2;10608:9;10599:7;10595:23;10591:32;10588:119;;;10626:79;;:::i;:::-;10588:119;10746:1;10771:53;10816:7;10807:6;10796:9;10792:22;10771:53;:::i;:::-;10761:63;;10717:117;10873:2;10899:53;10944:7;10935:6;10924:9;10920:22;10899:53;:::i;:::-;10889:63;;10844:118;11001:2;11027:53;11072:7;11063:6;11052:9;11048:22;11027:53;:::i;:::-;11017:63;;10972:118;10478:619;;;;;:::o;11103:474::-;11171:6;11179;11228:2;11216:9;11207:7;11203:23;11199:32;11196:119;;;11234:79;;:::i;:::-;11196:119;11354:1;11379:53;11424:7;11415:6;11404:9;11400:22;11379:53;:::i;:::-;11369:63;;11325:117;11481:2;11507:53;11552:7;11543:6;11532:9;11528:22;11507:53;:::i;:::-;11497:63;;11452:118;11103:474;;;;;:::o;11583:180::-;11631:77;11628:1;11621:88;11728:4;11725:1;11718:15;11752:4;11749:1;11742:15;11769:320;11813:6;11850:1;11844:4;11840:12;11830:22;;11897:1;11891:4;11887:12;11918:18;11908:81;;11974:4;11966:6;11962:17;11952:27;;11908:81;12036:2;12028:6;12025:14;12005:18;12002:38;11999:84;;;12055:18;;:::i;:::-;11999:84;11820:269;11769:320;;;:::o;12095:182::-;12235:34;12231:1;12223:6;12219:14;12212:58;12095:182;:::o;12283:366::-;12425:3;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12522:93;12611:3;12522:93;:::i;:::-;12640:2;12635:3;12631:12;12624:19;;12283:366;;;:::o;12655:419::-;12821:4;12859:2;12848:9;12844:18;12836:26;;12908:9;12902:4;12898:20;12894:1;12883:9;12879:17;12872:47;12936:131;13062:4;12936:131;:::i;:::-;12928:139;;12655:419;;;:::o;13080:180::-;13128:77;13125:1;13118:88;13225:4;13222:1;13215:15;13249:4;13246:1;13239:15;13266:348;13306:7;13329:20;13347:1;13329:20;:::i;:::-;13324:25;;13363:20;13381:1;13363:20;:::i;:::-;13358:25;;13551:1;13483:66;13479:74;13476:1;13473:81;13468:1;13461:9;13454:17;13450:105;13447:131;;;13558:18;;:::i;:::-;13447:131;13606:1;13603;13599:9;13588:20;;13266:348;;;;:::o;13620:180::-;13668:77;13665:1;13658:88;13765:4;13762:1;13755:15;13789:4;13786:1;13779:15;13806:185;13846:1;13863:20;13881:1;13863:20;:::i;:::-;13858:25;;13897:20;13915:1;13897:20;:::i;:::-;13892:25;;13936:1;13926:35;;13941:18;;:::i;:::-;13926:35;13983:1;13980;13976:9;13971:14;;13806:185;;;;:::o;13997:234::-;14137:34;14133:1;14125:6;14121:14;14114:58;14206:17;14201:2;14193:6;14189:15;14182:42;13997:234;:::o;14237:366::-;14379:3;14400:67;14464:2;14459:3;14400:67;:::i;:::-;14393:74;;14476:93;14565:3;14476:93;:::i;:::-;14594:2;14589:3;14585:12;14578:19;;14237:366;;;:::o;14609:419::-;14775:4;14813:2;14802:9;14798:18;14790:26;;14862:9;14856:4;14852:20;14848:1;14837:9;14833:17;14826:47;14890:131;15016:4;14890:131;:::i;:::-;14882:139;;14609:419;;;:::o;15034:180::-;15082:77;15079:1;15072:88;15179:4;15176:1;15169:15;15203:4;15200:1;15193:15;15220:233;15259:3;15282:24;15300:5;15282:24;:::i;:::-;15273:33;;15328:66;15321:5;15318:77;15315:103;;;15398:18;;:::i;:::-;15315:103;15445:1;15438:5;15434:13;15427:20;;15220:233;;;:::o;15459:305::-;15499:3;15518:20;15536:1;15518:20;:::i;:::-;15513:25;;15552:20;15570:1;15552:20;:::i;:::-;15547:25;;15706:1;15638:66;15634:74;15631:1;15628:81;15625:107;;;15712:18;;:::i;:::-;15625:107;15756:1;15753;15749:9;15742:16;;15459:305;;;;:::o;15770:179::-;15910:31;15906:1;15898:6;15894:14;15887:55;15770:179;:::o;15955:366::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16327:419;;;:::o;16752:244::-;16892:34;16888:1;16880:6;16876:14;16869:58;16961:27;16956:2;16948:6;16944:15;16937:52;16752:244;:::o;17002:366::-;17144:3;17165:67;17229:2;17224:3;17165:67;:::i;:::-;17158:74;;17241:93;17330:3;17241:93;:::i;:::-;17359:2;17354:3;17350:12;17343:19;;17002:366;;;:::o;17374:419::-;17540:4;17578:2;17567:9;17563:18;17555:26;;17627:9;17621:4;17617:20;17613:1;17602:9;17598:17;17591:47;17655:131;17781:4;17655:131;:::i;:::-;17647:139;;17374:419;;;:::o;17799:223::-;17939:34;17935:1;17927:6;17923:14;17916:58;18008:6;18003:2;17995:6;17991:15;17984:31;17799:223;:::o;18028:366::-;18170:3;18191:67;18255:2;18250:3;18191:67;:::i;:::-;18184:74;;18267:93;18356:3;18267:93;:::i;:::-;18385:2;18380:3;18376:12;18369:19;;18028:366;;;:::o;18400:419::-;18566:4;18604:2;18593:9;18589:18;18581:26;;18653:9;18647:4;18643:20;18639:1;18628:9;18624:17;18617:47;18681:131;18807:4;18681:131;:::i;:::-;18673:139;;18400:419;;;:::o;18825:240::-;18965:34;18961:1;18953:6;18949:14;18942:58;19034:23;19029:2;19021:6;19017:15;19010:48;18825:240;:::o;19071:366::-;19213:3;19234:67;19298:2;19293:3;19234:67;:::i;:::-;19227:74;;19310:93;19399:3;19310:93;:::i;:::-;19428:2;19423:3;19419:12;19412:19;;19071:366;;;:::o;19443:419::-;19609:4;19647:2;19636:9;19632:18;19624:26;;19696:9;19690:4;19686:20;19682:1;19671:9;19667:17;19660:47;19724:131;19850:4;19724:131;:::i;:::-;19716:139;;19443:419;;;:::o;19868:239::-;20008:34;20004:1;19996:6;19992:14;19985:58;20077:22;20072:2;20064:6;20060:15;20053:47;19868:239;:::o;20113:366::-;20255:3;20276:67;20340:2;20335:3;20276:67;:::i;:::-;20269:74;;20352:93;20441:3;20352:93;:::i;:::-;20470:2;20465:3;20461:12;20454:19;;20113:366;;;:::o;20485:419::-;20651:4;20689:2;20678:9;20674:18;20666:26;;20738:9;20732:4;20728:20;20724:1;20713:9;20709:17;20702:47;20766:131;20892:4;20766:131;:::i;:::-;20758:139;;20485:419;;;:::o;20910:225::-;21050:34;21046:1;21038:6;21034:14;21027:58;21119:8;21114:2;21106:6;21102:15;21095:33;20910:225;:::o;21141:366::-;21283:3;21304:67;21368:2;21363:3;21304:67;:::i;:::-;21297:74;;21380:93;21469:3;21380:93;:::i;:::-;21498:2;21493:3;21489:12;21482:19;;21141:366;;;:::o;21513:419::-;21679:4;21717:2;21706:9;21702:18;21694:26;;21766:9;21760:4;21756:20;21752:1;21741:9;21737:17;21730:47;21794:131;21920:4;21794:131;:::i;:::-;21786:139;;21513:419;;;:::o;21938:177::-;22078:29;22074:1;22066:6;22062:14;22055:53;21938:177;:::o;22121:366::-;22263:3;22284:67;22348:2;22343:3;22284:67;:::i;:::-;22277:74;;22360:93;22449:3;22360:93;:::i;:::-;22478:2;22473:3;22469:12;22462:19;;22121:366;;;:::o;22493:419::-;22659:4;22697:2;22686:9;22682:18;22674:26;;22746:9;22740:4;22736:20;22732:1;22721:9;22717:17;22710:47;22774:131;22900:4;22774:131;:::i;:::-;22766:139;;22493:419;;;:::o;22918:223::-;23058:34;23054:1;23046:6;23042:14;23035:58;23127:6;23122:2;23114:6;23110:15;23103:31;22918:223;:::o;23147:366::-;23289:3;23310:67;23374:2;23369:3;23310:67;:::i;:::-;23303:74;;23386:93;23475:3;23386:93;:::i;:::-;23504:2;23499:3;23495:12;23488:19;;23147:366;;;:::o;23519:419::-;23685:4;23723:2;23712:9;23708:18;23700:26;;23772:9;23766:4;23762:20;23758:1;23747:9;23743:17;23736:47;23800:131;23926:4;23800:131;:::i;:::-;23792:139;;23519:419;;;:::o;23944:221::-;24084:34;24080:1;24072:6;24068:14;24061:58;24153:4;24148:2;24140:6;24136:15;24129:29;23944:221;:::o;24171:366::-;24313:3;24334:67;24398:2;24393:3;24334:67;:::i;:::-;24327:74;;24410:93;24499:3;24410:93;:::i;:::-;24528:2;24523:3;24519:12;24512:19;;24171:366;;;:::o;24543:419::-;24709:4;24747:2;24736:9;24732:18;24724:26;;24796:9;24790:4;24786:20;24782:1;24771:9;24767:17;24760:47;24824:131;24950:4;24824:131;:::i;:::-;24816:139;;24543:419;;;:::o;24968:224::-;25108:34;25104:1;25096:6;25092:14;25085:58;25177:7;25172:2;25164:6;25160:15;25153:32;24968:224;:::o;25198:366::-;25340:3;25361:67;25425:2;25420:3;25361:67;:::i;:::-;25354:74;;25437:93;25526:3;25437:93;:::i;:::-;25555:2;25550:3;25546:12;25539:19;;25198:366;;;:::o;25570:419::-;25736:4;25774:2;25763:9;25759:18;25751:26;;25823:9;25817:4;25813:20;25809:1;25798:9;25794:17;25787:47;25851:131;25977:4;25851:131;:::i;:::-;25843:139;;25570:419;;;:::o;25995:222::-;26135:34;26131:1;26123:6;26119:14;26112:58;26204:5;26199:2;26191:6;26187:15;26180:30;25995:222;:::o;26223:366::-;26365:3;26386:67;26450:2;26445:3;26386:67;:::i;:::-;26379:74;;26462:93;26551:3;26462:93;:::i;:::-;26580:2;26575:3;26571:12;26564:19;;26223:366;;;:::o;26595:419::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:301::-;27160:34;27156:1;27148:6;27144:14;27137:58;27229:34;27224:2;27216:6;27212:15;27205:59;27298:15;27293:2;27285:6;27281:15;27274:40;27020:301;:::o;27327:366::-;27469:3;27490:67;27554:2;27549:3;27490:67;:::i;:::-;27483:74;;27566:93;27655:3;27566:93;:::i;:::-;27684:2;27679:3;27675:12;27668:19;;27327:366;;;:::o;27699:419::-;27865:4;27903:2;27892:9;27888:18;27880:26;;27952:9;27946:4;27942:20;27938:1;27927:9;27923:17;27916:47;27980:131;28106:4;27980:131;:::i;:::-;27972:139;;27699:419;;;:::o;28124:172::-;28264:24;28260:1;28252:6;28248:14;28241:48;28124:172;:::o;28302:366::-;28444:3;28465:67;28529:2;28524:3;28465:67;:::i;:::-;28458:74;;28541:93;28630:3;28541:93;:::i;:::-;28659:2;28654:3;28650:12;28643:19;;28302:366;;;:::o;28674:419::-;28840:4;28878:2;28867:9;28863:18;28855:26;;28927:9;28921:4;28917:20;28913:1;28902:9;28898:17;28891:47;28955:131;29081:4;28955:131;:::i;:::-;28947:139;;28674:419;;;:::o;29099:297::-;29239:34;29235:1;29227:6;29223:14;29216:58;29308:34;29303:2;29295:6;29291:15;29284:59;29377:11;29372:2;29364:6;29360:15;29353:36;29099:297;:::o;29402:366::-;29544:3;29565:67;29629:2;29624:3;29565:67;:::i;:::-;29558:74;;29641:93;29730:3;29641:93;:::i;:::-;29759:2;29754:3;29750:12;29743:19;;29402:366;;;:::o;29774:419::-;29940:4;29978:2;29967:9;29963:18;29955:26;;30027:9;30021:4;30017:20;30013:1;30002:9;29998:17;29991:47;30055:131;30181:4;30055:131;:::i;:::-;30047:139;;29774:419;;;:::o;30199:240::-;30339:34;30335:1;30327:6;30323:14;30316:58;30408:23;30403:2;30395:6;30391:15;30384:48;30199:240;:::o;30445:366::-;30587:3;30608:67;30672:2;30667:3;30608:67;:::i;:::-;30601:74;;30684:93;30773:3;30684:93;:::i;:::-;30802:2;30797:3;30793:12;30786:19;;30445:366;;;:::o;30817:419::-;30983:4;31021:2;31010:9;31006:18;30998:26;;31070:9;31064:4;31060:20;31056:1;31045:9;31041:17;31034:47;31098:131;31224:4;31098:131;:::i;:::-;31090:139;;30817:419;;;:::o;31242:169::-;31382:21;31378:1;31370:6;31366:14;31359:45;31242:169;:::o;31417:366::-;31559:3;31580:67;31644:2;31639:3;31580:67;:::i;:::-;31573:74;;31656:93;31745:3;31656:93;:::i;:::-;31774:2;31769:3;31765:12;31758:19;;31417:366;;;:::o;31789:419::-;31955:4;31993:2;31982:9;31978:18;31970:26;;32042:9;32036:4;32032:20;32028:1;32017:9;32013:17;32006:47;32070:131;32196:4;32070:131;:::i;:::-;32062:139;;31789:419;;;:::o;32214:241::-;32354:34;32350:1;32342:6;32338:14;32331:58;32423:24;32418:2;32410:6;32406:15;32399:49;32214:241;:::o;32461:366::-;32603:3;32624:67;32688:2;32683:3;32624:67;:::i;:::-;32617:74;;32700:93;32789:3;32700:93;:::i;:::-;32818:2;32813:3;32809:12;32802:19;;32461:366;;;:::o;32833:419::-;32999:4;33037:2;33026:9;33022:18;33014:26;;33086:9;33080:4;33076:20;33072:1;33061:9;33057:17;33050:47;33114:131;33240:4;33114:131;:::i;:::-;33106:139;;32833:419;;;:::o;33258:191::-;33298:4;33318:20;33336:1;33318:20;:::i;:::-;33313:25;;33352:20;33370:1;33352:20;:::i;:::-;33347:25;;33391:1;33388;33385:8;33382:34;;;33396:18;;:::i;:::-;33382:34;33441:1;33438;33434:9;33426:17;;33258:191;;;;:::o;33455:442::-;33604:4;33642:2;33631:9;33627:18;33619:26;;33655:71;33723:1;33712:9;33708:17;33699:6;33655:71;:::i;:::-;33736:72;33804:2;33793:9;33789:18;33780:6;33736:72;:::i;:::-;33818;33886:2;33875:9;33871:18;33862:6;33818:72;:::i;:::-;33455:442;;;;;;:::o;33903:220::-;34043:34;34039:1;34031:6;34027:14;34020:58;34112:3;34107:2;34099:6;34095:15;34088:28;33903:220;:::o;34129:366::-;34271:3;34292:67;34356:2;34351:3;34292:67;:::i;:::-;34285:74;;34368:93;34457:3;34368:93;:::i;:::-;34486:2;34481:3;34477:12;34470:19;;34129:366;;;:::o;34501:419::-;34667:4;34705:2;34694:9;34690:18;34682:26;;34754:9;34748:4;34744:20;34740:1;34729:9;34725:17;34718:47;34782:131;34908:4;34782:131;:::i;:::-;34774:139;;34501:419;;;:::o;34926:143::-;34983:5;35014:6;35008:13;34999:22;;35030:33;35057:5;35030:33;:::i;:::-;34926:143;;;;:::o;35075:351::-;35145:6;35194:2;35182:9;35173:7;35169:23;35165:32;35162:119;;;35200:79;;:::i;:::-;35162:119;35320:1;35345:64;35401:7;35392:6;35381:9;35377:22;35345:64;:::i;:::-;35335:74;;35291:128;35075:351;;;;:::o;35432:85::-;35477:7;35506:5;35495:16;;35432:85;;;:::o;35523:158::-;35581:9;35614:61;35632:42;35641:32;35667:5;35641:32;:::i;:::-;35632:42;:::i;:::-;35614:61;:::i;:::-;35601:74;;35523:158;;;:::o;35687:147::-;35782:45;35821:5;35782:45;:::i;:::-;35777:3;35770:58;35687:147;;:::o;35840:114::-;35907:6;35941:5;35935:12;35925:22;;35840:114;;;:::o;35960:184::-;36059:11;36093:6;36088:3;36081:19;36133:4;36128:3;36124:14;36109:29;;35960:184;;;;:::o;36150:132::-;36217:4;36240:3;36232:11;;36270:4;36265:3;36261:14;36253:22;;36150:132;;;:::o;36288:108::-;36365:24;36383:5;36365:24;:::i;:::-;36360:3;36353:37;36288:108;;:::o;36402:179::-;36471:10;36492:46;36534:3;36526:6;36492:46;:::i;:::-;36570:4;36565:3;36561:14;36547:28;;36402:179;;;;:::o;36587:113::-;36657:4;36689;36684:3;36680:14;36672:22;;36587:113;;;:::o;36736:732::-;36855:3;36884:54;36932:5;36884:54;:::i;:::-;36954:86;37033:6;37028:3;36954:86;:::i;:::-;36947:93;;37064:56;37114:5;37064:56;:::i;:::-;37143:7;37174:1;37159:284;37184:6;37181:1;37178:13;37159:284;;;37260:6;37254:13;37287:63;37346:3;37331:13;37287:63;:::i;:::-;37280:70;;37373:60;37426:6;37373:60;:::i;:::-;37363:70;;37219:224;37206:1;37203;37199:9;37194:14;;37159:284;;;37163:14;37459:3;37452:10;;36860:608;;;36736:732;;;;:::o;37474:831::-;37737:4;37775:3;37764:9;37760:19;37752:27;;37789:71;37857:1;37846:9;37842:17;37833:6;37789:71;:::i;:::-;37870:80;37946:2;37935:9;37931:18;37922:6;37870:80;:::i;:::-;37997:9;37991:4;37987:20;37982:2;37971:9;37967:18;37960:48;38025:108;38128:4;38119:6;38025:108;:::i;:::-;38017:116;;38143:72;38211:2;38200:9;38196:18;38187:6;38143:72;:::i;:::-;38225:73;38293:3;38282:9;38278:19;38269:6;38225:73;:::i;:::-;37474:831;;;;;;;;:::o;38311:807::-;38560:4;38598:3;38587:9;38583:19;38575:27;;38612:71;38680:1;38669:9;38665:17;38656:6;38612:71;:::i;:::-;38693:72;38761:2;38750:9;38746:18;38737:6;38693:72;:::i;:::-;38775:80;38851:2;38840:9;38836:18;38827:6;38775:80;:::i;:::-;38865;38941:2;38930:9;38926:18;38917:6;38865:80;:::i;:::-;38955:73;39023:3;39012:9;39008:19;38999:6;38955:73;:::i;:::-;39038;39106:3;39095:9;39091:19;39082:6;39038:73;:::i;:::-;38311:807;;;;;;;;;:::o;39124:143::-;39181:5;39212:6;39206:13;39197:22;;39228:33;39255:5;39228:33;:::i;:::-;39124:143;;;;:::o;39273:663::-;39361:6;39369;39377;39426:2;39414:9;39405:7;39401:23;39397:32;39394:119;;;39432:79;;:::i;:::-;39394:119;39552:1;39577:64;39633:7;39624:6;39613:9;39609:22;39577:64;:::i;:::-;39567:74;;39523:128;39690:2;39716:64;39772:7;39763:6;39752:9;39748:22;39716:64;:::i;:::-;39706:74;;39661:129;39829:2;39855:64;39911:7;39902:6;39891:9;39887:22;39855:64;:::i;:::-;39845:74;;39800:129;39273:663;;;;;:::o

Swarm Source

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