ETH Price: $2,516.87 (+2.56%)

Token

TradeWix (WIX)
 

Overview

Max Total Supply

1,000,000,000 WIX

Holders

160

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
11,821,800 WIX

Value
$0.00
0xc7d95e162ea73f2b311dcc4ea0eac849e17e351c
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:
TradeWix

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-15
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

/**

        ████████╗██████╗░░█████╗░██████╗░███████╗░██╗░░░░░░░██╗██╗██╗░░██╗     ████████╗░█████╗░██╗░░██╗███████╗███╗░░██╗
        ╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗██╔════╝░██║░░██╗░░██║██║╚██╗██╔╝     ╚══██╔══╝██╔══██╗██║░██╔╝██╔════╝████╗░██║
        ░░░██║░░░██████╔╝███████║██║░░██║█████╗░░░╚██╗████╗██╔╝██║░╚███╔╝░     ░░░██║░░░██║░░██║█████═╝░█████╗░░██╔██╗██║
        ░░░██║░░░██╔══██╗██╔══██║██║░░██║██╔══╝░░░░████╔═████║░██║░██╔██╗░     ░░░██║░░░██║░░██║██╔═██╗░██╔══╝░░██║╚████║
        ░░░██║░░░██║░░██║██║░░██║██████╔╝███████╗░░╚██╔╝░╚██╔╝░██║██╔╝╚██╗     ░░░██║░░░╚█████╔╝██║░╚██╗███████╗██║░╚███║
        ░░░╚═╝░░░╚═╝░░╚═╝╚═╝░░╚═╝╚═════╝░╚══════╝░░░╚═╝░░░╚═╝░░╚═╝╚═╝░░╚═╝     ░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚══╝

*/
interface IBEP20 {
    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
    );
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

    function owner() public view virtual 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;
    }
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

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

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract TradeWix is Ownable, IBEP20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromWalletHoldingLimit;
    mapping(address => bool) private _isExcludedFromTxLimit;
    mapping(address => bool) private _isAutomaticMarketMaker;
    uint256 public _decimals = 18;
    uint256 public _totalSupply = 1 * 10**9 * 10**_decimals;
    string private _name = "TradeWix";
    string private _symbol = "WIX";

    address public immutable DeadWalletAddress =
        0x000000000000000000000000000000000000dEaD;
    address payable public MarketingWalletAddress =
        payable(0x2EB15D3C5c5C6C30C2D53d552d49236673889cf4);
    address payable public StakingWalletAddress =
        payable(0xf57fd7Fa55E5e58EF67F00877C31351e1cFe26A3);

    uint256 public _BuyingLiquidityFee = 1;
    uint256 public _BuyingMarketingFee = 2;
    uint256 public _BuyingStakingFee = 1;

    uint256 public _SellingLiquidityFee = 1;
    uint256 public _SellingMarketingFee = 2;
    uint256 public _SellingStakingFee = 1;

    uint256 internal feeDenominator = 100;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool internal inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public numTokensSellToAddToLiquidity = 1 * 10**6 * 10**_decimals;
    uint256 public _maxWalletHoldingLimit = 10 * 10**6 * 10**_decimals;
    uint256 public _maxTxLimit = 10 * 10**6 * 10**_decimals;

    event MaxWalletHoldingAmountUpdated(uint256 updatedMaxWalletHoldingAmount);
    event MaxTxHoldingAmountUpdated(uint256 updatedMaxTxAmount);
    event AutomaticMarketMakerPairUpdated(address account, bool status);
    event TaxBuyingFeeUpdated(uint256 TaxFees);
    event TaxSellingFeeUpdated(uint256 TaxFees);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ETHReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _balances[owner()] = _totalSupply;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee and Wallet holding Limits
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[StakingWalletAddress] = true;
        _isExcludedFromFee[MarketingWalletAddress] = true;

        _isExcludedFromTxLimit[address(this)] = true;
        _isExcludedFromTxLimit[owner()] = true;
        _isExcludedFromTxLimit[MarketingWalletAddress] = true;
        _isExcludedFromTxLimit[StakingWalletAddress] = true;

        _isExcludedFromWalletHoldingLimit[address(this)] = true;
        _isExcludedFromWalletHoldingLimit[StakingWalletAddress] = true;
        _isExcludedFromWalletHoldingLimit[uniswapV2Pair] = true;
        _isExcludedFromWalletHoldingLimit[MarketingWalletAddress] = true;
        _isExcludedFromWalletHoldingLimit[owner()] = true;

        _isAutomaticMarketMaker[uniswapV2Pair] = true;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function decimals() external view returns (uint256) {
        return _decimals;
    }

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

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "IBEP20: approve from the zero address");
        require(spender != address(0), "IBEP20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    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,
            "IBEP20: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromTax(address add) external view returns (bool) {
        return _isExcludedFromFee[add];
    }

    function isExcludedFromWalletLimit(address WalletAddress)
        external
        view
        returns (bool)
    {
        return _isExcludedFromWalletHoldingLimit[WalletAddress];
    }

    function excludeFromMaxWalletHoldingLimit(address account)
        external
        onlyOwner
    {
        _isExcludedFromWalletHoldingLimit[account] = true;
    }

    function includeInMaxWalletHoldingLimit(address account)
        external
        onlyOwner
    {
        require(
            account != uniswapV2Pair,
            "You can't play with Liquidity pair address"
        );
        _isExcludedFromWalletHoldingLimit[account] = false;
    }

    function UpdateMaxWalletHoldingLimit(uint256 maxWalletHoldingAmount)
        external
        onlyOwner
    {
        require(
            maxWalletHoldingAmount * 10**_decimals >= 1_000_000 * 10**_decimals,
            "Amount should be greater or equal to 1 Millin Tokens"
        );
        _maxWalletHoldingLimit = maxWalletHoldingAmount * 10**_decimals;
        emit MaxWalletHoldingAmountUpdated(_maxWalletHoldingLimit);
    }

    function excludeFromMaxTxLimit(address account) external onlyOwner {
        _isExcludedFromTxLimit[account] = true;
    }

    function includeInMaxTxLimit(address account) external onlyOwner {
        _isExcludedFromTxLimit[account] = false;
    }

    function UpdateMaxTxLimit(uint256 maxTxAmount) external onlyOwner {
        require(
            maxTxAmount * 10**_decimals >= 1_000_000 * 10**_decimals,
            "Amount should be greater or equal to 1 Millin Tokens"
        );
        _maxTxLimit = maxTxAmount * 10**_decimals;
        emit MaxTxHoldingAmountUpdated(_maxTxLimit);
    }

    function isAutomaticMarketMaker(address account)
        external
        view
        returns (bool)
    {
        return _isAutomaticMarketMaker[account];
    }

    function setNewLiquidityPair(address addNewAMM, bool status)
        external
        onlyOwner
    {
        _isAutomaticMarketMaker[addNewAMM] = status;
        emit AutomaticMarketMakerPairUpdated(addNewAMM, status);
    }

    function UpdateWallets(address payable newMarketingWallet)
        external
        onlyOwner
    {
        require(newMarketingWallet != address(0), "You can't set zero address");
        MarketingWalletAddress = newMarketingWallet;
    }

    function UpdateBuyingTaxFees(
        uint256 newLiquidityFee,
        uint256 newMarketingFee,
        uint256 newStakingFee
    ) external onlyOwner {
        require(
            newLiquidityFee + newMarketingFee + newStakingFee <= 15,
            "you can't set more than 15%"
        );
        _BuyingLiquidityFee = newLiquidityFee;
        _BuyingMarketingFee = newMarketingFee;
        _BuyingStakingFee = newStakingFee;

        emit TaxBuyingFeeUpdated(
            _BuyingLiquidityFee + _BuyingMarketingFee + _BuyingStakingFee
        );
    }

    function UpdateSellingTaxFees(
        uint256 newLiquidityFee,
        uint256 newMarketingFee,
        uint256 newStakingFee
    ) external onlyOwner {
        require(
            newLiquidityFee + newMarketingFee + newStakingFee <= 15,
            "you can't set more than 15%"
        );
        _SellingLiquidityFee = newLiquidityFee;
        _SellingMarketingFee = newMarketingFee;
        _SellingStakingFee = newStakingFee;

        emit TaxSellingFeeUpdated(
            _SellingLiquidityFee + _SellingMarketingFee + _SellingStakingFee
        );
    }

    function UpdateNoOfTokensSellToGetReward(uint256 thresholdValue)
        external
        onlyOwner
    {
        numTokensSellToAddToLiquidity = thresholdValue * 10**_decimals;
        emit MinTokensBeforeSwapUpdated(numTokensSellToAddToLiquidity);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "IBEP20: transfer amount exceeds allowance"
        );
        return true;
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "IBEP20: transfer from the zero address");
        require(
            recipient != address(0),
            "IBEP20: transfer to the zero address"
        );
        require(_balances[sender] >= amount, "You don't have enough balance");

        if (
            !_isExcludedFromWalletHoldingLimit[recipient] && sender != owner()
        ) {
            require(
                balanceOf(recipient) + amount <= _maxWalletHoldingLimit,
                "Wallet Holding limit exceeded"
            );
        }

        if (sender != owner()) {
            require(
                amount <= _maxTxLimit ||
                    _isExcludedFromTxLimit[sender] ||
                    _isExcludedFromTxLimit[recipient],
                "TX Limit Exceeded"
            );
        }

        uint256 totalTax = 0;

        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            totalTax = 0;
        } else {
            if (_isAutomaticMarketMaker[recipient]) {
                totalTax =
                    (amount *
                        (_SellingLiquidityFee +
                            _SellingMarketingFee +
                            _SellingStakingFee)) /
                    (feeDenominator);
            } else {
                totalTax =
                    (amount *
                        (_BuyingLiquidityFee +
                            _BuyingMarketingFee +
                            _BuyingStakingFee)) /
                    (feeDenominator);
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            recipient == uniswapV2Pair &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > numTokensSellToAddToLiquidity
        ) {
            if (overMinTokenBalance) {
                contractTokenBalance = numTokensSellToAddToLiquidity;

                uint256 remainingLiquidityToken;
                if (
                    _SellingLiquidityFee +
                        _SellingMarketingFee +
                        _SellingStakingFee >
                    0
                ) {
                    remainingLiquidityToken =
                        (contractTokenBalance *
                            (_SellingMarketingFee + _SellingStakingFee)) /
                        (_SellingMarketingFee +
                            _SellingLiquidityFee +
                            _SellingStakingFee);
                }

                uint256 liquidityToken;
                if (_SellingLiquidityFee > 0) {
                    liquidityToken =
                        contractTokenBalance -
                        (remainingLiquidityToken);
                } else {
                    if (_SellingMarketingFee + _SellingStakingFee > 0) {
                        remainingLiquidityToken = contractTokenBalance;
                    }
                }

                // Swap Tokens and Send to Marketing Wallet
                if (_SellingMarketingFee + _SellingStakingFee > 0) {
                    swapTokens(remainingLiquidityToken);
                }
                if (liquidityToken > 0) {
                    // Remove Hate Swap and Liquidity by breaking Token in proportion
                    swapAndLiquify(liquidityToken);
                }
            }
        }

        uint256 amountReceived = amount - (totalTax);
        _balances[address(this)] += totalTax;
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] += amountReceived;

        if (totalTax > 0) {
            emit Transfer(sender, address(this), totalTax);
        }
        emit Transfer(sender, recipient, amountReceived);
    }

    function swapTokens(uint256 _contractTokenBalance) private lockTheSwap {
        uint256 combineFee = _SellingMarketingFee + _SellingStakingFee;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(_contractTokenBalance);
        uint256 transferredBalance = address(this).balance - (initialBalance);
        uint256 marketingBalance = (transferredBalance *
            (_SellingMarketingFee)) / (combineFee);
        uint256 stakingBalance = (transferredBalance * (_SellingStakingFee)) /
            combineFee;

        if (marketingBalance > 0) {
            transferToAddressETH(MarketingWalletAddress, marketingBalance);
        }
        if (stakingBalance > 0) {
            transferToAddressETH(StakingWalletAddress, stakingBalance);
        }
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance / 2;
        uint256 otherHalf = contractTokenBalance - half;

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance - (initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

        if (address(this).balance > 0) {
            MarketingWalletAddress.transfer(address(this).balance);
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> wETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    /* Airdrop Begins */
    function AirDropMultiTransfer(
        address[] calldata addresses,
        uint256[] calldata tokens
    ) external {
        address from = msg.sender;
        require(
            addresses.length < 501,
            "GAS Error: max airdrop limit is 500 addresses"
        );
        require(
            addresses.length == tokens.length,
            "Mismatch between Address and token count"
        );

        uint256 SCCC = 0;

        for (uint256 i = 0; i < addresses.length; i++) {
            SCCC = SCCC + tokens[i];
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(from, addresses[i], tokens[i]);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AutomaticMarketMakerPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxTxAmount","type":"uint256"}],"name":"MaxTxHoldingAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxWalletHoldingAmount","type":"uint256"}],"name":"MaxWalletHoldingAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TaxFees","type":"uint256"}],"name":"TaxBuyingFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TaxFees","type":"uint256"}],"name":"TaxSellingFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"AirDropMultiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DeadWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StakingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newStakingFee","type":"uint256"}],"name":"UpdateBuyingTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"UpdateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletHoldingAmount","type":"uint256"}],"name":"UpdateMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdValue","type":"uint256"}],"name":"UpdateNoOfTokensSellToGetReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newStakingFee","type":"uint256"}],"name":"UpdateSellingTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingWallet","type":"address"}],"name":"UpdateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_BuyingLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BuyingMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BuyingStakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingStakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletHoldingLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWalletHoldingLimit","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":"isAutomaticMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"WalletAddress","type":"address"}],"name":"isExcludedFromWalletLimit","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":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"addNewAMM","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setNewLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526012600755600754600a6200001a919062000db8565b633b9aca006200002b919062000e09565b6008556040518060400160405280600881526020017f547261646557697800000000000000000000000000000000000000000000000081525060099081620000749190620010c4565b506040518060400160405280600381526020017f5749580000000000000000000000000000000000000000000000000000000000815250600a9081620000bb9190620010c4565b5061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250732eb15d3c5c5c6c30c2d53d552d49236673889cf4600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f57fd7fa55e5e58ef67f00877c31351e1cfe26a3600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d556002600e556001600f55600160105560026011556001601255606460135560016015806101000a81548160ff021916908315150217905550600754600a620001e9919062000db8565b620f4240620001f9919062000e09565b601655600754600a6200020d919062000db8565b629896806200021d919062000e09565b601755600754600a62000231919062000db8565b6298968062000241919062000e09565b6018553480156200025157600080fd5b50734de69f434b6f89154d58ac3d869069d9dab095eb6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600854600160006200033862000c0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000401919062001215565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000469573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048f919062001215565b6040518363ffffffff1660e01b8152600401620004ae92919062001258565b6020604051808303816000875af1158015620004ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f4919062001215565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360006200058b62000c0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560006200079662000c0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016004600062000ab762000c0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b9262000c0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000bf3919062001296565b60405180910390a350620012b3565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cb95780860481111562000c915762000c9062000c2b565b5b600185161562000ca15780820291505b808102905062000cb18562000c5a565b945062000c71565b94509492505050565b60008262000cd4576001905062000da7565b8162000ce4576000905062000da7565b816001811462000cfd576002811462000d085762000d3e565b600191505062000da7565b60ff84111562000d1d5762000d1c62000c2b565b5b8360020a91508482111562000d375762000d3662000c2b565b5b5062000da7565b5060208310610133831016604e8410600b841016171562000d785782820a90508381111562000d725762000d7162000c2b565b5b62000da7565b62000d87848484600162000c67565b9250905081840481111562000da15762000da062000c2b565b5b81810290505b9392505050565b6000819050919050565b600062000dc58262000dae565b915062000dd28362000dae565b925062000e017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cc2565b905092915050565b600062000e168262000dae565b915062000e238362000dae565b925082820262000e338162000dae565b9150828204841483151762000e4d5762000e4c62000c2b565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ed657607f821691505b60208210810362000eec5762000eeb62000e8e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f17565b62000f62868362000f17565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000fa562000f9f62000f998462000dae565b62000f7a565b62000dae565b9050919050565b6000819050919050565b62000fc18362000f84565b62000fd962000fd08262000fac565b84845462000f24565b825550505050565b600090565b62000ff062000fe1565b62000ffd81848462000fb6565b505050565b5b8181101562001025576200101960008262000fe6565b60018101905062001003565b5050565b601f82111562001074576200103e8162000ef2565b620010498462000f07565b8101602085101562001059578190505b62001071620010688562000f07565b83018262001002565b50505b505050565b600082821c905092915050565b6000620010996000198460080262001079565b1980831691505092915050565b6000620010b4838362001086565b9150826002028217905092915050565b620010cf8262000e54565b67ffffffffffffffff811115620010eb57620010ea62000e5f565b5b620010f7825462000ebd565b6200110482828562001029565b600060209050601f8311600181146200113c576000841562001127578287015190505b620011338582620010a6565b865550620011a3565b601f1984166200114c8662000ef2565b60005b8281101562001176578489015182556001820191506020850194506020810190506200114f565b8683101562001196578489015162001192601f89168262001086565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011dd82620011b0565b9050919050565b620011ef81620011d0565b8114620011fb57600080fd5b50565b6000815190506200120f81620011e4565b92915050565b6000602082840312156200122e576200122d620011ab565b5b60006200123e84828501620011fe565b91505092915050565b6200125281620011d0565b82525050565b60006040820190506200126f600083018562001247565b6200127e602083018462001247565b9392505050565b620012908162000dae565b82525050565b6000602082019050620012ad600083018462001285565b92915050565b608051614c28620012cf6000396000610c2b0152614c286000f3fe6080604052600436106102b25760003560e01c8063715018a611610175578063b40f9469116100dc578063d12a768811610095578063ea4b6a051161006f578063ea4b6a0514610ad1578063f2fde38b14610afc578063f853e25e14610b25578063f8f3c5a914610b4e576102b9565b8063d12a768814610a40578063dd62ed3e14610a6b578063ea2f0b3714610aa8576102b9565b8063b40f946914610922578063b7a9a0af1461095f578063b7cd779414610988578063be9e18a4146109b1578063c49b9a80146109da578063cb4ca63114610a03576102b9565b806395d89b411161012e57806395d89b41146107fe578063a27f656d14610829578063a2cefe6d14610852578063a457c2d71461087d578063a9059cbb146108ba578063abdadf62146108f7576102b9565b8063715018a614610716578063715479841461072d5780637d3ddc9214610756578063857493bf1461077f5780638da5cb5b146107aa5780639429b9fe146107d5576102b9565b80633979e9ca1161021957806349bd5a5e116101d257806349bd5a5e146106085780634a74bb02146106335780635367230b1461065e578063547a7b851461068757806370035ba5146106b057806370a08231146106d9576102b9565b80633979e9ca146104f657806339e6cd66146105335780633ab8b8961461055e5780633eaaf86b14610589578063437823ec146105b457806349b6e95c146105dd576102b9565b806318160ddd1161026b57806318160ddd146103d057806323b872dd146103fb578063313ce5671461043857806332424aa314610463578063356f53791461048e57806339509351146104b9576102b9565b806306fdde03146102be578063095ea7b3146102e95780630a6a754814610326578063124035a81461035157806313e3c9a11461037c5780631694505e146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b79565b6040516102e0919061368f565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b919061374f565b610c0b565b60405161031d91906137aa565b60405180910390f35b34801561033257600080fd5b5061033b610c29565b60405161034891906137d4565b60405180910390f35b34801561035d57600080fd5b50610366610c4d565b60405161037391906137fe565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613819565b610c53565b005b3480156103b157600080fd5b506103ba610d96565b6040516103c791906138cb565b60405180910390f35b3480156103dc57600080fd5b506103e5610dbc565b6040516103f291906137fe565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d91906138e6565b610dc6565b60405161042f91906137aa565b60405180910390f35b34801561044457600080fd5b5061044d610eaa565b60405161045a91906137fe565b60405180910390f35b34801561046f57600080fd5b50610478610eb4565b60405161048591906137fe565b60405180910390f35b34801561049a57600080fd5b506104a3610eba565b6040516104b091906137fe565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db919061374f565b610ec0565b6040516104ed91906137aa565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613939565b610f6c565b60405161052a91906137aa565b60405180910390f35b34801561053f57600080fd5b50610548610fc2565b6040516105559190613987565b60405180910390f35b34801561056a57600080fd5b50610573610fe8565b6040516105809190613987565b60405180910390f35b34801561059557600080fd5b5061059e61100e565b6040516105ab91906137fe565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613939565b611014565b005b3480156105e957600080fd5b506105f26110eb565b6040516105ff91906137fe565b60405180910390f35b34801561061457600080fd5b5061061d6110f1565b60405161062a91906137d4565b60405180910390f35b34801561063f57600080fd5b50610648611117565b60405161065591906137aa565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190613819565b611128565b005b34801561069357600080fd5b506106ae60048036038101906106a99190613a5d565b61126b565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613939565b611409565b005b3480156106e557600080fd5b5061070060048036038101906106fb9190613939565b6114e0565b60405161070d91906137fe565b60405180910390f35b34801561072257600080fd5b5061072b611529565b005b34801561073957600080fd5b50610754600480360381019061074f9190613939565b611663565b005b34801561076257600080fd5b5061077d60048036038101906107789190613b0a565b61173a565b005b34801561078b57600080fd5b5061079461184a565b6040516107a191906137fe565b60405180910390f35b3480156107b657600080fd5b506107bf611850565b6040516107cc91906137d4565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613b4a565b611879565b005b34801561080a57600080fd5b50610813611951565b604051610820919061368f565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613ba3565b6119e3565b005b34801561085e57600080fd5b50610867611b12565b60405161087491906137fe565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f919061374f565b611b18565b6040516108b191906137aa565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc919061374f565b611c0c565b6040516108ee91906137aa565b60405180910390f35b34801561090357600080fd5b5061090c611c2a565b60405161091991906137fe565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190613939565b611c30565b60405161095691906137aa565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190613939565b611c86565b005b34801561099457600080fd5b506109af60048036038101906109aa9190613939565b611ded565b005b3480156109bd57600080fd5b506109d860048036038101906109d39190613b4a565b611ec4565b005b3480156109e657600080fd5b50610a0160048036038101906109fc9190613bd0565b612014565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613939565b6120e3565b604051610a3791906137aa565b60405180910390f35b348015610a4c57600080fd5b50610a55612139565b604051610a6291906137fe565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190613bfd565b61213f565b604051610a9f91906137fe565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190613939565b6121c6565b005b348015610add57600080fd5b50610ae661229d565b604051610af391906137fe565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e9190613939565b6122a3565b005b348015610b3157600080fd5b50610b4c6004803603810190610b479190613b4a565b61244b565b005b348015610b5a57600080fd5b50610b6361259b565b604051610b7091906137fe565b60405180910390f35b606060098054610b8890613c6c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb490613c6c565b8015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b5050505050905090565b6000610c1f610c186125a1565b84846125a9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60175481565b610c5b6125a1565b73ffffffffffffffffffffffffffffffffffffffff16610c79611850565b73ffffffffffffffffffffffffffffffffffffffff1614610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613ce9565b60405180910390fd5b600f818385610cde9190613d38565b610ce89190613d38565b1115610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2090613db8565b60405180910390fd5b8260108190555081601181905550806012819055507f6b7559a32953872c1ea69c07b9c25b70cc8ac27d03a34d0104f1922feeb21d6e601254601154601054610d729190613d38565b610d7c9190613d38565b604051610d8991906137fe565b60405180910390a1505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610dd3848484612772565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e1e6125a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613e4a565b60405180910390fd5b60019150509392505050565b6000600754905090565b60075481565b600d5481565b6000610f62610ecd6125a1565b848460026000610edb6125a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f5d9190613d38565b6125a9565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b61101c6125a1565b73ffffffffffffffffffffffffffffffffffffffff1661103a611850565b73ffffffffffffffffffffffffffffffffffffffff1614611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790613ce9565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f5481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6111306125a1565b73ffffffffffffffffffffffffffffffffffffffff1661114e611850565b73ffffffffffffffffffffffffffffffffffffffff16146111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90613ce9565b60405180910390fd5b600f8183856111b39190613d38565b6111bd9190613d38565b11156111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590613db8565b60405180910390fd5b82600d8190555081600e8190555080600f819055507f0360ea714a628fae03fc01846e588b4b053707ea9418c53df5cb0c44cfa23f06600f54600e54600d546112479190613d38565b6112519190613d38565b60405161125e91906137fe565b60405180910390a1505050565b60003390506101f585859050106112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90613edc565b60405180910390fd5b8282905085859050146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613f6e565b60405180910390fd5b6000805b868690508110156113485784848281811061132157611320613f8e565b5b90506020020135826113339190613d38565b9150808061134090613fbd565b915050611303565b5080611353836114e0565b1015611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b90614051565b60405180910390fd5b60005b86869050811015611400576113ed838888848181106113b9576113b8613f8e565b5b90506020020160208101906113ce9190613939565b8787858181106113e1576113e0613f8e565b5b90506020020135612772565b80806113f890613fbd565b915050611397565b50505050505050565b6114116125a1565b73ffffffffffffffffffffffffffffffffffffffff1661142f611850565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613ce9565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115316125a1565b73ffffffffffffffffffffffffffffffffffffffff1661154f611850565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613ce9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61166b6125a1565b73ffffffffffffffffffffffffffffffffffffffff16611689611850565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613ce9565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6117426125a1565b73ffffffffffffffffffffffffffffffffffffffff16611760611850565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90613ce9565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f5ac3ff4c6f209a7d21e3c3d2a108256401d41564975256e17867e3202c33b769828260405161183e929190614071565b60405180910390a15050565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118816125a1565b73ffffffffffffffffffffffffffffffffffffffff1661189f611850565b73ffffffffffffffffffffffffffffffffffffffff16146118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90613ce9565b60405180910390fd5b600754600a61190491906141cd565b8161190f9190614218565b6016819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c0060165460405161194691906137fe565b60405180910390a150565b6060600a805461196090613c6c565b80601f016020809104026020016040519081016040528092919081815260200182805461198c90613c6c565b80156119d95780601f106119ae576101008083540402835291602001916119d9565b820191906000526020600020905b8154815290600101906020018083116119bc57829003601f168201915b5050505050905090565b6119eb6125a1565b73ffffffffffffffffffffffffffffffffffffffff16611a09611850565b73ffffffffffffffffffffffffffffffffffffffff1614611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690613ce9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906142a6565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60008060026000611b276125a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90614338565b60405180910390fd5b611c01611bef6125a1565b858584611bfc9190614358565b6125a9565b600191505092915050565b6000611c20611c196125a1565b8484612772565b6001905092915050565b60115481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611c8e6125a1565b73ffffffffffffffffffffffffffffffffffffffff16611cac611850565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990613ce9565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906143fe565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611df56125a1565b73ffffffffffffffffffffffffffffffffffffffff16611e13611850565b73ffffffffffffffffffffffffffffffffffffffff1614611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090613ce9565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ecc6125a1565b73ffffffffffffffffffffffffffffffffffffffff16611eea611850565b73ffffffffffffffffffffffffffffffffffffffff1614611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613ce9565b60405180910390fd5b600754600a611f4f91906141cd565b620f4240611f5d9190614218565b600754600a611f6c91906141cd565b82611f779190614218565b1015611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614490565b60405180910390fd5b600754600a611fc791906141cd565b81611fd29190614218565b6017819055507f31ec735a6eb0e842df834b09d4b2b0e32f32379aaedcbcb33a8c56e4b01d3baa60175460405161200991906137fe565b60405180910390a150565b61201c6125a1565b73ffffffffffffffffffffffffffffffffffffffff1661203a611850565b73ffffffffffffffffffffffffffffffffffffffff1614612090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208790613ce9565b60405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120d891906137aa565b60405180910390a150565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121ce6125a1565b73ffffffffffffffffffffffffffffffffffffffff166121ec611850565b73ffffffffffffffffffffffffffffffffffffffff1614612242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223990613ce9565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60105481565b6122ab6125a1565b73ffffffffffffffffffffffffffffffffffffffff166122c9611850565b73ffffffffffffffffffffffffffffffffffffffff161461231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690613ce9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590614522565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124536125a1565b73ffffffffffffffffffffffffffffffffffffffff16612471611850565b73ffffffffffffffffffffffffffffffffffffffff16146124c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124be90613ce9565b60405180910390fd5b600754600a6124d691906141cd565b620f42406124e49190614218565b600754600a6124f391906141cd565b826124fe9190614218565b101561253f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253690614490565b60405180910390fd5b600754600a61254e91906141cd565b816125599190614218565b6018819055507f2f0230c168217a20bed23aafa989b365ae4f826eaaa01b933669653715fc906760185460405161259091906137fe565b60405180910390a150565b60185481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260f906145b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267e90614646565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161276591906137fe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d8906146d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128479061476a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c9906147d6565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561295f575061292f611850565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156129bd5760175481612971846114e0565b61297b9190613d38565b11156129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b390614842565b60405180910390fd5b5b6129c5611850565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ae55760185481111580612a515750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612aa55750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb906148ae565b60405180910390fd5b5b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b885750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b965760009050612c5d565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c2457601354601254601154601054612bfe9190613d38565b612c089190613d38565b83612c139190614218565b612c1d91906148fd565b9050612c5c565b601354600f54600e54600d54612c3a9190613d38565b612c449190613d38565b83612c4f9190614218565b612c5991906148fd565b90505b5b6000612c68306114e0565b905060006016548210159050601560149054906101000a900460ff16158015612cde5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612cf4575060158054906101000a900460ff165b8015612d2b5750601654612d29601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114e0565b115b15612e1b578015612e1a576016549150600080601254601154601054612d519190613d38565b612d5b9190613d38565b1115612da657601254601054601154612d749190613d38565b612d7e9190613d38565b601254601154612d8e9190613d38565b84612d999190614218565b612da391906148fd565b90505b6000806010541115612dc5578184612dbe9190614358565b9050612de2565b6000601254601154612dd79190613d38565b1115612de1578391505b5b6000601254601154612df49190613d38565b1115612e0457612e0382613042565b5b6000811115612e1757612e1681613158565b5b50505b5b60008385612e299190614358565b905083600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7a9190613d38565b9250508190555084600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecc9190614358565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5e9190613d38565b925050819055506000841115612fd4573073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612fcb91906137fe565b60405180910390a35b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161303191906137fe565b60405180910390a350505050505050565b6001601560146101000a81548160ff021916908315150217905550600060125460115461306f9190613d38565b9050600047905061307f8361328c565b6000814761308d9190614358565b9050600083601154836130a09190614218565b6130aa91906148fd565b9050600084601254846130bd9190614218565b6130c791906148fd565b905060008211156130ff576130fe600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836134cf565b5b600081111561313557613134600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826134cf565b5b50505050506000601560146101000a81548160ff02191690831515021790555050565b6001601560146101000a81548160ff021916908315150217905550600060028261318291906148fd565b9050600081836131929190614358565b905060004790506131a28361328c565b600081476131b09190614358565b90506131bc838261351a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516131ef9392919061492e565b60405180910390a1600047111561326a57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613268573d6000803e3d6000fd5b505b505050506000601560146101000a81548160ff02191690831515021790555050565b6000600267ffffffffffffffff8111156132a9576132a8614965565b5b6040519080825280602002602001820160405280156132d75781602001602082028036833780820191505090505b50905030816000815181106132ef576132ee613f8e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ba91906149a9565b816001815181106133ce576133cd613f8e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343530601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a9565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613499959493929190614acf565b600060405180830381600087803b1580156134b357600080fd5b505af11580156134c7573d6000803e3d6000fd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613515573d6000803e3d6000fd5b505050565b61354730601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a9565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613593611850565b426040518863ffffffff1660e01b81526004016135b596959493929190614b29565b60606040518083038185885af11580156135d3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135f89190614b9f565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561363957808201518184015260208101905061361e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613661826135ff565b61366b818561360a565b935061367b81856020860161361b565b61368481613645565b840191505092915050565b600060208201905081810360008301526136a98184613656565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136e6826136bb565b9050919050565b6136f6816136db565b811461370157600080fd5b50565b600081359050613713816136ed565b92915050565b6000819050919050565b61372c81613719565b811461373757600080fd5b50565b60008135905061374981613723565b92915050565b60008060408385031215613766576137656136b1565b5b600061377485828601613704565b92505060206137858582860161373a565b9150509250929050565b60008115159050919050565b6137a48161378f565b82525050565b60006020820190506137bf600083018461379b565b92915050565b6137ce816136db565b82525050565b60006020820190506137e960008301846137c5565b92915050565b6137f881613719565b82525050565b600060208201905061381360008301846137ef565b92915050565b600080600060608486031215613832576138316136b1565b5b60006138408682870161373a565b93505060206138518682870161373a565b92505060406138628682870161373a565b9150509250925092565b6000819050919050565b600061389161388c613887846136bb565b61386c565b6136bb565b9050919050565b60006138a382613876565b9050919050565b60006138b582613898565b9050919050565b6138c5816138aa565b82525050565b60006020820190506138e060008301846138bc565b92915050565b6000806000606084860312156138ff576138fe6136b1565b5b600061390d86828701613704565b935050602061391e86828701613704565b925050604061392f8682870161373a565b9150509250925092565b60006020828403121561394f5761394e6136b1565b5b600061395d84828501613704565b91505092915050565b6000613971826136bb565b9050919050565b61398181613966565b82525050565b600060208201905061399c6000830184613978565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126139c7576139c66139a2565b5b8235905067ffffffffffffffff8111156139e4576139e36139a7565b5b602083019150836020820283011115613a00576139ff6139ac565b5b9250929050565b60008083601f840112613a1d57613a1c6139a2565b5b8235905067ffffffffffffffff811115613a3a57613a396139a7565b5b602083019150836020820283011115613a5657613a556139ac565b5b9250929050565b60008060008060408587031215613a7757613a766136b1565b5b600085013567ffffffffffffffff811115613a9557613a946136b6565b5b613aa1878288016139b1565b9450945050602085013567ffffffffffffffff811115613ac457613ac36136b6565b5b613ad087828801613a07565b925092505092959194509250565b613ae78161378f565b8114613af257600080fd5b50565b600081359050613b0481613ade565b92915050565b60008060408385031215613b2157613b206136b1565b5b6000613b2f85828601613704565b9250506020613b4085828601613af5565b9150509250929050565b600060208284031215613b6057613b5f6136b1565b5b6000613b6e8482850161373a565b91505092915050565b613b8081613966565b8114613b8b57600080fd5b50565b600081359050613b9d81613b77565b92915050565b600060208284031215613bb957613bb86136b1565b5b6000613bc784828501613b8e565b91505092915050565b600060208284031215613be657613be56136b1565b5b6000613bf484828501613af5565b91505092915050565b60008060408385031215613c1457613c136136b1565b5b6000613c2285828601613704565b9250506020613c3385828601613704565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c8457607f821691505b602082108103613c9757613c96613c3d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cd360208361360a565b9150613cde82613c9d565b602082019050919050565b60006020820190508181036000830152613d0281613cc6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d4382613719565b9150613d4e83613719565b9250828201905080821115613d6657613d65613d09565b5b92915050565b7f796f752063616e277420736574206d6f7265207468616e203135250000000000600082015250565b6000613da2601b8361360a565b9150613dad82613d6c565b602082019050919050565b60006020820190508181036000830152613dd181613d95565b9050919050565b7f4942455032303a207472616e7366657220616d6f756e7420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b6000613e3460298361360a565b9150613e3f82613dd8565b604082019050919050565b60006020820190508181036000830152613e6381613e27565b9050919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b6000613ec6602d8361360a565b9150613ed182613e6a565b604082019050919050565b60006020820190508181036000830152613ef581613eb9565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b6000613f5860288361360a565b9150613f6382613efc565b604082019050919050565b60006020820190508181036000830152613f8781613f4b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613fc882613719565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ffa57613ff9613d09565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b600061403b601b8361360a565b915061404682614005565b602082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b600060408201905061408660008301856137c5565b614093602083018461379b565b9392505050565b60008160011c9050919050565b6000808291508390505b60018511156140f1578086048111156140cd576140cc613d09565b5b60018516156140dc5780820291505b80810290506140ea8561409a565b94506140b1565b94509492505050565b60008261410a57600190506141c6565b8161411857600090506141c6565b816001811461412e576002811461413857614167565b60019150506141c6565b60ff84111561414a57614149613d09565b5b8360020a91508482111561416157614160613d09565b5b506141c6565b5060208310610133831016604e8410600b841016171561419c5782820a90508381111561419757614196613d09565b5b6141c6565b6141a984848460016140a7565b925090508184048111156141c0576141bf613d09565b5b81810290505b9392505050565b60006141d882613719565b91506141e383613719565b92506142107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846140fa565b905092915050565b600061422382613719565b915061422e83613719565b925082820261423c81613719565b9150828204841483151761425357614252613d09565b5b5092915050565b7f596f752063616e277420736574207a65726f2061646472657373000000000000600082015250565b6000614290601a8361360a565b915061429b8261425a565b602082019050919050565b600060208201905081810360008301526142bf81614283565b9050919050565b7f4942455032303a2064656372656173656420616c6c6f77616e63652062656c6f60008201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b600061432260268361360a565b915061432d826142c6565b604082019050919050565b6000602082019050818103600083015261435181614315565b9050919050565b600061436382613719565b915061436e83613719565b925082820390508181111561438657614385613d09565b5b92915050565b7f596f752063616e277420706c61792077697468204c697175696469747920706160008201527f6972206164647265737300000000000000000000000000000000000000000000602082015250565b60006143e8602a8361360a565b91506143f38261438c565b604082019050919050565b60006020820190508181036000830152614417816143db565b9050919050565b7f416d6f756e742073686f756c642062652067726561746572206f72206571756160008201527f6c20746f2031204d696c6c696e20546f6b656e73000000000000000000000000602082015250565b600061447a60348361360a565b91506144858261441e565b604082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061450c60268361360a565b9150614517826144b0565b604082019050919050565b6000602082019050818103600083015261453b816144ff565b9050919050565b7f4942455032303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061459e60258361360a565b91506145a982614542565b604082019050919050565b600060208201905081810360008301526145cd81614591565b9050919050565b7f4942455032303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061463060238361360a565b915061463b826145d4565b604082019050919050565b6000602082019050818103600083015261465f81614623565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146c260268361360a565b91506146cd82614666565b604082019050919050565b600060208201905081810360008301526146f1816146b5565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061475460248361360a565b915061475f826146f8565b604082019050919050565b6000602082019050818103600083015261478381614747565b9050919050565b7f596f7520646f6e2774206861766520656e6f7567682062616c616e6365000000600082015250565b60006147c0601d8361360a565b91506147cb8261478a565b602082019050919050565b600060208201905081810360008301526147ef816147b3565b9050919050565b7f57616c6c657420486f6c64696e67206c696d6974206578636565646564000000600082015250565b600061482c601d8361360a565b9150614837826147f6565b602082019050919050565b6000602082019050818103600083015261485b8161481f565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061489860118361360a565b91506148a382614862565b602082019050919050565b600060208201905081810360008301526148c78161488b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061490882613719565b915061491383613719565b925082614923576149226148ce565b5b828204905092915050565b600060608201905061494360008301866137ef565b61495060208301856137ef565b61495d60408301846137ef565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506149a3816136ed565b92915050565b6000602082840312156149bf576149be6136b1565b5b60006149cd84828501614994565b91505092915050565b6000819050919050565b60006149fb6149f66149f1846149d6565b61386c565b613719565b9050919050565b614a0b816149e0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a46816136db565b82525050565b6000614a588383614a3d565b60208301905092915050565b6000602082019050919050565b6000614a7c82614a11565b614a868185614a1c565b9350614a9183614a2d565b8060005b83811015614ac2578151614aa98882614a4c565b9750614ab483614a64565b925050600181019050614a95565b5085935050505092915050565b600060a082019050614ae460008301886137ef565b614af16020830187614a02565b8181036040830152614b038186614a71565b9050614b1260608301856137c5565b614b1f60808301846137ef565b9695505050505050565b600060c082019050614b3e60008301896137c5565b614b4b60208301886137ef565b614b586040830187614a02565b614b656060830186614a02565b614b7260808301856137c5565b614b7f60a08301846137ef565b979650505050505050565b600081519050614b9981613723565b92915050565b600080600060608486031215614bb857614bb76136b1565b5b6000614bc686828701614b8a565b9350506020614bd786828701614b8a565b9250506040614be886828701614b8a565b915050925092509256fea264697066735822122003e9e371562de5ff820adce36c2701b716e36dc57243d267f2a4bea7d8d21c7464736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063715018a611610175578063b40f9469116100dc578063d12a768811610095578063ea4b6a051161006f578063ea4b6a0514610ad1578063f2fde38b14610afc578063f853e25e14610b25578063f8f3c5a914610b4e576102b9565b8063d12a768814610a40578063dd62ed3e14610a6b578063ea2f0b3714610aa8576102b9565b8063b40f946914610922578063b7a9a0af1461095f578063b7cd779414610988578063be9e18a4146109b1578063c49b9a80146109da578063cb4ca63114610a03576102b9565b806395d89b411161012e57806395d89b41146107fe578063a27f656d14610829578063a2cefe6d14610852578063a457c2d71461087d578063a9059cbb146108ba578063abdadf62146108f7576102b9565b8063715018a614610716578063715479841461072d5780637d3ddc9214610756578063857493bf1461077f5780638da5cb5b146107aa5780639429b9fe146107d5576102b9565b80633979e9ca1161021957806349bd5a5e116101d257806349bd5a5e146106085780634a74bb02146106335780635367230b1461065e578063547a7b851461068757806370035ba5146106b057806370a08231146106d9576102b9565b80633979e9ca146104f657806339e6cd66146105335780633ab8b8961461055e5780633eaaf86b14610589578063437823ec146105b457806349b6e95c146105dd576102b9565b806318160ddd1161026b57806318160ddd146103d057806323b872dd146103fb578063313ce5671461043857806332424aa314610463578063356f53791461048e57806339509351146104b9576102b9565b806306fdde03146102be578063095ea7b3146102e95780630a6a754814610326578063124035a81461035157806313e3c9a11461037c5780631694505e146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b79565b6040516102e0919061368f565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b919061374f565b610c0b565b60405161031d91906137aa565b60405180910390f35b34801561033257600080fd5b5061033b610c29565b60405161034891906137d4565b60405180910390f35b34801561035d57600080fd5b50610366610c4d565b60405161037391906137fe565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613819565b610c53565b005b3480156103b157600080fd5b506103ba610d96565b6040516103c791906138cb565b60405180910390f35b3480156103dc57600080fd5b506103e5610dbc565b6040516103f291906137fe565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d91906138e6565b610dc6565b60405161042f91906137aa565b60405180910390f35b34801561044457600080fd5b5061044d610eaa565b60405161045a91906137fe565b60405180910390f35b34801561046f57600080fd5b50610478610eb4565b60405161048591906137fe565b60405180910390f35b34801561049a57600080fd5b506104a3610eba565b6040516104b091906137fe565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db919061374f565b610ec0565b6040516104ed91906137aa565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613939565b610f6c565b60405161052a91906137aa565b60405180910390f35b34801561053f57600080fd5b50610548610fc2565b6040516105559190613987565b60405180910390f35b34801561056a57600080fd5b50610573610fe8565b6040516105809190613987565b60405180910390f35b34801561059557600080fd5b5061059e61100e565b6040516105ab91906137fe565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613939565b611014565b005b3480156105e957600080fd5b506105f26110eb565b6040516105ff91906137fe565b60405180910390f35b34801561061457600080fd5b5061061d6110f1565b60405161062a91906137d4565b60405180910390f35b34801561063f57600080fd5b50610648611117565b60405161065591906137aa565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190613819565b611128565b005b34801561069357600080fd5b506106ae60048036038101906106a99190613a5d565b61126b565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613939565b611409565b005b3480156106e557600080fd5b5061070060048036038101906106fb9190613939565b6114e0565b60405161070d91906137fe565b60405180910390f35b34801561072257600080fd5b5061072b611529565b005b34801561073957600080fd5b50610754600480360381019061074f9190613939565b611663565b005b34801561076257600080fd5b5061077d60048036038101906107789190613b0a565b61173a565b005b34801561078b57600080fd5b5061079461184a565b6040516107a191906137fe565b60405180910390f35b3480156107b657600080fd5b506107bf611850565b6040516107cc91906137d4565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613b4a565b611879565b005b34801561080a57600080fd5b50610813611951565b604051610820919061368f565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613ba3565b6119e3565b005b34801561085e57600080fd5b50610867611b12565b60405161087491906137fe565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f919061374f565b611b18565b6040516108b191906137aa565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc919061374f565b611c0c565b6040516108ee91906137aa565b60405180910390f35b34801561090357600080fd5b5061090c611c2a565b60405161091991906137fe565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190613939565b611c30565b60405161095691906137aa565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190613939565b611c86565b005b34801561099457600080fd5b506109af60048036038101906109aa9190613939565b611ded565b005b3480156109bd57600080fd5b506109d860048036038101906109d39190613b4a565b611ec4565b005b3480156109e657600080fd5b50610a0160048036038101906109fc9190613bd0565b612014565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613939565b6120e3565b604051610a3791906137aa565b60405180910390f35b348015610a4c57600080fd5b50610a55612139565b604051610a6291906137fe565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190613bfd565b61213f565b604051610a9f91906137fe565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190613939565b6121c6565b005b348015610add57600080fd5b50610ae661229d565b604051610af391906137fe565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e9190613939565b6122a3565b005b348015610b3157600080fd5b50610b4c6004803603810190610b479190613b4a565b61244b565b005b348015610b5a57600080fd5b50610b6361259b565b604051610b7091906137fe565b60405180910390f35b606060098054610b8890613c6c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb490613c6c565b8015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b5050505050905090565b6000610c1f610c186125a1565b84846125a9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60175481565b610c5b6125a1565b73ffffffffffffffffffffffffffffffffffffffff16610c79611850565b73ffffffffffffffffffffffffffffffffffffffff1614610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613ce9565b60405180910390fd5b600f818385610cde9190613d38565b610ce89190613d38565b1115610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2090613db8565b60405180910390fd5b8260108190555081601181905550806012819055507f6b7559a32953872c1ea69c07b9c25b70cc8ac27d03a34d0104f1922feeb21d6e601254601154601054610d729190613d38565b610d7c9190613d38565b604051610d8991906137fe565b60405180910390a1505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610dd3848484612772565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e1e6125a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613e4a565b60405180910390fd5b60019150509392505050565b6000600754905090565b60075481565b600d5481565b6000610f62610ecd6125a1565b848460026000610edb6125a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f5d9190613d38565b6125a9565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b61101c6125a1565b73ffffffffffffffffffffffffffffffffffffffff1661103a611850565b73ffffffffffffffffffffffffffffffffffffffff1614611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790613ce9565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f5481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6111306125a1565b73ffffffffffffffffffffffffffffffffffffffff1661114e611850565b73ffffffffffffffffffffffffffffffffffffffff16146111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90613ce9565b60405180910390fd5b600f8183856111b39190613d38565b6111bd9190613d38565b11156111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590613db8565b60405180910390fd5b82600d8190555081600e8190555080600f819055507f0360ea714a628fae03fc01846e588b4b053707ea9418c53df5cb0c44cfa23f06600f54600e54600d546112479190613d38565b6112519190613d38565b60405161125e91906137fe565b60405180910390a1505050565b60003390506101f585859050106112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90613edc565b60405180910390fd5b8282905085859050146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613f6e565b60405180910390fd5b6000805b868690508110156113485784848281811061132157611320613f8e565b5b90506020020135826113339190613d38565b9150808061134090613fbd565b915050611303565b5080611353836114e0565b1015611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b90614051565b60405180910390fd5b60005b86869050811015611400576113ed838888848181106113b9576113b8613f8e565b5b90506020020160208101906113ce9190613939565b8787858181106113e1576113e0613f8e565b5b90506020020135612772565b80806113f890613fbd565b915050611397565b50505050505050565b6114116125a1565b73ffffffffffffffffffffffffffffffffffffffff1661142f611850565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613ce9565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115316125a1565b73ffffffffffffffffffffffffffffffffffffffff1661154f611850565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613ce9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61166b6125a1565b73ffffffffffffffffffffffffffffffffffffffff16611689611850565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613ce9565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6117426125a1565b73ffffffffffffffffffffffffffffffffffffffff16611760611850565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90613ce9565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f5ac3ff4c6f209a7d21e3c3d2a108256401d41564975256e17867e3202c33b769828260405161183e929190614071565b60405180910390a15050565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118816125a1565b73ffffffffffffffffffffffffffffffffffffffff1661189f611850565b73ffffffffffffffffffffffffffffffffffffffff16146118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90613ce9565b60405180910390fd5b600754600a61190491906141cd565b8161190f9190614218565b6016819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c0060165460405161194691906137fe565b60405180910390a150565b6060600a805461196090613c6c565b80601f016020809104026020016040519081016040528092919081815260200182805461198c90613c6c565b80156119d95780601f106119ae576101008083540402835291602001916119d9565b820191906000526020600020905b8154815290600101906020018083116119bc57829003601f168201915b5050505050905090565b6119eb6125a1565b73ffffffffffffffffffffffffffffffffffffffff16611a09611850565b73ffffffffffffffffffffffffffffffffffffffff1614611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690613ce9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906142a6565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60008060026000611b276125a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90614338565b60405180910390fd5b611c01611bef6125a1565b858584611bfc9190614358565b6125a9565b600191505092915050565b6000611c20611c196125a1565b8484612772565b6001905092915050565b60115481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611c8e6125a1565b73ffffffffffffffffffffffffffffffffffffffff16611cac611850565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990613ce9565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906143fe565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611df56125a1565b73ffffffffffffffffffffffffffffffffffffffff16611e13611850565b73ffffffffffffffffffffffffffffffffffffffff1614611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090613ce9565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ecc6125a1565b73ffffffffffffffffffffffffffffffffffffffff16611eea611850565b73ffffffffffffffffffffffffffffffffffffffff1614611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613ce9565b60405180910390fd5b600754600a611f4f91906141cd565b620f4240611f5d9190614218565b600754600a611f6c91906141cd565b82611f779190614218565b1015611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614490565b60405180910390fd5b600754600a611fc791906141cd565b81611fd29190614218565b6017819055507f31ec735a6eb0e842df834b09d4b2b0e32f32379aaedcbcb33a8c56e4b01d3baa60175460405161200991906137fe565b60405180910390a150565b61201c6125a1565b73ffffffffffffffffffffffffffffffffffffffff1661203a611850565b73ffffffffffffffffffffffffffffffffffffffff1614612090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208790613ce9565b60405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120d891906137aa565b60405180910390a150565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121ce6125a1565b73ffffffffffffffffffffffffffffffffffffffff166121ec611850565b73ffffffffffffffffffffffffffffffffffffffff1614612242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223990613ce9565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60105481565b6122ab6125a1565b73ffffffffffffffffffffffffffffffffffffffff166122c9611850565b73ffffffffffffffffffffffffffffffffffffffff161461231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690613ce9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590614522565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124536125a1565b73ffffffffffffffffffffffffffffffffffffffff16612471611850565b73ffffffffffffffffffffffffffffffffffffffff16146124c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124be90613ce9565b60405180910390fd5b600754600a6124d691906141cd565b620f42406124e49190614218565b600754600a6124f391906141cd565b826124fe9190614218565b101561253f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253690614490565b60405180910390fd5b600754600a61254e91906141cd565b816125599190614218565b6018819055507f2f0230c168217a20bed23aafa989b365ae4f826eaaa01b933669653715fc906760185460405161259091906137fe565b60405180910390a150565b60185481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260f906145b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267e90614646565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161276591906137fe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d8906146d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128479061476a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c9906147d6565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561295f575061292f611850565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156129bd5760175481612971846114e0565b61297b9190613d38565b11156129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b390614842565b60405180910390fd5b5b6129c5611850565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ae55760185481111580612a515750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612aa55750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb906148ae565b60405180910390fd5b5b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b885750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b965760009050612c5d565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c2457601354601254601154601054612bfe9190613d38565b612c089190613d38565b83612c139190614218565b612c1d91906148fd565b9050612c5c565b601354600f54600e54600d54612c3a9190613d38565b612c449190613d38565b83612c4f9190614218565b612c5991906148fd565b90505b5b6000612c68306114e0565b905060006016548210159050601560149054906101000a900460ff16158015612cde5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612cf4575060158054906101000a900460ff165b8015612d2b5750601654612d29601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114e0565b115b15612e1b578015612e1a576016549150600080601254601154601054612d519190613d38565b612d5b9190613d38565b1115612da657601254601054601154612d749190613d38565b612d7e9190613d38565b601254601154612d8e9190613d38565b84612d999190614218565b612da391906148fd565b90505b6000806010541115612dc5578184612dbe9190614358565b9050612de2565b6000601254601154612dd79190613d38565b1115612de1578391505b5b6000601254601154612df49190613d38565b1115612e0457612e0382613042565b5b6000811115612e1757612e1681613158565b5b50505b5b60008385612e299190614358565b905083600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7a9190613d38565b9250508190555084600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecc9190614358565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5e9190613d38565b925050819055506000841115612fd4573073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612fcb91906137fe565b60405180910390a35b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161303191906137fe565b60405180910390a350505050505050565b6001601560146101000a81548160ff021916908315150217905550600060125460115461306f9190613d38565b9050600047905061307f8361328c565b6000814761308d9190614358565b9050600083601154836130a09190614218565b6130aa91906148fd565b9050600084601254846130bd9190614218565b6130c791906148fd565b905060008211156130ff576130fe600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836134cf565b5b600081111561313557613134600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826134cf565b5b50505050506000601560146101000a81548160ff02191690831515021790555050565b6001601560146101000a81548160ff021916908315150217905550600060028261318291906148fd565b9050600081836131929190614358565b905060004790506131a28361328c565b600081476131b09190614358565b90506131bc838261351a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516131ef9392919061492e565b60405180910390a1600047111561326a57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613268573d6000803e3d6000fd5b505b505050506000601560146101000a81548160ff02191690831515021790555050565b6000600267ffffffffffffffff8111156132a9576132a8614965565b5b6040519080825280602002602001820160405280156132d75781602001602082028036833780820191505090505b50905030816000815181106132ef576132ee613f8e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ba91906149a9565b816001815181106133ce576133cd613f8e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343530601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a9565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613499959493929190614acf565b600060405180830381600087803b1580156134b357600080fd5b505af11580156134c7573d6000803e3d6000fd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613515573d6000803e3d6000fd5b505050565b61354730601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a9565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613593611850565b426040518863ffffffff1660e01b81526004016135b596959493929190614b29565b60606040518083038185885af11580156135d3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135f89190614b9f565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561363957808201518184015260208101905061361e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613661826135ff565b61366b818561360a565b935061367b81856020860161361b565b61368481613645565b840191505092915050565b600060208201905081810360008301526136a98184613656565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136e6826136bb565b9050919050565b6136f6816136db565b811461370157600080fd5b50565b600081359050613713816136ed565b92915050565b6000819050919050565b61372c81613719565b811461373757600080fd5b50565b60008135905061374981613723565b92915050565b60008060408385031215613766576137656136b1565b5b600061377485828601613704565b92505060206137858582860161373a565b9150509250929050565b60008115159050919050565b6137a48161378f565b82525050565b60006020820190506137bf600083018461379b565b92915050565b6137ce816136db565b82525050565b60006020820190506137e960008301846137c5565b92915050565b6137f881613719565b82525050565b600060208201905061381360008301846137ef565b92915050565b600080600060608486031215613832576138316136b1565b5b60006138408682870161373a565b93505060206138518682870161373a565b92505060406138628682870161373a565b9150509250925092565b6000819050919050565b600061389161388c613887846136bb565b61386c565b6136bb565b9050919050565b60006138a382613876565b9050919050565b60006138b582613898565b9050919050565b6138c5816138aa565b82525050565b60006020820190506138e060008301846138bc565b92915050565b6000806000606084860312156138ff576138fe6136b1565b5b600061390d86828701613704565b935050602061391e86828701613704565b925050604061392f8682870161373a565b9150509250925092565b60006020828403121561394f5761394e6136b1565b5b600061395d84828501613704565b91505092915050565b6000613971826136bb565b9050919050565b61398181613966565b82525050565b600060208201905061399c6000830184613978565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126139c7576139c66139a2565b5b8235905067ffffffffffffffff8111156139e4576139e36139a7565b5b602083019150836020820283011115613a00576139ff6139ac565b5b9250929050565b60008083601f840112613a1d57613a1c6139a2565b5b8235905067ffffffffffffffff811115613a3a57613a396139a7565b5b602083019150836020820283011115613a5657613a556139ac565b5b9250929050565b60008060008060408587031215613a7757613a766136b1565b5b600085013567ffffffffffffffff811115613a9557613a946136b6565b5b613aa1878288016139b1565b9450945050602085013567ffffffffffffffff811115613ac457613ac36136b6565b5b613ad087828801613a07565b925092505092959194509250565b613ae78161378f565b8114613af257600080fd5b50565b600081359050613b0481613ade565b92915050565b60008060408385031215613b2157613b206136b1565b5b6000613b2f85828601613704565b9250506020613b4085828601613af5565b9150509250929050565b600060208284031215613b6057613b5f6136b1565b5b6000613b6e8482850161373a565b91505092915050565b613b8081613966565b8114613b8b57600080fd5b50565b600081359050613b9d81613b77565b92915050565b600060208284031215613bb957613bb86136b1565b5b6000613bc784828501613b8e565b91505092915050565b600060208284031215613be657613be56136b1565b5b6000613bf484828501613af5565b91505092915050565b60008060408385031215613c1457613c136136b1565b5b6000613c2285828601613704565b9250506020613c3385828601613704565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c8457607f821691505b602082108103613c9757613c96613c3d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cd360208361360a565b9150613cde82613c9d565b602082019050919050565b60006020820190508181036000830152613d0281613cc6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d4382613719565b9150613d4e83613719565b9250828201905080821115613d6657613d65613d09565b5b92915050565b7f796f752063616e277420736574206d6f7265207468616e203135250000000000600082015250565b6000613da2601b8361360a565b9150613dad82613d6c565b602082019050919050565b60006020820190508181036000830152613dd181613d95565b9050919050565b7f4942455032303a207472616e7366657220616d6f756e7420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b6000613e3460298361360a565b9150613e3f82613dd8565b604082019050919050565b60006020820190508181036000830152613e6381613e27565b9050919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b6000613ec6602d8361360a565b9150613ed182613e6a565b604082019050919050565b60006020820190508181036000830152613ef581613eb9565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b6000613f5860288361360a565b9150613f6382613efc565b604082019050919050565b60006020820190508181036000830152613f8781613f4b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613fc882613719565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ffa57613ff9613d09565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b600061403b601b8361360a565b915061404682614005565b602082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b600060408201905061408660008301856137c5565b614093602083018461379b565b9392505050565b60008160011c9050919050565b6000808291508390505b60018511156140f1578086048111156140cd576140cc613d09565b5b60018516156140dc5780820291505b80810290506140ea8561409a565b94506140b1565b94509492505050565b60008261410a57600190506141c6565b8161411857600090506141c6565b816001811461412e576002811461413857614167565b60019150506141c6565b60ff84111561414a57614149613d09565b5b8360020a91508482111561416157614160613d09565b5b506141c6565b5060208310610133831016604e8410600b841016171561419c5782820a90508381111561419757614196613d09565b5b6141c6565b6141a984848460016140a7565b925090508184048111156141c0576141bf613d09565b5b81810290505b9392505050565b60006141d882613719565b91506141e383613719565b92506142107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846140fa565b905092915050565b600061422382613719565b915061422e83613719565b925082820261423c81613719565b9150828204841483151761425357614252613d09565b5b5092915050565b7f596f752063616e277420736574207a65726f2061646472657373000000000000600082015250565b6000614290601a8361360a565b915061429b8261425a565b602082019050919050565b600060208201905081810360008301526142bf81614283565b9050919050565b7f4942455032303a2064656372656173656420616c6c6f77616e63652062656c6f60008201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b600061432260268361360a565b915061432d826142c6565b604082019050919050565b6000602082019050818103600083015261435181614315565b9050919050565b600061436382613719565b915061436e83613719565b925082820390508181111561438657614385613d09565b5b92915050565b7f596f752063616e277420706c61792077697468204c697175696469747920706160008201527f6972206164647265737300000000000000000000000000000000000000000000602082015250565b60006143e8602a8361360a565b91506143f38261438c565b604082019050919050565b60006020820190508181036000830152614417816143db565b9050919050565b7f416d6f756e742073686f756c642062652067726561746572206f72206571756160008201527f6c20746f2031204d696c6c696e20546f6b656e73000000000000000000000000602082015250565b600061447a60348361360a565b91506144858261441e565b604082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061450c60268361360a565b9150614517826144b0565b604082019050919050565b6000602082019050818103600083015261453b816144ff565b9050919050565b7f4942455032303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061459e60258361360a565b91506145a982614542565b604082019050919050565b600060208201905081810360008301526145cd81614591565b9050919050565b7f4942455032303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061463060238361360a565b915061463b826145d4565b604082019050919050565b6000602082019050818103600083015261465f81614623565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146c260268361360a565b91506146cd82614666565b604082019050919050565b600060208201905081810360008301526146f1816146b5565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061475460248361360a565b915061475f826146f8565b604082019050919050565b6000602082019050818103600083015261478381614747565b9050919050565b7f596f7520646f6e2774206861766520656e6f7567682062616c616e6365000000600082015250565b60006147c0601d8361360a565b91506147cb8261478a565b602082019050919050565b600060208201905081810360008301526147ef816147b3565b9050919050565b7f57616c6c657420486f6c64696e67206c696d6974206578636565646564000000600082015250565b600061482c601d8361360a565b9150614837826147f6565b602082019050919050565b6000602082019050818103600083015261485b8161481f565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061489860118361360a565b91506148a382614862565b602082019050919050565b600060208201905081810360008301526148c78161488b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061490882613719565b915061491383613719565b925082614923576149226148ce565b5b828204905092915050565b600060608201905061494360008301866137ef565b61495060208301856137ef565b61495d60408301846137ef565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506149a3816136ed565b92915050565b6000602082840312156149bf576149be6136b1565b5b60006149cd84828501614994565b91505092915050565b6000819050919050565b60006149fb6149f66149f1846149d6565b61386c565b613719565b9050919050565b614a0b816149e0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a46816136db565b82525050565b6000614a588383614a3d565b60208301905092915050565b6000602082019050919050565b6000614a7c82614a11565b614a868185614a1c565b9350614a9183614a2d565b8060005b83811015614ac2578151614aa98882614a4c565b9750614ab483614a64565b925050600181019050614a95565b5085935050505092915050565b600060a082019050614ae460008301886137ef565b614af16020830187614a02565b8181036040830152614b038186614a71565b9050614b1260608301856137c5565b614b1f60808301846137ef565b9695505050505050565b600060c082019050614b3e60008301896137c5565b614b4b60208301886137ef565b614b586040830187614a02565b614b656060830186614a02565b614b7260808301856137c5565b614b7f60a08301846137ef565b979650505050505050565b600081519050614b9981613723565b92915050565b600080600060608486031215614bb857614bb76136b1565b5b6000614bc686828701614b8a565b9350506020614bd786828701614b8a565b9250506040614be886828701614b8a565b915050925092509256fea264697066735822122003e9e371562de5ff820adce36c2701b716e36dc57243d267f2a4bea7d8d21c7464736f6c63430008120033

Deployed Bytecode Sourcemap

13406:19124:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17230:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17752:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14009:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14911:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22689:578;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14661:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17515:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23949:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17420:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13832:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14342:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18567:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21443:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14112:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14227:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13868:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19325:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14432:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14709:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14783:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22111:570;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31760:767;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19893:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17625:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3765:148;;;;;;;;;;;;;:::i;:::-;;20955:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21619:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14569:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3542:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23275:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17323:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21858:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14387:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18872:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23725:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14523:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19692:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20070:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20823:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20373:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23544:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19566:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14832:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18358:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19446:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14477:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3921:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21086:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14984:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17230:85;17269:13;17302:5;17295:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17230:85;:::o;17752:210::-;17871:4;17893:39;17902:12;:10;:12::i;:::-;17916:7;17925:6;17893:8;:39::i;:::-;17950:4;17943:11;;17752:210;;;;:::o;14009:96::-;;;:::o;14911:66::-;;;;:::o;22689:578::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22931:2:::1;22914:13;22896:15;22878;:33;;;;:::i;:::-;:49;;;;:::i;:::-;:55;;22856:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;23022:15;22999:20;:38;;;;23071:15;23048:20;:38;;;;23118:13;23097:18;:34;;;;23149:110;23230:18;;23207:20;;23184;;:43;;;;:::i;:::-;:64;;;;:::i;:::-;23149:110;;;;;;:::i;:::-;;;;;;;;22689:578:::0;;;:::o;14661:41::-;;;;;;;;;;;;;:::o;17515:102::-;17570:7;17597:12;;17590:19;;17515:102;:::o;23949:422::-;24089:4;24106:36;24116:6;24124:9;24135:6;24106:9;:36::i;:::-;24153:24;24180:11;:19;24192:6;24180:19;;;;;;;;;;;;;;;:33;24200:12;:10;:12::i;:::-;24180:33;;;;;;;;;;;;;;;;24153:60;;24266:6;24246:16;:26;;24224:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;24359:4;24352:11;;;23949:422;;;;;:::o;17420:87::-;17463:7;17490:9;;17483:16;;17420:87;:::o;13832:29::-;;;;:::o;14342:38::-;;;;:::o;18567:297::-;18682:4;18704:130;18727:12;:10;:12::i;:::-;18754:7;18813:10;18776:11;:25;18788:12;:10;:12::i;:::-;18776:25;;;;;;;;;;;;;;;:34;18802:7;18776:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18704:8;:130::i;:::-;18852:4;18845:11;;18567:297;;;;:::o;21443:168::-;21542:4;21571:23;:32;21595:7;21571:32;;;;;;;;;;;;;;;;;;;;;;;;;21564:39;;21443:168;;;:::o;14112:108::-;;;;;;;;;;;;;:::o;14227:106::-;;;;;;;;;;;;;:::o;13868:55::-;;;;:::o;19325:113::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19426:4:::1;19396:18;:27;19415:7;19396:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19325:113:::0;:::o;14432:36::-;;;;:::o;14709:28::-;;;;;;;;;;;;;:::o;14783:40::-;;;;;;;;;;;;:::o;22111:570::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22352:2:::1;22335:13;22317:15;22299;:33;;;;:::i;:::-;:49;;;;:::i;:::-;:55;;22277:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;22442:15;22420:19;:37;;;;22490:15;22468:19;:37;;;;22536:13;22516:17;:33;;;;22567:106;22645:17;;22623:19;;22601;;:41;;;;:::i;:::-;:61;;;;:::i;:::-;22567:106;;;;;;:::i;:::-;;;;;;;;22111:570:::0;;;:::o;31760:767::-;31892:12;31907:10;31892:25;;31969:3;31950:9;;:16;;:22;31928:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;32098:6;;:13;;32078:9;;:16;;:33;32056:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;32192:12;32226:9;32221:97;32245:9;;:16;;32241:1;:20;32221:97;;;32297:6;;32304:1;32297:9;;;;;;;:::i;:::-;;;;;;;;32290:4;:16;;;;:::i;:::-;32283:23;;32263:3;;;;;:::i;:::-;;;;32221:97;;;;32357:4;32338:15;32348:4;32338:9;:15::i;:::-;:23;;32330:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32411:9;32406:114;32430:9;;:16;;32426:1;:20;32406:114;;;32468:40;32478:4;32484:9;;32494:1;32484:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;32498:6;;32505:1;32498:9;;;;;;;:::i;:::-;;;;;;;;32468;:40::i;:::-;32448:3;;;;;:::i;:::-;;;;32406:114;;;;31881:646;;31760:767;;;;:::o;19893:169::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20050:4:::1;20005:33;:42;20039:7;20005:42;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;19893:169:::0;:::o;17625:119::-;17691:7;17718:9;:18;17728:7;17718:18;;;;;;;;;;;;;;;;17711:25;;17625:119;;;:::o;3765:148::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3872:1:::1;3835:40;;3856:6;::::0;::::1;;;;;;;;3835:40;;;;;;;;;;;;3903:1;3886:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3765:148::o:0;20955:123::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21065:5:::1;21031:22;:31;21054:7;21031:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20955:123:::0;:::o;21619:231::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21770:6:::1;21733:23;:34;21757:9;21733:34;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;21792:50;21824:9;21835:6;21792:50;;;;;;;:::i;:::-;;;;;;;;21619:231:::0;;:::o;14569:37::-;;;;:::o;3542:87::-;3588:7;3615:6;;;;;;;;;;;3608:13;;3542:87;:::o;23275:261::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23446:9:::1;;23442:2;:13;;;;:::i;:::-;23425:14;:30;;;;:::i;:::-;23393:29;:62;;;;23471:57;23498:29;;23471:57;;;;;;:::i;:::-;;;;;;;;23275:261:::0;:::o;17323:89::-;17364:13;17397:7;17390:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17323:89;:::o;21858:245::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22008:1:::1;21978:32;;:18;:32;;::::0;21970:71:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22077:18;22052:22;;:43;;;;;;;;;;;;;;;;;;21858:245:::0;:::o;14387:38::-;;;;:::o;18872:445::-;18992:4;19014:24;19041:11;:25;19053:12;:10;:12::i;:::-;19041:25;;;;;;;;;;;;;;;:34;19067:7;19041:34;;;;;;;;;;;;;;;;19014:61;;19128:15;19108:16;:35;;19086:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;19220:67;19229:12;:10;:12::i;:::-;19243:7;19271:15;19252:16;:34;;;;:::i;:::-;19220:8;:67::i;:::-;19305:4;19298:11;;;18872:445;;;;:::o;23725:216::-;23847:4;23869:42;23879:12;:10;:12::i;:::-;23893:9;23904:6;23869:9;:42::i;:::-;23929:4;23922:11;;23725:216;;;;:::o;14523:39::-;;;;:::o;19692:193::-;19800:4;19829:33;:48;19863:13;19829:48;;;;;;;;;;;;;;;;;;;;;;;;;19822:55;;19692:193;;;:::o;20070:295::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20213:13:::1;;;;;;;;;;;20202:24;;:7;:24;;::::0;20180:116:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20352:5;20307:33;:42;20341:7;20307:42;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20070:295:::0;:::o;20823:124::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20935:4:::1;20901:22;:31;20924:7;20901:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;20823:124:::0;:::o;20373:442::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20575:9:::1;;20571:2;:13;;;;:::i;:::-;20559:9;:25;;;;:::i;:::-;20546:9;;20542:2;:13;;;;:::i;:::-;20517:22;:38;;;;:::i;:::-;:67;;20495:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;20729:9;;20725:2;:13;;;;:::i;:::-;20700:22;:38;;;;:::i;:::-;20675:22;:63;;;;20754:53;20784:22;;20754:53;;;;;;:::i;:::-;;;;;;;;20373:442:::0;:::o;23544:173::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23647:8:::1;23623:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;23671:38;23700:8;23671:38;;;;;;:::i;:::-;;;;;;;;23544:173:::0;:::o;19566:118::-;19629:4;19653:18;:23;19672:3;19653:23;;;;;;;;;;;;;;;;;;;;;;;;;19646:30;;19566:118;;;:::o;14832:72::-;;;;:::o;18358:201::-;18492:7;18524:11;:18;18536:5;18524:18;;;;;;;;;;;;;;;:27;18543:7;18524:27;;;;;;;;;;;;;;;;18517:34;;18358:201;;;;:::o;19446:112::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19545:5:::1;19515:18;:27;19534:7;19515:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19446:112:::0;:::o;14477:39::-;;;;:::o;3921:281::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4044:1:::1;4024:22;;:8;:22;;::::0;4002:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4157:8;4128:38;;4149:6;::::0;::::1;;;;;;;;4128:38;;;;;;;;;;;;4186:8;4177:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3921:281:::0;:::o;21086:349::-;3688:12;:10;:12::i;:::-;3677:23;;:7;:5;:7::i;:::-;:23;;;3669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21232:9:::1;;21228:2;:13;;;;:::i;:::-;21216:9;:25;;;;:::i;:::-;21203:9;;21199:2;:13;;;;:::i;:::-;21185:11;:27;;;;:::i;:::-;:56;;21163:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;21364:9;;21360:2;:13;;;;:::i;:::-;21346:11;:27;;;;:::i;:::-;21332:11;:41;;;;21389:38;21415:11;;21389:38;;;;;;:::i;:::-;;;;;;;;21086:349:::0;:::o;14984:55::-;;;;:::o;2966:98::-;3019:7;3046:10;3039:17;;2966:98;:::o;17970:380::-;18123:1;18106:19;;:5;:19;;;18098:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;18205:1;18186:21;;:7;:21;;;18178:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;18288:6;18258:11;:18;18270:5;18258:18;;;;;;;;;;;;;;;:27;18277:7;18258:27;;;;;;;;;;;;;;;:36;;;;18326:7;18310:32;;18319:5;18310:32;;;18335:6;18310:32;;;;;;:::i;:::-;;;;;;;;17970:380;;;:::o;24474:4075::-;24632:1;24614:20;;:6;:20;;;24606:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24731:1;24710:23;;:9;:23;;;24688:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;24837:6;24816:9;:17;24826:6;24816:17;;;;;;;;;;;;;;;;:27;;24808:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24909:33;:44;24943:9;24909:44;;;;;;;;;;;;;;;;;;;;;;;;;24908:45;:66;;;;;24967:7;:5;:7::i;:::-;24957:17;;:6;:17;;;;24908:66;24890:269;;;25060:22;;25050:6;25027:20;25037:9;25027;:20::i;:::-;:29;;;;:::i;:::-;:55;;25001:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;24890:269;25185:7;:5;:7::i;:::-;25175:17;;:6;:17;;;25171:263;;25245:11;;25235:6;:21;;:76;;;;25281:22;:30;25304:6;25281:30;;;;;;;;;;;;;;;;;;;;;;;;;25235:76;:134;;;;25336:22;:33;25359:9;25336:33;;;;;;;;;;;;;;;;;;;;;;;;;25235:134;25209:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;25171:263;25446:16;25483:18;:26;25502:6;25483:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;25513:18;:29;25532:9;25513:29;;;;;;;;;;;;;;;;;;;;;;;;;25483:59;25479:713;;;25570:1;25559:12;;25479:713;;;25608:23;:34;25632:9;25608:34;;;;;;;;;;;;;;;;;;;;;;;;;25604:577;;;25880:14;;25835:18;;25783:20;;25731;;:72;;;;:::i;:::-;:122;;;;:::i;:::-;25696:6;:158;;;;:::i;:::-;25695:200;;;;:::i;:::-;25663:232;;25604:577;;;26150:14;;26106:17;;26055:19;;26004;;:70;;;;:::i;:::-;:119;;;;:::i;:::-;25969:6;:155;;;;:::i;:::-;25968:197;;;;:::i;:::-;25936:229;;25604:577;25479:713;26204:28;26235:24;26253:4;26235:9;:24::i;:::-;26204:55;;26272:24;26336:29;;26299:20;:66;;26272:93;;26395:16;;;;;;;;;;;26394:17;:60;;;;;26441:13;;;;;;;;;;;26428:26;;:9;:26;;;26394:60;:98;;;;;26471:21;;;;;;;;;;26394:98;:171;;;;;26536:29;;26509:24;26519:13;;;;;;;;;;;26509:9;:24::i;:::-;:56;26394:171;26376:1794;;;26596:19;26592:1567;;;26659:29;;26636:52;;26709:31;26923:1;26881:18;;26833:20;;26785;;:68;;;;:::i;:::-;:114;;;;:::i;:::-;:139;26759:528;;;27248:18;;27196:20;;27144;;:72;;;;:::i;:::-;:122;;;;:::i;:::-;27095:18;;27072:20;;:41;;;;:::i;:::-;27019:20;:95;;;;:::i;:::-;27018:249;;;;:::i;:::-;26967:300;;26759:528;27307:22;27375:1;27352:20;;:24;27348:384;;;27492:23;27443:20;:73;;;;:::i;:::-;27401:115;;27348:384;;;27613:1;27592:18;;27569:20;;:41;;;;:::i;:::-;:45;27565:148;;;27669:20;27643:46;;27565:148;27348:384;27861:1;27840:18;;27817:20;;:41;;;;:::i;:::-;:45;27813:129;;;27887:35;27898:23;27887:10;:35::i;:::-;27813:129;27981:1;27964:14;:18;27960:184;;;28094:30;28109:14;28094;:30::i;:::-;27960:184;26617:1542;;26592:1567;26376:1794;28182:22;28217:8;28207:6;:19;;;;:::i;:::-;28182:44;;28265:8;28237:9;:24;28255:4;28237:24;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;28324:6;28304:9;:17;28314:6;28304:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;28284:9;:17;28294:6;28284:17;;;;;;;;;;;;;;;:46;;;;28365:14;28341:9;:20;28351:9;28341:20;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;28407:1;28396:8;:12;28392:91;;;28455:4;28430:41;;28439:6;28430:41;;;28462:8;28430:41;;;;;;:::i;:::-;;;;;;;;28392:91;28515:9;28498:43;;28507:6;28498:43;;;28526:14;28498:43;;;;;;:::i;:::-;;;;;;;;24595:3954;;;;24474:4075;;;:::o;28557:801::-;15679:4;15660:16;;:23;;;;;;;;;;;;;;;;;;28639:18:::1;28683;;28660:20;;:41;;;;:::i;:::-;28639:62;;28712:22;28737:21;28712:46;;28769:39;28786:21;28769:16;:39::i;:::-;28819:26;28873:14;28848:21;:40;;;;:::i;:::-;28819:69;;28899:24;28988:10;28962:20;;28927:18;:56;;;;:::i;:::-;28926:73;;;;:::i;:::-;28899:100;;29010:22;29094:10;29058:18;;29036;:41;;;;:::i;:::-;29035:69;;;;:::i;:::-;29010:94;;29140:1;29121:16;:20;29117:115;;;29158:62;29179:22;;;;;;;;;;;29203:16;29158:20;:62::i;:::-;29117:115;29263:1;29246:14;:18;29242:109;;;29281:58;29302:20;;;;;;;;;;;29324:14;29281:20;:58::i;:::-;29242:109;28628:730;;;;;15725:5:::0;15706:16;;:24;;;;;;;;;;;;;;;;;;28557:801;:::o;29514:1094::-;15679:4;15660:16;;:23;;;;;;;;;;;;;;;;;;29650:12:::1;29688:1;29665:20;:24;;;;:::i;:::-;29650:39;;29700:17;29743:4;29720:20;:27;;;;:::i;:::-;29700:47;;30025:22;30050:21;30025:46;;30116:22;30133:4;30116:16;:22::i;:::-;30269:18;30315:14;30290:21;:40;;;;:::i;:::-;30269:61;;30380:35;30393:9;30404:10;30380:12;:35::i;:::-;30433:43;30448:4;30454:10;30466:9;30433:43;;;;;;;;:::i;:::-;;;;;;;;30517:1;30493:21;:25;30489:112;;;30535:22;;;;;;;;;;;:31;;:54;30567:21;30535:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30489:112;29588:1020;;;;15725:5:::0;15706:16;;:24;;;;;;;;;;;;;;;;;;29514:1094;:::o;30616:589::-;30742:21;30780:1;30766:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30742:40;;30811:4;30793;30798:1;30793:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30837:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30827:4;30832:1;30827:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30872:62;30889:4;30904:15;;;;;;;;;;;30922:11;30872:8;:62::i;:::-;30973:15;;;;;;;;;;;:66;;;31054:11;31080:1;31124:4;31151;31171:15;30973:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30671:534;30616:589;:::o;29366:140::-;29472:9;:18;;:26;29491:6;29472:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29366:140;;:::o;31213:513::-;31361:62;31378:4;31393:15;;;;;;;;;;;31411:11;31361:8;:62::i;:::-;31466:15;;;;;;;;;;;:31;;;31505:9;31538:4;31558:11;31584:1;31627;31670:7;:5;:7::i;:::-;31692:15;31466:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31213:513;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:60::-;4803:3;4824:5;4817:12;;4775:60;;;:::o;4841:142::-;4891:9;4924:53;4942:34;4951:24;4969:5;4951:24;:::i;:::-;4942:34;:::i;:::-;4924:53;:::i;:::-;4911:66;;4841:142;;;:::o;4989:126::-;5039:9;5072:37;5103:5;5072:37;:::i;:::-;5059:50;;4989:126;;;:::o;5121:152::-;5197:9;5230:37;5261:5;5230:37;:::i;:::-;5217:50;;5121:152;;;:::o;5279:183::-;5392:63;5449:5;5392:63;:::i;:::-;5387:3;5380:76;5279:183;;:::o;5468:274::-;5587:4;5625:2;5614:9;5610:18;5602:26;;5638:97;5732:1;5721:9;5717:17;5708:6;5638:97;:::i;:::-;5468:274;;;;:::o;5748:619::-;5825:6;5833;5841;5890:2;5878:9;5869:7;5865:23;5861:32;5858:119;;;5896:79;;:::i;:::-;5858:119;6016:1;6041:53;6086:7;6077:6;6066:9;6062:22;6041:53;:::i;:::-;6031:63;;5987:117;6143:2;6169:53;6214:7;6205:6;6194:9;6190:22;6169:53;:::i;:::-;6159:63;;6114:118;6271:2;6297:53;6342:7;6333:6;6322:9;6318:22;6297:53;:::i;:::-;6287:63;;6242:118;5748:619;;;;;:::o;6373:329::-;6432:6;6481:2;6469:9;6460:7;6456:23;6452:32;6449:119;;;6487:79;;:::i;:::-;6449:119;6607:1;6632:53;6677:7;6668:6;6657:9;6653:22;6632:53;:::i;:::-;6622:63;;6578:117;6373:329;;;;:::o;6708:104::-;6753:7;6782:24;6800:5;6782:24;:::i;:::-;6771:35;;6708:104;;;:::o;6818:142::-;6921:32;6947:5;6921:32;:::i;:::-;6916:3;6909:45;6818:142;;:::o;6966:254::-;7075:4;7113:2;7102:9;7098:18;7090:26;;7126:87;7210:1;7199:9;7195:17;7186:6;7126:87;:::i;:::-;6966:254;;;;:::o;7226:117::-;7335:1;7332;7325:12;7349:117;7458:1;7455;7448:12;7472:117;7581:1;7578;7571:12;7612:568;7685:8;7695:6;7745:3;7738:4;7730:6;7726:17;7722:27;7712:122;;7753:79;;:::i;:::-;7712:122;7866:6;7853:20;7843:30;;7896:18;7888:6;7885:30;7882:117;;;7918:79;;:::i;:::-;7882:117;8032:4;8024:6;8020:17;8008:29;;8086:3;8078:4;8070:6;8066:17;8056:8;8052:32;8049:41;8046:128;;;8093:79;;:::i;:::-;8046:128;7612:568;;;;;:::o;8203:::-;8276:8;8286:6;8336:3;8329:4;8321:6;8317:17;8313:27;8303:122;;8344:79;;:::i;:::-;8303:122;8457:6;8444:20;8434:30;;8487:18;8479:6;8476:30;8473:117;;;8509:79;;:::i;:::-;8473:117;8623:4;8615:6;8611:17;8599:29;;8677:3;8669:4;8661:6;8657:17;8647:8;8643:32;8640:41;8637:128;;;8684:79;;:::i;:::-;8637:128;8203:568;;;;;:::o;8777:934::-;8899:6;8907;8915;8923;8972:2;8960:9;8951:7;8947:23;8943:32;8940:119;;;8978:79;;:::i;:::-;8940:119;9126:1;9115:9;9111:17;9098:31;9156:18;9148:6;9145:30;9142:117;;;9178:79;;:::i;:::-;9142:117;9291:80;9363:7;9354:6;9343:9;9339:22;9291:80;:::i;:::-;9273:98;;;;9069:312;9448:2;9437:9;9433:18;9420:32;9479:18;9471:6;9468:30;9465:117;;;9501:79;;:::i;:::-;9465:117;9614:80;9686:7;9677:6;9666:9;9662:22;9614:80;:::i;:::-;9596:98;;;;9391:313;8777:934;;;;;;;:::o;9717:116::-;9787:21;9802:5;9787:21;:::i;:::-;9780:5;9777:32;9767:60;;9823:1;9820;9813:12;9767:60;9717:116;:::o;9839:133::-;9882:5;9920:6;9907:20;9898:29;;9936:30;9960:5;9936:30;:::i;:::-;9839:133;;;;:::o;9978:468::-;10043:6;10051;10100:2;10088:9;10079:7;10075:23;10071:32;10068:119;;;10106:79;;:::i;:::-;10068:119;10226:1;10251:53;10296:7;10287:6;10276:9;10272:22;10251:53;:::i;:::-;10241:63;;10197:117;10353:2;10379:50;10421:7;10412:6;10401:9;10397:22;10379:50;:::i;:::-;10369:60;;10324:115;9978:468;;;;;:::o;10452:329::-;10511:6;10560:2;10548:9;10539:7;10535:23;10531:32;10528:119;;;10566:79;;:::i;:::-;10528:119;10686:1;10711:53;10756:7;10747:6;10736:9;10732:22;10711:53;:::i;:::-;10701:63;;10657:117;10452:329;;;;:::o;10787:138::-;10868:32;10894:5;10868:32;:::i;:::-;10861:5;10858:43;10848:71;;10915:1;10912;10905:12;10848:71;10787:138;:::o;10931:155::-;10985:5;11023:6;11010:20;11001:29;;11039:41;11074:5;11039:41;:::i;:::-;10931:155;;;;:::o;11092:345::-;11159:6;11208:2;11196:9;11187:7;11183:23;11179:32;11176:119;;;11214:79;;:::i;:::-;11176:119;11334:1;11359:61;11412:7;11403:6;11392:9;11388:22;11359:61;:::i;:::-;11349:71;;11305:125;11092:345;;;;:::o;11443:323::-;11499:6;11548:2;11536:9;11527:7;11523:23;11519:32;11516:119;;;11554:79;;:::i;:::-;11516:119;11674:1;11699:50;11741:7;11732:6;11721:9;11717:22;11699:50;:::i;:::-;11689:60;;11645:114;11443:323;;;;:::o;11772:474::-;11840:6;11848;11897:2;11885:9;11876:7;11872:23;11868:32;11865:119;;;11903:79;;:::i;:::-;11865:119;12023:1;12048:53;12093:7;12084:6;12073:9;12069:22;12048:53;:::i;:::-;12038:63;;11994:117;12150:2;12176:53;12221:7;12212:6;12201:9;12197:22;12176:53;:::i;:::-;12166:63;;12121:118;11772:474;;;;;:::o;12252:180::-;12300:77;12297:1;12290:88;12397:4;12394:1;12387:15;12421:4;12418:1;12411:15;12438:320;12482:6;12519:1;12513:4;12509:12;12499:22;;12566:1;12560:4;12556:12;12587:18;12577:81;;12643:4;12635:6;12631:17;12621:27;;12577:81;12705:2;12697:6;12694:14;12674:18;12671:38;12668:84;;12724:18;;:::i;:::-;12668:84;12489:269;12438:320;;;:::o;12764:182::-;12904:34;12900:1;12892:6;12888:14;12881:58;12764:182;:::o;12952:366::-;13094:3;13115:67;13179:2;13174:3;13115:67;:::i;:::-;13108:74;;13191:93;13280:3;13191:93;:::i;:::-;13309:2;13304:3;13300:12;13293:19;;12952:366;;;:::o;13324:419::-;13490:4;13528:2;13517:9;13513:18;13505:26;;13577:9;13571:4;13567:20;13563:1;13552:9;13548:17;13541:47;13605:131;13731:4;13605:131;:::i;:::-;13597:139;;13324:419;;;:::o;13749:180::-;13797:77;13794:1;13787:88;13894:4;13891:1;13884:15;13918:4;13915:1;13908:15;13935:191;13975:3;13994:20;14012:1;13994:20;:::i;:::-;13989:25;;14028:20;14046:1;14028:20;:::i;:::-;14023:25;;14071:1;14068;14064:9;14057:16;;14092:3;14089:1;14086:10;14083:36;;;14099:18;;:::i;:::-;14083:36;13935:191;;;;:::o;14132:177::-;14272:29;14268:1;14260:6;14256:14;14249:53;14132:177;:::o;14315:366::-;14457:3;14478:67;14542:2;14537:3;14478:67;:::i;:::-;14471:74;;14554:93;14643:3;14554:93;:::i;:::-;14672:2;14667:3;14663:12;14656:19;;14315:366;;;:::o;14687:419::-;14853:4;14891:2;14880:9;14876:18;14868:26;;14940:9;14934:4;14930:20;14926:1;14915:9;14911:17;14904:47;14968:131;15094:4;14968:131;:::i;:::-;14960:139;;14687:419;;;:::o;15112:228::-;15252:34;15248:1;15240:6;15236:14;15229:58;15321:11;15316:2;15308:6;15304:15;15297:36;15112:228;:::o;15346:366::-;15488:3;15509:67;15573:2;15568:3;15509:67;:::i;:::-;15502:74;;15585:93;15674:3;15585:93;:::i;:::-;15703:2;15698:3;15694:12;15687:19;;15346:366;;;:::o;15718:419::-;15884:4;15922:2;15911:9;15907:18;15899:26;;15971:9;15965:4;15961:20;15957:1;15946:9;15942:17;15935:47;15999:131;16125:4;15999:131;:::i;:::-;15991:139;;15718:419;;;:::o;16143:232::-;16283:34;16279:1;16271:6;16267:14;16260:58;16352:15;16347:2;16339:6;16335:15;16328:40;16143:232;:::o;16381:366::-;16523:3;16544:67;16608:2;16603:3;16544:67;:::i;:::-;16537:74;;16620:93;16709:3;16620:93;:::i;:::-;16738:2;16733:3;16729:12;16722:19;;16381:366;;;:::o;16753:419::-;16919:4;16957:2;16946:9;16942:18;16934:26;;17006:9;17000:4;16996:20;16992:1;16981:9;16977:17;16970:47;17034:131;17160:4;17034:131;:::i;:::-;17026:139;;16753:419;;;:::o;17178:227::-;17318:34;17314:1;17306:6;17302:14;17295:58;17387:10;17382:2;17374:6;17370:15;17363:35;17178:227;:::o;17411:366::-;17553:3;17574:67;17638:2;17633:3;17574:67;:::i;:::-;17567:74;;17650:93;17739:3;17650:93;:::i;:::-;17768:2;17763:3;17759:12;17752:19;;17411:366;;;:::o;17783:419::-;17949:4;17987:2;17976:9;17972:18;17964:26;;18036:9;18030:4;18026:20;18022:1;18011:9;18007:17;18000:47;18064:131;18190:4;18064:131;:::i;:::-;18056:139;;17783:419;;;:::o;18208:180::-;18256:77;18253:1;18246:88;18353:4;18350:1;18343:15;18377:4;18374:1;18367:15;18394:233;18433:3;18456:24;18474:5;18456:24;:::i;:::-;18447:33;;18502:66;18495:5;18492:77;18489:103;;18572:18;;:::i;:::-;18489:103;18619:1;18612:5;18608:13;18601:20;;18394:233;;;:::o;18633:177::-;18773:29;18769:1;18761:6;18757:14;18750:53;18633:177;:::o;18816:366::-;18958:3;18979:67;19043:2;19038:3;18979:67;:::i;:::-;18972:74;;19055:93;19144:3;19055:93;:::i;:::-;19173:2;19168:3;19164:12;19157:19;;18816:366;;;:::o;19188:419::-;19354:4;19392:2;19381:9;19377:18;19369:26;;19441:9;19435:4;19431:20;19427:1;19416:9;19412:17;19405:47;19469:131;19595:4;19469:131;:::i;:::-;19461:139;;19188:419;;;:::o;19613:320::-;19728:4;19766:2;19755:9;19751:18;19743:26;;19779:71;19847:1;19836:9;19832:17;19823:6;19779:71;:::i;:::-;19860:66;19922:2;19911:9;19907:18;19898:6;19860:66;:::i;:::-;19613:320;;;;;:::o;19939:102::-;19981:8;20028:5;20025:1;20021:13;20000:34;;19939:102;;;:::o;20047:848::-;20108:5;20115:4;20139:6;20130:15;;20163:5;20154:14;;20177:712;20198:1;20188:8;20185:15;20177:712;;;20293:4;20288:3;20284:14;20278:4;20275:24;20272:50;;;20302:18;;:::i;:::-;20272:50;20352:1;20342:8;20338:16;20335:451;;;20767:4;20760:5;20756:16;20747:25;;20335:451;20817:4;20811;20807:15;20799:23;;20847:32;20870:8;20847:32;:::i;:::-;20835:44;;20177:712;;;20047:848;;;;;;;:::o;20901:1073::-;20955:5;21146:8;21136:40;;21167:1;21158:10;;21169:5;;21136:40;21195:4;21185:36;;21212:1;21203:10;;21214:5;;21185:36;21281:4;21329:1;21324:27;;;;21365:1;21360:191;;;;21274:277;;21324:27;21342:1;21333:10;;21344:5;;;21360:191;21405:3;21395:8;21392:17;21389:43;;;21412:18;;:::i;:::-;21389:43;21461:8;21458:1;21454:16;21445:25;;21496:3;21489:5;21486:14;21483:40;;;21503:18;;:::i;:::-;21483:40;21536:5;;;21274:277;;21660:2;21650:8;21647:16;21641:3;21635:4;21632:13;21628:36;21610:2;21600:8;21597:16;21592:2;21586:4;21583:12;21579:35;21563:111;21560:246;;;21716:8;21710:4;21706:19;21697:28;;21751:3;21744:5;21741:14;21738:40;;;21758:18;;:::i;:::-;21738:40;21791:5;;21560:246;21831:42;21869:3;21859:8;21853:4;21850:1;21831:42;:::i;:::-;21816:57;;;;21905:4;21900:3;21896:14;21889:5;21886:25;21883:51;;;21914:18;;:::i;:::-;21883:51;21963:4;21956:5;21952:16;21943:25;;20901:1073;;;;;;:::o;21980:285::-;22040:5;22064:23;22082:4;22064:23;:::i;:::-;22056:31;;22108:27;22126:8;22108:27;:::i;:::-;22096:39;;22154:104;22191:66;22181:8;22175:4;22154:104;:::i;:::-;22145:113;;21980:285;;;;:::o;22271:410::-;22311:7;22334:20;22352:1;22334:20;:::i;:::-;22329:25;;22368:20;22386:1;22368:20;:::i;:::-;22363:25;;22423:1;22420;22416:9;22445:30;22463:11;22445:30;:::i;:::-;22434:41;;22624:1;22615:7;22611:15;22608:1;22605:22;22585:1;22578:9;22558:83;22535:139;;22654:18;;:::i;:::-;22535:139;22319:362;22271:410;;;;:::o;22687:176::-;22827:28;22823:1;22815:6;22811:14;22804:52;22687:176;:::o;22869:366::-;23011:3;23032:67;23096:2;23091:3;23032:67;:::i;:::-;23025:74;;23108:93;23197:3;23108:93;:::i;:::-;23226:2;23221:3;23217:12;23210:19;;22869:366;;;:::o;23241:419::-;23407:4;23445:2;23434:9;23430:18;23422:26;;23494:9;23488:4;23484:20;23480:1;23469:9;23465:17;23458:47;23522:131;23648:4;23522:131;:::i;:::-;23514:139;;23241:419;;;:::o;23666:225::-;23806:34;23802:1;23794:6;23790:14;23783:58;23875:8;23870:2;23862:6;23858:15;23851:33;23666:225;:::o;23897:366::-;24039:3;24060:67;24124:2;24119:3;24060:67;:::i;:::-;24053:74;;24136:93;24225:3;24136:93;:::i;:::-;24254:2;24249:3;24245:12;24238:19;;23897:366;;;:::o;24269:419::-;24435:4;24473:2;24462:9;24458:18;24450:26;;24522:9;24516:4;24512:20;24508:1;24497:9;24493:17;24486:47;24550:131;24676:4;24550:131;:::i;:::-;24542:139;;24269:419;;;:::o;24694:194::-;24734:4;24754:20;24772:1;24754:20;:::i;:::-;24749:25;;24788:20;24806:1;24788:20;:::i;:::-;24783:25;;24832:1;24829;24825:9;24817:17;;24856:1;24850:4;24847:11;24844:37;;;24861:18;;:::i;:::-;24844:37;24694:194;;;;:::o;24894:229::-;25034:34;25030:1;25022:6;25018:14;25011:58;25103:12;25098:2;25090:6;25086:15;25079:37;24894:229;:::o;25129:366::-;25271:3;25292:67;25356:2;25351:3;25292:67;:::i;:::-;25285:74;;25368:93;25457:3;25368:93;:::i;:::-;25486:2;25481:3;25477:12;25470:19;;25129:366;;;:::o;25501:419::-;25667:4;25705:2;25694:9;25690:18;25682:26;;25754:9;25748:4;25744:20;25740:1;25729:9;25725:17;25718:47;25782:131;25908:4;25782:131;:::i;:::-;25774:139;;25501:419;;;:::o;25926:239::-;26066:34;26062:1;26054:6;26050:14;26043:58;26135:22;26130:2;26122:6;26118:15;26111:47;25926:239;:::o;26171:366::-;26313:3;26334:67;26398:2;26393:3;26334:67;:::i;:::-;26327:74;;26410:93;26499:3;26410:93;:::i;:::-;26528:2;26523:3;26519:12;26512:19;;26171:366;;;:::o;26543:419::-;26709:4;26747:2;26736:9;26732:18;26724:26;;26796:9;26790:4;26786:20;26782:1;26771:9;26767:17;26760:47;26824:131;26950:4;26824:131;:::i;:::-;26816:139;;26543:419;;;:::o;26968:225::-;27108:34;27104:1;27096:6;27092:14;27085:58;27177:8;27172:2;27164:6;27160:15;27153:33;26968:225;:::o;27199:366::-;27341:3;27362:67;27426:2;27421:3;27362:67;:::i;:::-;27355:74;;27438:93;27527:3;27438:93;:::i;:::-;27556:2;27551:3;27547:12;27540:19;;27199:366;;;:::o;27571:419::-;27737:4;27775:2;27764:9;27760:18;27752:26;;27824:9;27818:4;27814:20;27810:1;27799:9;27795:17;27788:47;27852:131;27978:4;27852:131;:::i;:::-;27844:139;;27571:419;;;:::o;27996:224::-;28136:34;28132:1;28124:6;28120:14;28113:58;28205:7;28200:2;28192:6;28188:15;28181:32;27996:224;:::o;28226:366::-;28368:3;28389:67;28453:2;28448:3;28389:67;:::i;:::-;28382:74;;28465:93;28554:3;28465:93;:::i;:::-;28583:2;28578:3;28574:12;28567:19;;28226:366;;;:::o;28598:419::-;28764:4;28802:2;28791:9;28787:18;28779:26;;28851:9;28845:4;28841:20;28837:1;28826:9;28822:17;28815:47;28879:131;29005:4;28879:131;:::i;:::-;28871:139;;28598:419;;;:::o;29023:222::-;29163:34;29159:1;29151:6;29147:14;29140:58;29232:5;29227:2;29219:6;29215:15;29208:30;29023:222;:::o;29251:366::-;29393:3;29414:67;29478:2;29473:3;29414:67;:::i;:::-;29407:74;;29490:93;29579:3;29490:93;:::i;:::-;29608:2;29603:3;29599:12;29592:19;;29251:366;;;:::o;29623:419::-;29789:4;29827:2;29816:9;29812:18;29804:26;;29876:9;29870:4;29866:20;29862:1;29851:9;29847:17;29840:47;29904:131;30030:4;29904:131;:::i;:::-;29896:139;;29623:419;;;:::o;30048:225::-;30188:34;30184:1;30176:6;30172:14;30165:58;30257:8;30252:2;30244:6;30240:15;30233:33;30048:225;:::o;30279:366::-;30421:3;30442:67;30506:2;30501:3;30442:67;:::i;:::-;30435:74;;30518:93;30607:3;30518:93;:::i;:::-;30636:2;30631:3;30627:12;30620:19;;30279:366;;;:::o;30651:419::-;30817:4;30855:2;30844:9;30840:18;30832:26;;30904:9;30898:4;30894:20;30890:1;30879:9;30875:17;30868:47;30932:131;31058:4;30932:131;:::i;:::-;30924:139;;30651:419;;;:::o;31076:223::-;31216:34;31212:1;31204:6;31200:14;31193:58;31285:6;31280:2;31272:6;31268:15;31261:31;31076:223;:::o;31305:366::-;31447:3;31468:67;31532:2;31527:3;31468:67;:::i;:::-;31461:74;;31544:93;31633:3;31544:93;:::i;:::-;31662:2;31657:3;31653:12;31646:19;;31305:366;;;:::o;31677:419::-;31843:4;31881:2;31870:9;31866:18;31858:26;;31930:9;31924:4;31920:20;31916:1;31905:9;31901:17;31894:47;31958:131;32084:4;31958:131;:::i;:::-;31950:139;;31677:419;;;:::o;32102:179::-;32242:31;32238:1;32230:6;32226:14;32219:55;32102:179;:::o;32287:366::-;32429:3;32450:67;32514:2;32509:3;32450:67;:::i;:::-;32443:74;;32526:93;32615:3;32526:93;:::i;:::-;32644:2;32639:3;32635:12;32628:19;;32287:366;;;:::o;32659:419::-;32825:4;32863:2;32852:9;32848:18;32840:26;;32912:9;32906:4;32902:20;32898:1;32887:9;32883:17;32876:47;32940:131;33066:4;32940:131;:::i;:::-;32932:139;;32659:419;;;:::o;33084:179::-;33224:31;33220:1;33212:6;33208:14;33201:55;33084:179;:::o;33269:366::-;33411:3;33432:67;33496:2;33491:3;33432:67;:::i;:::-;33425:74;;33508:93;33597:3;33508:93;:::i;:::-;33626:2;33621:3;33617:12;33610:19;;33269:366;;;:::o;33641:419::-;33807:4;33845:2;33834:9;33830:18;33822:26;;33894:9;33888:4;33884:20;33880:1;33869:9;33865:17;33858:47;33922:131;34048:4;33922:131;:::i;:::-;33914:139;;33641:419;;;:::o;34066:167::-;34206:19;34202:1;34194:6;34190:14;34183:43;34066:167;:::o;34239:366::-;34381:3;34402:67;34466:2;34461:3;34402:67;:::i;:::-;34395:74;;34478:93;34567:3;34478:93;:::i;:::-;34596:2;34591:3;34587:12;34580:19;;34239:366;;;:::o;34611:419::-;34777:4;34815:2;34804:9;34800:18;34792:26;;34864:9;34858:4;34854:20;34850:1;34839:9;34835:17;34828:47;34892:131;35018:4;34892:131;:::i;:::-;34884:139;;34611:419;;;:::o;35036:180::-;35084:77;35081:1;35074:88;35181:4;35178:1;35171:15;35205:4;35202:1;35195:15;35222:185;35262:1;35279:20;35297:1;35279:20;:::i;:::-;35274:25;;35313:20;35331:1;35313:20;:::i;:::-;35308:25;;35352:1;35342:35;;35357:18;;:::i;:::-;35342:35;35399:1;35396;35392:9;35387:14;;35222:185;;;;:::o;35413:442::-;35562:4;35600:2;35589:9;35585:18;35577:26;;35613:71;35681:1;35670:9;35666:17;35657:6;35613:71;:::i;:::-;35694:72;35762:2;35751:9;35747:18;35738:6;35694:72;:::i;:::-;35776;35844:2;35833:9;35829:18;35820:6;35776:72;:::i;:::-;35413:442;;;;;;:::o;35861:180::-;35909:77;35906:1;35899:88;36006:4;36003:1;35996:15;36030:4;36027:1;36020:15;36047:143;36104:5;36135:6;36129:13;36120:22;;36151:33;36178:5;36151:33;:::i;:::-;36047:143;;;;:::o;36196:351::-;36266:6;36315:2;36303:9;36294:7;36290:23;36286:32;36283:119;;;36321:79;;:::i;:::-;36283:119;36441:1;36466:64;36522:7;36513:6;36502:9;36498:22;36466:64;:::i;:::-;36456:74;;36412:128;36196:351;;;;:::o;36553:85::-;36598:7;36627:5;36616:16;;36553:85;;;:::o;36644:158::-;36702:9;36735:61;36753:42;36762:32;36788:5;36762:32;:::i;:::-;36753:42;:::i;:::-;36735:61;:::i;:::-;36722:74;;36644:158;;;:::o;36808:147::-;36903:45;36942:5;36903:45;:::i;:::-;36898:3;36891:58;36808:147;;:::o;36961:114::-;37028:6;37062:5;37056:12;37046:22;;36961:114;;;:::o;37081:184::-;37180:11;37214:6;37209:3;37202:19;37254:4;37249:3;37245:14;37230:29;;37081:184;;;;:::o;37271:132::-;37338:4;37361:3;37353:11;;37391:4;37386:3;37382:14;37374:22;;37271:132;;;:::o;37409:108::-;37486:24;37504:5;37486:24;:::i;:::-;37481:3;37474:37;37409:108;;:::o;37523:179::-;37592:10;37613:46;37655:3;37647:6;37613:46;:::i;:::-;37691:4;37686:3;37682:14;37668:28;;37523:179;;;;:::o;37708:113::-;37778:4;37810;37805:3;37801:14;37793:22;;37708:113;;;:::o;37857:732::-;37976:3;38005:54;38053:5;38005:54;:::i;:::-;38075:86;38154:6;38149:3;38075:86;:::i;:::-;38068:93;;38185:56;38235:5;38185:56;:::i;:::-;38264:7;38295:1;38280:284;38305:6;38302:1;38299:13;38280:284;;;38381:6;38375:13;38408:63;38467:3;38452:13;38408:63;:::i;:::-;38401:70;;38494:60;38547:6;38494:60;:::i;:::-;38484:70;;38340:224;38327:1;38324;38320:9;38315:14;;38280:284;;;38284:14;38580:3;38573:10;;37981:608;;;37857:732;;;;:::o;38595:831::-;38858:4;38896:3;38885:9;38881:19;38873:27;;38910:71;38978:1;38967:9;38963:17;38954:6;38910:71;:::i;:::-;38991:80;39067:2;39056:9;39052:18;39043:6;38991:80;:::i;:::-;39118:9;39112:4;39108:20;39103:2;39092:9;39088:18;39081:48;39146:108;39249:4;39240:6;39146:108;:::i;:::-;39138:116;;39264:72;39332:2;39321:9;39317:18;39308:6;39264:72;:::i;:::-;39346:73;39414:3;39403:9;39399:19;39390:6;39346:73;:::i;:::-;38595:831;;;;;;;;:::o;39432:807::-;39681:4;39719:3;39708:9;39704:19;39696:27;;39733:71;39801:1;39790:9;39786:17;39777:6;39733:71;:::i;:::-;39814:72;39882:2;39871:9;39867:18;39858:6;39814:72;:::i;:::-;39896:80;39972:2;39961:9;39957:18;39948:6;39896:80;:::i;:::-;39986;40062:2;40051:9;40047:18;40038:6;39986:80;:::i;:::-;40076:73;40144:3;40133:9;40129:19;40120:6;40076:73;:::i;:::-;40159;40227:3;40216:9;40212:19;40203:6;40159:73;:::i;:::-;39432:807;;;;;;;;;:::o;40245:143::-;40302:5;40333:6;40327:13;40318:22;;40349:33;40376:5;40349:33;:::i;:::-;40245:143;;;;:::o;40394:663::-;40482:6;40490;40498;40547:2;40535:9;40526:7;40522:23;40518:32;40515:119;;;40553:79;;:::i;:::-;40515:119;40673:1;40698:64;40754:7;40745:6;40734:9;40730:22;40698:64;:::i;:::-;40688:74;;40644:128;40811:2;40837:64;40893:7;40884:6;40873:9;40869:22;40837:64;:::i;:::-;40827:74;;40782:129;40950:2;40976:64;41032:7;41023:6;41012:9;41008:22;40976:64;:::i;:::-;40966:74;;40921:129;40394:663;;;;;:::o

Swarm Source

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