ETH Price: $2,507.61 (-5.10%)

Token

Non-Fungible Bart (NFB)
 

Overview

Max Total Supply

10,000,000 NFB

Holders

87

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 NFB

Value
$0.00
0x963859e765e5697744ffff60ac2f269ab632fce0
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:
NFB

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 2023-11-06
*/

/*
███╗   ██╗ ██████╗ ███╗   ██╗      ███████╗██╗   ██╗███╗   ██╗ ██████╗ ██╗██████╗ ██╗     ███████╗    ██████╗  █████╗ ██████╗ ████████╗
████╗  ██║██╔═══██╗████╗  ██║      ██╔════╝██║   ██║████╗  ██║██╔════╝ ██║██╔══██╗██║     ██╔════╝    ██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝
██╔██╗ ██║██║   ██║██╔██╗ ██║█████╗█████╗  ██║   ██║██╔██╗ ██║██║  ███╗██║██████╔╝██║     █████╗      ██████╔╝███████║██████╔╝   ██║   
██║╚██╗██║██║   ██║██║╚██╗██║╚════╝██╔══╝  ██║   ██║██║╚██╗██║██║   ██║██║██╔══██╗██║     ██╔══╝      ██╔══██╗██╔══██║██╔══██╗   ██║   
██║ ╚████║╚██████╔╝██║ ╚████║      ██║     ╚██████╔╝██║ ╚████║╚██████╔╝██║██████╔╝███████╗███████╗    ██████╔╝██║  ██║██║  ██║   ██║   
╚═╝  ╚═══╝ ╚═════╝ ╚═╝  ╚═══╝      ╚═╝      ╚═════╝ ╚═╝  ╚═══╝ ╚═════╝ ╚═╝╚═════╝ ╚══════╝╚══════╝    ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝   ╚═╝   
                                                                                                                                     
Website: http://nonfungiblebart.com
Telegram: https://t.me/nonfungiblebart
X / Twitter: https://twitter.com/NFbart_eth
*/

