ETH Price: $3,158.31 (+2.92%)

Token

Gainz.fun (GAINZ)
 

Overview

Max Total Supply

1,000,000,000 GAINZ

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 GAINZ

Value
$0.00
0xce0b739fb5ce48dbffef40ead84506c78a3919fa
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:
GAINZ

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 2024-10-02
*/

/**

Gainz.fun is where ETH reigns supreme, bringing memes back to the blockchain where they belong! 
Create, trade, and stack GAINZ while earning a share of 80% of our revenue. 

Web: https://gainz.fun
X: https://x.com/gainzfun
Telegram: https://t.me/gainzfun

*/

// 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 GAINZ is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public  immutable uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  treasuryFeeOnBuy;
    uint256 public  treasuryFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    uint256 private immutable maxFee;

    address public  GZTreasury;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event GZTreasuryChanged(address GZTreasury);
    event UpdateBuyFees(uint256 treasuryFeeOnBuy);
    event UpdateSellFees(uint256 treasuryFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
    event SwapEnabledUpdated(bool enabled);

    constructor () ERC20("Gainz.fun", "GAINZ") 
    {   
        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);

        treasuryFeeOnBuy  = 5;
        treasuryFeeOnSell = 5;

        maxFee             = 5;

        _totalFeesOnBuy    = treasuryFeeOnBuy;
        _totalFeesOnSell   = treasuryFeeOnSell;

        GZTreasury = 0x474ADb38f27B9dF559160dBc6aBB91AF77CDf5C5;

        maxTransactionLimitEnabled = true;

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

        maxWalletLimitEnabled = true;

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

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

        _mint(owner(), 1_000_000_000 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;
    
        maxTransactionAmountBuy     = totalSupply() * 12 / 1000;
        maxTransactionAmountSell    = totalSupply() * 12 / 1000;
    
        maxWalletAmount             = totalSupply() * 12 / 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 _treasuryFeeOnBuy) external onlyOwner {
        treasuryFeeOnBuy = _treasuryFeeOnBuy;

        _totalFeesOnBuy   = treasuryFeeOnBuy;

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

        emit UpdateBuyFees(treasuryFeeOnBuy);
    }

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

        _totalFeesOnSell   = treasuryFeeOnSell;

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

        emit UpdateSellFees(treasuryFeeOnSell);
    }

    function changeGZTreasury(address _GZTreasury) external onlyOwner{
        require(_GZTreasury != GZTreasury,"Treasury wallet is already that address");
        require(_GZTreasury != address(0),"Treasury wallet cannot be the zero address");
        GZTreasury = _GZTreasury;

        emit GZTreasuryChanged(GZTreasury);
    }

    bool public tradingEnabled;
    uint256 public tradingBlock;
    uint256 public tradingTime;

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

    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;
            
            swapAndSendMarketing(contractTokenBalance);

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

        if(block.timestamp > 30 minutes + tradingTime) {
            // nothing
        } else if (block.timestamp > 15 minutes + tradingTime) {
            if (from == uniswapV2Pair) {
                _totalFees = 15;
            } else if (to == uniswapV2Pair) {
                _totalFees = 15;
            }
        } else{
            if (from == uniswapV2Pair) {
                _totalFees = 15;
                if (block.number == tradingBlock){
                    _totalFees = 99;
                }
            } else if (to == uniswapV2Pair) {
                _totalFees = 15;
            }
        }

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

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

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

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

        emit SwapEnabledUpdated(swapEnabled);
    }

    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 swapAndSendMarketing(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(GZTreasury).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

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

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

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

        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

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

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

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

    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 limit 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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"GZTreasury","type":"address"}],"name":"GZTreasuryChanged","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":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":"uint256","name":"treasuryFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"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":[],"name":"GZTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_GZTreasury","type":"address"}],"name":"changeGZTreasury","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":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"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":"_treasuryFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b506040518060400160405280600981526020017f4761696e7a2e66756e00000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4741494e5a00000000000000000000000000000000000000000000000000000081525081600390816200008f91906200103b565b508060049081620000a191906200103b565b5050506000620000b662000a2960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000603846036200017d577310ed43c718714eb63d5aa57b78b54704e256024e9050620001dd565b60614603620001a35773d99d1c33f9fc3444f8101754abc46c52416550d19050620001dc565b6001461480620001b35750600546145b15620001d657737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001db565b600080fd5b5b5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025691906200118c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e491906200118c565b6040518363ffffffff1660e01b815260040162000303929190620011cf565b6020604051808303816000875af115801562000323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034991906200118c565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003e8306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a3160201b60201c565b60056007819055506005600881905550600560c08181525050600754600981905550600854600a8190555073474adb38f27b9df559160dbc6abb91af77cdf5c5600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601460006101000a81548160ff0219169083151502179055506001601360006200049962000c0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055506001601060006200064762000c0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620007da62000c0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200092c620008f162000c0260201b60201c565b6200090162000c2c60201b60201c565b600a6200090f91906200138c565b633b9aca00620009209190620013dd565b62000c3560201b60201c565b6113886200093f62000dad60201b60201c565b6200094b919062001457565b600c819055506103e8600c6200096662000dad60201b60201c565b620009729190620013dd565b6200097e919062001457565b6015819055506103e8600c6200099962000dad60201b60201c565b620009a59190620013dd565b620009b1919062001457565b6016819055506103e8600c620009cc62000dad60201b60201c565b620009d89190620013dd565b620009e4919062001457565b6012819055506000600d60026101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff021916908315150217905550505050620016ab565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000aa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9a9062001516565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b0c90620015ae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bf59190620015e1565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c9e906200164e565b60405180910390fd5b62000cbb6000838362000db760201b60201c565b806002600082825462000ccf919062001670565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000d26919062001670565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d8d9190620015e1565b60405180910390a362000da96000838362000dbc60201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e4357607f821691505b60208210810362000e595762000e5862000dfb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ec37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e84565b62000ecf868362000e84565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f1c62000f1662000f108462000ee7565b62000ef1565b62000ee7565b9050919050565b6000819050919050565b62000f388362000efb565b62000f5062000f478262000f23565b84845462000e91565b825550505050565b600090565b62000f6762000f58565b62000f7481848462000f2d565b505050565b5b8181101562000f9c5762000f9060008262000f5d565b60018101905062000f7a565b5050565b601f82111562000feb5762000fb58162000e5f565b62000fc08462000e74565b8101602085101562000fd0578190505b62000fe862000fdf8562000e74565b83018262000f79565b50505b505050565b600082821c905092915050565b6000620010106000198460080262000ff0565b1980831691505092915050565b60006200102b838362000ffd565b9150826002028217905092915050565b620010468262000dc1565b67ffffffffffffffff81111562001062576200106162000dcc565b5b6200106e825462000e2a565b6200107b82828562000fa0565b600060209050601f831160018114620010b357600084156200109e578287015190505b620010aa85826200101d565b8655506200111a565b601f198416620010c38662000e5f565b60005b82811015620010ed57848901518255600182019150602085019450602081019050620010c6565b868310156200110d578489015162001109601f89168262000ffd565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011548262001127565b9050919050565b620011668162001147565b81146200117257600080fd5b50565b60008151905062001186816200115b565b92915050565b600060208284031215620011a557620011a462001122565b5b6000620011b58482850162001175565b91505092915050565b620011c98162001147565b82525050565b6000604082019050620011e66000830185620011be565b620011f56020830184620011be565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200128a57808604811115620012625762001261620011fc565b5b6001851615620012725780820291505b808102905062001282856200122b565b945062001242565b94509492505050565b600082620012a5576001905062001378565b81620012b5576000905062001378565b8160018114620012ce5760028114620012d9576200130f565b600191505062001378565b60ff841115620012ee57620012ed620011fc565b5b8360020a915084821115620013085762001307620011fc565b5b5062001378565b5060208310610133831016604e8410600b8410161715620013495782820a905083811115620013435762001342620011fc565b5b62001378565b62001358848484600162001238565b92509050818404811115620013725762001371620011fc565b5b81810290505b9392505050565b600060ff82169050919050565b6000620013998262000ee7565b9150620013a6836200137f565b9250620013d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001293565b905092915050565b6000620013ea8262000ee7565b9150620013f78362000ee7565b9250828202620014078162000ee7565b91508282048414831517620014215762001420620011fc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620014648262000ee7565b9150620014718362000ee7565b92508262001484576200148362001428565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620014fe6024836200148f565b91506200150b82620014a0565b604082019050919050565b600060208201905081810360008301526200153181620014ef565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620015966022836200148f565b9150620015a38262001538565b604082019050919050565b60006020820190508181036000830152620015c98162001587565b9050919050565b620015db8162000ee7565b82525050565b6000602082019050620015f86000830184620015d0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001636601f836200148f565b91506200164382620015fe565b602082019050919050565b60006020820190508181036000830152620016698162001627565b9050919050565b60006200167d8262000ee7565b91506200168a8362000ee7565b9250828201905080821115620016a557620016a4620011fc565b5b92915050565b60805160a05160c0516157846200173d600039600081816114e4015261271f0152600081816110a801528181612fca0152818161301f015281816131200152818161323d015281816133cd0152818161342a015281816134bb0152818161351701528181613575015281816135df015261373a015260008181610b6f01528181613be00152613cbd01526157846000f3fe6080604052600436106102815760003560e01c8063824e46051161014f578063b8158d60116100c1578063dd62ed3e1161007a578063dd62ed3e146109ab578063e01af92c146109e8578063e2f4560514610a11578063eba4c33314610a3c578063f2fde38b14610a65578063f9d0831a14610a8e57610288565b8063b8158d60146108ad578063bd458a73146108d8578063c024666814610903578063cd51e6d41461092c578063cdd4bd7914610957578063d2fcc0011461098257610288565b8063a457c2d711610113578063a457c2d714610779578063a8a69b9d146107b6578063a9059cbb146107f3578063aa4bde2814610830578063afa4f3b21461085b578063b6f7f6811461088457610288565b8063824e4605146106b8578063880bcbc1146106e35780638a8c523c1461070c5780638da5cb5b1461072357806395d89b411461074e57610288565b8063313ce567116101f357806359136fa5116101ac57806359136fa5146105bc5780636ddd1713146105e757806370a0823114610612578063715018a61461064f57806371fc4688146106665780637392efa21461068f57610288565b8063313ce5671461049857806339509351146104c357806349bd5a5e146105005780634ada218b1461052b5780634fbee1931461055657806356a6cabf1461059357610288565b806318d9ceae1161024557806318d9ceae1461037657806321a9d82a146103b357806323b872dd146103de57806327a14fc21461041b5780632a6c7dba146104445780632ba86bf21461046d57610288565b80630105d0fd1461028d57806306fdde03146102b8578063095ea7b3146102e35780631694505e1461032057806318160ddd1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ab7565b6040516102af9190613e0d565b60405180910390f35b3480156102c457600080fd5b506102cd610abd565b6040516102da9190613eb8565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613f69565b610b4f565b6040516103179190613fc4565b60405180910390f35b34801561032c57600080fd5b50610335610b6d565b604051610342919061403e565b60405180910390f35b34801561035757600080fd5b50610360610b91565b60405161036d9190613e0d565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190614059565b610b9b565b6040516103aa9190613fc4565b60405180910390f35b3480156103bf57600080fd5b506103c8610bf1565b6040516103d59190613fc4565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190614086565b610c04565b6040516104129190613fc4565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d91906140d9565b610d23565b005b34801561045057600080fd5b5061046b60048036038101906104669190614132565b610e8f565b005b34801561047957600080fd5b50610482610fde565b60405161048f9190613fc4565b60405180910390f35b3480156104a457600080fd5b506104ad610ff1565b6040516104ba919061417b565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190613f69565b610ffa565b6040516104f79190613fc4565b60405180910390f35b34801561050c57600080fd5b506105156110a6565b60405161052291906141a5565b60405180910390f35b34801561053757600080fd5b506105406110ca565b60405161054d9190613fc4565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190614059565b6110dd565b60405161058a9190613fc4565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190614132565b611133565b005b3480156105c857600080fd5b506105d1611282565b6040516105de9190613e0d565b60405180910390f35b3480156105f357600080fd5b506105fc611288565b6040516106099190613fc4565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190614059565b61129b565b6040516106469190613e0d565b60405180910390f35b34801561065b57600080fd5b506106646112e3565b005b34801561067257600080fd5b5061068d600480360381019061068891906140d9565b61143b565b005b34801561069b57600080fd5b506106b660048036038101906106b19190614059565b611583565b005b3480156106c457600080fd5b506106cd6117b6565b6040516106da9190613e0d565b60405180910390f35b3480156106ef57600080fd5b5061070a600480360381019061070591906141c0565b6117bc565b005b34801561071857600080fd5b506107216119fc565b005b34801561072f57600080fd5b50610738611b29565b60405161074591906141a5565b60405180910390f35b34801561075a57600080fd5b50610763611b53565b6040516107709190613eb8565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190613f69565b611be5565b6040516107ad9190613fc4565b60405180910390f35b3480156107c257600080fd5b506107dd60048036038101906107d89190614059565b611cd0565b6040516107ea9190613fc4565b60405180910390f35b3480156107ff57600080fd5b5061081a60048036038101906108159190613f69565b611d26565b6040516108279190613fc4565b60405180910390f35b34801561083c57600080fd5b50610845611d44565b6040516108529190613e0d565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d91906140d9565b611d4a565b005b34801561089057600080fd5b506108ab60048036038101906108a69190614200565b611e7b565b005b3480156108b957600080fd5b506108c2612050565b6040516108cf9190613e0d565b60405180910390f35b3480156108e457600080fd5b506108ed612056565b6040516108fa91906141a5565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906141c0565b61207c565b005b34801561093857600080fd5b5061094161224e565b60405161094e9190613e0d565b60405180910390f35b34801561096357600080fd5b5061096c612254565b6040516109799190613e0d565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a491906141c0565b61225a565b005b3480156109b757600080fd5b506109d260048036038101906109cd9190614240565b61249a565b6040516109df9190613e0d565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190614132565b612521565b005b348015610a1d57600080fd5b50610a26612670565b604051610a339190613e0d565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e91906140d9565b612676565b005b348015610a7157600080fd5b50610a8c6004803603810190610a879190614059565b6127be565b005b348015610a9a57600080fd5b50610ab56004803603810190610ab09190614059565b612984565b005b60155481565b606060038054610acc906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054610af8906142af565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b5050505050905090565b6000610b63610b5c612bf4565b8484612bfc565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c50612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d0c5782811015610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90614352565b60405180910390fd5b610d0b85610d03612bf4565b858403612bfc565b5b610d17858585612dc5565b60019150509392505050565b610d2b612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db1906143be565b60405180910390fd5b6064610dc4610ff1565b600a610dd09190614540565b610dd8610b91565b610de291906145ba565b610dec91906145ba565b811015610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e259061465d565b60405180910390fd5b610e36610ff1565b600a610e429190614540565b81610e4d919061467d565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942601254604051610e849190613e0d565b60405180910390a150565b610e97612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d906143be565b60405180910390fd5b601160009054906101000a900460ff16151581151503610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290614731565b60405180910390fd5b80601160006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601160009054906101000a900460ff16604051610fd39190613fc4565b60405180910390a150565b601460009054906101000a900460ff1681565b60006012905090565b600061109c611007612bf4565b848460016000611015612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110979190614751565b612bfc565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60029054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61113b612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c1906143be565b60405180910390fd5b601460009054906101000a900460ff1615158115150361121f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611216906147f7565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601460009054906101000a900460ff166040516112779190613fc4565b60405180910390a150565b60165481565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112eb612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611371906143be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611443612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c9906143be565b60405180910390fd5b806007819055506007546009819055507f00000000000000000000000000000000000000000000000000000000000000006009541115611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90614889565b60405180910390fd5b7f2c18bb7f919d244fa8ee59517018a471ec455b76373719d2d6664fa3b1947da96007546040516115789190613e0d565b60405180910390a150565b61158b612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611611906143be565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a19061491b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611710906149ad565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f391343d3ccf2c6150f2bf07446eefb1d372e06a2212c5458c2c87209b891fe5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516117ab91906141a5565b60405180910390a150565b60075481565b6117c4612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a906143be565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc90614a3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614aab565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c10826040516119f09190613fc4565b60405180910390a25050565b611a04612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906143be565b60405180910390fd5b600d60029054906101000a900460ff1615611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90614b17565b60405180910390fd5b6001600d60026101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600e8190555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b62906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8e906142af565b8015611bdb5780601f10611bb057610100808354040283529160200191611bdb565b820191906000526020600020905b815481529060010190602001808311611bbe57829003601f168201915b5050505050905090565b60008060016000611bf4612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890614ba9565b60405180910390fd5b611cc5611cbc612bf4565b85858403612bfc565b600191505092915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611d3a611d33612bf4565b8484612dc5565b6001905092915050565b60125481565b611d52612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906143be565b60405180910390fd5b620f4240611ded610b91565b611df791906145ba565b8111611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90614c3b565b60405180910390fd5b80600c819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600c54604051611e709190613e0d565b60405180910390a150565b611e83612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f09906143be565b60405180910390fd5b6103e8611f1d610ff1565b600a611f299190614540565b611f31610b91565b611f3b91906145ba565b611f4591906145ba565b8210158015611f8657506103e8611f5a610ff1565b600a611f669190614540565b611f6e610b91565b611f7891906145ba565b611f8291906145ba565b8110155b611fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc90614ccd565b60405180910390fd5b611fcd610ff1565b600a611fd99190614540565b82611fe4919061467d565b601581905550611ff2610ff1565b600a611ffe9190614540565b81612009919061467d565b6016819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601554601654604051612044929190614ced565b60405180910390a15050565b600f5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612084612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a906143be565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c90614d88565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122429190613fc4565b60405180910390a25050565b600e5481565b60085481565b612262612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906143be565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90614a3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614aab565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161248e9190613fc4565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612529612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906143be565b60405180910390fd5b801515600d60019054906101000a900460ff1615150361260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490614e1a565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a12600d60019054906101000a900460ff166040516126659190613fc4565b60405180910390a150565b600c5481565b61267e612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461270d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612704906143be565b60405180910390fd5b80600881905550600854600a819055507f0000000000000000000000000000000000000000000000000000000000000000600a541115612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614889565b60405180910390fd5b7fa54a45ff147b987a50c11919090466ad8b9df105c160d2e6bfb296df2b9abfb76008546040516127b39190613e0d565b60405180910390a150565b6127c6612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c906143be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614eac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61298c612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a12906143be565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8090614f3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aec57612ae6473373ffffffffffffffffffffffffffffffffffffffff1661380290919063ffffffff16565b50612bf1565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b2c91906141a5565b602060405180830381865afa158015612b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6d9190614f73565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612baa929190614fa0565b6020604051808303816000875af1158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190614fde565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629061507d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd19061510f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612db89190613e0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b906151a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9a90615233565b60405180910390fd5b600d60029054906101000a900460ff1680612f075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f5b5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f919061529f565b60405180910390fd5b60008103612fb357612fae838360006138bd565b6137fd565b601460009054906101000a900460ff1615613203577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061306d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156130c35750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131195750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613202577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131bb576015548111156131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ad90615331565b60405180910390fd5b613201565b601654811115613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790615331565b60405180910390fd5b5b5b5b600061320e3061129b565b90506000600c5482101590508080156132345750600d60009054906101000a900460ff16155b801561328b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156132a657506000600a546009546132a49190614751565b115b80156132be5750600d60019054906101000a900460ff165b15613303576001600d60006101000a81548160ff0219169083151502179055506132e782613b3c565b6000600d60006101000a81548160ff0219169083151502179055505b6000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133a65750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133bd5750600d60009054906101000a900460ff165b156133cb576000905061348c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361342857600954905061348b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361348557600a54905061348a565b600090505b5b5b600f5461070861349c9190614751565b421161363857600f546103846134b29190614751565b421115613573577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361351557600f905061356e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361356d57600f90505b5b613637565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036135dd57600f9050600e5443036135d857606390505b613636565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361363557600f90505b5b5b5b600081111561367857600060648286613651919061467d565b61365b91906145ba565b905080856136699190615351565b94506136768730836138bd565b505b601160009054906101000a900460ff16156137ee57601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137315750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561378957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156137ed5760006137998661129b565b905060125485826137aa9190614751565b11156137eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e2906153f7565b60405180910390fd5b505b5b6137f98686866138bd565b5050505b505050565b600081471015613847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383e90615463565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff168360405161386d906154b4565b60006040518083038185875af1925050503d80600081146138aa576040519150601f19603f3d011682016040523d82523d6000602084013e6138af565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361392c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613923906151a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361399b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399290615233565b60405180910390fd5b6139a6838383613dea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a239061553b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613abf9190614751565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b239190613e0d565b60405180910390a3613b36848484613def565b50505050565b60004790506000600267ffffffffffffffff811115613b5e57613b5d61555b565b5b604051908082528060200260200182016040528015613b8c5781602001602082028036833780820191505090505b5090503081600081518110613ba457613ba361558a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6d91906155ce565b81600181518110613c8157613c8061558a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401613d1d9594939291906156f4565b600060405180830381600087803b158015613d3757600080fd5b505af1158015613d4b573d6000803e3d6000fd5b5050505060008247613d5d9190615351565b9050613daa81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661380290919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613ddc929190614ced565b60405180910390a150505050565b505050565b505050565b6000819050919050565b613e0781613df4565b82525050565b6000602082019050613e226000830184613dfe565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e62578082015181840152602081019050613e47565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e8a82613e28565b613e948185613e33565b9350613ea4818560208601613e44565b613ead81613e6e565b840191505092915050565b60006020820190508181036000830152613ed28184613e7f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f0a82613edf565b9050919050565b613f1a81613eff565b8114613f2557600080fd5b50565b600081359050613f3781613f11565b92915050565b613f4681613df4565b8114613f5157600080fd5b50565b600081359050613f6381613f3d565b92915050565b60008060408385031215613f8057613f7f613eda565b5b6000613f8e85828601613f28565b9250506020613f9f85828601613f54565b9150509250929050565b60008115159050919050565b613fbe81613fa9565b82525050565b6000602082019050613fd96000830184613fb5565b92915050565b6000819050919050565b6000614004613fff613ffa84613edf565b613fdf565b613edf565b9050919050565b600061401682613fe9565b9050919050565b60006140288261400b565b9050919050565b6140388161401d565b82525050565b6000602082019050614053600083018461402f565b92915050565b60006020828403121561406f5761406e613eda565b5b600061407d84828501613f28565b91505092915050565b60008060006060848603121561409f5761409e613eda565b5b60006140ad86828701613f28565b93505060206140be86828701613f28565b92505060406140cf86828701613f54565b9150509250925092565b6000602082840312156140ef576140ee613eda565b5b60006140fd84828501613f54565b91505092915050565b61410f81613fa9565b811461411a57600080fd5b50565b60008135905061412c81614106565b92915050565b60006020828403121561414857614147613eda565b5b60006141568482850161411d565b91505092915050565b600060ff82169050919050565b6141758161415f565b82525050565b6000602082019050614190600083018461416c565b92915050565b61419f81613eff565b82525050565b60006020820190506141ba6000830184614196565b92915050565b600080604083850312156141d7576141d6613eda565b5b60006141e585828601613f28565b92505060206141f68582860161411d565b9150509250929050565b6000806040838503121561421757614216613eda565b5b600061422585828601613f54565b925050602061423685828601613f54565b9150509250929050565b6000806040838503121561425757614256613eda565b5b600061426585828601613f28565b925050602061427685828601613f28565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142c757607f821691505b6020821081036142da576142d9614280565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061433c602883613e33565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143a8602083613e33565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614464578086048111156144405761443f6143de565b5b600185161561444f5780820291505b808102905061445d8561440d565b9450614424565b94509492505050565b60008261447d5760019050614539565b8161448b5760009050614539565b81600181146144a157600281146144ab576144da565b6001915050614539565b60ff8411156144bd576144bc6143de565b5b8360020a9150848211156144d4576144d36143de565b5b50614539565b5060208310610133831016604e8410600b841016171561450f5782820a90508381111561450a576145096143de565b5b614539565b61451c848484600161441a565b92509050818404811115614533576145326143de565b5b81810290505b9392505050565b600061454b82613df4565b91506145568361415f565b92506145837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461446d565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145c582613df4565b91506145d083613df4565b9250826145e0576145df61458b565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614647602d83613e33565b9150614652826145eb565b604082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b600061468882613df4565b915061469383613df4565b92508282026146a181613df4565b915082820484148315176146b8576146b76143de565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b600061471b602d83613e33565b9150614726826146bf565b604082019050919050565b6000602082019050818103600083015261474a8161470e565b9050919050565b600061475c82613df4565b915061476783613df4565b925082820190508082111561477f5761477e6143de565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b60006147e1603283613e33565b91506147ec82614785565b604082019050919050565b60006020820190508181036000830152614810816147d4565b9050919050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000614873602483613e33565b915061487e82614817565b604082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f54726561737572792077616c6c657420697320616c726561647920746861742060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b6000614905602783613e33565b9150614910826148a9565b604082019050919050565b60006020820190508181036000830152614934816148f8565b9050919050565b7f54726561737572792077616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614997602a83613e33565b91506149a28261493b565b604082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b6000614a29602483613e33565b9150614a34826149cd565b604082019050919050565b60006020820190508181036000830152614a5881614a1c565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b6000614a95601783613e33565b9150614aa082614a5f565b602082019050919050565b60006020820190508181036000830152614ac481614a88565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000614b01601883613e33565b9150614b0c82614acb565b602082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b93602583613e33565b9150614b9e82614b37565b604082019050919050565b60006020820190508181036000830152614bc281614b86565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000614c25603f83613e33565b9150614c3082614bc9565b604082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69742063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000614cb7603f83613e33565b9150614cc282614c5b565b604082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b6000604082019050614d026000830185613dfe565b614d0f6020830184613dfe565b9392505050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614d72602a83613e33565b9150614d7d82614d16565b604082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e04602283613e33565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e96602683613e33565b9150614ea182614e3a565b604082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000614f28603783613e33565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b600081519050614f6d81613f3d565b92915050565b600060208284031215614f8957614f88613eda565b5b6000614f9784828501614f5e565b91505092915050565b6000604082019050614fb56000830185614196565b614fc26020830184613dfe565b9392505050565b600081519050614fd881614106565b92915050565b600060208284031215614ff457614ff3613eda565b5b600061500284828501614fc9565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615067602483613e33565b91506150728261500b565b604082019050919050565b600060208201905081810360008301526150968161505a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150f9602283613e33565b91506151048261509d565b604082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061518b602583613e33565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061521d602383613e33565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000615289601883613e33565b915061529482615253565b602082019050919050565b600060208201905081810360008301526152b88161527c565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b600061531b603b83613e33565b9150615326826152bf565b604082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b600061535c82613df4565b915061536783613df4565b925082820390508181111561537f5761537e6143de565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b60006153e1603083613e33565b91506153ec82615385565b604082019050919050565b60006020820190508181036000830152615410816153d4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061544d601d83613e33565b915061545882615417565b602082019050919050565b6000602082019050818103600083015261547c81615440565b9050919050565b600081905092915050565b50565b600061549e600083615483565b91506154a98261548e565b600082019050919050565b60006154bf82615491565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615525602683613e33565b9150615530826154c9565b604082019050919050565b6000602082019050818103600083015261555481615518565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506155c881613f11565b92915050565b6000602082840312156155e4576155e3613eda565b5b60006155f2848285016155b9565b91505092915050565b6000819050919050565b600061562061561b615616846155fb565b613fdf565b613df4565b9050919050565b61563081615605565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61566b81613eff565b82525050565b600061567d8383615662565b60208301905092915050565b6000602082019050919050565b60006156a182615636565b6156ab8185615641565b93506156b683615652565b8060005b838110156156e75781516156ce8882615671565b97506156d983615689565b9250506001810190506156ba565b5085935050505092915050565b600060a0820190506157096000830188613dfe565b6157166020830187615627565b81810360408301526157288186615696565b90506157376060830185614196565b6157446080830184613dfe565b969550505050505056fea2646970667358221220eb0d482e9cc7947eb5dff5b6c18a9d76d8f784081d62ffc6dd35ea0b08a2250464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063824e46051161014f578063b8158d60116100c1578063dd62ed3e1161007a578063dd62ed3e146109ab578063e01af92c146109e8578063e2f4560514610a11578063eba4c33314610a3c578063f2fde38b14610a65578063f9d0831a14610a8e57610288565b8063b8158d60146108ad578063bd458a73146108d8578063c024666814610903578063cd51e6d41461092c578063cdd4bd7914610957578063d2fcc0011461098257610288565b8063a457c2d711610113578063a457c2d714610779578063a8a69b9d146107b6578063a9059cbb146107f3578063aa4bde2814610830578063afa4f3b21461085b578063b6f7f6811461088457610288565b8063824e4605146106b8578063880bcbc1146106e35780638a8c523c1461070c5780638da5cb5b1461072357806395d89b411461074e57610288565b8063313ce567116101f357806359136fa5116101ac57806359136fa5146105bc5780636ddd1713146105e757806370a0823114610612578063715018a61461064f57806371fc4688146106665780637392efa21461068f57610288565b8063313ce5671461049857806339509351146104c357806349bd5a5e146105005780634ada218b1461052b5780634fbee1931461055657806356a6cabf1461059357610288565b806318d9ceae1161024557806318d9ceae1461037657806321a9d82a146103b357806323b872dd146103de57806327a14fc21461041b5780632a6c7dba146104445780632ba86bf21461046d57610288565b80630105d0fd1461028d57806306fdde03146102b8578063095ea7b3146102e35780631694505e1461032057806318160ddd1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ab7565b6040516102af9190613e0d565b60405180910390f35b3480156102c457600080fd5b506102cd610abd565b6040516102da9190613eb8565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613f69565b610b4f565b6040516103179190613fc4565b60405180910390f35b34801561032c57600080fd5b50610335610b6d565b604051610342919061403e565b60405180910390f35b34801561035757600080fd5b50610360610b91565b60405161036d9190613e0d565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190614059565b610b9b565b6040516103aa9190613fc4565b60405180910390f35b3480156103bf57600080fd5b506103c8610bf1565b6040516103d59190613fc4565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190614086565b610c04565b6040516104129190613fc4565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d91906140d9565b610d23565b005b34801561045057600080fd5b5061046b60048036038101906104669190614132565b610e8f565b005b34801561047957600080fd5b50610482610fde565b60405161048f9190613fc4565b60405180910390f35b3480156104a457600080fd5b506104ad610ff1565b6040516104ba919061417b565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190613f69565b610ffa565b6040516104f79190613fc4565b60405180910390f35b34801561050c57600080fd5b506105156110a6565b60405161052291906141a5565b60405180910390f35b34801561053757600080fd5b506105406110ca565b60405161054d9190613fc4565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190614059565b6110dd565b60405161058a9190613fc4565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190614132565b611133565b005b3480156105c857600080fd5b506105d1611282565b6040516105de9190613e0d565b60405180910390f35b3480156105f357600080fd5b506105fc611288565b6040516106099190613fc4565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190614059565b61129b565b6040516106469190613e0d565b60405180910390f35b34801561065b57600080fd5b506106646112e3565b005b34801561067257600080fd5b5061068d600480360381019061068891906140d9565b61143b565b005b34801561069b57600080fd5b506106b660048036038101906106b19190614059565b611583565b005b3480156106c457600080fd5b506106cd6117b6565b6040516106da9190613e0d565b60405180910390f35b3480156106ef57600080fd5b5061070a600480360381019061070591906141c0565b6117bc565b005b34801561071857600080fd5b506107216119fc565b005b34801561072f57600080fd5b50610738611b29565b60405161074591906141a5565b60405180910390f35b34801561075a57600080fd5b50610763611b53565b6040516107709190613eb8565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190613f69565b611be5565b6040516107ad9190613fc4565b60405180910390f35b3480156107c257600080fd5b506107dd60048036038101906107d89190614059565b611cd0565b6040516107ea9190613fc4565b60405180910390f35b3480156107ff57600080fd5b5061081a60048036038101906108159190613f69565b611d26565b6040516108279190613fc4565b60405180910390f35b34801561083c57600080fd5b50610845611d44565b6040516108529190613e0d565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d91906140d9565b611d4a565b005b34801561089057600080fd5b506108ab60048036038101906108a69190614200565b611e7b565b005b3480156108b957600080fd5b506108c2612050565b6040516108cf9190613e0d565b60405180910390f35b3480156108e457600080fd5b506108ed612056565b6040516108fa91906141a5565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906141c0565b61207c565b005b34801561093857600080fd5b5061094161224e565b60405161094e9190613e0d565b60405180910390f35b34801561096357600080fd5b5061096c612254565b6040516109799190613e0d565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a491906141c0565b61225a565b005b3480156109b757600080fd5b506109d260048036038101906109cd9190614240565b61249a565b6040516109df9190613e0d565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190614132565b612521565b005b348015610a1d57600080fd5b50610a26612670565b604051610a339190613e0d565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e91906140d9565b612676565b005b348015610a7157600080fd5b50610a8c6004803603810190610a879190614059565b6127be565b005b348015610a9a57600080fd5b50610ab56004803603810190610ab09190614059565b612984565b005b60155481565b606060038054610acc906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054610af8906142af565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b5050505050905090565b6000610b63610b5c612bf4565b8484612bfc565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c50612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d0c5782811015610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90614352565b60405180910390fd5b610d0b85610d03612bf4565b858403612bfc565b5b610d17858585612dc5565b60019150509392505050565b610d2b612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db1906143be565b60405180910390fd5b6064610dc4610ff1565b600a610dd09190614540565b610dd8610b91565b610de291906145ba565b610dec91906145ba565b811015610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e259061465d565b60405180910390fd5b610e36610ff1565b600a610e429190614540565b81610e4d919061467d565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942601254604051610e849190613e0d565b60405180910390a150565b610e97612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d906143be565b60405180910390fd5b601160009054906101000a900460ff16151581151503610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290614731565b60405180910390fd5b80601160006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601160009054906101000a900460ff16604051610fd39190613fc4565b60405180910390a150565b601460009054906101000a900460ff1681565b60006012905090565b600061109c611007612bf4565b848460016000611015612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110979190614751565b612bfc565b6001905092915050565b7f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f581565b600d60029054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61113b612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c1906143be565b60405180910390fd5b601460009054906101000a900460ff1615158115150361121f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611216906147f7565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601460009054906101000a900460ff166040516112779190613fc4565b60405180910390a150565b60165481565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112eb612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611371906143be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611443612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c9906143be565b60405180910390fd5b806007819055506007546009819055507f00000000000000000000000000000000000000000000000000000000000000056009541115611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90614889565b60405180910390fd5b7f2c18bb7f919d244fa8ee59517018a471ec455b76373719d2d6664fa3b1947da96007546040516115789190613e0d565b60405180910390a150565b61158b612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611611906143be565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a19061491b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611710906149ad565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f391343d3ccf2c6150f2bf07446eefb1d372e06a2212c5458c2c87209b891fe5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516117ab91906141a5565b60405180910390a150565b60075481565b6117c4612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a906143be565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc90614a3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614aab565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c10826040516119f09190613fc4565b60405180910390a25050565b611a04612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906143be565b60405180910390fd5b600d60029054906101000a900460ff1615611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90614b17565b60405180910390fd5b6001600d60026101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600e8190555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b62906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8e906142af565b8015611bdb5780601f10611bb057610100808354040283529160200191611bdb565b820191906000526020600020905b815481529060010190602001808311611bbe57829003601f168201915b5050505050905090565b60008060016000611bf4612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890614ba9565b60405180910390fd5b611cc5611cbc612bf4565b85858403612bfc565b600191505092915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611d3a611d33612bf4565b8484612dc5565b6001905092915050565b60125481565b611d52612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906143be565b60405180910390fd5b620f4240611ded610b91565b611df791906145ba565b8111611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90614c3b565b60405180910390fd5b80600c819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600c54604051611e709190613e0d565b60405180910390a150565b611e83612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f09906143be565b60405180910390fd5b6103e8611f1d610ff1565b600a611f299190614540565b611f31610b91565b611f3b91906145ba565b611f4591906145ba565b8210158015611f8657506103e8611f5a610ff1565b600a611f669190614540565b611f6e610b91565b611f7891906145ba565b611f8291906145ba565b8110155b611fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc90614ccd565b60405180910390fd5b611fcd610ff1565b600a611fd99190614540565b82611fe4919061467d565b601581905550611ff2610ff1565b600a611ffe9190614540565b81612009919061467d565b6016819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601554601654604051612044929190614ced565b60405180910390a15050565b600f5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612084612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a906143be565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c90614d88565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122429190613fc4565b60405180910390a25050565b600e5481565b60085481565b612262612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906143be565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90614a3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614aab565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161248e9190613fc4565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612529612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906143be565b60405180910390fd5b801515600d60019054906101000a900460ff1615150361260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490614e1a565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a12600d60019054906101000a900460ff166040516126659190613fc4565b60405180910390a150565b600c5481565b61267e612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461270d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612704906143be565b60405180910390fd5b80600881905550600854600a819055507f0000000000000000000000000000000000000000000000000000000000000005600a541115612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614889565b60405180910390fd5b7fa54a45ff147b987a50c11919090466ad8b9df105c160d2e6bfb296df2b9abfb76008546040516127b39190613e0d565b60405180910390a150565b6127c6612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c906143be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614eac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61298c612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a12906143be565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8090614f3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aec57612ae6473373ffffffffffffffffffffffffffffffffffffffff1661380290919063ffffffff16565b50612bf1565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b2c91906141a5565b602060405180830381865afa158015612b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6d9190614f73565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612baa929190614fa0565b6020604051808303816000875af1158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190614fde565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629061507d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd19061510f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612db89190613e0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b906151a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9a90615233565b60405180910390fd5b600d60029054906101000a900460ff1680612f075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f5b5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f919061529f565b60405180910390fd5b60008103612fb357612fae838360006138bd565b6137fd565b601460009054906101000a900460ff1615613203577f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061306d57507f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156130c35750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131195750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613202577f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131bb576015548111156131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ad90615331565b60405180910390fd5b613201565b601654811115613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790615331565b60405180910390fd5b5b5b5b600061320e3061129b565b90506000600c5482101590508080156132345750600d60009054906101000a900460ff16155b801561328b57507f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156132a657506000600a546009546132a49190614751565b115b80156132be5750600d60019054906101000a900460ff165b15613303576001600d60006101000a81548160ff0219169083151502179055506132e782613b3c565b6000600d60006101000a81548160ff0219169083151502179055505b6000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133a65750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133bd5750600d60009054906101000a900460ff165b156133cb576000905061348c565b7f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361342857600954905061348b565b7f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361348557600a54905061348a565b600090505b5b5b600f5461070861349c9190614751565b421161363857600f546103846134b29190614751565b421115613573577f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361351557600f905061356e565b7f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361356d57600f90505b5b613637565b7f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036135dd57600f9050600e5443036135d857606390505b613636565b7f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361363557600f90505b5b5b5b600081111561367857600060648286613651919061467d565b61365b91906145ba565b905080856136699190615351565b94506136768730836138bd565b505b601160009054906101000a900460ff16156137ee57601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137315750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561378957507f000000000000000000000000503d5e6d61d947979293553188b41931ad4f16f573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156137ed5760006137998661129b565b905060125485826137aa9190614751565b11156137eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e2906153f7565b60405180910390fd5b505b5b6137f98686866138bd565b5050505b505050565b600081471015613847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383e90615463565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff168360405161386d906154b4565b60006040518083038185875af1925050503d80600081146138aa576040519150601f19603f3d011682016040523d82523d6000602084013e6138af565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361392c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613923906151a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361399b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399290615233565b60405180910390fd5b6139a6838383613dea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a239061553b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613abf9190614751565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b239190613e0d565b60405180910390a3613b36848484613def565b50505050565b60004790506000600267ffffffffffffffff811115613b5e57613b5d61555b565b5b604051908082528060200260200182016040528015613b8c5781602001602082028036833780820191505090505b5090503081600081518110613ba457613ba361558a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6d91906155ce565b81600181518110613c8157613c8061558a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401613d1d9594939291906156f4565b600060405180830381600087803b158015613d3757600080fd5b505af1158015613d4b573d6000803e3d6000fd5b5050505060008247613d5d9190615351565b9050613daa81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661380290919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613ddc929190614ced565b60405180910390a150505050565b505050565b505050565b6000819050919050565b613e0781613df4565b82525050565b6000602082019050613e226000830184613dfe565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e62578082015181840152602081019050613e47565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e8a82613e28565b613e948185613e33565b9350613ea4818560208601613e44565b613ead81613e6e565b840191505092915050565b60006020820190508181036000830152613ed28184613e7f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f0a82613edf565b9050919050565b613f1a81613eff565b8114613f2557600080fd5b50565b600081359050613f3781613f11565b92915050565b613f4681613df4565b8114613f5157600080fd5b50565b600081359050613f6381613f3d565b92915050565b60008060408385031215613f8057613f7f613eda565b5b6000613f8e85828601613f28565b9250506020613f9f85828601613f54565b9150509250929050565b60008115159050919050565b613fbe81613fa9565b82525050565b6000602082019050613fd96000830184613fb5565b92915050565b6000819050919050565b6000614004613fff613ffa84613edf565b613fdf565b613edf565b9050919050565b600061401682613fe9565b9050919050565b60006140288261400b565b9050919050565b6140388161401d565b82525050565b6000602082019050614053600083018461402f565b92915050565b60006020828403121561406f5761406e613eda565b5b600061407d84828501613f28565b91505092915050565b60008060006060848603121561409f5761409e613eda565b5b60006140ad86828701613f28565b93505060206140be86828701613f28565b92505060406140cf86828701613f54565b9150509250925092565b6000602082840312156140ef576140ee613eda565b5b60006140fd84828501613f54565b91505092915050565b61410f81613fa9565b811461411a57600080fd5b50565b60008135905061412c81614106565b92915050565b60006020828403121561414857614147613eda565b5b60006141568482850161411d565b91505092915050565b600060ff82169050919050565b6141758161415f565b82525050565b6000602082019050614190600083018461416c565b92915050565b61419f81613eff565b82525050565b60006020820190506141ba6000830184614196565b92915050565b600080604083850312156141d7576141d6613eda565b5b60006141e585828601613f28565b92505060206141f68582860161411d565b9150509250929050565b6000806040838503121561421757614216613eda565b5b600061422585828601613f54565b925050602061423685828601613f54565b9150509250929050565b6000806040838503121561425757614256613eda565b5b600061426585828601613f28565b925050602061427685828601613f28565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142c757607f821691505b6020821081036142da576142d9614280565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061433c602883613e33565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143a8602083613e33565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614464578086048111156144405761443f6143de565b5b600185161561444f5780820291505b808102905061445d8561440d565b9450614424565b94509492505050565b60008261447d5760019050614539565b8161448b5760009050614539565b81600181146144a157600281146144ab576144da565b6001915050614539565b60ff8411156144bd576144bc6143de565b5b8360020a9150848211156144d4576144d36143de565b5b50614539565b5060208310610133831016604e8410600b841016171561450f5782820a90508381111561450a576145096143de565b5b614539565b61451c848484600161441a565b92509050818404811115614533576145326143de565b5b81810290505b9392505050565b600061454b82613df4565b91506145568361415f565b92506145837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461446d565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145c582613df4565b91506145d083613df4565b9250826145e0576145df61458b565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614647602d83613e33565b9150614652826145eb565b604082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b600061468882613df4565b915061469383613df4565b92508282026146a181613df4565b915082820484148315176146b8576146b76143de565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b600061471b602d83613e33565b9150614726826146bf565b604082019050919050565b6000602082019050818103600083015261474a8161470e565b9050919050565b600061475c82613df4565b915061476783613df4565b925082820190508082111561477f5761477e6143de565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b60006147e1603283613e33565b91506147ec82614785565b604082019050919050565b60006020820190508181036000830152614810816147d4565b9050919050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000614873602483613e33565b915061487e82614817565b604082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f54726561737572792077616c6c657420697320616c726561647920746861742060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b6000614905602783613e33565b9150614910826148a9565b604082019050919050565b60006020820190508181036000830152614934816148f8565b9050919050565b7f54726561737572792077616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614997602a83613e33565b91506149a28261493b565b604082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b6000614a29602483613e33565b9150614a34826149cd565b604082019050919050565b60006020820190508181036000830152614a5881614a1c565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b6000614a95601783613e33565b9150614aa082614a5f565b602082019050919050565b60006020820190508181036000830152614ac481614a88565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000614b01601883613e33565b9150614b0c82614acb565b602082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b93602583613e33565b9150614b9e82614b37565b604082019050919050565b60006020820190508181036000830152614bc281614b86565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000614c25603f83613e33565b9150614c3082614bc9565b604082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69742063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000614cb7603f83613e33565b9150614cc282614c5b565b604082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b6000604082019050614d026000830185613dfe565b614d0f6020830184613dfe565b9392505050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614d72602a83613e33565b9150614d7d82614d16565b604082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e04602283613e33565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e96602683613e33565b9150614ea182614e3a565b604082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000614f28603783613e33565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b600081519050614f6d81613f3d565b92915050565b600060208284031215614f8957614f88613eda565b5b6000614f9784828501614f5e565b91505092915050565b6000604082019050614fb56000830185614196565b614fc26020830184613dfe565b9392505050565b600081519050614fd881614106565b92915050565b600060208284031215614ff457614ff3613eda565b5b600061500284828501614fc9565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615067602483613e33565b91506150728261500b565b604082019050919050565b600060208201905081810360008301526150968161505a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150f9602283613e33565b91506151048261509d565b604082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061518b602583613e33565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061521d602383613e33565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000615289601883613e33565b915061529482615253565b602082019050919050565b600060208201905081810360008301526152b88161527c565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b600061531b603b83613e33565b9150615326826152bf565b604082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b600061535c82613df4565b915061536783613df4565b925082820390508181111561537f5761537e6143de565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b60006153e1603083613e33565b91506153ec82615385565b604082019050919050565b60006020820190508181036000830152615410816153d4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061544d601d83613e33565b915061545882615417565b602082019050919050565b6000602082019050818103600083015261547c81615440565b9050919050565b600081905092915050565b50565b600061549e600083615483565b91506154a98261548e565b600082019050919050565b60006154bf82615491565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615525602683613e33565b9150615530826154c9565b604082019050919050565b6000602082019050818103600083015261555481615518565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506155c881613f11565b92915050565b6000602082840312156155e4576155e3613eda565b5b60006155f2848285016155b9565b91505092915050565b6000819050919050565b600061562061561b615616846155fb565b613fdf565b613df4565b9050919050565b61563081615605565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61566b81613eff565b82525050565b600061567d8383615662565b60208301905092915050565b6000602082019050919050565b60006156a182615636565b6156ab8185615641565b93506156b683615652565b8060005b838110156156e75781516156ce8882615671565b97506156d983615689565b9250506001810190506156ba565b5085935050505092915050565b600060a0820190506157096000830188613dfe565b6157166020830187615627565b81810360408301526157288186615696565b90506157376060830185614196565b6157446080830184613dfe565b969550505050505056fea2646970667358221220eb0d482e9cc7947eb5dff5b6c18a9d76d8f784081d62ffc6dd35ea0b08a2250464736f6c63430008110033

