ETH Price: $3,504.50 (-0.14%)
Gas: 2 Gwei

Token

Angry Pepe Kidz (APepe)
 

Overview

Max Total Supply

420,690,000,000 APepe

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
263,975,192.114218014063563889 APepe

Value
$0.00
0x115fe24fb22b140b4da9626bf1020ff6870e281f
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:
APEPE

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

Website:  https://angrypepekidz.com
Telegram:  https://t.me/angrypepekidz
Twitter:   https://x.com/AngryPepeKidzz

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*@@@@@@#*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+-*@@%+--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#*=+#@@##=:=##+-:@%#+-%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##=-=%##+-=%#=-:*+=-=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##%%%###+=%##*==+=---*---*+=--%@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#++#%%%#######++==---+=-++--=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###%%%#####*+===-------=+=%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#%%%#####**+===------------=#%@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%**#%#######*++====------------::-+#@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#*##########**+++====----------:::::-+=@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@*+**#####**####*+++======-------:::::::::@%@%@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@#%%%***###**##+=*#**+++==+*==-==-----::::::::=--:@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@%+**+*#####++#*++##*+*+=+*==+*===-----::::::--::+@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@+*++*+*++++*++#*+#++*++#**+=*===--:::--::::---+%@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@%#*+=***+===##+#=#+**+#*+=*%*+==--:-=+=---:-=#@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@##%####*=--=##*%**#*%%*++==+++***@*=#%*-:::=#@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@%**+#+*@@@%#*#*+#=+=+==%###%##@@@@@%- +-:::::::=%@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@%#**++#*=+%#%@@@@%%#*=-*=+*%@@#=-****+:==-:::::::-*%@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@#**=*###****####***==-:::::-+***+***+**=-------:=%@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@%#++#%%%%###*****++===-:......:=+++++====++++=-=*@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@%#+#####**+++*******+++===--::...::--===++++=+*@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@%%**#*#######**######**++=--========-+*+++*#%@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#***################******+++**###**#@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%**%%%%%%%###################**+==+@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+*%%%%%@%%#*****+==+++*****##**+==-=%@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++#%%@@%%%%@@@%##********+++++%%*+===--@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@%+*#%%%@@%%%@@%#*******+++++++++##*++===-=%@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#%%%@@%%%+***+***++=-++++=-+++%#*+===+%#@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####%@%%%+-#.+.+.+-.==+ :=---=+%#+--:::%@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*#*##%%@#*+++*+**+++++*++*#+=*+=:::::::#@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###***#@@@%#*##+*+++=##**#%@#=:::::::=*%@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%*##***#@%****+*+++*+=#@%%%##+-::::--+*%@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@++**%%##%%@%%#**%*+++**++#@%##***#+===+=-=+*%@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@**###@@@@@@%####*##******#@@@%###*###%#+-=---=*#@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@#*+######@@@@@%%##%*####**#*%@@@%%###%#+-==---::-#@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@*#####%%#@@@@@@%%%@%%#*****#%@@@@%%#*+==-=----::-*%@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@+####%%%%%%@@@@@@@@%%%%@@%%%%%@@%%#**++**+=-----:+@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@#*#%%%%%%%%%%%%##%%%%%%%########**+#*##*+====----%@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@%#%%%%%%%%%%@%########%#####**##**%%###**+++===#@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%@@%%%%%%%@##%%%%%%%#%%##*#***++++%@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@#*++*#*++##+=+#%@@@@@@@@@%@@@@@@@%@%#*+++*+++++=++**%@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@*#*+*%#*=*%#++*%%@@@@@@@@@@@@@@@@@@@%%#**++**+=+**+-+=*@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@%###%@%*#%@@#%@@@@@@@@@@@@@@@@@@@@@@@@@%%*#%#***%#***#*@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


*/


// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
   
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _init(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract APEPE is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public buyFee;
    uint256 public sellFee;
    uint256 public walletToWalletTransferFee;

    address public marketingWallet;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    bool    public tradingEnabled;

    uint256 public swapTokensAtAmount;
    bool    public swapWithLimit;
    bool    private swapping;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitAmountChanged(uint256 maxWalletLimitRate);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransferRateBuy, uint256 maxTransferRateSell);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event BuyFeeUpdated(uint256 buyFee);
    event SellFeeUpdated(uint256 sellFee);
    event WalletToWalletTransferFeeUpdated(uint256 walletToWalletTransferFee);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
    event SwapAndSend(uint256 tokensSwapped, uint256 valueReceived);
    event SwapWithLimitUpdated(bool swapWithLimit);

    constructor () ERC20("Angry Pepe Kidz", "APepe") 
    {   
        address newOwner = 0xd2109e1F45829e7260dF8305465E2F22a21c23DA;
        transferOwnership(newOwner);
        
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH UniswapV2 Router
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        buyFee  = 1;
        sellFee = 1;
        walletToWalletTransferFee = 1;

        marketingWallet = 0x653f4A7a5839BAb98Ad8675e142f5f059fe9632c;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(0)] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[DEAD] = true;
        
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(0)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[DEAD] = true;

        _init(owner(), 420690000000 ether);
        swapTokensAtAmount = totalSupply() / 5000;

        maxTransactionAmountBuy    = totalSupply() / 100;
        maxTransactionAmountSell   = totalSupply() / 100;
        maxWalletAmount            = totalSupply() / 100;

    }

    receive() external payable {

  	}

    function enableTrading() public onlyOwner{
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
    }  

    function claimStuckTokens(address token) external onlyOwner {
        if (token == address(0x0)) {
            (bool success,) = msg.sender.call{value: address(this).balance}("");
            require(success, "Claim failed");
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setBuyFee(uint256 _buyFee) external onlyOwner {
        require(_buyFee <= 25, "Buy Fee cannot be more than 25%");
        buyFee = _buyFee;
        emit BuyFeeUpdated(buyFee);
    }

    function setSellFee(uint256 _sellFee) external onlyOwner {
        require(_sellFee <= 25, "Sell Fee cannot be more than 25%");
        sellFee = _sellFee;
        emit SellFeeUpdated(sellFee);
    }

    function setWalletToWalletTransferFee(uint256 _walletToWalletTransferFee) external onlyOwner {
        require(_walletToWalletTransferFee <= 10, "Wallet to Wallet Transfer Fee cannot be more than 10%");
        walletToWalletTransferFee = _walletToWalletTransferFee;
        emit WalletToWalletTransferFeeUpdated(walletToWalletTransferFee);
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;
    }
    
    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not enabled yet");
            
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                _isExcludedFromMaxTxLimit[from] == false && 
                _isExcludedFromMaxTxLimit[to]   == false) 
            {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }
    
		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair
        ) {
            swapping = true;

            if (swapWithLimit) {
                contractTokenBalance = swapTokensAtAmount;
            }

            swap(contractTokenBalance);        

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = buyFee;
        } else if (to == uniswapV2Pair) {
            _totalFees = sellFee;
        } else {
            _totalFees = walletToWalletTransferFee;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) {
            if (_isExcludedFromMaxWalletLimit[from]  == false && 
                _isExcludedFromMaxWalletLimit[to]    == false &&
                to != uniswapV2Pair
            ) {
                uint balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

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

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1000000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function setSwapWithLimit(bool _swapWithLimit) external onlyOwner{
        swapWithLimit = _swapWithLimit;
        emit SwapWithLimitUpdated(swapWithLimit);
    }

    function swap(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        bool success = payable(marketingWallet).send(newBalance);
        if (success) {
            emit SwapAndSend(tokenAmount, newBalance);
        }
    }

    //=======MaxWallet=======//
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled = true;
    uint256 public maxWalletAmount;

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(
            enable != maxWalletLimitEnabled, 
            "Max wallet limit is already set to that state"
        );
        maxWalletLimitEnabled = enable;
        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(
            _maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, 
            "Max wallet percentage cannot be lower than 1%"
        );
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());
        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function setExcludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxWalletLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxWalletLimit[account] = exclude;
        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

//=======MaxTransaction=======//
    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled = true;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner  {
        require(
            enable != maxTransactionLimitEnabled, 
            "Max transaction limit is already set to that state"
        );
        maxTransactionLimitEnabled = enable;
        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= (totalSupply() / (10 ** decimals())) / 1000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals()))/ 1000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());
        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function setExcludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxTxLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxTxLimit[account] = exclude;
        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

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":false,"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"BuyFeeUpdated","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransferRateBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransferRateSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimitRate","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","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":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueReceived","type":"uint256"}],"name":"SwapAndSend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"swapWithLimit","type":"bool"}],"name":"SwapWithLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"WalletToWalletTransferFeeUpdated","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapWithLimit","type":"bool"}],"name":"setSwapWithLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletToWalletTransferFee","type":"uint256"}],"name":"setWalletToWalletTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapWithLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"walletToWalletTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601160006101000a81548160ff0219169083151502179055506001601460006101000a81548160ff0219169083151502179055503480156200008a57600080fd5b506040518060400160405280600f81526020017f416e6772792050657065204b69647a00000000000000000000000000000000008152506040518060400160405280600581526020017f41506570650000000000000000000000000000000000000000000000000000008152508160039081620001089190620011a4565b5080600490816200011a9190620011a4565b50505060006200012f620009c760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600073d2109e1f45829e7260df8305465e2f22a21c23da9050620001f881620009cf60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028a9190620012f5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003189190620012f5565b6040518363ffffffff1660e01b81526004016200033792919062001338565b6020604051808303816000875af115801562000357573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037d9190620012f5565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200045630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000ba360201b60201c565b60016009819055506001600a819055506001600b8190555073653f4a7a5839bab98ad8675e142f5f059fe9632c600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000620004d962000d7460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005f262000d7460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060006200078362000d7460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200092c6200091262000d7460201b60201c565b6c054f529ca52576bc689200000062000d9e60201b60201c565b6113886200093f62000f1660201b60201c565b6200094b9190620013c3565b600e8190555060646200096362000f1660201b60201c565b6200096f9190620013c3565b60158190555060646200098762000f1660201b60201c565b620009939190620013c3565b6016819055506064620009ab62000f1660201b60201c565b620009b79190620013c3565b6012819055505050505062001721565b600033905090565b620009df620009c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a68906200145c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ada90620014f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000c15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0c906200158c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7e9062001624565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000d67919062001657565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e0790620016c4565b60405180910390fd5b62000e246000838362000f2060201b60201c565b806002600082825462000e389190620016e6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000e8f9190620016e6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ef6919062001657565b60405180910390a362000f126000838362000f2560201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fac57607f821691505b60208210810362000fc25762000fc162000f64565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200102c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000fed565b62001038868362000fed565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620010856200107f620010798462001050565b6200105a565b62001050565b9050919050565b6000819050919050565b620010a18362001064565b620010b9620010b0826200108c565b84845462000ffa565b825550505050565b600090565b620010d0620010c1565b620010dd81848462001096565b505050565b5b818110156200110557620010f9600082620010c6565b600181019050620010e3565b5050565b601f82111562001154576200111e8162000fc8565b620011298462000fdd565b8101602085101562001139578190505b62001151620011488562000fdd565b830182620010e2565b50505b505050565b600082821c905092915050565b6000620011796000198460080262001159565b1980831691505092915050565b600062001194838362001166565b9150826002028217905092915050565b620011af8262000f2a565b67ffffffffffffffff811115620011cb57620011ca62000f35565b5b620011d7825462000f93565b620011e482828562001109565b600060209050601f8311600181146200121c576000841562001207578287015190505b62001213858262001186565b86555062001283565b601f1984166200122c8662000fc8565b60005b8281101562001256578489015182556001820191506020850194506020810190506200122f565b8683101562001276578489015162001272601f89168262001166565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012bd8262001290565b9050919050565b620012cf81620012b0565b8114620012db57600080fd5b50565b600081519050620012ef81620012c4565b92915050565b6000602082840312156200130e576200130d6200128b565b5b60006200131e84828501620012de565b91505092915050565b6200133281620012b0565b82525050565b60006040820190506200134f600083018562001327565b6200135e602083018462001327565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620013d08262001050565b9150620013dd8362001050565b925082620013f057620013ef62001365565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001444602083620013fb565b915062001451826200140c565b602082019050919050565b60006020820190508181036000830152620014778162001435565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014dc602683620013fb565b9150620014e9826200147e565b604082019050919050565b600060208201905081810360008301526200150f81620014cd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001574602483620013fb565b9150620015818262001516565b604082019050919050565b60006020820190508181036000830152620015a78162001565565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200160c602283620013fb565b91506200161982620015ae565b604082019050919050565b600060208201905081810360008301526200163f81620015fd565b9050919050565b620016518162001050565b82525050565b60006020820190506200166e600083018462001646565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620016ac601f83620013fb565b9150620016b98262001674565b602082019050919050565b60006020820190508181036000830152620016df816200169d565b9050919050565b6000620016f38262001050565b9150620017008362001050565b92508282019050808211156200171b576200171a62001394565b5b92915050565b61529580620017316000396000f3fe6080604052600436106102815760003560e01c8063702509fd1161014f578063a6f14f6c116100c1578063bb85c6d11161007a578063bb85c6d1146109a9578063c0246668146109d2578063dd62ed3e146109fb578063e2f4560514610a38578063f2fde38b14610a63578063f9d0831a14610a8c57610288565b8063a6f14f6c14610889578063a8a69b9d146108b2578063a9059cbb146108ef578063aa4bde281461092c578063afa4f3b214610957578063b6f7f6811461098057610288565b80638b4cee08116101135780638b4cee081461077b5780638da5cb5b146107a4578063929f1360146107cf57806395d89b41146107f8578063988be11814610823578063a457c2d71461084c57610288565b8063702509fd146106ba57806370a08231146106e5578063715018a61461072257806375f0a874146107395780638a8c523c1461076457610288565b80632a6c7dba116101f3578063488eb37f116101ac578063488eb37f146105a857806349bd5a5e146105d35780634ada218b146105fe5780634fbee1931461062957806356a6cabf1461066657806359136fa51461068f57610288565b80632a6c7dba146104965780632b14ca56146104bf5780632ba86bf2146104ea578063313ce567146105155780633950935114610540578063470624021461057d57610288565b80631694505e116102455780631694505e1461037257806318160ddd1461039d57806318d9ceae146103c857806321a9d82a1461040557806323b872dd1461043057806327a14fc21461046d57610288565b80630105d0fd1461028d57806306fdde03146102b8578063095ea7b3146102e35780630cc835a314610320578063150c880c1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ab5565b6040516102af9190613a68565b60405180910390f35b3480156102c457600080fd5b506102cd610abb565b6040516102da9190613b13565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613bc4565b610b4d565b6040516103179190613c1f565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613c3a565b610b6b565b005b34801561035557600080fd5b50610370600480360381019061036b9190613c93565b610c89565b005b34801561037e57600080fd5b50610387610e5b565b6040516103949190613d32565b60405180910390f35b3480156103a957600080fd5b506103b2610e81565b6040516103bf9190613a68565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613d4d565b610e8b565b6040516103fc9190613c1f565b60405180910390f35b34801561041157600080fd5b5061041a610ee1565b6040516104279190613c1f565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190613d7a565b610ef4565b6040516104649190613c1f565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613c3a565b611013565b005b3480156104a257600080fd5b506104bd60048036038101906104b89190613dcd565b61117f565b005b3480156104cb57600080fd5b506104d46112ce565b6040516104e19190613a68565b60405180910390f35b3480156104f657600080fd5b506104ff6112d4565b60405161050c9190613c1f565b60405180910390f35b34801561052157600080fd5b5061052a6112e7565b6040516105379190613e16565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190613bc4565b6112f0565b6040516105749190613c1f565b60405180910390f35b34801561058957600080fd5b5061059261139c565b60405161059f9190613a68565b60405180910390f35b3480156105b457600080fd5b506105bd6113a2565b6040516105ca9190613c1f565b60405180910390f35b3480156105df57600080fd5b506105e86113b5565b6040516105f59190613e40565b60405180910390f35b34801561060a57600080fd5b506106136113db565b6040516106209190613c1f565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613d4d565b6113ee565b60405161065d9190613c1f565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190613dcd565b611444565b005b34801561069b57600080fd5b506106a4611593565b6040516106b19190613a68565b60405180910390f35b3480156106c657600080fd5b506106cf611599565b6040516106dc9190613a68565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613d4d565b61159f565b6040516107199190613a68565b60405180910390f35b34801561072e57600080fd5b506107376115e7565b005b34801561074557600080fd5b5061074e61173f565b60405161075b9190613e40565b60405180910390f35b34801561077057600080fd5b50610779611765565b005b34801561078757600080fd5b506107a2600480360381019061079d9190613c3a565b611869565b005b3480156107b057600080fd5b506107b9611987565b6040516107c69190613e40565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613c93565b6119b1565b005b34801561080457600080fd5b5061080d611b83565b60405161081a9190613b13565b60405180910390f35b34801561082f57600080fd5b5061084a60048036038101906108459190613dcd565b611c15565b005b34801561085857600080fd5b50610873600480360381019061086e9190613bc4565b611d0f565b6040516108809190613c1f565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab9190613c3a565b611dfa565b005b3480156108be57600080fd5b506108d960048036038101906108d49190613d4d565b611f18565b6040516108e69190613c1f565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613bc4565b611f6e565b6040516109239190613c1f565b60405180910390f35b34801561093857600080fd5b50610941611f8c565b60405161094e9190613a68565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190613c3a565b611f92565b005b34801561098c57600080fd5b506109a760048036038101906109a29190613e5b565b6120c3565b005b3480156109b557600080fd5b506109d060048036038101906109cb9190613d4d565b612298565b005b3480156109de57600080fd5b506109f960048036038101906109f49190613c93565b6123e2565b005b348015610a0757600080fd5b50610a226004803603810190610a1d9190613e9b565b6125b4565b604051610a2f9190613a68565b60405180910390f35b348015610a4457600080fd5b50610a4d61263b565b604051610a5a9190613a68565b60405180910390f35b348015610a6f57600080fd5b50610a8a6004803603810190610a859190613d4d565b612641565b005b348015610a9857600080fd5b50610ab36004803603810190610aae9190613d4d565b612807565b005b60155481565b606060038054610aca90613f0a565b80601f0160208091040260200160405190810160405280929190818152602001828054610af690613f0a565b8015610b435780601f10610b1857610100808354040283529160200191610b43565b820191906000526020600020905b815481529060010190602001808311610b2657829003601f168201915b5050505050905090565b6000610b61610b5a612a8c565b8484612a94565b6001905092915050565b610b73612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990613f87565b60405180910390fd5b6019811115610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613ff3565b60405180910390fd5b806009819055507f7c1445c98b278c9970d007fca6048704bcb25af7cc4a04eb56565d9a9f149ca3600954604051610c7e9190613a68565b60405180910390a150565b610c91612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613f87565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990614085565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1082604051610e4f9190613c1f565b60405180910390a25050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f40612a8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ffc5782811015610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90614117565b60405180910390fd5b610ffb85610ff3612a8c565b858403612a94565b5b611007858585612c5d565b60019150509392505050565b61101b612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190613f87565b60405180910390fd5b60646110b46112e7565b600a6110c09190614299565b6110c8610e81565b6110d29190614313565b6110dc9190614313565b81101561111e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611115906143b6565b60405180910390fd5b6111266112e7565b600a6111329190614299565b8161113d91906143d6565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426012546040516111749190613a68565b60405180910390a150565b611187612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90613f87565b60405180910390fd5b601160009054906101000a900460ff1615158115150361126b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112629061448a565b60405180910390fd5b80601160006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601160009054906101000a900460ff166040516112c39190613c1f565b60405180910390a150565b600a5481565b601460009054906101000a900460ff1681565b60006012905090565b60006113926112fd612a8c565b84846001600061130b612a8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138d91906144aa565b612a94565b6001905092915050565b60095481565b600f60009054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60149054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61144c612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613f87565b60405180910390fd5b601460009054906101000a900460ff16151581151503611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614550565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601460009054906101000a900460ff166040516115889190613c1f565b60405180910390a150565b60165481565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115ef612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167590613f87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61176d612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390613f87565b60405180910390fd5b600d60149054906101000a900460ff161561184c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611843906145bc565b60405180910390fd5b6001600d60146101000a81548160ff021916908315150217905550565b611871612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790613f87565b60405180910390fd5b6019811115611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90614628565b60405180910390fd5b80600a819055507f495ee53ee22006979ebc689a00ed737d7c13b6419142f82dcaea4ed95ac1e780600a5460405161197c9190613a68565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119b9612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90613f87565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190614085565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c82604051611b779190613c1f565b60405180910390a25050565b606060048054611b9290613f0a565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbe90613f0a565b8015611c0b5780601f10611be057610100808354040283529160200191611c0b565b820191906000526020600020905b815481529060010190602001808311611bee57829003601f168201915b5050505050905090565b611c1d612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca390613f87565b60405180910390fd5b80600f60006101000a81548160ff0219169083151502179055507f94da5f18dc9529c37f2af4ffa1921f49d8bb14b6e5fe22b0d6ddc94f102f9232600f60009054906101000a900460ff16604051611d049190613c1f565b60405180910390a150565b60008060016000611d1e612a8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd2906146ba565b60405180910390fd5b611def611de6612a8c565b85858403612a94565b600191505092915050565b611e02612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890613f87565b60405180910390fd5b600a811115611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc9061474c565b60405180910390fd5b80600b819055507f55a18e0066d4ca4f044c3c7bff35c003f6b02ad8a7c71b6d33ae71d262833251600b54604051611f0d9190613a68565b60405180910390a150565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611f82611f7b612a8c565b8484612c5d565b6001905092915050565b60125481565b611f9a612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202090613f87565b60405180910390fd5b620f4240612035610e81565b61203f9190614313565b8111612080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612077906147de565b60405180910390fd5b80600e819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600e546040516120b89190613a68565b60405180910390a150565b6120cb612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215190613f87565b60405180910390fd5b6103e86121656112e7565b600a6121719190614299565b612179610e81565b6121839190614313565b61218d9190614313565b82101580156121ce57506103e86121a26112e7565b600a6121ae9190614299565b6121b6610e81565b6121c09190614313565b6121ca9190614313565b8110155b61220d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220490614870565b60405180910390fd5b6122156112e7565b600a6122219190614299565b8261222c91906143d6565b60158190555061223a6112e7565b600a6122469190614299565b8161225191906143d6565b6016819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13160155460165460405161228c929190614890565b60405180910390a15050565b6122a0612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690613f87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361239e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959061492b565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123ea612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090613f87565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361250b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612502906149bd565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516125a89190613c1f565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b612649612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90613f87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e90614a4f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61280f612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289590613f87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129845760003373ffffffffffffffffffffffffffffffffffffffff16476040516128f890614aa0565b60006040518083038185875af1925050503d8060008114612935576040519150601f19603f3d011682016040523d82523d6000602084013e61293a565b606091505b505090508061297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614b01565b60405180910390fd5b50612a89565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129c49190613e40565b602060405180830381865afa1580156129e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a059190614b36565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612a42929190614b63565b6020604051808303816000875af1158015612a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a859190614ba1565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa90614c40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6990614cd2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c509190613a68565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614d64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3290614df6565b60405180910390fd5b600d60149054906101000a900460ff1680612d9f5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612df35750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614e62565b60405180910390fd5b60008103612e4b57612e46838360006134fd565b6134f8565b601460009054906101000a900460ff16156130ad57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612f095750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612f65575060001515601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015612fc1575060001515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b156130ac57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361306557601554811115613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790614ef4565b60405180910390fd5b6130ab565b6016548111156130aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a190614ef4565b60405180910390fd5b5b5b5b60006130b83061159f565b90506000600e5482101590508080156130de5750600f60019054906101000a900460ff16155b80156131375750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613197576001600f60016101000a81548160ff021916908315150217905550600f60009054906101000a900460ff161561317257600e5491505b61317b8261377c565b6000600f60016101000a81548160ff0219169083151502179055505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061323a5750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132515750600f60019054906101000a900460ff165b1561325f5760009050613325565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036132be576009549050613324565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361331d57600a549050613323565b600b5490505b5b5b60008111156133655760006064828661333e91906143d6565b6133489190614313565b905080856133569190614f14565b94506133638730836134fd565b505b601160009054906101000a900460ff16156134e95760001515601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561342a575060001515601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156134845750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156134e85760006134948661159f565b905060125485826134a591906144aa565b11156134e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dd90614fba565b60405180910390fd5b505b5b6134f48686866134fd565b5050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356390614d64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d290614df6565b60405180910390fd5b6135e6838383613a45565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561366c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136639061504c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136ff91906144aa565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137639190613a68565b60405180910390a3613776848484613a4a565b50505050565b60004790506000600267ffffffffffffffff81111561379e5761379d61506c565b5b6040519080825280602002602001820160405280156137cc5781602001602082028036833780820191505090505b50905030816000815181106137e4576137e361509b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561388b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138af91906150df565b816001815181106138c3576138c261509b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401613961959493929190615205565b600060405180830381600087803b15801561397b57600080fd5b505af115801561398f573d6000803e3d6000fd5b50505050600082476139a19190614f14565b90506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505090508015613a3e577f1309193d68e1a43bd32da5f04e07935cc194c20b2bd1813be5c6898b99dac4be8583604051613a35929190614890565b60405180910390a15b5050505050565b505050565b505050565b6000819050919050565b613a6281613a4f565b82525050565b6000602082019050613a7d6000830184613a59565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613abd578082015181840152602081019050613aa2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ae582613a83565b613aef8185613a8e565b9350613aff818560208601613a9f565b613b0881613ac9565b840191505092915050565b60006020820190508181036000830152613b2d8184613ada565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6582613b3a565b9050919050565b613b7581613b5a565b8114613b8057600080fd5b50565b600081359050613b9281613b6c565b92915050565b613ba181613a4f565b8114613bac57600080fd5b50565b600081359050613bbe81613b98565b92915050565b60008060408385031215613bdb57613bda613b35565b5b6000613be985828601613b83565b9250506020613bfa85828601613baf565b9150509250929050565b60008115159050919050565b613c1981613c04565b82525050565b6000602082019050613c346000830184613c10565b92915050565b600060208284031215613c5057613c4f613b35565b5b6000613c5e84828501613baf565b91505092915050565b613c7081613c04565b8114613c7b57600080fd5b50565b600081359050613c8d81613c67565b92915050565b60008060408385031215613caa57613ca9613b35565b5b6000613cb885828601613b83565b9250506020613cc985828601613c7e565b9150509250929050565b6000819050919050565b6000613cf8613cf3613cee84613b3a565b613cd3565b613b3a565b9050919050565b6000613d0a82613cdd565b9050919050565b6000613d1c82613cff565b9050919050565b613d2c81613d11565b82525050565b6000602082019050613d476000830184613d23565b92915050565b600060208284031215613d6357613d62613b35565b5b6000613d7184828501613b83565b91505092915050565b600080600060608486031215613d9357613d92613b35565b5b6000613da186828701613b83565b9350506020613db286828701613b83565b9250506040613dc386828701613baf565b9150509250925092565b600060208284031215613de357613de2613b35565b5b6000613df184828501613c7e565b91505092915050565b600060ff82169050919050565b613e1081613dfa565b82525050565b6000602082019050613e2b6000830184613e07565b92915050565b613e3a81613b5a565b82525050565b6000602082019050613e556000830184613e31565b92915050565b60008060408385031215613e7257613e71613b35565b5b6000613e8085828601613baf565b9250506020613e9185828601613baf565b9150509250929050565b60008060408385031215613eb257613eb1613b35565b5b6000613ec085828601613b83565b9250506020613ed185828601613b83565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f2257607f821691505b602082108103613f3557613f34613edb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f71602083613a8e565b9150613f7c82613f3b565b602082019050919050565b60006020820190508181036000830152613fa081613f64565b9050919050565b7f427579204665652063616e6e6f74206265206d6f7265207468616e2032352500600082015250565b6000613fdd601f83613a8e565b9150613fe882613fa7565b602082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b600061406f602483613a8e565b915061407a82614013565b604082019050919050565b6000602082019050818103600083015261409e81614062565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614101602883613a8e565b915061410c826140a5565b604082019050919050565b60006020820190508181036000830152614130816140f4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156141bd5780860481111561419957614198614137565b5b60018516156141a85780820291505b80810290506141b685614166565b945061417d565b94509492505050565b6000826141d65760019050614292565b816141e45760009050614292565b81600181146141fa576002811461420457614233565b6001915050614292565b60ff84111561421657614215614137565b5b8360020a91508482111561422d5761422c614137565b5b50614292565b5060208310610133831016604e8410600b84101617156142685782820a90508381111561426357614262614137565b5b614292565b6142758484846001614173565b9250905081840481111561428c5761428b614137565b5b81810290505b9392505050565b60006142a482613a4f565b91506142af83613dfa565b92506142dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846141c6565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061431e82613a4f565b915061432983613a4f565b925082614339576143386142e4565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006143a0602d83613a8e565b91506143ab82614344565b604082019050919050565b600060208201905081810360008301526143cf81614393565b9050919050565b60006143e182613a4f565b91506143ec83613a4f565b92508282026143fa81613a4f565b9150828204841483151761441157614410614137565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b6000614474602d83613a8e565b915061447f82614418565b604082019050919050565b600060208201905081810360008301526144a381614467565b9050919050565b60006144b582613a4f565b91506144c083613a4f565b92508282019050808211156144d8576144d7614137565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b600061453a603283613a8e565b9150614545826144de565b604082019050919050565b600060208201905081810360008301526145698161452d565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b60006145a6601a83613a8e565b91506145b182614570565b602082019050919050565b600060208201905081810360008301526145d581614599565b9050919050565b7f53656c6c204665652063616e6e6f74206265206d6f7265207468616e20323525600082015250565b6000614612602083613a8e565b915061461d826145dc565b602082019050919050565b6000602082019050818103600083015261464181614605565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006146a4602583613a8e565b91506146af82614648565b604082019050919050565b600060208201905081810360008301526146d381614697565b9050919050565b7f57616c6c657420746f2057616c6c6574205472616e736665722046656520636160008201527f6e6e6f74206265206d6f7265207468616e203130250000000000000000000000602082015250565b6000614736603583613a8e565b9150614741826146da565b604082019050919050565b6000602082019050818103600083015261476581614729565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b60006147c8603f83613a8e565b91506147d38261476c565b604082019050919050565b600060208201905081810360008301526147f7816147bb565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b600061485a603f83613a8e565b9150614865826147fe565b604082019050919050565b600060208201905081810360008301526148898161484d565b9050919050565b60006040820190506148a56000830185613a59565b6148b26020830184613a59565b9392505050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614915602b83613a8e565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006149a7602a83613a8e565b91506149b28261494b565b604082019050919050565b600060208201905081810360008301526149d68161499a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a39602683613a8e565b9150614a44826149dd565b604082019050919050565b60006020820190508181036000830152614a6881614a2c565b9050919050565b600081905092915050565b50565b6000614a8a600083614a6f565b9150614a9582614a7a565b600082019050919050565b6000614aab82614a7d565b9150819050919050565b7f436c61696d206661696c65640000000000000000000000000000000000000000600082015250565b6000614aeb600c83613a8e565b9150614af682614ab5565b602082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b600081519050614b3081613b98565b92915050565b600060208284031215614b4c57614b4b613b35565b5b6000614b5a84828501614b21565b91505092915050565b6000604082019050614b786000830185613e31565b614b856020830184613a59565b9392505050565b600081519050614b9b81613c67565b92915050565b600060208284031215614bb757614bb6613b35565b5b6000614bc584828501614b8c565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2a602483613a8e565b9150614c3582614bce565b604082019050919050565b60006020820190508181036000830152614c5981614c1d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cbc602283613a8e565b9150614cc782614c60565b604082019050919050565b60006020820190508181036000830152614ceb81614caf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d4e602583613a8e565b9150614d5982614cf2565b604082019050919050565b60006020820190508181036000830152614d7d81614d41565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de0602383613a8e565b9150614deb82614d84565b604082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b6000614e4c601a83613a8e565b9150614e5782614e16565b602082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b6000614ede603b83613a8e565b9150614ee982614e82565b604082019050919050565b60006020820190508181036000830152614f0d81614ed1565b9050919050565b6000614f1f82613a4f565b9150614f2a83613a4f565b9250828203905081811115614f4257614f41614137565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b6000614fa4603083613a8e565b9150614faf82614f48565b604082019050919050565b60006020820190508181036000830152614fd381614f97565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615036602683613a8e565b915061504182614fda565b604082019050919050565b6000602082019050818103600083015261506581615029565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506150d981613b6c565b92915050565b6000602082840312156150f5576150f4613b35565b5b6000615103848285016150ca565b91505092915050565b6000819050919050565b600061513161512c6151278461510c565b613cd3565b613a4f565b9050919050565b61514181615116565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61517c81613b5a565b82525050565b600061518e8383615173565b60208301905092915050565b6000602082019050919050565b60006151b282615147565b6151bc8185615152565b93506151c783615163565b8060005b838110156151f85781516151df8882615182565b97506151ea8361519a565b9250506001810190506151cb565b5085935050505092915050565b600060a08201905061521a6000830188613a59565b6152276020830187615138565b818103604083015261523981866151a7565b90506152486060830185613e31565b6152556080830184613a59565b969550505050505056fea2646970667358221220d1204df64792fbf6ddc401f2c0b51acd093916cde5c79af64645c087eed6d78864736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063702509fd1161014f578063a6f14f6c116100c1578063bb85c6d11161007a578063bb85c6d1146109a9578063c0246668146109d2578063dd62ed3e146109fb578063e2f4560514610a38578063f2fde38b14610a63578063f9d0831a14610a8c57610288565b8063a6f14f6c14610889578063a8a69b9d146108b2578063a9059cbb146108ef578063aa4bde281461092c578063afa4f3b214610957578063b6f7f6811461098057610288565b80638b4cee08116101135780638b4cee081461077b5780638da5cb5b146107a4578063929f1360146107cf57806395d89b41146107f8578063988be11814610823578063a457c2d71461084c57610288565b8063702509fd146106ba57806370a08231146106e5578063715018a61461072257806375f0a874146107395780638a8c523c1461076457610288565b80632a6c7dba116101f3578063488eb37f116101ac578063488eb37f146105a857806349bd5a5e146105d35780634ada218b146105fe5780634fbee1931461062957806356a6cabf1461066657806359136fa51461068f57610288565b80632a6c7dba146104965780632b14ca56146104bf5780632ba86bf2146104ea578063313ce567146105155780633950935114610540578063470624021461057d57610288565b80631694505e116102455780631694505e1461037257806318160ddd1461039d57806318d9ceae146103c857806321a9d82a1461040557806323b872dd1461043057806327a14fc21461046d57610288565b80630105d0fd1461028d57806306fdde03146102b8578063095ea7b3146102e35780630cc835a314610320578063150c880c1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ab5565b6040516102af9190613a68565b60405180910390f35b3480156102c457600080fd5b506102cd610abb565b6040516102da9190613b13565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613bc4565b610b4d565b6040516103179190613c1f565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613c3a565b610b6b565b005b34801561035557600080fd5b50610370600480360381019061036b9190613c93565b610c89565b005b34801561037e57600080fd5b50610387610e5b565b6040516103949190613d32565b60405180910390f35b3480156103a957600080fd5b506103b2610e81565b6040516103bf9190613a68565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613d4d565b610e8b565b6040516103fc9190613c1f565b60405180910390f35b34801561041157600080fd5b5061041a610ee1565b6040516104279190613c1f565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190613d7a565b610ef4565b6040516104649190613c1f565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613c3a565b611013565b005b3480156104a257600080fd5b506104bd60048036038101906104b89190613dcd565b61117f565b005b3480156104cb57600080fd5b506104d46112ce565b6040516104e19190613a68565b60405180910390f35b3480156104f657600080fd5b506104ff6112d4565b60405161050c9190613c1f565b60405180910390f35b34801561052157600080fd5b5061052a6112e7565b6040516105379190613e16565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190613bc4565b6112f0565b6040516105749190613c1f565b60405180910390f35b34801561058957600080fd5b5061059261139c565b60405161059f9190613a68565b60405180910390f35b3480156105b457600080fd5b506105bd6113a2565b6040516105ca9190613c1f565b60405180910390f35b3480156105df57600080fd5b506105e86113b5565b6040516105f59190613e40565b60405180910390f35b34801561060a57600080fd5b506106136113db565b6040516106209190613c1f565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613d4d565b6113ee565b60405161065d9190613c1f565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190613dcd565b611444565b005b34801561069b57600080fd5b506106a4611593565b6040516106b19190613a68565b60405180910390f35b3480156106c657600080fd5b506106cf611599565b6040516106dc9190613a68565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613d4d565b61159f565b6040516107199190613a68565b60405180910390f35b34801561072e57600080fd5b506107376115e7565b005b34801561074557600080fd5b5061074e61173f565b60405161075b9190613e40565b60405180910390f35b34801561077057600080fd5b50610779611765565b005b34801561078757600080fd5b506107a2600480360381019061079d9190613c3a565b611869565b005b3480156107b057600080fd5b506107b9611987565b6040516107c69190613e40565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613c93565b6119b1565b005b34801561080457600080fd5b5061080d611b83565b60405161081a9190613b13565b60405180910390f35b34801561082f57600080fd5b5061084a60048036038101906108459190613dcd565b611c15565b005b34801561085857600080fd5b50610873600480360381019061086e9190613bc4565b611d0f565b6040516108809190613c1f565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab9190613c3a565b611dfa565b005b3480156108be57600080fd5b506108d960048036038101906108d49190613d4d565b611f18565b6040516108e69190613c1f565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613bc4565b611f6e565b6040516109239190613c1f565b60405180910390f35b34801561093857600080fd5b50610941611f8c565b60405161094e9190613a68565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190613c3a565b611f92565b005b34801561098c57600080fd5b506109a760048036038101906109a29190613e5b565b6120c3565b005b3480156109b557600080fd5b506109d060048036038101906109cb9190613d4d565b612298565b005b3480156109de57600080fd5b506109f960048036038101906109f49190613c93565b6123e2565b005b348015610a0757600080fd5b50610a226004803603810190610a1d9190613e9b565b6125b4565b604051610a2f9190613a68565b60405180910390f35b348015610a4457600080fd5b50610a4d61263b565b604051610a5a9190613a68565b60405180910390f35b348015610a6f57600080fd5b50610a8a6004803603810190610a859190613d4d565b612641565b005b348015610a9857600080fd5b50610ab36004803603810190610aae9190613d4d565b612807565b005b60155481565b606060038054610aca90613f0a565b80601f0160208091040260200160405190810160405280929190818152602001828054610af690613f0a565b8015610b435780601f10610b1857610100808354040283529160200191610b43565b820191906000526020600020905b815481529060010190602001808311610b2657829003601f168201915b5050505050905090565b6000610b61610b5a612a8c565b8484612a94565b6001905092915050565b610b73612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990613f87565b60405180910390fd5b6019811115610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613ff3565b60405180910390fd5b806009819055507f7c1445c98b278c9970d007fca6048704bcb25af7cc4a04eb56565d9a9f149ca3600954604051610c7e9190613a68565b60405180910390a150565b610c91612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613f87565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990614085565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1082604051610e4f9190613c1f565b60405180910390a25050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f40612a8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ffc5782811015610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90614117565b60405180910390fd5b610ffb85610ff3612a8c565b858403612a94565b5b611007858585612c5d565b60019150509392505050565b61101b612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190613f87565b60405180910390fd5b60646110b46112e7565b600a6110c09190614299565b6110c8610e81565b6110d29190614313565b6110dc9190614313565b81101561111e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611115906143b6565b60405180910390fd5b6111266112e7565b600a6111329190614299565b8161113d91906143d6565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426012546040516111749190613a68565b60405180910390a150565b611187612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90613f87565b60405180910390fd5b601160009054906101000a900460ff1615158115150361126b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112629061448a565b60405180910390fd5b80601160006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601160009054906101000a900460ff166040516112c39190613c1f565b60405180910390a150565b600a5481565b601460009054906101000a900460ff1681565b60006012905090565b60006113926112fd612a8c565b84846001600061130b612a8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138d91906144aa565b612a94565b6001905092915050565b60095481565b600f60009054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60149054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61144c612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613f87565b60405180910390fd5b601460009054906101000a900460ff16151581151503611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614550565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601460009054906101000a900460ff166040516115889190613c1f565b60405180910390a150565b60165481565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115ef612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167590613f87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61176d612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390613f87565b60405180910390fd5b600d60149054906101000a900460ff161561184c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611843906145bc565b60405180910390fd5b6001600d60146101000a81548160ff021916908315150217905550565b611871612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790613f87565b60405180910390fd5b6019811115611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90614628565b60405180910390fd5b80600a819055507f495ee53ee22006979ebc689a00ed737d7c13b6419142f82dcaea4ed95ac1e780600a5460405161197c9190613a68565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119b9612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90613f87565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190614085565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c82604051611b779190613c1f565b60405180910390a25050565b606060048054611b9290613f0a565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbe90613f0a565b8015611c0b5780601f10611be057610100808354040283529160200191611c0b565b820191906000526020600020905b815481529060010190602001808311611bee57829003601f168201915b5050505050905090565b611c1d612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca390613f87565b60405180910390fd5b80600f60006101000a81548160ff0219169083151502179055507f94da5f18dc9529c37f2af4ffa1921f49d8bb14b6e5fe22b0d6ddc94f102f9232600f60009054906101000a900460ff16604051611d049190613c1f565b60405180910390a150565b60008060016000611d1e612a8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd2906146ba565b60405180910390fd5b611def611de6612a8c565b85858403612a94565b600191505092915050565b611e02612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890613f87565b60405180910390fd5b600a811115611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc9061474c565b60405180910390fd5b80600b819055507f55a18e0066d4ca4f044c3c7bff35c003f6b02ad8a7c71b6d33ae71d262833251600b54604051611f0d9190613a68565b60405180910390a150565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611f82611f7b612a8c565b8484612c5d565b6001905092915050565b60125481565b611f9a612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202090613f87565b60405180910390fd5b620f4240612035610e81565b61203f9190614313565b8111612080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612077906147de565b60405180910390fd5b80600e819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600e546040516120b89190613a68565b60405180910390a150565b6120cb612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215190613f87565b60405180910390fd5b6103e86121656112e7565b600a6121719190614299565b612179610e81565b6121839190614313565b61218d9190614313565b82101580156121ce57506103e86121a26112e7565b600a6121ae9190614299565b6121b6610e81565b6121c09190614313565b6121ca9190614313565b8110155b61220d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220490614870565b60405180910390fd5b6122156112e7565b600a6122219190614299565b8261222c91906143d6565b60158190555061223a6112e7565b600a6122469190614299565b8161225191906143d6565b6016819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13160155460165460405161228c929190614890565b60405180910390a15050565b6122a0612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690613f87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361239e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959061492b565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123ea612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090613f87565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361250b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612502906149bd565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516125a89190613c1f565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b612649612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90613f87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e90614a4f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61280f612a8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289590613f87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129845760003373ffffffffffffffffffffffffffffffffffffffff16476040516128f890614aa0565b60006040518083038185875af1925050503d8060008114612935576040519150601f19603f3d011682016040523d82523d6000602084013e61293a565b606091505b505090508061297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614b01565b60405180910390fd5b50612a89565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129c49190613e40565b602060405180830381865afa1580156129e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a059190614b36565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612a42929190614b63565b6020604051808303816000875af1158015612a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a859190614ba1565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa90614c40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6990614cd2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c509190613a68565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614d64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3290614df6565b60405180910390fd5b600d60149054906101000a900460ff1680612d9f5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612df35750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614e62565b60405180910390fd5b60008103612e4b57612e46838360006134fd565b6134f8565b601460009054906101000a900460ff16156130ad57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612f095750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612f65575060001515601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015612fc1575060001515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b156130ac57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361306557601554811115613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790614ef4565b60405180910390fd5b6130ab565b6016548111156130aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a190614ef4565b60405180910390fd5b5b5b5b60006130b83061159f565b90506000600e5482101590508080156130de5750600f60019054906101000a900460ff16155b80156131375750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613197576001600f60016101000a81548160ff021916908315150217905550600f60009054906101000a900460ff161561317257600e5491505b61317b8261377c565b6000600f60016101000a81548160ff0219169083151502179055505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061323a5750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132515750600f60019054906101000a900460ff165b1561325f5760009050613325565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036132be576009549050613324565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361331d57600a549050613323565b600b5490505b5b5b60008111156133655760006064828661333e91906143d6565b6133489190614313565b905080856133569190614f14565b94506133638730836134fd565b505b601160009054906101000a900460ff16156134e95760001515601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561342a575060001515601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156134845750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156134e85760006134948661159f565b905060125485826134a591906144aa565b11156134e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dd90614fba565b60405180910390fd5b505b5b6134f48686866134fd565b5050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356390614d64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d290614df6565b60405180910390fd5b6135e6838383613a45565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561366c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136639061504c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136ff91906144aa565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137639190613a68565b60405180910390a3613776848484613a4a565b50505050565b60004790506000600267ffffffffffffffff81111561379e5761379d61506c565b5b6040519080825280602002602001820160405280156137cc5781602001602082028036833780820191505090505b50905030816000815181106137e4576137e361509b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561388b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138af91906150df565b816001815181106138c3576138c261509b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401613961959493929190615205565b600060405180830381600087803b15801561397b57600080fd5b505af115801561398f573d6000803e3d6000fd5b50505050600082476139a19190614f14565b90506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505090508015613a3e577f1309193d68e1a43bd32da5f04e07935cc194c20b2bd1813be5c6898b99dac4be8583604051613a35929190614890565b60405180910390a15b5050505050565b505050565b505050565b6000819050919050565b613a6281613a4f565b82525050565b6000602082019050613a7d6000830184613a59565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613abd578082015181840152602081019050613aa2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ae582613a83565b613aef8185613a8e565b9350613aff818560208601613a9f565b613b0881613ac9565b840191505092915050565b60006020820190508181036000830152613b2d8184613ada565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6582613b3a565b9050919050565b613b7581613b5a565b8114613b8057600080fd5b50565b600081359050613b9281613b6c565b92915050565b613ba181613a4f565b8114613bac57600080fd5b50565b600081359050613bbe81613b98565b92915050565b60008060408385031215613bdb57613bda613b35565b5b6000613be985828601613b83565b9250506020613bfa85828601613baf565b9150509250929050565b60008115159050919050565b613c1981613c04565b82525050565b6000602082019050613c346000830184613c10565b92915050565b600060208284031215613c5057613c4f613b35565b5b6000613c5e84828501613baf565b91505092915050565b613c7081613c04565b8114613c7b57600080fd5b50565b600081359050613c8d81613c67565b92915050565b60008060408385031215613caa57613ca9613b35565b5b6000613cb885828601613b83565b9250506020613cc985828601613c7e565b9150509250929050565b6000819050919050565b6000613cf8613cf3613cee84613b3a565b613cd3565b613b3a565b9050919050565b6000613d0a82613cdd565b9050919050565b6000613d1c82613cff565b9050919050565b613d2c81613d11565b82525050565b6000602082019050613d476000830184613d23565b92915050565b600060208284031215613d6357613d62613b35565b5b6000613d7184828501613b83565b91505092915050565b600080600060608486031215613d9357613d92613b35565b5b6000613da186828701613b83565b9350506020613db286828701613b83565b9250506040613dc386828701613baf565b9150509250925092565b600060208284031215613de357613de2613b35565b5b6000613df184828501613c7e565b91505092915050565b600060ff82169050919050565b613e1081613dfa565b82525050565b6000602082019050613e2b6000830184613e07565b92915050565b613e3a81613b5a565b82525050565b6000602082019050613e556000830184613e31565b92915050565b60008060408385031215613e7257613e71613b35565b5b6000613e8085828601613baf565b9250506020613e9185828601613baf565b9150509250929050565b60008060408385031215613eb257613eb1613b35565b5b6000613ec085828601613b83565b9250506020613ed185828601613b83565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f2257607f821691505b602082108103613f3557613f34613edb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f71602083613a8e565b9150613f7c82613f3b565b602082019050919050565b60006020820190508181036000830152613fa081613f64565b9050919050565b7f427579204665652063616e6e6f74206265206d6f7265207468616e2032352500600082015250565b6000613fdd601f83613a8e565b9150613fe882613fa7565b602082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b600061406f602483613a8e565b915061407a82614013565b604082019050919050565b6000602082019050818103600083015261409e81614062565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614101602883613a8e565b915061410c826140a5565b604082019050919050565b60006020820190508181036000830152614130816140f4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156141bd5780860481111561419957614198614137565b5b60018516156141a85780820291505b80810290506141b685614166565b945061417d565b94509492505050565b6000826141d65760019050614292565b816141e45760009050614292565b81600181146141fa576002811461420457614233565b6001915050614292565b60ff84111561421657614215614137565b5b8360020a91508482111561422d5761422c614137565b5b50614292565b5060208310610133831016604e8410600b84101617156142685782820a90508381111561426357614262614137565b5b614292565b6142758484846001614173565b9250905081840481111561428c5761428b614137565b5b81810290505b9392505050565b60006142a482613a4f565b91506142af83613dfa565b92506142dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846141c6565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061431e82613a4f565b915061432983613a4f565b925082614339576143386142e4565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006143a0602d83613a8e565b91506143ab82614344565b604082019050919050565b600060208201905081810360008301526143cf81614393565b9050919050565b60006143e182613a4f565b91506143ec83613a4f565b92508282026143fa81613a4f565b9150828204841483151761441157614410614137565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b6000614474602d83613a8e565b915061447f82614418565b604082019050919050565b600060208201905081810360008301526144a381614467565b9050919050565b60006144b582613a4f565b91506144c083613a4f565b92508282019050808211156144d8576144d7614137565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b600061453a603283613a8e565b9150614545826144de565b604082019050919050565b600060208201905081810360008301526145698161452d565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b60006145a6601a83613a8e565b91506145b182614570565b602082019050919050565b600060208201905081810360008301526145d581614599565b9050919050565b7f53656c6c204665652063616e6e6f74206265206d6f7265207468616e20323525600082015250565b6000614612602083613a8e565b915061461d826145dc565b602082019050919050565b6000602082019050818103600083015261464181614605565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006146a4602583613a8e565b91506146af82614648565b604082019050919050565b600060208201905081810360008301526146d381614697565b9050919050565b7f57616c6c657420746f2057616c6c6574205472616e736665722046656520636160008201527f6e6e6f74206265206d6f7265207468616e203130250000000000000000000000602082015250565b6000614736603583613a8e565b9150614741826146da565b604082019050919050565b6000602082019050818103600083015261476581614729565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b60006147c8603f83613a8e565b91506147d38261476c565b604082019050919050565b600060208201905081810360008301526147f7816147bb565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b600061485a603f83613a8e565b9150614865826147fe565b604082019050919050565b600060208201905081810360008301526148898161484d565b9050919050565b60006040820190506148a56000830185613a59565b6148b26020830184613a59565b9392505050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614915602b83613a8e565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006149a7602a83613a8e565b91506149b28261494b565b604082019050919050565b600060208201905081810360008301526149d68161499a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a39602683613a8e565b9150614a44826149dd565b604082019050919050565b60006020820190508181036000830152614a6881614a2c565b9050919050565b600081905092915050565b50565b6000614a8a600083614a6f565b9150614a9582614a7a565b600082019050919050565b6000614aab82614a7d565b9150819050919050565b7f436c61696d206661696c65640000000000000000000000000000000000000000600082015250565b6000614aeb600c83613a8e565b9150614af682614ab5565b602082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b600081519050614b3081613b98565b92915050565b600060208284031215614b4c57614b4b613b35565b5b6000614b5a84828501614b21565b91505092915050565b6000604082019050614b786000830185613e31565b614b856020830184613a59565b9392505050565b600081519050614b9b81613c67565b92915050565b600060208284031215614bb757614bb6613b35565b5b6000614bc584828501614b8c565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2a602483613a8e565b9150614c3582614bce565b604082019050919050565b60006020820190508181036000830152614c5981614c1d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cbc602283613a8e565b9150614cc782614c60565b604082019050919050565b60006020820190508181036000830152614ceb81614caf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d4e602583613a8e565b9150614d5982614cf2565b604082019050919050565b60006020820190508181036000830152614d7d81614d41565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de0602383613a8e565b9150614deb82614d84565b604082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b6000614e4c601a83613a8e565b9150614e5782614e16565b602082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b6000614ede603b83613a8e565b9150614ee982614e82565b604082019050919050565b60006020820190508181036000830152614f0d81614ed1565b9050919050565b6000614f1f82613a4f565b9150614f2a83613a4f565b9250828203905081811115614f4257614f41614137565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b6000614fa4603083613a8e565b9150614faf82614f48565b604082019050919050565b60006020820190508181036000830152614fd381614f97565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615036602683613a8e565b915061504182614fda565b604082019050919050565b6000602082019050818103600083015261506581615029565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506150d981613b6c565b92915050565b6000602082840312156150f5576150f4613b35565b5b6000615103848285016150ca565b91505092915050565b6000819050919050565b600061513161512c6151278461510c565b613cd3565b613a4f565b9050919050565b61514181615116565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61517c81613b5a565b82525050565b600061518e8383615173565b60208301905092915050565b6000602082019050919050565b60006151b282615147565b6151bc8185615152565b93506151c783615163565b8060005b838110156151f85781516151df8882615182565b97506151ea8361519a565b9250506001810190506151cb565b5085935050505092915050565b600060a08201905061521a6000830188613a59565b6152276020830187615138565b818103604083015261523981866151a7565b90506152486060830185613e31565b6152556080830184613a59565b969550505050505056fea2646970667358221220d1204df64792fbf6ddc401f2c0b51acd093916cde5c79af64645c087eed6d78864736f6c63430008120033