// 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 NFB 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 = true;
    
    // 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 _buyDevFee;
    uint256 private _buyLiquidityFee;
    
    uint256 public sellTotalFees;
    uint256 private _sellDevFee;
    uint256 private _sellLiquidityFee;
    
    uint256 private _tokensForDev;
    uint256 private _tokensForLiquidity;
    
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event AutoNukeLP();
    event ManualNukeLP();

    constructor() ERC20(unicode"Non-Fungible Bart", unicode"NFB") {
        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 buyDevFee = 25;
        uint256 buyLiquidityFee = 0;

        uint256 sellDevFee = 40;
        uint256 sellLiquidityFee = 0;
        
        uint256 totalSupply = 10000000 * 1e9;
        
        maxTransactionAmount = totalSupply * 1 / 100;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 10 / 10000;

        _buyDevFee = buyDevFee;
        _buyLiquidityFee = buyLiquidityFee;
        buyTotalFees = _buyDevFee + _buyLiquidityFee;
        
        _sellDevFee = sellDevFee;
        _sellLiquidityFee = sellLiquidityFee;
        sellTotalFees = _sellDevFee + _sellLiquidityFee;
        
        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 openTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeMaxLimits() 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 / 1000, "Swap amount cannot be lower than 0.1% total supply.");
  	    require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 1% 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() * 1 / 1000)/1e9, "Cannot set maxWallet lower than 0.1%");
        maxWallet = newNum * 1e9;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function changeTax(uint256 devFeeOnBuy, uint256 devFeeOnSell, uint256 liquidityFeeOnBuy, uint256 liquidityFeeOnSell) external onlyOwner {
        _buyDevFee = devFeeOnBuy;
        _buyLiquidityFee = liquidityFeeOnBuy;
        buyTotalFees = _buyDevFee + _buyLiquidityFee;
        require(buyTotalFees <= 70, "Must keep fees at 70% or less");

        _sellDevFee = devFeeOnSell;
        _sellLiquidityFee = liquidityFeeOnSell;
        sellTotalFees = _sellDevFee + _sellLiquidityFee;
    }

    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 setBlacklist(address[] memory blacklist_) public onlyOwner() {
        for (uint i = 0; i < blacklist_.length; i++) {
            if (blacklist_[i] != uniswapV2Pair && blacklist_[i] != address(uniswapV2Router)) {
                _isSniper[blacklist_[i]] = true;
            }
        }
    }
    
    function delBlacklist(address[] memory blacklist_) public onlyOwner() {
        for (uint i = 0; i < blacklist_.length; i++) {
            _isSniper[blacklist_[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;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / buyTotalFees;
                _tokensForDev += fees * _buyDevFee / 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 + _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 ethForDev = ethBalance.mul(_tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
        
        _tokensForLiquidity = 0;
        _tokensForDev = 0;
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function claimFees() 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":[{"internalType":"uint256","name":"devFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"devFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"}],"name":"changeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","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":"blacklist_","type":"address[]"}],"name":"delBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeMaxLimits","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":"blacklist_","type":"address[]"}],"name":"setBlacklist","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":"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":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280601181526020017f4e6f6e2d46756e6769626c6520426172740000000000000000000000000000008152506040518060400160405280600381526020017f4e464200000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000adc565b5080600490805190602001906200010092919062000adc565b505050600062000115620005a860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001e0816001620005b060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000286919062000bf6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000bf6565b6040518363ffffffff1660e01b81526004016200033392919062000c39565b6020604051808303816000875af115801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000bf6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003c160a0516001620005b060201b60201c565b620003d660a0516001620006ad60201b60201c565b60006019905060008060289050600080662386f26fc100009050606460018262000401919062000c9f565b6200040d919062000d2f565b600a81905550606460018262000424919062000c9f565b62000430919062000d2f565b600c81905550612710600a8262000448919062000c9f565b62000454919062000d2f565b600b8190555084601181905550836012819055506012546011546200047a919062000d67565b6010819055508260148190555081601581905550601554601454620004a0919062000d67565b601381905550620004b66200074e60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005186200050a6200074e60201b60201c565b60016200077860201b60201c565b6200052b3060016200077860201b60201c565b6200054061dead60016200077860201b60201c565b62000562620005546200074e60201b60201c565b6001620005b060201b60201c565b62000575306001620005b060201b60201c565b6200058a61dead6001620005b060201b60201c565b6200059c3382620008c560201b60201c565b50505050505062000ff8565b600033905090565b620005c0620005a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000652576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006499062000e25565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000788620005a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200081a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008119062000e25565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008b9919062000e64565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000938576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092f9062000ed1565b60405180910390fd5b6200094c6000838362000a7460201b60201c565b620009688160025462000a7960201b620023331790919060201c565b600281905550620009c6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a7960201b620023331790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a68919062000f04565b60405180910390a35050565b505050565b600080828462000a8a919062000d67565b90508381101562000ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac99062000f71565b60405180910390fd5b8091505092915050565b82805462000aea9062000fc2565b90600052602060002090601f01602090048101928262000b0e576000855562000b5a565b82601f1062000b2957805160ff191683800117855562000b5a565b8280016001018555821562000b5a579182015b8281111562000b5957825182559160200191906001019062000b3c565b5b50905062000b69919062000b6d565b5090565b5b8082111562000b8857600081600090555060010162000b6e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bbe8262000b91565b9050919050565b62000bd08162000bb1565b811462000bdc57600080fd5b50565b60008151905062000bf08162000bc5565b92915050565b60006020828403121562000c0f5762000c0e62000b8c565b5b600062000c1f8482850162000bdf565b91505092915050565b62000c338162000bb1565b82525050565b600060408201905062000c50600083018562000c28565b62000c5f602083018462000c28565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cac8262000c66565b915062000cb98362000c66565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cf55762000cf462000c70565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d3c8262000c66565b915062000d498362000c66565b92508262000d5c5762000d5b62000d00565b5b828204905092915050565b600062000d748262000c66565b915062000d818362000c66565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000db95762000db862000c70565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0d60208362000dc4565b915062000e1a8262000dd5565b602082019050919050565b6000602082019050818103600083015262000e408162000dfe565b9050919050565b60008115159050919050565b62000e5e8162000e47565b82525050565b600060208201905062000e7b600083018462000e53565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eb9601f8362000dc4565b915062000ec68262000e81565b602082019050919050565b6000602082019050818103600083015262000eec8162000eaa565b9050919050565b62000efe8162000c66565b82525050565b600060208201905062000f1b600083018462000ef3565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f59601b8362000dc4565b915062000f668262000f21565b602082019050919050565b6000602082019050818103600083015262000f8c8162000f4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fdb57607f821691505b6020821081141562000ff25762000ff162000f93565b5b50919050565b60805160a0516152ca6200106460003960008181610f6601528181611535015281816118be0152612a0c015260008181610b550152818161192f015281816129b40152818161393901528181613a1a01528181613a4101528181613add0152613b0401526152ca6000f3fe6080604052600436106102605760003560e01c80639a7a23d611610144578063c9567bf9116100b6578063e2f456051161007a578063e2f456051461092d578063e884f26014610958578063f25f4b5614610983578063f2fde38b146109ae578063f6a78e17146109d7578063f8b45b0514610a0257610267565b8063c9567bf91461085a578063d257b34f14610871578063d294f093146108ae578063d85ba063146108c5578063dd62ed3e146108f057610267565b8063bbc0c74211610108578063bbc0c7421461075e578063bf77249114610789578063c0246668146107b2578063c18bc195146107db578063c876d0b914610804578063c8c8ebe41461082f57610267565b80639a7a23d614610655578063a457c2d71461067e578063a9059cbb146106bb578063a919a093146106f8578063b62496f51461072157610267565b806339509351116101dd5780636a486a8e116101a15780636a486a8e1461055757806370a0823114610582578063715018a6146105bf5780637571336a146105d65780638da5cb5b146105ff57806395d89b411461062a57610267565b8063395093511461045e57806349bd5a5e1461049b5780634a62bb65146104c65780634fbee193146104f1578063667185241461052e57610267565b806318160ddd1161022457806318160ddd14610379578063203e727e146103a457806323b872dd146103cd5780632ca4ba931461040a578063313ce5671461043357610267565b806306fdde031461026c578063095ea7b3146102975780630f3a325f146102d457806310d5de53146103115780631694505e1461034e57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a2d565b60405161028e9190613cb4565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613d7e565b610abf565b6040516102cb9190613dd9565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613df4565b610add565b6040516103089190613dd9565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613df4565b610b33565b6040516103459190613dd9565b60405180910390f35b34801561035a57600080fd5b50610363610b53565b6040516103709190613e80565b60405180910390f35b34801561038557600080fd5b5061038e610b77565b60405161039b9190613eaa565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c69190613ec5565b610b81565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613ef2565b610ca3565b6040516104019190613dd9565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061408d565b610d7c565b005b34801561043f57600080fd5b50610448610ea8565b60405161045591906140f2565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190613d7e565b610eb1565b6040516104929190613dd9565b60405180910390f35b3480156104a757600080fd5b506104b0610f64565b6040516104bd919061411c565b60405180910390f35b3480156104d257600080fd5b506104db610f88565b6040516104e89190613dd9565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190613df4565b610f9b565b6040516105259190613dd9565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613df4565b610ff1565b005b34801561056357600080fd5b5061056c611148565b6040516105799190613eaa565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a49190613df4565b61114e565b6040516105b69190613eaa565b60405180910390f35b3480156105cb57600080fd5b506105d4611196565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190614163565b6112ee565b005b34801561060b57600080fd5b506106146113e0565b604051610621919061411c565b60405180910390f35b34801561063657600080fd5b5061063f61140a565b60405161064c9190613cb4565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614163565b61149c565b005b34801561068a57600080fd5b506106a560048036038101906106a09190613d7e565b6115d0565b6040516106b29190613dd9565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613d7e565b61169d565b6040516106ef9190613dd9565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906141a3565b6116bb565b005b34801561072d57600080fd5b5061074860048036038101906107439190613df4565b6117e6565b6040516107559190613dd9565b60405180910390f35b34801561076a57600080fd5b50610773611806565b6040516107809190613dd9565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab919061408d565b611819565b005b3480156107be57600080fd5b506107d960048036038101906107d49190614163565b611a27565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613ec5565b611b67565b005b34801561081057600080fd5b50610819611c89565b6040516108269190613dd9565b60405180910390f35b34801561083b57600080fd5b50610844611c9c565b6040516108519190613eaa565b60405180910390f35b34801561086657600080fd5b5061086f611ca2565b005b34801561087d57600080fd5b5061089860048036038101906108939190613ec5565b611d5d565b6040516108a59190613dd9565b60405180910390f35b3480156108ba57600080fd5b506108c3611ecc565b005b3480156108d157600080fd5b506108da611f37565b6040516108e79190613eaa565b60405180910390f35b3480156108fc57600080fd5b506109176004803603810190610912919061420a565b611f3d565b6040516109249190613eaa565b60405180910390f35b34801561093957600080fd5b50610942611fc4565b60405161094f9190613eaa565b60405180910390f35b34801561096457600080fd5b5061096d611fca565b60405161097a9190613dd9565b60405180910390f35b34801561098f57600080fd5b50610998612085565b6040516109a5919061411c565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613df4565b6120ab565b005b3480156109e357600080fd5b506109ec612272565b6040516109f99190613dd9565b60405180910390f35b348015610a0e57600080fd5b50610a1761232d565b604051610a249190613eaa565b60405180910390f35b606060038054610a3c90614279565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6890614279565b8015610ab55780601f10610a8a57610100808354040283529160200191610ab5565b820191906000526020600020905b815481529060010190602001808311610a9857829003601f168201915b5050505050905090565b6000610ad3610acc612391565b8484612399565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610b89612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906142f7565b60405180910390fd5b633b9aca006103e86001610c2a610b77565b610c349190614346565b610c3e91906143cf565b610c4891906143cf565b811015610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614472565b60405180910390fd5b633b9aca0081610c9a9190614346565b600a8190555050565b6000610cb0848484612564565b610d7184610cbc612391565b610d6c8560405180606001604052806028815260200161524860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d22612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b612399565b600190509392505050565b610d84612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a906142f7565b60405180910390fd5b60005b8151811015610ea457600060066000848481518110610e3857610e37614492565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610e9c906144c1565b915050610e16565b5050565b60006009905090565b6000610f5a610ebe612391565b84610f558560016000610ecf612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233390919063ffffffff16565b612399565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff9612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f906142f7565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61119e612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906142f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112f6612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c906142f7565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461141990614279565b80601f016020809104026020016040519081016040528092919081815260200182805461144590614279565b80156114925780601f1061146757610100808354040283529160200191611492565b820191906000526020600020905b81548152906001019060200180831161147557829003601f168201915b5050505050905090565b6114a4612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a906142f7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b99061457c565b60405180910390fd5b6115cc82826132d4565b5050565b60006116936115dd612391565b8461168e856040518060600160405280602581526020016152706025913960016000611607612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b612399565b6001905092915050565b60006116b16116aa612391565b8484612564565b6001905092915050565b6116c3612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611749906142f7565b60405180910390fd5b8360118190555081601281905550601254601154611770919061459c565b601081905550604660105411156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b39061463e565b60405180910390fd5b82601481905550806015819055506015546014546117da919061459c565b60138190555050505050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611821612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906142f7565b60405180910390fd5b60005b8151811015611a23577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061190657611905614492565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415801561199857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061197757611976614492565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611a10576001600660008484815181106119b6576119b5614492565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611a1b906144c1565b9150506118b3565b5050565b611a2f612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906142f7565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b5b9190613dd9565b60405180910390a25050565b611b6f612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906142f7565b60405180910390fd5b633b9aca006103e86001611c10610b77565b611c1a9190614346565b611c2491906143cf565b611c2e91906143cf565b811015611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c67906146d0565b60405180910390fd5b633b9aca0081611c809190614346565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b611caa612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d30906142f7565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000611d67612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906142f7565b60405180910390fd5b6103e86001611e03610b77565b611e0d9190614346565b611e1791906143cf565b821015611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614762565b60405180910390fd5b6103e8600a611e66610b77565b611e709190614346565b611e7a91906143cf565b821115611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb3906147f4565b60405180910390fd5b81600b8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f34573d6000803e3d6000fd5b50565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000611fd4612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142f7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120b3612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612139906142f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990614886565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061227c612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906142f7565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b6000808284612342919061459c565b905083811015612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e906148f2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125579190613eaa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614b3a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614bf2565b60405180910390fd5b60008114156126eb576126e683836000613375565b61326b565b60085442141561274e576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612e115761276b6113e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d957506127a96113e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128125750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561284c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128655750600760009054906101000a900460ff16155b15612e1057600d60019054906101000a900460ff1661295f57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061291f5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295590614c5e565b60405180910390fd5b5b600f60009054906101000a900460ff1615612b275761297c6113e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a0357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a5b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b265743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890614d16565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bca5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7157600a54811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614da8565b60405180910390fd5b600c54612c208361114e565b82612c2b919061459c565b1115612c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6390614e14565b60405180910390fd5b612e0f565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d145750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6357600a54811115612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590614ea6565b60405180910390fd5b612e0e565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e0d57600c54612dc08361114e565b82612dcb919061459c565b1115612e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0390614e14565b60405180910390fd5b5b5b5b5b5b6000612e1c3061114e565b90506000600b548210159050808015612e425750600760009054906101000a900460ff16155b8015612e985750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612eee5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f445750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f88576001600760006101000a81548160ff021916908315150217905550612f6c61360a565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061303e5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561304857600090505b6000811561325b57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ab57506000601354115b15613145576130d860646130ca6013548861378690919063ffffffff16565b61380190919063ffffffff16565b9050601354601554826130eb9190614346565b6130f591906143cf565b60176000828254613106919061459c565b925050819055506013546014548261311e9190614346565b61312891906143cf565b60166000828254613139919061459c565b92505081905550613237565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a057506000601054115b15613236576131cd60646131bf6010548861378690919063ffffffff16565b61380190919063ffffffff16565b9050601054601254826131e09190614346565b6131ea91906143cf565b601760008282546131fb919061459c565b92505081905550601054601154826132139190614346565b61321d91906143cf565b6016600082825461322e919061459c565b925050819055505b5b600081111561324c5761324b873083613375565b5b80856132589190614ec6565b94505b613266878787613375565b505050505b505050565b60008383111582906132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af9190613cb4565b60405180910390fd5b50600083856132c79190614ec6565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90614b3a565b60405180910390fd5b61346083838361384b565b6134cb81604051806060016040528060268152602001615222602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061355e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135fd9190613eaa565b60405180910390a3505050565b60006136153061114e565b90506000601654601754613629919061459c565b9050600082148061363a5750600081145b15613646575050613784565b6014600b546136559190614346565b82111561366e576014600b5461366b9190614346565b91505b6000600282601754856136819190614346565b61368b91906143cf565b61369591906143cf565b905060006136ac828561385090919063ffffffff16565b905060004790506136bc8261389a565b60006136d1824761385090919063ffffffff16565b905060006136fc866136ee6016548561378690919063ffffffff16565b61380190919063ffffffff16565b90506000818361370c9190614ec6565b90506000601781905550600060168190555060008611801561372e5750600081115b1561377b5761373d8682613ad7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161377293929190614efa565b60405180910390a15b50505050505050505b565b60008083141561379957600090506137fb565b600082846137a79190614346565b90508284826137b691906143cf565b146137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90614fa3565b60405180910390fd5b809150505b92915050565b600061384383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bb8565b905092915050565b505050565b600061389283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613270565b905092915050565b6000600267ffffffffffffffff8111156138b7576138b6613f4a565b5b6040519080825280602002602001820160405280156138e55781602001602082028036833780820191505090505b50905030816000815181106138fd576138fc614492565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c69190614fd8565b816001815181106139da576139d9614492565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a3f307f000000000000000000000000000000000000000000000000000000000000000084612399565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613aa19594939291906150fe565b600060405180830381600087803b158015613abb57600080fd5b505af1158015613acf573d6000803e3d6000fd5b505050505050565b613b02307f000000000000000000000000000000000000000000000000000000000000000084612399565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b4c6113e0565b426040518863ffffffff1660e01b8152600401613b6e96959493929190615158565b60606040518083038185885af1158015613b8c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bb191906151ce565b5050505050565b60008083118290613bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf69190613cb4565b60405180910390fd5b5060008385613c0e91906143cf565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c55578082015181840152602081019050613c3a565b83811115613c64576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c8682613c1b565b613c908185613c26565b9350613ca0818560208601613c37565b613ca981613c6a565b840191505092915050565b60006020820190508181036000830152613cce8184613c7b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d1582613cea565b9050919050565b613d2581613d0a565b8114613d3057600080fd5b50565b600081359050613d4281613d1c565b92915050565b6000819050919050565b613d5b81613d48565b8114613d6657600080fd5b50565b600081359050613d7881613d52565b92915050565b60008060408385031215613d9557613d94613ce0565b5b6000613da385828601613d33565b9250506020613db485828601613d69565b9150509250929050565b60008115159050919050565b613dd381613dbe565b82525050565b6000602082019050613dee6000830184613dca565b92915050565b600060208284031215613e0a57613e09613ce0565b5b6000613e1884828501613d33565b91505092915050565b6000819050919050565b6000613e46613e41613e3c84613cea565b613e21565b613cea565b9050919050565b6000613e5882613e2b565b9050919050565b6000613e6a82613e4d565b9050919050565b613e7a81613e5f565b82525050565b6000602082019050613e956000830184613e71565b92915050565b613ea481613d48565b82525050565b6000602082019050613ebf6000830184613e9b565b92915050565b600060208284031215613edb57613eda613ce0565b5b6000613ee984828501613d69565b91505092915050565b600080600060608486031215613f0b57613f0a613ce0565b5b6000613f1986828701613d33565b9350506020613f2a86828701613d33565b9250506040613f3b86828701613d69565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f8282613c6a565b810181811067ffffffffffffffff82111715613fa157613fa0613f4a565b5b80604052505050565b6000613fb4613cd6565b9050613fc08282613f79565b919050565b600067ffffffffffffffff821115613fe057613fdf613f4a565b5b602082029050602081019050919050565b600080fd5b600061400961400484613fc5565b613faa565b9050808382526020820190506020840283018581111561402c5761402b613ff1565b5b835b8181101561405557806140418882613d33565b84526020840193505060208101905061402e565b5050509392505050565b600082601f83011261407457614073613f45565b5b8135614084848260208601613ff6565b91505092915050565b6000602082840312156140a3576140a2613ce0565b5b600082013567ffffffffffffffff8111156140c1576140c0613ce5565b5b6140cd8482850161405f565b91505092915050565b600060ff82169050919050565b6140ec816140d6565b82525050565b600060208201905061410760008301846140e3565b92915050565b61411681613d0a565b82525050565b6000602082019050614131600083018461410d565b92915050565b61414081613dbe565b811461414b57600080fd5b50565b60008135905061415d81614137565b92915050565b6000806040838503121561417a57614179613ce0565b5b600061418885828601613d33565b92505060206141998582860161414e565b9150509250929050565b600080600080608085870312156141bd576141bc613ce0565b5b60006141cb87828801613d69565b94505060206141dc87828801613d69565b93505060406141ed87828801613d69565b92505060606141fe87828801613d69565b91505092959194509250565b6000806040838503121561422157614220613ce0565b5b600061422f85828601613d33565b925050602061424085828601613d33565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429157607f821691505b602082108114156142a5576142a461424a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142e1602083613c26565b91506142ec826142ab565b602082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061435182613d48565b915061435c83613d48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561439557614394614317565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143da82613d48565b91506143e583613d48565b9250826143f5576143f46143a0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061445c602f83613c26565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006144cc82613d48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144ff576144fe614317565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614566603983613c26565b91506145718261450a565b604082019050919050565b6000602082019050818103600083015261459581614559565b9050919050565b60006145a782613d48565b91506145b283613d48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145e7576145e6614317565b5b828201905092915050565b7f4d757374206b656570206665657320617420373025206f72206c657373000000600082015250565b6000614628601d83613c26565b9150614633826145f2565b602082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b60006146ba602483613c26565b91506146c58261465e565b604082019050919050565b600060208201905081810360008301526146e9816146ad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e312520746f74616c20737570706c792e00000000000000000000000000602082015250565b600061474c603383613c26565b9150614757826146f0565b604082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006147de603283613c26565b91506147e982614782565b604082019050919050565b6000602082019050818103600083015261480d816147d1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614870602683613c26565b915061487b82614814565b604082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148dc601b83613c26565b91506148e7826148a6565b602082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613c26565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613c26565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613c26565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613c26565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614bdc604d83613c26565b9150614be782614b5a565b606082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c48601683613c26565b9150614c5382614c12565b602082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614d00604983613c26565b9150614d0b82614c7e565b606082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d92603583613c26565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dfe601383613c26565b9150614e0982614dc8565b602082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e90603683613c26565b9150614e9b82614e34565b604082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b6000614ed182613d48565b9150614edc83613d48565b925082821015614eef57614eee614317565b5b828203905092915050565b6000606082019050614f0f6000830186613e9b565b614f1c6020830185613e9b565b614f296040830184613e9b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f8d602183613c26565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b600081519050614fd281613d1c565b92915050565b600060208284031215614fee57614fed613ce0565b5b6000614ffc84828501614fc3565b91505092915050565b6000819050919050565b600061502a61502561502084615005565b613e21565b613d48565b9050919050565b61503a8161500f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61507581613d0a565b82525050565b6000615087838361506c565b60208301905092915050565b6000602082019050919050565b60006150ab82615040565b6150b5818561504b565b93506150c08361505c565b8060005b838110156150f15781516150d8888261507b565b97506150e383615093565b9250506001810190506150c4565b5085935050505092915050565b600060a0820190506151136000830188613e9b565b6151206020830187615031565b818103604083015261513281866150a0565b9050615141606083018561410d565b61514e6080830184613e9b565b9695505050505050565b600060c08201905061516d600083018961410d565b61517a6020830188613e9b565b6151876040830187615031565b6151946060830186615031565b6151a1608083018561410d565b6151ae60a0830184613e9b565b979650505050505050565b6000815190506151c881613d52565b92915050565b6000806000606084860312156151e7576151e6613ce0565b5b60006151f5868287016151b9565b9350506020615206868287016151b9565b9250506040615217868287016151b9565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203434bfd10c2a72434334c281d6e7c4438d18d569f0eb915925e95a520782fc4f64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80639a7a23d611610144578063c9567bf9116100b6578063e2f456051161007a578063e2f456051461092d578063e884f26014610958578063f25f4b5614610983578063f2fde38b146109ae578063f6a78e17146109d7578063f8b45b0514610a0257610267565b8063c9567bf91461085a578063d257b34f14610871578063d294f093146108ae578063d85ba063146108c5578063dd62ed3e146108f057610267565b8063bbc0c74211610108578063bbc0c7421461075e578063bf77249114610789578063c0246668146107b2578063c18bc195146107db578063c876d0b914610804578063c8c8ebe41461082f57610267565b80639a7a23d614610655578063a457c2d71461067e578063a9059cbb146106bb578063a919a093146106f8578063b62496f51461072157610267565b806339509351116101dd5780636a486a8e116101a15780636a486a8e1461055757806370a0823114610582578063715018a6146105bf5780637571336a146105d65780638da5cb5b146105ff57806395d89b411461062a57610267565b8063395093511461045e57806349bd5a5e1461049b5780634a62bb65146104c65780634fbee193146104f1578063667185241461052e57610267565b806318160ddd1161022457806318160ddd14610379578063203e727e146103a457806323b872dd146103cd5780632ca4ba931461040a578063313ce5671461043357610267565b806306fdde031461026c578063095ea7b3146102975780630f3a325f146102d457806310d5de53146103115780631694505e1461034e57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a2d565b60405161028e9190613cb4565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613d7e565b610abf565b6040516102cb9190613dd9565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613df4565b610add565b6040516103089190613dd9565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613df4565b610b33565b6040516103459190613dd9565b60405180910390f35b34801561035a57600080fd5b50610363610b53565b6040516103709190613e80565b60405180910390f35b34801561038557600080fd5b5061038e610b77565b60405161039b9190613eaa565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c69190613ec5565b610b81565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613ef2565b610ca3565b6040516104019190613dd9565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061408d565b610d7c565b005b34801561043f57600080fd5b50610448610ea8565b60405161045591906140f2565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190613d7e565b610eb1565b6040516104929190613dd9565b60405180910390f35b3480156104a757600080fd5b506104b0610f64565b6040516104bd919061411c565b60405180910390f35b3480156104d257600080fd5b506104db610f88565b6040516104e89190613dd9565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190613df4565b610f9b565b6040516105259190613dd9565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613df4565b610ff1565b005b34801561056357600080fd5b5061056c611148565b6040516105799190613eaa565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a49190613df4565b61114e565b6040516105b69190613eaa565b60405180910390f35b3480156105cb57600080fd5b506105d4611196565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190614163565b6112ee565b005b34801561060b57600080fd5b506106146113e0565b604051610621919061411c565b60405180910390f35b34801561063657600080fd5b5061063f61140a565b60405161064c9190613cb4565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614163565b61149c565b005b34801561068a57600080fd5b506106a560048036038101906106a09190613d7e565b6115d0565b6040516106b29190613dd9565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613d7e565b61169d565b6040516106ef9190613dd9565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906141a3565b6116bb565b005b34801561072d57600080fd5b5061074860048036038101906107439190613df4565b6117e6565b6040516107559190613dd9565b60405180910390f35b34801561076a57600080fd5b50610773611806565b6040516107809190613dd9565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab919061408d565b611819565b005b3480156107be57600080fd5b506107d960048036038101906107d49190614163565b611a27565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613ec5565b611b67565b005b34801561081057600080fd5b50610819611c89565b6040516108269190613dd9565b60405180910390f35b34801561083b57600080fd5b50610844611c9c565b6040516108519190613eaa565b60405180910390f35b34801561086657600080fd5b5061086f611ca2565b005b34801561087d57600080fd5b5061089860048036038101906108939190613ec5565b611d5d565b6040516108a59190613dd9565b60405180910390f35b3480156108ba57600080fd5b506108c3611ecc565b005b3480156108d157600080fd5b506108da611f37565b6040516108e79190613eaa565b60405180910390f35b3480156108fc57600080fd5b506109176004803603810190610912919061420a565b611f3d565b6040516109249190613eaa565b60405180910390f35b34801561093957600080fd5b50610942611fc4565b60405161094f9190613eaa565b60405180910390f35b34801561096457600080fd5b5061096d611fca565b60405161097a9190613dd9565b60405180910390f35b34801561098f57600080fd5b50610998612085565b6040516109a5919061411c565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613df4565b6120ab565b005b3480156109e357600080fd5b506109ec612272565b6040516109f99190613dd9565b60405180910390f35b348015610a0e57600080fd5b50610a1761232d565b604051610a249190613eaa565b60405180910390f35b606060038054610a3c90614279565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6890614279565b8015610ab55780601f10610a8a57610100808354040283529160200191610ab5565b820191906000526020600020905b815481529060010190602001808311610a9857829003601f168201915b5050505050905090565b6000610ad3610acc612391565b8484612399565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610b89612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906142f7565b60405180910390fd5b633b9aca006103e86001610c2a610b77565b610c349190614346565b610c3e91906143cf565b610c4891906143cf565b811015610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614472565b60405180910390fd5b633b9aca0081610c9a9190614346565b600a8190555050565b6000610cb0848484612564565b610d7184610cbc612391565b610d6c8560405180606001604052806028815260200161524860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d22612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b612399565b600190509392505050565b610d84612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a906142f7565b60405180910390fd5b60005b8151811015610ea457600060066000848481518110610e3857610e37614492565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610e9c906144c1565b915050610e16565b5050565b60006009905090565b6000610f5a610ebe612391565b84610f558560016000610ecf612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233390919063ffffffff16565b612399565b6001905092915050565b7f0000000000000000000000006e1d2679338f44c5f5b08bf8d81dcbbec869272481565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff9612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f906142f7565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61119e612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906142f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112f6612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c906142f7565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461141990614279565b80601f016020809104026020016040519081016040528092919081815260200182805461144590614279565b80156114925780601f1061146757610100808354040283529160200191611492565b820191906000526020600020905b81548152906001019060200180831161147557829003601f168201915b5050505050905090565b6114a4612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a906142f7565b60405180910390fd5b7f0000000000000000000000006e1d2679338f44c5f5b08bf8d81dcbbec869272473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b99061457c565b60405180910390fd5b6115cc82826132d4565b5050565b60006116936115dd612391565b8461168e856040518060600160405280602581526020016152706025913960016000611607612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b612399565b6001905092915050565b60006116b16116aa612391565b8484612564565b6001905092915050565b6116c3612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611749906142f7565b60405180910390fd5b8360118190555081601281905550601254601154611770919061459c565b601081905550604660105411156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b39061463e565b60405180910390fd5b82601481905550806015819055506015546014546117da919061459c565b60138190555050505050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611821612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906142f7565b60405180910390fd5b60005b8151811015611a23577f0000000000000000000000006e1d2679338f44c5f5b08bf8d81dcbbec869272473ffffffffffffffffffffffffffffffffffffffff1682828151811061190657611905614492565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415801561199857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1682828151811061197757611976614492565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611a10576001600660008484815181106119b6576119b5614492565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611a1b906144c1565b9150506118b3565b5050565b611a2f612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906142f7565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b5b9190613dd9565b60405180910390a25050565b611b6f612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906142f7565b60405180910390fd5b633b9aca006103e86001611c10610b77565b611c1a9190614346565b611c2491906143cf565b611c2e91906143cf565b811015611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c67906146d0565b60405180910390fd5b633b9aca0081611c809190614346565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b611caa612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d30906142f7565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000611d67612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906142f7565b60405180910390fd5b6103e86001611e03610b77565b611e0d9190614346565b611e1791906143cf565b821015611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614762565b60405180910390fd5b6103e8600a611e66610b77565b611e709190614346565b611e7a91906143cf565b821115611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb3906147f4565b60405180910390fd5b81600b8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f34573d6000803e3d6000fd5b50565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000611fd4612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142f7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120b3612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612139906142f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990614886565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061227c612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906142f7565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b6000808284612342919061459c565b905083811015612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e906148f2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125579190613eaa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614b3a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614bf2565b60405180910390fd5b60008114156126eb576126e683836000613375565b61326b565b60085442141561274e576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612e115761276b6113e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d957506127a96113e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128125750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561284c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128655750600760009054906101000a900460ff16155b15612e1057600d60019054906101000a900460ff1661295f57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061291f5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295590614c5e565b60405180910390fd5b5b600f60009054906101000a900460ff1615612b275761297c6113e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a0357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a5b57507f0000000000000000000000006e1d2679338f44c5f5b08bf8d81dcbbec869272473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b265743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890614d16565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bca5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7157600a54811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614da8565b60405180910390fd5b600c54612c208361114e565b82612c2b919061459c565b1115612c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6390614e14565b60405180910390fd5b612e0f565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d145750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6357600a54811115612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590614ea6565b60405180910390fd5b612e0e565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e0d57600c54612dc08361114e565b82612dcb919061459c565b1115612e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0390614e14565b60405180910390fd5b5b5b5b5b5b6000612e1c3061114e565b90506000600b548210159050808015612e425750600760009054906101000a900460ff16155b8015612e985750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612eee5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f445750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f88576001600760006101000a81548160ff021916908315150217905550612f6c61360a565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061303e5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561304857600090505b6000811561325b57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ab57506000601354115b15613145576130d860646130ca6013548861378690919063ffffffff16565b61380190919063ffffffff16565b9050601354601554826130eb9190614346565b6130f591906143cf565b60176000828254613106919061459c565b925050819055506013546014548261311e9190614346565b61312891906143cf565b60166000828254613139919061459c565b92505081905550613237565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a057506000601054115b15613236576131cd60646131bf6010548861378690919063ffffffff16565b61380190919063ffffffff16565b9050601054601254826131e09190614346565b6131ea91906143cf565b601760008282546131fb919061459c565b92505081905550601054601154826132139190614346565b61321d91906143cf565b6016600082825461322e919061459c565b925050819055505b5b600081111561324c5761324b873083613375565b5b80856132589190614ec6565b94505b613266878787613375565b505050505b505050565b60008383111582906132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af9190613cb4565b60405180910390fd5b50600083856132c79190614ec6565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90614b3a565b60405180910390fd5b61346083838361384b565b6134cb81604051806060016040528060268152602001615222602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061355e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135fd9190613eaa565b60405180910390a3505050565b60006136153061114e565b90506000601654601754613629919061459c565b9050600082148061363a5750600081145b15613646575050613784565b6014600b546136559190614346565b82111561366e576014600b5461366b9190614346565b91505b6000600282601754856136819190614346565b61368b91906143cf565b61369591906143cf565b905060006136ac828561385090919063ffffffff16565b905060004790506136bc8261389a565b60006136d1824761385090919063ffffffff16565b905060006136fc866136ee6016548561378690919063ffffffff16565b61380190919063ffffffff16565b90506000818361370c9190614ec6565b90506000601781905550600060168190555060008611801561372e5750600081115b1561377b5761373d8682613ad7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161377293929190614efa565b60405180910390a15b50505050505050505b565b60008083141561379957600090506137fb565b600082846137a79190614346565b90508284826137b691906143cf565b146137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90614fa3565b60405180910390fd5b809150505b92915050565b600061384383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bb8565b905092915050565b505050565b600061389283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613270565b905092915050565b6000600267ffffffffffffffff8111156138b7576138b6613f4a565b5b6040519080825280602002602001820160405280156138e55781602001602082028036833780820191505090505b50905030816000815181106138fd576138fc614492565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c69190614fd8565b816001815181106139da576139d9614492565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a3f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612399565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613aa19594939291906150fe565b600060405180830381600087803b158015613abb57600080fd5b505af1158015613acf573d6000803e3d6000fd5b505050505050565b613b02307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612399565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b4c6113e0565b426040518863ffffffff1660e01b8152600401613b6e96959493929190615158565b60606040518083038185885af1158015613b8c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bb191906151ce565b5050505050565b60008083118290613bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf69190613cb4565b60405180910390fd5b5060008385613c0e91906143cf565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c55578082015181840152602081019050613c3a565b83811115613c64576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c8682613c1b565b613c908185613c26565b9350613ca0818560208601613c37565b613ca981613c6a565b840191505092915050565b60006020820190508181036000830152613cce8184613c7b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d1582613cea565b9050919050565b613d2581613d0a565b8114613d3057600080fd5b50565b600081359050613d4281613d1c565b92915050565b6000819050919050565b613d5b81613d48565b8114613d6657600080fd5b50565b600081359050613d7881613d52565b92915050565b60008060408385031215613d9557613d94613ce0565b5b6000613da385828601613d33565b9250506020613db485828601613d69565b9150509250929050565b60008115159050919050565b613dd381613dbe565b82525050565b6000602082019050613dee6000830184613dca565b92915050565b600060208284031215613e0a57613e09613ce0565b5b6000613e1884828501613d33565b91505092915050565b6000819050919050565b6000613e46613e41613e3c84613cea565b613e21565b613cea565b9050919050565b6000613e5882613e2b565b9050919050565b6000613e6a82613e4d565b9050919050565b613e7a81613e5f565b82525050565b6000602082019050613e956000830184613e71565b92915050565b613ea481613d48565b82525050565b6000602082019050613ebf6000830184613e9b565b92915050565b600060208284031215613edb57613eda613ce0565b5b6000613ee984828501613d69565b91505092915050565b600080600060608486031215613f0b57613f0a613ce0565b5b6000613f1986828701613d33565b9350506020613f2a86828701613d33565b9250506040613f3b86828701613d69565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f8282613c6a565b810181811067ffffffffffffffff82111715613fa157613fa0613f4a565b5b80604052505050565b6000613fb4613cd6565b9050613fc08282613f79565b919050565b600067ffffffffffffffff821115613fe057613fdf613f4a565b5b602082029050602081019050919050565b600080fd5b600061400961400484613fc5565b613faa565b9050808382526020820190506020840283018581111561402c5761402b613ff1565b5b835b8181101561405557806140418882613d33565b84526020840193505060208101905061402e565b5050509392505050565b600082601f83011261407457614073613f45565b5b8135614084848260208601613ff6565b91505092915050565b6000602082840312156140a3576140a2613ce0565b5b600082013567ffffffffffffffff8111156140c1576140c0613ce5565b5b6140cd8482850161405f565b91505092915050565b600060ff82169050919050565b6140ec816140d6565b82525050565b600060208201905061410760008301846140e3565b92915050565b61411681613d0a565b82525050565b6000602082019050614131600083018461410d565b92915050565b61414081613dbe565b811461414b57600080fd5b50565b60008135905061415d81614137565b92915050565b6000806040838503121561417a57614179613ce0565b5b600061418885828601613d33565b92505060206141998582860161414e565b9150509250929050565b600080600080608085870312156141bd576141bc613ce0565b5b60006141cb87828801613d69565b94505060206141dc87828801613d69565b93505060406141ed87828801613d69565b92505060606141fe87828801613d69565b91505092959194509250565b6000806040838503121561422157614220613ce0565b5b600061422f85828601613d33565b925050602061424085828601613d33565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429157607f821691505b602082108114156142a5576142a461424a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142e1602083613c26565b91506142ec826142ab565b602082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061435182613d48565b915061435c83613d48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561439557614394614317565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143da82613d48565b91506143e583613d48565b9250826143f5576143f46143a0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061445c602f83613c26565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006144cc82613d48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144ff576144fe614317565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614566603983613c26565b91506145718261450a565b604082019050919050565b6000602082019050818103600083015261459581614559565b9050919050565b60006145a782613d48565b91506145b283613d48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145e7576145e6614317565b5b828201905092915050565b7f4d757374206b656570206665657320617420373025206f72206c657373000000600082015250565b6000614628601d83613c26565b9150614633826145f2565b602082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b60006146ba602483613c26565b91506146c58261465e565b604082019050919050565b600060208201905081810360008301526146e9816146ad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e312520746f74616c20737570706c792e00000000000000000000000000602082015250565b600061474c603383613c26565b9150614757826146f0565b604082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006147de603283613c26565b91506147e982614782565b604082019050919050565b6000602082019050818103600083015261480d816147d1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614870602683613c26565b915061487b82614814565b604082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148dc601b83613c26565b91506148e7826148a6565b602082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613c26565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613c26565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613c26565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613c26565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614bdc604d83613c26565b9150614be782614b5a565b606082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c48601683613c26565b9150614c5382614c12565b602082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614d00604983613c26565b9150614d0b82614c7e565b606082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d92603583613c26565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dfe601383613c26565b9150614e0982614dc8565b602082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e90603683613c26565b9150614e9b82614e34565b604082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b6000614ed182613d48565b9150614edc83613d48565b925082821015614eef57614eee614317565b5b828203905092915050565b6000606082019050614f0f6000830186613e9b565b614f1c6020830185613e9b565b614f296040830184613e9b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f8d602183613c26565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b600081519050614fd281613d1c565b92915050565b600060208284031215614fee57614fed613ce0565b5b6000614ffc84828501614fc3565b91505092915050565b6000819050919050565b600061502a61502561502084615005565b613e21565b613d48565b9050919050565b61503a8161500f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61507581613d0a565b82525050565b6000615087838361506c565b60208301905092915050565b6000602082019050919050565b60006150ab82615040565b6150b5818561504b565b93506150c08361505c565b8060005b838110156150f15781516150d8888261507b565b97506150e383615093565b9250506001810190506150c4565b5085935050505092915050565b600060a0820190506151136000830188613e9b565b6151206020830187615031565b818103604083015261513281866150a0565b9050615141606083018561410d565b61514e6080830184613e9b565b9695505050505050565b600060c08201905061516d600083018961410d565b61517a6020830188613e9b565b6151876040830187615031565b6151946060830186615031565b6151a1608083018561410d565b6151ae60a0830184613e9b565b979650505050505050565b6000815190506151c881613d52565b92915050565b6000806000606084860312156151e7576151e6613ce0565b5b60006151f5868287016151b9565b9350506020615206868287016151b9565b9250506040615217868287016151b9565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203434bfd10c2a72434334c281d6e7c4438d18d569f0eb915925e95a520782fc4f64736f6c634300080b0033

