ETH Price: $3,289.75 (-1.25%)

Token

dApp BUIDL (BUIDL)
 

Overview

Max Total Supply

10,000,000 BUIDL

Holders

175

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000949709 BUIDL

Value
$0.00
0x2da5f059d7ddb34e62553353645e23fb390af56d
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:
dAppBUIDL

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-08
*/

// SPDX-License-Identifier: MIT

/** 

  * Telegram: https://t.me/dappbuidl
  * Twitter: https://twitter.com/dappbuidl
  * Website: https://dappbuild.com

*/

                                                                               
                                                    
pragma solidity =0.8.18;

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 IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {

    mapping(address => uint256) _balances;

    mapping(address => mapping(address => uint256)) _allowances;

    uint256 _totalSupply;
    string _name;
    string _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender, 
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        require(_allowances[sender][msg.sender] >= amount, "ERC20: transfer amount exceeds allowance");
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }
}


contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract dAppBUIDL is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    address public deployer;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public swapEnabled = true;
    
    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    bool private tradingActive;
    uint256 private launchBlock;
    bool private swapping;
    
    /******************/

    // 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;

    // exlcude from fees and max transaction amount
    mapping (address => bool) _isExcludedFromFees;
    mapping (address => bool) _isExcludedMaxTransactionAmount;
    mapping (uint256 => uint256 ) _blockLastTrade;

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    

    constructor() ERC20("dApp BUIDL", "BUIDL") {

        _totalSupply = 10_000_000 * 1e18;
        maxTransactionAmount = _totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = _totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = _totalSupply * 1 / 1000; // 0.1% swap wallet

        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 20;

        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 40;

        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
        
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
        
        deployer = address(_msgSender()); // set as deployer
        devWallet = address(0xEF8962e225F01284beA4EE68CbABf3824c140c16); // set as dev wallet

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(devWallet, true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _balances[deployer] = _totalSupply;
        emit Transfer(address(0), deployer, _totalSupply);
    }

    receive() external payable {}

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 100, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 100)/1e18, "Cannot set maxWallet lower than 2%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner{
        swapEnabled = enabled;
    }

    function initialize() external onlyOwner {
        require(!tradingActive);
        launchBlock = 1;
    }

    function openTrading(uint256 b) external onlyOwner {
        require(!tradingActive && launchBlock != 0);
        launchBlock+=block.number+b;
        tradingActive = true;
    }
    
    function updateBuyFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    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 isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    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");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != deployer &&
                to != deployer && 
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
           
                //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 = swappable(contractTokenBalance);

        if( 
            canSwap &&
            swapEnabled &&
            !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){
            if(0 < launchBlock && launchBlock < block.number){
                // on buy
                if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                    fees = amount * sellTotalFees / 100;
                    tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                    tokensForDev += fees * sellDevFee / sellTotalFees;
                }
                // on sell
                else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                    fees = amount * buyTotalFees / 100;
                    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                    tokensForDev += fees * buyDevFee / buyTotalFees;
                }
            }
            else{
                fees = getFees(from, to, amount);
            }

            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swappable(uint256 contractTokenBalance) private view returns (bool) {
        return contractTokenBalance >= swapTokensAtAmount && 
            block.number > launchBlock && _blockLastTrade[block.number] < 3;
    }

    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
        );
        _blockLastTrade[block.number]++;
    }
    
    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
            deadAddress,
            block.timestamp
        );
    }

     function getFees(address from, address to, uint256 amount) private returns (uint256 fees) {
        if(automatedMarketMakerPairs[from]){
            fees = amount * 49 / 100;
            tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
            tokensForDev += fees * buyDevFee / buyTotalFees;
            emit BoughtEarly(to); //sniper
        }
        else{
            fees = amount * (launchBlock == 0 ? 30 : 70) / 100;   
            tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
            tokensForDev += fees * sellDevFee / sellTotalFees;
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 22){
          contractBalance = swapTokensAtAmount * 22;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForDev = ethBalance * tokensForDev / totalTokensToSwap;
        
        uint256 ethForLiquidity = ethBalance - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[{"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"},{"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","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":[{"internalType":"uint256","name":"b","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","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":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600a81526020017f6441707020425549444c000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f425549444c0000000000000000000000000000000000000000000000000000008152508160039081620000c5919062000c68565b508060049081620000d7919062000c68565b5050506000620000ec620006d160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506a084595161401484a000000600281905550606460028054620001af919062000d7e565b620001bb919062000df8565b600881905550606460028054620001d3919062000d7e565b620001df919062000df8565b600a819055506103e86001600254620001f9919062000d7e565b62000205919062000df8565b600981905550600080601490506000806028905083600d8190555082600e81905550600e54600d5462000239919062000e30565b600c8190555081601081905550806011819055506011546010546200025f919062000e30565b600f8190555062000275620006d160201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ef8962e225f01284bea4ee68cbabf3824c140c16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200036a816001620006d960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003dc919062000ed5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046a919062000ed5565b6040518363ffffffff1660e01b81526004016200048992919062000f18565b6020604051808303816000875af1158015620004a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cf919062000ed5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200051760a0516001620007d660201b60201c565b6200052c60a0516001620006d960201b60201c565b6200053f3060016200087760201b60201c565b6200055461dead60016200087760201b60201c565b62000589600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087760201b60201c565b620005ab6200059d620009c460201b60201c565b6001620006d960201b60201c565b620005be306001620006d960201b60201c565b620005d361dead6001620006d960201b60201c565b600254600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600254604051620006be919062000f56565b60405180910390a3505050505062001030565b600033905090565b620006e9620006d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200077b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007729062000fd4565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000887620006d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000919576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009109062000fd4565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b8919062001013565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a7057607f821691505b60208210810362000a865762000a8562000a28565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000af07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ab1565b62000afc868362000ab1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b4962000b4362000b3d8462000b14565b62000b1e565b62000b14565b9050919050565b6000819050919050565b62000b658362000b28565b62000b7d62000b748262000b50565b84845462000abe565b825550505050565b600090565b62000b9462000b85565b62000ba181848462000b5a565b505050565b5b8181101562000bc95762000bbd60008262000b8a565b60018101905062000ba7565b5050565b601f82111562000c185762000be28162000a8c565b62000bed8462000aa1565b8101602085101562000bfd578190505b62000c1562000c0c8562000aa1565b83018262000ba6565b50505b505050565b600082821c905092915050565b600062000c3d6000198460080262000c1d565b1980831691505092915050565b600062000c58838362000c2a565b9150826002028217905092915050565b62000c7382620009ee565b67ffffffffffffffff81111562000c8f5762000c8e620009f9565b5b62000c9b825462000a57565b62000ca882828562000bcd565b600060209050601f83116001811462000ce0576000841562000ccb578287015190505b62000cd7858262000c4a565b86555062000d47565b601f19841662000cf08662000a8c565b60005b8281101562000d1a5784890151825560018201915060208501945060208101905062000cf3565b8683101562000d3a578489015162000d36601f89168262000c2a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d8b8262000b14565b915062000d988362000b14565b925082820262000da88162000b14565b9150828204841483151762000dc25762000dc162000d4f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e058262000b14565b915062000e128362000b14565b92508262000e255762000e2462000dc9565b5b828204905092915050565b600062000e3d8262000b14565b915062000e4a8362000b14565b925082820190508082111562000e655762000e6462000d4f565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e9d8262000e70565b9050919050565b62000eaf8162000e90565b811462000ebb57600080fd5b50565b60008151905062000ecf8162000ea4565b92915050565b60006020828403121562000eee5762000eed62000e6b565b5b600062000efe8482850162000ebe565b91505092915050565b62000f128162000e90565b82525050565b600060408201905062000f2f600083018562000f07565b62000f3e602083018462000f07565b9392505050565b62000f508162000b14565b82525050565b600060208201905062000f6d600083018462000f45565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fbc60208362000f73565b915062000fc98262000f84565b602082019050919050565b6000602082019050818103600083015262000fef8162000fad565b9050919050565b60008115159050919050565b6200100d8162000ff6565b82525050565b60006020820190506200102a600083018462001002565b92915050565b60805160a051614b666200108060003960008181610f820152611762015260008181610c760152818161343d0152818161351e015281816135450152818161360a01526136310152614b666000f3fe6080604052600436106102815760003560e01c80638ea5220f1161014f578063c18bc195116100c1578063dd62ed3e1161007a578063dd62ed3e146109ad578063e2f45605146109ea578063f11a24d314610a15578063f2fde38b14610a40578063f637434214610a69578063f8b45b0514610a9457610288565b8063c18bc1951461089d578063c8c8ebe4146108c6578063d1633649146108f1578063d257b34f1461091a578063d5f3948814610957578063d85ba0631461098257610288565b80639fccce32116101135780639fccce3214610767578063a0d82dc514610792578063a457c2d7146107bd578063a9059cbb146107fa578063b62496f514610837578063c02466681461087457610288565b80638ea5220f14610694578063924de9b7146106bf57806395d89b41146106e85780639a7a23d6146107135780639c3b4fdc1461073c57610288565b806349bd5a5e116101f357806370a08231116101ac57806370a08231146105aa578063715018a6146105e7578063751039fc146105fe5780637571336a146106295780638129fc1c146106525780638da5cb5b1461066957610288565b806349bd5a5e146104985780634a62bb65146104c35780634fbee193146104ee57806366ca9b831461052b5780636a486a8e146105545780636ddd17131461057f57610288565b80631a8145bb116102455780631a8145bb14610374578063203e727e1461039f57806323b872dd146103c857806327c8f83514610405578063313ce56714610430578063395093511461045b57610288565b806302dbd8f81461028d57806306fdde03146102b6578063095ea7b3146102e15780631694505e1461031e57806318160ddd1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061371b565b610abf565b005b3480156102c257600080fd5b506102cb610bc4565b6040516102d891906137eb565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061386b565b610c56565b60405161031591906138c6565b60405180910390f35b34801561032a57600080fd5b50610333610c74565b6040516103409190613940565b60405180910390f35b34801561035557600080fd5b5061035e610c98565b60405161036b919061396a565b60405180910390f35b34801561038057600080fd5b50610389610ca2565b604051610396919061396a565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613985565b610ca8565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906139b2565b610dd1565b6040516103fc91906138c6565b60405180910390f35b34801561041157600080fd5b5061041a610f3a565b6040516104279190613a14565b60405180910390f35b34801561043c57600080fd5b50610445610f40565b6040516104529190613a4b565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d919061386b565b610f49565b60405161048f91906138c6565b60405180910390f35b3480156104a457600080fd5b506104ad610f80565b6040516104ba9190613a14565b60405180910390f35b3480156104cf57600080fd5b506104d8610fa4565b6040516104e591906138c6565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613a66565b610fb7565b60405161052291906138c6565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061371b565b61100d565b005b34801561056057600080fd5b50610569611112565b604051610576919061396a565b60405180910390f35b34801561058b57600080fd5b50610594611118565b6040516105a191906138c6565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613a66565b61112b565b6040516105de919061396a565b60405180910390f35b3480156105f357600080fd5b506105fc611173565b005b34801561060a57600080fd5b506106136112cb565b60405161062091906138c6565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613abf565b611386565b005b34801561065e57600080fd5b50610667611478565b005b34801561067557600080fd5b5061067e611533565b60405161068b9190613a14565b60405180910390f35b3480156106a057600080fd5b506106a961155d565b6040516106b69190613a14565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613aff565b611583565b005b3480156106f457600080fd5b506106fd611637565b60405161070a91906137eb565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613abf565b6116c9565b005b34801561074857600080fd5b506107516117fc565b60405161075e919061396a565b60405180910390f35b34801561077357600080fd5b5061077c611802565b604051610789919061396a565b60405180910390f35b34801561079e57600080fd5b506107a7611808565b6040516107b4919061396a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061386b565b61180e565b6040516107f191906138c6565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c919061386b565b611885565b60405161082e91906138c6565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613a66565b6118a3565b60405161086b91906138c6565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613abf565b6118c3565b005b3480156108a957600080fd5b506108c460048036038101906108bf9190613985565b611a03565b005b3480156108d257600080fd5b506108db611b2c565b6040516108e8919061396a565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613985565b611b32565b005b34801561092657600080fd5b50610941600480360381019061093c9190613985565b611c34565b60405161094e91906138c6565b60405180910390f35b34801561096357600080fd5b5061096c611da3565b6040516109799190613a14565b60405180910390f35b34801561098e57600080fd5b50610997611dc9565b6040516109a4919061396a565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190613b2c565b611dcf565b6040516109e1919061396a565b60405180910390f35b3480156109f657600080fd5b506109ff611e56565b604051610a0c919061396a565b60405180910390f35b348015610a2157600080fd5b50610a2a611e5c565b604051610a37919061396a565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190613a66565b611e62565b005b348015610a7557600080fd5b50610a7e612028565b604051610a8b919061396a565b60405180910390f35b348015610aa057600080fd5b50610aa961202e565b604051610ab6919061396a565b60405180910390f35b610ac7612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613bb8565b60405180910390fd5b8160108190555080601181905550601154601054610b749190613c07565b600f819055506019600f541115610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613c87565b60405180910390fd5b5050565b606060038054610bd390613cd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613cd6565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c6a610c63612034565b848461203c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60125481565b610cb0612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690613bb8565b60405180910390fd5b670de0b6b3a764000060646001610d54610c98565b610d5e9190613d07565b610d689190613d78565b610d729190613d78565b811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90613e1b565b60405180910390fd5b670de0b6b3a764000081610dc89190613d07565b60088190555050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613ead565b60405180910390fd5b610e9d848484612205565b610f2f843384600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2a9190613ecd565b61203c565b600190509392505050565b61dead81565b60006012905090565b600080610f54612034565b9050610f75818585610f668589611dcf565b610f709190613c07565b61203c565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611015612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613bb8565b60405180910390fd5b81600d8190555080600e81905550600e54600d546110c29190613c07565b600c819055506014600c54111561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613f4d565b60405180910390fd5b5050565b600f5481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112d5612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613bb8565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61138e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613bb8565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611480612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690613bb8565b60405180910390fd5b601460009054906101000a900460ff161561152957600080fd5b6001601581905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61158b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613bb8565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461164690613cd6565b80601f016020809104026020016040519081016040528092919081815260200182805461167290613cd6565b80156116bf5780601f10611694576101008083540402835291602001916116bf565b820191906000526020600020905b8154815290600101906020018083116116a257829003601f168201915b5050505050905090565b6116d1612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613bb8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613fdf565b60405180910390fd5b6117f88282612cb6565b5050565b600e5481565b60135481565b60115481565b600080611819612034565b905060006118278286611dcf565b90508381101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614071565b60405180910390fd5b611879828686840361203c565b60019250505092915050565b6000611899611892612034565b8484612205565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b6118cb612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190613bb8565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f791906138c6565b60405180910390a25050565b611a0b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190613bb8565b60405180910390fd5b670de0b6b3a764000060646002611aaf610c98565b611ab99190613d07565b611ac39190613d78565b611acd9190613d78565b811015611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614103565b60405180910390fd5b670de0b6b3a764000081611b239190613d07565b600a8190555050565b60085481565b611b3a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613bb8565b60405180910390fd5b601460009054906101000a900460ff16158015611be95750600060155414155b611bf257600080fd5b8043611bfe9190613c07565b60156000828254611c0f9190613c07565b925050819055506001601460006101000a81548160ff02191690831515021790555050565b6000611c3e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613bb8565b60405180910390fd5b620186a06001611cdb610c98565b611ce59190613d07565b611cef9190613d78565b821015611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890614195565b60405180910390fd5b60646001611d3d610c98565b611d479190613d07565b611d519190613d78565b821115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614227565b60405180910390fd5b8160098190555060019050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600d5481565b611e6a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f906142b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612111906143dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f8919061396a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90614501565b60405180910390fd5b600081036122fc576122f783836000612d57565b612cb1565b600b60009054906101000a900460ff161561282d57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123f65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612430575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124495750601660009054906101000a900460ff16155b1561282c57601460009054906101000a900460ff1661254357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125035750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125399061456d565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561268d57600854811115612630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612627906145ff565b60405180910390fd5b600a5461263c8361112b565b826126479190613c07565b1115612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267f9061466b565b60405180910390fd5b61282b565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127305750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561277f5760085481111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906146fd565b60405180910390fd5b61282a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661282957600a546127dc8361112b565b826127e79190613c07565b1115612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9061466b565b60405180910390fd5b5b5b5b5b5b60006128383061112b565b9050600061284582612fb7565b90508080156128605750600b60019054906101000a900460ff165b80156128795750601660009054906101000a900460ff16155b80156128cf5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129255750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561297b5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129bf576001601660006101000a81548160ff0219169083151502179055506129a3612ff2565b6000601660006101000a81548160ff0219169083151502179055505b6000601660009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a755750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7f57600090505b60008115612ca1576015546000108015612a9a575043601554105b15612c6f57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afa57506000600f54115b15612b86576064600f5486612b0f9190613d07565b612b199190613d78565b9050600f5460105482612b2c9190613d07565b612b369190613d78565b60126000828254612b479190613c07565b92505081905550600f5460115482612b5f9190613d07565b612b699190613d78565b60136000828254612b7a9190613c07565b92505081905550612c6a565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612be157506000600c54115b15612c69576064600c5486612bf69190613d07565b612c009190613d78565b9050600c54600d5482612c139190613d07565b612c1d9190613d78565b60126000828254612c2e9190613c07565b92505081905550600c54600e5482612c469190613d07565b612c509190613d78565b60136000828254612c619190613c07565b925050819055505b5b612c7d565b612c7a8787876131e3565b90505b6000811115612c9257612c91873083612d57565b5b8085612c9e9190613ecd565b94505b612cac878787612d57565b505050505b505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2c90614501565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061478f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fa9919061396a565b60405180910390a350505050565b60006009548210158015612fcc575060155443115b8015612feb57506003601a600043815260200190815260200160002054105b9050919050565b6000612ffd3061112b565b905060006013546012546130119190613c07565b90506000808314806130235750600082145b15613030575050506131e1565b601660095461303f9190613d07565b8311156130585760166009546130559190613d07565b92505b60006002836012548661306b9190613d07565b6130759190613d78565b61307f9190613d78565b90506000818561308f9190613ecd565b9050600047905061309f8261339e565b600081476130ad9190613ecd565b9050600086601354836130c09190613d07565b6130ca9190613d78565b9050600081836130da9190613ecd565b905060006012819055506000601381905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613132906147e0565b60006040518083038185875af1925050503d806000811461316f576040519150601f19603f3d011682016040523d82523d6000602084013e613174565b606091505b50508097505060008611801561318a5750600081115b156131d7576131998682613604565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826012546040516131ce939291906147f5565b60405180910390a15b5050505050505050505b565b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133005760646031836132469190613d07565b6132509190613d78565b9050600c54600d54826132639190613d07565b61326d9190613d78565b6012600082825461327e9190613c07565b92505081905550600c54600e54826132969190613d07565b6132a09190613d78565b601360008282546132b19190613c07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a2613397565b6064600060155414613313576046613316565b601e5b60ff16836133249190613d07565b61332e9190613d78565b9050600f54601054826133419190613d07565b61334b9190613d78565b6012600082825461335c9190613c07565b92505081905550600f54601154826133749190613d07565b61337e9190613d78565b6013600082825461338f9190613c07565b925050819055505b9392505050565b6000600267ffffffffffffffff8111156133bb576133ba61482c565b5b6040519080825280602002602001820160405280156133e95781602001602082028036833780820191505090505b50905030816000815181106134015761340061485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca919061489f565b816001815181106134de576134dd61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613543307f00000000000000000000000000000000000000000000000000000000000000008461203c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135a59594939291906149c5565b600060405180830381600087803b1580156135bf57600080fd5b505af11580156135d3573d6000803e3d6000fd5b50505050601a600043815260200190815260200160002060008154809291906135fb90614a1f565b91905055505050565b61362f307f00000000000000000000000000000000000000000000000000000000000000008461203c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161369696959493929190614a67565b60606040518083038185885af11580156136b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d99190614add565b5050505050565b600080fd5b6000819050919050565b6136f8816136e5565b811461370357600080fd5b50565b600081359050613715816136ef565b92915050565b60008060408385031215613732576137316136e0565b5b600061374085828601613706565b925050602061375185828601613706565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561379557808201518184015260208101905061377a565b60008484015250505050565b6000601f19601f8301169050919050565b60006137bd8261375b565b6137c78185613766565b93506137d7818560208601613777565b6137e0816137a1565b840191505092915050565b6000602082019050818103600083015261380581846137b2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138388261380d565b9050919050565b6138488161382d565b811461385357600080fd5b50565b6000813590506138658161383f565b92915050565b60008060408385031215613882576138816136e0565b5b600061389085828601613856565b92505060206138a185828601613706565b9150509250929050565b60008115159050919050565b6138c0816138ab565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6000819050919050565b60006139066139016138fc8461380d565b6138e1565b61380d565b9050919050565b6000613918826138eb565b9050919050565b600061392a8261390d565b9050919050565b61393a8161391f565b82525050565b60006020820190506139556000830184613931565b92915050565b613964816136e5565b82525050565b600060208201905061397f600083018461395b565b92915050565b60006020828403121561399b5761399a6136e0565b5b60006139a984828501613706565b91505092915050565b6000806000606084860312156139cb576139ca6136e0565b5b60006139d986828701613856565b93505060206139ea86828701613856565b92505060406139fb86828701613706565b9150509250925092565b613a0e8161382d565b82525050565b6000602082019050613a296000830184613a05565b92915050565b600060ff82169050919050565b613a4581613a2f565b82525050565b6000602082019050613a606000830184613a3c565b92915050565b600060208284031215613a7c57613a7b6136e0565b5b6000613a8a84828501613856565b91505092915050565b613a9c816138ab565b8114613aa757600080fd5b50565b600081359050613ab981613a93565b92915050565b60008060408385031215613ad657613ad56136e0565b5b6000613ae485828601613856565b9250506020613af585828601613aaa565b9150509250929050565b600060208284031215613b1557613b146136e0565b5b6000613b2384828501613aaa565b91505092915050565b60008060408385031215613b4357613b426136e0565b5b6000613b5185828601613856565b9250506020613b6285828601613856565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ba2602083613766565b9150613bad82613b6c565b602082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c12826136e5565b9150613c1d836136e5565b9250828201905080821115613c3557613c34613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613c71601d83613766565b9150613c7c82613c3b565b602082019050919050565b60006020820190508181036000830152613ca081613c64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cee57607f821691505b602082108103613d0157613d00613ca7565b5b50919050565b6000613d12826136e5565b9150613d1d836136e5565b9250828202613d2b816136e5565b91508282048414831517613d4257613d41613bd8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d83826136e5565b9150613d8e836136e5565b925082613d9e57613d9d613d49565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000613e05602d83613766565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e97602883613766565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed8826136e5565b9150613ee3836136e5565b9250828203905081811115613efb57613efa613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613f37601d83613766565b9150613f4282613f01565b602082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fc9603983613766565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061405b602583613766565b915061406682613fff565b604082019050919050565b6000602082019050818103600083015261408a8161404e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ed602283613766565b91506140f882614091565b604082019050919050565b6000602082019050818103600083015261411c816140e0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061417f603583613766565b915061418a82614123565b604082019050919050565b600060208201905081810360008301526141ae81614172565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614211603483613766565b915061421c826141b5565b604082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142a3602683613766565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614335602483613766565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143c7602283613766565b91506143d28261436b565b604082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614459602583613766565b9150614464826143fd565b604082019050919050565b600060208201905081810360008301526144888161444c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144eb602383613766565b91506144f68261448f565b604082019050919050565b6000602082019050818103600083015261451a816144de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614557601683613766565b915061456282614521565b602082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006145e9603583613766565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614655601383613766565b91506146608261461f565b602082019050919050565b6000602082019050818103600083015261468481614648565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006146e7603683613766565b91506146f28261468b565b604082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614779602683613766565b91506147848261471d565b604082019050919050565b600060208201905081810360008301526147a88161476c565b9050919050565b600081905092915050565b50565b60006147ca6000836147af565b91506147d5826147ba565b600082019050919050565b60006147eb826147bd565b9150819050919050565b600060608201905061480a600083018661395b565b614817602083018561395b565b614824604083018461395b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148998161383f565b92915050565b6000602082840312156148b5576148b46136e0565b5b60006148c38482850161488a565b91505092915050565b6000819050919050565b60006148f16148ec6148e7846148cc565b6138e1565b6136e5565b9050919050565b614901816148d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61493c8161382d565b82525050565b600061494e8383614933565b60208301905092915050565b6000602082019050919050565b600061497282614907565b61497c8185614912565b935061498783614923565b8060005b838110156149b857815161499f8882614942565b97506149aa8361495a565b92505060018101905061498b565b5085935050505092915050565b600060a0820190506149da600083018861395b565b6149e760208301876148f8565b81810360408301526149f98186614967565b9050614a086060830185613a05565b614a15608083018461395b565b9695505050505050565b6000614a2a826136e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5c57614a5b613bd8565b5b600182019050919050565b600060c082019050614a7c6000830189613a05565b614a89602083018861395b565b614a9660408301876148f8565b614aa360608301866148f8565b614ab06080830185613a05565b614abd60a083018461395b565b979650505050505050565b600081519050614ad7816136ef565b92915050565b600080600060608486031215614af657614af56136e0565b5b6000614b0486828701614ac8565b9350506020614b1586828701614ac8565b9250506040614b2686828701614ac8565b915050925092509256fea264697066735822122014194ca67f7236edc41296f5109637c7537f7b51133bc99fc40f138a9961f7bd64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80638ea5220f1161014f578063c18bc195116100c1578063dd62ed3e1161007a578063dd62ed3e146109ad578063e2f45605146109ea578063f11a24d314610a15578063f2fde38b14610a40578063f637434214610a69578063f8b45b0514610a9457610288565b8063c18bc1951461089d578063c8c8ebe4146108c6578063d1633649146108f1578063d257b34f1461091a578063d5f3948814610957578063d85ba0631461098257610288565b80639fccce32116101135780639fccce3214610767578063a0d82dc514610792578063a457c2d7146107bd578063a9059cbb146107fa578063b62496f514610837578063c02466681461087457610288565b80638ea5220f14610694578063924de9b7146106bf57806395d89b41146106e85780639a7a23d6146107135780639c3b4fdc1461073c57610288565b806349bd5a5e116101f357806370a08231116101ac57806370a08231146105aa578063715018a6146105e7578063751039fc146105fe5780637571336a146106295780638129fc1c146106525780638da5cb5b1461066957610288565b806349bd5a5e146104985780634a62bb65146104c35780634fbee193146104ee57806366ca9b831461052b5780636a486a8e146105545780636ddd17131461057f57610288565b80631a8145bb116102455780631a8145bb14610374578063203e727e1461039f57806323b872dd146103c857806327c8f83514610405578063313ce56714610430578063395093511461045b57610288565b806302dbd8f81461028d57806306fdde03146102b6578063095ea7b3146102e15780631694505e1461031e57806318160ddd1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061371b565b610abf565b005b3480156102c257600080fd5b506102cb610bc4565b6040516102d891906137eb565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061386b565b610c56565b60405161031591906138c6565b60405180910390f35b34801561032a57600080fd5b50610333610c74565b6040516103409190613940565b60405180910390f35b34801561035557600080fd5b5061035e610c98565b60405161036b919061396a565b60405180910390f35b34801561038057600080fd5b50610389610ca2565b604051610396919061396a565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613985565b610ca8565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906139b2565b610dd1565b6040516103fc91906138c6565b60405180910390f35b34801561041157600080fd5b5061041a610f3a565b6040516104279190613a14565b60405180910390f35b34801561043c57600080fd5b50610445610f40565b6040516104529190613a4b565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d919061386b565b610f49565b60405161048f91906138c6565b60405180910390f35b3480156104a457600080fd5b506104ad610f80565b6040516104ba9190613a14565b60405180910390f35b3480156104cf57600080fd5b506104d8610fa4565b6040516104e591906138c6565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613a66565b610fb7565b60405161052291906138c6565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061371b565b61100d565b005b34801561056057600080fd5b50610569611112565b604051610576919061396a565b60405180910390f35b34801561058b57600080fd5b50610594611118565b6040516105a191906138c6565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613a66565b61112b565b6040516105de919061396a565b60405180910390f35b3480156105f357600080fd5b506105fc611173565b005b34801561060a57600080fd5b506106136112cb565b60405161062091906138c6565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613abf565b611386565b005b34801561065e57600080fd5b50610667611478565b005b34801561067557600080fd5b5061067e611533565b60405161068b9190613a14565b60405180910390f35b3480156106a057600080fd5b506106a961155d565b6040516106b69190613a14565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613aff565b611583565b005b3480156106f457600080fd5b506106fd611637565b60405161070a91906137eb565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613abf565b6116c9565b005b34801561074857600080fd5b506107516117fc565b60405161075e919061396a565b60405180910390f35b34801561077357600080fd5b5061077c611802565b604051610789919061396a565b60405180910390f35b34801561079e57600080fd5b506107a7611808565b6040516107b4919061396a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061386b565b61180e565b6040516107f191906138c6565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c919061386b565b611885565b60405161082e91906138c6565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613a66565b6118a3565b60405161086b91906138c6565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613abf565b6118c3565b005b3480156108a957600080fd5b506108c460048036038101906108bf9190613985565b611a03565b005b3480156108d257600080fd5b506108db611b2c565b6040516108e8919061396a565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613985565b611b32565b005b34801561092657600080fd5b50610941600480360381019061093c9190613985565b611c34565b60405161094e91906138c6565b60405180910390f35b34801561096357600080fd5b5061096c611da3565b6040516109799190613a14565b60405180910390f35b34801561098e57600080fd5b50610997611dc9565b6040516109a4919061396a565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190613b2c565b611dcf565b6040516109e1919061396a565b60405180910390f35b3480156109f657600080fd5b506109ff611e56565b604051610a0c919061396a565b60405180910390f35b348015610a2157600080fd5b50610a2a611e5c565b604051610a37919061396a565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190613a66565b611e62565b005b348015610a7557600080fd5b50610a7e612028565b604051610a8b919061396a565b60405180910390f35b348015610aa057600080fd5b50610aa961202e565b604051610ab6919061396a565b60405180910390f35b610ac7612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613bb8565b60405180910390fd5b8160108190555080601181905550601154601054610b749190613c07565b600f819055506019600f541115610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613c87565b60405180910390fd5b5050565b606060038054610bd390613cd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613cd6565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c6a610c63612034565b848461203c565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60125481565b610cb0612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690613bb8565b60405180910390fd5b670de0b6b3a764000060646001610d54610c98565b610d5e9190613d07565b610d689190613d78565b610d729190613d78565b811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90613e1b565b60405180910390fd5b670de0b6b3a764000081610dc89190613d07565b60088190555050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613ead565b60405180910390fd5b610e9d848484612205565b610f2f843384600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2a9190613ecd565b61203c565b600190509392505050565b61dead81565b60006012905090565b600080610f54612034565b9050610f75818585610f668589611dcf565b610f709190613c07565b61203c565b600191505092915050565b7f000000000000000000000000b3d70dd92851631cafdef84361784b8a317860cb81565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611015612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613bb8565b60405180910390fd5b81600d8190555080600e81905550600e54600d546110c29190613c07565b600c819055506014600c54111561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613f4d565b60405180910390fd5b5050565b600f5481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112d5612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613bb8565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61138e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613bb8565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611480612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690613bb8565b60405180910390fd5b601460009054906101000a900460ff161561152957600080fd5b6001601581905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61158b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613bb8565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461164690613cd6565b80601f016020809104026020016040519081016040528092919081815260200182805461167290613cd6565b80156116bf5780601f10611694576101008083540402835291602001916116bf565b820191906000526020600020905b8154815290600101906020018083116116a257829003601f168201915b5050505050905090565b6116d1612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613bb8565b60405180910390fd5b7f000000000000000000000000b3d70dd92851631cafdef84361784b8a317860cb73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613fdf565b60405180910390fd5b6117f88282612cb6565b5050565b600e5481565b60135481565b60115481565b600080611819612034565b905060006118278286611dcf565b90508381101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614071565b60405180910390fd5b611879828686840361203c565b60019250505092915050565b6000611899611892612034565b8484612205565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b6118cb612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190613bb8565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f791906138c6565b60405180910390a25050565b611a0b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190613bb8565b60405180910390fd5b670de0b6b3a764000060646002611aaf610c98565b611ab99190613d07565b611ac39190613d78565b611acd9190613d78565b811015611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614103565b60405180910390fd5b670de0b6b3a764000081611b239190613d07565b600a8190555050565b60085481565b611b3a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613bb8565b60405180910390fd5b601460009054906101000a900460ff16158015611be95750600060155414155b611bf257600080fd5b8043611bfe9190613c07565b60156000828254611c0f9190613c07565b925050819055506001601460006101000a81548160ff02191690831515021790555050565b6000611c3e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613bb8565b60405180910390fd5b620186a06001611cdb610c98565b611ce59190613d07565b611cef9190613d78565b821015611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890614195565b60405180910390fd5b60646001611d3d610c98565b611d479190613d07565b611d519190613d78565b821115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614227565b60405180910390fd5b8160098190555060019050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600d5481565b611e6a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f906142b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612111906143dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f8919061396a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90614501565b60405180910390fd5b600081036122fc576122f783836000612d57565b612cb1565b600b60009054906101000a900460ff161561282d57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123f65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612430575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124495750601660009054906101000a900460ff16155b1561282c57601460009054906101000a900460ff1661254357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125035750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125399061456d565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561268d57600854811115612630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612627906145ff565b60405180910390fd5b600a5461263c8361112b565b826126479190613c07565b1115612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267f9061466b565b60405180910390fd5b61282b565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127305750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561277f5760085481111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906146fd565b60405180910390fd5b61282a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661282957600a546127dc8361112b565b826127e79190613c07565b1115612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9061466b565b60405180910390fd5b5b5b5b5b5b60006128383061112b565b9050600061284582612fb7565b90508080156128605750600b60019054906101000a900460ff165b80156128795750601660009054906101000a900460ff16155b80156128cf5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129255750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561297b5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129bf576001601660006101000a81548160ff0219169083151502179055506129a3612ff2565b6000601660006101000a81548160ff0219169083151502179055505b6000601660009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a755750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7f57600090505b60008115612ca1576015546000108015612a9a575043601554105b15612c6f57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afa57506000600f54115b15612b86576064600f5486612b0f9190613d07565b612b199190613d78565b9050600f5460105482612b2c9190613d07565b612b369190613d78565b60126000828254612b479190613c07565b92505081905550600f5460115482612b5f9190613d07565b612b699190613d78565b60136000828254612b7a9190613c07565b92505081905550612c6a565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612be157506000600c54115b15612c69576064600c5486612bf69190613d07565b612c009190613d78565b9050600c54600d5482612c139190613d07565b612c1d9190613d78565b60126000828254612c2e9190613c07565b92505081905550600c54600e5482612c469190613d07565b612c509190613d78565b60136000828254612c619190613c07565b925050819055505b5b612c7d565b612c7a8787876131e3565b90505b6000811115612c9257612c91873083612d57565b5b8085612c9e9190613ecd565b94505b612cac878787612d57565b505050505b505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2c90614501565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061478f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fa9919061396a565b60405180910390a350505050565b60006009548210158015612fcc575060155443115b8015612feb57506003601a600043815260200190815260200160002054105b9050919050565b6000612ffd3061112b565b905060006013546012546130119190613c07565b90506000808314806130235750600082145b15613030575050506131e1565b601660095461303f9190613d07565b8311156130585760166009546130559190613d07565b92505b60006002836012548661306b9190613d07565b6130759190613d78565b61307f9190613d78565b90506000818561308f9190613ecd565b9050600047905061309f8261339e565b600081476130ad9190613ecd565b9050600086601354836130c09190613d07565b6130ca9190613d78565b9050600081836130da9190613ecd565b905060006012819055506000601381905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613132906147e0565b60006040518083038185875af1925050503d806000811461316f576040519150601f19603f3d011682016040523d82523d6000602084013e613174565b606091505b50508097505060008611801561318a5750600081115b156131d7576131998682613604565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826012546040516131ce939291906147f5565b60405180910390a15b5050505050505050505b565b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133005760646031836132469190613d07565b6132509190613d78565b9050600c54600d54826132639190613d07565b61326d9190613d78565b6012600082825461327e9190613c07565b92505081905550600c54600e54826132969190613d07565b6132a09190613d78565b601360008282546132b19190613c07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a2613397565b6064600060155414613313576046613316565b601e5b60ff16836133249190613d07565b61332e9190613d78565b9050600f54601054826133419190613d07565b61334b9190613d78565b6012600082825461335c9190613c07565b92505081905550600f54601154826133749190613d07565b61337e9190613d78565b6013600082825461338f9190613c07565b925050819055505b9392505050565b6000600267ffffffffffffffff8111156133bb576133ba61482c565b5b6040519080825280602002602001820160405280156133e95781602001602082028036833780820191505090505b50905030816000815181106134015761340061485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca919061489f565b816001815181106134de576134dd61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613543307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461203c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135a59594939291906149c5565b600060405180830381600087803b1580156135bf57600080fd5b505af11580156135d3573d6000803e3d6000fd5b50505050601a600043815260200190815260200160002060008154809291906135fb90614a1f565b91905055505050565b61362f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461203c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161369696959493929190614a67565b60606040518083038185885af11580156136b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d99190614add565b5050505050565b600080fd5b6000819050919050565b6136f8816136e5565b811461370357600080fd5b50565b600081359050613715816136ef565b92915050565b60008060408385031215613732576137316136e0565b5b600061374085828601613706565b925050602061375185828601613706565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561379557808201518184015260208101905061377a565b60008484015250505050565b6000601f19601f8301169050919050565b60006137bd8261375b565b6137c78185613766565b93506137d7818560208601613777565b6137e0816137a1565b840191505092915050565b6000602082019050818103600083015261380581846137b2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138388261380d565b9050919050565b6138488161382d565b811461385357600080fd5b50565b6000813590506138658161383f565b92915050565b60008060408385031215613882576138816136e0565b5b600061389085828601613856565b92505060206138a185828601613706565b9150509250929050565b60008115159050919050565b6138c0816138ab565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6000819050919050565b60006139066139016138fc8461380d565b6138e1565b61380d565b9050919050565b6000613918826138eb565b9050919050565b600061392a8261390d565b9050919050565b61393a8161391f565b82525050565b60006020820190506139556000830184613931565b92915050565b613964816136e5565b82525050565b600060208201905061397f600083018461395b565b92915050565b60006020828403121561399b5761399a6136e0565b5b60006139a984828501613706565b91505092915050565b6000806000606084860312156139cb576139ca6136e0565b5b60006139d986828701613856565b93505060206139ea86828701613856565b92505060406139fb86828701613706565b9150509250925092565b613a0e8161382d565b82525050565b6000602082019050613a296000830184613a05565b92915050565b600060ff82169050919050565b613a4581613a2f565b82525050565b6000602082019050613a606000830184613a3c565b92915050565b600060208284031215613a7c57613a7b6136e0565b5b6000613a8a84828501613856565b91505092915050565b613a9c816138ab565b8114613aa757600080fd5b50565b600081359050613ab981613a93565b92915050565b60008060408385031215613ad657613ad56136e0565b5b6000613ae485828601613856565b9250506020613af585828601613aaa565b9150509250929050565b600060208284031215613b1557613b146136e0565b5b6000613b2384828501613aaa565b91505092915050565b60008060408385031215613b4357613b426136e0565b5b6000613b5185828601613856565b9250506020613b6285828601613856565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ba2602083613766565b9150613bad82613b6c565b602082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c12826136e5565b9150613c1d836136e5565b9250828201905080821115613c3557613c34613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613c71601d83613766565b9150613c7c82613c3b565b602082019050919050565b60006020820190508181036000830152613ca081613c64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cee57607f821691505b602082108103613d0157613d00613ca7565b5b50919050565b6000613d12826136e5565b9150613d1d836136e5565b9250828202613d2b816136e5565b91508282048414831517613d4257613d41613bd8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d83826136e5565b9150613d8e836136e5565b925082613d9e57613d9d613d49565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000613e05602d83613766565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e97602883613766565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed8826136e5565b9150613ee3836136e5565b9250828203905081811115613efb57613efa613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613f37601d83613766565b9150613f4282613f01565b602082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fc9603983613766565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061405b602583613766565b915061406682613fff565b604082019050919050565b6000602082019050818103600083015261408a8161404e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ed602283613766565b91506140f882614091565b604082019050919050565b6000602082019050818103600083015261411c816140e0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061417f603583613766565b915061418a82614123565b604082019050919050565b600060208201905081810360008301526141ae81614172565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614211603483613766565b915061421c826141b5565b604082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142a3602683613766565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614335602483613766565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143c7602283613766565b91506143d28261436b565b604082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614459602583613766565b9150614464826143fd565b604082019050919050565b600060208201905081810360008301526144888161444c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144eb602383613766565b91506144f68261448f565b604082019050919050565b6000602082019050818103600083015261451a816144de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614557601683613766565b915061456282614521565b602082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006145e9603583613766565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614655601383613766565b91506146608261461f565b602082019050919050565b6000602082019050818103600083015261468481614648565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006146e7603683613766565b91506146f28261468b565b604082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614779602683613766565b91506147848261471d565b604082019050919050565b600060208201905081810360008301526147a88161476c565b9050919050565b600081905092915050565b50565b60006147ca6000836147af565b91506147d5826147ba565b600082019050919050565b60006147eb826147bd565b9150819050919050565b600060608201905061480a600083018661395b565b614817602083018561395b565b614824604083018461395b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148998161383f565b92915050565b6000602082840312156148b5576148b46136e0565b5b60006148c38482850161488a565b91505092915050565b6000819050919050565b60006148f16148ec6148e7846148cc565b6138e1565b6136e5565b9050919050565b614901816148d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61493c8161382d565b82525050565b600061494e8383614933565b60208301905092915050565b6000602082019050919050565b600061497282614907565b61497c8185614912565b935061498783614923565b8060005b838110156149b857815161499f8882614942565b97506149aa8361495a565b92505060018101905061498b565b5085935050505092915050565b600060a0820190506149da600083018861395b565b6149e760208301876148f8565b81810360408301526149f98186614967565b9050614a086060830185613a05565b614a15608083018461395b565b9695505050505050565b6000614a2a826136e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5c57614a5b613bd8565b5b600182019050919050565b600060c082019050614a7c6000830189613a05565b614a89602083018861395b565b614a9660408301876148f8565b614aa360608301866148f8565b614ab06080830185613a05565b614abd60a083018461395b565b979650505050505050565b600081519050614ad7816136ef565b92915050565b600080600060608486031215614af657614af56136e0565b5b6000614b0486828701614ac8565b9350506020614b1586828701614ac8565b9250506040614b2686828701614ac8565b915050925092509256fea264697066735822122014194ca67f7236edc41296f5109637c7537f7b51133bc99fc40f138a9961f7bd64736f6c63430008120033

Deployed Bytecode Sourcemap

14776:13721:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20420:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5373:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7540:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14822:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6493:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15471:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18997:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8191:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14925:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6335:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9010:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14880:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15169:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21360:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20122:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15360:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15209:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6664:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14222:148;;;;;;;;;;;;;:::i;:::-;;18410:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19460:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19811:109;;;;;;;;;;;;;:::i;:::-;;13580:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15017:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19704:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5592:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20911:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15323:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15511:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15433:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9751:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7004:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15825:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20721:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19236:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15054:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19928:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18605:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14987:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15252:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7242:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15096:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15286:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14525:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15395:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15136:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20420:293;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20533:13:::1;20514:16;:32;;;;20570:7;20557:10;:20;;;;20623:10;;20604:16;;:29;;;;:::i;:::-;20588:13;:45;;;;20669:2;20652:13;;:19;;20644:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20420:293:::0;;:::o;5373:100::-;5427:13;5460:5;5453:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5373:100;:::o;7540:169::-;7623:4;7640:39;7649:12;:10;:12::i;:::-;7663:7;7672:6;7640:8;:39::i;:::-;7697:4;7690:11;;7540:169;;;;:::o;14822:51::-;;;:::o;6493:108::-;6554:7;6581:12;;6574:19;;6493:108;:::o;15471:33::-;;;;:::o;18997:231::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19115:4:::1;19110:3;19106:1;19090:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;19089:30;;;;:::i;:::-;19079:6;:40;;19071:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;19213:6;19203;:17;;;;:::i;:::-;19180:20;:40;;;;18997:231:::0;:::o;8191:410::-;8332:4;8392:6;8357:11;:19;8369:6;8357:19;;;;;;;;;;;;;;;:31;8377:10;8357:31;;;;;;;;;;;;;;;;:41;;8349:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;8454:36;8464:6;8472:9;8483:6;8454:9;:36::i;:::-;8501:70;8510:6;8518:10;8564:6;8530:11;:19;8542:6;8530:19;;;;;;;;;;;;;;;:31;8550:10;8530:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;8501:8;:70::i;:::-;8589:4;8582:11;;8191:410;;;;;:::o;14925:53::-;14971:6;14925:53;:::o;6335:93::-;6393:5;6418:2;6411:9;;6335:93;:::o;9010:238::-;9098:4;9115:13;9131:12;:10;:12::i;:::-;9115:28;;9154:64;9163:5;9170:7;9207:10;9179:25;9189:5;9196:7;9179:9;:25::i;:::-;:38;;;;:::i;:::-;9154:8;:64::i;:::-;9236:4;9229:11;;;9010:238;;;;:::o;14880:38::-;;;:::o;15169:33::-;;;;;;;;;;;;;:::o;21360:125::-;21425:4;21449:19;:28;21469:7;21449:28;;;;;;;;;;;;;;;;;;;;;;;;;21442:35;;21360:125;;;:::o;20122:286::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20233:13:::1;20215:15;:31;;;;20269:7;20257:9;:19;;;;20320:9;;20302:15;;:27;;;;:::i;:::-;20287:12;:42;;;;20364:2;20348:12;;:18;;20340:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20122:286:::0;;:::o;15360:28::-;;;;:::o;15209:30::-;;;;;;;;;;;;;:::o;6664:127::-;6738:7;6765:9;:18;6775:7;6765:18;;;;;;;;;;;;;;;;6758:25;;6664:127;;;:::o;14222:148::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14329:1:::1;14292:40;;14313:6;;;;;;;;;;;14292:40;;;;;;;;;;;;14360:1;14343:6;;:19;;;;;;;;;;;;;;;;;;14222:148::o:0;18410:120::-;18462:4;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18495:5:::1;18478:14;;:22;;;;;;;;;;;;;;;;;;18518:4;18511:11;;18410:120:::0;:::o;19460:144::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19592:4:::1;19550:31;:39;19582:6;19550:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19460:144:::0;;:::o;19811:109::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19872:13:::1;;;;;;;;;;;19871:14;19863:23;;;::::0;::::1;;19911:1;19897:11;:15;;;;19811:109::o:0;13580:79::-;13618:7;13645:6;;;;;;;;;;;13638:13;;13580:79;:::o;15017:24::-;;;;;;;;;;;;;:::o;19704:99::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19788:7:::1;19774:11;;:21;;;;;;;;;;;;;;;;;;19704:99:::0;:::o;5592:104::-;5648:13;5681:7;5674:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5592:104;:::o;20911:244::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21018:13:::1;21010:21;;:4;:21;;::::0;21002:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21106:41;21135:4;21141:5;21106:28;:41::i;:::-;20911:244:::0;;:::o;15323:24::-;;;;:::o;15511:27::-;;;;:::o;15433:25::-;;;;:::o;9751:434::-;9844:4;9861:13;9877:12;:10;:12::i;:::-;9861:28;;9900:24;9927:25;9937:5;9944:7;9927:9;:25::i;:::-;9900:52;;9991:15;9971:16;:35;;9963:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10084:60;10093:5;10100:7;10128:15;10109:16;:34;10084:8;:60::i;:::-;10173:4;10166:11;;;;9751:434;;;;:::o;7004:175::-;7090:4;7107:42;7117:12;:10;:12::i;:::-;7131:9;7142:6;7107:9;:42::i;:::-;7167:4;7160:11;;7004:175;;;;:::o;15825:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20721:182::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20837:8:::1;20806:19;:28;20826:7;20806:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20877:7;20861:34;;;20886:8;20861:34;;;;;;:::i;:::-;;;;;;;;20721:182:::0;;:::o;19236:212::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19357:4:::1;19352:3;19348:1;19332:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;19331:30;;;;:::i;:::-;19321:6;:40;;19313:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19433:6;19423;:17;;;;:::i;:::-;19411:9;:29;;;;19236:212:::0;:::o;15054:35::-;;;;:::o;19928:182::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19999:13:::1;;;;;;;;;;;19998:14;:34;;;;;20031:1;20016:11;;:16;;19998:34;19990:43;;;::::0;::::1;;20070:1;20057:12;:14;;;;:::i;:::-;20044:11;;:27;;;;;;;:::i;:::-;;;;;;;;20098:4;20082:13;;:20;;;;;;;;;;;;;;;;;;19928:182:::0;:::o;18605:380::-;18686:4;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18742:6:::1;18738:1;18722:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;18709:9;:39;;18701:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;18857:3;18853:1;18837:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;18824:9;:36;;18816:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;18948:9;18927:18;:30;;;;18974:4;18967:11;;18605:380:::0;;;:::o;14987:23::-;;;;;;;;;;;;;:::o;15252:27::-;;;;:::o;7242:151::-;7331:7;7358:11;:18;7370:5;7358:18;;;;;;;;;;;;;;;:27;7377:7;7358:27;;;;;;;;;;;;;;;;7351:34;;7242:151;;;;:::o;15096:33::-;;;;:::o;15286:30::-;;;;:::o;14525:244::-;13802:12;:10;:12::i;:::-;13792:22;;:6;;;;;;;;;;;:22;;;13784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14634:1:::1;14614:22;;:8;:22;;::::0;14606:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14724:8;14695:38;;14716:6;;;;;;;;;;;14695:38;;;;;;;;;;;;14753:8;14744:6;;:17;;;;;;;;;;;;;;;;;;14525:244:::0;:::o;15395:31::-;;;;:::o;15136:24::-;;;;:::o;365:98::-;418:7;445:10;438:17;;365:98;:::o;12695:380::-;12848:1;12831:19;;:5;:19;;;12823:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12929:1;12910:21;;:7;:21;;;12902:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13013:6;12983:11;:18;12995:5;12983:18;;;;;;;;;;;;;;;:27;13002:7;12983:27;;;;;;;;;;;;;;;:36;;;;13051:7;13035:32;;13044:5;13035:32;;;13060:6;13035:32;;;;;;:::i;:::-;;;;;;;;12695:380;;;:::o;21547:3557::-;21695:1;21679:18;;:4;:18;;;21671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21772:1;21758:16;;:2;:16;;;21750:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21849:1;21839:6;:11;21836:92;;21867:28;21883:4;21889:2;21893:1;21867:15;:28::i;:::-;21910:7;;21836:92;21951:14;;;;;;;;;;;21948:1261;;;22011:8;;;;;;;;;;;22003:16;;:4;:16;;;;:51;;;;;22046:8;;;;;;;;;;;22040:14;;:2;:14;;;;22003:51;:89;;;;;22090:1;22076:16;;:2;:16;;;;22003:89;:131;;;;;22127:6;22113:21;;:2;:21;;;;22003:131;:161;;;;;22156:8;;;;;;;;;;;22155:9;22003:161;21981:1217;;;22202:13;;;;;;;;;;;22198:148;;22247:19;:25;22267:4;22247:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22276:19;:23;22296:2;22276:23;;;;;;;;;;;;;;;;;;;;;;;;;22247:52;22239:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;22198:148;22409:25;:31;22435:4;22409:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22445:31;:35;22477:2;22445:35;;;;;;;;;;;;;;;;;;;;;;;;;22444:36;22409:71;22405:778;;;22527:20;;22517:6;:30;;22509:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;22666:9;;22649:13;22659:2;22649:9;:13::i;:::-;22640:6;:22;;;;:::i;:::-;:35;;22632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22405:778;;;22793:25;:29;22819:2;22793:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22827:31;:37;22859:4;22827:37;;;;;;;;;;;;;;;;;;;;;;;;;22826:38;22793:71;22789:394;;;22911:20;;22901:6;:30;;22893:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;22789:394;;;23037:31;:35;23069:2;23037:35;;;;;;;;;;;;;;;;;;;;;;;;;23033:150;;23130:9;;23113:13;23123:2;23113:9;:13::i;:::-;23104:6;:22;;;;:::i;:::-;:35;;23096:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23033:150;22789:394;22405:778;21981:1217;21948:1261;23223:28;23254:24;23272:4;23254:9;:24::i;:::-;23223:55;;23289:12;23304:31;23314:20;23304:9;:31::i;:::-;23289:46;;23366:7;:35;;;;;23390:11;;;;;;;;;;;23366:35;:61;;;;;23419:8;;;;;;;;;;;23418:9;23366:61;:110;;;;;23445:25;:31;23471:4;23445:31;;;;;;;;;;;;;;;;;;;;;;;;;23444:32;23366:110;:153;;;;;23494:19;:25;23514:4;23494:25;;;;;;;;;;;;;;;;;;;;;;;;;23493:26;23366:153;:194;;;;;23537:19;:23;23557:2;23537:23;;;;;;;;;;;;;;;;;;;;;;;;;23536:24;23366:194;23348:338;;;23598:4;23587:8;;:15;;;;;;;;;;;;;;;;;;23631:10;:8;:10::i;:::-;23669:5;23658:8;;:16;;;;;;;;;;;;;;;;;;23348:338;23706:12;23722:8;;;;;;;;;;;23721:9;23706:24;;23831:19;:25;23851:4;23831:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23860:19;:23;23880:2;23860:23;;;;;;;;;;;;;;;;;;;;;;;;;23831:52;23828:99;;;23910:5;23900:15;;23828:99;23947:12;24051:7;24048:1003;;;24081:11;;24077:1;:15;:45;;;;;24110:12;24096:11;;:26;24077:45;24074:820;;;24173:25;:29;24199:2;24173:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24222:1;24206:13;;:17;24173:50;24169:625;;;24279:3;24263:13;;24254:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24247:35;;24353:13;;24334:16;;24327:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24305:18;;:61;;;;;;;:::i;:::-;;;;;;;;24425:13;;24412:10;;24405:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;24389:12;;:49;;;;;;;:::i;:::-;;;;;;;;24169:625;;;24512:25;:31;24538:4;24512:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24562:1;24547:12;;:16;24512:51;24509:285;;;24619:3;24604:12;;24595:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24588:34;;24692:12;;24674:15;;24667:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24645:18;;:59;;;;;;;:::i;:::-;;;;;;;;24762:12;;24750:9;;24743:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;24727:12;;:47;;;;;;;:::i;:::-;;;;;;;;24509:285;24169:625;24074:820;;;24853:25;24861:4;24867:2;24871:6;24853:7;:25::i;:::-;24846:32;;24074:820;24920:1;24913:4;:8;24910:93;;;24945:42;24961:4;24975;24982;24945:15;:42::i;:::-;24910:93;25035:4;25025:14;;;;;:::i;:::-;;;24048:1003;25063:33;25079:4;25085:2;25089:6;25063:15;:33::i;:::-;21660:3444;;;;21547:3557;;;;:::o;21163:188::-;21280:5;21246:25;:31;21272:4;21246:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21337:5;21303:40;;21331:4;21303:40;;;;;;;;;;;;21163:188;;:::o;10675:701::-;10788:1;10772:18;;:4;:18;;;10764:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10865:1;10851:16;;:2;:16;;;10843:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10918:19;10940:9;:15;10950:4;10940:15;;;;;;;;;;;;;;;;10918:37;;10989:6;10974:11;:21;;10966:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11106:6;11092:11;:20;11074:9;:15;11084:4;11074:15;;;;;;;;;;;;;;;:38;;;;11309:6;11292:9;:13;11302:2;11292:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;11357:2;11342:26;;11351:4;11342:26;;;11361:6;11342:26;;;;;;:::i;:::-;;;;;;;;10753:623;10675:701;;;:::o;25112:226::-;25183:4;25231:18;;25207:20;:42;;:86;;;;;25282:11;;25267:12;:26;25207:86;:123;;;;;25329:1;25297:15;:29;25313:12;25297:29;;;;;;;;;;;;:33;25207:123;25200:130;;25112:226;;;:::o;27133:1361::-;27172:23;27198:24;27216:4;27198:9;:24::i;:::-;27172:50;;27233:25;27282:12;;27261:18;;:33;;;;:::i;:::-;27233:61;;27305:12;27360:1;27341:15;:20;:46;;;;27386:1;27365:17;:22;27341:46;27338:60;;;27390:7;;;;;27338:60;27452:2;27431:18;;:23;;;;:::i;:::-;27413:15;:41;27410:111;;;27507:2;27486:18;;:23;;;;:::i;:::-;27468:41;;27410:111;27590:23;27675:1;27655:17;27634:18;;27616:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;27590:86;;27687:26;27734:15;27716;:33;;;;:::i;:::-;27687:62;;27770:25;27798:21;27770:49;;27832:36;27849:18;27832:16;:36::i;:::-;27890:18;27935:17;27911:21;:41;;;;:::i;:::-;27890:62;;27973:17;28021;28006:12;;27993:10;:25;;;;:::i;:::-;:45;;;;:::i;:::-;27973:65;;28059:23;28098:9;28085:10;:22;;;;:::i;:::-;28059:48;;28149:1;28128:18;:22;;;;28176:1;28161:12;:16;;;;28219:9;;;;;;;;;;;28211:23;;28242:9;28211:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28198:58;;;;;28298:1;28280:15;:19;:42;;;;;28321:1;28303:15;:19;28280:42;28277:210;;;28338:46;28351:15;28368;28338:12;:46::i;:::-;28404:71;28419:18;28439:15;28456:18;;28404:71;;;;;;;;:::i;:::-;;;;;;;;28277:210;27161:1333;;;;;;;;;27133:1361;:::o;26517:608::-;26593:12;26621:25;:31;26647:4;26621:31;;;;;;;;;;;;;;;;;;;;;;;;;26618:500;;;26689:3;26684:2;26675:6;:11;;;;:::i;:::-;:17;;;;:::i;:::-;26668:24;;26754:12;;26736:15;;26729:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26707:18;;:59;;;;;;;:::i;:::-;;;;;;;;26816:12;;26804:9;;26797:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;26781:12;;:47;;;;;;;:::i;:::-;;;;;;;;26860:2;26848:15;;;;;;;;;;;;26618:500;;;26960:3;26945:1;26930:11;;:16;:26;;26954:2;26930:26;;;26949:2;26930:26;26920:37;;:6;:37;;;;:::i;:::-;:43;;;;:::i;:::-;26913:50;;27029:13;;27010:16;;27003:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26981:18;;:61;;;;;;;:::i;:::-;;;;;;;;27093:13;;27080:10;;27073:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;27057:12;;:49;;;;;;;:::i;:::-;;;;;;;;26618:500;26517:608;;;;;:::o;25346:633::-;25474:21;25512:1;25498:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25474:40;;25543:4;25525;25530:1;25525:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25569:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25559:4;25564:1;25559:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25604:62;25621:4;25636:15;25654:11;25604:8;:62::i;:::-;25705:15;:66;;;25786:11;25812:1;25856:4;25883;25903:15;25705:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25940:15;:29;25956:12;25940:29;;;;;;;;;;;;:31;;;;;;;;;:::i;:::-;;;;;;25401:578;25346:633;:::o;25991:517::-;26139:62;26156:4;26171:15;26189:11;26139:8;:62::i;:::-;26244:15;:31;;;26283:9;26316:4;26336:11;26362:1;26405;14971:6;26474:15;26244:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25991:517;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:151::-;4347:9;4380:37;4411:5;4380:37;:::i;:::-;4367:50;;4272:151;;;:::o;4429:181::-;4541:62;4597:5;4541:62;:::i;:::-;4536:3;4529:75;4429:181;;:::o;4616:272::-;4734:4;4772:2;4761:9;4757:18;4749:26;;4785:96;4878:1;4867:9;4863:17;4854:6;4785:96;:::i;:::-;4616:272;;;;:::o;4894:118::-;4981:24;4999:5;4981:24;:::i;:::-;4976:3;4969:37;4894:118;;:::o;5018:222::-;5111:4;5149:2;5138:9;5134:18;5126:26;;5162:71;5230:1;5219:9;5215:17;5206:6;5162:71;:::i;:::-;5018:222;;;;:::o;5246:329::-;5305:6;5354:2;5342:9;5333:7;5329:23;5325:32;5322:119;;;5360:79;;:::i;:::-;5322:119;5480:1;5505:53;5550:7;5541:6;5530:9;5526:22;5505:53;:::i;:::-;5495:63;;5451:117;5246:329;;;;:::o;5581:619::-;5658:6;5666;5674;5723:2;5711:9;5702:7;5698:23;5694:32;5691:119;;;5729:79;;:::i;:::-;5691:119;5849:1;5874:53;5919:7;5910:6;5899:9;5895:22;5874:53;:::i;:::-;5864:63;;5820:117;5976:2;6002:53;6047:7;6038:6;6027:9;6023:22;6002:53;:::i;:::-;5992:63;;5947:118;6104:2;6130:53;6175:7;6166:6;6155:9;6151:22;6130:53;:::i;:::-;6120:63;;6075:118;5581:619;;;;;:::o;6206:118::-;6293:24;6311:5;6293:24;:::i;:::-;6288:3;6281:37;6206:118;;:::o;6330:222::-;6423:4;6461:2;6450:9;6446:18;6438:26;;6474:71;6542:1;6531:9;6527:17;6518:6;6474:71;:::i;:::-;6330:222;;;;:::o;6558:86::-;6593:7;6633:4;6626:5;6622:16;6611:27;;6558:86;;;:::o;6650:112::-;6733:22;6749:5;6733:22;:::i;:::-;6728:3;6721:35;6650:112;;:::o;6768:214::-;6857:4;6895:2;6884:9;6880:18;6872:26;;6908:67;6972:1;6961:9;6957:17;6948:6;6908:67;:::i;:::-;6768:214;;;;:::o;6988:329::-;7047:6;7096:2;7084:9;7075:7;7071:23;7067:32;7064:119;;;7102:79;;:::i;:::-;7064:119;7222:1;7247:53;7292:7;7283:6;7272:9;7268:22;7247:53;:::i;:::-;7237:63;;7193:117;6988:329;;;;:::o;7323:116::-;7393:21;7408:5;7393:21;:::i;:::-;7386:5;7383:32;7373:60;;7429:1;7426;7419:12;7373:60;7323:116;:::o;7445:133::-;7488:5;7526:6;7513:20;7504:29;;7542:30;7566:5;7542:30;:::i;:::-;7445:133;;;;:::o;7584:468::-;7649:6;7657;7706:2;7694:9;7685:7;7681:23;7677:32;7674:119;;;7712:79;;:::i;:::-;7674:119;7832:1;7857:53;7902:7;7893:6;7882:9;7878:22;7857:53;:::i;:::-;7847:63;;7803:117;7959:2;7985:50;8027:7;8018:6;8007:9;8003:22;7985:50;:::i;:::-;7975:60;;7930:115;7584:468;;;;;:::o;8058:323::-;8114:6;8163:2;8151:9;8142:7;8138:23;8134:32;8131:119;;;8169:79;;:::i;:::-;8131:119;8289:1;8314:50;8356:7;8347:6;8336:9;8332:22;8314:50;:::i;:::-;8304:60;;8260:114;8058:323;;;;:::o;8387:474::-;8455:6;8463;8512:2;8500:9;8491:7;8487:23;8483:32;8480:119;;;8518:79;;:::i;:::-;8480:119;8638:1;8663:53;8708:7;8699:6;8688:9;8684:22;8663:53;:::i;:::-;8653:63;;8609:117;8765:2;8791:53;8836:7;8827:6;8816:9;8812:22;8791:53;:::i;:::-;8781:63;;8736:118;8387:474;;;;;:::o;8867:182::-;9007:34;9003:1;8995:6;8991:14;8984:58;8867:182;:::o;9055:366::-;9197:3;9218:67;9282:2;9277:3;9218:67;:::i;:::-;9211:74;;9294:93;9383:3;9294:93;:::i;:::-;9412:2;9407:3;9403:12;9396:19;;9055:366;;;:::o;9427:419::-;9593:4;9631:2;9620:9;9616:18;9608:26;;9680:9;9674:4;9670:20;9666:1;9655:9;9651:17;9644:47;9708:131;9834:4;9708:131;:::i;:::-;9700:139;;9427:419;;;:::o;9852:180::-;9900:77;9897:1;9890:88;9997:4;9994:1;9987:15;10021:4;10018:1;10011:15;10038:191;10078:3;10097:20;10115:1;10097:20;:::i;:::-;10092:25;;10131:20;10149:1;10131:20;:::i;:::-;10126:25;;10174:1;10171;10167:9;10160:16;;10195:3;10192:1;10189:10;10186:36;;;10202:18;;:::i;:::-;10186:36;10038:191;;;;:::o;10235:179::-;10375:31;10371:1;10363:6;10359:14;10352:55;10235:179;:::o;10420:366::-;10562:3;10583:67;10647:2;10642:3;10583:67;:::i;:::-;10576:74;;10659:93;10748:3;10659:93;:::i;:::-;10777:2;10772:3;10768:12;10761:19;;10420:366;;;:::o;10792:419::-;10958:4;10996:2;10985:9;10981:18;10973:26;;11045:9;11039:4;11035:20;11031:1;11020:9;11016:17;11009:47;11073:131;11199:4;11073:131;:::i;:::-;11065:139;;10792:419;;;:::o;11217:180::-;11265:77;11262:1;11255:88;11362:4;11359:1;11352:15;11386:4;11383:1;11376:15;11403:320;11447:6;11484:1;11478:4;11474:12;11464:22;;11531:1;11525:4;11521:12;11552:18;11542:81;;11608:4;11600:6;11596:17;11586:27;;11542:81;11670:2;11662:6;11659:14;11639:18;11636:38;11633:84;;11689:18;;:::i;:::-;11633:84;11454:269;11403:320;;;:::o;11729:410::-;11769:7;11792:20;11810:1;11792:20;:::i;:::-;11787:25;;11826:20;11844:1;11826:20;:::i;:::-;11821:25;;11881:1;11878;11874:9;11903:30;11921:11;11903:30;:::i;:::-;11892:41;;12082:1;12073:7;12069:15;12066:1;12063:22;12043:1;12036:9;12016:83;11993:139;;12112:18;;:::i;:::-;11993:139;11777:362;11729:410;;;;:::o;12145:180::-;12193:77;12190:1;12183:88;12290:4;12287:1;12280:15;12314:4;12311:1;12304:15;12331:185;12371:1;12388:20;12406:1;12388:20;:::i;:::-;12383:25;;12422:20;12440:1;12422:20;:::i;:::-;12417:25;;12461:1;12451:35;;12466:18;;:::i;:::-;12451:35;12508:1;12505;12501:9;12496:14;;12331:185;;;;:::o;12522:232::-;12662:34;12658:1;12650:6;12646:14;12639:58;12731:15;12726:2;12718:6;12714:15;12707:40;12522:232;:::o;12760:366::-;12902:3;12923:67;12987:2;12982:3;12923:67;:::i;:::-;12916:74;;12999:93;13088:3;12999:93;:::i;:::-;13117:2;13112:3;13108:12;13101:19;;12760:366;;;:::o;13132:419::-;13298:4;13336:2;13325:9;13321:18;13313:26;;13385:9;13379:4;13375:20;13371:1;13360:9;13356:17;13349:47;13413:131;13539:4;13413:131;:::i;:::-;13405:139;;13132:419;;;:::o;13557:227::-;13697:34;13693:1;13685:6;13681:14;13674:58;13766:10;13761:2;13753:6;13749:15;13742:35;13557:227;:::o;13790:366::-;13932:3;13953:67;14017:2;14012:3;13953:67;:::i;:::-;13946:74;;14029:93;14118:3;14029:93;:::i;:::-;14147:2;14142:3;14138:12;14131:19;;13790:366;;;:::o;14162:419::-;14328:4;14366:2;14355:9;14351:18;14343:26;;14415:9;14409:4;14405:20;14401:1;14390:9;14386:17;14379:47;14443:131;14569:4;14443:131;:::i;:::-;14435:139;;14162:419;;;:::o;14587:194::-;14627:4;14647:20;14665:1;14647:20;:::i;:::-;14642:25;;14681:20;14699:1;14681:20;:::i;:::-;14676:25;;14725:1;14722;14718:9;14710:17;;14749:1;14743:4;14740:11;14737:37;;;14754:18;;:::i;:::-;14737:37;14587:194;;;;:::o;14787:179::-;14927:31;14923:1;14915:6;14911:14;14904:55;14787:179;:::o;14972:366::-;15114:3;15135:67;15199:2;15194:3;15135:67;:::i;:::-;15128:74;;15211:93;15300:3;15211:93;:::i;:::-;15329:2;15324:3;15320:12;15313:19;;14972:366;;;:::o;15344:419::-;15510:4;15548:2;15537:9;15533:18;15525:26;;15597:9;15591:4;15587:20;15583:1;15572:9;15568:17;15561:47;15625:131;15751:4;15625:131;:::i;:::-;15617:139;;15344:419;;;:::o;15769:244::-;15909:34;15905:1;15897:6;15893:14;15886:58;15978:27;15973:2;15965:6;15961:15;15954:52;15769:244;:::o;16019:366::-;16161:3;16182:67;16246:2;16241:3;16182:67;:::i;:::-;16175:74;;16258:93;16347:3;16258:93;:::i;:::-;16376:2;16371:3;16367:12;16360:19;;16019:366;;;:::o;16391:419::-;16557:4;16595:2;16584:9;16580:18;16572:26;;16644:9;16638:4;16634:20;16630:1;16619:9;16615:17;16608:47;16672:131;16798:4;16672:131;:::i;:::-;16664:139;;16391:419;;;:::o;16816:224::-;16956:34;16952:1;16944:6;16940:14;16933:58;17025:7;17020:2;17012:6;17008:15;17001:32;16816:224;:::o;17046:366::-;17188:3;17209:67;17273:2;17268:3;17209:67;:::i;:::-;17202:74;;17285:93;17374:3;17285:93;:::i;:::-;17403:2;17398:3;17394:12;17387:19;;17046:366;;;:::o;17418:419::-;17584:4;17622:2;17611:9;17607:18;17599:26;;17671:9;17665:4;17661:20;17657:1;17646:9;17642:17;17635:47;17699:131;17825:4;17699:131;:::i;:::-;17691:139;;17418:419;;;:::o;17843:221::-;17983:34;17979:1;17971:6;17967:14;17960:58;18052:4;18047:2;18039:6;18035:15;18028:29;17843:221;:::o;18070:366::-;18212:3;18233:67;18297:2;18292:3;18233:67;:::i;:::-;18226:74;;18309:93;18398:3;18309:93;:::i;:::-;18427:2;18422:3;18418:12;18411:19;;18070:366;;;:::o;18442:419::-;18608:4;18646:2;18635:9;18631:18;18623:26;;18695:9;18689:4;18685:20;18681:1;18670:9;18666:17;18659:47;18723:131;18849:4;18723:131;:::i;:::-;18715:139;;18442:419;;;:::o;18867:240::-;19007:34;19003:1;18995:6;18991:14;18984:58;19076:23;19071:2;19063:6;19059:15;19052:48;18867:240;:::o;19113:366::-;19255:3;19276:67;19340:2;19335:3;19276:67;:::i;:::-;19269:74;;19352:93;19441:3;19352:93;:::i;:::-;19470:2;19465:3;19461:12;19454:19;;19113:366;;;:::o;19485:419::-;19651:4;19689:2;19678:9;19674:18;19666:26;;19738:9;19732:4;19728:20;19724:1;19713:9;19709:17;19702:47;19766:131;19892:4;19766:131;:::i;:::-;19758:139;;19485:419;;;:::o;19910:239::-;20050:34;20046:1;20038:6;20034:14;20027:58;20119:22;20114:2;20106:6;20102:15;20095:47;19910:239;:::o;20155:366::-;20297:3;20318:67;20382:2;20377:3;20318:67;:::i;:::-;20311:74;;20394:93;20483:3;20394:93;:::i;:::-;20512:2;20507:3;20503:12;20496:19;;20155:366;;;:::o;20527:419::-;20693:4;20731:2;20720:9;20716:18;20708:26;;20780:9;20774:4;20770:20;20766:1;20755:9;20751:17;20744:47;20808:131;20934:4;20808:131;:::i;:::-;20800:139;;20527:419;;;:::o;20952:225::-;21092:34;21088:1;21080:6;21076:14;21069:58;21161:8;21156:2;21148:6;21144:15;21137:33;20952:225;:::o;21183:366::-;21325:3;21346:67;21410:2;21405:3;21346:67;:::i;:::-;21339:74;;21422:93;21511:3;21422:93;:::i;:::-;21540:2;21535:3;21531:12;21524:19;;21183:366;;;:::o;21555:419::-;21721:4;21759:2;21748:9;21744:18;21736:26;;21808:9;21802:4;21798:20;21794:1;21783:9;21779:17;21772:47;21836:131;21962:4;21836:131;:::i;:::-;21828:139;;21555:419;;;:::o;21980:223::-;22120:34;22116:1;22108:6;22104:14;22097:58;22189:6;22184:2;22176:6;22172:15;22165:31;21980:223;:::o;22209:366::-;22351:3;22372:67;22436:2;22431:3;22372:67;:::i;:::-;22365:74;;22448:93;22537:3;22448:93;:::i;:::-;22566:2;22561:3;22557:12;22550:19;;22209:366;;;:::o;22581:419::-;22747:4;22785:2;22774:9;22770:18;22762:26;;22834:9;22828:4;22824:20;22820:1;22809:9;22805:17;22798:47;22862:131;22988:4;22862:131;:::i;:::-;22854:139;;22581:419;;;:::o;23006:221::-;23146:34;23142:1;23134:6;23130:14;23123:58;23215:4;23210:2;23202:6;23198:15;23191:29;23006:221;:::o;23233:366::-;23375:3;23396:67;23460:2;23455:3;23396:67;:::i;:::-;23389:74;;23472:93;23561:3;23472:93;:::i;:::-;23590:2;23585:3;23581:12;23574:19;;23233:366;;;:::o;23605:419::-;23771:4;23809:2;23798:9;23794:18;23786:26;;23858:9;23852:4;23848:20;23844:1;23833:9;23829:17;23822:47;23886:131;24012:4;23886:131;:::i;:::-;23878:139;;23605:419;;;:::o;24030:224::-;24170:34;24166:1;24158:6;24154:14;24147:58;24239:7;24234:2;24226:6;24222:15;24215:32;24030:224;:::o;24260:366::-;24402:3;24423:67;24487:2;24482:3;24423:67;:::i;:::-;24416:74;;24499:93;24588:3;24499:93;:::i;:::-;24617:2;24612:3;24608:12;24601:19;;24260:366;;;:::o;24632:419::-;24798:4;24836:2;24825:9;24821:18;24813:26;;24885:9;24879:4;24875:20;24871:1;24860:9;24856:17;24849:47;24913:131;25039:4;24913:131;:::i;:::-;24905:139;;24632:419;;;:::o;25057:222::-;25197:34;25193:1;25185:6;25181:14;25174:58;25266:5;25261:2;25253:6;25249:15;25242:30;25057:222;:::o;25285:366::-;25427:3;25448:67;25512:2;25507:3;25448:67;:::i;:::-;25441:74;;25524:93;25613:3;25524:93;:::i;:::-;25642:2;25637:3;25633:12;25626:19;;25285:366;;;:::o;25657:419::-;25823:4;25861:2;25850:9;25846:18;25838:26;;25910:9;25904:4;25900:20;25896:1;25885:9;25881:17;25874:47;25938:131;26064:4;25938:131;:::i;:::-;25930:139;;25657:419;;;:::o;26082:172::-;26222:24;26218:1;26210:6;26206:14;26199:48;26082:172;:::o;26260:366::-;26402:3;26423:67;26487:2;26482:3;26423:67;:::i;:::-;26416:74;;26499:93;26588:3;26499:93;:::i;:::-;26617:2;26612:3;26608:12;26601:19;;26260:366;;;:::o;26632:419::-;26798:4;26836:2;26825:9;26821:18;26813:26;;26885:9;26879:4;26875:20;26871:1;26860:9;26856:17;26849:47;26913:131;27039:4;26913:131;:::i;:::-;26905:139;;26632:419;;;:::o;27057:240::-;27197:34;27193:1;27185:6;27181:14;27174:58;27266:23;27261:2;27253:6;27249:15;27242:48;27057:240;:::o;27303:366::-;27445:3;27466:67;27530:2;27525:3;27466:67;:::i;:::-;27459:74;;27542:93;27631:3;27542:93;:::i;:::-;27660:2;27655:3;27651:12;27644:19;;27303:366;;;:::o;27675:419::-;27841:4;27879:2;27868:9;27864:18;27856:26;;27928:9;27922:4;27918:20;27914:1;27903:9;27899:17;27892:47;27956:131;28082:4;27956:131;:::i;:::-;27948:139;;27675:419;;;:::o;28100:169::-;28240:21;28236:1;28228:6;28224:14;28217:45;28100:169;:::o;28275:366::-;28417:3;28438:67;28502:2;28497:3;28438:67;:::i;:::-;28431:74;;28514:93;28603:3;28514:93;:::i;:::-;28632:2;28627:3;28623:12;28616:19;;28275:366;;;:::o;28647:419::-;28813:4;28851:2;28840:9;28836:18;28828:26;;28900:9;28894:4;28890:20;28886:1;28875:9;28871:17;28864:47;28928:131;29054:4;28928:131;:::i;:::-;28920:139;;28647:419;;;:::o;29072:241::-;29212:34;29208:1;29200:6;29196:14;29189:58;29281:24;29276:2;29268:6;29264:15;29257:49;29072:241;:::o;29319:366::-;29461:3;29482:67;29546:2;29541:3;29482:67;:::i;:::-;29475:74;;29558:93;29647:3;29558:93;:::i;:::-;29676:2;29671:3;29667:12;29660:19;;29319:366;;;:::o;29691:419::-;29857:4;29895:2;29884:9;29880:18;29872:26;;29944:9;29938:4;29934:20;29930:1;29919:9;29915:17;29908:47;29972:131;30098:4;29972:131;:::i;:::-;29964:139;;29691:419;;;:::o;30116:225::-;30256:34;30252:1;30244:6;30240:14;30233:58;30325:8;30320:2;30312:6;30308:15;30301:33;30116:225;:::o;30347:366::-;30489:3;30510:67;30574:2;30569:3;30510:67;:::i;:::-;30503:74;;30586:93;30675:3;30586:93;:::i;:::-;30704:2;30699:3;30695:12;30688:19;;30347:366;;;:::o;30719:419::-;30885:4;30923:2;30912:9;30908:18;30900:26;;30972:9;30966:4;30962:20;30958:1;30947:9;30943:17;30936:47;31000:131;31126:4;31000:131;:::i;:::-;30992:139;;30719:419;;;:::o;31144:147::-;31245:11;31282:3;31267:18;;31144:147;;;;:::o;31297:114::-;;:::o;31417:398::-;31576:3;31597:83;31678:1;31673:3;31597:83;:::i;:::-;31590:90;;31689:93;31778:3;31689:93;:::i;:::-;31807:1;31802:3;31798:11;31791:18;;31417:398;;;:::o;31821:379::-;32005:3;32027:147;32170:3;32027:147;:::i;:::-;32020:154;;32191:3;32184:10;;31821:379;;;:::o;32206:442::-;32355:4;32393:2;32382:9;32378:18;32370:26;;32406:71;32474:1;32463:9;32459:17;32450:6;32406:71;:::i;:::-;32487:72;32555:2;32544:9;32540:18;32531:6;32487:72;:::i;:::-;32569;32637:2;32626:9;32622:18;32613:6;32569:72;:::i;:::-;32206:442;;;;;;:::o;32654:180::-;32702:77;32699:1;32692:88;32799:4;32796:1;32789:15;32823:4;32820:1;32813:15;32840:180;32888:77;32885:1;32878:88;32985:4;32982:1;32975:15;33009:4;33006:1;32999:15;33026:143;33083:5;33114:6;33108:13;33099:22;;33130:33;33157:5;33130:33;:::i;:::-;33026:143;;;;:::o;33175:351::-;33245:6;33294:2;33282:9;33273:7;33269:23;33265:32;33262:119;;;33300:79;;:::i;:::-;33262:119;33420:1;33445:64;33501:7;33492:6;33481:9;33477:22;33445:64;:::i;:::-;33435:74;;33391:128;33175:351;;;;:::o;33532:85::-;33577:7;33606:5;33595:16;;33532:85;;;:::o;33623:158::-;33681:9;33714:61;33732:42;33741:32;33767:5;33741:32;:::i;:::-;33732:42;:::i;:::-;33714:61;:::i;:::-;33701:74;;33623:158;;;:::o;33787:147::-;33882:45;33921:5;33882:45;:::i;:::-;33877:3;33870:58;33787:147;;:::o;33940:114::-;34007:6;34041:5;34035:12;34025:22;;33940:114;;;:::o;34060:184::-;34159:11;34193:6;34188:3;34181:19;34233:4;34228:3;34224:14;34209:29;;34060:184;;;;:::o;34250:132::-;34317:4;34340:3;34332:11;;34370:4;34365:3;34361:14;34353:22;;34250:132;;;:::o;34388:108::-;34465:24;34483:5;34465:24;:::i;:::-;34460:3;34453:37;34388:108;;:::o;34502:179::-;34571:10;34592:46;34634:3;34626:6;34592:46;:::i;:::-;34670:4;34665:3;34661:14;34647:28;;34502:179;;;;:::o;34687:113::-;34757:4;34789;34784:3;34780:14;34772:22;;34687:113;;;:::o;34836:732::-;34955:3;34984:54;35032:5;34984:54;:::i;:::-;35054:86;35133:6;35128:3;35054:86;:::i;:::-;35047:93;;35164:56;35214:5;35164:56;:::i;:::-;35243:7;35274:1;35259:284;35284:6;35281:1;35278:13;35259:284;;;35360:6;35354:13;35387:63;35446:3;35431:13;35387:63;:::i;:::-;35380:70;;35473:60;35526:6;35473:60;:::i;:::-;35463:70;;35319:224;35306:1;35303;35299:9;35294:14;;35259:284;;;35263:14;35559:3;35552:10;;34960:608;;;34836:732;;;;:::o;35574:831::-;35837:4;35875:3;35864:9;35860:19;35852:27;;35889:71;35957:1;35946:9;35942:17;35933:6;35889:71;:::i;:::-;35970:80;36046:2;36035:9;36031:18;36022:6;35970:80;:::i;:::-;36097:9;36091:4;36087:20;36082:2;36071:9;36067:18;36060:48;36125:108;36228:4;36219:6;36125:108;:::i;:::-;36117:116;;36243:72;36311:2;36300:9;36296:18;36287:6;36243:72;:::i;:::-;36325:73;36393:3;36382:9;36378:19;36369:6;36325:73;:::i;:::-;35574:831;;;;;;;;:::o;36411:233::-;36450:3;36473:24;36491:5;36473:24;:::i;:::-;36464:33;;36519:66;36512:5;36509:77;36506:103;;36589:18;;:::i;:::-;36506:103;36636:1;36629:5;36625:13;36618:20;;36411:233;;;:::o;36650:807::-;36899:4;36937:3;36926:9;36922:19;36914:27;;36951:71;37019:1;37008:9;37004:17;36995:6;36951:71;:::i;:::-;37032:72;37100:2;37089:9;37085:18;37076:6;37032:72;:::i;:::-;37114:80;37190:2;37179:9;37175:18;37166:6;37114:80;:::i;:::-;37204;37280:2;37269:9;37265:18;37256:6;37204:80;:::i;:::-;37294:73;37362:3;37351:9;37347:19;37338:6;37294:73;:::i;:::-;37377;37445:3;37434:9;37430:19;37421:6;37377:73;:::i;:::-;36650:807;;;;;;;;;:::o;37463:143::-;37520:5;37551:6;37545:13;37536:22;;37567:33;37594:5;37567:33;:::i;:::-;37463:143;;;;:::o;37612:663::-;37700:6;37708;37716;37765:2;37753:9;37744:7;37740:23;37736:32;37733:119;;;37771:79;;:::i;:::-;37733:119;37891:1;37916:64;37972:7;37963:6;37952:9;37948:22;37916:64;:::i;:::-;37906:74;;37862:128;38029:2;38055:64;38111:7;38102:6;38091:9;38087:22;38055:64;:::i;:::-;38045:74;;38000:129;38168:2;38194:64;38250:7;38241:6;38230:9;38226:22;38194:64;:::i;:::-;38184:74;;38139:129;37612:663;;;;;:::o

Swarm Source

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