Deployed Bytecode Sourcemap

17236:12475:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28052:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12521:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13435:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21475:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29195:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17276:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12842:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29567:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26581:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13612:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26995:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26670:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17452:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27996:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12741:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14193:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17424:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17719:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17324:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17641;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21342:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28147:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28098:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17481;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12958:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11708:148;;;;;;;;;;;;;:::i;:::-;;17530:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20454:146;;;;;;;;;;;;;:::i;:::-;;21678:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11494:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27379:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12629:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25629:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14416:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21889:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27744:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13093:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26631:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25321:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28503:684;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22247:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21044:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13276:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17679:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11864:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20610:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28052:39;;;;:::o;12521:100::-;12575:13;12608:5;12601:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12521:100;:::o;13435:169::-;13518:4;13535:39;13544:12;:10;:12::i;:::-;13558:7;13567:6;13535:8;:39::i;:::-;13592:4;13585:11;;13435:169;;;;:::o;21475:195::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21560:2:::1;21549:7;:13;;21541:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21618:7;21609:6;:16;;;;21641:21;21655:6;;21641:21;;;;;;:::i;:::-;;;;;;;;21475:195:::0;:::o;29195:364::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29359:7:::1;29321:45;;:25;:34;29347:7;29321:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;29299:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29479:7;29442:25;:34;29468:7;29442:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;29534:7;29502:49;;;29543:7;29502:49;;;;;;:::i;:::-;;;;;;;;29195:364:::0;;:::o;17276:41::-;;;;;;;;;;;;;:::o;12842:108::-;12903:7;12930:12;;12923:19;;12842:108;:::o;29567:141::-;29642:4;29666:25;:34;29692:7;29666:34;;;;;;;;;;;;;;;;;;;;;;;;;29659:41;;29567:141;;;:::o;26581:43::-;;;;;;;;;;;;;:::o;13612:573::-;13752:4;13769:24;13796:11;:19;13808:6;13796:19;;;;;;;;;;;;;;;:33;13816:12;:10;:12::i;:::-;13796:33;;;;;;;;;;;;;;;;13769:60;;13864:17;13844:16;:37;13840:265;;13926:6;13906:16;:26;;13898:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14021:57;14030:6;14038:12;:10;:12::i;:::-;14071:6;14052:16;:25;14021:8;:57::i;:::-;13840:265;14117:36;14127:6;14135:9;14146:6;14117:9;:36::i;:::-;14173:4;14166:11;;;13612:573;;;;;:::o;26995:376::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27160:3:::1;27145:10;:8;:10::i;:::-;27139:2;:16;;;;:::i;:::-;27122:13;:11;:13::i;:::-;:34;;;;:::i;:::-;27121:42;;;;:::i;:::-;27101:16;:62;;27079:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27292:10;:8;:10::i;:::-;27286:2;:16;;;;:::i;:::-;27266;:37;;;;:::i;:::-;27248:15;:55;;;;27319:44;27347:15;;27319:44;;;;;;:::i;:::-;;;;;;;;26995:376:::0;:::o;26670:317::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26778:21:::1;;;;;;;;;;;26768:31;;:6;:31;;::::0;26746:127:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26908:6;26884:21;;:30;;;;;;;;;;;;;;;;;;26930:49;26957:21;;;;;;;;;;;26930:49;;;;;;:::i;:::-;;;;;;;;26670:317:::0;:::o;17452:22::-;;;;:::o;27996:49::-;;;;;;;;;;;;;:::o;12741:93::-;12799:5;12824:2;12817:9;;12741:93;:::o;14193:215::-;14281:4;14298:80;14307:12;:10;:12::i;:::-;14321:7;14367:10;14330:11;:25;14342:12;:10;:12::i;:::-;14330:25;;;;;;;;;;;;;;;:34;14356:7;14330:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14298:8;:80::i;:::-;14396:4;14389:11;;14193:215;;;;:::o;17424:21::-;;;;:::o;17719:28::-;;;;;;;;;;;;;:::o;17324:29::-;;;;;;;;;;;;;:::o;17641:::-;;;;;;;;;;;;;:::o;21342:125::-;21407:4;21431:19;:28;21451:7;21431:28;;;;;;;;;;;;;;;;;;;;;;;;;21424:35;;21342:125;;;:::o;28147:348::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28261:26:::1;;;;;;;;;;;28251:36;;:6;:36;;::::0;28229:137:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28406:6;28377:26;;:35;;;;;;;;;;;;;;;;;;28428:59;28460:26;;;;;;;;;;;28428:59;;;;;;:::i;:::-;;;;;;;;28147:348:::0;:::o;28098:40::-;;;;:::o;17481:::-;;;;:::o;12958:127::-;13032:7;13059:9;:18;13069:7;13059:18;;;;;;;;;;;;;;;;13052:25;;12958:127;;;:::o;11708:148::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11815:1:::1;11778:40;;11799:6;;;;;;;;;;;11778:40;;;;;;;;;;;;11846:1;11829:6;;:19;;;;;;;;;;;;;;;;;;11708:148::o:0;17530:30::-;;;;;;;;;;;;;:::o;20454:146::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20515:14:::1;;;;;;;;;;;20514:15;20506:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20588:4;20571:14;;:21;;;;;;;;;;;;;;;;;;20454:146::o:0;21678:203::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21766:2:::1;21754:8;:14;;21746:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21826:8;21816:7;:18;;;;21850:23;21865:7;;21850:23;;;;;;:::i;:::-;;;;;;;;21678:203:::0;:::o;11494:79::-;11532:7;11559:6;;;;;;;;;;;11552:13;;11494:79;:::o;27379:357::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27537:7:::1;27495:49;;:29;:38;27525:7;27495:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;27473:136:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27661:7;27620:29;:38;27650:7;27620:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;27711:7;27684:44;;;27720:7;27684:44;;;;;;:::i;:::-;;;;;;;;27379:357:::0;;:::o;12629:104::-;12685:13;12718:7;12711:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12629:104;:::o;25629:165::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25721:14:::1;25705:13;;:30;;;;;;;;;;;;;;;;;;25751:35;25772:13;;;;;;;;;;;25751:35;;;;;;:::i;:::-;;;;;;;;25629:165:::0;:::o;14416:413::-;14509:4;14526:24;14553:11;:25;14565:12;:10;:12::i;:::-;14553:25;;;;;;;;;;;;;;;:34;14579:7;14553:34;;;;;;;;;;;;;;;;14526:61;;14626:15;14606:16;:35;;14598:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14719:67;14728:12;:10;:12::i;:::-;14742:7;14770:15;14751:16;:34;14719:8;:67::i;:::-;14817:4;14810:11;;;14416:413;;;;:::o;21889:350::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22031:2:::1;22001:26;:32;;21993:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;22130:26;22102:25;:54;;;;22172:59;22205:25;;22172:59;;;;;;:::i;:::-;;;;;;;;21889:350:::0;:::o;27744:145::-;27819:4;27843:29;:38;27873:7;27843:38;;;;;;;;;;;;;;;;;;;;;;;;;27836:45;;27744:145;;;:::o;13093:175::-;13179:4;13196:42;13206:12;:10;:12::i;:::-;13220:9;13231:6;13196:9;:42::i;:::-;13256:4;13249:11;;13093:175;;;;:::o;26631:30::-;;;;:::o;25321:300::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25436:7:::1;25420:13;:11;:13::i;:::-;:23;;;;:::i;:::-;25408:9;:35;25400:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25543:9;25522:18;:30;;;;25568:45;25594:18;;25568:45;;;;;;:::i;:::-;;;;;;;;25321:300:::0;:::o;28503:684::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28726:4:::1;28711:10;:8;:10::i;:::-;28705:2;:16;;;;:::i;:::-;28688:13;:11;:13::i;:::-;:34;;;;:::i;:::-;28687:43;;;;:::i;:::-;28658:24;:72;;:161;;;;;28815:4;28801:10;:8;:10::i;:::-;28795:2;:16;;;;:::i;:::-;28778:13;:11;:13::i;:::-;:34;;;;:::i;:::-;28777:42;;;;:::i;:::-;28748:25;:71;;28658:161;28636:275;;;;;;;;;;;;:::i;:::-;;;;;;;;;28985:10;:8;:10::i;:::-;28979:2;:16;;;;:::i;:::-;28950:24;:46;;;;:::i;:::-;28923:23;:73;;;;29069:10;:8;:10::i;:::-;29063:2;:16;;;;:::i;:::-;29034:25;:46;;;;:::i;:::-;29007:24;:73;;;;29096:83;29129:23;;29154:24;;29096:83;;;;;;;:::i;:::-;;;;;;;;28503:684:::0;;:::o;22247:226::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22370:1:::1;22342:30;;:16;:30;;::::0;22334:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22449:16;22431:15;;:34;;;;;;;;;;;;;;;;;;22247:226:::0;:::o;21044:290::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21170:8:::1;21138:40;;:19;:28;21158:7;21138:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;21130:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21266:8;21235:19;:28;21255:7;21235:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21308:7;21292:34;;;21317:8;21292:34;;;;;;:::i;:::-;;;;;;;;21044:290:::0;;:::o;13276:151::-;13365:7;13392:11;:18;13404:5;13392:18;;;;;;;;;;;;;;;:27;13411:7;13392:27;;;;;;;;;;;;;;;;13385:34;;13276:151;;;;:::o;17679:33::-;;;;:::o;11864:244::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11973:1:::1;11953:22;;:8;:22;;::::0;11945:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12063:8;12034:38;;12055:6;;;;;;;;;;;12034:38;;;;;;;;;;;;12092:8;12083:6;;:17;;;;;;;;;;;;;;;;;;11864:244:::0;:::o;20610:426::-;11631:12;:10;:12::i;:::-;11621:22;;:6;;;;;;;;;;;:22;;;11613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20702:3:::1;20685:21;;:5;:21;;::::0;20681:189:::1;;20724:12;20741:10;:15;;20764:21;20741:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20723:67;;;20813:7;20805:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;20852:7;;;20681:189;20880:17;20907:5;20880:33;;20924:15;20942:10;:20;;;20971:4;20942:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20924:53;;20988:10;:19;;;21008:10;21020:7;20988:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20670:366;;11691:1;20610:426:::0;:::o;10817:98::-;10870:7;10897:10;10890:17;;10817:98;:::o;16584:380::-;16737:1;16720:19;;:5;:19;;;16712:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16818:1;16799:21;;:7;:21;;;16791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:6;16872:11;:18;16884:5;16872:18;;;;;;;;;;;;;;;:27;16891:7;16872:27;;;;;;;;;;;;;;;:36;;;;16940:7;16924:32;;16933:5;16924:32;;;16949:6;16924:32;;;;;;:::i;:::-;;;;;;;;16584:380;;;:::o;22485:2828::-;22598:1;22582:18;;:4;:18;;;22574:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22675:1;22661:16;;:2;:16;;;22653:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22736:14;;;;;;;;;;;:43;;;;22754:19;:25;22774:4;22754:25;;;;;;;;;;;;;;;;;;;;;;;;;22736:43;:70;;;;22783:19;:23;22803:2;22783:23;;;;;;;;;;;;;;;;;;;;;;;;;22736:70;22728:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;22876:1;22866:6;:11;22862:93;;22894:28;22910:4;22916:2;22920:1;22894:15;:28::i;:::-;22937:7;;22862:93;22971:26;;;;;;;;;;;22967:770;;;23037:13;;;;;;;;;;;23029:21;;:4;:21;;;:44;;;;23060:13;;;;;;;;;;;23054:19;;:2;:19;;;23029:44;23028:107;;;;;23130:5;23095:40;;:25;:31;23121:4;23095:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;23028:107;:169;;;;;23192:5;23157:40;;:25;:29;23183:2;23157:29;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;23028:169;23024:702;;;23244:13;;;;;;;;;;;23236:21;;:4;:21;;;23232:479;;23326:23;;23316:6;:33;;23282:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;23232:479;;;23555:24;;23545:6;:34;;23511:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;23232:479;23024:702;22967:770;23747:28;23778:24;23796:4;23778:9;:24::i;:::-;23747:55;;23815:12;23854:18;;23830:20;:42;;23815:57;;23889:7;:33;;;;;23914:8;;;;;;;;;;;23913:9;23889:33;:69;;;;;23945:13;;;;;;;;;;;23939:19;;:2;:19;;;23889:69;23885:322;;;23996:4;23985:8;;:15;;;;;;;;;;;;;;;;;;24021:13;;;;;;;;;;;24017:95;;;24078:18;;24055:41;;24017:95;24128:26;24133:20;24128:4;:26::i;:::-;24190:5;24179:8;;:16;;;;;;;;;;;;;;;;;;23885:322;24219:18;24252:19;:25;24272:4;24252:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24281:19;:23;24301:2;24281:23;;;;;;;;;;;;;;;;;;;;;;;;;24252:52;:64;;;;24308:8;;;;;;;;;;;24252:64;24248:339;;;24346:1;24333:14;;24248:339;;;24377:13;;;;;;;;;;;24369:21;;:4;:21;;;24365:222;;24420:6;;24407:19;;24365:222;;;24454:13;;;;;;;;;;;24448:19;;:2;:19;;;24444:143;;24497:7;;24484:20;;24444:143;;;24550:25;;24537:38;;24444:143;24365:222;24248:339;24616:1;24603:10;:14;24599:183;;;24634:12;24673:3;24659:10;24650:6;:19;;;;:::i;:::-;24649:27;;;;:::i;:::-;24634:42;;24709:4;24700:6;:13;;;;:::i;:::-;24691:22;;24728:42;24744:4;24758;24765;24728:15;:42::i;:::-;24619:163;24599:183;24798:21;;;;;;;;;;;24794:466;;;24880:5;24840:45;;:29;:35;24870:4;24840:35;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;:112;;;;;24947:5;24907:45;;:29;:33;24937:2;24907:33;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;24840:112;:152;;;;;24979:13;;;;;;;;;;;24973:19;;:2;:19;;;;24840:152;24836:413;;;25027:12;25043:13;25053:2;25043:9;:13::i;:::-;25027:29;;25125:15;;25115:6;25105:7;:16;;;;:::i;:::-;:35;;25075:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;25008:241;24836:413;24794:466;25272:33;25288:4;25294:2;25298:6;25272:15;:33::i;:::-;22563:2750;;;22485:2828;;;;:::o;14837:733::-;14995:1;14977:20;;:6;:20;;;14969:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15079:1;15058:23;;:9;:23;;;15050:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15134:47;15155:6;15163:9;15174:6;15134:20;:47::i;:::-;15194:21;15218:9;:17;15228:6;15218:17;;;;;;;;;;;;;;;;15194:41;;15271:6;15254:13;:23;;15246:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15392:6;15376:13;:22;15356:9;:17;15366:6;15356:17;;;;;;;;;;;;;;;:42;;;;15444:6;15420:9;:20;15430:9;15420:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15485:9;15468:35;;15477:6;15468:35;;;15496:6;15468:35;;;;;;:::i;:::-;;;;;;;;15516:46;15536:6;15544:9;15555:6;15516:19;:46::i;:::-;14958:612;14837:733;;;:::o;25802:669::-;25856:22;25881:21;25856:46;;25915:21;25953:1;25939:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25915:40;;25984:4;25966;25971:1;25966:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26010:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26000:4;26005:1;26000:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26045:15;;;;;;;;;;;:66;;;26126:11;26152:1;26168:4;26195;26215:15;26045:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26244:18;26289:14;26265:21;:38;;;;:::i;:::-;26244:59;;26316:12;26339:15;;;;;;;;;;;26331:29;;:41;26361:10;26331:41;;;;;;;;;;;;;;;;;;;;;;;26316:56;;26387:7;26383:81;;;26416:36;26428:11;26441:10;26416:36;;;;;;;:::i;:::-;;;;;;;;26383:81;25845:626;;;;25802:669;:::o;16972:125::-;;;;:::o;17105:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:116::-;4203:21;4218:5;4203:21;:::i;:::-;4196:5;4193:32;4183:60;;4239:1;4236;4229:12;4183:60;4133:116;:::o;4255:133::-;4298:5;4336:6;4323:20;4314:29;;4352:30;4376:5;4352:30;:::i;:::-;4255:133;;;;:::o;4394:468::-;4459:6;4467;4516:2;4504:9;4495:7;4491:23;4487:32;4484:119;;;4522:79;;:::i;:::-;4484:119;4642:1;4667:53;4712:7;4703:6;4692:9;4688:22;4667:53;:::i;:::-;4657:63;;4613:117;4769:2;4795:50;4837:7;4828:6;4817:9;4813:22;4795:50;:::i;:::-;4785:60;;4740:115;4394:468;;;;;:::o;4868:60::-;4896:3;4917:5;4910:12;;4868:60;;;:::o;4934:142::-;4984:9;5017:53;5035:34;5044:24;5062:5;5044:24;:::i;:::-;5035:34;:::i;:::-;5017:53;:::i;:::-;5004:66;;4934:142;;;:::o;5082:126::-;5132:9;5165:37;5196:5;5165:37;:::i;:::-;5152:50;;5082:126;;;:::o;5214:152::-;5290:9;5323:37;5354:5;5323:37;:::i;:::-;5310:50;;5214:152;;;:::o;5372:183::-;5485:63;5542:5;5485:63;:::i;:::-;5480:3;5473:76;5372:183;;:::o;5561:274::-;5680:4;5718:2;5707:9;5703:18;5695:26;;5731:97;5825:1;5814:9;5810:17;5801:6;5731:97;:::i;:::-;5561:274;;;;:::o;5841:329::-;5900:6;5949:2;5937:9;5928:7;5924:23;5920:32;5917:119;;;5955:79;;:::i;:::-;5917:119;6075:1;6100:53;6145:7;6136:6;6125:9;6121:22;6100:53;:::i;:::-;6090:63;;6046:117;5841:329;;;;:::o;6176:619::-;6253:6;6261;6269;6318:2;6306:9;6297:7;6293:23;6289:32;6286:119;;;6324:79;;:::i;:::-;6286:119;6444:1;6469:53;6514:7;6505:6;6494:9;6490:22;6469:53;:::i;:::-;6459:63;;6415:117;6571:2;6597:53;6642:7;6633:6;6622:9;6618:22;6597:53;:::i;:::-;6587:63;;6542:118;6699:2;6725:53;6770:7;6761:6;6750:9;6746:22;6725:53;:::i;:::-;6715:63;;6670:118;6176:619;;;;;:::o;6801:323::-;6857:6;6906:2;6894:9;6885:7;6881:23;6877:32;6874:119;;;6912:79;;:::i;:::-;6874:119;7032:1;7057:50;7099:7;7090:6;7079:9;7075:22;7057:50;:::i;:::-;7047:60;;7003:114;6801:323;;;;:::o;7130:86::-;7165:7;7205:4;7198:5;7194:16;7183:27;;7130:86;;;:::o;7222:112::-;7305:22;7321:5;7305:22;:::i;:::-;7300:3;7293:35;7222:112;;:::o;7340:214::-;7429:4;7467:2;7456:9;7452:18;7444:26;;7480:67;7544:1;7533:9;7529:17;7520:6;7480:67;:::i;:::-;7340:214;;;;:::o;7560:118::-;7647:24;7665:5;7647:24;:::i;:::-;7642:3;7635:37;7560:118;;:::o;7684:222::-;7777:4;7815:2;7804:9;7800:18;7792:26;;7828:71;7896:1;7885:9;7881:17;7872:6;7828:71;:::i;:::-;7684:222;;;;:::o;7912:474::-;7980:6;7988;8037:2;8025:9;8016:7;8012:23;8008:32;8005:119;;;8043:79;;:::i;:::-;8005:119;8163:1;8188:53;8233:7;8224:6;8213:9;8209:22;8188:53;:::i;:::-;8178:63;;8134:117;8290:2;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8261:118;7912:474;;;;;:::o;8392:::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:180::-;8920:77;8917:1;8910:88;9017:4;9014:1;9007:15;9041:4;9038:1;9031:15;9058:320;9102:6;9139:1;9133:4;9129:12;9119:22;;9186:1;9180:4;9176:12;9207:18;9197:81;;9263:4;9255:6;9251:17;9241:27;;9197:81;9325:2;9317:6;9314:14;9294:18;9291:38;9288:84;;9344:18;;:::i;:::-;9288:84;9109:269;9058:320;;;:::o;9384:182::-;9524:34;9520:1;9512:6;9508:14;9501:58;9384:182;:::o;9572:366::-;9714:3;9735:67;9799:2;9794:3;9735:67;:::i;:::-;9728:74;;9811:93;9900:3;9811:93;:::i;:::-;9929:2;9924:3;9920:12;9913:19;;9572:366;;;:::o;9944:419::-;10110:4;10148:2;10137:9;10133:18;10125:26;;10197:9;10191:4;10187:20;10183:1;10172:9;10168:17;10161:47;10225:131;10351:4;10225:131;:::i;:::-;10217:139;;9944:419;;;:::o;10369:181::-;10509:33;10505:1;10497:6;10493:14;10486:57;10369:181;:::o;10556:366::-;10698:3;10719:67;10783:2;10778:3;10719:67;:::i;:::-;10712:74;;10795:93;10884:3;10795:93;:::i;:::-;10913:2;10908:3;10904:12;10897:19;;10556:366;;;:::o;10928:419::-;11094:4;11132:2;11121:9;11117:18;11109:26;;11181:9;11175:4;11171:20;11167:1;11156:9;11152:17;11145:47;11209:131;11335:4;11209:131;:::i;:::-;11201:139;;10928:419;;;:::o;11353:223::-;11493:34;11489:1;11481:6;11477:14;11470:58;11562:6;11557:2;11549:6;11545:15;11538:31;11353:223;:::o;11582:366::-;11724:3;11745:67;11809:2;11804:3;11745:67;:::i;:::-;11738:74;;11821:93;11910:3;11821:93;:::i;:::-;11939:2;11934:3;11930:12;11923:19;;11582:366;;;:::o;11954:419::-;12120:4;12158:2;12147:9;12143:18;12135:26;;12207:9;12201:4;12197:20;12193:1;12182:9;12178:17;12171:47;12235:131;12361:4;12235:131;:::i;:::-;12227:139;;11954:419;;;:::o;12379:227::-;12519:34;12515:1;12507:6;12503:14;12496:58;12588:10;12583:2;12575:6;12571:15;12564:35;12379:227;:::o;12612:366::-;12754:3;12775:67;12839:2;12834:3;12775:67;:::i;:::-;12768:74;;12851:93;12940:3;12851:93;:::i;:::-;12969:2;12964:3;12960:12;12953:19;;12612:366;;;:::o;12984:419::-;13150:4;13188:2;13177:9;13173:18;13165:26;;13237:9;13231:4;13227:20;13223:1;13212:9;13208:17;13201:47;13265:131;13391:4;13265:131;:::i;:::-;13257:139;;12984:419;;;:::o;13409:180::-;13457:77;13454:1;13447:88;13554:4;13551:1;13544:15;13578:4;13575:1;13568:15;13595:102;13637:8;13684:5;13681:1;13677:13;13656:34;;13595:102;;;:::o;13703:848::-;13764:5;13771:4;13795:6;13786:15;;13819:5;13810:14;;13833:712;13854:1;13844:8;13841:15;13833:712;;;13949:4;13944:3;13940:14;13934:4;13931:24;13928:50;;;13958:18;;:::i;:::-;13928:50;14008:1;13998:8;13994:16;13991:451;;;14423:4;14416:5;14412:16;14403:25;;13991:451;14473:4;14467;14463:15;14455:23;;14503:32;14526:8;14503:32;:::i;:::-;14491:44;;13833:712;;;13703:848;;;;;;;:::o;14557:1073::-;14611:5;14802:8;14792:40;;14823:1;14814:10;;14825:5;;14792:40;14851:4;14841:36;;14868:1;14859:10;;14870:5;;14841:36;14937:4;14985:1;14980:27;;;;15021:1;15016:191;;;;14930:277;;14980:27;14998:1;14989:10;;15000:5;;;15016:191;15061:3;15051:8;15048:17;15045:43;;;15068:18;;:::i;:::-;15045:43;15117:8;15114:1;15110:16;15101:25;;15152:3;15145:5;15142:14;15139:40;;;15159:18;;:::i;:::-;15139:40;15192:5;;;14930:277;;15316:2;15306:8;15303:16;15297:3;15291:4;15288:13;15284:36;15266:2;15256:8;15253:16;15248:2;15242:4;15239:12;15235:35;15219:111;15216:246;;;15372:8;15366:4;15362:19;15353:28;;15407:3;15400:5;15397:14;15394:40;;;15414:18;;:::i;:::-;15394:40;15447:5;;15216:246;15487:42;15525:3;15515:8;15509:4;15506:1;15487:42;:::i;:::-;15472:57;;;;15561:4;15556:3;15552:14;15545:5;15542:25;15539:51;;;15570:18;;:::i;:::-;15539:51;15619:4;15612:5;15608:16;15599:25;;14557:1073;;;;;;:::o;15636:281::-;15694:5;15718:23;15736:4;15718:23;:::i;:::-;15710:31;;15762:25;15778:8;15762:25;:::i;:::-;15750:37;;15806:104;15843:66;15833:8;15827:4;15806:104;:::i;:::-;15797:113;;15636:281;;;;:::o;15923:180::-;15971:77;15968:1;15961:88;16068:4;16065:1;16058:15;16092:4;16089:1;16082:15;16109:185;16149:1;16166:20;16184:1;16166:20;:::i;:::-;16161:25;;16200:20;16218:1;16200:20;:::i;:::-;16195:25;;16239:1;16229:35;;16244:18;;:::i;:::-;16229:35;16286:1;16283;16279:9;16274:14;;16109:185;;;;:::o;16300:232::-;16440:34;16436:1;16428:6;16424:14;16417:58;16509:15;16504:2;16496:6;16492:15;16485:40;16300:232;:::o;16538:366::-;16680:3;16701:67;16765:2;16760:3;16701:67;:::i;:::-;16694:74;;16777:93;16866:3;16777:93;:::i;:::-;16895:2;16890:3;16886:12;16879:19;;16538:366;;;:::o;16910:419::-;17076:4;17114:2;17103:9;17099:18;17091:26;;17163:9;17157:4;17153:20;17149:1;17138:9;17134:17;17127:47;17191:131;17317:4;17191:131;:::i;:::-;17183:139;;16910:419;;;:::o;17335:410::-;17375:7;17398:20;17416:1;17398:20;:::i;:::-;17393:25;;17432:20;17450:1;17432:20;:::i;:::-;17427:25;;17487:1;17484;17480:9;17509:30;17527:11;17509:30;:::i;:::-;17498:41;;17688:1;17679:7;17675:15;17672:1;17669:22;17649:1;17642:9;17622:83;17599:139;;17718:18;;:::i;:::-;17599:139;17383:362;17335:410;;;;:::o;17751:232::-;17891:34;17887:1;17879:6;17875:14;17868:58;17960:15;17955:2;17947:6;17943:15;17936:40;17751:232;:::o;17989:366::-;18131:3;18152:67;18216:2;18211:3;18152:67;:::i;:::-;18145:74;;18228:93;18317:3;18228:93;:::i;:::-;18346:2;18341:3;18337:12;18330:19;;17989:366;;;:::o;18361:419::-;18527:4;18565:2;18554:9;18550:18;18542:26;;18614:9;18608:4;18604:20;18600:1;18589:9;18585:17;18578:47;18642:131;18768:4;18642:131;:::i;:::-;18634:139;;18361:419;;;:::o;18786:191::-;18826:3;18845:20;18863:1;18845:20;:::i;:::-;18840:25;;18879:20;18897:1;18879:20;:::i;:::-;18874:25;;18922:1;18919;18915:9;18908:16;;18943:3;18940:1;18937:10;18934:36;;;18950:18;;:::i;:::-;18934:36;18786:191;;;;:::o;18983:237::-;19123:34;19119:1;19111:6;19107:14;19100:58;19192:20;19187:2;19179:6;19175:15;19168:45;18983:237;:::o;19226:366::-;19368:3;19389:67;19453:2;19448:3;19389:67;:::i;:::-;19382:74;;19465:93;19554:3;19465:93;:::i;:::-;19583:2;19578:3;19574:12;19567:19;;19226:366;;;:::o;19598:419::-;19764:4;19802:2;19791:9;19787:18;19779:26;;19851:9;19845:4;19841:20;19837:1;19826:9;19822:17;19815:47;19879:131;20005:4;19879:131;:::i;:::-;19871:139;;19598:419;;;:::o;20023:176::-;20163:28;20159:1;20151:6;20147:14;20140:52;20023:176;:::o;20205:366::-;20347:3;20368:67;20432:2;20427:3;20368:67;:::i;:::-;20361:74;;20444:93;20533:3;20444:93;:::i;:::-;20562:2;20557:3;20553:12;20546:19;;20205:366;;;:::o;20577:419::-;20743:4;20781:2;20770:9;20766:18;20758:26;;20830:9;20824:4;20820:20;20816:1;20805:9;20801:17;20794:47;20858:131;20984:4;20858:131;:::i;:::-;20850:139;;20577:419;;;:::o;21002:182::-;21142:34;21138:1;21130:6;21126:14;21119:58;21002:182;:::o;21190:366::-;21332:3;21353:67;21417:2;21412:3;21353:67;:::i;:::-;21346:74;;21429:93;21518:3;21429:93;:::i;:::-;21547:2;21542:3;21538:12;21531:19;;21190:366;;;:::o;21562:419::-;21728:4;21766:2;21755:9;21751:18;21743:26;;21815:9;21809:4;21805:20;21801:1;21790:9;21786:17;21779:47;21843:131;21969:4;21843:131;:::i;:::-;21835:139;;21562:419;;;:::o;21987:224::-;22127:34;22123:1;22115:6;22111:14;22104:58;22196:7;22191:2;22183:6;22179:15;22172:32;21987:224;:::o;22217:366::-;22359:3;22380:67;22444:2;22439:3;22380:67;:::i;:::-;22373:74;;22456:93;22545:3;22456:93;:::i;:::-;22574:2;22569:3;22565:12;22558:19;;22217:366;;;:::o;22589:419::-;22755:4;22793:2;22782:9;22778:18;22770:26;;22842:9;22836:4;22832:20;22828:1;22817:9;22813:17;22806:47;22870:131;22996:4;22870:131;:::i;:::-;22862:139;;22589:419;;;:::o;23014:240::-;23154:34;23150:1;23142:6;23138:14;23131:58;23223:23;23218:2;23210:6;23206:15;23199:48;23014:240;:::o;23260:366::-;23402:3;23423:67;23487:2;23482:3;23423:67;:::i;:::-;23416:74;;23499:93;23588:3;23499:93;:::i;:::-;23617:2;23612:3;23608:12;23601:19;;23260:366;;;:::o;23632:419::-;23798:4;23836:2;23825:9;23821:18;23813:26;;23885:9;23879:4;23875:20;23871:1;23860:9;23856:17;23849:47;23913:131;24039:4;23913:131;:::i;:::-;23905:139;;23632:419;;;:::o;24057:250::-;24197:34;24193:1;24185:6;24181:14;24174:58;24266:33;24261:2;24253:6;24249:15;24242:58;24057:250;:::o;24313:366::-;24455:3;24476:67;24540:2;24535:3;24476:67;:::i;:::-;24469:74;;24552:93;24641:3;24552:93;:::i;:::-;24670:2;24665:3;24661:12;24654:19;;24313:366;;;:::o;24685:419::-;24851:4;24889:2;24878:9;24874:18;24866:26;;24938:9;24932:4;24928:20;24924:1;24913:9;24909:17;24902:47;24966:131;25092:4;24966:131;:::i;:::-;24958:139;;24685:419;;;:::o;25110:250::-;25250:34;25246:1;25238:6;25234:14;25227:58;25319:33;25314:2;25306:6;25302:15;25295:58;25110:250;:::o;25366:366::-;25508:3;25529:67;25593:2;25588:3;25529:67;:::i;:::-;25522:74;;25605:93;25694:3;25605:93;:::i;:::-;25723:2;25718:3;25714:12;25707:19;;25366:366;;;:::o;25738:419::-;25904:4;25942:2;25931:9;25927:18;25919:26;;25991:9;25985:4;25981:20;25977:1;25966:9;25962:17;25955:47;26019:131;26145:4;26019:131;:::i;:::-;26011:139;;25738:419;;;:::o;26163:332::-;26284:4;26322:2;26311:9;26307:18;26299:26;;26335:71;26403:1;26392:9;26388:17;26379:6;26335:71;:::i;:::-;26416:72;26484:2;26473:9;26469:18;26460:6;26416:72;:::i;:::-;26163:332;;;;;:::o;26501:230::-;26641:34;26637:1;26629:6;26625:14;26618:58;26710:13;26705:2;26697:6;26693:15;26686:38;26501:230;:::o;26737:366::-;26879:3;26900:67;26964:2;26959:3;26900:67;:::i;:::-;26893:74;;26976:93;27065:3;26976:93;:::i;:::-;27094:2;27089:3;27085:12;27078:19;;26737:366;;;:::o;27109:419::-;27275:4;27313:2;27302:9;27298:18;27290:26;;27362:9;27356:4;27352:20;27348:1;27337:9;27333:17;27326:47;27390:131;27516:4;27390:131;:::i;:::-;27382:139;;27109:419;;;:::o;27534:229::-;27674:34;27670:1;27662:6;27658:14;27651:58;27743:12;27738:2;27730:6;27726:15;27719:37;27534:229;:::o;27769:366::-;27911:3;27932:67;27996:2;27991:3;27932:67;:::i;:::-;27925:74;;28008:93;28097:3;28008:93;:::i;:::-;28126:2;28121:3;28117:12;28110:19;;27769:366;;;:::o;28141:419::-;28307:4;28345:2;28334:9;28330:18;28322:26;;28394:9;28388:4;28384:20;28380:1;28369:9;28365:17;28358:47;28422:131;28548:4;28422:131;:::i;:::-;28414:139;;28141:419;;;:::o;28566:225::-;28706:34;28702:1;28694:6;28690:14;28683:58;28775:8;28770:2;28762:6;28758:15;28751:33;28566:225;:::o;28797:366::-;28939:3;28960:67;29024:2;29019:3;28960:67;:::i;:::-;28953:74;;29036:93;29125:3;29036:93;:::i;:::-;29154:2;29149:3;29145:12;29138:19;;28797:366;;;:::o;29169:419::-;29335:4;29373:2;29362:9;29358:18;29350:26;;29422:9;29416:4;29412:20;29408:1;29397:9;29393:17;29386:47;29450:131;29576:4;29450:131;:::i;:::-;29442:139;;29169:419;;;:::o;29594:147::-;29695:11;29732:3;29717:18;;29594:147;;;;:::o;29747:114::-;;:::o;29867:398::-;30026:3;30047:83;30128:1;30123:3;30047:83;:::i;:::-;30040:90;;30139:93;30228:3;30139:93;:::i;:::-;30257:1;30252:3;30248:11;30241:18;;29867:398;;;:::o;30271:379::-;30455:3;30477:147;30620:3;30477:147;:::i;:::-;30470:154;;30641:3;30634:10;;30271:379;;;:::o;30656:162::-;30796:14;30792:1;30784:6;30780:14;30773:38;30656:162;:::o;30824:366::-;30966:3;30987:67;31051:2;31046:3;30987:67;:::i;:::-;30980:74;;31063:93;31152:3;31063:93;:::i;:::-;31181:2;31176:3;31172:12;31165:19;;30824:366;;;:::o;31196:419::-;31362:4;31400:2;31389:9;31385:18;31377:26;;31449:9;31443:4;31439:20;31435:1;31424:9;31420:17;31413:47;31477:131;31603:4;31477:131;:::i;:::-;31469:139;;31196:419;;;:::o;31621:143::-;31678:5;31709:6;31703:13;31694:22;;31725:33;31752:5;31725:33;:::i;:::-;31621:143;;;;:::o;31770:351::-;31840:6;31889:2;31877:9;31868:7;31864:23;31860:32;31857:119;;;31895:79;;:::i;:::-;31857:119;32015:1;32040:64;32096:7;32087:6;32076:9;32072:22;32040:64;:::i;:::-;32030:74;;31986:128;31770:351;;;;:::o;32127:332::-;32248:4;32286:2;32275:9;32271:18;32263:26;;32299:71;32367:1;32356:9;32352:17;32343:6;32299:71;:::i;:::-;32380:72;32448:2;32437:9;32433:18;32424:6;32380:72;:::i;:::-;32127:332;;;;;:::o;32465:137::-;32519:5;32550:6;32544:13;32535:22;;32566:30;32590:5;32566:30;:::i;:::-;32465:137;;;;:::o;32608:345::-;32675:6;32724:2;32712:9;32703:7;32699:23;32695:32;32692:119;;;32730:79;;:::i;:::-;32692:119;32850:1;32875:61;32928:7;32919:6;32908:9;32904:22;32875:61;:::i;:::-;32865:71;;32821:125;32608:345;;;;:::o;32959:223::-;33099:34;33095:1;33087:6;33083:14;33076:58;33168:6;33163:2;33155:6;33151:15;33144:31;32959:223;:::o;33188:366::-;33330:3;33351:67;33415:2;33410:3;33351:67;:::i;:::-;33344:74;;33427:93;33516:3;33427:93;:::i;:::-;33545:2;33540:3;33536:12;33529:19;;33188:366;;;:::o;33560:419::-;33726:4;33764:2;33753:9;33749:18;33741:26;;33813:9;33807:4;33803:20;33799:1;33788:9;33784:17;33777:47;33841:131;33967:4;33841:131;:::i;:::-;33833:139;;33560:419;;;:::o;33985:221::-;34125:34;34121:1;34113:6;34109:14;34102:58;34194:4;34189:2;34181:6;34177:15;34170:29;33985:221;:::o;34212:366::-;34354:3;34375:67;34439:2;34434:3;34375:67;:::i;:::-;34368:74;;34451:93;34540:3;34451:93;:::i;:::-;34569:2;34564:3;34560:12;34553:19;;34212:366;;;:::o;34584:419::-;34750:4;34788:2;34777:9;34773:18;34765:26;;34837:9;34831:4;34827:20;34823:1;34812:9;34808:17;34801:47;34865:131;34991:4;34865:131;:::i;:::-;34857:139;;34584:419;;;:::o;35009:224::-;35149:34;35145:1;35137:6;35133:14;35126:58;35218:7;35213:2;35205:6;35201:15;35194:32;35009:224;:::o;35239:366::-;35381:3;35402:67;35466:2;35461:3;35402:67;:::i;:::-;35395:74;;35478:93;35567:3;35478:93;:::i;:::-;35596:2;35591:3;35587:12;35580:19;;35239:366;;;:::o;35611:419::-;35777:4;35815:2;35804:9;35800:18;35792:26;;35864:9;35858:4;35854:20;35850:1;35839:9;35835:17;35828:47;35892:131;36018:4;35892:131;:::i;:::-;35884:139;;35611:419;;;:::o;36036:222::-;36176:34;36172:1;36164:6;36160:14;36153:58;36245:5;36240:2;36232:6;36228:15;36221:30;36036:222;:::o;36264:366::-;36406:3;36427:67;36491:2;36486:3;36427:67;:::i;:::-;36420:74;;36503:93;36592:3;36503:93;:::i;:::-;36621:2;36616:3;36612:12;36605:19;;36264:366;;;:::o;36636:419::-;36802:4;36840:2;36829:9;36825:18;36817:26;;36889:9;36883:4;36879:20;36875:1;36864:9;36860:17;36853:47;36917:131;37043:4;36917:131;:::i;:::-;36909:139;;36636:419;;;:::o;37061:176::-;37201:28;37197:1;37189:6;37185:14;37178:52;37061:176;:::o;37243:366::-;37385:3;37406:67;37470:2;37465:3;37406:67;:::i;:::-;37399:74;;37482:93;37571:3;37482:93;:::i;:::-;37600:2;37595:3;37591:12;37584:19;;37243:366;;;:::o;37615:419::-;37781:4;37819:2;37808:9;37804:18;37796:26;;37868:9;37862:4;37858:20;37854:1;37843:9;37839:17;37832:47;37896:131;38022:4;37896:131;:::i;:::-;37888:139;;37615:419;;;:::o;38040:246::-;38180:34;38176:1;38168:6;38164:14;38157:58;38249:29;38244:2;38236:6;38232:15;38225:54;38040:246;:::o;38292:366::-;38434:3;38455:67;38519:2;38514:3;38455:67;:::i;:::-;38448:74;;38531:93;38620:3;38531:93;:::i;:::-;38649:2;38644:3;38640:12;38633:19;;38292:366;;;:::o;38664:419::-;38830:4;38868:2;38857:9;38853:18;38845:26;;38917:9;38911:4;38907:20;38903:1;38892:9;38888:17;38881:47;38945:131;39071:4;38945:131;:::i;:::-;38937:139;;38664:419;;;:::o;39089:194::-;39129:4;39149:20;39167:1;39149:20;:::i;:::-;39144:25;;39183:20;39201:1;39183:20;:::i;:::-;39178:25;;39227:1;39224;39220:9;39212:17;;39251:1;39245:4;39242:11;39239:37;;;39256:18;;:::i;:::-;39239:37;39089:194;;;;:::o;39289:235::-;39429:34;39425:1;39417:6;39413:14;39406:58;39498:18;39493:2;39485:6;39481:15;39474:43;39289:235;:::o;39530:366::-;39672:3;39693:67;39757:2;39752:3;39693:67;:::i;:::-;39686:74;;39769:93;39858:3;39769:93;:::i;:::-;39887:2;39882:3;39878:12;39871:19;;39530:366;;;:::o;39902:419::-;40068:4;40106:2;40095:9;40091:18;40083:26;;40155:9;40149:4;40145:20;40141:1;40130:9;40126:17;40119:47;40183:131;40309:4;40183:131;:::i;:::-;40175:139;;39902:419;;;:::o;40327:225::-;40467:34;40463:1;40455:6;40451:14;40444:58;40536:8;40531:2;40523:6;40519:15;40512:33;40327:225;:::o;40558:366::-;40700:3;40721:67;40785:2;40780:3;40721:67;:::i;:::-;40714:74;;40797:93;40886:3;40797:93;:::i;:::-;40915:2;40910:3;40906:12;40899:19;;40558:366;;;:::o;40930:419::-;41096:4;41134:2;41123:9;41119:18;41111:26;;41183:9;41177:4;41173:20;41169:1;41158:9;41154:17;41147:47;41211:131;41337:4;41211:131;:::i;:::-;41203:139;;40930:419;;;:::o;41355:180::-;41403:77;41400:1;41393:88;41500:4;41497:1;41490:15;41524:4;41521:1;41514:15;41541:180;41589:77;41586:1;41579:88;41686:4;41683:1;41676:15;41710:4;41707:1;41700:15;41727:143;41784:5;41815:6;41809:13;41800:22;;41831:33;41858:5;41831:33;:::i;:::-;41727:143;;;;:::o;41876:351::-;41946:6;41995:2;41983:9;41974:7;41970:23;41966:32;41963:119;;;42001:79;;:::i;:::-;41963:119;42121:1;42146:64;42202:7;42193:6;42182:9;42178:22;42146:64;:::i;:::-;42136:74;;42092:128;41876:351;;;;:::o;42233:85::-;42278:7;42307:5;42296:16;;42233:85;;;:::o;42324:158::-;42382:9;42415:61;42433:42;42442:32;42468:5;42442:32;:::i;:::-;42433:42;:::i;:::-;42415:61;:::i;:::-;42402:74;;42324:158;;;:::o;42488:147::-;42583:45;42622:5;42583:45;:::i;:::-;42578:3;42571:58;42488:147;;:::o;42641:114::-;42708:6;42742:5;42736:12;42726:22;;42641:114;;;:::o;42761:184::-;42860:11;42894:6;42889:3;42882:19;42934:4;42929:3;42925:14;42910:29;;42761:184;;;;:::o;42951:132::-;43018:4;43041:3;43033:11;;43071:4;43066:3;43062:14;43054:22;;42951:132;;;:::o;43089:108::-;43166:24;43184:5;43166:24;:::i;:::-;43161:3;43154:37;43089:108;;:::o;43203:179::-;43272:10;43293:46;43335:3;43327:6;43293:46;:::i;:::-;43371:4;43366:3;43362:14;43348:28;;43203:179;;;;:::o;43388:113::-;43458:4;43490;43485:3;43481:14;43473:22;;43388:113;;;:::o;43537:732::-;43656:3;43685:54;43733:5;43685:54;:::i;:::-;43755:86;43834:6;43829:3;43755:86;:::i;:::-;43748:93;;43865:56;43915:5;43865:56;:::i;:::-;43944:7;43975:1;43960:284;43985:6;43982:1;43979:13;43960:284;;;44061:6;44055:13;44088:63;44147:3;44132:13;44088:63;:::i;:::-;44081:70;;44174:60;44227:6;44174:60;:::i;:::-;44164:70;;44020:224;44007:1;44004;44000:9;43995:14;;43960:284;;;43964:14;44260:3;44253:10;;43661:608;;;43537:732;;;;:::o;44275:831::-;44538:4;44576:3;44565:9;44561:19;44553:27;;44590:71;44658:1;44647:9;44643:17;44634:6;44590:71;:::i;:::-;44671:80;44747:2;44736:9;44732:18;44723:6;44671:80;:::i;:::-;44798:9;44792:4;44788:20;44783:2;44772:9;44768:18;44761:48;44826:108;44929:4;44920:6;44826:108;:::i;:::-;44818:116;;44944:72;45012:2;45001:9;44997:18;44988:6;44944:72;:::i;:::-;45026:73;45094:3;45083:9;45079:19;45070:6;45026:73;:::i;:::-;44275:831;;;;;;;;:::o

Swarm Source

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