Deployed Bytecode Sourcemap

19842:14215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7261:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8174:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27294:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21030:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19915:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7581:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24711:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8351:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27090:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7481:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8714:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19973:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20295:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26635:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26470:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20718:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7697:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13216:148;;;;;;;;;;;;;:::i;:::-;;25170:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13002:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7369:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26018:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8940:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7832:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25322:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21252:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20335:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26772:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25828:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24949:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20558:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20172:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23746:121;;;;;;;;;;;;;:::i;:::-;;24322:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33918:99;;;;;;;;;;;;;:::i;:::-;;20606:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8015:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20214:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24112:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20135:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13372:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23923:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20254:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7261:100;7315:13;7348:5;7341:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7261:100;:::o;8174:169::-;8257:4;8274:39;8283:12;:10;:12::i;:::-;8297:7;8306:6;8274:8;:39::i;:::-;8331:4;8324:11;;8174:169;;;;:::o;27294:100::-;27347:4;27371:9;:15;27381:4;27371:15;;;;;;;;;;;;;;;;;;;;;;;;;27364:22;;27294:100;;;:::o;21030:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;19915:51::-;;;:::o;7581:108::-;7642:7;7669:12;;7662:19;;7581:108;:::o;24711:230::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24832:3:::1;24824:4;24820:1;24804:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;24803:32;;;;:::i;:::-;24793:6;:42;;24785:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;24930:3;24921:6;:12;;;;:::i;:::-;24898:20;:35;;;;24711:230:::0;:::o;8351:355::-;8491:4;8508:36;8518:6;8526:9;8537:6;8508:9;:36::i;:::-;8555:121;8564:6;8572:12;:10;:12::i;:::-;8586:89;8624:6;8586:89;;;;;;;;;;;;;;;;;:11;:19;8598:6;8586:19;;;;;;;;;;;;;;;:33;8606:12;:10;:12::i;:::-;8586:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;8555:8;:121::i;:::-;8694:4;8687:11;;8351:355;;;;;:::o;27090:192::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27176:6:::1;27171:104;27192:10;:17;27188:1;:21;27171:104;;;27258:5;27231:9;:24;27241:10;27252:1;27241:13;;;;;;;;:::i;:::-;;;;;;;;27231:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;27211:3;;;;;:::i;:::-;;;;27171:104;;;;27090:192:::0;:::o;7481:92::-;7539:5;7564:1;7557:8;;7481:92;:::o;8714:218::-;8802:4;8819:83;8828:12;:10;:12::i;:::-;8842:7;8851:50;8890:10;8851:11;:25;8863:12;:10;:12::i;:::-;8851:25;;;;;;;;;;;;;;;:34;8877:7;8851:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8819:8;:83::i;:::-;8920:4;8913:11;;8714:218;;;;:::o;19973:38::-;;;:::o;20295:33::-;;;;;;;;;;;;;:::o;26635:125::-;26700:4;26724:19;:28;26744:7;26724:28;;;;;;;;;;;;;;;;;;;;;;;;;26717:35;;26635:125;;;:::o;26470:157::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26577:9:::1;;;;;;;;;;;26549:38;;26566:9;26549:38;;;;;;;;;;;;26610:9;26598;;:21;;;;;;;;;;;;;;;;;;26470:157:::0;:::o;20718:28::-;;;;:::o;7697:127::-;7771:7;7798:9;:18;7808:7;7798:18;;;;;;;;;;;;;;;;7791:25;;7697:127;;;:::o;13216:148::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13323:1:::1;13286:40;;13307:6;;;;;;;;;;;13286:40;;;;;;;;;;;;13354:1;13337:6;;:19;;;;;;;;;;;;;;;;;;13216:148::o:0;25170:144::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25302:4:::1;25260:31;:39;25292:6;25260:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25170:144:::0;;:::o;13002:79::-;13040:7;13067:6;;;;;;;;;;;13060:13;;13002:79;:::o;7369:104::-;7425:13;7458:7;7451:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7369:104;:::o;26018:244::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26125:13:::1;26117:21;;:4;:21;;;;26109:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26213:41;26242:4;26248:5;26213:28;:41::i;:::-;26018:244:::0;;:::o;8940:269::-;9033:4;9050:129;9059:12;:10;:12::i;:::-;9073:7;9082:96;9121:15;9082:96;;;;;;;;;;;;;;;;;:11;:25;9094:12;:10;:12::i;:::-;9082:25;;;;;;;;;;;;;;;:34;9108:7;9082:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;9050:8;:129::i;:::-;9197:4;9190:11;;8940:269;;;;:::o;7832:175::-;7918:4;7935:42;7945:12;:10;:12::i;:::-;7959:9;7970:6;7935:9;:42::i;:::-;7995:4;7988:11;;7832:175;;;;:::o;25322:498::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25482:11:::1;25469:10;:24;;;;25523:17;25504:16;:36;;;;25579:16;;25566:10;;:29;;;;:::i;:::-;25551:12;:44;;;;25630:2;25614:12;;:18;;25606:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25693:12;25679:11;:26;;;;25736:18;25716:17;:38;;;;25795:17;;25781:11;;:31;;;;:::i;:::-;25765:13;:47;;;;25322:498:::0;;;;:::o;21252:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20335:32::-;;;;;;;;;;;;;:::o;26772:306::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26858:6:::1;26853:218;26874:10;:17;26870:1;:21;26853:218;;;26934:13;26917:30;;:10;26928:1;26917:13;;;;;;;;:::i;:::-;;;;;;;;:30;;;;:75;;;;;26976:15;26951:41;;:10;26962:1;26951:13;;;;;;;;:::i;:::-;;;;;;;;:41;;;;26917:75;26913:147;;;27040:4;27013:9;:24;27023:10;27034:1;27023:13;;;;;;;;:::i;:::-;;;;;;;;27013:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26913:147;26893:3;;;;;:::i;:::-;;;;26853:218;;;;26772:306:::0;:::o;25828:182::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25944:8:::1;25913:19;:28;25933:7;25913:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25984:7;25968:34;;;25993:8;25968:34;;;;;;:::i;:::-;;;;;;;;25828:182:::0;;:::o;24949:209::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25071:3:::1;25065:4;25061:1;25045:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;25044:30;;;;:::i;:::-;25034:6;:40;;25026:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;25147:3;25138:6;:12;;;;:::i;:::-;25126:9;:24;;;;24949:209:::0;:::o;20558:39::-;;;;;;;;;;;;;:::o;20172:35::-;;;;:::o;23746:121::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23815:4:::1;23799:13;;:20;;;;;;;;;;;;;;;;;;23844:15;23830:11;:29;;;;23746:121::o:0;24322:377::-;24403:4;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24460:4:::1;24456:1;24440:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;24427:9;:37;;24419:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;24572:4;24567:2;24551:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;24538:9;:38;;24530:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;24662:9;24641:18;:30;;;;24688:4;24681:11;;24322:377:::0;;;:::o;33918:99::-;33967:9;;;;;;;;;;;33959:27;;:50;33987:21;33959:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33918:99::o;20606:27::-;;;;:::o;8015:151::-;8104:7;8131:11;:18;8143:5;8131:18;;;;;;;;;;;;;;;:27;8150:7;8131:27;;;;;;;;;;;;;;;;8124:34;;8015:151;;;;:::o;20214:33::-;;;;:::o;24112:135::-;24172:4;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24212:5:::1;24189:20;;:28;;;;;;;;;;;;;;;;;;24235:4;24228:11;;24112:135:::0;:::o;20135:24::-;;;;;;;;;;;;;:::o;13372:244::-;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13481:1:::1;13461:22;;:8;:22;;;;13453:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13571:8;13542:38;;13563:6;;;;;;;;;;;13542:38;;;;;;;;;;;;13600:8;13591:6;;:17;;;;;;;;;;;;;;;;;;13372:244:::0;:::o;23923:124::-;23978:4;13139:12;:10;:12::i;:::-;13129:22;;:6;;;;;;;;;;;:22;;;13121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24012:5:::1;23995:14;;:22;;;;;;;;;;;;;;;;;;24035:4;24028:11;;23923:124:::0;:::o;20254:24::-;;;;:::o;11154:181::-;11212:7;11232:9;11248:1;11244;:5;;;;:::i;:::-;11232:17;;11273:1;11268;:6;;11260:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11326:1;11319:8;;;11154:181;;;;:::o;2430:98::-;2483:7;2510:10;2503:17;;2430:98;:::o;10610:380::-;10763:1;10746:19;;:5;:19;;;;10738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10844:1;10825:21;;:7;:21;;;;10817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10928:6;10898:11;:18;10910:5;10898:18;;;;;;;;;;;;;;;:27;10917:7;10898:27;;;;;;;;;;;;;;;:36;;;;10966:7;10950:32;;10959:5;10950:32;;;10975:6;10950:32;;;;;;:::i;:::-;;;;;;;;10610:380;;;:::o;27402:4107::-;27550:1;27534:18;;:4;:18;;;;27526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27627:1;27613:16;;:2;:16;;;;27605:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27689:9;:15;27699:4;27689:15;;;;;;;;;;;;;;;;;;;;;;;;;27688:16;27680:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;27822:1;27812:6;:11;27808:93;;;27840:28;27856:4;27862:2;27866:1;27840:15;:28::i;:::-;27883:7;;27808:93;27944:11;;27925:15;:30;27921:56;;;27973:4;27957:9;:13;27967:2;27957:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;27921:56;28002:14;;;;;;;;;;;27998:1838;;;28063:7;:5;:7::i;:::-;28055:15;;:4;:15;;;;:49;;;;;28097:7;:5;:7::i;:::-;28091:13;;:2;:13;;;;28055:49;:86;;;;;28139:1;28125:16;;:2;:16;;;;28055:86;:128;;;;;28176:6;28162:21;;:2;:21;;;;28055:128;:159;;;;;28205:9;;;;;;;;;;;28204:10;28055:159;28033:1792;;;28254:13;;;;;;;;;;;28249:150;;28300:19;:25;28320:4;28300:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28329:19;:23;28349:2;28329:23;;;;;;;;;;;;;;;;;;;;;;;;;28300:52;28292:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28249:150;28557:20;;;;;;;;;;;28553:423;;;28611:7;:5;:7::i;:::-;28605:13;;:2;:13;;;;:47;;;;;28636:15;28622:30;;:2;:30;;;;28605:47;:79;;;;;28670:13;28656:28;;:2;:28;;;;28605:79;28601:356;;;28762:12;28720:28;:39;28749:9;28720:39;;;;;;;;;;;;;;;;:54;28712:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28921:12;28879:28;:39;28908:9;28879:39;;;;;;;;;;;;;;;:54;;;;28601:356;28553:423;29046:25;:31;29072:4;29046:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;29082:31;:35;29114:2;29082:35;;;;;;;;;;;;;;;;;;;;;;;;;29081:36;29046:71;29042:768;;;29160:20;;29150:6;:30;;29142:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;29295:9;;29278:13;29288:2;29278:9;:13::i;:::-;29269:6;:22;;;;:::i;:::-;:35;;29261:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29042:768;;;29423:25;:29;29449:2;29423:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;29457:31;:37;29489:4;29457:37;;;;;;;;;;;;;;;;;;;;;;;;;29456:38;29423:71;29419:391;;;29537:20;;29527:6;:30;;29519:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;29419:391;;;29664:31;:35;29696:2;29664:35;;;;;;;;;;;;;;;;;;;;;;;;;29659:151;;29757:9;;29740:13;29750:2;29740:9;:13::i;:::-;29731:6;:22;;;;:::i;:::-;:35;;29723:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29659:151;29419:391;29042:768;28033:1792;27998:1838;29850:28;29881:24;29899:4;29881:9;:24::i;:::-;29850:55;;29916:12;29955:18;;29931:20;:42;;29916:57;;30002:7;:34;;;;;30027:9;;;;;;;;;;;30026:10;30002:34;:83;;;;;30054:25;:31;30080:4;30054:31;;;;;;;;;;;;;;;;;;;;;;;;;30053:32;30002:83;:126;;;;;30103:19;:25;30123:4;30103:25;;;;;;;;;;;;;;;;;;;;;;;;;30102:26;30002:126;:167;;;;;30146:19;:23;30166:2;30146:23;;;;;;;;;;;;;;;;;;;;;;;;;30145:24;30002:167;29984:297;;;30208:4;30196:9;;:16;;;;;;;;;;;;;;;;;;30227:10;:8;:10::i;:::-;30264:5;30252:9;;:17;;;;;;;;;;;;;;;;;;29984:297;30293:12;30309:9;;;;;;;;;;;30308:10;30293:25;;30420:19;:25;30440:4;30420:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30449:19;:23;30469:2;30449:23;;;;;;;;;;;;;;;;;;;;;;;;;30420:52;30416:100;;;30499:5;30489:15;;30416:100;30536:12;30641:7;30637:819;;;30693:25;:29;30719:2;30693:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;30742:1;30726:13;;:17;30693:50;30689:600;;;30771:34;30801:3;30771:25;30782:13;;30771:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;30764:41;;30874:13;;30854:17;;30847:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;30824:19;;:63;;;;;;;:::i;:::-;;;;;;;;30944:13;;30930:11;;30923:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;30906:13;;:51;;;;;;;:::i;:::-;;;;;;;;30689:600;;;31019:25;:31;31045:4;31019:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;31069:1;31054:12;;:16;31019:51;31015:274;;;31095:33;31124:3;31095:24;31106:12;;31095:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;31088:40;;31193:12;;31174:16;;31167:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;31144:19;;:61;;;;;;;:::i;:::-;;;;;;;;31261:12;;31248:10;;31241:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;31224:13;;:49;;;;;;;:::i;:::-;;;;;;;;31015:274;30689:600;31328:1;31321:4;:8;31317:91;;;31350:42;31366:4;31380;31387;31350:15;:42::i;:::-;31317:91;31440:4;31430:14;;;;;:::i;:::-;;;30637:819;31468:33;31484:4;31490:2;31494:6;31468:15;:33::i;:::-;27515:3994;;;;27402:4107;;;;:::o;11487:192::-;11573:7;11606:1;11601;:6;;11609:12;11593:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11633:9;11649:1;11645;:5;;;;:::i;:::-;11633:17;;11670:1;11663:8;;;11487:192;;;;;:::o;26270:188::-;26387:5;26353:25;:31;26379:4;26353:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26444:5;26410:40;;26438:4;26410:40;;;;;;;;;;;;26270:188;;:::o;9217:573::-;9375:1;9357:20;;:6;:20;;;;9349:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9459:1;9438:23;;:9;:23;;;;9430:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9514:47;9535:6;9543:9;9554:6;9514:20;:47::i;:::-;9594:71;9616:6;9594:71;;;;;;;;;;;;;;;;;:9;:17;9604:6;9594:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9574:9;:17;9584:6;9574:17;;;;;;;;;;;;;;;:91;;;;9699:32;9724:6;9699:9;:20;9709:9;9699:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9676:9;:20;9686:9;9676:20;;;;;;;;;;;;;;;:55;;;;9764:9;9747:35;;9756:6;9747:35;;;9775:6;9747:35;;;;;;:::i;:::-;;;;;;;;9217:573;;;:::o;32641:1269::-;32680:23;32706:24;32724:4;32706:9;:24::i;:::-;32680:50;;32741:25;32791:13;;32769:19;;:35;;;;:::i;:::-;32741:63;;32848:1;32829:15;:20;:46;;;;32874:1;32853:17;:22;32829:46;32825:59;;;32877:7;;;;32825:59;32937:2;32916:18;;:23;;;;:::i;:::-;32898:15;:41;32894:113;;;32993:2;32972:18;;:23;;;;:::i;:::-;32954:41;;32894:113;33076:23;33162:1;33142:17;33120:19;;33102:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;33076:87;;33174:26;33203:36;33223:15;33203;:19;;:36;;;;:::i;:::-;33174:65;;33260:25;33288:21;33260:49;;33322:37;33340:18;33322:17;:37::i;:::-;33381:18;33402:44;33428:17;33402:21;:25;;:44;;;;:::i;:::-;33381:65;;33457:17;33477:52;33511:17;33477:29;33492:13;;33477:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;33457:72;;33540:23;33579:9;33566:10;:22;;;;:::i;:::-;33540:48;;33631:1;33609:19;:23;;;;33659:1;33643:13;:17;;;;33711:1;33693:15;:19;:42;;;;;33734:1;33716:15;:19;33693:42;33689:214;;;33752:47;33766:15;33783;33752:13;:47::i;:::-;33819:72;33834:18;33854:15;33871:19;;33819:72;;;;;;;;:::i;:::-;;;;;;;;33689:214;32669:1241;;;;;;;;32641:1269;:::o;11687:250::-;11745:7;11774:1;11769;:6;11765:47;;;11799:1;11792:8;;;;11765:47;11824:9;11840:1;11836;:5;;;;:::i;:::-;11824:17;;11869:1;11864;11860;:5;;;;:::i;:::-;:10;11852:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11928:1;11921:8;;;11687:250;;;;;:::o;11945:132::-;12003:7;12030:39;12034:1;12037;12030:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12023:46;;11945:132;;;;:::o;10998:125::-;;;;:::o;11343:136::-;11401:7;11428:43;11432:1;11435;11428:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11421:50;;11343:136;;;;:::o;31517:590::-;31644:21;31682:1;31668:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31644:40;;31713:4;31695;31700:1;31695:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31739:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31729:4;31734:1;31729:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31774:62;31791:4;31806:15;31824:11;31774:8;:62::i;:::-;31875:15;:66;;;31956:11;31982:1;32026:4;32053;32073:15;31875:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31573:534;31517:590;:::o;32119:514::-;32268:62;32285:4;32300:15;32318:11;32268:8;:62::i;:::-;32373:15;:31;;;32412:9;32445:4;32465:11;32491:1;32534;32577:7;:5;:7::i;:::-;32599:15;32373:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32119:514;;:::o;12085:278::-;12171:7;12203:1;12199;:5;12206:12;12191:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12230:9;12246:1;12242;:5;;;;:::i;:::-;12230:17;;12354:1;12347:8;;;12085: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:117::-;6228:1;6225;6218:12;6242:180;6290:77;6287:1;6280:88;6387:4;6384:1;6377:15;6411:4;6408:1;6401:15;6428:281;6511:27;6533:4;6511:27;:::i;:::-;6503:6;6499:40;6641:6;6629:10;6626:22;6605:18;6593:10;6590:34;6587:62;6584:88;;;6652:18;;:::i;:::-;6584:88;6692:10;6688:2;6681:22;6471:238;6428:281;;:::o;6715:129::-;6749:6;6776:20;;:::i;:::-;6766:30;;6805:33;6833:4;6825:6;6805:33;:::i;:::-;6715:129;;;:::o;6850:311::-;6927:4;7017:18;7009:6;7006:30;7003:56;;;7039:18;;:::i;:::-;7003:56;7089:4;7081:6;7077:17;7069:25;;7149:4;7143;7139:15;7131:23;;6850:311;;;:::o;7167:117::-;7276:1;7273;7266:12;7307:710;7403:5;7428:81;7444:64;7501:6;7444:64;:::i;:::-;7428:81;:::i;:::-;7419:90;;7529:5;7558:6;7551:5;7544:21;7592:4;7585:5;7581:16;7574:23;;7645:4;7637:6;7633:17;7625:6;7621:30;7674:3;7666:6;7663:15;7660:122;;;7693:79;;:::i;:::-;7660:122;7808:6;7791:220;7825:6;7820:3;7817:15;7791:220;;;7900:3;7929:37;7962:3;7950:10;7929:37;:::i;:::-;7924:3;7917:50;7996:4;7991:3;7987:14;7980:21;;7867:144;7851:4;7846:3;7842:14;7835:21;;7791:220;;;7795:21;7409:608;;7307:710;;;;;:::o;8040:370::-;8111:5;8160:3;8153:4;8145:6;8141:17;8137:27;8127:122;;8168:79;;:::i;:::-;8127:122;8285:6;8272:20;8310:94;8400:3;8392:6;8385:4;8377:6;8373:17;8310:94;:::i;:::-;8301:103;;8117:293;8040:370;;;;:::o;8416:539::-;8500:6;8549:2;8537:9;8528:7;8524:23;8520:32;8517:119;;;8555:79;;:::i;:::-;8517:119;8703:1;8692:9;8688:17;8675:31;8733:18;8725:6;8722:30;8719:117;;;8755:79;;:::i;:::-;8719:117;8860:78;8930:7;8921:6;8910:9;8906:22;8860:78;:::i;:::-;8850:88;;8646:302;8416:539;;;;:::o;8961:86::-;8996:7;9036:4;9029:5;9025:16;9014:27;;8961:86;;;:::o;9053:112::-;9136:22;9152:5;9136:22;:::i;:::-;9131:3;9124:35;9053:112;;:::o;9171:214::-;9260:4;9298:2;9287:9;9283:18;9275:26;;9311:67;9375:1;9364:9;9360:17;9351:6;9311:67;:::i;:::-;9171:214;;;;:::o;9391:118::-;9478:24;9496:5;9478:24;:::i;:::-;9473:3;9466:37;9391:118;;:::o;9515:222::-;9608:4;9646:2;9635:9;9631:18;9623:26;;9659:71;9727:1;9716:9;9712:17;9703:6;9659:71;:::i;:::-;9515:222;;;;:::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:765::-;10564:6;10572;10580;10588;10637:3;10625:9;10616:7;10612:23;10608:33;10605:120;;;10644:79;;:::i;:::-;10605:120;10764:1;10789:53;10834:7;10825:6;10814:9;10810:22;10789:53;:::i;:::-;10779:63;;10735:117;10891:2;10917:53;10962:7;10953:6;10942:9;10938:22;10917:53;:::i;:::-;10907:63;;10862:118;11019:2;11045:53;11090:7;11081:6;11070:9;11066:22;11045:53;:::i;:::-;11035:63;;10990:118;11147:2;11173:53;11218:7;11209:6;11198:9;11194:22;11173:53;:::i;:::-;11163:63;;11118:118;10478:765;;;;;;;:::o;11249:474::-;11317:6;11325;11374:2;11362:9;11353:7;11349:23;11345:32;11342:119;;;11380:79;;:::i;:::-;11342:119;11500:1;11525:53;11570:7;11561:6;11550:9;11546:22;11525:53;:::i;:::-;11515:63;;11471:117;11627:2;11653:53;11698:7;11689:6;11678:9;11674:22;11653:53;:::i;:::-;11643:63;;11598:118;11249:474;;;;;:::o;11729:180::-;11777:77;11774:1;11767:88;11874:4;11871:1;11864:15;11898:4;11895:1;11888:15;11915:320;11959:6;11996:1;11990:4;11986:12;11976:22;;12043:1;12037:4;12033:12;12064:18;12054:81;;12120:4;12112:6;12108:17;12098:27;;12054:81;12182:2;12174:6;12171:14;12151:18;12148:38;12145:84;;;12201:18;;:::i;:::-;12145:84;11966:269;11915:320;;;:::o;12241:182::-;12381:34;12377:1;12369:6;12365:14;12358:58;12241:182;:::o;12429:366::-;12571:3;12592:67;12656:2;12651:3;12592:67;:::i;:::-;12585:74;;12668:93;12757:3;12668:93;:::i;:::-;12786:2;12781:3;12777:12;12770:19;;12429:366;;;:::o;12801:419::-;12967:4;13005:2;12994:9;12990:18;12982:26;;13054:9;13048:4;13044:20;13040:1;13029:9;13025:17;13018:47;13082:131;13208:4;13082:131;:::i;:::-;13074:139;;12801:419;;;:::o;13226:180::-;13274:77;13271:1;13264:88;13371:4;13368:1;13361:15;13395:4;13392:1;13385:15;13412:348;13452:7;13475:20;13493:1;13475:20;:::i;:::-;13470:25;;13509:20;13527:1;13509:20;:::i;:::-;13504:25;;13697:1;13629:66;13625:74;13622:1;13619:81;13614:1;13607:9;13600:17;13596:105;13593:131;;;13704:18;;:::i;:::-;13593:131;13752:1;13749;13745:9;13734:20;;13412:348;;;;:::o;13766:180::-;13814:77;13811:1;13804:88;13911:4;13908:1;13901:15;13935:4;13932:1;13925:15;13952:185;13992:1;14009:20;14027:1;14009:20;:::i;:::-;14004:25;;14043:20;14061:1;14043:20;:::i;:::-;14038:25;;14082:1;14072:35;;14087:18;;:::i;:::-;14072:35;14129:1;14126;14122:9;14117:14;;13952:185;;;;:::o;14143:234::-;14283:34;14279:1;14271:6;14267:14;14260:58;14352:17;14347:2;14339:6;14335:15;14328:42;14143:234;:::o;14383:366::-;14525:3;14546:67;14610:2;14605:3;14546:67;:::i;:::-;14539:74;;14622:93;14711:3;14622:93;:::i;:::-;14740:2;14735:3;14731:12;14724:19;;14383:366;;;:::o;14755:419::-;14921:4;14959:2;14948:9;14944:18;14936:26;;15008:9;15002:4;14998:20;14994:1;14983:9;14979:17;14972:47;15036:131;15162:4;15036:131;:::i;:::-;15028:139;;14755:419;;;:::o;15180:180::-;15228:77;15225:1;15218:88;15325:4;15322:1;15315:15;15349:4;15346:1;15339:15;15366:233;15405:3;15428:24;15446:5;15428:24;:::i;:::-;15419:33;;15474:66;15467:5;15464:77;15461:103;;;15544:18;;:::i;:::-;15461:103;15591:1;15584:5;15580:13;15573:20;;15366:233;;;:::o;15605:244::-;15745:34;15741:1;15733:6;15729:14;15722:58;15814:27;15809:2;15801:6;15797:15;15790:52;15605:244;:::o;15855:366::-;15997:3;16018:67;16082:2;16077:3;16018:67;:::i;:::-;16011:74;;16094:93;16183:3;16094:93;:::i;:::-;16212:2;16207:3;16203:12;16196:19;;15855:366;;;:::o;16227:419::-;16393:4;16431:2;16420:9;16416:18;16408:26;;16480:9;16474:4;16470:20;16466:1;16455:9;16451:17;16444:47;16508:131;16634:4;16508:131;:::i;:::-;16500:139;;16227:419;;;:::o;16652:305::-;16692:3;16711:20;16729:1;16711:20;:::i;:::-;16706:25;;16745:20;16763:1;16745:20;:::i;:::-;16740:25;;16899:1;16831:66;16827:74;16824:1;16821:81;16818:107;;;16905:18;;:::i;:::-;16818:107;16949:1;16946;16942:9;16935:16;;16652:305;;;;:::o;16963:179::-;17103:31;17099:1;17091:6;17087:14;17080:55;16963:179;:::o;17148:366::-;17290:3;17311:67;17375:2;17370:3;17311:67;:::i;:::-;17304:74;;17387:93;17476:3;17387:93;:::i;:::-;17505:2;17500:3;17496:12;17489:19;;17148:366;;;:::o;17520:419::-;17686:4;17724:2;17713:9;17709:18;17701:26;;17773:9;17767:4;17763:20;17759:1;17748:9;17744:17;17737:47;17801:131;17927:4;17801:131;:::i;:::-;17793:139;;17520:419;;;:::o;17945:223::-;18085:34;18081:1;18073:6;18069:14;18062:58;18154:6;18149:2;18141:6;18137:15;18130:31;17945:223;:::o;18174:366::-;18316:3;18337:67;18401:2;18396:3;18337:67;:::i;:::-;18330:74;;18413:93;18502:3;18413:93;:::i;:::-;18531:2;18526:3;18522:12;18515:19;;18174:366;;;:::o;18546:419::-;18712:4;18750:2;18739:9;18735:18;18727:26;;18799:9;18793:4;18789:20;18785:1;18774:9;18770:17;18763:47;18827:131;18953:4;18827:131;:::i;:::-;18819:139;;18546:419;;;:::o;18971:238::-;19111:34;19107:1;19099:6;19095:14;19088:58;19180:21;19175:2;19167:6;19163:15;19156:46;18971:238;:::o;19215:366::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:419::-;19753:4;19791:2;19780:9;19776:18;19768:26;;19840:9;19834:4;19830:20;19826:1;19815:9;19811:17;19804:47;19868:131;19994:4;19868:131;:::i;:::-;19860:139;;19587:419;;;:::o;20012:237::-;20152:34;20148:1;20140:6;20136:14;20129:58;20221:20;20216:2;20208:6;20204:15;20197:45;20012:237;:::o;20255:366::-;20397:3;20418:67;20482:2;20477:3;20418:67;:::i;:::-;20411:74;;20494:93;20583:3;20494:93;:::i;:::-;20612:2;20607:3;20603:12;20596:19;;20255:366;;;:::o;20627:419::-;20793:4;20831:2;20820:9;20816:18;20808:26;;20880:9;20874:4;20870:20;20866:1;20855:9;20851:17;20844:47;20908:131;21034:4;20908:131;:::i;:::-;20900:139;;20627:419;;;:::o;21052:225::-;21192:34;21188:1;21180:6;21176:14;21169:58;21261:8;21256:2;21248:6;21244:15;21237:33;21052:225;:::o;21283:366::-;21425:3;21446:67;21510:2;21505:3;21446:67;:::i;:::-;21439:74;;21522:93;21611:3;21522:93;:::i;:::-;21640:2;21635:3;21631:12;21624:19;;21283:366;;;:::o;21655:419::-;21821:4;21859:2;21848:9;21844:18;21836:26;;21908:9;21902:4;21898:20;21894:1;21883:9;21879:17;21872:47;21936:131;22062:4;21936:131;:::i;:::-;21928:139;;21655:419;;;:::o;22080:177::-;22220:29;22216:1;22208:6;22204:14;22197:53;22080:177;:::o;22263:366::-;22405:3;22426:67;22490:2;22485:3;22426:67;:::i;:::-;22419:74;;22502:93;22591:3;22502:93;:::i;:::-;22620:2;22615:3;22611:12;22604:19;;22263:366;;;:::o;22635:419::-;22801:4;22839:2;22828:9;22824:18;22816:26;;22888:9;22882:4;22878:20;22874:1;22863:9;22859:17;22852:47;22916:131;23042:4;22916:131;:::i;:::-;22908:139;;22635:419;;;:::o;23060:223::-;23200:34;23196:1;23188:6;23184:14;23177:58;23269:6;23264:2;23256:6;23252:15;23245:31;23060:223;:::o;23289:366::-;23431:3;23452:67;23516:2;23511:3;23452:67;:::i;:::-;23445:74;;23528:93;23617:3;23528:93;:::i;:::-;23646:2;23641:3;23637:12;23630:19;;23289:366;;;:::o;23661:419::-;23827:4;23865:2;23854:9;23850:18;23842:26;;23914:9;23908:4;23904:20;23900:1;23889:9;23885:17;23878:47;23942:131;24068:4;23942:131;:::i;:::-;23934:139;;23661:419;;;:::o;24086:221::-;24226:34;24222:1;24214:6;24210:14;24203:58;24295:4;24290:2;24282:6;24278:15;24271:29;24086:221;:::o;24313:366::-;24455:3;24476:67;24540:2;24535:3;24476:67;:::i;:::-;24469:74;;24552:93;24641:3;24552:93;:::i;:::-;24670:2;24665:3;24661:12;24654:19;;24313:366;;;:::o;24685:419::-;24851:4;24889:2;24878:9;24874:18;24866:26;;24938:9;24932:4;24928:20;24924:1;24913:9;24909:17;24902:47;24966:131;25092:4;24966:131;:::i;:::-;24958:139;;24685:419;;;:::o;25110:224::-;25250:34;25246:1;25238:6;25234:14;25227:58;25319:7;25314:2;25306:6;25302:15;25295:32;25110:224;:::o;25340:366::-;25482:3;25503:67;25567:2;25562:3;25503:67;:::i;:::-;25496:74;;25579:93;25668:3;25579:93;:::i;:::-;25697:2;25692:3;25688:12;25681:19;;25340:366;;;:::o;25712:419::-;25878:4;25916:2;25905:9;25901:18;25893:26;;25965:9;25959:4;25955:20;25951:1;25940:9;25936:17;25929:47;25993:131;26119:4;25993:131;:::i;:::-;25985:139;;25712:419;;;:::o;26137:222::-;26277:34;26273:1;26265:6;26261:14;26254:58;26346:5;26341:2;26333:6;26329:15;26322:30;26137:222;:::o;26365:366::-;26507:3;26528:67;26592:2;26587:3;26528:67;:::i;:::-;26521:74;;26604:93;26693:3;26604:93;:::i;:::-;26722:2;26717:3;26713:12;26706:19;;26365:366;;;:::o;26737:419::-;26903:4;26941:2;26930:9;26926:18;26918:26;;26990:9;26984:4;26980:20;26976:1;26965:9;26961:17;26954:47;27018:131;27144:4;27018:131;:::i;:::-;27010:139;;26737:419;;;:::o;27162:301::-;27302:34;27298:1;27290:6;27286:14;27279:58;27371:34;27366:2;27358:6;27354:15;27347:59;27440:15;27435:2;27427:6;27423:15;27416:40;27162:301;:::o;27469:366::-;27611:3;27632:67;27696:2;27691:3;27632:67;:::i;:::-;27625:74;;27708:93;27797:3;27708:93;:::i;:::-;27826:2;27821:3;27817:12;27810:19;;27469:366;;;:::o;27841:419::-;28007:4;28045:2;28034:9;28030:18;28022:26;;28094:9;28088:4;28084:20;28080:1;28069:9;28065:17;28058:47;28122:131;28248:4;28122:131;:::i;:::-;28114:139;;27841:419;;;:::o;28266:172::-;28406:24;28402:1;28394:6;28390:14;28383:48;28266:172;:::o;28444:366::-;28586:3;28607:67;28671:2;28666:3;28607:67;:::i;:::-;28600:74;;28683:93;28772:3;28683:93;:::i;:::-;28801:2;28796:3;28792:12;28785:19;;28444:366;;;:::o;28816:419::-;28982:4;29020:2;29009:9;29005:18;28997:26;;29069:9;29063:4;29059:20;29055:1;29044:9;29040:17;29033:47;29097:131;29223:4;29097:131;:::i;:::-;29089:139;;28816:419;;;:::o;29241:297::-;29381:34;29377:1;29369:6;29365:14;29358:58;29450:34;29445:2;29437:6;29433:15;29426:59;29519:11;29514:2;29506:6;29502:15;29495:36;29241:297;:::o;29544:366::-;29686:3;29707:67;29771:2;29766:3;29707:67;:::i;:::-;29700:74;;29783:93;29872:3;29783:93;:::i;:::-;29901:2;29896:3;29892:12;29885:19;;29544:366;;;:::o;29916:419::-;30082:4;30120:2;30109:9;30105:18;30097:26;;30169:9;30163:4;30159:20;30155:1;30144:9;30140:17;30133:47;30197:131;30323:4;30197:131;:::i;:::-;30189:139;;29916:419;;;:::o;30341:240::-;30481:34;30477:1;30469:6;30465:14;30458:58;30550:23;30545:2;30537:6;30533:15;30526:48;30341:240;:::o;30587:366::-;30729:3;30750:67;30814:2;30809:3;30750:67;:::i;:::-;30743:74;;30826:93;30915:3;30826:93;:::i;:::-;30944:2;30939:3;30935:12;30928:19;;30587:366;;;:::o;30959:419::-;31125:4;31163:2;31152:9;31148:18;31140:26;;31212:9;31206:4;31202:20;31198:1;31187:9;31183:17;31176:47;31240:131;31366:4;31240:131;:::i;:::-;31232:139;;30959:419;;;:::o;31384:169::-;31524:21;31520:1;31512:6;31508:14;31501:45;31384:169;:::o;31559:366::-;31701:3;31722:67;31786:2;31781:3;31722:67;:::i;:::-;31715:74;;31798:93;31887:3;31798:93;:::i;:::-;31916:2;31911:3;31907:12;31900:19;;31559:366;;;:::o;31931:419::-;32097:4;32135:2;32124:9;32120:18;32112:26;;32184:9;32178:4;32174:20;32170:1;32159:9;32155:17;32148:47;32212:131;32338:4;32212:131;:::i;:::-;32204:139;;31931:419;;;:::o;32356:241::-;32496:34;32492:1;32484:6;32480:14;32473:58;32565:24;32560:2;32552:6;32548:15;32541:49;32356:241;:::o;32603:366::-;32745:3;32766:67;32830:2;32825:3;32766:67;:::i;:::-;32759:74;;32842:93;32931:3;32842:93;:::i;:::-;32960:2;32955:3;32951:12;32944:19;;32603:366;;;:::o;32975:419::-;33141:4;33179:2;33168:9;33164:18;33156:26;;33228:9;33222:4;33218:20;33214:1;33203:9;33199:17;33192:47;33256:131;33382:4;33256:131;:::i;:::-;33248:139;;32975:419;;;:::o;33400:191::-;33440:4;33460:20;33478:1;33460:20;:::i;:::-;33455:25;;33494:20;33512:1;33494:20;:::i;:::-;33489:25;;33533:1;33530;33527:8;33524:34;;;33538:18;;:::i;:::-;33524:34;33583:1;33580;33576:9;33568:17;;33400:191;;;;:::o;33597:442::-;33746:4;33784:2;33773:9;33769:18;33761:26;;33797:71;33865:1;33854:9;33850:17;33841:6;33797:71;:::i;:::-;33878:72;33946:2;33935:9;33931:18;33922:6;33878:72;:::i;:::-;33960;34028:2;34017:9;34013:18;34004:6;33960:72;:::i;:::-;33597:442;;;;;;:::o;34045:220::-;34185:34;34181:1;34173:6;34169:14;34162:58;34254:3;34249:2;34241:6;34237:15;34230:28;34045:220;:::o;34271:366::-;34413:3;34434:67;34498:2;34493:3;34434:67;:::i;:::-;34427:74;;34510:93;34599:3;34510:93;:::i;:::-;34628:2;34623:3;34619:12;34612:19;;34271:366;;;:::o;34643:419::-;34809:4;34847:2;34836:9;34832:18;34824:26;;34896:9;34890:4;34886:20;34882:1;34871:9;34867:17;34860:47;34924:131;35050:4;34924:131;:::i;:::-;34916:139;;34643:419;;;:::o;35068:143::-;35125:5;35156:6;35150:13;35141:22;;35172:33;35199:5;35172:33;:::i;:::-;35068:143;;;;:::o;35217:351::-;35287:6;35336:2;35324:9;35315:7;35311:23;35307:32;35304:119;;;35342:79;;:::i;:::-;35304:119;35462:1;35487:64;35543:7;35534:6;35523:9;35519:22;35487:64;:::i;:::-;35477:74;;35433:128;35217:351;;;;:::o;35574:85::-;35619:7;35648:5;35637:16;;35574:85;;;:::o;35665:158::-;35723:9;35756:61;35774:42;35783:32;35809:5;35783:32;:::i;:::-;35774:42;:::i;:::-;35756:61;:::i;:::-;35743:74;;35665:158;;;:::o;35829:147::-;35924:45;35963:5;35924:45;:::i;:::-;35919:3;35912:58;35829:147;;:::o;35982:114::-;36049:6;36083:5;36077:12;36067:22;;35982:114;;;:::o;36102:184::-;36201:11;36235:6;36230:3;36223:19;36275:4;36270:3;36266:14;36251:29;;36102:184;;;;:::o;36292:132::-;36359:4;36382:3;36374:11;;36412:4;36407:3;36403:14;36395:22;;36292:132;;;:::o;36430:108::-;36507:24;36525:5;36507:24;:::i;:::-;36502:3;36495:37;36430:108;;:::o;36544:179::-;36613:10;36634:46;36676:3;36668:6;36634:46;:::i;:::-;36712:4;36707:3;36703:14;36689:28;;36544:179;;;;:::o;36729:113::-;36799:4;36831;36826:3;36822:14;36814:22;;36729:113;;;:::o;36878:732::-;36997:3;37026:54;37074:5;37026:54;:::i;:::-;37096:86;37175:6;37170:3;37096:86;:::i;:::-;37089:93;;37206:56;37256:5;37206:56;:::i;:::-;37285:7;37316:1;37301:284;37326:6;37323:1;37320:13;37301:284;;;37402:6;37396:13;37429:63;37488:3;37473:13;37429:63;:::i;:::-;37422:70;;37515:60;37568:6;37515:60;:::i;:::-;37505:70;;37361:224;37348:1;37345;37341:9;37336:14;;37301:284;;;37305:14;37601:3;37594:10;;37002:608;;;36878:732;;;;:::o;37616:831::-;37879:4;37917:3;37906:9;37902:19;37894:27;;37931:71;37999:1;37988:9;37984:17;37975:6;37931:71;:::i;:::-;38012:80;38088:2;38077:9;38073:18;38064:6;38012:80;:::i;:::-;38139:9;38133:4;38129:20;38124:2;38113:9;38109:18;38102:48;38167:108;38270:4;38261:6;38167:108;:::i;:::-;38159:116;;38285:72;38353:2;38342:9;38338:18;38329:6;38285:72;:::i;:::-;38367:73;38435:3;38424:9;38420:19;38411:6;38367:73;:::i;:::-;37616:831;;;;;;;;:::o;38453:807::-;38702:4;38740:3;38729:9;38725:19;38717:27;;38754:71;38822:1;38811:9;38807:17;38798:6;38754:71;:::i;:::-;38835:72;38903:2;38892:9;38888:18;38879:6;38835:72;:::i;:::-;38917:80;38993:2;38982:9;38978:18;38969:6;38917:80;:::i;:::-;39007;39083:2;39072:9;39068:18;39059:6;39007:80;:::i;:::-;39097:73;39165:3;39154:9;39150:19;39141:6;39097:73;:::i;:::-;39180;39248:3;39237:9;39233:19;39224:6;39180:73;:::i;:::-;38453:807;;;;;;;;;:::o;39266:143::-;39323:5;39354:6;39348:13;39339:22;;39370:33;39397:5;39370:33;:::i;:::-;39266:143;;;;:::o;39415:663::-;39503:6;39511;39519;39568:2;39556:9;39547:7;39543:23;39539:32;39536:119;;;39574:79;;:::i;:::-;39536:119;39694:1;39719:64;39775:7;39766:6;39755:9;39751:22;39719:64;:::i;:::-;39709:74;;39665:128;39832:2;39858:64;39914:7;39905:6;39894:9;39890:22;39858:64;:::i;:::-;39848:74;;39803:129;39971:2;39997:64;40053:7;40044:6;40033:9;40029:22;39997:64;:::i;:::-;39987:74;;39942:129;39415:663;;;;;:::o

Swarm Source

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