ETH Price: $2,423.81 (+0.26%)

Token

InsureFi (INSURE)
 

Overview

Max Total Supply

1,000,000,000 INSURE

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,400,000 INSURE

Value
$0.00
0x2966532636682b885Cfa8B6Ff1eb891A26172540
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:
InsureFi

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal returns(bool){
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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 _mint(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 InsureFi is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  liquidityFeeOnBuy;
    uint256 public  liquidityFeeOnSell;

    uint256 public  treasuryFeeOnBuy;
    uint256 public  treasuryFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    uint256 private maxFee;

    uint256 public  walletToWalletTransferFee;

    address public  treasuryWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event TreasuryWalletChanged(address treasuryWallet);
    event UpdateBuyFees(uint256 liquidityFeeOnBuy, uint256 treasuryFeeOnBuy);
    event UpdateSellFees(uint256 liquidityFeeOnSell, uint256 treasuryFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendTreasury(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("InsureFi", "INSURE") 
    {   
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
        } else {
            revert();
        }

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

        liquidityFeeOnBuy  = 0;
        liquidityFeeOnSell = 0;

        treasuryFeeOnBuy  = 1;
        treasuryFeeOnSell = 1;

        maxFee             = 10;

        _totalFeesOnBuy    = liquidityFeeOnBuy  + treasuryFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + treasuryFeeOnSell;

        walletToWalletTransferFee = 1;

        treasuryWallet = 0x38CE22F82DB101eA290aDb0b40E68ec7FdBB7409;

        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0xdead)] = true;
        _isExcludedFromMaxTxLimit[treasuryWallet] = true;
        _isExcludedFromMaxTxLimit[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; //pinklock

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

        _mint(owner(), 1e9 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;
	
        maxTransactionAmountBuy     = totalSupply() * 30 / 1000;
        maxTransactionAmountSell    = totalSupply() * 30 / 1000;
	
        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

  	}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            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 updateBuyFees(uint256 _liquidityFeeOnBuy, uint256 _treasuryFeeOnBuy) external onlyOwner {
        liquidityFeeOnBuy = _liquidityFeeOnBuy;
        treasuryFeeOnBuy = _treasuryFeeOnBuy;

        _totalFeesOnBuy   = liquidityFeeOnBuy + treasuryFeeOnBuy;

        require(_totalFeesOnBuy + _totalFeesOnSell <= maxFee, "Total Fees cannot exceed the maximum");

        emit UpdateBuyFees(liquidityFeeOnBuy, treasuryFeeOnBuy);
    }

    function updateSellFees(uint256 _liquidityFeeOnSell, uint256 _treasuryFeeOnSell) external onlyOwner {
        liquidityFeeOnSell = _liquidityFeeOnSell;
        treasuryFeeOnSell = _treasuryFeeOnSell;

        _totalFeesOnSell   = liquidityFeeOnSell + treasuryFeeOnSell;

        require(_totalFeesOnBuy + _totalFeesOnSell <= maxFee, "Total Fees cannot exceed the maximum");

        emit UpdateSellFees(liquidityFeeOnSell, treasuryFeeOnSell);
    }

    function updateWalletToWalletTransferFee(uint256 _walletToWalletTransferFee) external onlyOwner {
        require(_walletToWalletTransferFee <= maxFee, "Wallet to Wallet Transfer Fee cannot exceed the maximum");
        walletToWalletTransferFee = _walletToWalletTransferFee;

        emit UpdateWalletToWalletTransferFee(walletToWalletTransferFee);
    }

    function changeTreasuryWallet(address _treasuryWallet) external onlyOwner{
        require(_treasuryWallet != treasuryWallet,"Treasury wallet is already that address");
        require(_treasuryWallet != address(0),"Treasury wallet cannot be the zero address");
        treasuryWallet = _treasuryWallet;

        emit TreasuryWalletChanged(treasuryWallet);
    }

    bool public tradingEnabled;

    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;
    }

    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 not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                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 &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 treasuryShare = treasuryFeeOnBuy + treasuryFeeOnSell;

            if (liquidityShare > 0) {
                uint256 liquidityTokens = contractTokenBalance * liquidityShare / totalFee;
                swapAndLiquify(liquidityTokens);
            }
            
            if (treasuryShare > 0) {
                uint256 treasuryTokens = contractTokenBalance * treasuryShare / totalFee;
                swapAndSendTreasury(treasuryTokens);
            }          

            swapping = false;
        }

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

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

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

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

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

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendTreasury(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;

        payable(treasuryWallet).sendValue(newBalance);

        emit SwapAndSendTreasury(tokenAmount, newBalance);
    }

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

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 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())) / 1_000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, 
            "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 excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _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":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":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","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":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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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":"address","name":"treasuryWallet","type":"address"}],"name":"TreasuryWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","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":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"changeTreasuryWallet","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":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","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":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","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":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"treasuryFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletToWalletTransferFee","type":"uint256"}],"name":"updateWalletToWalletTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletToWalletTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600881526020017f496e7375726546690000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f494e53555245000000000000000000000000000000000000000000000000000081525081600390816200008f919062000fa1565b508060049081620000a1919062000fa1565b5050506000620000b66200098f60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000603846036200017d577310ed43c718714eb63d5aa57b78b54704e256024e9050620001dd565b60614603620001a35773d99d1c33f9fc3444f8101754abc46c52416550d19050620001dc565b6001461480620001b35750600546145b15620001d657737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001db565b600080fd5b5b5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002569190620010f2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e49190620010f2565b6040518363ffffffff1660e01b81526004016200030392919062001135565b6020604051808303816000875af115801562000323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003499190620010f2565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200099760201b60201c565b60006009819055506000600a819055506001600b819055506001600c81905550600a600f81905550600b546009546200045c919062001191565b600d81905550600c54600a5462000474919062001191565b600e8190555060016010819055507338ce22f82db101ea290adb0b40e68ec7fdbb7409601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560006101000a81548160ff0219169083151502179055506001601460006200050862000b6860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160146000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600073407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006200070762000b6860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600073407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008c56200088a62000b6860201b60201c565b6200089a62000b9260201b60201c565b600a620008a891906200132d565b633b9aca00620008b991906200137e565b62000b9b60201b60201c565b611388620008d862000d1360201b60201c565b620008e49190620013f8565b6012819055506103e8601e620008ff62000d1360201b60201c565b6200090b91906200137e565b620009179190620013f8565b6016819055506103e8601e6200093262000d1360201b60201c565b6200093e91906200137e565b6200094a9190620013f8565b6017819055506000601360026101000a81548160ff0219169083151502179055506000601360016101000a81548160ff02191690831515021790555050505062001611565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000a09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0090620014b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a72906200154f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b5b919062001582565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0490620015ef565b60405180910390fd5b62000c216000838362000d1d60201b60201c565b806002600082825462000c35919062001191565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c8c919062001191565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cf3919062001582565b60405180910390a362000d0f6000838362000d2260201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000da957607f821691505b60208210810362000dbf5762000dbe62000d61565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dea565b62000e35868362000dea565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e8262000e7c62000e768462000e4d565b62000e57565b62000e4d565b9050919050565b6000819050919050565b62000e9e8362000e61565b62000eb662000ead8262000e89565b84845462000df7565b825550505050565b600090565b62000ecd62000ebe565b62000eda81848462000e93565b505050565b5b8181101562000f025762000ef660008262000ec3565b60018101905062000ee0565b5050565b601f82111562000f515762000f1b8162000dc5565b62000f268462000dda565b8101602085101562000f36578190505b62000f4e62000f458562000dda565b83018262000edf565b50505b505050565b600082821c905092915050565b600062000f766000198460080262000f56565b1980831691505092915050565b600062000f91838362000f63565b9150826002028217905092915050565b62000fac8262000d27565b67ffffffffffffffff81111562000fc85762000fc762000d32565b5b62000fd4825462000d90565b62000fe182828562000f06565b600060209050601f83116001811462001019576000841562001004578287015190505b62001010858262000f83565b86555062001080565b601f198416620010298662000dc5565b60005b8281101562001053578489015182556001820191506020850194506020810190506200102c565b868310156200107357848901516200106f601f89168262000f63565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010ba826200108d565b9050919050565b620010cc81620010ad565b8114620010d857600080fd5b50565b600081519050620010ec81620010c1565b92915050565b6000602082840312156200110b576200110a62001088565b5b60006200111b84828501620010db565b91505092915050565b6200112f81620010ad565b82525050565b60006040820190506200114c600083018562001124565b6200115b602083018462001124565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200119e8262000e4d565b9150620011ab8362000e4d565b9250828201905080821115620011c657620011c562001162565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156200122b5780860481111562001203576200120262001162565b5b6001851615620012135780820291505b80810290506200122385620011cc565b9450620011e3565b94509492505050565b60008262001246576001905062001319565b8162001256576000905062001319565b81600181146200126f57600281146200127a57620012b0565b600191505062001319565b60ff8411156200128f576200128e62001162565b5b8360020a915084821115620012a957620012a862001162565b5b5062001319565b5060208310610133831016604e8410600b8410161715620012ea5782820a905083811115620012e457620012e362001162565b5b62001319565b620012f98484846001620011d9565b9250905081840481111562001313576200131262001162565b5b81810290505b9392505050565b600060ff82169050919050565b60006200133a8262000e4d565b9150620013478362001320565b9250620013767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001234565b905092915050565b60006200138b8262000e4d565b9150620013988362000e4d565b9250828202620013a88162000e4d565b91508282048414831517620013c257620013c162001162565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620014058262000e4d565b9150620014128362000e4d565b925082620014255762001424620013c9565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200149f60248362001430565b9150620014ac8262001441565b604082019050919050565b60006020820190508181036000830152620014d28162001490565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200153760228362001430565b91506200154482620014d9565b604082019050919050565b600060208201905081810360008301526200156a8162001528565b9050919050565b6200157c8162000e4d565b82525050565b600060208201905062001599600083018462001571565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620015d7601f8362001430565b9150620015e4826200159f565b602082019050919050565b600060208201905081810360008301526200160a81620015c8565b9050919050565b61529d80620016216000396000f3fe6080604052600436106102555760003560e01c80636ddd171311610139578063a457c2d7116100b6578063cdd4bd791161007a578063cdd4bd79146108c3578063dd62ed3e146108ee578063e01af92c1461092b578063e2f4560514610954578063f2fde38b1461097f578063f9d0831a146109a85761025c565b8063a457c2d7146107ce578063a9059cbb1461080b578063afa4f3b214610848578063b6f7f68114610871578063c02466681461089a5761025c565b8063824e4605116100fd578063824e46051461070d578063880bcbc1146107385780638a8c523c146107615780638da5cb5b1461077857806395d89b41146107a35761025c565b80636ddd171314610638578063702509fd1461066357806370a082311461068e578063715018a6146106cb5780637b3c83b1146106e25761025c565b8063313ce567116101d25780634fbee193116101965780634fbee1931461052c578063537c1ac71461056957806356a6cabf1461059257806359136fa5146105bb57806364c98c44146105e657806366ca9b831461060f5761025c565b8063313ce56714610443578063395093511461046e5780634626402b146104ab57806349bd5a5e146104d65780634ada218b146105015761025c565b806318160ddd1161021957806318160ddd1461034857806318d9ceae1461037357806323b872dd146103b05780632ba86bf2146103ed5780632ce86fbf146104185761025c565b80630105d0fd1461026157806302dbd8f81461028c57806306fdde03146102b5578063095ea7b3146102e05780631694505e1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109d1565b604051610283919061395f565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae91906139ab565b6109d7565b005b3480156102c157600080fd5b506102ca610b27565b6040516102d79190613a7b565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190613afb565b610bb9565b6040516103149190613b56565b60405180910390f35b34801561032957600080fd5b50610332610bd7565b60405161033f9190613bd0565b60405180910390f35b34801561035457600080fd5b5061035d610bfd565b60405161036a919061395f565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190613beb565b610c07565b6040516103a79190613b56565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190613c18565b610c5d565b6040516103e49190613b56565b60405180910390f35b3480156103f957600080fd5b50610402610d7c565b60405161040f9190613b56565b60405180910390f35b34801561042457600080fd5b5061042d610d8f565b60405161043a919061395f565b60405180910390f35b34801561044f57600080fd5b50610458610d95565b6040516104659190613c87565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613afb565b610d9e565b6040516104a29190613b56565b60405180910390f35b3480156104b757600080fd5b506104c0610e4a565b6040516104cd9190613cb1565b60405180910390f35b3480156104e257600080fd5b506104eb610e70565b6040516104f89190613cb1565b60405180910390f35b34801561050d57600080fd5b50610516610e96565b6040516105239190613b56565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190613beb565b610ea9565b6040516105609190613b56565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613beb565b610eff565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613cf8565b611132565b005b3480156105c757600080fd5b506105d0611281565b6040516105dd919061395f565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190613d25565b611287565b005b34801561061b57600080fd5b50610636600480360381019061063191906139ab565b6113a6565b005b34801561064457600080fd5b5061064d6114f6565b60405161065a9190613b56565b60405180910390f35b34801561066f57600080fd5b50610678611509565b604051610685919061395f565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190613beb565b61150f565b6040516106c2919061395f565b60405180910390f35b3480156106d757600080fd5b506106e0611557565b005b3480156106ee57600080fd5b506106f76116af565b604051610704919061395f565b60405180910390f35b34801561071957600080fd5b506107226116b5565b60405161072f919061395f565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190613d52565b6116bb565b005b34801561076d57600080fd5b506107766118fb565b005b34801561078457600080fd5b5061078d611a1a565b60405161079a9190613cb1565b60405180910390f35b3480156107af57600080fd5b506107b8611a44565b6040516107c59190613a7b565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613afb565b611ad6565b6040516108029190613b56565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613afb565b611bc1565b60405161083f9190613b56565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a9190613d25565b611bdf565b005b34801561087d57600080fd5b50610898600480360381019061089391906139ab565b611d10565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613d52565b611ee5565b005b3480156108cf57600080fd5b506108d86120b7565b6040516108e5919061395f565b60405180910390f35b3480156108fa57600080fd5b5061091560048036038101906109109190613d92565b6120bd565b604051610922919061395f565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d9190613cf8565b612144565b005b34801561096057600080fd5b5061096961224d565b604051610976919061395f565b60405180910390f35b34801561098b57600080fd5b506109a660048036038101906109a19190613beb565b612253565b005b3480156109b457600080fd5b506109cf60048036038101906109ca9190613beb565b612419565b005b60165481565b6109df612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6590613e1e565b60405180910390fd5b81600a8190555080600c81905550600c54600a54610a8c9190613e6d565b600e81905550600f54600e54600d54610aa59190613e6d565b1115610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613f13565b60405180910390fd5b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051610b1b929190613f33565b60405180910390a15050565b606060038054610b3690613f8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6290613f8b565b8015610baf5780601f10610b8457610100808354040283529160200191610baf565b820191906000526020600020905b815481529060010190602001808311610b9257829003601f168201915b5050505050905090565b6000610bcd610bc6612689565b8484612691565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca9612689565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d655782811015610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d479061402e565b60405180910390fd5b610d6485610d5c612689565b858403612691565b5b610d7085858561285a565b60019150509392505050565b601560009054906101000a900460ff1681565b600a5481565b60006012905090565b6000610e40610dab612689565b848460016000610db9612689565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e3b9190613e6d565b612691565b6001905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360029054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f07612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613e1e565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d906140c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c90614152565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2551960305e8f85b09658bb3075878e3e3cef37a5f7b5d43261f5e6f36b3d6a4601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516111279190613cb1565b60405180910390a150565b61113a612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090613e1e565b60405180910390fd5b601560009054906101000a900460ff1615158115150361121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906141e4565b60405180910390fd5b80601560006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601560009054906101000a900460ff166040516112769190613b56565b60405180910390a150565b60175481565b61128f612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131590613e1e565b60405180910390fd5b600f54811115611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a90614276565b60405180910390fd5b806010819055507f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b60105460405161139b919061395f565b60405180910390a150565b6113ae612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613e1e565b60405180910390fd5b8160098190555080600b81905550600b5460095461145b9190613e6d565b600d81905550600f54600e54600d546114749190613e6d565b11156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90613f13565b60405180910390fd5b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b546040516114ea929190613f33565b60405180910390a15050565b601360019054906101000a900460ff1681565b60105481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61155f612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590613e1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60095481565b600b5481565b6116c3612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990613e1e565b60405180910390fd5b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614308565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990614374565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c10826040516118ef9190613b56565b60405180910390a25050565b611903612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613e1e565b60405180910390fd5b601360029054906101000a900460ff16156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906143e0565b60405180910390fd5b6001601360026101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a5390613f8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7f90613f8b565b8015611acc5780601f10611aa157610100808354040283529160200191611acc565b820191906000526020600020905b815481529060010190602001808311611aaf57829003601f168201915b5050505050905090565b60008060016000611ae5612689565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614472565b60405180910390fd5b611bb6611bad612689565b85858403612691565b600191505092915050565b6000611bd5611bce612689565b848461285a565b6001905092915050565b611be7612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90613e1e565b60405180910390fd5b620f4240611c82610bfd565b611c8c91906144c1565b8111611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490614564565b60405180910390fd5b806012819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145601254604051611d05919061395f565b60405180910390a150565b611d18612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90613e1e565b60405180910390fd5b6103e8611db2610d95565b600a611dbe91906146b7565b611dc6610bfd565b611dd091906144c1565b611dda91906144c1565b8210158015611e1b57506103e8611def610d95565b600a611dfb91906146b7565b611e03610bfd565b611e0d91906144c1565b611e1791906144c1565b8110155b611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5190614774565b60405180910390fd5b611e62610d95565b600a611e6e91906146b7565b82611e799190614794565b601681905550611e87610d95565b600a611e9391906146b7565b81611e9e9190614794565b6017819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601654601754604051611ed9929190613f33565b60405180910390a15050565b611eed612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613e1e565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200590614848565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120ab9190613b56565b60405180910390a25050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61214c612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290613e1e565b60405180910390fd5b801515601360019054906101000a900460ff16151503612230576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612227906148da565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b60125481565b61225b612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190613e1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123509061496c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612421612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a790613e1e565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361251e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612515906149fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125815761257b473373ffffffffffffffffffffffffffffffffffffffff1661301690919063ffffffff16565b50612686565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125c19190613cb1565b602060405180830381865afa1580156125de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126029190614a33565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161263f929190614a60565b6020604051808303816000875af115801561265e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126829190614a9e565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f790614b3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690614bcf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161284d919061395f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292f90614cf3565b60405180910390fd5b601360029054906101000a900460ff168061299c5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806129f05750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2690614d5f565b60405180910390fd5b60008103612a4857612a43838360006130d1565b613011565b601560009054906101000a900460ff1615612c9e57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b065750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612b5c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bb25750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9d57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c5657601654811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614df1565b60405180910390fd5b612c9c565b601754811115612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290614df1565b60405180910390fd5b5b5b5b6000612ca93061150f565b905060006012548210159050808015612ccf5750601360009054906101000a900460ff16155b8015612d285750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612d4357506000600e54600d54612d419190613e6d565b115b8015612d5b5750601360019054906101000a900460ff165b15612e34576001601360006101000a81548160ff0219169083151502179055506000600e54600d54612d8d9190613e6d565b90506000600a54600954612da19190613e6d565b90506000600c54600b54612db59190613e6d565b90506000821115612de6576000838387612dcf9190614794565b612dd991906144c1565b9050612de481613350565b505b6000811115612e15576000838287612dfe9190614794565b612e0891906144c1565b9050612e138161368a565b505b6000601360006101000a81548160ff0219169083151502179055505050505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ed75750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612eee5750601360009054906101000a900460ff165b15612efc5760009050612fc2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612f5b57600d549050612fc1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612fba57600e549050612fc0565b60105490505b5b5b600081111561300257600060648286612fdb9190614794565b612fe591906144c1565b90508085612ff39190614e11565b94506130008730836130d1565b505b61300d8686866130d1565b5050505b505050565b60008147101561305b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305290614e91565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff168360405161308190614ee2565b60006040518083038185875af1925050503d80600081146130be576040519150601f19603f3d011682016040523d82523d6000602084013e6130c3565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313790614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a690614cf3565b60405180910390fd5b6131ba83838361393c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323790614f69565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132d39190613e6d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613337919061395f565b60405180910390a361334a848484613941565b50505050565b600060028261335f91906144c1565b90506000818361336f9190614e11565b905060004790506000600267ffffffffffffffff81111561339357613392614f89565b5b6040519080825280602002602001820160405280156133c15781602001602082028036833780820191505090505b50905030816000815181106133d9576133d8614fb8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a49190614ffc565b816001815181106134b8576134b7614fb8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401613556959493929190615122565b600060405180830381600087803b15801561357057600080fd5b505af1158015613584573d6000803e3d6000fd5b50505050600082476135969190614e11565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308760008061dead426040518863ffffffff1660e01b81526004016136019695949392919061517c565b60606040518083038185885af115801561361f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061364491906151dd565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828660405161367a93929190615230565b60405180910390a1505050505050565b60004790506000600267ffffffffffffffff8111156136ac576136ab614f89565b5b6040519080825280602002602001820160405280156136da5781602001602082028036833780820191505090505b50905030816000815181106136f2576136f1614fb8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190614ffc565b816001815181106137d1576137d0614fb8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b815260040161386f959493929190615122565b600060405180830381600087803b15801561388957600080fd5b505af115801561389d573d6000803e3d6000fd5b50505050600082476138af9190614e11565b90506138fc81601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661301690919063ffffffff16565b507f6ee08a4b84466b2b8ab17edfa2ae350edb07f10a0611b728cde52c4b17434f57848260405161392e929190613f33565b60405180910390a150505050565b505050565b505050565b6000819050919050565b61395981613946565b82525050565b60006020820190506139746000830184613950565b92915050565b600080fd5b61398881613946565b811461399357600080fd5b50565b6000813590506139a58161397f565b92915050565b600080604083850312156139c2576139c161397a565b5b60006139d085828601613996565b92505060206139e185828601613996565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a25578082015181840152602081019050613a0a565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a4d826139eb565b613a5781856139f6565b9350613a67818560208601613a07565b613a7081613a31565b840191505092915050565b60006020820190508181036000830152613a958184613a42565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ac882613a9d565b9050919050565b613ad881613abd565b8114613ae357600080fd5b50565b600081359050613af581613acf565b92915050565b60008060408385031215613b1257613b1161397a565b5b6000613b2085828601613ae6565b9250506020613b3185828601613996565b9150509250929050565b60008115159050919050565b613b5081613b3b565b82525050565b6000602082019050613b6b6000830184613b47565b92915050565b6000819050919050565b6000613b96613b91613b8c84613a9d565b613b71565b613a9d565b9050919050565b6000613ba882613b7b565b9050919050565b6000613bba82613b9d565b9050919050565b613bca81613baf565b82525050565b6000602082019050613be56000830184613bc1565b92915050565b600060208284031215613c0157613c0061397a565b5b6000613c0f84828501613ae6565b91505092915050565b600080600060608486031215613c3157613c3061397a565b5b6000613c3f86828701613ae6565b9350506020613c5086828701613ae6565b9250506040613c6186828701613996565b9150509250925092565b600060ff82169050919050565b613c8181613c6b565b82525050565b6000602082019050613c9c6000830184613c78565b92915050565b613cab81613abd565b82525050565b6000602082019050613cc66000830184613ca2565b92915050565b613cd581613b3b565b8114613ce057600080fd5b50565b600081359050613cf281613ccc565b92915050565b600060208284031215613d0e57613d0d61397a565b5b6000613d1c84828501613ce3565b91505092915050565b600060208284031215613d3b57613d3a61397a565b5b6000613d4984828501613996565b91505092915050565b60008060408385031215613d6957613d6861397a565b5b6000613d7785828601613ae6565b9250506020613d8885828601613ce3565b9150509250929050565b60008060408385031215613da957613da861397a565b5b6000613db785828601613ae6565b9250506020613dc885828601613ae6565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e086020836139f6565b9150613e1382613dd2565b602082019050919050565b60006020820190508181036000830152613e3781613dfb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e7882613946565b9150613e8383613946565b9250828201905080821115613e9b57613e9a613e3e565b5b92915050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000613efd6024836139f6565b9150613f0882613ea1565b604082019050919050565b60006020820190508181036000830152613f2c81613ef0565b9050919050565b6000604082019050613f486000830185613950565b613f556020830184613950565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fa357607f821691505b602082108103613fb657613fb5613f5c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140186028836139f6565b915061402382613fbc565b604082019050919050565b600060208201905081810360008301526140478161400b565b9050919050565b7f54726561737572792077616c6c657420697320616c726561647920746861742060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b60006140aa6027836139f6565b91506140b58261404e565b604082019050919050565b600060208201905081810360008301526140d98161409d565b9050919050565b7f54726561737572792077616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061413c602a836139f6565b9150614147826140e0565b604082019050919050565b6000602082019050818103600083015261416b8161412f565b9050919050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b60006141ce6032836139f6565b91506141d982614172565b604082019050919050565b600060208201905081810360008301526141fd816141c1565b9050919050565b7f57616c6c657420746f2057616c6c6574205472616e736665722046656520636160008201527f6e6e6f742065786365656420746865206d6178696d756d000000000000000000602082015250565b60006142606037836139f6565b915061426b82614204565b604082019050919050565b6000602082019050818103600083015261428f81614253565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b60006142f26024836139f6565b91506142fd82614296565b604082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b600061435e6017836139f6565b915061436982614328565b602082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b60006143ca6018836139f6565b91506143d582614394565b602082019050919050565b600060208201905081810360008301526143f9816143bd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061445c6025836139f6565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144cc82613946565b91506144d783613946565b9250826144e7576144e6614492565b5b828204905092915050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b600061454e603f836139f6565b9150614559826144f2565b604082019050919050565b6000602082019050818103600083015261457d81614541565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156145db578086048111156145b7576145b6613e3e565b5b60018516156145c65780820291505b80810290506145d485614584565b945061459b565b94509492505050565b6000826145f457600190506146b0565b8161460257600090506146b0565b8160018114614618576002811461462257614651565b60019150506146b0565b60ff84111561463457614633613e3e565b5b8360020a91508482111561464b5761464a613e3e565b5b506146b0565b5060208310610133831016604e8410600b84101617156146865782820a90508381111561468157614680613e3e565b5b6146b0565b6146938484846001614591565b925090508184048111156146aa576146a9613e3e565b5b81810290505b9392505050565b60006146c282613946565b91506146cd83613c6b565b92506146fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846145e4565b905092915050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b600061475e603f836139f6565b915061476982614702565b604082019050919050565b6000602082019050818103600083015261478d81614751565b9050919050565b600061479f82613946565b91506147aa83613946565b92508282026147b881613946565b915082820484148315176147cf576147ce613e3e565b5b5092915050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614832602a836139f6565b915061483d826147d6565b604082019050919050565b6000602082019050818103600083015261486181614825565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006148c46022836139f6565b91506148cf82614868565b604082019050919050565b600060208201905081810360008301526148f3816148b7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149566026836139f6565b9150614961826148fa565b604082019050919050565b6000602082019050818103600083015261498581614949565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b60006149e86037836139f6565b91506149f38261498c565b604082019050919050565b60006020820190508181036000830152614a17816149db565b9050919050565b600081519050614a2d8161397f565b92915050565b600060208284031215614a4957614a4861397a565b5b6000614a5784828501614a1e565b91505092915050565b6000604082019050614a756000830185613ca2565b614a826020830184613950565b9392505050565b600081519050614a9881613ccc565b92915050565b600060208284031215614ab457614ab361397a565b5b6000614ac284828501614a89565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b276024836139f6565b9150614b3282614acb565b604082019050919050565b60006020820190508181036000830152614b5681614b1a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bb96022836139f6565b9150614bc482614b5d565b604082019050919050565b60006020820190508181036000830152614be881614bac565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c4b6025836139f6565b9150614c5682614bef565b604082019050919050565b60006020820190508181036000830152614c7a81614c3e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cdd6023836139f6565b9150614ce882614c81565b604082019050919050565b60006020820190508181036000830152614d0c81614cd0565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000614d496018836139f6565b9150614d5482614d13565b602082019050919050565b60006020820190508181036000830152614d7881614d3c565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b6000614ddb603b836139f6565b9150614de682614d7f565b604082019050919050565b60006020820190508181036000830152614e0a81614dce565b9050919050565b6000614e1c82613946565b9150614e2783613946565b9250828203905081811115614e3f57614e3e613e3e565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614e7b601d836139f6565b9150614e8682614e45565b602082019050919050565b60006020820190508181036000830152614eaa81614e6e565b9050919050565b600081905092915050565b50565b6000614ecc600083614eb1565b9150614ed782614ebc565b600082019050919050565b6000614eed82614ebf565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f536026836139f6565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ff681613acf565b92915050565b6000602082840312156150125761501161397a565b5b600061502084828501614fe7565b91505092915050565b6000819050919050565b600061504e61504961504484615029565b613b71565b613946565b9050919050565b61505e81615033565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61509981613abd565b82525050565b60006150ab8383615090565b60208301905092915050565b6000602082019050919050565b60006150cf82615064565b6150d9818561506f565b93506150e483615080565b8060005b838110156151155781516150fc888261509f565b9750615107836150b7565b9250506001810190506150e8565b5085935050505092915050565b600060a0820190506151376000830188613950565b6151446020830187615055565b818103604083015261515681866150c4565b90506151656060830185613ca2565b6151726080830184613950565b9695505050505050565b600060c0820190506151916000830189613ca2565b61519e6020830188613950565b6151ab6040830187615055565b6151b86060830186615055565b6151c56080830185613ca2565b6151d260a0830184613950565b979650505050505050565b6000806000606084860312156151f6576151f561397a565b5b600061520486828701614a1e565b935050602061521586828701614a1e565b925050604061522686828701614a1e565b9150509250925092565b60006060820190506152456000830186613950565b6152526020830185613950565b61525f6040830184613950565b94935050505056fea26469706673582212201ca380013588217108287ed0032f39b05c6b34b40cf2614dc4da5769e7d9c98364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80636ddd171311610139578063a457c2d7116100b6578063cdd4bd791161007a578063cdd4bd79146108c3578063dd62ed3e146108ee578063e01af92c1461092b578063e2f4560514610954578063f2fde38b1461097f578063f9d0831a146109a85761025c565b8063a457c2d7146107ce578063a9059cbb1461080b578063afa4f3b214610848578063b6f7f68114610871578063c02466681461089a5761025c565b8063824e4605116100fd578063824e46051461070d578063880bcbc1146107385780638a8c523c146107615780638da5cb5b1461077857806395d89b41146107a35761025c565b80636ddd171314610638578063702509fd1461066357806370a082311461068e578063715018a6146106cb5780637b3c83b1146106e25761025c565b8063313ce567116101d25780634fbee193116101965780634fbee1931461052c578063537c1ac71461056957806356a6cabf1461059257806359136fa5146105bb57806364c98c44146105e657806366ca9b831461060f5761025c565b8063313ce56714610443578063395093511461046e5780634626402b146104ab57806349bd5a5e146104d65780634ada218b146105015761025c565b806318160ddd1161021957806318160ddd1461034857806318d9ceae1461037357806323b872dd146103b05780632ba86bf2146103ed5780632ce86fbf146104185761025c565b80630105d0fd1461026157806302dbd8f81461028c57806306fdde03146102b5578063095ea7b3146102e05780631694505e1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109d1565b604051610283919061395f565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae91906139ab565b6109d7565b005b3480156102c157600080fd5b506102ca610b27565b6040516102d79190613a7b565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190613afb565b610bb9565b6040516103149190613b56565b60405180910390f35b34801561032957600080fd5b50610332610bd7565b60405161033f9190613bd0565b60405180910390f35b34801561035457600080fd5b5061035d610bfd565b60405161036a919061395f565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190613beb565b610c07565b6040516103a79190613b56565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190613c18565b610c5d565b6040516103e49190613b56565b60405180910390f35b3480156103f957600080fd5b50610402610d7c565b60405161040f9190613b56565b60405180910390f35b34801561042457600080fd5b5061042d610d8f565b60405161043a919061395f565b60405180910390f35b34801561044f57600080fd5b50610458610d95565b6040516104659190613c87565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613afb565b610d9e565b6040516104a29190613b56565b60405180910390f35b3480156104b757600080fd5b506104c0610e4a565b6040516104cd9190613cb1565b60405180910390f35b3480156104e257600080fd5b506104eb610e70565b6040516104f89190613cb1565b60405180910390f35b34801561050d57600080fd5b50610516610e96565b6040516105239190613b56565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190613beb565b610ea9565b6040516105609190613b56565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613beb565b610eff565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613cf8565b611132565b005b3480156105c757600080fd5b506105d0611281565b6040516105dd919061395f565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190613d25565b611287565b005b34801561061b57600080fd5b50610636600480360381019061063191906139ab565b6113a6565b005b34801561064457600080fd5b5061064d6114f6565b60405161065a9190613b56565b60405180910390f35b34801561066f57600080fd5b50610678611509565b604051610685919061395f565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190613beb565b61150f565b6040516106c2919061395f565b60405180910390f35b3480156106d757600080fd5b506106e0611557565b005b3480156106ee57600080fd5b506106f76116af565b604051610704919061395f565b60405180910390f35b34801561071957600080fd5b506107226116b5565b60405161072f919061395f565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190613d52565b6116bb565b005b34801561076d57600080fd5b506107766118fb565b005b34801561078457600080fd5b5061078d611a1a565b60405161079a9190613cb1565b60405180910390f35b3480156107af57600080fd5b506107b8611a44565b6040516107c59190613a7b565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613afb565b611ad6565b6040516108029190613b56565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613afb565b611bc1565b60405161083f9190613b56565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a9190613d25565b611bdf565b005b34801561087d57600080fd5b50610898600480360381019061089391906139ab565b611d10565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190613d52565b611ee5565b005b3480156108cf57600080fd5b506108d86120b7565b6040516108e5919061395f565b60405180910390f35b3480156108fa57600080fd5b5061091560048036038101906109109190613d92565b6120bd565b604051610922919061395f565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d9190613cf8565b612144565b005b34801561096057600080fd5b5061096961224d565b604051610976919061395f565b60405180910390f35b34801561098b57600080fd5b506109a660048036038101906109a19190613beb565b612253565b005b3480156109b457600080fd5b506109cf60048036038101906109ca9190613beb565b612419565b005b60165481565b6109df612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6590613e1e565b60405180910390fd5b81600a8190555080600c81905550600c54600a54610a8c9190613e6d565b600e81905550600f54600e54600d54610aa59190613e6d565b1115610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613f13565b60405180910390fd5b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051610b1b929190613f33565b60405180910390a15050565b606060038054610b3690613f8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6290613f8b565b8015610baf5780601f10610b8457610100808354040283529160200191610baf565b820191906000526020600020905b815481529060010190602001808311610b9257829003601f168201915b5050505050905090565b6000610bcd610bc6612689565b8484612691565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca9612689565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d655782811015610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d479061402e565b60405180910390fd5b610d6485610d5c612689565b858403612691565b5b610d7085858561285a565b60019150509392505050565b601560009054906101000a900460ff1681565b600a5481565b60006012905090565b6000610e40610dab612689565b848460016000610db9612689565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e3b9190613e6d565b612691565b6001905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360029054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f07612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613e1e565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d906140c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c90614152565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2551960305e8f85b09658bb3075878e3e3cef37a5f7b5d43261f5e6f36b3d6a4601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516111279190613cb1565b60405180910390a150565b61113a612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090613e1e565b60405180910390fd5b601560009054906101000a900460ff1615158115150361121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906141e4565b60405180910390fd5b80601560006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601560009054906101000a900460ff166040516112769190613b56565b60405180910390a150565b60175481565b61128f612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131590613e1e565b60405180910390fd5b600f54811115611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a90614276565b60405180910390fd5b806010819055507f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b60105460405161139b919061395f565b60405180910390a150565b6113ae612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613e1e565b60405180910390fd5b8160098190555080600b81905550600b5460095461145b9190613e6d565b600d81905550600f54600e54600d546114749190613e6d565b11156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90613f13565b60405180910390fd5b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b546040516114ea929190613f33565b60405180910390a15050565b601360019054906101000a900460ff1681565b60105481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61155f612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590613e1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60095481565b600b5481565b6116c3612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990613e1e565b60405180910390fd5b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614308565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990614374565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c10826040516118ef9190613b56565b60405180910390a25050565b611903612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613e1e565b60405180910390fd5b601360029054906101000a900460ff16156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906143e0565b60405180910390fd5b6001601360026101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a5390613f8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7f90613f8b565b8015611acc5780601f10611aa157610100808354040283529160200191611acc565b820191906000526020600020905b815481529060010190602001808311611aaf57829003601f168201915b5050505050905090565b60008060016000611ae5612689565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614472565b60405180910390fd5b611bb6611bad612689565b85858403612691565b600191505092915050565b6000611bd5611bce612689565b848461285a565b6001905092915050565b611be7612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90613e1e565b60405180910390fd5b620f4240611c82610bfd565b611c8c91906144c1565b8111611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490614564565b60405180910390fd5b806012819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145601254604051611d05919061395f565b60405180910390a150565b611d18612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90613e1e565b60405180910390fd5b6103e8611db2610d95565b600a611dbe91906146b7565b611dc6610bfd565b611dd091906144c1565b611dda91906144c1565b8210158015611e1b57506103e8611def610d95565b600a611dfb91906146b7565b611e03610bfd565b611e0d91906144c1565b611e1791906144c1565b8110155b611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5190614774565b60405180910390fd5b611e62610d95565b600a611e6e91906146b7565b82611e799190614794565b601681905550611e87610d95565b600a611e9391906146b7565b81611e9e9190614794565b6017819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601654601754604051611ed9929190613f33565b60405180910390a15050565b611eed612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613e1e565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200590614848565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120ab9190613b56565b60405180910390a25050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61214c612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290613e1e565b60405180910390fd5b801515601360019054906101000a900460ff16151503612230576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612227906148da565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b60125481565b61225b612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190613e1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123509061496c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612421612689565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a790613e1e565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361251e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612515906149fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125815761257b473373ffffffffffffffffffffffffffffffffffffffff1661301690919063ffffffff16565b50612686565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125c19190613cb1565b602060405180830381865afa1580156125de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126029190614a33565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161263f929190614a60565b6020604051808303816000875af115801561265e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126829190614a9e565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f790614b3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690614bcf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161284d919061395f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292f90614cf3565b60405180910390fd5b601360029054906101000a900460ff168061299c5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806129f05750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2690614d5f565b60405180910390fd5b60008103612a4857612a43838360006130d1565b613011565b601560009054906101000a900460ff1615612c9e57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b065750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612b5c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bb25750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9d57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c5657601654811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614df1565b60405180910390fd5b612c9c565b601754811115612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290614df1565b60405180910390fd5b5b5b5b6000612ca93061150f565b905060006012548210159050808015612ccf5750601360009054906101000a900460ff16155b8015612d285750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612d4357506000600e54600d54612d419190613e6d565b115b8015612d5b5750601360019054906101000a900460ff165b15612e34576001601360006101000a81548160ff0219169083151502179055506000600e54600d54612d8d9190613e6d565b90506000600a54600954612da19190613e6d565b90506000600c54600b54612db59190613e6d565b90506000821115612de6576000838387612dcf9190614794565b612dd991906144c1565b9050612de481613350565b505b6000811115612e15576000838287612dfe9190614794565b612e0891906144c1565b9050612e138161368a565b505b6000601360006101000a81548160ff0219169083151502179055505050505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ed75750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612eee5750601360009054906101000a900460ff165b15612efc5760009050612fc2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612f5b57600d549050612fc1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612fba57600e549050612fc0565b60105490505b5b5b600081111561300257600060648286612fdb9190614794565b612fe591906144c1565b90508085612ff39190614e11565b94506130008730836130d1565b505b61300d8686866130d1565b5050505b505050565b60008147101561305b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305290614e91565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff168360405161308190614ee2565b60006040518083038185875af1925050503d80600081146130be576040519150601f19603f3d011682016040523d82523d6000602084013e6130c3565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313790614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a690614cf3565b60405180910390fd5b6131ba83838361393c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323790614f69565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132d39190613e6d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613337919061395f565b60405180910390a361334a848484613941565b50505050565b600060028261335f91906144c1565b90506000818361336f9190614e11565b905060004790506000600267ffffffffffffffff81111561339357613392614f89565b5b6040519080825280602002602001820160405280156133c15781602001602082028036833780820191505090505b50905030816000815181106133d9576133d8614fb8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a49190614ffc565b816001815181106134b8576134b7614fb8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401613556959493929190615122565b600060405180830381600087803b15801561357057600080fd5b505af1158015613584573d6000803e3d6000fd5b50505050600082476135969190614e11565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308760008061dead426040518863ffffffff1660e01b81526004016136019695949392919061517c565b60606040518083038185885af115801561361f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061364491906151dd565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828660405161367a93929190615230565b60405180910390a1505050505050565b60004790506000600267ffffffffffffffff8111156136ac576136ab614f89565b5b6040519080825280602002602001820160405280156136da5781602001602082028036833780820191505090505b50905030816000815181106136f2576136f1614fb8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190614ffc565b816001815181106137d1576137d0614fb8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b815260040161386f959493929190615122565b600060405180830381600087803b15801561388957600080fd5b505af115801561389d573d6000803e3d6000fd5b50505050600082476138af9190614e11565b90506138fc81601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661301690919063ffffffff16565b507f6ee08a4b84466b2b8ab17edfa2ae350edb07f10a0611b728cde52c4b17434f57848260405161392e929190613f33565b60405180910390a150505050565b505050565b505050565b6000819050919050565b61395981613946565b82525050565b60006020820190506139746000830184613950565b92915050565b600080fd5b61398881613946565b811461399357600080fd5b50565b6000813590506139a58161397f565b92915050565b600080604083850312156139c2576139c161397a565b5b60006139d085828601613996565b92505060206139e185828601613996565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a25578082015181840152602081019050613a0a565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a4d826139eb565b613a5781856139f6565b9350613a67818560208601613a07565b613a7081613a31565b840191505092915050565b60006020820190508181036000830152613a958184613a42565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ac882613a9d565b9050919050565b613ad881613abd565b8114613ae357600080fd5b50565b600081359050613af581613acf565b92915050565b60008060408385031215613b1257613b1161397a565b5b6000613b2085828601613ae6565b9250506020613b3185828601613996565b9150509250929050565b60008115159050919050565b613b5081613b3b565b82525050565b6000602082019050613b6b6000830184613b47565b92915050565b6000819050919050565b6000613b96613b91613b8c84613a9d565b613b71565b613a9d565b9050919050565b6000613ba882613b7b565b9050919050565b6000613bba82613b9d565b9050919050565b613bca81613baf565b82525050565b6000602082019050613be56000830184613bc1565b92915050565b600060208284031215613c0157613c0061397a565b5b6000613c0f84828501613ae6565b91505092915050565b600080600060608486031215613c3157613c3061397a565b5b6000613c3f86828701613ae6565b9350506020613c5086828701613ae6565b9250506040613c6186828701613996565b9150509250925092565b600060ff82169050919050565b613c8181613c6b565b82525050565b6000602082019050613c9c6000830184613c78565b92915050565b613cab81613abd565b82525050565b6000602082019050613cc66000830184613ca2565b92915050565b613cd581613b3b565b8114613ce057600080fd5b50565b600081359050613cf281613ccc565b92915050565b600060208284031215613d0e57613d0d61397a565b5b6000613d1c84828501613ce3565b91505092915050565b600060208284031215613d3b57613d3a61397a565b5b6000613d4984828501613996565b91505092915050565b60008060408385031215613d6957613d6861397a565b5b6000613d7785828601613ae6565b9250506020613d8885828601613ce3565b9150509250929050565b60008060408385031215613da957613da861397a565b5b6000613db785828601613ae6565b9250506020613dc885828601613ae6565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e086020836139f6565b9150613e1382613dd2565b602082019050919050565b60006020820190508181036000830152613e3781613dfb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e7882613946565b9150613e8383613946565b9250828201905080821115613e9b57613e9a613e3e565b5b92915050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000613efd6024836139f6565b9150613f0882613ea1565b604082019050919050565b60006020820190508181036000830152613f2c81613ef0565b9050919050565b6000604082019050613f486000830185613950565b613f556020830184613950565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fa357607f821691505b602082108103613fb657613fb5613f5c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140186028836139f6565b915061402382613fbc565b604082019050919050565b600060208201905081810360008301526140478161400b565b9050919050565b7f54726561737572792077616c6c657420697320616c726561647920746861742060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b60006140aa6027836139f6565b91506140b58261404e565b604082019050919050565b600060208201905081810360008301526140d98161409d565b9050919050565b7f54726561737572792077616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061413c602a836139f6565b9150614147826140e0565b604082019050919050565b6000602082019050818103600083015261416b8161412f565b9050919050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b60006141ce6032836139f6565b91506141d982614172565b604082019050919050565b600060208201905081810360008301526141fd816141c1565b9050919050565b7f57616c6c657420746f2057616c6c6574205472616e736665722046656520636160008201527f6e6e6f742065786365656420746865206d6178696d756d000000000000000000602082015250565b60006142606037836139f6565b915061426b82614204565b604082019050919050565b6000602082019050818103600083015261428f81614253565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b60006142f26024836139f6565b91506142fd82614296565b604082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b600061435e6017836139f6565b915061436982614328565b602082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b60006143ca6018836139f6565b91506143d582614394565b602082019050919050565b600060208201905081810360008301526143f9816143bd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061445c6025836139f6565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144cc82613946565b91506144d783613946565b9250826144e7576144e6614492565b5b828204905092915050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b600061454e603f836139f6565b9150614559826144f2565b604082019050919050565b6000602082019050818103600083015261457d81614541565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156145db578086048111156145b7576145b6613e3e565b5b60018516156145c65780820291505b80810290506145d485614584565b945061459b565b94509492505050565b6000826145f457600190506146b0565b8161460257600090506146b0565b8160018114614618576002811461462257614651565b60019150506146b0565b60ff84111561463457614633613e3e565b5b8360020a91508482111561464b5761464a613e3e565b5b506146b0565b5060208310610133831016604e8410600b84101617156146865782820a90508381111561468157614680613e3e565b5b6146b0565b6146938484846001614591565b925090508184048111156146aa576146a9613e3e565b5b81810290505b9392505050565b60006146c282613946565b91506146cd83613c6b565b92506146fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846145e4565b905092915050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b600061475e603f836139f6565b915061476982614702565b604082019050919050565b6000602082019050818103600083015261478d81614751565b9050919050565b600061479f82613946565b91506147aa83613946565b92508282026147b881613946565b915082820484148315176147cf576147ce613e3e565b5b5092915050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614832602a836139f6565b915061483d826147d6565b604082019050919050565b6000602082019050818103600083015261486181614825565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006148c46022836139f6565b91506148cf82614868565b604082019050919050565b600060208201905081810360008301526148f3816148b7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149566026836139f6565b9150614961826148fa565b604082019050919050565b6000602082019050818103600083015261498581614949565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b60006149e86037836139f6565b91506149f38261498c565b604082019050919050565b60006020820190508181036000830152614a17816149db565b9050919050565b600081519050614a2d8161397f565b92915050565b600060208284031215614a4957614a4861397a565b5b6000614a5784828501614a1e565b91505092915050565b6000604082019050614a756000830185613ca2565b614a826020830184613950565b9392505050565b600081519050614a9881613ccc565b92915050565b600060208284031215614ab457614ab361397a565b5b6000614ac284828501614a89565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b276024836139f6565b9150614b3282614acb565b604082019050919050565b60006020820190508181036000830152614b5681614b1a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bb96022836139f6565b9150614bc482614b5d565b604082019050919050565b60006020820190508181036000830152614be881614bac565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c4b6025836139f6565b9150614c5682614bef565b604082019050919050565b60006020820190508181036000830152614c7a81614c3e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cdd6023836139f6565b9150614ce882614c81565b604082019050919050565b60006020820190508181036000830152614d0c81614cd0565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000614d496018836139f6565b9150614d5482614d13565b602082019050919050565b60006020820190508181036000830152614d7881614d3c565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b6000614ddb603b836139f6565b9150614de682614d7f565b604082019050919050565b60006020820190508181036000830152614e0a81614dce565b9050919050565b6000614e1c82613946565b9150614e2783613946565b9250828203905081811115614e3f57614e3e613e3e565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614e7b601d836139f6565b9150614e8682614e45565b602082019050919050565b60006020820190508181036000830152614eaa81614e6e565b9050919050565b600081905092915050565b50565b6000614ecc600083614eb1565b9150614ed782614ebc565b600082019050919050565b6000614eed82614ebf565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f536026836139f6565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ff681613acf565b92915050565b6000602082840312156150125761501161397a565b5b600061502084828501614fe7565b91505092915050565b6000819050919050565b600061504e61504961504484615029565b613b71565b613946565b9050919050565b61505e81615033565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61509981613abd565b82525050565b60006150ab8383615090565b60208301905092915050565b6000602082019050919050565b60006150cf82615064565b6150d9818561506f565b93506150e483615080565b8060005b838110156151155781516150fc888261509f565b9750615107836150b7565b9250506001810190506150e8565b5085935050505092915050565b600060a0820190506151376000830188613950565b6151446020830187615055565b818103604083015261515681866150c4565b90506151656060830185613ca2565b6151726080830184613950565b9695505050505050565b600060c0820190506151916000830189613ca2565b61519e6020830188613950565b6151ab6040830187615055565b6151b86060830186615055565b6151c56080830185613ca2565b6151d260a0830184613950565b979650505050505050565b6000806000606084860312156151f6576151f561397a565b5b600061520486828701614a1e565b935050602061521586828701614a1e565b925050604061522686828701614a1e565b9150509250925092565b60006060820190506152456000830186613950565b6152526020830185613950565b61525f6040830184613950565b94935050505056fea26469706673582212201ca380013588217108287ed0032f39b05c6b34b40cf2614dc4da5769e7d9c98364736f6c63430008110033