Deployed Bytecode Sourcemap

19888:14035:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31991:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15173:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16087:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19970:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15494:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33779:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30399:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16264:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30977:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30689:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31942:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15393:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16845:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20028:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25346:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24230:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32356:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32037:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20448:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15610:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14360:148;;;;;;;;;;;;;:::i;:::-;;24363:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25006:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20138:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33372:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25448:253;;;;;;;;;;;;;:::i;:::-;;14146:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15281:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17068:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31724:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15745:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30442:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29368:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32675:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25413:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20339;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23932:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25379:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20177:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31325:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15928:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29132:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20374:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24680:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14516:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23459:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31991:39;;;;:::o;15173:100::-;15227:13;15260:5;15253:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15173:100;:::o;16087:169::-;16170:4;16187:39;16196:12;:10;:12::i;:::-;16210:7;16219:6;16187:8;:39::i;:::-;16244:4;16237:11;;16087:169;;;;:::o;19970:51::-;;;:::o;15494:108::-;15555:7;15582:12;;15575:19;;15494:108;:::o;33779:141::-;33854:4;33878:25;:34;33904:7;33878:34;;;;;;;;;;;;;;;;;;;;;;;;;33871:41;;33779:141;;;:::o;30399:36::-;;;;;;;;;;;;;:::o;16264:573::-;16404:4;16421:24;16448:11;:19;16460:6;16448:19;;;;;;;;;;;;;;;:33;16468:12;:10;:12::i;:::-;16448:33;;;;;;;;;;;;;;;;16421:60;;16516:17;16496:16;:37;16492:265;;16578:6;16558:16;:26;;16550:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16673:57;16682:6;16690:12;:10;:12::i;:::-;16723:6;16704:16;:25;16673:8;:57::i;:::-;16492:265;16769:36;16779:6;16787:9;16798:6;16769:9;:36::i;:::-;16825:4;16818:11;;;16264:573;;;;;:::o;30977:340::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31128:3:::1;31113:10;:8;:10::i;:::-;31107:2;:16;;;;:::i;:::-;31090:13;:11;:13::i;:::-;:34;;;;:::i;:::-;31089:42;;;;:::i;:::-;31069:16;:62;;31061:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;31236:10;:8;:10::i;:::-;31230:2;:16;;;;:::i;:::-;31210;:37;;;;:::i;:::-;31192:15;:55;;;;31265:44;31293:15;;31265:44;;;;;;:::i;:::-;;;;;;;;30977:340:::0;:::o;30689:280::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30783:21:::1;;;;;;;;;;;30773:31;;:6;:31;;::::0;30765:88:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30888:6;30864:21;;:30;;;;;;;;;;;;;;;;;;30912:49;30939:21;;;;;;;;;;;30912:49;;;;;;:::i;:::-;;;;;;;;30689:280:::0;:::o;31942:42::-;;;;;;;;;;;;;:::o;15393:93::-;15451:5;15476:2;15469:9;;15393:93;:::o;16845:215::-;16933:4;16950:80;16959:12;:10;:12::i;:::-;16973:7;17019:10;16982:11;:25;16994:12;:10;:12::i;:::-;16982:25;;;;;;;;;;;;;;;:34;17008:7;16982:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16950:8;:80::i;:::-;17048:4;17041:11;;16845:215;;;;:::o;20028:39::-;;;:::o;25346:26::-;;;;;;;;;;;;;:::o;24230:125::-;24295:4;24319:19;:28;24339:7;24319:28;;;;;;;;;;;;;;;;;;;;;;;;;24312:35;;24230:125;;;:::o;32356:311::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32455:26:::1;;;;;;;;;;;32445:36;;:6;:36;;::::0;32437:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32576:6;32547:26;;:35;;;;;;;;;;;;;;;;;;32600:59;32632:26;;;;;;;;;;;32600:59;;;;;;:::i;:::-;;;;;;;;32356:311:::0;:::o;32037:40::-;;;;:::o;20448:26::-;;;;;;;;;;;;;:::o;15610:127::-;15684:7;15711:9;:18;15721:7;15711:18;;;;;;;;;;;;;;;;15704:25;;15610:127;;;:::o;14360:148::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14467:1:::1;14430:40;;14451:6;;;;;;;;;;;14430:40;;;;;;;;;;;;14498:1;14481:6;;:19;;;;;;;;;;;;;;;;;;14360:148::o:0;24363:309::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24462:17:::1;24443:16;:36;;;;24512:16;;24492:15;:36;;;;24568:6;24549:15;;:25;;24541:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24633:31;24647:16;;24633:31;;;;;;:::i;:::-;;;;;;;;24363:309:::0;:::o;25006:332::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25105:10:::1;;;;;;;;;;;25090:25;;:11;:25;;::::0;25082:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25200:1;25177:25;;:11;:25;;::::0;25169:79:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25272:11;25259:10;;:24;;;;;;;;;;;;;;;;;;25301:29;25319:10;;;;;;;;;;;25301:29;;;;;;:::i;:::-;;;;;;;;25006:332:::0;:::o;20138:32::-;;;;:::o;33372:399::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33520:7:::1;33482:45;;:25;:34;33508:7;33482:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;33473:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33606:4;33587:24;;:7;:24;;::::0;33579:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33689:7;33652:25;:34;33678:7;33652:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;33746:7;33714:49;;;33755:7;33714:49;;;;;;:::i;:::-;;;;;;;;33372:399:::0;;:::o;25448:253::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25511:14:::1;;;;;;;;;;;25510:15;25502:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25582:4;25565:14;;:21;;;;;;;;;;;;;;;;;;25611:4;25597:11;;:18;;;;;;;;;;;;;;;;;;25641:12;25626;:27;;;;25678:15;25664:11;:29;;;;25448:253::o:0;14146:79::-;14184:7;14211:6;;;;;;;;;;;14204:13;;14146:79;:::o;15281:104::-;15337:13;15370:7;15363:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15281:104;:::o;17068:413::-;17161:4;17178:24;17205:11;:25;17217:12;:10;:12::i;:::-;17205:25;;;;;;;;;;;;;;;:34;17231:7;17205:34;;;;;;;;;;;;;;;;17178:61;;17278:15;17258:16;:35;;17250:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17371:67;17380:12;:10;:12::i;:::-;17394:7;17422:15;17403:16;:34;17371:8;:67::i;:::-;17469:4;17462:11;;;17068:413;;;;:::o;31724:145::-;31799:4;31823:29;:38;31853:7;31823:38;;;;;;;;;;;;;;;;;;;;;;;;;31816:45;;31724:145;;;:::o;15745:175::-;15831:4;15848:42;15858:12;:10;:12::i;:::-;15872:9;15883:6;15848:9;:42::i;:::-;15908:4;15901:11;;15745:175;;;;:::o;30442:30::-;;;;:::o;29368:304::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29483:9:::1;29467:13;:11;:13::i;:::-;:25;;;;:::i;:::-;29455:9;:37;29447:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29592:9;29571:18;:30;;;;29619:45;29645:18;;29619:45;;;;;;:::i;:::-;;;;;;;;29368:304:::0;:::o;32675:689::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32898:5:::1;32883:10;:8;:10::i;:::-;32877:2;:16;;;;:::i;:::-;32860:13;:11;:13::i;:::-;:34;;;;:::i;:::-;32859:44;;;;:::i;:::-;32830:24;:73;;:164;;;;;32989:5;32974:10;:8;:10::i;:::-;32968:2;:16;;;;:::i;:::-;32951:13;:11;:13::i;:::-;:34;;;;:::i;:::-;32950:44;;;;:::i;:::-;32921:25;:73;;32830:164;32808:278;;;;;;;;;;;;:::i;:::-;;;;;;;;;33160:10;:8;:10::i;:::-;33154:2;:16;;;;:::i;:::-;33125:24;:46;;;;:::i;:::-;33098:23;:73;;;;33244:10;:8;:10::i;:::-;33238:2;:16;;;;:::i;:::-;33209:25;:46;;;;:::i;:::-;33182:24;:73;;;;33273:83;33306:23;;33331:24;;33273:83;;;;;;;:::i;:::-;;;;;;;;32675:689:::0;;:::o;25413:26::-;;;;:::o;20339:::-;;;;;;;;;;;;;:::o;23932:290::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24058:8:::1;24026:40;;:19;:28;24046:7;24026:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;24018:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24154:8;24123:19;:28;24143:7;24123:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24196:7;24180:34;;;24205:8;24180:34;;;;;;:::i;:::-;;;;;;;;23932:290:::0;;:::o;25379:27::-;;;;:::o;20177:33::-;;;;:::o;31325:391::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31467:7:::1;31425:49;;:29;:38;31455:7;31425:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;31416:98:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31552:4;31533:24;;:7;:24;;::::0;31525:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31639:7;31598:29;:38;31628:7;31598:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;31691:7;31664:44;;;31700:7;31664:44;;;;;;:::i;:::-;;;;;;;;31325:391:::0;;:::o;15928:151::-;16017:7;16044:11;:18;16056:5;16044:18;;;;;;;;;;;;;;;:27;16063:7;16044:27;;;;;;;;;;;;;;;;16037:34;;15928:151;;;;:::o;29132:228::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29223:8:::1;29208:23;;:11;;;;;;;;;;;:23;;::::0;29200:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29295:8;29281:11;;:22;;;;;;;;;;;;;;;;;;29321:31;29340:11;;;;;;;;;;;29321:31;;;;;;:::i;:::-;;;;;;;;29132:228:::0;:::o;20374:34::-;;;;:::o;24680:318::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24782:18:::1;24762:17;:38;;;;24834:17;;24813:16;:38;;;;24892:6;24872:16;;:26;;24864:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24957:33;24972:17;;24957:33;;;;;;:::i;:::-;;;;;;;;24680:318:::0;:::o;14516:244::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14625:1:::1;14605:22;;:8;:22;;::::0;14597:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14715:8;14686:38;;14707:6;;;;;;;;;;;14686:38;;;;;;;;;;;;14744:8;14735:6;;:17;;;;;;;;;;;;;;;;;;14516:244:::0;:::o;23459:465::-;14283:12;:10;:12::i;:::-;14273:22;;:6;;;;;;;;;;;:22;;;14265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23555:4:::1;23538:22;;:5;:22;;::::0;23530:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23652:3;23635:21;;:5;:21;;::::0;23631:127:::1;;23673:52;23703:21;23681:10;23673:29;;;;:52;;;;:::i;:::-;;23740:7;;23631:127;23768:17;23795:5;23768:33;;23812:15;23830:10;:20;;;23859:4;23830:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23812:53;;23876:10;:19;;;23896:10;23908:7;23876:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23519:405;;14343:1;23459:465:::0;:::o;13469:98::-;13522:7;13549:10;13542:17;;13469:98;:::o;19236:380::-;19389:1;19372:19;;:5;:19;;;19364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19470:1;19451:21;;:7;:21;;;19443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19554:6;19524:11;:18;19536:5;19524:18;;;;;;;;;;;;;;;:27;19543:7;19524:27;;;;;;;;;;;;;;;:36;;;;19592:7;19576:32;;19585:5;19576:32;;;19601:6;19576:32;;;;;;:::i;:::-;;;;;;;;19236:380;;;:::o;25709:3415::-;25822:1;25806:18;;:4;:18;;;25798:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25899:1;25885:16;;:2;:16;;;25877:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25960:14;;;;;;;;;;;:43;;;;25978:19;:25;25998:4;25978:25;;;;;;;;;;;;;;;;;;;;;;;;;25960:43;:70;;;;26007:19;:23;26027:2;26007:23;;;;;;;;;;;;;;;;;;;;;;;;;25960:70;25952:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;26093:1;26083:6;:11;26079:93;;26111:28;26127:4;26133:2;26137:1;26111:15;:28::i;:::-;26154:7;;26079:93;26188:26;;;;;;;;;;;26184:752;;;26254:13;26246:21;;:4;:21;;;:44;;;;26277:13;26271:19;;:2;:19;;;26246:44;26245:99;;;;;26313:25;:31;26339:4;26313:31;;;;;;;;;;;;;;;;;;;;;;;;;26312:32;26245:99;:151;;;;;26367:25;:29;26393:2;26367:29;;;;;;;;;;;;;;;;;;;;;;;;;26366:30;26245:151;26241:684;;;26443:13;26435:21;;:4;:21;;;26431:479;;26525:23;;26515:6;:33;;26481:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26431:479;;;26754:24;;26744:6;:34;;26710:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26431:479;26241:684;26184:752;26948:28;26979:24;26997:4;26979:9;:24::i;:::-;26948:55;;27016:12;27055:18;;27031:20;:42;;27016:57;;27090:7;:33;;;;;27115:8;;;;;;;;;;;27114:9;27090:33;:69;;;;;27146:13;27140:19;;:2;:19;;;27090:69;:124;;;;;27213:1;27194:16;;27176:15;;:34;;;;:::i;:::-;:38;27090:124;:152;;;;;27231:11;;;;;;;;;;;27090:152;27086:314;;;27280:4;27269:8;;:15;;;;;;;;;;;;;;;;;;27313:42;27334:20;27313;:42::i;:::-;27383:5;27372:8;;:16;;;;;;;;;;;;;;;;;;27086:314;27412:18;27445:19;:25;27465:4;27445:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27474:19;:23;27494:2;27474:23;;;;;;;;;;;;;;;;;;;;;;;;;27445:52;:64;;;;27501:8;;;;;;;;;;;27445:64;27441:333;;;27539:1;27526:14;;27441:333;;;27570:13;27562:21;;:4;:21;;;27558:216;;27613:15;;27600:28;;27558:216;;;27656:13;27650:19;;:2;:19;;;27646:128;;27699:16;;27686:29;;27646:128;;;27761:1;27748:14;;27646:128;27558:216;27441:333;27820:11;;27807:10;:24;;;;:::i;:::-;27789:15;:42;27786:619;;27910:11;;27897:10;:24;;;;:::i;:::-;27879:15;:42;27875:530;;;27950:13;27942:21;;:4;:21;;;27938:158;;27997:2;27984:15;;27938:158;;;28031:13;28025:19;;:2;:19;;;28021:75;;28078:2;28065:15;;28021:75;27938:158;27875:530;;;28139:13;28131:21;;:4;:21;;;28127:267;;28186:2;28173:15;;28227:12;;28211;:28;28207:91;;28276:2;28263:15;;28207:91;28127:267;;;28329:13;28323:19;;:2;:19;;;28319:75;;28376:2;28363:15;;28319:75;28127:267;27875:530;27786:619;28434:1;28421:10;:14;28417:183;;;28452:12;28491:3;28477:10;28468:6;:19;;;;:::i;:::-;28467:27;;;;:::i;:::-;28452:42;;28527:4;28518:6;:13;;;;:::i;:::-;28509:22;;28546:42;28562:4;28576;28583;28546:15;:42::i;:::-;28437:163;28417:183;28616:21;;;;;;;;;;;28612:459;;;28669:29;:35;28699:4;28669:35;;;;;;;;;;;;;;;;;;;;;;;;;28668:36;:92;;;;;28727:29;:33;28757:2;28727:33;;;;;;;;;;;;;;;;;;;;;;;;;28726:34;28668:92;:132;;;;;28787:13;28781:19;;:2;:19;;;;28668:132;28664:396;;;28835:15;28854:13;28864:2;28854:9;:13::i;:::-;28835:32;;28936:15;;28926:6;28916:7;:16;;;;:::i;:::-;:35;;28886:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;28816:244;28664:396;28612:459;29083:33;29099:4;29105:2;29109:6;29083:15;:33::i;:::-;25787:3337;;;25709:3415;;;;:::o;9379:266::-;9458:4;9507:6;9482:21;:31;;9474:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9561:12;9579:9;:14;;9601:6;9579:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9560:52;;;9630:7;9623:14;;;9379:266;;;;:::o;17489:733::-;17647:1;17629:20;;:6;:20;;;17621:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17731:1;17710:23;;:9;:23;;;17702:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17786:47;17807:6;17815:9;17826:6;17786:20;:47::i;:::-;17846:21;17870:9;:17;17880:6;17870:17;;;;;;;;;;;;;;;;17846:41;;17923:6;17906:13;:23;;17898:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18044:6;18028:13;:22;18008:9;:17;18018:6;18008:17;;;;;;;;;;;;;;;:42;;;;18096:6;18072:9;:20;18082:9;18072:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;18137:9;18120:35;;18129:6;18120:35;;;18148:6;18120:35;;;;;;:::i;:::-;;;;;;;;18168:46;18188:6;18196:9;18207:6;18168:19;:46::i;:::-;17610:612;17489:733;;;:::o;29680:642::-;29750:22;29775:21;29750:46;;29809:21;29847:1;29833:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29809:40;;29878:4;29860;29865:1;29860:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29904:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29894:4;29899:1;29894:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29939:15;:66;;;30020:11;30046:1;30062:4;30089;30109:15;29939:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30138:18;30183:14;30159:21;:38;;;;:::i;:::-;30138:59;;30210:41;30240:10;30218;;;;;;;;;;;30210:29;;;;:41;;;;:::i;:::-;;30269:45;30290:11;30303:10;30269:45;;;;;;;:::i;:::-;;;;;;;;29739:583;;;29680:642;:::o;19624:125::-;;;;:::o;19757:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:329::-;4830:6;4879:2;4867:9;4858:7;4854:23;4850:32;4847:119;;;4885:79;;:::i;:::-;4847:119;5005:1;5030:53;5075:7;5066:6;5055:9;5051:22;5030:53;:::i;:::-;5020:63;;4976:117;4771:329;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:329::-;5790:6;5839:2;5827:9;5818:7;5814:23;5810:32;5807:119;;;5845:79;;:::i;:::-;5807:119;5965:1;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5936:117;5731:329;;;;:::o;6066:116::-;6136:21;6151:5;6136:21;:::i;:::-;6129:5;6126:32;6116:60;;6172:1;6169;6162:12;6116:60;6066:116;:::o;6188:133::-;6231:5;6269:6;6256:20;6247:29;;6285:30;6309:5;6285:30;:::i;:::-;6188:133;;;;:::o;6327:323::-;6383:6;6432:2;6420:9;6411:7;6407:23;6403:32;6400:119;;;6438:79;;:::i;:::-;6400:119;6558:1;6583:50;6625:7;6616:6;6605:9;6601:22;6583:50;:::i;:::-;6573:60;;6529:114;6327:323;;;;:::o;6656:86::-;6691:7;6731:4;6724:5;6720:16;6709:27;;6656:86;;;:::o;6748:112::-;6831:22;6847:5;6831:22;:::i;:::-;6826:3;6819:35;6748:112;;:::o;6866:214::-;6955:4;6993:2;6982:9;6978:18;6970:26;;7006:67;7070:1;7059:9;7055:17;7046:6;7006:67;:::i;:::-;6866:214;;;;:::o;7086:118::-;7173:24;7191:5;7173:24;:::i;:::-;7168:3;7161:37;7086:118;;:::o;7210:222::-;7303:4;7341:2;7330:9;7326:18;7318:26;;7354:71;7422:1;7411:9;7407:17;7398:6;7354:71;:::i;:::-;7210:222;;;;:::o;7438:468::-;7503:6;7511;7560:2;7548:9;7539:7;7535:23;7531:32;7528:119;;;7566:79;;:::i;:::-;7528:119;7686:1;7711:53;7756:7;7747:6;7736:9;7732:22;7711:53;:::i;:::-;7701:63;;7657:117;7813:2;7839:50;7881:7;7872:6;7861:9;7857:22;7839:50;:::i;:::-;7829:60;;7784:115;7438:468;;;;;:::o;7912:474::-;7980:6;7988;8037:2;8025:9;8016:7;8012:23;8008:32;8005:119;;;8043:79;;:::i;:::-;8005:119;8163:1;8188:53;8233:7;8224:6;8213:9;8209:22;8188:53;:::i;:::-;8178:63;;8134:117;8290:2;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8261:118;7912:474;;;;;:::o;8392:::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:180::-;8920:77;8917:1;8910:88;9017:4;9014:1;9007:15;9041:4;9038:1;9031:15;9058:320;9102:6;9139:1;9133:4;9129:12;9119:22;;9186:1;9180:4;9176:12;9207:18;9197:81;;9263:4;9255:6;9251:17;9241:27;;9197:81;9325:2;9317:6;9314:14;9294:18;9291:38;9288:84;;9344:18;;:::i;:::-;9288:84;9109:269;9058:320;;;:::o;9384:227::-;9524:34;9520:1;9512:6;9508:14;9501:58;9593:10;9588:2;9580:6;9576:15;9569:35;9384:227;:::o;9617:366::-;9759:3;9780:67;9844:2;9839:3;9780:67;:::i;:::-;9773:74;;9856:93;9945:3;9856:93;:::i;:::-;9974:2;9969:3;9965:12;9958:19;;9617:366;;;:::o;9989:419::-;10155:4;10193:2;10182:9;10178:18;10170:26;;10242:9;10236:4;10232:20;10228:1;10217:9;10213:17;10206:47;10270:131;10396:4;10270:131;:::i;:::-;10262:139;;9989:419;;;:::o;10414:182::-;10554:34;10550:1;10542:6;10538:14;10531:58;10414:182;:::o;10602:366::-;10744:3;10765:67;10829:2;10824:3;10765:67;:::i;:::-;10758:74;;10841:93;10930:3;10841:93;:::i;:::-;10959:2;10954:3;10950:12;10943:19;;10602:366;;;:::o;10974:419::-;11140:4;11178:2;11167:9;11163:18;11155:26;;11227:9;11221:4;11217:20;11213:1;11202:9;11198:17;11191:47;11255:131;11381:4;11255:131;:::i;:::-;11247:139;;10974:419;;;:::o;11399:180::-;11447:77;11444:1;11437:88;11544:4;11541:1;11534:15;11568:4;11565:1;11558:15;11585:102;11627:8;11674:5;11671:1;11667:13;11646:34;;11585:102;;;:::o;11693:848::-;11754:5;11761:4;11785:6;11776:15;;11809:5;11800:14;;11823:712;11844:1;11834:8;11831:15;11823:712;;;11939:4;11934:3;11930:14;11924:4;11921:24;11918:50;;;11948:18;;:::i;:::-;11918:50;11998:1;11988:8;11984:16;11981:451;;;12413:4;12406:5;12402:16;12393:25;;11981:451;12463:4;12457;12453:15;12445:23;;12493:32;12516:8;12493:32;:::i;:::-;12481:44;;11823:712;;;11693:848;;;;;;;:::o;12547:1073::-;12601:5;12792:8;12782:40;;12813:1;12804:10;;12815:5;;12782:40;12841:4;12831:36;;12858:1;12849:10;;12860:5;;12831:36;12927:4;12975:1;12970:27;;;;13011:1;13006:191;;;;12920:277;;12970:27;12988:1;12979:10;;12990:5;;;13006:191;13051:3;13041:8;13038:17;13035:43;;;13058:18;;:::i;:::-;13035:43;13107:8;13104:1;13100:16;13091:25;;13142:3;13135:5;13132:14;13129:40;;;13149:18;;:::i;:::-;13129:40;13182:5;;;12920:277;;13306:2;13296:8;13293:16;13287:3;13281:4;13278:13;13274:36;13256:2;13246:8;13243:16;13238:2;13232:4;13229:12;13225:35;13209:111;13206:246;;;13362:8;13356:4;13352:19;13343:28;;13397:3;13390:5;13387:14;13384:40;;;13404:18;;:::i;:::-;13384:40;13437:5;;13206:246;13477:42;13515:3;13505:8;13499:4;13496:1;13477:42;:::i;:::-;13462:57;;;;13551:4;13546:3;13542:14;13535:5;13532:25;13529:51;;;13560:18;;:::i;:::-;13529:51;13609:4;13602:5;13598:16;13589:25;;12547:1073;;;;;;:::o;13626:281::-;13684:5;13708:23;13726:4;13708:23;:::i;:::-;13700:31;;13752:25;13768:8;13752:25;:::i;:::-;13740:37;;13796:104;13833:66;13823:8;13817:4;13796:104;:::i;:::-;13787:113;;13626:281;;;;:::o;13913:180::-;13961:77;13958:1;13951:88;14058:4;14055:1;14048:15;14082:4;14079:1;14072:15;14099:185;14139:1;14156:20;14174:1;14156:20;:::i;:::-;14151:25;;14190:20;14208:1;14190:20;:::i;:::-;14185:25;;14229:1;14219:35;;14234:18;;:::i;:::-;14219:35;14276:1;14273;14269:9;14264:14;;14099:185;;;;:::o;14290:232::-;14430:34;14426:1;14418:6;14414:14;14407:58;14499:15;14494:2;14486:6;14482:15;14475:40;14290:232;:::o;14528:366::-;14670:3;14691:67;14755:2;14750:3;14691:67;:::i;:::-;14684:74;;14767:93;14856:3;14767:93;:::i;:::-;14885:2;14880:3;14876:12;14869:19;;14528:366;;;:::o;14900:419::-;15066:4;15104:2;15093:9;15089:18;15081:26;;15153:9;15147:4;15143:20;15139:1;15128:9;15124:17;15117:47;15181:131;15307:4;15181:131;:::i;:::-;15173:139;;14900:419;;;:::o;15325:410::-;15365:7;15388:20;15406:1;15388:20;:::i;:::-;15383:25;;15422:20;15440:1;15422:20;:::i;:::-;15417:25;;15477:1;15474;15470:9;15499:30;15517:11;15499:30;:::i;:::-;15488:41;;15678:1;15669:7;15665:15;15662:1;15659:22;15639:1;15632:9;15612:83;15589:139;;15708:18;;:::i;:::-;15589:139;15373:362;15325:410;;;;:::o;15741:232::-;15881:34;15877:1;15869:6;15865:14;15858:58;15950:15;15945:2;15937:6;15933:15;15926:40;15741:232;:::o;15979:366::-;16121:3;16142:67;16206:2;16201:3;16142:67;:::i;:::-;16135:74;;16218:93;16307:3;16218:93;:::i;:::-;16336:2;16331:3;16327:12;16320:19;;15979:366;;;:::o;16351:419::-;16517:4;16555:2;16544:9;16540:18;16532:26;;16604:9;16598:4;16594:20;16590:1;16579:9;16575:17;16568:47;16632:131;16758:4;16632:131;:::i;:::-;16624:139;;16351:419;;;:::o;16776:191::-;16816:3;16835:20;16853:1;16835:20;:::i;:::-;16830:25;;16869:20;16887:1;16869:20;:::i;:::-;16864:25;;16912:1;16909;16905:9;16898:16;;16933:3;16930:1;16927:10;16924:36;;;16940:18;;:::i;:::-;16924:36;16776:191;;;;:::o;16973:237::-;17113:34;17109:1;17101:6;17097:14;17090:58;17182:20;17177:2;17169:6;17165:15;17158:45;16973:237;:::o;17216:366::-;17358:3;17379:67;17443:2;17438:3;17379:67;:::i;:::-;17372:74;;17455:93;17544:3;17455:93;:::i;:::-;17573:2;17568:3;17564:12;17557:19;;17216:366;;;:::o;17588:419::-;17754:4;17792:2;17781:9;17777:18;17769:26;;17841:9;17835:4;17831:20;17827:1;17816:9;17812:17;17805:47;17869:131;17995:4;17869:131;:::i;:::-;17861:139;;17588:419;;;:::o;18013:223::-;18153:34;18149:1;18141:6;18137:14;18130:58;18222:6;18217:2;18209:6;18205:15;18198:31;18013:223;:::o;18242:366::-;18384:3;18405:67;18469:2;18464:3;18405:67;:::i;:::-;18398:74;;18481:93;18570:3;18481:93;:::i;:::-;18599:2;18594:3;18590:12;18583:19;;18242:366;;;:::o;18614:419::-;18780:4;18818:2;18807:9;18803:18;18795:26;;18867:9;18861:4;18857:20;18853:1;18842:9;18838:17;18831:47;18895:131;19021:4;18895:131;:::i;:::-;18887:139;;18614:419;;;:::o;19039:226::-;19179:34;19175:1;19167:6;19163:14;19156:58;19248:9;19243:2;19235:6;19231:15;19224:34;19039:226;:::o;19271:366::-;19413:3;19434:67;19498:2;19493:3;19434:67;:::i;:::-;19427:74;;19510:93;19599:3;19510:93;:::i;:::-;19628:2;19623:3;19619:12;19612:19;;19271:366;;;:::o;19643:419::-;19809:4;19847:2;19836:9;19832:18;19824:26;;19896:9;19890:4;19886:20;19882:1;19871:9;19867:17;19860:47;19924:131;20050:4;19924:131;:::i;:::-;19916:139;;19643:419;;;:::o;20068:229::-;20208:34;20204:1;20196:6;20192:14;20185:58;20277:12;20272:2;20264:6;20260:15;20253:37;20068:229;:::o;20303:366::-;20445:3;20466:67;20530:2;20525:3;20466:67;:::i;:::-;20459:74;;20542:93;20631:3;20542:93;:::i;:::-;20660:2;20655:3;20651:12;20644:19;;20303:366;;;:::o;20675:419::-;20841:4;20879:2;20868:9;20864:18;20856:26;;20928:9;20922:4;20918:20;20914:1;20903:9;20899:17;20892:47;20956:131;21082:4;20956:131;:::i;:::-;20948:139;;20675:419;;;:::o;21100:223::-;21240:34;21236:1;21228:6;21224:14;21217:58;21309:6;21304:2;21296:6;21292:15;21285:31;21100:223;:::o;21329:366::-;21471:3;21492:67;21556:2;21551:3;21492:67;:::i;:::-;21485:74;;21568:93;21657:3;21568:93;:::i;:::-;21686:2;21681:3;21677:12;21670:19;;21329:366;;;:::o;21701:419::-;21867:4;21905:2;21894:9;21890:18;21882:26;;21954:9;21948:4;21944:20;21940:1;21929:9;21925:17;21918:47;21982:131;22108:4;21982:131;:::i;:::-;21974:139;;21701:419;;;:::o;22126:173::-;22266:25;22262:1;22254:6;22250:14;22243:49;22126:173;:::o;22305:366::-;22447:3;22468:67;22532:2;22527:3;22468:67;:::i;:::-;22461:74;;22544:93;22633:3;22544:93;:::i;:::-;22662:2;22657:3;22653:12;22646:19;;22305:366;;;:::o;22677:419::-;22843:4;22881:2;22870:9;22866:18;22858:26;;22930:9;22924:4;22920:20;22916:1;22905:9;22901:17;22894:47;22958:131;23084:4;22958:131;:::i;:::-;22950:139;;22677:419;;;:::o;23102:174::-;23242:26;23238:1;23230:6;23226:14;23219:50;23102:174;:::o;23282:366::-;23424:3;23445:67;23509:2;23504:3;23445:67;:::i;:::-;23438:74;;23521:93;23610:3;23521:93;:::i;:::-;23639:2;23634:3;23630:12;23623:19;;23282:366;;;:::o;23654:419::-;23820:4;23858:2;23847:9;23843:18;23835:26;;23907:9;23901:4;23897:20;23893:1;23882:9;23878:17;23871:47;23935:131;24061:4;23935:131;:::i;:::-;23927:139;;23654:419;;;:::o;24079:224::-;24219:34;24215:1;24207:6;24203:14;24196:58;24288:7;24283:2;24275:6;24271:15;24264:32;24079:224;:::o;24309:366::-;24451:3;24472:67;24536:2;24531:3;24472:67;:::i;:::-;24465:74;;24548:93;24637:3;24548:93;:::i;:::-;24666:2;24661:3;24657:12;24650:19;;24309:366;;;:::o;24681:419::-;24847:4;24885:2;24874:9;24870:18;24862:26;;24934:9;24928:4;24924:20;24920:1;24909:9;24905:17;24898:47;24962:131;25088:4;24962:131;:::i;:::-;24954:139;;24681:419;;;:::o;25106:250::-;25246:34;25242:1;25234:6;25230:14;25223:58;25315:33;25310:2;25302:6;25298:15;25291:58;25106:250;:::o;25362:366::-;25504:3;25525:67;25589:2;25584:3;25525:67;:::i;:::-;25518:74;;25601:93;25690:3;25601:93;:::i;:::-;25719:2;25714:3;25710:12;25703:19;;25362:366;;;:::o;25734:419::-;25900:4;25938:2;25927:9;25923:18;25915:26;;25987:9;25981:4;25977:20;25973:1;25962:9;25958:17;25951:47;26015:131;26141:4;26015:131;:::i;:::-;26007:139;;25734:419;;;:::o;26159:250::-;26299:34;26295:1;26287:6;26283:14;26276:58;26368:33;26363:2;26355:6;26351:15;26344:58;26159:250;:::o;26415:366::-;26557:3;26578:67;26642:2;26637:3;26578:67;:::i;:::-;26571:74;;26654:93;26743:3;26654:93;:::i;:::-;26772:2;26767:3;26763:12;26756:19;;26415:366;;;:::o;26787:419::-;26953:4;26991:2;26980:9;26976:18;26968:26;;27040:9;27034:4;27030:20;27026:1;27015:9;27011:17;27004:47;27068:131;27194:4;27068:131;:::i;:::-;27060:139;;26787:419;;;:::o;27212:332::-;27333:4;27371:2;27360:9;27356:18;27348:26;;27384:71;27452:1;27441:9;27437:17;27428:6;27384:71;:::i;:::-;27465:72;27533:2;27522:9;27518:18;27509:6;27465:72;:::i;:::-;27212:332;;;;;:::o;27550:229::-;27690:34;27686:1;27678:6;27674:14;27667:58;27759:12;27754:2;27746:6;27742:15;27735:37;27550:229;:::o;27785:366::-;27927:3;27948:67;28012:2;28007:3;27948:67;:::i;:::-;27941:74;;28024:93;28113:3;28024:93;:::i;:::-;28142:2;28137:3;28133:12;28126:19;;27785:366;;;:::o;28157:419::-;28323:4;28361:2;28350:9;28346:18;28338:26;;28410:9;28404:4;28400:20;28396:1;28385:9;28381:17;28374:47;28438:131;28564:4;28438:131;:::i;:::-;28430:139;;28157:419;;;:::o;28582:221::-;28722:34;28718:1;28710:6;28706:14;28699:58;28791:4;28786:2;28778:6;28774:15;28767:29;28582:221;:::o;28809:366::-;28951:3;28972:67;29036:2;29031:3;28972:67;:::i;:::-;28965:74;;29048:93;29137:3;29048:93;:::i;:::-;29166:2;29161:3;29157:12;29150:19;;28809:366;;;:::o;29181:419::-;29347:4;29385:2;29374:9;29370:18;29362:26;;29434:9;29428:4;29424:20;29420:1;29409:9;29405:17;29398:47;29462:131;29588:4;29462:131;:::i;:::-;29454:139;;29181:419;;;:::o;29606:225::-;29746:34;29742:1;29734:6;29730:14;29723:58;29815:8;29810:2;29802:6;29798:15;29791:33;29606:225;:::o;29837:366::-;29979:3;30000:67;30064:2;30059:3;30000:67;:::i;:::-;29993:74;;30076:93;30165:3;30076:93;:::i;:::-;30194:2;30189:3;30185:12;30178:19;;29837:366;;;:::o;30209:419::-;30375:4;30413:2;30402:9;30398:18;30390:26;;30462:9;30456:4;30452:20;30448:1;30437:9;30433:17;30426:47;30490:131;30616:4;30490:131;:::i;:::-;30482:139;;30209:419;;;:::o;30634:242::-;30774:34;30770:1;30762:6;30758:14;30751:58;30843:25;30838:2;30830:6;30826:15;30819:50;30634:242;:::o;30882:366::-;31024:3;31045:67;31109:2;31104:3;31045:67;:::i;:::-;31038:74;;31121:93;31210:3;31121:93;:::i;:::-;31239:2;31234:3;31230:12;31223:19;;30882:366;;;:::o;31254:419::-;31420:4;31458:2;31447:9;31443:18;31435:26;;31507:9;31501:4;31497:20;31493:1;31482:9;31478:17;31471:47;31535:131;31661:4;31535:131;:::i;:::-;31527:139;;31254:419;;;:::o;31679:143::-;31736:5;31767:6;31761:13;31752:22;;31783:33;31810:5;31783:33;:::i;:::-;31679:143;;;;:::o;31828:351::-;31898:6;31947:2;31935:9;31926:7;31922:23;31918:32;31915:119;;;31953:79;;:::i;:::-;31915:119;32073:1;32098:64;32154:7;32145:6;32134:9;32130:22;32098:64;:::i;:::-;32088:74;;32044:128;31828:351;;;;:::o;32185:332::-;32306:4;32344:2;32333:9;32329:18;32321:26;;32357:71;32425:1;32414:9;32410:17;32401:6;32357:71;:::i;:::-;32438:72;32506:2;32495:9;32491:18;32482:6;32438:72;:::i;:::-;32185:332;;;;;:::o;32523:137::-;32577:5;32608:6;32602:13;32593:22;;32624:30;32648:5;32624:30;:::i;:::-;32523:137;;;;:::o;32666:345::-;32733:6;32782:2;32770:9;32761:7;32757:23;32753:32;32750:119;;;32788:79;;:::i;:::-;32750:119;32908:1;32933:61;32986:7;32977:6;32966:9;32962:22;32933:61;:::i;:::-;32923:71;;32879:125;32666:345;;;;:::o;33017:223::-;33157:34;33153:1;33145:6;33141:14;33134:58;33226:6;33221:2;33213:6;33209:15;33202:31;33017:223;:::o;33246:366::-;33388:3;33409:67;33473:2;33468:3;33409:67;:::i;:::-;33402:74;;33485:93;33574:3;33485:93;:::i;:::-;33603:2;33598:3;33594:12;33587:19;;33246:366;;;:::o;33618:419::-;33784:4;33822:2;33811:9;33807:18;33799:26;;33871:9;33865:4;33861:20;33857:1;33846:9;33842:17;33835:47;33899:131;34025:4;33899:131;:::i;:::-;33891:139;;33618:419;;;:::o;34043:221::-;34183:34;34179:1;34171:6;34167:14;34160:58;34252:4;34247:2;34239:6;34235:15;34228:29;34043:221;:::o;34270:366::-;34412:3;34433:67;34497:2;34492:3;34433:67;:::i;:::-;34426:74;;34509:93;34598:3;34509:93;:::i;:::-;34627:2;34622:3;34618:12;34611:19;;34270:366;;;:::o;34642:419::-;34808:4;34846:2;34835:9;34831:18;34823:26;;34895:9;34889:4;34885:20;34881:1;34870:9;34866:17;34859:47;34923:131;35049:4;34923:131;:::i;:::-;34915:139;;34642:419;;;:::o;35067:224::-;35207:34;35203:1;35195:6;35191:14;35184:58;35276:7;35271:2;35263:6;35259:15;35252:32;35067:224;:::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:222::-;36234:34;36230:1;36222:6;36218:14;36211:58;36303:5;36298:2;36290:6;36286:15;36279:30;36094:222;:::o;36322:366::-;36464:3;36485:67;36549:2;36544:3;36485:67;:::i;:::-;36478:74;;36561:93;36650:3;36561:93;:::i;:::-;36679:2;36674:3;36670:12;36663:19;;36322:366;;;:::o;36694:419::-;36860:4;36898:2;36887:9;36883:18;36875:26;;36947:9;36941:4;36937:20;36933:1;36922:9;36918:17;36911:47;36975:131;37101:4;36975:131;:::i;:::-;36967:139;;36694:419;;;:::o;37119:174::-;37259:26;37255:1;37247:6;37243:14;37236:50;37119:174;:::o;37299:366::-;37441:3;37462:67;37526:2;37521:3;37462:67;:::i;:::-;37455:74;;37538:93;37627:3;37538:93;:::i;:::-;37656:2;37651:3;37647:12;37640:19;;37299:366;;;:::o;37671:419::-;37837:4;37875:2;37864:9;37860:18;37852:26;;37924:9;37918:4;37914:20;37910:1;37899:9;37895:17;37888:47;37952:131;38078:4;37952:131;:::i;:::-;37944:139;;37671:419;;;:::o;38096:246::-;38236:34;38232:1;38224:6;38220:14;38213:58;38305:29;38300:2;38292:6;38288:15;38281:54;38096:246;:::o;38348:366::-;38490:3;38511:67;38575:2;38570:3;38511:67;:::i;:::-;38504:74;;38587:93;38676:3;38587:93;:::i;:::-;38705:2;38700:3;38696:12;38689:19;;38348:366;;;:::o;38720:419::-;38886:4;38924:2;38913:9;38909:18;38901:26;;38973:9;38967:4;38963:20;38959:1;38948:9;38944:17;38937:47;39001:131;39127:4;39001:131;:::i;:::-;38993:139;;38720:419;;;:::o;39145:194::-;39185:4;39205:20;39223:1;39205:20;:::i;:::-;39200:25;;39239:20;39257:1;39239:20;:::i;:::-;39234:25;;39283:1;39280;39276:9;39268:17;;39307:1;39301:4;39298:11;39295:37;;;39312:18;;:::i;:::-;39295:37;39145:194;;;;:::o;39345:235::-;39485:34;39481:1;39473:6;39469:14;39462:58;39554:18;39549:2;39541:6;39537:15;39530:43;39345:235;:::o;39586:366::-;39728:3;39749:67;39813:2;39808:3;39749:67;:::i;:::-;39742:74;;39825:93;39914:3;39825:93;:::i;:::-;39943:2;39938:3;39934:12;39927:19;;39586:366;;;:::o;39958:419::-;40124:4;40162:2;40151:9;40147:18;40139:26;;40211:9;40205:4;40201:20;40197:1;40186:9;40182:17;40175:47;40239:131;40365:4;40239:131;:::i;:::-;40231:139;;39958:419;;;:::o;40383:179::-;40523:31;40519:1;40511:6;40507:14;40500:55;40383:179;:::o;40568:366::-;40710:3;40731:67;40795:2;40790:3;40731:67;:::i;:::-;40724:74;;40807:93;40896:3;40807:93;:::i;:::-;40925:2;40920:3;40916:12;40909:19;;40568:366;;;:::o;40940:419::-;41106:4;41144:2;41133:9;41129:18;41121:26;;41193:9;41187:4;41183:20;41179:1;41168:9;41164:17;41157:47;41221:131;41347:4;41221:131;:::i;:::-;41213:139;;40940:419;;;:::o;41365:147::-;41466:11;41503:3;41488:18;;41365:147;;;;:::o;41518:114::-;;:::o;41638:398::-;41797:3;41818:83;41899:1;41894:3;41818:83;:::i;:::-;41811:90;;41910:93;41999:3;41910:93;:::i;:::-;42028:1;42023:3;42019:11;42012:18;;41638:398;;;:::o;42042:379::-;42226:3;42248:147;42391:3;42248:147;:::i;:::-;42241:154;;42412:3;42405:10;;42042:379;;;:::o;42427:225::-;42567:34;42563:1;42555:6;42551:14;42544:58;42636:8;42631:2;42623:6;42619:15;42612:33;42427:225;:::o;42658:366::-;42800:3;42821:67;42885:2;42880:3;42821:67;:::i;:::-;42814:74;;42897:93;42986:3;42897:93;:::i;:::-;43015:2;43010:3;43006:12;42999:19;;42658:366;;;:::o;43030:419::-;43196:4;43234:2;43223:9;43219:18;43211:26;;43283:9;43277:4;43273:20;43269:1;43258:9;43254:17;43247:47;43311:131;43437:4;43311:131;:::i;:::-;43303:139;;43030:419;;;:::o;43455:180::-;43503:77;43500:1;43493:88;43600:4;43597:1;43590:15;43624:4;43621:1;43614:15;43641:180;43689:77;43686:1;43679:88;43786:4;43783:1;43776:15;43810:4;43807:1;43800:15;43827:143;43884:5;43915:6;43909:13;43900:22;;43931:33;43958:5;43931:33;:::i;:::-;43827:143;;;;:::o;43976:351::-;44046:6;44095:2;44083:9;44074:7;44070:23;44066:32;44063:119;;;44101:79;;:::i;:::-;44063:119;44221:1;44246:64;44302:7;44293:6;44282:9;44278:22;44246:64;:::i;:::-;44236:74;;44192:128;43976:351;;;;:::o;44333:85::-;44378:7;44407:5;44396:16;;44333:85;;;:::o;44424:158::-;44482:9;44515:61;44533:42;44542:32;44568:5;44542:32;:::i;:::-;44533:42;:::i;:::-;44515:61;:::i;:::-;44502:74;;44424:158;;;:::o;44588:147::-;44683:45;44722:5;44683:45;:::i;:::-;44678:3;44671:58;44588:147;;:::o;44741:114::-;44808:6;44842:5;44836:12;44826:22;;44741:114;;;:::o;44861:184::-;44960:11;44994:6;44989:3;44982:19;45034:4;45029:3;45025:14;45010:29;;44861:184;;;;:::o;45051:132::-;45118:4;45141:3;45133:11;;45171:4;45166:3;45162:14;45154:22;;45051:132;;;:::o;45189:108::-;45266:24;45284:5;45266:24;:::i;:::-;45261:3;45254:37;45189:108;;:::o;45303:179::-;45372:10;45393:46;45435:3;45427:6;45393:46;:::i;:::-;45471:4;45466:3;45462:14;45448:28;;45303:179;;;;:::o;45488:113::-;45558:4;45590;45585:3;45581:14;45573:22;;45488:113;;;:::o;45637:732::-;45756:3;45785:54;45833:5;45785:54;:::i;:::-;45855:86;45934:6;45929:3;45855:86;:::i;:::-;45848:93;;45965:56;46015:5;45965:56;:::i;:::-;46044:7;46075:1;46060:284;46085:6;46082:1;46079:13;46060:284;;;46161:6;46155:13;46188:63;46247:3;46232:13;46188:63;:::i;:::-;46181:70;;46274:60;46327:6;46274:60;:::i;:::-;46264:70;;46120:224;46107:1;46104;46100:9;46095:14;;46060:284;;;46064:14;46360:3;46353:10;;45761:608;;;45637:732;;;;:::o;46375:831::-;46638:4;46676:3;46665:9;46661:19;46653:27;;46690:71;46758:1;46747:9;46743:17;46734:6;46690:71;:::i;:::-;46771:80;46847:2;46836:9;46832:18;46823:6;46771:80;:::i;:::-;46898:9;46892:4;46888:20;46883:2;46872:9;46868:18;46861:48;46926:108;47029:4;47020:6;46926:108;:::i;:::-;46918:116;;47044:72;47112:2;47101:9;47097:18;47088:6;47044:72;:::i;:::-;47126:73;47194:3;47183:9;47179:19;47170:6;47126:73;:::i;:::-;46375:831;;;;;;;;:::o

Swarm Source

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