ETH Price: $2,624.15 (+1.29%)

Token

PepeBULLA (PEBULLA)
 

Overview

Max Total Supply

100,000,000 PEBULLA

Holders

163

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
85,213.050831988507853472 PEBULLA

Value
$0.00
0x697cc22ec14c0d6ba84272918d0e6faec7eae2c6
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:
PepeBULLA

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-30
*/

/*
 Pepebulla - hyped PEPE + hyped Hasbulla. New meme of 2023. Best cocktail of hype your ever tried.
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
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 PepeBULLA 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("PepeBULLA", "PEBULLA") {

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

        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 18;

        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 29;

        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
        
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
        
        deployer = address(_msgSender()); // set as deployer
        devWallet = address(0x7f8772842913545Ce1bEC2996cB05066C0f856c7); // 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 <= 99, "Must keep fees at 99% 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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600981526020017f5065706542554c4c4100000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f504542554c4c41000000000000000000000000000000000000000000000000008152508160039081620000c5919062000c66565b508060049081620000d7919062000c66565b5050506000620000ec620006cf60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506a52b7d2dcc80cd2e4000000600281905550606460028054620001af919062000d7c565b620001bb919062000df6565b600881905550606460028054620001d3919062000d7c565b620001df919062000df6565b600a81905550606460028054620001f7919062000d7c565b62000203919062000df6565b60098190555060008060129050600080601d905083600d8190555082600e81905550600e54600d5462000237919062000e2e565b600c8190555081601081905550806011819055506011546010546200025d919062000e2e565b600f8190555062000273620006cf60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737f8772842913545ce1bec2996cb05066c0f856c7600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000368816001620006d760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003da919062000ed3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000468919062000ed3565b6040518363ffffffff1660e01b81526004016200048792919062000f16565b6020604051808303816000875af1158015620004a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cd919062000ed3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200051560a0516001620007d460201b60201c565b6200052a60a0516001620006d760201b60201c565b6200053d3060016200087560201b60201c565b6200055261dead60016200087560201b60201c565b62000587600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087560201b60201c565b620005a96200059b620009c260201b60201c565b6001620006d760201b60201c565b620005bc306001620006d760201b60201c565b620005d161dead6001620006d760201b60201c565b600254600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600254604051620006bc919062000f54565b60405180910390a350505050506200102e565b600033905090565b620006e7620006cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007709062000fd2565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000885620006cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090e9062000fd2565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b6919062001011565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6e57607f821691505b60208210810362000a845762000a8362000a26565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000aee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aaf565b62000afa868362000aaf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b4762000b4162000b3b8462000b12565b62000b1c565b62000b12565b9050919050565b6000819050919050565b62000b638362000b26565b62000b7b62000b728262000b4e565b84845462000abc565b825550505050565b600090565b62000b9262000b83565b62000b9f81848462000b58565b505050565b5b8181101562000bc75762000bbb60008262000b88565b60018101905062000ba5565b5050565b601f82111562000c165762000be08162000a8a565b62000beb8462000a9f565b8101602085101562000bfb578190505b62000c1362000c0a8562000a9f565b83018262000ba4565b50505b505050565b600082821c905092915050565b600062000c3b6000198460080262000c1b565b1980831691505092915050565b600062000c56838362000c28565b9150826002028217905092915050565b62000c7182620009ec565b67ffffffffffffffff81111562000c8d5762000c8c620009f7565b5b62000c99825462000a55565b62000ca682828562000bcb565b600060209050601f83116001811462000cde576000841562000cc9578287015190505b62000cd5858262000c48565b86555062000d45565b601f19841662000cee8662000a8a565b60005b8281101562000d185784890151825560018201915060208501945060208101905062000cf1565b8683101562000d38578489015162000d34601f89168262000c28565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d898262000b12565b915062000d968362000b12565b925082820262000da68162000b12565b9150828204841483151762000dc05762000dbf62000d4d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e038262000b12565b915062000e108362000b12565b92508262000e235762000e2262000dc7565b5b828204905092915050565b600062000e3b8262000b12565b915062000e488362000b12565b925082820190508082111562000e635762000e6262000d4d565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e9b8262000e6e565b9050919050565b62000ead8162000e8e565b811462000eb957600080fd5b50565b60008151905062000ecd8162000ea2565b92915050565b60006020828403121562000eec5762000eeb62000e69565b5b600062000efc8482850162000ebc565b91505092915050565b62000f108162000e8e565b82525050565b600060408201905062000f2d600083018562000f05565b62000f3c602083018462000f05565b9392505050565b62000f4e8162000b12565b82525050565b600060208201905062000f6b600083018462000f43565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fba60208362000f71565b915062000fc78262000f82565b602082019050919050565b6000602082019050818103600083015262000fed8162000fab565b9050919050565b60008115159050919050565b6200100b8162000ff4565b82525050565b600060208201905062001028600083018462001000565b92915050565b60805160a051614b666200107e60003960008181610f820152611762015260008181610c760152818161343d0152818161351e015281816135450152818161360a01526136310152614b666000f3fe6080604052600436106102815760003560e01c80638ea5220f1161014f578063c18bc195116100c1578063dd62ed3e1161007a578063dd62ed3e146109ad578063e2f45605146109ea578063f11a24d314610a15578063f2fde38b14610a40578063f637434214610a69578063f8b45b0514610a9457610288565b8063c18bc1951461089d578063c8c8ebe4146108c6578063d1633649146108f1578063d257b34f1461091a578063d5f3948814610957578063d85ba0631461098257610288565b80639fccce32116101135780639fccce3214610767578063a0d82dc514610792578063a457c2d7146107bd578063a9059cbb146107fa578063b62496f514610837578063c02466681461087457610288565b80638ea5220f14610694578063924de9b7146106bf57806395d89b41146106e85780639a7a23d6146107135780639c3b4fdc1461073c57610288565b806349bd5a5e116101f357806370a08231116101ac57806370a08231146105aa578063715018a6146105e7578063751039fc146105fe5780637571336a146106295780638129fc1c146106525780638da5cb5b1461066957610288565b806349bd5a5e146104985780634a62bb65146104c35780634fbee193146104ee57806366ca9b831461052b5780636a486a8e146105545780636ddd17131461057f57610288565b80631a8145bb116102455780631a8145bb14610374578063203e727e1461039f57806323b872dd146103c857806327c8f83514610405578063313ce56714610430578063395093511461045b57610288565b806302dbd8f81461028d57806306fdde03146102b6578063095ea7b3146102e15780631694505e1461031e57806318160ddd1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061371b565b610abf565b005b3480156102c257600080fd5b506102cb610bc4565b6040516102d891906137eb565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061386b565b610c56565b60405161031591906138c6565b60405180910390f35b34801561032a57600080fd5b50610333610c74565b6040516103409190613940565b60405180910390f35b34801561035557600080fd5b5061035e610c98565b60405161036b919061396a565b60405180910390f35b34801561038057600080fd5b50610389610ca2565b604051610396919061396a565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613985565b610ca8565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906139b2565b610dd1565b6040516103fc91906138c6565b60405180910390f35b34801561041157600080fd5b5061041a610f3a565b6040516104279190613a14565b60405180910390f35b34801561043c57600080fd5b50610445610f40565b6040516104529190613a4b565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d919061386b565b610f49565b60405161048f91906138c6565b60405180910390f35b3480156104a457600080fd5b506104ad610f80565b6040516104ba9190613a14565b60405180910390f35b3480156104cf57600080fd5b506104d8610fa4565b6040516104e591906138c6565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613a66565b610fb7565b60405161052291906138c6565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061371b565b61100d565b005b34801561056057600080fd5b50610569611112565b604051610576919061396a565b60405180910390f35b34801561058b57600080fd5b50610594611118565b6040516105a191906138c6565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613a66565b61112b565b6040516105de919061396a565b60405180910390f35b3480156105f357600080fd5b506105fc611173565b005b34801561060a57600080fd5b506106136112cb565b60405161062091906138c6565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613abf565b611386565b005b34801561065e57600080fd5b50610667611478565b005b34801561067557600080fd5b5061067e611533565b60405161068b9190613a14565b60405180910390f35b3480156106a057600080fd5b506106a961155d565b6040516106b69190613a14565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613aff565b611583565b005b3480156106f457600080fd5b506106fd611637565b60405161070a91906137eb565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613abf565b6116c9565b005b34801561074857600080fd5b506107516117fc565b60405161075e919061396a565b60405180910390f35b34801561077357600080fd5b5061077c611802565b604051610789919061396a565b60405180910390f35b34801561079e57600080fd5b506107a7611808565b6040516107b4919061396a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061386b565b61180e565b6040516107f191906138c6565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c919061386b565b611885565b60405161082e91906138c6565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613a66565b6118a3565b60405161086b91906138c6565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613abf565b6118c3565b005b3480156108a957600080fd5b506108c460048036038101906108bf9190613985565b611a03565b005b3480156108d257600080fd5b506108db611b2c565b6040516108e8919061396a565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613985565b611b32565b005b34801561092657600080fd5b50610941600480360381019061093c9190613985565b611c34565b60405161094e91906138c6565b60405180910390f35b34801561096357600080fd5b5061096c611da3565b6040516109799190613a14565b60405180910390f35b34801561098e57600080fd5b50610997611dc9565b6040516109a4919061396a565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190613b2c565b611dcf565b6040516109e1919061396a565b60405180910390f35b3480156109f657600080fd5b506109ff611e56565b604051610a0c919061396a565b60405180910390f35b348015610a2157600080fd5b50610a2a611e5c565b604051610a37919061396a565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190613a66565b611e62565b005b348015610a7557600080fd5b50610a7e612028565b604051610a8b919061396a565b60405180910390f35b348015610aa057600080fd5b50610aa961202e565b604051610ab6919061396a565b60405180910390f35b610ac7612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613bb8565b60405180910390fd5b8160108190555080601181905550601154601054610b749190613c07565b600f819055506063600f541115610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613c87565b60405180910390fd5b5050565b606060038054610bd390613cd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613cd6565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c6a610c63612034565b848461203c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60125481565b610cb0612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690613bb8565b60405180910390fd5b670de0b6b3a764000060646001610d54610c98565b610d5e9190613d07565b610d689190613d78565b610d729190613d78565b811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90613e1b565b60405180910390fd5b670de0b6b3a764000081610dc89190613d07565b60088190555050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613ead565b60405180910390fd5b610e9d848484612205565b610f2f843384600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2a9190613ecd565b61203c565b600190509392505050565b61dead81565b60006012905090565b600080610f54612034565b9050610f75818585610f668589611dcf565b610f709190613c07565b61203c565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611015612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613bb8565b60405180910390fd5b81600d8190555080600e81905550600e54600d546110c29190613c07565b600c819055506014600c54111561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613f4d565b60405180910390fd5b5050565b600f5481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112d5612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613bb8565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61138e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613bb8565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611480612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690613bb8565b60405180910390fd5b601460009054906101000a900460ff161561152957600080fd5b6001601581905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61158b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613bb8565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461164690613cd6565b80601f016020809104026020016040519081016040528092919081815260200182805461167290613cd6565b80156116bf5780601f10611694576101008083540402835291602001916116bf565b820191906000526020600020905b8154815290600101906020018083116116a257829003601f168201915b5050505050905090565b6116d1612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613bb8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613fdf565b60405180910390fd5b6117f88282612cb6565b5050565b600e5481565b60135481565b60115481565b600080611819612034565b905060006118278286611dcf565b90508381101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614071565b60405180910390fd5b611879828686840361203c565b60019250505092915050565b6000611899611892612034565b8484612205565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b6118cb612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190613bb8565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f791906138c6565b60405180910390a25050565b611a0b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190613bb8565b60405180910390fd5b670de0b6b3a764000060646002611aaf610c98565b611ab99190613d07565b611ac39190613d78565b611acd9190613d78565b811015611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614103565b60405180910390fd5b670de0b6b3a764000081611b239190613d07565b600a8190555050565b60085481565b611b3a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613bb8565b60405180910390fd5b601460009054906101000a900460ff16158015611be95750600060155414155b611bf257600080fd5b8043611bfe9190613c07565b60156000828254611c0f9190613c07565b925050819055506001601460006101000a81548160ff02191690831515021790555050565b6000611c3e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613bb8565b60405180910390fd5b620186a06001611cdb610c98565b611ce59190613d07565b611cef9190613d78565b821015611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890614195565b60405180910390fd5b60646001611d3d610c98565b611d479190613d07565b611d519190613d78565b821115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614227565b60405180910390fd5b8160098190555060019050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600d5481565b611e6a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f906142b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612111906143dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f8919061396a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90614501565b60405180910390fd5b600081036122fc576122f783836000612d57565b612cb1565b600b60009054906101000a900460ff161561282d57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123f65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612430575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124495750601660009054906101000a900460ff16155b1561282c57601460009054906101000a900460ff1661254357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125035750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125399061456d565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561268d57600854811115612630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612627906145ff565b60405180910390fd5b600a5461263c8361112b565b826126479190613c07565b1115612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267f9061466b565b60405180910390fd5b61282b565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127305750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561277f5760085481111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906146fd565b60405180910390fd5b61282a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661282957600a546127dc8361112b565b826127e79190613c07565b1115612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9061466b565b60405180910390fd5b5b5b5b5b5b60006128383061112b565b9050600061284582612fb7565b90508080156128605750600b60019054906101000a900460ff165b80156128795750601660009054906101000a900460ff16155b80156128cf5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129255750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561297b5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129bf576001601660006101000a81548160ff0219169083151502179055506129a3612ff2565b6000601660006101000a81548160ff0219169083151502179055505b6000601660009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a755750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7f57600090505b60008115612ca1576015546000108015612a9a575043601554105b15612c6f57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afa57506000600f54115b15612b86576064600f5486612b0f9190613d07565b612b199190613d78565b9050600f5460105482612b2c9190613d07565b612b369190613d78565b60126000828254612b479190613c07565b92505081905550600f5460115482612b5f9190613d07565b612b699190613d78565b60136000828254612b7a9190613c07565b92505081905550612c6a565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612be157506000600c54115b15612c69576064600c5486612bf69190613d07565b612c009190613d78565b9050600c54600d5482612c139190613d07565b612c1d9190613d78565b60126000828254612c2e9190613c07565b92505081905550600c54600e5482612c469190613d07565b612c509190613d78565b60136000828254612c619190613c07565b925050819055505b5b612c7d565b612c7a8787876131e3565b90505b6000811115612c9257612c91873083612d57565b5b8085612c9e9190613ecd565b94505b612cac878787612d57565b505050505b505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2c90614501565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061478f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fa9919061396a565b60405180910390a350505050565b60006009548210158015612fcc575060155443115b8015612feb57506003601a600043815260200190815260200160002054105b9050919050565b6000612ffd3061112b565b905060006013546012546130119190613c07565b90506000808314806130235750600082145b15613030575050506131e1565b601660095461303f9190613d07565b8311156130585760166009546130559190613d07565b92505b60006002836012548661306b9190613d07565b6130759190613d78565b61307f9190613d78565b90506000818561308f9190613ecd565b9050600047905061309f8261339e565b600081476130ad9190613ecd565b9050600086601354836130c09190613d07565b6130ca9190613d78565b9050600081836130da9190613ecd565b905060006012819055506000601381905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613132906147e0565b60006040518083038185875af1925050503d806000811461316f576040519150601f19603f3d011682016040523d82523d6000602084013e613174565b606091505b50508097505060008611801561318a5750600081115b156131d7576131998682613604565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826012546040516131ce939291906147f5565b60405180910390a15b5050505050505050505b565b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133005760646031836132469190613d07565b6132509190613d78565b9050600c54600d54826132639190613d07565b61326d9190613d78565b6012600082825461327e9190613c07565b92505081905550600c54600e54826132969190613d07565b6132a09190613d78565b601360008282546132b19190613c07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a2613397565b6064600060155414613313576046613316565b601e5b60ff16836133249190613d07565b61332e9190613d78565b9050600f54601054826133419190613d07565b61334b9190613d78565b6012600082825461335c9190613c07565b92505081905550600f54601154826133749190613d07565b61337e9190613d78565b6013600082825461338f9190613c07565b925050819055505b9392505050565b6000600267ffffffffffffffff8111156133bb576133ba61482c565b5b6040519080825280602002602001820160405280156133e95781602001602082028036833780820191505090505b50905030816000815181106134015761340061485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca919061489f565b816001815181106134de576134dd61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613543307f00000000000000000000000000000000000000000000000000000000000000008461203c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135a59594939291906149c5565b600060405180830381600087803b1580156135bf57600080fd5b505af11580156135d3573d6000803e3d6000fd5b50505050601a600043815260200190815260200160002060008154809291906135fb90614a1f565b91905055505050565b61362f307f00000000000000000000000000000000000000000000000000000000000000008461203c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161369696959493929190614a67565b60606040518083038185885af11580156136b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d99190614add565b5050505050565b600080fd5b6000819050919050565b6136f8816136e5565b811461370357600080fd5b50565b600081359050613715816136ef565b92915050565b60008060408385031215613732576137316136e0565b5b600061374085828601613706565b925050602061375185828601613706565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561379557808201518184015260208101905061377a565b60008484015250505050565b6000601f19601f8301169050919050565b60006137bd8261375b565b6137c78185613766565b93506137d7818560208601613777565b6137e0816137a1565b840191505092915050565b6000602082019050818103600083015261380581846137b2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138388261380d565b9050919050565b6138488161382d565b811461385357600080fd5b50565b6000813590506138658161383f565b92915050565b60008060408385031215613882576138816136e0565b5b600061389085828601613856565b92505060206138a185828601613706565b9150509250929050565b60008115159050919050565b6138c0816138ab565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6000819050919050565b60006139066139016138fc8461380d565b6138e1565b61380d565b9050919050565b6000613918826138eb565b9050919050565b600061392a8261390d565b9050919050565b61393a8161391f565b82525050565b60006020820190506139556000830184613931565b92915050565b613964816136e5565b82525050565b600060208201905061397f600083018461395b565b92915050565b60006020828403121561399b5761399a6136e0565b5b60006139a984828501613706565b91505092915050565b6000806000606084860312156139cb576139ca6136e0565b5b60006139d986828701613856565b93505060206139ea86828701613856565b92505060406139fb86828701613706565b9150509250925092565b613a0e8161382d565b82525050565b6000602082019050613a296000830184613a05565b92915050565b600060ff82169050919050565b613a4581613a2f565b82525050565b6000602082019050613a606000830184613a3c565b92915050565b600060208284031215613a7c57613a7b6136e0565b5b6000613a8a84828501613856565b91505092915050565b613a9c816138ab565b8114613aa757600080fd5b50565b600081359050613ab981613a93565b92915050565b60008060408385031215613ad657613ad56136e0565b5b6000613ae485828601613856565b9250506020613af585828601613aaa565b9150509250929050565b600060208284031215613b1557613b146136e0565b5b6000613b2384828501613aaa565b91505092915050565b60008060408385031215613b4357613b426136e0565b5b6000613b5185828601613856565b9250506020613b6285828601613856565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ba2602083613766565b9150613bad82613b6c565b602082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c12826136e5565b9150613c1d836136e5565b9250828201905080821115613c3557613c34613bd8565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613c71601d83613766565b9150613c7c82613c3b565b602082019050919050565b60006020820190508181036000830152613ca081613c64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cee57607f821691505b602082108103613d0157613d00613ca7565b5b50919050565b6000613d12826136e5565b9150613d1d836136e5565b9250828202613d2b816136e5565b91508282048414831517613d4257613d41613bd8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d83826136e5565b9150613d8e836136e5565b925082613d9e57613d9d613d49565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000613e05602d83613766565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e97602883613766565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed8826136e5565b9150613ee3836136e5565b9250828203905081811115613efb57613efa613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613f37601d83613766565b9150613f4282613f01565b602082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fc9603983613766565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061405b602583613766565b915061406682613fff565b604082019050919050565b6000602082019050818103600083015261408a8161404e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ed602283613766565b91506140f882614091565b604082019050919050565b6000602082019050818103600083015261411c816140e0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061417f603583613766565b915061418a82614123565b604082019050919050565b600060208201905081810360008301526141ae81614172565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614211603483613766565b915061421c826141b5565b604082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142a3602683613766565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614335602483613766565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143c7602283613766565b91506143d28261436b565b604082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614459602583613766565b9150614464826143fd565b604082019050919050565b600060208201905081810360008301526144888161444c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144eb602383613766565b91506144f68261448f565b604082019050919050565b6000602082019050818103600083015261451a816144de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614557601683613766565b915061456282614521565b602082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006145e9603583613766565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614655601383613766565b91506146608261461f565b602082019050919050565b6000602082019050818103600083015261468481614648565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006146e7603683613766565b91506146f28261468b565b604082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614779602683613766565b91506147848261471d565b604082019050919050565b600060208201905081810360008301526147a88161476c565b9050919050565b600081905092915050565b50565b60006147ca6000836147af565b91506147d5826147ba565b600082019050919050565b60006147eb826147bd565b9150819050919050565b600060608201905061480a600083018661395b565b614817602083018561395b565b614824604083018461395b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148998161383f565b92915050565b6000602082840312156148b5576148b46136e0565b5b60006148c38482850161488a565b91505092915050565b6000819050919050565b60006148f16148ec6148e7846148cc565b6138e1565b6136e5565b9050919050565b614901816148d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61493c8161382d565b82525050565b600061494e8383614933565b60208301905092915050565b6000602082019050919050565b600061497282614907565b61497c8185614912565b935061498783614923565b8060005b838110156149b857815161499f8882614942565b97506149aa8361495a565b92505060018101905061498b565b5085935050505092915050565b600060a0820190506149da600083018861395b565b6149e760208301876148f8565b81810360408301526149f98186614967565b9050614a086060830185613a05565b614a15608083018461395b565b9695505050505050565b6000614a2a826136e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5c57614a5b613bd8565b5b600182019050919050565b600060c082019050614a7c6000830189613a05565b614a89602083018861395b565b614a9660408301876148f8565b614aa360608301866148f8565b614ab06080830185613a05565b614abd60a083018461395b565b979650505050505050565b600081519050614ad7816136ef565b92915050565b600080600060608486031215614af657614af56136e0565b5b6000614b0486828701614ac8565b9350506020614b1586828701614ac8565b9250506040614b2686828701614ac8565b915050925092509256fea2646970667358221220dd348afb2889e0c14b9b54c6c9375950a0e54b45ed0aeda3b60f84d3e5c4b89d64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80638ea5220f1161014f578063c18bc195116100c1578063dd62ed3e1161007a578063dd62ed3e146109ad578063e2f45605146109ea578063f11a24d314610a15578063f2fde38b14610a40578063f637434214610a69578063f8b45b0514610a9457610288565b8063c18bc1951461089d578063c8c8ebe4146108c6578063d1633649146108f1578063d257b34f1461091a578063d5f3948814610957578063d85ba0631461098257610288565b80639fccce32116101135780639fccce3214610767578063a0d82dc514610792578063a457c2d7146107bd578063a9059cbb146107fa578063b62496f514610837578063c02466681461087457610288565b80638ea5220f14610694578063924de9b7146106bf57806395d89b41146106e85780639a7a23d6146107135780639c3b4fdc1461073c57610288565b806349bd5a5e116101f357806370a08231116101ac57806370a08231146105aa578063715018a6146105e7578063751039fc146105fe5780637571336a146106295780638129fc1c146106525780638da5cb5b1461066957610288565b806349bd5a5e146104985780634a62bb65146104c35780634fbee193146104ee57806366ca9b831461052b5780636a486a8e146105545780636ddd17131461057f57610288565b80631a8145bb116102455780631a8145bb14610374578063203e727e1461039f57806323b872dd146103c857806327c8f83514610405578063313ce56714610430578063395093511461045b57610288565b806302dbd8f81461028d57806306fdde03146102b6578063095ea7b3146102e15780631694505e1461031e57806318160ddd1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061371b565b610abf565b005b3480156102c257600080fd5b506102cb610bc4565b6040516102d891906137eb565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061386b565b610c56565b60405161031591906138c6565b60405180910390f35b34801561032a57600080fd5b50610333610c74565b6040516103409190613940565b60405180910390f35b34801561035557600080fd5b5061035e610c98565b60405161036b919061396a565b60405180910390f35b34801561038057600080fd5b50610389610ca2565b604051610396919061396a565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613985565b610ca8565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906139b2565b610dd1565b6040516103fc91906138c6565b60405180910390f35b34801561041157600080fd5b5061041a610f3a565b6040516104279190613a14565b60405180910390f35b34801561043c57600080fd5b50610445610f40565b6040516104529190613a4b565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d919061386b565b610f49565b60405161048f91906138c6565b60405180910390f35b3480156104a457600080fd5b506104ad610f80565b6040516104ba9190613a14565b60405180910390f35b3480156104cf57600080fd5b506104d8610fa4565b6040516104e591906138c6565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613a66565b610fb7565b60405161052291906138c6565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061371b565b61100d565b005b34801561056057600080fd5b50610569611112565b604051610576919061396a565b60405180910390f35b34801561058b57600080fd5b50610594611118565b6040516105a191906138c6565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613a66565b61112b565b6040516105de919061396a565b60405180910390f35b3480156105f357600080fd5b506105fc611173565b005b34801561060a57600080fd5b506106136112cb565b60405161062091906138c6565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613abf565b611386565b005b34801561065e57600080fd5b50610667611478565b005b34801561067557600080fd5b5061067e611533565b60405161068b9190613a14565b60405180910390f35b3480156106a057600080fd5b506106a961155d565b6040516106b69190613a14565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613aff565b611583565b005b3480156106f457600080fd5b506106fd611637565b60405161070a91906137eb565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613abf565b6116c9565b005b34801561074857600080fd5b506107516117fc565b60405161075e919061396a565b60405180910390f35b34801561077357600080fd5b5061077c611802565b604051610789919061396a565b60405180910390f35b34801561079e57600080fd5b506107a7611808565b6040516107b4919061396a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061386b565b61180e565b6040516107f191906138c6565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c919061386b565b611885565b60405161082e91906138c6565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613a66565b6118a3565b60405161086b91906138c6565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613abf565b6118c3565b005b3480156108a957600080fd5b506108c460048036038101906108bf9190613985565b611a03565b005b3480156108d257600080fd5b506108db611b2c565b6040516108e8919061396a565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613985565b611b32565b005b34801561092657600080fd5b50610941600480360381019061093c9190613985565b611c34565b60405161094e91906138c6565b60405180910390f35b34801561096357600080fd5b5061096c611da3565b6040516109799190613a14565b60405180910390f35b34801561098e57600080fd5b50610997611dc9565b6040516109a4919061396a565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190613b2c565b611dcf565b6040516109e1919061396a565b60405180910390f35b3480156109f657600080fd5b506109ff611e56565b604051610a0c919061396a565b60405180910390f35b348015610a2157600080fd5b50610a2a611e5c565b604051610a37919061396a565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190613a66565b611e62565b005b348015610a7557600080fd5b50610a7e612028565b604051610a8b919061396a565b60405180910390f35b348015610aa057600080fd5b50610aa961202e565b604051610ab6919061396a565b60405180910390f35b610ac7612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613bb8565b60405180910390fd5b8160108190555080601181905550601154601054610b749190613c07565b600f819055506063600f541115610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613c87565b60405180910390fd5b5050565b606060038054610bd390613cd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613cd6565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c6a610c63612034565b848461203c565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60125481565b610cb0612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690613bb8565b60405180910390fd5b670de0b6b3a764000060646001610d54610c98565b610d5e9190613d07565b610d689190613d78565b610d729190613d78565b811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90613e1b565b60405180910390fd5b670de0b6b3a764000081610dc89190613d07565b60088190555050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613ead565b60405180910390fd5b610e9d848484612205565b610f2f843384600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2a9190613ecd565b61203c565b600190509392505050565b61dead81565b60006012905090565b600080610f54612034565b9050610f75818585610f668589611dcf565b610f709190613c07565b61203c565b600191505092915050565b7f0000000000000000000000004a79982b5d4b323a633be7e4695cf4056587ffb481565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611015612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613bb8565b60405180910390fd5b81600d8190555080600e81905550600e54600d546110c29190613c07565b600c819055506014600c54111561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613f4d565b60405180910390fd5b5050565b600f5481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112d5612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613bb8565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61138e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613bb8565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611480612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690613bb8565b60405180910390fd5b601460009054906101000a900460ff161561152957600080fd5b6001601581905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61158b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613bb8565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461164690613cd6565b80601f016020809104026020016040519081016040528092919081815260200182805461167290613cd6565b80156116bf5780601f10611694576101008083540402835291602001916116bf565b820191906000526020600020905b8154815290600101906020018083116116a257829003601f168201915b5050505050905090565b6116d1612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613bb8565b60405180910390fd5b7f0000000000000000000000004a79982b5d4b323a633be7e4695cf4056587ffb473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613fdf565b60405180910390fd5b6117f88282612cb6565b5050565b600e5481565b60135481565b60115481565b600080611819612034565b905060006118278286611dcf565b90508381101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614071565b60405180910390fd5b611879828686840361203c565b60019250505092915050565b6000611899611892612034565b8484612205565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b6118cb612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190613bb8565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f791906138c6565b60405180910390a25050565b611a0b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190613bb8565b60405180910390fd5b670de0b6b3a764000060646002611aaf610c98565b611ab99190613d07565b611ac39190613d78565b611acd9190613d78565b811015611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614103565b60405180910390fd5b670de0b6b3a764000081611b239190613d07565b600a8190555050565b60085481565b611b3a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613bb8565b60405180910390fd5b601460009054906101000a900460ff16158015611be95750600060155414155b611bf257600080fd5b8043611bfe9190613c07565b60156000828254611c0f9190613c07565b925050819055506001601460006101000a81548160ff02191690831515021790555050565b6000611c3e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613bb8565b60405180910390fd5b620186a06001611cdb610c98565b611ce59190613d07565b611cef9190613d78565b821015611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890614195565b60405180910390fd5b60646001611d3d610c98565b611d479190613d07565b611d519190613d78565b821115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614227565b60405180910390fd5b8160098190555060019050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600d5481565b611e6a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f906142b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612111906143dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f8919061396a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90614501565b60405180910390fd5b600081036122fc576122f783836000612d57565b612cb1565b600b60009054906101000a900460ff161561282d57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123f65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612430575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124495750601660009054906101000a900460ff16155b1561282c57601460009054906101000a900460ff1661254357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125035750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125399061456d565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561268d57600854811115612630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612627906145ff565b60405180910390fd5b600a5461263c8361112b565b826126479190613c07565b1115612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267f9061466b565b60405180910390fd5b61282b565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127305750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561277f5760085481111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906146fd565b60405180910390fd5b61282a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661282957600a546127dc8361112b565b826127e79190613c07565b1115612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9061466b565b60405180910390fd5b5b5b5b5b5b60006128383061112b565b9050600061284582612fb7565b90508080156128605750600b60019054906101000a900460ff165b80156128795750601660009054906101000a900460ff16155b80156128cf5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129255750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561297b5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129bf576001601660006101000a81548160ff0219169083151502179055506129a3612ff2565b6000601660006101000a81548160ff0219169083151502179055505b6000601660009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a755750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7f57600090505b60008115612ca1576015546000108015612a9a575043601554105b15612c6f57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afa57506000600f54115b15612b86576064600f5486612b0f9190613d07565b612b199190613d78565b9050600f5460105482612b2c9190613d07565b612b369190613d78565b60126000828254612b479190613c07565b92505081905550600f5460115482612b5f9190613d07565b612b699190613d78565b60136000828254612b7a9190613c07565b92505081905550612c6a565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612be157506000600c54115b15612c69576064600c5486612bf69190613d07565b612c009190613d78565b9050600c54600d5482612c139190613d07565b612c1d9190613d78565b60126000828254612c2e9190613c07565b92505081905550600c54600e5482612c469190613d07565b612c509190613d78565b60136000828254612c619190613c07565b925050819055505b5b612c7d565b612c7a8787876131e3565b90505b6000811115612c9257612c91873083612d57565b5b8085612c9e9190613ecd565b94505b612cac878787612d57565b505050505b505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2c90614501565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061478f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fa9919061396a565b60405180910390a350505050565b60006009548210158015612fcc575060155443115b8015612feb57506003601a600043815260200190815260200160002054105b9050919050565b6000612ffd3061112b565b905060006013546012546130119190613c07565b90506000808314806130235750600082145b15613030575050506131e1565b601660095461303f9190613d07565b8311156130585760166009546130559190613d07565b92505b60006002836012548661306b9190613d07565b6130759190613d78565b61307f9190613d78565b90506000818561308f9190613ecd565b9050600047905061309f8261339e565b600081476130ad9190613ecd565b9050600086601354836130c09190613d07565b6130ca9190613d78565b9050600081836130da9190613ecd565b905060006012819055506000601381905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613132906147e0565b60006040518083038185875af1925050503d806000811461316f576040519150601f19603f3d011682016040523d82523d6000602084013e613174565b606091505b50508097505060008611801561318a5750600081115b156131d7576131998682613604565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826012546040516131ce939291906147f5565b60405180910390a15b5050505050505050505b565b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133005760646031836132469190613d07565b6132509190613d78565b9050600c54600d54826132639190613d07565b61326d9190613d78565b6012600082825461327e9190613c07565b92505081905550600c54600e54826132969190613d07565b6132a09190613d78565b601360008282546132b19190613c07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a2613397565b6064600060155414613313576046613316565b601e5b60ff16836133249190613d07565b61332e9190613d78565b9050600f54601054826133419190613d07565b61334b9190613d78565b6012600082825461335c9190613c07565b92505081905550600f54601154826133749190613d07565b61337e9190613d78565b6013600082825461338f9190613c07565b925050819055505b9392505050565b6000600267ffffffffffffffff8111156133bb576133ba61482c565b5b6040519080825280602002602001820160405280156133e95781602001602082028036833780820191505090505b50905030816000815181106134015761340061485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca919061489f565b816001815181106134de576134dd61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613543307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461203c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135a59594939291906149c5565b600060405180830381600087803b1580156135bf57600080fd5b505af11580156135d3573d6000803e3d6000fd5b50505050601a600043815260200190815260200160002060008154809291906135fb90614a1f565b91905055505050565b61362f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461203c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161369696959493929190614a67565b60606040518083038185885af11580156136b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d99190614add565b5050505050565b600080fd5b6000819050919050565b6136f8816136e5565b811461370357600080fd5b50565b600081359050613715816136ef565b92915050565b60008060408385031215613732576137316136e0565b5b600061374085828601613706565b925050602061375185828601613706565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561379557808201518184015260208101905061377a565b60008484015250505050565b6000601f19601f8301169050919050565b60006137bd8261375b565b6137c78185613766565b93506137d7818560208601613777565b6137e0816137a1565b840191505092915050565b6000602082019050818103600083015261380581846137b2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138388261380d565b9050919050565b6138488161382d565b811461385357600080fd5b50565b6000813590506138658161383f565b92915050565b60008060408385031215613882576138816136e0565b5b600061389085828601613856565b92505060206138a185828601613706565b9150509250929050565b60008115159050919050565b6138c0816138ab565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6000819050919050565b60006139066139016138fc8461380d565b6138e1565b61380d565b9050919050565b6000613918826138eb565b9050919050565b600061392a8261390d565b9050919050565b61393a8161391f565b82525050565b60006020820190506139556000830184613931565b92915050565b613964816136e5565b82525050565b600060208201905061397f600083018461395b565b92915050565b60006020828403121561399b5761399a6136e0565b5b60006139a984828501613706565b91505092915050565b6000806000606084860312156139cb576139ca6136e0565b5b60006139d986828701613856565b93505060206139ea86828701613856565b92505060406139fb86828701613706565b9150509250925092565b613a0e8161382d565b82525050565b6000602082019050613a296000830184613a05565b92915050565b600060ff82169050919050565b613a4581613a2f565b82525050565b6000602082019050613a606000830184613a3c565b92915050565b600060208284031215613a7c57613a7b6136e0565b5b6000613a8a84828501613856565b91505092915050565b613a9c816138ab565b8114613aa757600080fd5b50565b600081359050613ab981613a93565b92915050565b60008060408385031215613ad657613ad56136e0565b5b6000613ae485828601613856565b9250506020613af585828601613aaa565b9150509250929050565b600060208284031215613b1557613b146136e0565b5b6000613b2384828501613aaa565b91505092915050565b60008060408385031215613b4357613b426136e0565b5b6000613b5185828601613856565b9250506020613b6285828601613856565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ba2602083613766565b9150613bad82613b6c565b602082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c12826136e5565b9150613c1d836136e5565b9250828201905080821115613c3557613c34613bd8565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613c71601d83613766565b9150613c7c82613c3b565b602082019050919050565b60006020820190508181036000830152613ca081613c64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cee57607f821691505b602082108103613d0157613d00613ca7565b5b50919050565b6000613d12826136e5565b9150613d1d836136e5565b9250828202613d2b816136e5565b91508282048414831517613d4257613d41613bd8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d83826136e5565b9150613d8e836136e5565b925082613d9e57613d9d613d49565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000613e05602d83613766565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e97602883613766565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed8826136e5565b9150613ee3836136e5565b9250828203905081811115613efb57613efa613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613f37601d83613766565b9150613f4282613f01565b602082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fc9603983613766565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061405b602583613766565b915061406682613fff565b604082019050919050565b6000602082019050818103600083015261408a8161404e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ed602283613766565b91506140f882614091565b604082019050919050565b6000602082019050818103600083015261411c816140e0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061417f603583613766565b915061418a82614123565b604082019050919050565b600060208201905081810360008301526141ae81614172565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614211603483613766565b915061421c826141b5565b604082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142a3602683613766565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614335602483613766565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143c7602283613766565b91506143d28261436b565b604082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614459602583613766565b9150614464826143fd565b604082019050919050565b600060208201905081810360008301526144888161444c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144eb602383613766565b91506144f68261448f565b604082019050919050565b6000602082019050818103600083015261451a816144de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614557601683613766565b915061456282614521565b602082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006145e9603583613766565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614655601383613766565b91506146608261461f565b602082019050919050565b6000602082019050818103600083015261468481614648565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006146e7603683613766565b91506146f28261468b565b604082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614779602683613766565b91506147848261471d565b604082019050919050565b600060208201905081810360008301526147a88161476c565b9050919050565b600081905092915050565b50565b60006147ca6000836147af565b91506147d5826147ba565b600082019050919050565b60006147eb826147bd565b9150819050919050565b600060608201905061480a600083018661395b565b614817602083018561395b565b614824604083018461395b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148998161383f565b92915050565b6000602082840312156148b5576148b46136e0565b5b60006148c38482850161488a565b91505092915050565b6000819050919050565b60006148f16148ec6148e7846148cc565b6138e1565b6136e5565b9050919050565b614901816148d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61493c8161382d565b82525050565b600061494e8383614933565b60208301905092915050565b6000602082019050919050565b600061497282614907565b61497c8185614912565b935061498783614923565b8060005b838110156149b857815161499f8882614942565b97506149aa8361495a565b92505060018101905061498b565b5085935050505092915050565b600060a0820190506149da600083018861395b565b6149e760208301876148f8565b81810360408301526149f98186614967565b9050614a086060830185613a05565b614a15608083018461395b565b9695505050505050565b6000614a2a826136e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5c57614a5b613bd8565b5b600182019050919050565b600060c082019050614a7c6000830189613a05565b614a89602083018861395b565b614a9660408301876148f8565b614aa360608301866148f8565b614ab06080830185613a05565b614abd60a083018461395b565b979650505050505050565b600081519050614ad7816136ef565b92915050565b600080600060608486031215614af657614af56136e0565b5b6000614b0486828701614ac8565b9350506020614b1586828701614ac8565b9250506040614b2686828701614ac8565b915050925092509256fea2646970667358221220dd348afb2889e0c14b9b54c6c9375950a0e54b45ed0aeda3b60f84d3e5c4b89d64736f6c63430008120033

Deployed Bytecode Sourcemap

14748:13720:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20391:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5345:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7512:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14794:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6465:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15443:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18968:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8163:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14897:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6307:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8982:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14852:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15141:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21331:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20093:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15332:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15181:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6636:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14194:148;;;;;;;;;;;;;:::i;:::-;;18381:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19431:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19782:109;;;;;;;;;;;;;:::i;:::-;;13552:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14989:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19675:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5564:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20882:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15295:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15483:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15405:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9723:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6976:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15797:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20692:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19207:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15026:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19899:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18576:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14959:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15224:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7214:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15068:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15258:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14497:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15367:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15108:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20391:293;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20504:13:::1;20485:16;:32;;;;20541:7;20528:10;:20;;;;20594:10;;20575:16;;:29;;;;:::i;:::-;20559:13;:45;;;;20640:2;20623:13;;:19;;20615:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20391:293:::0;;:::o;5345:100::-;5399:13;5432:5;5425:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5345:100;:::o;7512:169::-;7595:4;7612:39;7621:12;:10;:12::i;:::-;7635:7;7644:6;7612:8;:39::i;:::-;7669:4;7662:11;;7512:169;;;;:::o;14794:51::-;;;:::o;6465:108::-;6526:7;6553:12;;6546:19;;6465:108;:::o;15443:33::-;;;;:::o;18968:231::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19086:4:::1;19081:3;19077:1;19061:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;19060:30;;;;:::i;:::-;19050:6;:40;;19042:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;19184:6;19174;:17;;;;:::i;:::-;19151:20;:40;;;;18968:231:::0;:::o;8163:410::-;8304:4;8364:6;8329:11;:19;8341:6;8329:19;;;;;;;;;;;;;;;:31;8349:10;8329:31;;;;;;;;;;;;;;;;:41;;8321:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;8426:36;8436:6;8444:9;8455:6;8426:9;:36::i;:::-;8473:70;8482:6;8490:10;8536:6;8502:11;:19;8514:6;8502:19;;;;;;;;;;;;;;;:31;8522:10;8502:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;8473:8;:70::i;:::-;8561:4;8554:11;;8163:410;;;;;:::o;14897:53::-;14943:6;14897:53;:::o;6307:93::-;6365:5;6390:2;6383:9;;6307:93;:::o;8982:238::-;9070:4;9087:13;9103:12;:10;:12::i;:::-;9087:28;;9126:64;9135:5;9142:7;9179:10;9151:25;9161:5;9168:7;9151:9;:25::i;:::-;:38;;;;:::i;:::-;9126:8;:64::i;:::-;9208:4;9201:11;;;8982:238;;;;:::o;14852:38::-;;;:::o;15141:33::-;;;;;;;;;;;;;:::o;21331:125::-;21396:4;21420:19;:28;21440:7;21420:28;;;;;;;;;;;;;;;;;;;;;;;;;21413:35;;21331:125;;;:::o;20093:286::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20204:13:::1;20186:15;:31;;;;20240:7;20228:9;:19;;;;20291:9;;20273:15;;:27;;;;:::i;:::-;20258:12;:42;;;;20335:2;20319:12;;:18;;20311:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20093:286:::0;;:::o;15332:28::-;;;;:::o;15181:30::-;;;;;;;;;;;;;:::o;6636:127::-;6710:7;6737:9;:18;6747:7;6737:18;;;;;;;;;;;;;;;;6730:25;;6636:127;;;:::o;14194:148::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14301:1:::1;14264:40;;14285:6;;;;;;;;;;;14264:40;;;;;;;;;;;;14332:1;14315:6;;:19;;;;;;;;;;;;;;;;;;14194:148::o:0;18381:120::-;18433:4;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18466:5:::1;18449:14;;:22;;;;;;;;;;;;;;;;;;18489:4;18482:11;;18381:120:::0;:::o;19431:144::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19563:4:::1;19521:31;:39;19553:6;19521:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19431:144:::0;;:::o;19782:109::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19843:13:::1;;;;;;;;;;;19842:14;19834:23;;;::::0;::::1;;19882:1;19868:11;:15;;;;19782:109::o:0;13552:79::-;13590:7;13617:6;;;;;;;;;;;13610:13;;13552:79;:::o;14989:24::-;;;;;;;;;;;;;:::o;19675:99::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19759:7:::1;19745:11;;:21;;;;;;;;;;;;;;;;;;19675:99:::0;:::o;5564:104::-;5620:13;5653:7;5646:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5564:104;:::o;20882:244::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20989:13:::1;20981:21;;:4;:21;;::::0;20973:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21077:41;21106:4;21112:5;21077:28;:41::i;:::-;20882:244:::0;;:::o;15295:24::-;;;;:::o;15483:27::-;;;;:::o;15405:25::-;;;;:::o;9723:434::-;9816:4;9833:13;9849:12;:10;:12::i;:::-;9833:28;;9872:24;9899:25;9909:5;9916:7;9899:9;:25::i;:::-;9872:52;;9963:15;9943:16;:35;;9935:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10056:60;10065:5;10072:7;10100:15;10081:16;:34;10056:8;:60::i;:::-;10145:4;10138:11;;;;9723:434;;;;:::o;6976:175::-;7062:4;7079:42;7089:12;:10;:12::i;:::-;7103:9;7114:6;7079:9;:42::i;:::-;7139:4;7132:11;;6976:175;;;;:::o;15797:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20692:182::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20808:8:::1;20777:19;:28;20797:7;20777:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20848:7;20832:34;;;20857:8;20832:34;;;;;;:::i;:::-;;;;;;;;20692:182:::0;;:::o;19207:212::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19328:4:::1;19323:3;19319:1;19303:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;19302:30;;;;:::i;:::-;19292:6;:40;;19284:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19404:6;19394;:17;;;;:::i;:::-;19382:9;:29;;;;19207:212:::0;:::o;15026:35::-;;;;:::o;19899:182::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19970:13:::1;;;;;;;;;;;19969:14;:34;;;;;20002:1;19987:11;;:16;;19969:34;19961:43;;;::::0;::::1;;20041:1;20028:12;:14;;;;:::i;:::-;20015:11;;:27;;;;;;;:::i;:::-;;;;;;;;20069:4;20053:13;;:20;;;;;;;;;;;;;;;;;;19899:182:::0;:::o;18576:380::-;18657:4;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18713:6:::1;18709:1;18693:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;18680:9;:39;;18672:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;18828:3;18824:1;18808:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;18795:9;:36;;18787:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;18919:9;18898:18;:30;;;;18945:4;18938:11;;18576:380:::0;;;:::o;14959:23::-;;;;;;;;;;;;;:::o;15224:27::-;;;;:::o;7214:151::-;7303:7;7330:11;:18;7342:5;7330:18;;;;;;;;;;;;;;;:27;7349:7;7330:27;;;;;;;;;;;;;;;;7323:34;;7214:151;;;;:::o;15068:33::-;;;;:::o;15258:30::-;;;;:::o;14497:244::-;13774:12;:10;:12::i;:::-;13764:22;;:6;;;;;;;;;;;:22;;;13756:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14606:1:::1;14586:22;;:8;:22;;::::0;14578:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14696:8;14667:38;;14688:6;;;;;;;;;;;14667:38;;;;;;;;;;;;14725:8;14716:6;;:17;;;;;;;;;;;;;;;;;;14497:244:::0;:::o;15367:31::-;;;;:::o;15108:24::-;;;;:::o;337:98::-;390:7;417:10;410:17;;337:98;:::o;12667:380::-;12820:1;12803:19;;:5;:19;;;12795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12901:1;12882:21;;:7;:21;;;12874:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12985:6;12955:11;:18;12967:5;12955:18;;;;;;;;;;;;;;;:27;12974:7;12955:27;;;;;;;;;;;;;;;:36;;;;13023:7;13007:32;;13016:5;13007:32;;;13032:6;13007:32;;;;;;:::i;:::-;;;;;;;;12667:380;;;:::o;21518:3557::-;21666:1;21650:18;;:4;:18;;;21642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21743:1;21729:16;;:2;:16;;;21721:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21820:1;21810:6;:11;21807:92;;21838:28;21854:4;21860:2;21864:1;21838:15;:28::i;:::-;21881:7;;21807:92;21922:14;;;;;;;;;;;21919:1261;;;21982:8;;;;;;;;;;;21974:16;;:4;:16;;;;:51;;;;;22017:8;;;;;;;;;;;22011:14;;:2;:14;;;;21974:51;:89;;;;;22061:1;22047:16;;:2;:16;;;;21974:89;:131;;;;;22098:6;22084:21;;:2;:21;;;;21974:131;:161;;;;;22127:8;;;;;;;;;;;22126:9;21974:161;21952:1217;;;22173:13;;;;;;;;;;;22169:148;;22218:19;:25;22238:4;22218:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22247:19;:23;22267:2;22247:23;;;;;;;;;;;;;;;;;;;;;;;;;22218:52;22210:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;22169:148;22380:25;:31;22406:4;22380:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22416:31;:35;22448:2;22416:35;;;;;;;;;;;;;;;;;;;;;;;;;22415:36;22380:71;22376:778;;;22498:20;;22488:6;:30;;22480:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;22637:9;;22620:13;22630:2;22620:9;:13::i;:::-;22611:6;:22;;;;:::i;:::-;:35;;22603:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22376:778;;;22764:25;:29;22790:2;22764:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22798:31;:37;22830:4;22798:37;;;;;;;;;;;;;;;;;;;;;;;;;22797:38;22764:71;22760:394;;;22882:20;;22872:6;:30;;22864:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;22760:394;;;23008:31;:35;23040:2;23008:35;;;;;;;;;;;;;;;;;;;;;;;;;23004:150;;23101:9;;23084:13;23094:2;23084:9;:13::i;:::-;23075:6;:22;;;;:::i;:::-;:35;;23067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23004:150;22760:394;22376:778;21952:1217;21919:1261;23194:28;23225:24;23243:4;23225:9;:24::i;:::-;23194:55;;23260:12;23275:31;23285:20;23275:9;:31::i;:::-;23260:46;;23337:7;:35;;;;;23361:11;;;;;;;;;;;23337:35;:61;;;;;23390:8;;;;;;;;;;;23389:9;23337:61;:110;;;;;23416:25;:31;23442:4;23416:31;;;;;;;;;;;;;;;;;;;;;;;;;23415:32;23337:110;:153;;;;;23465:19;:25;23485:4;23465:25;;;;;;;;;;;;;;;;;;;;;;;;;23464:26;23337:153;:194;;;;;23508:19;:23;23528:2;23508:23;;;;;;;;;;;;;;;;;;;;;;;;;23507:24;23337:194;23319:338;;;23569:4;23558:8;;:15;;;;;;;;;;;;;;;;;;23602:10;:8;:10::i;:::-;23640:5;23629:8;;:16;;;;;;;;;;;;;;;;;;23319:338;23677:12;23693:8;;;;;;;;;;;23692:9;23677:24;;23802:19;:25;23822:4;23802:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23831:19;:23;23851:2;23831:23;;;;;;;;;;;;;;;;;;;;;;;;;23802:52;23799:99;;;23881:5;23871:15;;23799:99;23918:12;24022:7;24019:1003;;;24052:11;;24048:1;:15;:45;;;;;24081:12;24067:11;;:26;24048:45;24045:820;;;24144:25;:29;24170:2;24144:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24193:1;24177:13;;:17;24144:50;24140:625;;;24250:3;24234:13;;24225:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24218:35;;24324:13;;24305:16;;24298:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24276:18;;:61;;;;;;;:::i;:::-;;;;;;;;24396:13;;24383:10;;24376:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;24360:12;;:49;;;;;;;:::i;:::-;;;;;;;;24140:625;;;24483:25;:31;24509:4;24483:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24533:1;24518:12;;:16;24483:51;24480:285;;;24590:3;24575:12;;24566:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24559:34;;24663:12;;24645:15;;24638:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24616:18;;:59;;;;;;;:::i;:::-;;;;;;;;24733:12;;24721:9;;24714:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;24698:12;;:47;;;;;;;:::i;:::-;;;;;;;;24480:285;24140:625;24045:820;;;24824:25;24832:4;24838:2;24842:6;24824:7;:25::i;:::-;24817:32;;24045:820;24891:1;24884:4;:8;24881:93;;;24916:42;24932:4;24946;24953;24916:15;:42::i;:::-;24881:93;25006:4;24996:14;;;;;:::i;:::-;;;24019:1003;25034:33;25050:4;25056:2;25060:6;25034:15;:33::i;:::-;21631:3444;;;;21518:3557;;;;:::o;21134:188::-;21251:5;21217:25;:31;21243:4;21217:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21308:5;21274:40;;21302:4;21274:40;;;;;;;;;;;;21134:188;;:::o;10647:701::-;10760:1;10744:18;;:4;:18;;;10736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10837:1;10823:16;;:2;:16;;;10815:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10890:19;10912:9;:15;10922:4;10912:15;;;;;;;;;;;;;;;;10890:37;;10961:6;10946:11;:21;;10938:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11078:6;11064:11;:20;11046:9;:15;11056:4;11046:15;;;;;;;;;;;;;;;:38;;;;11281:6;11264:9;:13;11274:2;11264:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;11329:2;11314:26;;11323:4;11314:26;;;11333:6;11314:26;;;;;;:::i;:::-;;;;;;;;10725:623;10647:701;;;:::o;25083:226::-;25154:4;25202:18;;25178:20;:42;;:86;;;;;25253:11;;25238:12;:26;25178:86;:123;;;;;25300:1;25268:15;:29;25284:12;25268:29;;;;;;;;;;;;:33;25178:123;25171:130;;25083:226;;;:::o;27104:1361::-;27143:23;27169:24;27187:4;27169:9;:24::i;:::-;27143:50;;27204:25;27253:12;;27232:18;;:33;;;;:::i;:::-;27204:61;;27276:12;27331:1;27312:15;:20;:46;;;;27357:1;27336:17;:22;27312:46;27309:60;;;27361:7;;;;;27309:60;27423:2;27402:18;;:23;;;;:::i;:::-;27384:15;:41;27381:111;;;27478:2;27457:18;;:23;;;;:::i;:::-;27439:41;;27381:111;27561:23;27646:1;27626:17;27605:18;;27587:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;27561:86;;27658:26;27705:15;27687;:33;;;;:::i;:::-;27658:62;;27741:25;27769:21;27741:49;;27803:36;27820:18;27803:16;:36::i;:::-;27861:18;27906:17;27882:21;:41;;;;:::i;:::-;27861:62;;27944:17;27992;27977:12;;27964:10;:25;;;;:::i;:::-;:45;;;;:::i;:::-;27944:65;;28030:23;28069:9;28056:10;:22;;;;:::i;:::-;28030:48;;28120:1;28099:18;:22;;;;28147:1;28132:12;:16;;;;28190:9;;;;;;;;;;;28182:23;;28213:9;28182:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28169:58;;;;;28269:1;28251:15;:19;:42;;;;;28292:1;28274:15;:19;28251:42;28248:210;;;28309:46;28322:15;28339;28309:12;:46::i;:::-;28375:71;28390:18;28410:15;28427:18;;28375:71;;;;;;;;:::i;:::-;;;;;;;;28248:210;27132:1333;;;;;;;;;27104:1361;:::o;26488:608::-;26564:12;26592:25;:31;26618:4;26592:31;;;;;;;;;;;;;;;;;;;;;;;;;26589:500;;;26660:3;26655:2;26646:6;:11;;;;:::i;:::-;:17;;;;:::i;:::-;26639:24;;26725:12;;26707:15;;26700:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26678:18;;:59;;;;;;;:::i;:::-;;;;;;;;26787:12;;26775:9;;26768:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;26752:12;;:47;;;;;;;:::i;:::-;;;;;;;;26831:2;26819:15;;;;;;;;;;;;26589:500;;;26931:3;26916:1;26901:11;;:16;:26;;26925:2;26901:26;;;26920:2;26901:26;26891:37;;:6;:37;;;;:::i;:::-;:43;;;;:::i;:::-;26884:50;;27000:13;;26981:16;;26974:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26952:18;;:61;;;;;;;:::i;:::-;;;;;;;;27064:13;;27051:10;;27044:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;27028:12;;:49;;;;;;;:::i;:::-;;;;;;;;26589:500;26488:608;;;;;:::o;25317:633::-;25445:21;25483:1;25469:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25445:40;;25514:4;25496;25501:1;25496:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25540:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25530:4;25535:1;25530:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25575:62;25592:4;25607:15;25625:11;25575:8;:62::i;:::-;25676:15;:66;;;25757:11;25783:1;25827:4;25854;25874:15;25676:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25911:15;:29;25927:12;25911:29;;;;;;;;;;;;:31;;;;;;;;;:::i;:::-;;;;;;25372:578;25317:633;:::o;25962:517::-;26110:62;26127:4;26142:15;26160:11;26110:8;:62::i;:::-;26215:15;:31;;;26254:9;26287:4;26307:11;26333:1;26376;14943:6;26445:15;26215:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25962: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://dd348afb2889e0c14b9b54c6c9375950a0e54b45ed0aeda3b60f84d3e5c4b89d
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.