Deployed Bytecode Sourcemap

19611:13456:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31135:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24647:457;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14896:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15810:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19696:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15217:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32923:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15987:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31086:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19884:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15116:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16568:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20168:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19744:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25856:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24062:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25480:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31500:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31181:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25112:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24195:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20281:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20118:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15333:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14083:148;;;;;;;;;;;;;:::i;:::-;;19844:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19927:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32516:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25891:175;;;;;;;;;;;;;:::i;:::-;;13869:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15004:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16791:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15468:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29173:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31819:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23764:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19966:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15651:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28986:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20207:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14239:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23291:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31135:39;;;;:::o;24647:457::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24779:19:::1;24758:18;:40;;;;24829:18;24809:17;:38;;;;24902:17;;24881:18;;:38;;;;:::i;:::-;24860:16;:59;;;;24978:6;;24958:16;;24940:15;;:34;;;;:::i;:::-;:44;;24932:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;25043:53;25058:18;;25078:17;;25043:53;;;;;;;:::i;:::-;;;;;;;;24647:457:::0;;:::o;14896:100::-;14950:13;14983:5;14976:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14896:100;:::o;15810:169::-;15893:4;15910:39;15919:12;:10;:12::i;:::-;15933:7;15942:6;15910:8;:39::i;:::-;15967:4;15960:11;;15810:169;;;;:::o;19696:41::-;;;;;;;;;;;;;:::o;15217:108::-;15278:7;15305:12;;15298:19;;15217:108;:::o;32923:141::-;32998:4;33022:25;:34;33048:7;33022:34;;;;;;;;;;;;;;;;;;;;;;;;;33015:41;;32923:141;;;:::o;15987:573::-;16127:4;16144:24;16171:11;:19;16183:6;16171:19;;;;;;;;;;;;;;;:33;16191:12;:10;:12::i;:::-;16171:33;;;;;;;;;;;;;;;;16144:60;;16239:17;16219:16;:37;16215:265;;16301:6;16281:16;:26;;16273:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16396:57;16405:6;16413:12;:10;:12::i;:::-;16446:6;16427:16;:25;16396:8;:57::i;:::-;16215:265;16492:36;16502:6;16510:9;16521:6;16492:9;:36::i;:::-;16548:4;16541:11;;;15987:573;;;;;:::o;31086:42::-;;;;;;;;;;;;;:::o;19884:34::-;;;;:::o;15116:93::-;15174:5;15199:2;15192:9;;15116:93;:::o;16568:215::-;16656:4;16673:80;16682:12;:10;:12::i;:::-;16696:7;16742:10;16705:11;:25;16717:12;:10;:12::i;:::-;16705:25;;;;;;;;;;;;;;;:34;16731:7;16705:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16673:8;:80::i;:::-;16771:4;16764:11;;16568:215;;;;:::o;20168:30::-;;;;;;;;;;;;;:::o;19744:29::-;;;;;;;;;;;;;:::o;25856:26::-;;;;;;;;;;;;;:::o;24062:125::-;24127:4;24151:19;:28;24171:7;24151:28;;;;;;;;;;;;;;;;;;;;;;;;;24144:35;;24062:125;;;:::o;25480:368::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25591:14:::1;;;;;;;;;;;25572:33;;:15;:33;;::::0;25564:84:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25694:1;25667:29;;:15;:29;;::::0;25659:83:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25770:15;25753:14;;:32;;;;;;;;;;;;;;;;;;25803:37;25825:14;;;;;;;;;;;25803:37;;;;;;:::i;:::-;;;;;;;;25480:368:::0;:::o;31500:311::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31599:26:::1;;;;;;;;;;;31589:36;;:6;:36;;::::0;31581:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31720:6;31691:26;;:35;;;;;;;;;;;;;;;;;;31744:59;31776:26;;;;;;;;;;;31744:59;;;;;;:::i;:::-;;;;;;;;31500:311:::0;:::o;31181:40::-;;;;:::o;25112:360::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25257:6:::1;;25227:26;:36;;25219:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;25362:26;25334:25;:54;;;;25406:58;25438:25;;25406:58;;;;;;:::i;:::-;;;;;;;;25112:360:::0;:::o;24195:444::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24323:18:::1;24303:17;:38;;;;24371:17;24352:16;:36;;;;24441:16;;24421:17;;:36;;;;:::i;:::-;24401:15;:56;;;;24516:6;;24496:16;;24478:15;;:34;;;;:::i;:::-;:44;;24470:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;24581:50;24595:17;;24614:16;;24581:50;;;;;;;:::i;:::-;;;;;;;;24195:444:::0;;:::o;20281:26::-;;;;;;;;;;;;;:::o;20118:41::-;;;;:::o;15333:127::-;15407:7;15434:9;:18;15444:7;15434:18;;;;;;;;;;;;;;;;15427:25;;15333:127;;;:::o;14083:148::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14190:1:::1;14153:40;;14174:6;;;;;;;;;;;14153:40;;;;;;;;;;;;14221:1;14204:6;;:19;;;;;;;;;;;;;;;;;;14083:148::o:0;19844:33::-;;;;:::o;19927:32::-;;;;:::o;32516:399::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32664:7:::1;32626:45;;:25;:34;32652:7;32626:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;32617:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32750:4;32731:24;;:7;:24;;::::0;32723:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32833:7;32796:25;:34;32822:7;32796:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;32890:7;32858:49;;;32899:7;32858:49;;;;;;:::i;:::-;;;;;;;;32516:399:::0;;:::o;25891:175::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25954:14:::1;;;;;;;;;;;25953:15;25945:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;26025:4;26008:14;;:21;;;;;;;;;;;;;;;;;;26054:4;26040:11;;:18;;;;;;;;;;;;;;;;;;25891:175::o:0;13869:79::-;13907:7;13934:6;;;;;;;;;;;13927:13;;13869:79;:::o;15004:104::-;15060:13;15093:7;15086:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15004:104;:::o;16791:413::-;16884:4;16901:24;16928:11;:25;16940:12;:10;:12::i;:::-;16928:25;;;;;;;;;;;;;;;:34;16954:7;16928:34;;;;;;;;;;;;;;;;16901:61;;17001:15;16981:16;:35;;16973:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17094:67;17103:12;:10;:12::i;:::-;17117:7;17145:15;17126:16;:34;17094:8;:67::i;:::-;17192:4;17185:11;;;16791:413;;;;:::o;15468:175::-;15554:4;15571:42;15581:12;:10;:12::i;:::-;15595:9;15606:6;15571:9;:42::i;:::-;15631:4;15624:11;;15468:175;;;;:::o;29173:304::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29288:9:::1;29272:13;:11;:13::i;:::-;:25;;;;:::i;:::-;29260:9;:37;29252:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29397:9;29376:18;:30;;;;29424:45;29450:18;;29424:45;;;;;;:::i;:::-;;;;;;;;29173:304:::0;:::o;31819:689::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32042:5:::1;32027:10;:8;:10::i;:::-;32021:2;:16;;;;:::i;:::-;32004:13;:11;:13::i;:::-;:34;;;;:::i;:::-;32003:44;;;;:::i;:::-;31974:24;:73;;:164;;;;;32133:5;32118:10;:8;:10::i;:::-;32112:2;:16;;;;:::i;:::-;32095:13;:11;:13::i;:::-;:34;;;;:::i;:::-;32094:44;;;;:::i;:::-;32065:25;:73;;31974:164;31952:278;;;;;;;;;;;;:::i;:::-;;;;;;;;;32304:10;:8;:10::i;:::-;32298:2;:16;;;;:::i;:::-;32269:24;:46;;;;:::i;:::-;32242:23;:73;;;;32388:10;:8;:10::i;:::-;32382:2;:16;;;;:::i;:::-;32353:25;:46;;;;:::i;:::-;32326:24;:73;;;;32417:83;32450:23;;32475:24;;32417:83;;;;;;;:::i;:::-;;;;;;;;31819:689:::0;;:::o;23764:290::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23890:8:::1;23858:40;;:19;:28;23878:7;23858:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;23850:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23986:8;23955:19;:28;23975:7;23955:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24028:7;24012:34;;;24037:8;24012:34;;;;;;:::i;:::-;;;;;;;;23764:290:::0;;:::o;19966:33::-;;;;:::o;15651:151::-;15740:7;15767:11;:18;15779:5;15767:18;;;;;;;;;;;;;;;:27;15786:7;15767:27;;;;;;;;;;;;;;;;15760:34;;15651:151;;;;:::o;28986:179::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29077:8:::1;29062:23;;:11;;;;;;;;;;;:23;;::::0;29054:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29149:8;29135:11;;:22;;;;;;;;;;;;;;;;;;28986:179:::0;:::o;20207:34::-;;;;:::o;14239:244::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14348:1:::1;14328:22;;:8;:22;;::::0;14320:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14438:8;14409:38;;14430:6;;;;;;;;;;;14409:38;;;;;;;;;;;;14467:8;14458:6;;:17;;;;;;;;;;;;;;;;;;14239:244:::0;:::o;23291:465::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23387:4:::1;23370:22;;:5;:22;;::::0;23362:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23484:3;23467:21;;:5;:21;;::::0;23463:127:::1;;23505:52;23535:21;23513:10;23505:29;;;;:52;;;;:::i;:::-;;23572:7;;23463:127;23600:17;23627:5;23600:33;;23644:15;23662:10;:20;;;23691:4;23662:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23644:53;;23708:10;:19;;;23728:10;23740:7;23708:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23351:405;;14066:1;23291:465:::0;:::o;13192:98::-;13245:7;13272:10;13265:17;;13192:98;:::o;18959:380::-;19112:1;19095:19;;:5;:19;;;19087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19193:1;19174:21;;:7;:21;;;19166:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19277:6;19247:11;:18;19259:5;19247:18;;;;;;;;;;;;;;;:27;19266:7;19247:27;;;;;;;;;;;;;;;:36;;;;19315:7;19299:32;;19308:5;19299:32;;;19324:6;19299:32;;;;;;:::i;:::-;;;;;;;;18959:380;;;:::o;26074:2904::-;26187:1;26171:18;;:4;:18;;;26163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26264:1;26250:16;;:2;:16;;;26242:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26325:14;;;;;;;;;;;:43;;;;26343:19;:25;26363:4;26343:25;;;;;;;;;;;;;;;;;;;;;;;;;26325:43;:70;;;;26372:19;:23;26392:2;26372:23;;;;;;;;;;;;;;;;;;;;;;;;;26325:70;26317:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;26458:1;26448:6;:11;26444:93;;26476:28;26492:4;26498:2;26502:1;26476:15;:28::i;:::-;26519:7;;26444:93;26553:26;;;;;;;;;;;26549:752;;;26619:13;;;;;;;;;;;26611:21;;:4;:21;;;:44;;;;26642:13;;;;;;;;;;;26636:19;;:2;:19;;;26611:44;26610:99;;;;;26678:25;:31;26704:4;26678:31;;;;;;;;;;;;;;;;;;;;;;;;;26677:32;26610:99;:151;;;;;26732:25;:29;26758:2;26732:29;;;;;;;;;;;;;;;;;;;;;;;;;26731:30;26610:151;26606:684;;;26808:13;;;;;;;;;;;26800:21;;:4;:21;;;26796:479;;26890:23;;26880:6;:33;;26846:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26796:479;;;27119:24;;27109:6;:34;;27075:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26796:479;26606:684;26549:752;27307:28;27338:24;27356:4;27338:9;:24::i;:::-;27307:55;;27375:12;27414:18;;27390:20;:42;;27375:57;;27449:7;:33;;;;;27474:8;;;;;;;;;;;27473:9;27449:33;:69;;;;;27505:13;;;;;;;;;;;27499:19;;:2;:19;;;27449:69;:124;;;;;27572:1;27553:16;;27535:15;;:34;;;;:::i;:::-;:38;27449:124;:152;;;;;27590:11;;;;;;;;;;;27449:152;27445:887;;;27639:4;27628:8;;:15;;;;;;;;;;;;;;;;;;27660:16;27697;;27679:15;;:34;;;;:::i;:::-;27660:53;;27728:22;27773:18;;27753:17;;:38;;;;:::i;:::-;27728:63;;27806:21;27849:17;;27830:16;;:36;;;;:::i;:::-;27806:60;;27904:1;27887:14;:18;27883:183;;;27926:23;27992:8;27975:14;27952:20;:37;;;;:::i;:::-;:48;;;;:::i;:::-;27926:74;;28019:31;28034:15;28019:14;:31::i;:::-;27907:159;27883:183;28114:1;28098:13;:17;28094:184;;;28136:22;28200:8;28184:13;28161:20;:36;;;;:::i;:::-;:47;;;;:::i;:::-;28136:72;;28227:35;28247:14;28227:19;:35::i;:::-;28117:161;28094:184;28315:5;28304:8;;:16;;;;;;;;;;;;;;;;;;27613:719;;;27445:887;28344:18;28377:19;:25;28397:4;28377:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28406:19;:23;28426:2;28406:23;;;;;;;;;;;;;;;;;;;;;;;;;28377:52;:64;;;;28433:8;;;;;;;;;;;28377:64;28373:357;;;28471:1;28458:14;;28373:357;;;28502:13;;;;;;;;;;;28494:21;;:4;:21;;;28490:240;;28545:15;;28532:28;;28490:240;;;28588:13;;;;;;;;;;;28582:19;;:2;:19;;;28578:152;;28631:16;;28618:29;;28578:152;;;28693:25;;28680:38;;28578:152;28490:240;28373:357;28759:1;28746:10;:14;28742:183;;;28777:12;28816:3;28802:10;28793:6;:19;;;;:::i;:::-;28792:27;;;;:::i;:::-;28777:42;;28852:4;28843:6;:13;;;;:::i;:::-;28834:22;;28871:42;28887:4;28901;28908;28871:15;:42::i;:::-;28762:163;28742:183;28937:33;28953:4;28959:2;28963:6;28937:15;:33::i;:::-;26152:2826;;;26074:2904;;;;:::o;9102:266::-;9181:4;9230:6;9205:21;:31;;9197:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9284:12;9302:9;:14;;9324:6;9302:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9283:52;;;9353:7;9346:14;;;9102:266;;;;:::o;17212:733::-;17370:1;17352:20;;:6;:20;;;17344:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17454:1;17433:23;;:9;:23;;;17425:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17509:47;17530:6;17538:9;17549:6;17509:20;:47::i;:::-;17569:21;17593:9;:17;17603:6;17593:17;;;;;;;;;;;;;;;;17569:41;;17646:6;17629:13;:23;;17621:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17767:6;17751:13;:22;17731:9;:17;17741:6;17731:17;;;;;;;;;;;;;;;:42;;;;17819:6;17795:9;:20;17805:9;17795:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17860:9;17843:35;;17852:6;17843:35;;;17871:6;17843:35;;;;;;:::i;:::-;;;;;;;;17891:46;17911:6;17919:9;17930:6;17891:19;:46::i;:::-;17333:612;17212:733;;;:::o;29485:876::-;29544:12;29568:1;29559:6;:10;;;;:::i;:::-;29544:25;;29580:17;29609:4;29600:6;:13;;;;:::i;:::-;29580:33;;29626:22;29651:21;29626:46;;29685:21;29723:1;29709:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29685:40;;29754:4;29736;29741:1;29736:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29780:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29770:4;29775:1;29770:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29815:15;;;;;;;;;;;:66;;;29896:4;29915:1;29931:4;29958;29978:15;29815:179;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30015:18;30060:14;30036:21;:38;;;;:::i;:::-;30015:59;;30087:15;;;;;;;;;;;:31;;;30126:10;30160:4;30180:9;30204:1;30220;30244:6;30266:15;30087:205;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30310:43;30325:4;30331:10;30343:9;30310:43;;;;;;;;:::i;:::-;;;;;;;;29533:828;;;;;29485:876;:::o;30369:644::-;30438:22;30463:21;30438:46;;30497:21;30535:1;30521:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30497:40;;30566:4;30548;30553:1;30548:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30592:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30582:4;30587:1;30582:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30627:15;;;;;;;;;;;:66;;;30708:11;30734:1;30750:4;30777;30797:15;30627:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30826:18;30871:14;30847:21;:38;;;;:::i;:::-;30826:59;;30898:45;30932:10;30906:14;;;;;;;;;;;30898:33;;;;:45;;;;:::i;:::-;;30961:44;30981:11;30994:10;30961:44;;;;;;;:::i;:::-;;;;;;;;30427:586;;;30369:644;:::o;19347:125::-;;;;:::o;19480: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;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:474::-;1110:6;1118;1167:2;1155:9;1146:7;1142:23;1138:32;1135:119;;;1173:79;;:::i;:::-;1135:119;1293:1;1318:53;1363:7;1354:6;1343:9;1339:22;1318:53;:::i;:::-;1308:63;;1264:117;1420:2;1446:53;1491:7;1482:6;1471:9;1467:22;1446:53;:::i;:::-;1436:63;;1391:118;1042:474;;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:246::-;1883:1;1893:113;1907:6;1904:1;1901:13;1893:113;;;1992:1;1987:3;1983:11;1977:18;1973:1;1968:3;1964:11;1957:39;1929:2;1926:1;1922:10;1917:15;;1893:113;;;2040:1;2031:6;2026:3;2022:16;2015:27;1864:184;1802:246;;;:::o;2054:102::-;2095:6;2146:2;2142:7;2137:2;2130:5;2126:14;2122:28;2112:38;;2054:102;;;:::o;2162:377::-;2250:3;2278:39;2311:5;2278:39;:::i;:::-;2333:71;2397:6;2392:3;2333:71;:::i;:::-;2326:78;;2413:65;2471:6;2466:3;2459:4;2452:5;2448:16;2413:65;:::i;:::-;2503:29;2525:6;2503:29;:::i;:::-;2498:3;2494:39;2487:46;;2254:285;2162:377;;;;:::o;2545:313::-;2658:4;2696:2;2685:9;2681:18;2673:26;;2745:9;2739:4;2735:20;2731:1;2720:9;2716:17;2709:47;2773:78;2846:4;2837:6;2773:78;:::i;:::-;2765:86;;2545:313;;;;:::o;2864:126::-;2901:7;2941:42;2934:5;2930:54;2919:65;;2864:126;;;:::o;2996:96::-;3033:7;3062:24;3080:5;3062:24;:::i;:::-;3051:35;;2996:96;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:60::-;4306:3;4327:5;4320:12;;4278:60;;;:::o;4344:142::-;4394:9;4427:53;4445:34;4454:24;4472:5;4454:24;:::i;:::-;4445:34;:::i;:::-;4427:53;:::i;:::-;4414:66;;4344:142;;;:::o;4492:126::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4492:126;;;:::o;4624:152::-;4700:9;4733:37;4764:5;4733:37;:::i;:::-;4720:50;;4624:152;;;:::o;4782:183::-;4895:63;4952:5;4895:63;:::i;:::-;4890:3;4883:76;4782:183;;:::o;4971:274::-;5090:4;5128:2;5117:9;5113:18;5105:26;;5141:97;5235:1;5224:9;5220:17;5211:6;5141:97;:::i;:::-;4971:274;;;;:::o;5251:329::-;5310:6;5359:2;5347:9;5338:7;5334:23;5330:32;5327:119;;;5365:79;;:::i;:::-;5327:119;5485:1;5510:53;5555:7;5546:6;5535:9;5531:22;5510:53;:::i;:::-;5500:63;;5456:117;5251:329;;;;:::o;5586:619::-;5663:6;5671;5679;5728:2;5716:9;5707:7;5703:23;5699:32;5696:119;;;5734:79;;:::i;:::-;5696:119;5854:1;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5825:117;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5586:619;;;;;:::o;6211:86::-;6246:7;6286:4;6279:5;6275:16;6264:27;;6211:86;;;:::o;6303:112::-;6386:22;6402:5;6386:22;:::i;:::-;6381:3;6374:35;6303:112;;:::o;6421:214::-;6510:4;6548:2;6537:9;6533:18;6525:26;;6561:67;6625:1;6614:9;6610:17;6601:6;6561:67;:::i;:::-;6421:214;;;;:::o;6641:118::-;6728:24;6746:5;6728:24;:::i;:::-;6723:3;6716:37;6641:118;;:::o;6765:222::-;6858:4;6896:2;6885:9;6881:18;6873:26;;6909:71;6977:1;6966:9;6962:17;6953:6;6909:71;:::i;:::-;6765:222;;;;:::o;6993:116::-;7063:21;7078:5;7063:21;:::i;:::-;7056:5;7053:32;7043:60;;7099:1;7096;7089:12;7043:60;6993:116;:::o;7115:133::-;7158:5;7196:6;7183:20;7174:29;;7212:30;7236:5;7212:30;:::i;:::-;7115:133;;;;:::o;7254:323::-;7310:6;7359:2;7347:9;7338:7;7334:23;7330:32;7327:119;;;7365:79;;:::i;:::-;7327:119;7485:1;7510:50;7552:7;7543:6;7532:9;7528:22;7510:50;:::i;:::-;7500:60;;7456:114;7254:323;;;;:::o;7583:329::-;7642:6;7691:2;7679:9;7670:7;7666:23;7662:32;7659:119;;;7697:79;;:::i;:::-;7659:119;7817:1;7842:53;7887:7;7878:6;7867:9;7863:22;7842:53;:::i;:::-;7832:63;;7788:117;7583:329;;;;:::o;7918:468::-;7983:6;7991;8040:2;8028:9;8019:7;8015:23;8011:32;8008:119;;;8046:79;;:::i;:::-;8008:119;8166:1;8191:53;8236:7;8227:6;8216:9;8212:22;8191:53;:::i;:::-;8181:63;;8137:117;8293:2;8319:50;8361:7;8352:6;8341:9;8337:22;8319:50;:::i;:::-;8309:60;;8264:115;7918:468;;;;;:::o;8392:474::-;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:182::-;9012:34;9008:1;9000:6;8996:14;8989:58;8872:182;:::o;9060:366::-;9202:3;9223:67;9287:2;9282:3;9223:67;:::i;:::-;9216:74;;9299:93;9388:3;9299:93;:::i;:::-;9417:2;9412:3;9408:12;9401:19;;9060:366;;;:::o;9432:419::-;9598:4;9636:2;9625:9;9621:18;9613:26;;9685:9;9679:4;9675:20;9671:1;9660:9;9656:17;9649:47;9713:131;9839:4;9713:131;:::i;:::-;9705:139;;9432:419;;;:::o;9857:180::-;9905:77;9902:1;9895:88;10002:4;9999:1;9992:15;10026:4;10023:1;10016:15;10043:191;10083:3;10102:20;10120:1;10102:20;:::i;:::-;10097:25;;10136:20;10154:1;10136:20;:::i;:::-;10131:25;;10179:1;10176;10172:9;10165:16;;10200:3;10197:1;10194:10;10191:36;;;10207:18;;:::i;:::-;10191:36;10043:191;;;;:::o;10240:223::-;10380:34;10376:1;10368:6;10364:14;10357:58;10449:6;10444:2;10436:6;10432:15;10425:31;10240:223;:::o;10469:366::-;10611:3;10632:67;10696:2;10691:3;10632:67;:::i;:::-;10625:74;;10708:93;10797:3;10708:93;:::i;:::-;10826:2;10821:3;10817:12;10810:19;;10469:366;;;:::o;10841:419::-;11007:4;11045:2;11034:9;11030:18;11022:26;;11094:9;11088:4;11084:20;11080:1;11069:9;11065:17;11058:47;11122:131;11248:4;11122:131;:::i;:::-;11114:139;;10841:419;;;:::o;11266:332::-;11387:4;11425:2;11414:9;11410:18;11402:26;;11438:71;11506:1;11495:9;11491:17;11482:6;11438:71;:::i;:::-;11519:72;11587:2;11576:9;11572:18;11563:6;11519:72;:::i;:::-;11266:332;;;;;:::o;11604:180::-;11652:77;11649:1;11642:88;11749:4;11746:1;11739:15;11773:4;11770:1;11763:15;11790:320;11834:6;11871:1;11865:4;11861:12;11851:22;;11918:1;11912:4;11908:12;11939:18;11929:81;;11995:4;11987:6;11983:17;11973:27;;11929:81;12057:2;12049:6;12046:14;12026:18;12023:38;12020:84;;12076:18;;:::i;:::-;12020:84;11841:269;11790:320;;;:::o;12116:227::-;12256:34;12252:1;12244:6;12240:14;12233:58;12325:10;12320:2;12312:6;12308:15;12301:35;12116:227;:::o;12349:366::-;12491:3;12512:67;12576:2;12571:3;12512:67;:::i;:::-;12505:74;;12588:93;12677:3;12588:93;:::i;:::-;12706:2;12701:3;12697:12;12690:19;;12349:366;;;:::o;12721:419::-;12887:4;12925:2;12914:9;12910:18;12902:26;;12974:9;12968:4;12964:20;12960:1;12949:9;12945:17;12938:47;13002:131;13128:4;13002:131;:::i;:::-;12994:139;;12721:419;;;:::o;13146:226::-;13286:34;13282:1;13274:6;13270:14;13263:58;13355:9;13350:2;13342:6;13338:15;13331:34;13146:226;:::o;13378:366::-;13520:3;13541:67;13605:2;13600:3;13541:67;:::i;:::-;13534:74;;13617:93;13706:3;13617:93;:::i;:::-;13735:2;13730:3;13726:12;13719:19;;13378:366;;;:::o;13750:419::-;13916:4;13954:2;13943:9;13939:18;13931:26;;14003:9;13997:4;13993:20;13989:1;13978:9;13974:17;13967:47;14031:131;14157:4;14031:131;:::i;:::-;14023:139;;13750:419;;;:::o;14175:229::-;14315:34;14311:1;14303:6;14299:14;14292:58;14384:12;14379:2;14371:6;14367:15;14360:37;14175:229;:::o;14410:366::-;14552:3;14573:67;14637:2;14632:3;14573:67;:::i;:::-;14566:74;;14649:93;14738:3;14649:93;:::i;:::-;14767:2;14762:3;14758:12;14751:19;;14410:366;;;:::o;14782:419::-;14948:4;14986:2;14975:9;14971:18;14963:26;;15035:9;15029:4;15025:20;15021:1;15010:9;15006:17;14999:47;15063:131;15189:4;15063:131;:::i;:::-;15055:139;;14782:419;;;:::o;15207:237::-;15347:34;15343:1;15335:6;15331:14;15324:58;15416:20;15411:2;15403:6;15399:15;15392:45;15207:237;:::o;15450:366::-;15592:3;15613:67;15677:2;15672:3;15613:67;:::i;:::-;15606:74;;15689:93;15778:3;15689:93;:::i;:::-;15807:2;15802:3;15798:12;15791:19;;15450:366;;;:::o;15822:419::-;15988:4;16026:2;16015:9;16011:18;16003:26;;16075:9;16069:4;16065:20;16061:1;16050:9;16046:17;16039:47;16103:131;16229:4;16103:131;:::i;:::-;16095:139;;15822:419;;;:::o;16247:242::-;16387:34;16383:1;16375:6;16371:14;16364:58;16456:25;16451:2;16443:6;16439:15;16432:50;16247:242;:::o;16495:366::-;16637:3;16658:67;16722:2;16717:3;16658:67;:::i;:::-;16651:74;;16734:93;16823:3;16734:93;:::i;:::-;16852:2;16847:3;16843:12;16836:19;;16495:366;;;:::o;16867:419::-;17033:4;17071:2;17060:9;17056:18;17048:26;;17120:9;17114:4;17110:20;17106:1;17095:9;17091:17;17084:47;17148:131;17274:4;17148:131;:::i;:::-;17140:139;;16867:419;;;:::o;17292:223::-;17432:34;17428:1;17420:6;17416:14;17409:58;17501:6;17496:2;17488:6;17484:15;17477:31;17292:223;:::o;17521:366::-;17663:3;17684:67;17748:2;17743:3;17684:67;:::i;:::-;17677:74;;17760:93;17849:3;17760:93;:::i;:::-;17878:2;17873:3;17869:12;17862:19;;17521:366;;;:::o;17893:419::-;18059:4;18097:2;18086:9;18082:18;18074:26;;18146:9;18140:4;18136:20;18132:1;18121:9;18117:17;18110:47;18174:131;18300:4;18174:131;:::i;:::-;18166:139;;17893:419;;;:::o;18318:173::-;18458:25;18454:1;18446:6;18442:14;18435:49;18318:173;:::o;18497:366::-;18639:3;18660:67;18724:2;18719:3;18660:67;:::i;:::-;18653:74;;18736:93;18825:3;18736:93;:::i;:::-;18854:2;18849:3;18845:12;18838:19;;18497:366;;;:::o;18869:419::-;19035:4;19073:2;19062:9;19058:18;19050:26;;19122:9;19116:4;19112:20;19108:1;19097:9;19093:17;19086:47;19150:131;19276:4;19150:131;:::i;:::-;19142:139;;18869:419;;;:::o;19294:174::-;19434:26;19430:1;19422:6;19418:14;19411:50;19294:174;:::o;19474:366::-;19616:3;19637:67;19701:2;19696:3;19637:67;:::i;:::-;19630:74;;19713:93;19802:3;19713:93;:::i;:::-;19831:2;19826:3;19822:12;19815:19;;19474:366;;;:::o;19846:419::-;20012:4;20050:2;20039:9;20035:18;20027:26;;20099:9;20093:4;20089:20;20085:1;20074:9;20070:17;20063:47;20127:131;20253:4;20127:131;:::i;:::-;20119:139;;19846:419;;;:::o;20271:224::-;20411:34;20407:1;20399:6;20395:14;20388:58;20480:7;20475:2;20467:6;20463:15;20456:32;20271:224;:::o;20501:366::-;20643:3;20664:67;20728:2;20723:3;20664:67;:::i;:::-;20657:74;;20740:93;20829:3;20740:93;:::i;:::-;20858:2;20853:3;20849:12;20842:19;;20501:366;;;:::o;20873:419::-;21039:4;21077:2;21066:9;21062:18;21054:26;;21126:9;21120:4;21116:20;21112:1;21101:9;21097:17;21090:47;21154:131;21280:4;21154:131;:::i;:::-;21146:139;;20873:419;;;:::o;21298:180::-;21346:77;21343:1;21336:88;21443:4;21440:1;21433:15;21467:4;21464:1;21457:15;21484:185;21524:1;21541:20;21559:1;21541:20;:::i;:::-;21536:25;;21575:20;21593:1;21575:20;:::i;:::-;21570:25;;21614:1;21604:35;;21619:18;;:::i;:::-;21604:35;21661:1;21658;21654:9;21649:14;;21484:185;;;;:::o;21675:250::-;21815:34;21811:1;21803:6;21799:14;21792:58;21884:33;21879:2;21871:6;21867:15;21860:58;21675:250;:::o;21931:366::-;22073:3;22094:67;22158:2;22153:3;22094:67;:::i;:::-;22087:74;;22170:93;22259:3;22170:93;:::i;:::-;22288:2;22283:3;22279:12;22272:19;;21931:366;;;:::o;22303:419::-;22469:4;22507:2;22496:9;22492:18;22484:26;;22556:9;22550:4;22546:20;22542:1;22531:9;22527:17;22520:47;22584:131;22710:4;22584:131;:::i;:::-;22576:139;;22303:419;;;:::o;22728:102::-;22770:8;22817:5;22814:1;22810:13;22789:34;;22728:102;;;:::o;22836:848::-;22897:5;22904:4;22928:6;22919:15;;22952:5;22943:14;;22966:712;22987:1;22977:8;22974:15;22966:712;;;23082:4;23077:3;23073:14;23067:4;23064:24;23061:50;;;23091:18;;:::i;:::-;23061:50;23141:1;23131:8;23127:16;23124:451;;;23556:4;23549:5;23545:16;23536:25;;23124:451;23606:4;23600;23596:15;23588:23;;23636:32;23659:8;23636:32;:::i;:::-;23624:44;;22966:712;;;22836:848;;;;;;;:::o;23690:1073::-;23744:5;23935:8;23925:40;;23956:1;23947:10;;23958:5;;23925:40;23984:4;23974:36;;24001:1;23992:10;;24003:5;;23974:36;24070:4;24118:1;24113:27;;;;24154:1;24149:191;;;;24063:277;;24113:27;24131:1;24122:10;;24133:5;;;24149:191;24194:3;24184:8;24181:17;24178:43;;;24201:18;;:::i;:::-;24178:43;24250:8;24247:1;24243:16;24234:25;;24285:3;24278:5;24275:14;24272:40;;;24292:18;;:::i;:::-;24272:40;24325:5;;;24063:277;;24449:2;24439:8;24436:16;24430:3;24424:4;24421:13;24417:36;24399:2;24389:8;24386:16;24381:2;24375:4;24372:12;24368:35;24352:111;24349:246;;;24505:8;24499:4;24495:19;24486:28;;24540:3;24533:5;24530:14;24527:40;;;24547:18;;:::i;:::-;24527:40;24580:5;;24349:246;24620:42;24658:3;24648:8;24642:4;24639:1;24620:42;:::i;:::-;24605:57;;;;24694:4;24689:3;24685:14;24678:5;24675:25;24672:51;;;24703:18;;:::i;:::-;24672:51;24752:4;24745:5;24741:16;24732:25;;23690:1073;;;;;;:::o;24769:281::-;24827:5;24851:23;24869:4;24851:23;:::i;:::-;24843:31;;24895:25;24911:8;24895:25;:::i;:::-;24883:37;;24939:104;24976:66;24966:8;24960:4;24939:104;:::i;:::-;24930:113;;24769:281;;;;:::o;25056:250::-;25196:34;25192:1;25184:6;25180:14;25173:58;25265:33;25260:2;25252:6;25248:15;25241:58;25056:250;:::o;25312:366::-;25454:3;25475:67;25539:2;25534:3;25475:67;:::i;:::-;25468:74;;25551:93;25640:3;25551:93;:::i;:::-;25669:2;25664:3;25660:12;25653:19;;25312:366;;;:::o;25684:419::-;25850:4;25888:2;25877:9;25873:18;25865:26;;25937:9;25931:4;25927:20;25923:1;25912:9;25908:17;25901:47;25965:131;26091:4;25965:131;:::i;:::-;25957:139;;25684:419;;;:::o;26109:410::-;26149:7;26172:20;26190:1;26172:20;:::i;:::-;26167:25;;26206:20;26224:1;26206:20;:::i;:::-;26201:25;;26261:1;26258;26254:9;26283:30;26301:11;26283:30;:::i;:::-;26272:41;;26462:1;26453:7;26449:15;26446:1;26443:22;26423:1;26416:9;26396:83;26373:139;;26492:18;;:::i;:::-;26373:139;26157:362;26109:410;;;;:::o;26525:229::-;26665:34;26661:1;26653:6;26649:14;26642:58;26734:12;26729:2;26721:6;26717:15;26710:37;26525:229;:::o;26760:366::-;26902:3;26923:67;26987:2;26982:3;26923:67;:::i;:::-;26916:74;;26999:93;27088:3;26999:93;:::i;:::-;27117:2;27112:3;27108:12;27101:19;;26760:366;;;:::o;27132:419::-;27298:4;27336:2;27325:9;27321:18;27313:26;;27385:9;27379:4;27375:20;27371:1;27360:9;27356:17;27349:47;27413:131;27539:4;27413:131;:::i;:::-;27405:139;;27132:419;;;:::o;27557:221::-;27697:34;27693:1;27685:6;27681:14;27674:58;27766:4;27761:2;27753:6;27749:15;27742:29;27557:221;:::o;27784:366::-;27926:3;27947:67;28011:2;28006:3;27947:67;:::i;:::-;27940:74;;28023:93;28112:3;28023:93;:::i;:::-;28141:2;28136:3;28132:12;28125:19;;27784:366;;;:::o;28156:419::-;28322:4;28360:2;28349:9;28345:18;28337:26;;28409:9;28403:4;28399:20;28395:1;28384:9;28380:17;28373:47;28437:131;28563:4;28437:131;:::i;:::-;28429:139;;28156:419;;;:::o;28581:225::-;28721:34;28717:1;28709:6;28705:14;28698:58;28790:8;28785:2;28777:6;28773:15;28766:33;28581:225;:::o;28812:366::-;28954:3;28975:67;29039:2;29034:3;28975:67;:::i;:::-;28968:74;;29051:93;29140:3;29051:93;:::i;:::-;29169:2;29164:3;29160:12;29153:19;;28812:366;;;:::o;29184:419::-;29350:4;29388:2;29377:9;29373:18;29365:26;;29437:9;29431:4;29427:20;29423:1;29412:9;29408:17;29401:47;29465:131;29591:4;29465:131;:::i;:::-;29457:139;;29184:419;;;:::o;29609:242::-;29749:34;29745:1;29737:6;29733:14;29726:58;29818:25;29813:2;29805:6;29801:15;29794:50;29609:242;:::o;29857:366::-;29999:3;30020:67;30084:2;30079:3;30020:67;:::i;:::-;30013:74;;30096:93;30185:3;30096:93;:::i;:::-;30214:2;30209:3;30205:12;30198:19;;29857:366;;;:::o;30229:419::-;30395:4;30433:2;30422:9;30418:18;30410:26;;30482:9;30476:4;30472:20;30468:1;30457:9;30453:17;30446:47;30510:131;30636:4;30510:131;:::i;:::-;30502:139;;30229:419;;;:::o;30654:143::-;30711:5;30742:6;30736:13;30727:22;;30758:33;30785:5;30758:33;:::i;:::-;30654:143;;;;:::o;30803:351::-;30873:6;30922:2;30910:9;30901:7;30897:23;30893:32;30890:119;;;30928:79;;:::i;:::-;30890:119;31048:1;31073:64;31129:7;31120:6;31109:9;31105:22;31073:64;:::i;:::-;31063:74;;31019:128;30803:351;;;;:::o;31160:332::-;31281:4;31319:2;31308:9;31304:18;31296:26;;31332:71;31400:1;31389:9;31385:17;31376:6;31332:71;:::i;:::-;31413:72;31481:2;31470:9;31466:18;31457:6;31413:72;:::i;:::-;31160:332;;;;;:::o;31498:137::-;31552:5;31583:6;31577:13;31568:22;;31599:30;31623:5;31599:30;:::i;:::-;31498:137;;;;:::o;31641:345::-;31708:6;31757:2;31745:9;31736:7;31732:23;31728:32;31725:119;;;31763:79;;:::i;:::-;31725:119;31883:1;31908:61;31961:7;31952:6;31941:9;31937:22;31908:61;:::i;:::-;31898:71;;31854:125;31641:345;;;;:::o;31992:223::-;32132:34;32128:1;32120:6;32116:14;32109:58;32201:6;32196:2;32188:6;32184:15;32177:31;31992:223;:::o;32221:366::-;32363:3;32384:67;32448:2;32443:3;32384:67;:::i;:::-;32377:74;;32460:93;32549:3;32460:93;:::i;:::-;32578:2;32573:3;32569:12;32562:19;;32221:366;;;:::o;32593:419::-;32759:4;32797:2;32786:9;32782:18;32774:26;;32846:9;32840:4;32836:20;32832:1;32821:9;32817:17;32810:47;32874:131;33000:4;32874:131;:::i;:::-;32866:139;;32593:419;;;:::o;33018:221::-;33158:34;33154:1;33146:6;33142:14;33135:58;33227:4;33222:2;33214:6;33210:15;33203:29;33018:221;:::o;33245:366::-;33387:3;33408:67;33472:2;33467:3;33408:67;:::i;:::-;33401:74;;33484:93;33573:3;33484:93;:::i;:::-;33602:2;33597:3;33593:12;33586:19;;33245:366;;;:::o;33617:419::-;33783:4;33821:2;33810:9;33806:18;33798:26;;33870:9;33864:4;33860:20;33856:1;33845:9;33841:17;33834:47;33898:131;34024:4;33898:131;:::i;:::-;33890:139;;33617:419;;;:::o;34042:224::-;34182:34;34178:1;34170:6;34166:14;34159:58;34251:7;34246:2;34238:6;34234:15;34227:32;34042:224;:::o;34272:366::-;34414:3;34435:67;34499:2;34494:3;34435:67;:::i;:::-;34428:74;;34511:93;34600:3;34511:93;:::i;:::-;34629:2;34624:3;34620:12;34613:19;;34272:366;;;:::o;34644:419::-;34810:4;34848:2;34837:9;34833:18;34825:26;;34897:9;34891:4;34887:20;34883:1;34872:9;34868:17;34861:47;34925:131;35051:4;34925:131;:::i;:::-;34917:139;;34644:419;;;:::o;35069:222::-;35209:34;35205:1;35197:6;35193:14;35186:58;35278:5;35273:2;35265:6;35261:15;35254:30;35069:222;:::o;35297:366::-;35439:3;35460:67;35524:2;35519:3;35460:67;:::i;:::-;35453:74;;35536:93;35625:3;35536:93;:::i;:::-;35654:2;35649:3;35645:12;35638:19;;35297:366;;;:::o;35669:419::-;35835:4;35873:2;35862:9;35858:18;35850:26;;35922:9;35916:4;35912:20;35908:1;35897:9;35893:17;35886:47;35950:131;36076:4;35950:131;:::i;:::-;35942:139;;35669:419;;;:::o;36094:174::-;36234:26;36230:1;36222:6;36218:14;36211:50;36094:174;:::o;36274:366::-;36416:3;36437:67;36501:2;36496:3;36437:67;:::i;:::-;36430:74;;36513:93;36602:3;36513:93;:::i;:::-;36631:2;36626:3;36622:12;36615:19;;36274:366;;;:::o;36646:419::-;36812:4;36850:2;36839:9;36835:18;36827:26;;36899:9;36893:4;36889:20;36885:1;36874:9;36870:17;36863:47;36927:131;37053:4;36927:131;:::i;:::-;36919:139;;36646:419;;;:::o;37071:246::-;37211:34;37207:1;37199:6;37195:14;37188:58;37280:29;37275:2;37267:6;37263:15;37256:54;37071:246;:::o;37323:366::-;37465:3;37486:67;37550:2;37545:3;37486:67;:::i;:::-;37479:74;;37562:93;37651:3;37562:93;:::i;:::-;37680:2;37675:3;37671:12;37664:19;;37323:366;;;:::o;37695:419::-;37861:4;37899:2;37888:9;37884:18;37876:26;;37948:9;37942:4;37938:20;37934:1;37923:9;37919:17;37912:47;37976:131;38102:4;37976:131;:::i;:::-;37968:139;;37695:419;;;:::o;38120:194::-;38160:4;38180:20;38198:1;38180:20;:::i;:::-;38175:25;;38214:20;38232:1;38214:20;:::i;:::-;38209:25;;38258:1;38255;38251:9;38243:17;;38282:1;38276:4;38273:11;38270:37;;;38287:18;;:::i;:::-;38270:37;38120:194;;;;:::o;38320:179::-;38460:31;38456:1;38448:6;38444:14;38437:55;38320:179;:::o;38505:366::-;38647:3;38668:67;38732:2;38727:3;38668:67;:::i;:::-;38661:74;;38744:93;38833:3;38744:93;:::i;:::-;38862:2;38857:3;38853:12;38846:19;;38505:366;;;:::o;38877:419::-;39043:4;39081:2;39070:9;39066:18;39058:26;;39130:9;39124:4;39120:20;39116:1;39105:9;39101:17;39094:47;39158:131;39284:4;39158:131;:::i;:::-;39150:139;;38877:419;;;:::o;39302:147::-;39403:11;39440:3;39425:18;;39302:147;;;;:::o;39455:114::-;;:::o;39575:398::-;39734:3;39755:83;39836:1;39831:3;39755:83;:::i;:::-;39748:90;;39847:93;39936:3;39847:93;:::i;:::-;39965:1;39960:3;39956:11;39949:18;;39575:398;;;:::o;39979:379::-;40163:3;40185:147;40328:3;40185:147;:::i;:::-;40178:154;;40349:3;40342:10;;39979:379;;;:::o;40364:225::-;40504:34;40500:1;40492:6;40488:14;40481:58;40573:8;40568:2;40560:6;40556:15;40549:33;40364:225;:::o;40595:366::-;40737:3;40758:67;40822:2;40817:3;40758:67;:::i;:::-;40751:74;;40834:93;40923:3;40834:93;:::i;:::-;40952:2;40947:3;40943:12;40936:19;;40595:366;;;:::o;40967:419::-;41133:4;41171:2;41160:9;41156:18;41148:26;;41220:9;41214:4;41210:20;41206:1;41195:9;41191:17;41184:47;41248:131;41374:4;41248:131;:::i;:::-;41240:139;;40967:419;;;:::o;41392:180::-;41440:77;41437:1;41430:88;41537:4;41534:1;41527:15;41561:4;41558:1;41551:15;41578:180;41626:77;41623:1;41616:88;41723:4;41720:1;41713:15;41747:4;41744:1;41737:15;41764:143;41821:5;41852:6;41846:13;41837:22;;41868:33;41895:5;41868:33;:::i;:::-;41764:143;;;;:::o;41913:351::-;41983:6;42032:2;42020:9;42011:7;42007:23;42003:32;42000:119;;;42038:79;;:::i;:::-;42000:119;42158:1;42183:64;42239:7;42230:6;42219:9;42215:22;42183:64;:::i;:::-;42173:74;;42129:128;41913:351;;;;:::o;42270:85::-;42315:7;42344:5;42333:16;;42270:85;;;:::o;42361:158::-;42419:9;42452:61;42470:42;42479:32;42505:5;42479:32;:::i;:::-;42470:42;:::i;:::-;42452:61;:::i;:::-;42439:74;;42361:158;;;:::o;42525:147::-;42620:45;42659:5;42620:45;:::i;:::-;42615:3;42608:58;42525:147;;:::o;42678:114::-;42745:6;42779:5;42773:12;42763:22;;42678:114;;;:::o;42798:184::-;42897:11;42931:6;42926:3;42919:19;42971:4;42966:3;42962:14;42947:29;;42798:184;;;;:::o;42988:132::-;43055:4;43078:3;43070:11;;43108:4;43103:3;43099:14;43091:22;;42988:132;;;:::o;43126:108::-;43203:24;43221:5;43203:24;:::i;:::-;43198:3;43191:37;43126:108;;:::o;43240:179::-;43309:10;43330:46;43372:3;43364:6;43330:46;:::i;:::-;43408:4;43403:3;43399:14;43385:28;;43240:179;;;;:::o;43425:113::-;43495:4;43527;43522:3;43518:14;43510:22;;43425:113;;;:::o;43574:732::-;43693:3;43722:54;43770:5;43722:54;:::i;:::-;43792:86;43871:6;43866:3;43792:86;:::i;:::-;43785:93;;43902:56;43952:5;43902:56;:::i;:::-;43981:7;44012:1;43997:284;44022:6;44019:1;44016:13;43997:284;;;44098:6;44092:13;44125:63;44184:3;44169:13;44125:63;:::i;:::-;44118:70;;44211:60;44264:6;44211:60;:::i;:::-;44201:70;;44057:224;44044:1;44041;44037:9;44032:14;;43997:284;;;44001:14;44297:3;44290:10;;43698:608;;;43574:732;;;;:::o;44312:831::-;44575:4;44613:3;44602:9;44598:19;44590:27;;44627:71;44695:1;44684:9;44680:17;44671:6;44627:71;:::i;:::-;44708:80;44784:2;44773:9;44769:18;44760:6;44708:80;:::i;:::-;44835:9;44829:4;44825:20;44820:2;44809:9;44805:18;44798:48;44863:108;44966:4;44957:6;44863:108;:::i;:::-;44855:116;;44981:72;45049:2;45038:9;45034:18;45025:6;44981:72;:::i;:::-;45063:73;45131:3;45120:9;45116:19;45107:6;45063:73;:::i;:::-;44312:831;;;;;;;;:::o;45149:807::-;45398:4;45436:3;45425:9;45421:19;45413:27;;45450:71;45518:1;45507:9;45503:17;45494:6;45450:71;:::i;:::-;45531:72;45599:2;45588:9;45584:18;45575:6;45531:72;:::i;:::-;45613:80;45689:2;45678:9;45674:18;45665:6;45613:80;:::i;:::-;45703;45779:2;45768:9;45764:18;45755:6;45703:80;:::i;:::-;45793:73;45861:3;45850:9;45846:19;45837:6;45793:73;:::i;:::-;45876;45944:3;45933:9;45929:19;45920:6;45876:73;:::i;:::-;45149:807;;;;;;;;;:::o;45962:663::-;46050:6;46058;46066;46115:2;46103:9;46094:7;46090:23;46086:32;46083:119;;;46121:79;;:::i;:::-;46083:119;46241:1;46266:64;46322:7;46313:6;46302:9;46298:22;46266:64;:::i;:::-;46256:74;;46212:128;46379:2;46405:64;46461:7;46452:6;46441:9;46437:22;46405:64;:::i;:::-;46395:74;;46350:129;46518:2;46544:64;46600:7;46591:6;46580:9;46576:22;46544:64;:::i;:::-;46534:74;;46489:129;45962:663;;;;;:::o;46631:442::-;46780:4;46818:2;46807:9;46803:18;46795:26;;46831:71;46899:1;46888:9;46884:17;46875:6;46831:71;:::i;:::-;46912:72;46980:2;46969:9;46965:18;46956:6;46912:72;:::i;:::-;46994;47062:2;47051:9;47047:18;47038:6;46994:72;:::i;:::-;46631:442;;;;;;:::o

Swarm Source

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