ETH Price: $2,604.06 (+0.45%)

Token

Jake Paul Inu (KO)
 

Overview

Max Total Supply

1,000,000,000 KO

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,647,477.89456305066090717 KO

Value
$0.00
0xB3521dB005280A7e282199E5b48c75B2214f9E80
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:
JakePaulInu

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-25
*/

/**
    Come get your tickets to the main event!    
    TG: https://t.me/JakePaulInuPortal

**/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    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 {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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 Mint(address indexed sender, uint256 amount0, uint256 amount1);
    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 mint(address to) external returns (uint256 liquidity);

    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 IUniswapV2Router02 {
    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 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 JakePaulInu is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public liqWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liqWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Jake Paul Inu", "KO") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 99;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 10_000_000 * 1e18; // 1% from total supply maxTransactionAmountTxn
        maxWallet = 20_000_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0xE36EBc1CeDC6C0786D16D41C60ecf2C4239Fee13);
        devWallet = address(0xd8b1A4D58e508f27820660F8aE17925b32e1601F);
        liqWallet = address(0xd8b1A4D58e508f27820660F8aE17925b32e1601F);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 11, "Must keep fees at 11% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 11% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateLiqWallet(address newLiqWallet) external onlyOwner {
        emit liqWalletUpdated(newLiqWallet, liqWallet);
        liqWallet = newLiqWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    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
            liqWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liqWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiqWallet","type":"address"}],"name":"updateLiqWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600d81526020017f4a616b65205061756c20496e75000000000000000000000000000000000000008152506040518060400160405280600281526020017f4b4f00000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000b3a565b5080600490805190602001906200011b92919062000b3a565b5050506200013e62000132620005fa60201b60201c565b6200060260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016a816001620006c860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000210919062000c54565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000278573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029e919062000c54565b6040518363ffffffff1660e01b8152600401620002bd92919062000c97565b6020604051808303816000875af1158015620002dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000303919062000c54565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034b60a0516001620006c860201b60201c565b6200036060a0516001620007b260201b60201c565b6000600390506000600190506000806063905060008060006b033b2e3c9fd0803ce800000090506a084595161401484a0000006009819055506a108b2a2c28029094000000600b81905550612710600582620003bd919062000cfd565b620003c9919062000d8d565b600a81905550866010819055508560118190555084601281905550601254601154601054620003f9919062000dc5565b62000405919062000dc5565b600f8190555083601481905550826015819055508160168190555060165460155460145462000435919062000dc5565b62000441919062000dc5565b60138190555073e36ebc1cedc6c0786d16d41c60ecf2c4239fee13600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d8b1a4d58e508f27820660f8ae17925b32e1601f600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d8b1a4d58e508f27820660f8ae17925b32e1601f600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005686200055a6200085360201b60201c565b60016200087d60201b60201c565b6200057b3060016200087d60201b60201c565b6200059061dead60016200087d60201b60201c565b620005b2620005a46200085360201b60201c565b6001620006c860201b60201c565b620005c5306001620006c860201b60201c565b620005da61dead6001620006c860201b60201c565b620005ec3382620009b760201b60201c565b505050505050505062000fe4565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006d8620005fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006fe6200085360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074e9062000e83565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200088d620005fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008b36200085360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200090c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009039062000e83565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009ab919062000ec2565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a219062000f2f565b60405180910390fd5b62000a3e6000838362000b3060201b60201c565b806002600082825462000a52919062000dc5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000aa9919062000dc5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b10919062000f62565b60405180910390a362000b2c6000838362000b3560201b60201c565b5050565b505050565b505050565b82805462000b489062000fae565b90600052602060002090601f01602090048101928262000b6c576000855562000bb8565b82601f1062000b8757805160ff191683800117855562000bb8565b8280016001018555821562000bb8579182015b8281111562000bb757825182559160200191906001019062000b9a565b5b50905062000bc7919062000bcb565b5090565b5b8082111562000be657600081600090555060010162000bcc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c1c8262000bef565b9050919050565b62000c2e8162000c0f565b811462000c3a57600080fd5b50565b60008151905062000c4e8162000c23565b92915050565b60006020828403121562000c6d5762000c6c62000bea565b5b600062000c7d8482850162000c3d565b91505092915050565b62000c918162000c0f565b82525050565b600060408201905062000cae600083018562000c86565b62000cbd602083018462000c86565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d0a8262000cc4565b915062000d178362000cc4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d535762000d5262000cce565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d9a8262000cc4565b915062000da78362000cc4565b92508262000dba5762000db962000d5e565b5b828204905092915050565b600062000dd28262000cc4565b915062000ddf8362000cc4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e175762000e1662000cce565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e6b60208362000e22565b915062000e788262000e33565b602082019050919050565b6000602082019050818103600083015262000e9e8162000e5c565b9050919050565b60008115159050919050565b62000ebc8162000ea5565b82525050565b600060208201905062000ed9600083018462000eb1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f17601f8362000e22565b915062000f248262000edf565b602082019050919050565b6000602082019050818103600083015262000f4a8162000f08565b9050919050565b62000f5c8162000cc4565b82525050565b600060208201905062000f79600083018462000f51565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fc757607f821691505b6020821081141562000fde5762000fdd62000f7f565b5b50919050565b60805160a051615243620010426000396000818161127301528181611a9e0152612a2c015260008181610e3b015281816129d401528181613ac801528181613ba901528181613bd001528181613c6c0152613c9301526152436000f3fe60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cbf578063f2fde38b14610cea578063f637434214610d13578063f8b45b0514610d3e57610376565b8063dd62ed3e14610c2c578063e2f4560514610c69578063e884f26014610c9457610376565b8063c876d0b9116100d1578063c876d0b914610b6e578063c8c8ebe414610b99578063d257b34f14610bc4578063d85ba06314610c0157610376565b8063c024666814610af3578063c17b5b8c14610b1c578063c18bc19514610b4557610376565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb14610a25578063aacebbe314610a62578063b62496f514610a8b578063bbc0c74214610ac857610376565b80639fccce3214610992578063a0d82dc5146109bd578063a457c2d7146109e857610376565b8063924de9b7116101a0578063924de9b7146108ea57806395d89b41146109135780639a7a23d61461093e5780639c3b4fdc1461096757610376565b80638da5cb5b146108695780638ea5220f1461089457806392136913146108bf57610376565b80634a62bb65116102a057806373dd858c1161023e57806375f0a8741161021857806375f0a874146107d35780637bce5a04146107fe5780638095d564146108295780638a8c523c1461085257610376565b806373dd858c14610756578063751039fc1461077f5780637571336a146107aa57610376565b80636a486a8e1161027a5780636a486a8e146106ac5780636ddd1713146106d757806370a0823114610702578063715018a61461073f57610376565b80634a62bb65146106195780634ec39ba9146106445780634fbee1931461066f57610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d69565b60405161039d9190613dfb565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613eb6565b610dfb565b6040516103da9190613f11565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f2c565b610e19565b6040516104179190613f11565b60405180910390f35b34801561042c57600080fd5b50610435610e39565b6040516104429190613fb8565b60405180910390f35b34801561045757600080fd5b50610460610e5d565b60405161046d9190613fe2565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613f2c565b610e67565b005b3480156104ab57600080fd5b506104b4610fa3565b6040516104c19190613fe2565b60405180910390f35b3480156104d657600080fd5b506104df610fa9565b6040516104ec9190613fe2565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190613ffd565b610faf565b005b34801561052a57600080fd5b506105456004803603810190610540919061402a565b6110be565b6040516105529190613f11565b60405180910390f35b34801561056757600080fd5b506105706111b6565b60405161057d919061408c565b60405180910390f35b34801561059257600080fd5b5061059b6111bc565b6040516105a891906140c3565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613eb6565b6111c5565b6040516105e59190613f11565b60405180910390f35b3480156105fa57600080fd5b50610603611271565b604051610610919061408c565b60405180910390f35b34801561062557600080fd5b5061062e611295565b60405161063b9190613f11565b60405180910390f35b34801561065057600080fd5b506106596112a8565b604051610666919061408c565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613f2c565b6112ce565b6040516106a39190613f11565b60405180910390f35b3480156106b857600080fd5b506106c1611324565b6040516106ce9190613fe2565b60405180910390f35b3480156106e357600080fd5b506106ec61132a565b6040516106f99190613f11565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613f2c565b61133d565b6040516107369190613fe2565b60405180910390f35b34801561074b57600080fd5b50610754611385565b005b34801561076257600080fd5b5061077d60048036038101906107789190613f2c565b61140d565b005b34801561078b57600080fd5b50610794611549565b6040516107a19190613f11565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061410a565b6115e9565b005b3480156107df57600080fd5b506107e86116c0565b6040516107f5919061408c565b60405180910390f35b34801561080a57600080fd5b506108136116e6565b6040516108209190613fe2565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b919061414a565b6116ec565b005b34801561085e57600080fd5b506108676117eb565b005b34801561087557600080fd5b5061087e61189f565b60405161088b919061408c565b60405180910390f35b3480156108a057600080fd5b506108a96118c9565b6040516108b6919061408c565b60405180910390f35b3480156108cb57600080fd5b506108d46118ef565b6040516108e19190613fe2565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061419d565b6118f5565b005b34801561091f57600080fd5b5061092861198e565b6040516109359190613dfb565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061410a565b611a20565b005b34801561097357600080fd5b5061097c611b39565b6040516109899190613fe2565b60405180910390f35b34801561099e57600080fd5b506109a7611b3f565b6040516109b49190613fe2565b60405180910390f35b3480156109c957600080fd5b506109d2611b45565b6040516109df9190613fe2565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613eb6565b611b4b565b604051610a1c9190613f11565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613eb6565b611c36565b604051610a599190613f11565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190613f2c565b611c54565b005b348015610a9757600080fd5b50610ab26004803603810190610aad9190613f2c565b611d90565b604051610abf9190613f11565b60405180910390f35b348015610ad457600080fd5b50610add611db0565b604051610aea9190613f11565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b15919061410a565b611dc3565b005b348015610b2857600080fd5b50610b436004803603810190610b3e919061414a565b611ee8565b005b348015610b5157600080fd5b50610b6c6004803603810190610b679190613ffd565b611fe7565b005b348015610b7a57600080fd5b50610b836120f6565b604051610b909190613f11565b60405180910390f35b348015610ba557600080fd5b50610bae612109565b604051610bbb9190613fe2565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190613ffd565b61210f565b604051610bf89190613f11565b60405180910390f35b348015610c0d57600080fd5b50610c16612264565b604051610c239190613fe2565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e91906141ca565b61226a565b604051610c609190613fe2565b60405180910390f35b348015610c7557600080fd5b50610c7e6122f1565b604051610c8b9190613fe2565b60405180910390f35b348015610ca057600080fd5b50610ca96122f7565b604051610cb69190613f11565b60405180910390f35b348015610ccb57600080fd5b50610cd4612397565b604051610ce19190613fe2565b60405180910390f35b348015610cf657600080fd5b50610d116004803603810190610d0c9190613f2c565b61239d565b005b348015610d1f57600080fd5b50610d28612495565b604051610d359190613fe2565b60405180910390f35b348015610d4a57600080fd5b50610d5361249b565b604051610d609190613fe2565b60405180910390f35b606060038054610d7890614239565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490614239565b8015610df15780601f10610dc657610100808354040283529160200191610df1565b820191906000526020600020905b815481529060010190602001808311610dd457829003601f168201915b5050505050905090565b6000610e0f610e086124a1565b84846124a9565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e6f6124a1565b73ffffffffffffffffffffffffffffffffffffffff16610e8d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda906142b7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fb76124a1565b73ffffffffffffffffffffffffffffffffffffffff16610fd561189f565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906142b7565b60405180910390fd5b670de0b6b3a76400006103e86001611041610e5d565b61104b9190614306565b611055919061438f565b61105f919061438f565b8110156110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890614432565b60405180910390fd5b670de0b6b3a7640000816110b59190614306565b60098190555050565b60006110cb848484612674565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111166124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906144c4565b60405180910390fd5b6111aa856111a26124a1565b8584036124a9565b60019150509392505050565b61dead81565b60006012905090565b60006112676111d26124a1565b8484600160006111e06124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126291906144e4565b6124a9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138d6124a1565b73ffffffffffffffffffffffffffffffffffffffff166113ab61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906142b7565b60405180910390fd5b61140b600061330e565b565b6114156124a1565b73ffffffffffffffffffffffffffffffffffffffff1661143361189f565b73ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906142b7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006115536124a1565b73ffffffffffffffffffffffffffffffffffffffff1661157161189f565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906142b7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115f16124a1565b73ffffffffffffffffffffffffffffffffffffffff1661160f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c906142b7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6116f46124a1565b73ffffffffffffffffffffffffffffffffffffffff1661171261189f565b73ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f906142b7565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461179091906144e4565b61179a91906144e4565b600f81905550600b600f5411156117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd90614586565b60405180910390fd5b505050565b6117f36124a1565b73ffffffffffffffffffffffffffffffffffffffff1661181161189f565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906142b7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118fd6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661191b61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611968906142b7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461199d90614239565b80601f01602080910402602001604051908101604052809291908181526020018280546119c990614239565b8015611a165780601f106119eb57610100808354040283529160200191611a16565b820191906000526020600020905b8154815290600101906020018083116119f957829003601f168201915b5050505050905090565b611a286124a1565b73ffffffffffffffffffffffffffffffffffffffff16611a4661189f565b73ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906142b7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614618565b60405180910390fd5b611b3582826133d4565b5050565b60125481565b60195481565b60165481565b60008060016000611b5a6124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906146aa565b60405180910390fd5b611c2b611c226124a1565b858584036124a9565b600191505092915050565b6000611c4a611c436124a1565b8484612674565b6001905092915050565b611c5c6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611c7a61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906142b7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611dcb6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611de961189f565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e36906142b7565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611edc9190613f11565b60405180910390a25050565b611ef06124a1565b73ffffffffffffffffffffffffffffffffffffffff16611f0e61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906142b7565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611f8c91906144e4565b611f9691906144e4565b60138190555060636013541115611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990614586565b60405180910390fd5b505050565b611fef6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661200d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142b7565b60405180910390fd5b670de0b6b3a76400006103e86005612079610e5d565b6120839190614306565b61208d919061438f565b612097919061438f565b8110156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d09061473c565b60405180910390fd5b670de0b6b3a7640000816120ed9190614306565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b60006121196124a1565b73ffffffffffffffffffffffffffffffffffffffff1661213761189f565b73ffffffffffffffffffffffffffffffffffffffff161461218d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612184906142b7565b60405180910390fd5b620186a0600161219b610e5d565b6121a59190614306565b6121af919061438f565b8210156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906147ce565b60405180910390fd5b6103e860056121fe610e5d565b6122089190614306565b612212919061438f565b821115612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614860565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006123016124a1565b73ffffffffffffffffffffffffffffffffffffffff1661231f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c906142b7565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123a56124a1565b73ffffffffffffffffffffffffffffffffffffffff166123c361189f565b73ffffffffffffffffffffffffffffffffffffffff1614612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906142b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612480906148f2565b60405180910390fd5b6124928161330e565b50565b60155481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126679190613fe2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90614b3a565b60405180910390fd5b600081141561276e5761276983836000613475565b613309565b600c60009054906101000a900460ff1615612e315761278b61189f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127f957506127c961189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561286c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128855750600560149054906101000a900460ff16155b15612e3057600c60019054906101000a900460ff1661297f57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061293f5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614ba6565b60405180910390fd5b5b600e60009054906101000a900460ff1615612b475761299c61189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a2357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a7b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b465743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614c5e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bea5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9157600954811115612c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2b90614cf0565b60405180910390fd5b600b54612c408361133d565b82612c4b91906144e4565b1115612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614d5c565b60405180910390fd5b612e2f565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d345750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8357600954811115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614dee565b60405180910390fd5b612e2e565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e2d57600b54612de08361133d565b82612deb91906144e4565b1115612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2390614d5c565b60405180910390fd5b5b5b5b5b5b6000612e3c3061133d565b90506000600a548210159050808015612e615750600c60029054906101000a900460ff165b8015612e7a5750600560149054906101000a900460ff16155b8015612ed05750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f265750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f7c5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc0576001600560146101000a81548160ff021916908315150217905550612fa46136f6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130765750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561308057600090505b600081156132f957601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e357506000601354115b156131b0576131106064613102601354886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050601354601554826131239190614306565b61312d919061438f565b6018600082825461313e91906144e4565b92505081905550601354601654826131569190614306565b613160919061438f565b6019600082825461317191906144e4565b92505081905550601354601454826131899190614306565b613193919061438f565b601760008282546131a491906144e4565b925050819055506132d5565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320b57506000600f54115b156132d457613238606461322a600f54886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600f546011548261324b9190614306565b613255919061438f565b6018600082825461326691906144e4565b92505081905550600f546012548261327e9190614306565b613288919061438f565b6019600082825461329991906144e4565b92505081905550600f54601054826132b19190614306565b6132bb919061438f565b601760008282546132cc91906144e4565b925050819055505b5b60008111156132ea576132e9873083613475565b5b80856132f69190614e0e565b94505b613304878787613475565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90614b3a565b60405180910390fd5b613560838383613a09565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dd90614eb4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461367991906144e4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136dd9190613fe2565b60405180910390a36136f0848484613a0e565b50505050565b60006137013061133d565b9050600060195460175460185461371891906144e4565b61372291906144e4565b90506000808314806137345750600082145b15613741575050506139db565b6014600a546137509190614306565b831115613769576014600a546137669190614306565b92505b60006002836018548661377c9190614306565b613786919061438f565b613790919061438f565b905060006137a78286613a1390919063ffffffff16565b905060004790506137b782613a29565b60006137cc8247613a1390919063ffffffff16565b905060006137f7876137e9601754856139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600061382288613814601954866139dd90919063ffffffff16565b6139f390919063ffffffff16565b905060008183856138339190614e0e565b61383d9190614e0e565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161389d90614f05565b60006040518083038185875af1925050503d80600081146138da576040519150601f19603f3d011682016040523d82523d6000602084013e6138df565b606091505b5050809850506000871180156138f55750600081115b15613942576139048782613c66565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161393993929190614f1a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398890614f05565b60006040518083038185875af1925050503d80600081146139c5576040519150601f19603f3d011682016040523d82523d6000602084013e6139ca565b606091505b505080985050505050505050505050505b565b600081836139eb9190614306565b905092915050565b60008183613a01919061438f565b905092915050565b505050565b505050565b60008183613a219190614e0e565b905092915050565b6000600267ffffffffffffffff811115613a4657613a45614f51565b5b604051908082528060200260200182016040528015613a745781602001602082028036833780820191505090505b5090503081600081518110613a8c57613a8b614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b559190614fc4565b81600181518110613b6957613b68614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bce307f0000000000000000000000000000000000000000000000000000000000000000846124a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c309594939291906150ea565b600060405180830381600087803b158015613c4a57600080fd5b505af1158015613c5e573d6000803e3d6000fd5b505050505050565b613c91307f0000000000000000000000000000000000000000000000000000000000000000846124a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613d1896959493929190615144565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b91906151ba565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d9c578082015181840152602081019050613d81565b83811115613dab576000848401525b50505050565b6000601f19601f8301169050919050565b6000613dcd82613d62565b613dd78185613d6d565b9350613de7818560208601613d7e565b613df081613db1565b840191505092915050565b60006020820190508181036000830152613e158184613dc2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e4d82613e22565b9050919050565b613e5d81613e42565b8114613e6857600080fd5b50565b600081359050613e7a81613e54565b92915050565b6000819050919050565b613e9381613e80565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b60008060408385031215613ecd57613ecc613e1d565b5b6000613edb85828601613e6b565b9250506020613eec85828601613ea1565b9150509250929050565b60008115159050919050565b613f0b81613ef6565b82525050565b6000602082019050613f266000830184613f02565b92915050565b600060208284031215613f4257613f41613e1d565b5b6000613f5084828501613e6b565b91505092915050565b6000819050919050565b6000613f7e613f79613f7484613e22565b613f59565b613e22565b9050919050565b6000613f9082613f63565b9050919050565b6000613fa282613f85565b9050919050565b613fb281613f97565b82525050565b6000602082019050613fcd6000830184613fa9565b92915050565b613fdc81613e80565b82525050565b6000602082019050613ff76000830184613fd3565b92915050565b60006020828403121561401357614012613e1d565b5b600061402184828501613ea1565b91505092915050565b60008060006060848603121561404357614042613e1d565b5b600061405186828701613e6b565b935050602061406286828701613e6b565b925050604061407386828701613ea1565b9150509250925092565b61408681613e42565b82525050565b60006020820190506140a1600083018461407d565b92915050565b600060ff82169050919050565b6140bd816140a7565b82525050565b60006020820190506140d860008301846140b4565b92915050565b6140e781613ef6565b81146140f257600080fd5b50565b600081359050614104816140de565b92915050565b6000806040838503121561412157614120613e1d565b5b600061412f85828601613e6b565b9250506020614140858286016140f5565b9150509250929050565b60008060006060848603121561416357614162613e1d565b5b600061417186828701613ea1565b935050602061418286828701613ea1565b925050604061419386828701613ea1565b9150509250925092565b6000602082840312156141b3576141b2613e1d565b5b60006141c1848285016140f5565b91505092915050565b600080604083850312156141e1576141e0613e1d565b5b60006141ef85828601613e6b565b925050602061420085828601613e6b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425157607f821691505b602082108114156142655761426461420a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a1602083613d6d565b91506142ac8261426b565b602082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431182613e80565b915061431c83613e80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614355576143546142d7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439a82613e80565b91506143a583613e80565b9250826143b5576143b4614360565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061441c602f83613d6d565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144ae602883613d6d565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b60006144ef82613e80565b91506144fa83613e80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561452f5761452e6142d7565b5b828201905092915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614570601d83613d6d565b915061457b8261453a565b602082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614602603983613d6d565b915061460d826145a6565b604082019050919050565b60006020820190508181036000830152614631816145f5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614694602583613d6d565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614726602483613d6d565b9150614731826146ca565b604082019050919050565b6000602082019050818103600083015261475581614719565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147b8603583613d6d565b91506147c38261475c565b604082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061484a603483613d6d565b9150614855826147ee565b604082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148dc602683613d6d565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613d6d565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613d6d565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613d6d565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613d6d565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b90601683613d6d565b9150614b9b82614b5a565b602082019050919050565b60006020820190508181036000830152614bbf81614b83565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c48604983613d6d565b9150614c5382614bc6565b606082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614cda603583613d6d565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d46601383613d6d565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614dd8603683613d6d565b9150614de382614d7c565b604082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b6000614e1982613e80565b9150614e2483613e80565b925082821015614e3757614e366142d7565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e9e602683613d6d565b9150614ea982614e42565b604082019050919050565b60006020820190508181036000830152614ecd81614e91565b9050919050565b600081905092915050565b50565b6000614eef600083614ed4565b9150614efa82614edf565b600082019050919050565b6000614f1082614ee2565b9150819050919050565b6000606082019050614f2f6000830186613fd3565b614f3c6020830185613fd3565b614f496040830184613fd3565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614fbe81613e54565b92915050565b600060208284031215614fda57614fd9613e1d565b5b6000614fe884828501614faf565b91505092915050565b6000819050919050565b600061501661501161500c84614ff1565b613f59565b613e80565b9050919050565b61502681614ffb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506181613e42565b82525050565b60006150738383615058565b60208301905092915050565b6000602082019050919050565b60006150978261502c565b6150a18185615037565b93506150ac83615048565b8060005b838110156150dd5781516150c48882615067565b97506150cf8361507f565b9250506001810190506150b0565b5085935050505092915050565b600060a0820190506150ff6000830188613fd3565b61510c602083018761501d565b818103604083015261511e818661508c565b905061512d606083018561407d565b61513a6080830184613fd3565b9695505050505050565b600060c082019050615159600083018961407d565b6151666020830188613fd3565b615173604083018761501d565b615180606083018661501d565b61518d608083018561407d565b61519a60a0830184613fd3565b979650505050505050565b6000815190506151b481613e8a565b92915050565b6000806000606084860312156151d3576151d2613e1d565b5b60006151e1868287016151a5565b93505060206151f2868287016151a5565b9250506040615203868287016151a5565b915050925092509256fea264697066735822122066da8f592f6c132822e6ceaa28ff1787f4c1e89f32de9aa11cb56bb524cbb05e64736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cbf578063f2fde38b14610cea578063f637434214610d13578063f8b45b0514610d3e57610376565b8063dd62ed3e14610c2c578063e2f4560514610c69578063e884f26014610c9457610376565b8063c876d0b9116100d1578063c876d0b914610b6e578063c8c8ebe414610b99578063d257b34f14610bc4578063d85ba06314610c0157610376565b8063c024666814610af3578063c17b5b8c14610b1c578063c18bc19514610b4557610376565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb14610a25578063aacebbe314610a62578063b62496f514610a8b578063bbc0c74214610ac857610376565b80639fccce3214610992578063a0d82dc5146109bd578063a457c2d7146109e857610376565b8063924de9b7116101a0578063924de9b7146108ea57806395d89b41146109135780639a7a23d61461093e5780639c3b4fdc1461096757610376565b80638da5cb5b146108695780638ea5220f1461089457806392136913146108bf57610376565b80634a62bb65116102a057806373dd858c1161023e57806375f0a8741161021857806375f0a874146107d35780637bce5a04146107fe5780638095d564146108295780638a8c523c1461085257610376565b806373dd858c14610756578063751039fc1461077f5780637571336a146107aa57610376565b80636a486a8e1161027a5780636a486a8e146106ac5780636ddd1713146106d757806370a0823114610702578063715018a61461073f57610376565b80634a62bb65146106195780634ec39ba9146106445780634fbee1931461066f57610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d69565b60405161039d9190613dfb565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613eb6565b610dfb565b6040516103da9190613f11565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f2c565b610e19565b6040516104179190613f11565b60405180910390f35b34801561042c57600080fd5b50610435610e39565b6040516104429190613fb8565b60405180910390f35b34801561045757600080fd5b50610460610e5d565b60405161046d9190613fe2565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613f2c565b610e67565b005b3480156104ab57600080fd5b506104b4610fa3565b6040516104c19190613fe2565b60405180910390f35b3480156104d657600080fd5b506104df610fa9565b6040516104ec9190613fe2565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190613ffd565b610faf565b005b34801561052a57600080fd5b506105456004803603810190610540919061402a565b6110be565b6040516105529190613f11565b60405180910390f35b34801561056757600080fd5b506105706111b6565b60405161057d919061408c565b60405180910390f35b34801561059257600080fd5b5061059b6111bc565b6040516105a891906140c3565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613eb6565b6111c5565b6040516105e59190613f11565b60405180910390f35b3480156105fa57600080fd5b50610603611271565b604051610610919061408c565b60405180910390f35b34801561062557600080fd5b5061062e611295565b60405161063b9190613f11565b60405180910390f35b34801561065057600080fd5b506106596112a8565b604051610666919061408c565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613f2c565b6112ce565b6040516106a39190613f11565b60405180910390f35b3480156106b857600080fd5b506106c1611324565b6040516106ce9190613fe2565b60405180910390f35b3480156106e357600080fd5b506106ec61132a565b6040516106f99190613f11565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613f2c565b61133d565b6040516107369190613fe2565b60405180910390f35b34801561074b57600080fd5b50610754611385565b005b34801561076257600080fd5b5061077d60048036038101906107789190613f2c565b61140d565b005b34801561078b57600080fd5b50610794611549565b6040516107a19190613f11565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061410a565b6115e9565b005b3480156107df57600080fd5b506107e86116c0565b6040516107f5919061408c565b60405180910390f35b34801561080a57600080fd5b506108136116e6565b6040516108209190613fe2565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b919061414a565b6116ec565b005b34801561085e57600080fd5b506108676117eb565b005b34801561087557600080fd5b5061087e61189f565b60405161088b919061408c565b60405180910390f35b3480156108a057600080fd5b506108a96118c9565b6040516108b6919061408c565b60405180910390f35b3480156108cb57600080fd5b506108d46118ef565b6040516108e19190613fe2565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061419d565b6118f5565b005b34801561091f57600080fd5b5061092861198e565b6040516109359190613dfb565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061410a565b611a20565b005b34801561097357600080fd5b5061097c611b39565b6040516109899190613fe2565b60405180910390f35b34801561099e57600080fd5b506109a7611b3f565b6040516109b49190613fe2565b60405180910390f35b3480156109c957600080fd5b506109d2611b45565b6040516109df9190613fe2565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613eb6565b611b4b565b604051610a1c9190613f11565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613eb6565b611c36565b604051610a599190613f11565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190613f2c565b611c54565b005b348015610a9757600080fd5b50610ab26004803603810190610aad9190613f2c565b611d90565b604051610abf9190613f11565b60405180910390f35b348015610ad457600080fd5b50610add611db0565b604051610aea9190613f11565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b15919061410a565b611dc3565b005b348015610b2857600080fd5b50610b436004803603810190610b3e919061414a565b611ee8565b005b348015610b5157600080fd5b50610b6c6004803603810190610b679190613ffd565b611fe7565b005b348015610b7a57600080fd5b50610b836120f6565b604051610b909190613f11565b60405180910390f35b348015610ba557600080fd5b50610bae612109565b604051610bbb9190613fe2565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190613ffd565b61210f565b604051610bf89190613f11565b60405180910390f35b348015610c0d57600080fd5b50610c16612264565b604051610c239190613fe2565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e91906141ca565b61226a565b604051610c609190613fe2565b60405180910390f35b348015610c7557600080fd5b50610c7e6122f1565b604051610c8b9190613fe2565b60405180910390f35b348015610ca057600080fd5b50610ca96122f7565b604051610cb69190613f11565b60405180910390f35b348015610ccb57600080fd5b50610cd4612397565b604051610ce19190613fe2565b60405180910390f35b348015610cf657600080fd5b50610d116004803603810190610d0c9190613f2c565b61239d565b005b348015610d1f57600080fd5b50610d28612495565b604051610d359190613fe2565b60405180910390f35b348015610d4a57600080fd5b50610d5361249b565b604051610d609190613fe2565b60405180910390f35b606060038054610d7890614239565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490614239565b8015610df15780601f10610dc657610100808354040283529160200191610df1565b820191906000526020600020905b815481529060010190602001808311610dd457829003601f168201915b5050505050905090565b6000610e0f610e086124a1565b84846124a9565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e6f6124a1565b73ffffffffffffffffffffffffffffffffffffffff16610e8d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda906142b7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fb76124a1565b73ffffffffffffffffffffffffffffffffffffffff16610fd561189f565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906142b7565b60405180910390fd5b670de0b6b3a76400006103e86001611041610e5d565b61104b9190614306565b611055919061438f565b61105f919061438f565b8110156110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890614432565b60405180910390fd5b670de0b6b3a7640000816110b59190614306565b60098190555050565b60006110cb848484612674565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111166124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906144c4565b60405180910390fd5b6111aa856111a26124a1565b8584036124a9565b60019150509392505050565b61dead81565b60006012905090565b60006112676111d26124a1565b8484600160006111e06124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126291906144e4565b6124a9565b6001905092915050565b7f00000000000000000000000089cebe6bc5f241a04abcc9b5138a29b80f5aa88a81565b600c60009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138d6124a1565b73ffffffffffffffffffffffffffffffffffffffff166113ab61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906142b7565b60405180910390fd5b61140b600061330e565b565b6114156124a1565b73ffffffffffffffffffffffffffffffffffffffff1661143361189f565b73ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906142b7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006115536124a1565b73ffffffffffffffffffffffffffffffffffffffff1661157161189f565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906142b7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115f16124a1565b73ffffffffffffffffffffffffffffffffffffffff1661160f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c906142b7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6116f46124a1565b73ffffffffffffffffffffffffffffffffffffffff1661171261189f565b73ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f906142b7565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461179091906144e4565b61179a91906144e4565b600f81905550600b600f5411156117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd90614586565b60405180910390fd5b505050565b6117f36124a1565b73ffffffffffffffffffffffffffffffffffffffff1661181161189f565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906142b7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118fd6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661191b61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611968906142b7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461199d90614239565b80601f01602080910402602001604051908101604052809291908181526020018280546119c990614239565b8015611a165780601f106119eb57610100808354040283529160200191611a16565b820191906000526020600020905b8154815290600101906020018083116119f957829003601f168201915b5050505050905090565b611a286124a1565b73ffffffffffffffffffffffffffffffffffffffff16611a4661189f565b73ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906142b7565b60405180910390fd5b7f00000000000000000000000089cebe6bc5f241a04abcc9b5138a29b80f5aa88a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614618565b60405180910390fd5b611b3582826133d4565b5050565b60125481565b60195481565b60165481565b60008060016000611b5a6124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906146aa565b60405180910390fd5b611c2b611c226124a1565b858584036124a9565b600191505092915050565b6000611c4a611c436124a1565b8484612674565b6001905092915050565b611c5c6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611c7a61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906142b7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611dcb6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611de961189f565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e36906142b7565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611edc9190613f11565b60405180910390a25050565b611ef06124a1565b73ffffffffffffffffffffffffffffffffffffffff16611f0e61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906142b7565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611f8c91906144e4565b611f9691906144e4565b60138190555060636013541115611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990614586565b60405180910390fd5b505050565b611fef6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661200d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142b7565b60405180910390fd5b670de0b6b3a76400006103e86005612079610e5d565b6120839190614306565b61208d919061438f565b612097919061438f565b8110156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d09061473c565b60405180910390fd5b670de0b6b3a7640000816120ed9190614306565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b60006121196124a1565b73ffffffffffffffffffffffffffffffffffffffff1661213761189f565b73ffffffffffffffffffffffffffffffffffffffff161461218d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612184906142b7565b60405180910390fd5b620186a0600161219b610e5d565b6121a59190614306565b6121af919061438f565b8210156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906147ce565b60405180910390fd5b6103e860056121fe610e5d565b6122089190614306565b612212919061438f565b821115612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614860565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006123016124a1565b73ffffffffffffffffffffffffffffffffffffffff1661231f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c906142b7565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123a56124a1565b73ffffffffffffffffffffffffffffffffffffffff166123c361189f565b73ffffffffffffffffffffffffffffffffffffffff1614612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906142b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612480906148f2565b60405180910390fd5b6124928161330e565b50565b60155481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126679190613fe2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90614b3a565b60405180910390fd5b600081141561276e5761276983836000613475565b613309565b600c60009054906101000a900460ff1615612e315761278b61189f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127f957506127c961189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561286c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128855750600560149054906101000a900460ff16155b15612e3057600c60019054906101000a900460ff1661297f57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061293f5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614ba6565b60405180910390fd5b5b600e60009054906101000a900460ff1615612b475761299c61189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a2357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a7b57507f00000000000000000000000089cebe6bc5f241a04abcc9b5138a29b80f5aa88a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b465743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614c5e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bea5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9157600954811115612c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2b90614cf0565b60405180910390fd5b600b54612c408361133d565b82612c4b91906144e4565b1115612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614d5c565b60405180910390fd5b612e2f565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d345750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8357600954811115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614dee565b60405180910390fd5b612e2e565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e2d57600b54612de08361133d565b82612deb91906144e4565b1115612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2390614d5c565b60405180910390fd5b5b5b5b5b5b6000612e3c3061133d565b90506000600a548210159050808015612e615750600c60029054906101000a900460ff165b8015612e7a5750600560149054906101000a900460ff16155b8015612ed05750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f265750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f7c5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc0576001600560146101000a81548160ff021916908315150217905550612fa46136f6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130765750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561308057600090505b600081156132f957601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e357506000601354115b156131b0576131106064613102601354886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050601354601554826131239190614306565b61312d919061438f565b6018600082825461313e91906144e4565b92505081905550601354601654826131569190614306565b613160919061438f565b6019600082825461317191906144e4565b92505081905550601354601454826131899190614306565b613193919061438f565b601760008282546131a491906144e4565b925050819055506132d5565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320b57506000600f54115b156132d457613238606461322a600f54886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600f546011548261324b9190614306565b613255919061438f565b6018600082825461326691906144e4565b92505081905550600f546012548261327e9190614306565b613288919061438f565b6019600082825461329991906144e4565b92505081905550600f54601054826132b19190614306565b6132bb919061438f565b601760008282546132cc91906144e4565b925050819055505b5b60008111156132ea576132e9873083613475565b5b80856132f69190614e0e565b94505b613304878787613475565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90614b3a565b60405180910390fd5b613560838383613a09565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dd90614eb4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461367991906144e4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136dd9190613fe2565b60405180910390a36136f0848484613a0e565b50505050565b60006137013061133d565b9050600060195460175460185461371891906144e4565b61372291906144e4565b90506000808314806137345750600082145b15613741575050506139db565b6014600a546137509190614306565b831115613769576014600a546137669190614306565b92505b60006002836018548661377c9190614306565b613786919061438f565b613790919061438f565b905060006137a78286613a1390919063ffffffff16565b905060004790506137b782613a29565b60006137cc8247613a1390919063ffffffff16565b905060006137f7876137e9601754856139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600061382288613814601954866139dd90919063ffffffff16565b6139f390919063ffffffff16565b905060008183856138339190614e0e565b61383d9190614e0e565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161389d90614f05565b60006040518083038185875af1925050503d80600081146138da576040519150601f19603f3d011682016040523d82523d6000602084013e6138df565b606091505b5050809850506000871180156138f55750600081115b15613942576139048782613c66565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161393993929190614f1a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398890614f05565b60006040518083038185875af1925050503d80600081146139c5576040519150601f19603f3d011682016040523d82523d6000602084013e6139ca565b606091505b505080985050505050505050505050505b565b600081836139eb9190614306565b905092915050565b60008183613a01919061438f565b905092915050565b505050565b505050565b60008183613a219190614e0e565b905092915050565b6000600267ffffffffffffffff811115613a4657613a45614f51565b5b604051908082528060200260200182016040528015613a745781602001602082028036833780820191505090505b5090503081600081518110613a8c57613a8b614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b559190614fc4565b81600181518110613b6957613b68614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bce307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c309594939291906150ea565b600060405180830381600087803b158015613c4a57600080fd5b505af1158015613c5e573d6000803e3d6000fd5b505050505050565b613c91307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613d1896959493929190615144565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b91906151ba565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d9c578082015181840152602081019050613d81565b83811115613dab576000848401525b50505050565b6000601f19601f8301169050919050565b6000613dcd82613d62565b613dd78185613d6d565b9350613de7818560208601613d7e565b613df081613db1565b840191505092915050565b60006020820190508181036000830152613e158184613dc2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e4d82613e22565b9050919050565b613e5d81613e42565b8114613e6857600080fd5b50565b600081359050613e7a81613e54565b92915050565b6000819050919050565b613e9381613e80565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b60008060408385031215613ecd57613ecc613e1d565b5b6000613edb85828601613e6b565b9250506020613eec85828601613ea1565b9150509250929050565b60008115159050919050565b613f0b81613ef6565b82525050565b6000602082019050613f266000830184613f02565b92915050565b600060208284031215613f4257613f41613e1d565b5b6000613f5084828501613e6b565b91505092915050565b6000819050919050565b6000613f7e613f79613f7484613e22565b613f59565b613e22565b9050919050565b6000613f9082613f63565b9050919050565b6000613fa282613f85565b9050919050565b613fb281613f97565b82525050565b6000602082019050613fcd6000830184613fa9565b92915050565b613fdc81613e80565b82525050565b6000602082019050613ff76000830184613fd3565b92915050565b60006020828403121561401357614012613e1d565b5b600061402184828501613ea1565b91505092915050565b60008060006060848603121561404357614042613e1d565b5b600061405186828701613e6b565b935050602061406286828701613e6b565b925050604061407386828701613ea1565b9150509250925092565b61408681613e42565b82525050565b60006020820190506140a1600083018461407d565b92915050565b600060ff82169050919050565b6140bd816140a7565b82525050565b60006020820190506140d860008301846140b4565b92915050565b6140e781613ef6565b81146140f257600080fd5b50565b600081359050614104816140de565b92915050565b6000806040838503121561412157614120613e1d565b5b600061412f85828601613e6b565b9250506020614140858286016140f5565b9150509250929050565b60008060006060848603121561416357614162613e1d565b5b600061417186828701613ea1565b935050602061418286828701613ea1565b925050604061419386828701613ea1565b9150509250925092565b6000602082840312156141b3576141b2613e1d565b5b60006141c1848285016140f5565b91505092915050565b600080604083850312156141e1576141e0613e1d565b5b60006141ef85828601613e6b565b925050602061420085828601613e6b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425157607f821691505b602082108114156142655761426461420a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a1602083613d6d565b91506142ac8261426b565b602082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431182613e80565b915061431c83613e80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614355576143546142d7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439a82613e80565b91506143a583613e80565b9250826143b5576143b4614360565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061441c602f83613d6d565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144ae602883613d6d565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b60006144ef82613e80565b91506144fa83613e80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561452f5761452e6142d7565b5b828201905092915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614570601d83613d6d565b915061457b8261453a565b602082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614602603983613d6d565b915061460d826145a6565b604082019050919050565b60006020820190508181036000830152614631816145f5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614694602583613d6d565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614726602483613d6d565b9150614731826146ca565b604082019050919050565b6000602082019050818103600083015261475581614719565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147b8603583613d6d565b91506147c38261475c565b604082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061484a603483613d6d565b9150614855826147ee565b604082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148dc602683613d6d565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613d6d565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613d6d565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613d6d565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613d6d565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b90601683613d6d565b9150614b9b82614b5a565b602082019050919050565b60006020820190508181036000830152614bbf81614b83565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c48604983613d6d565b9150614c5382614bc6565b606082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614cda603583613d6d565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d46601383613d6d565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614dd8603683613d6d565b9150614de382614d7c565b604082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b6000614e1982613e80565b9150614e2483613e80565b925082821015614e3757614e366142d7565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e9e602683613d6d565b9150614ea982614e42565b604082019050919050565b60006020820190508181036000830152614ecd81614e91565b9050919050565b600081905092915050565b50565b6000614eef600083614ed4565b9150614efa82614edf565b600082019050919050565b6000614f1082614ee2565b9150819050919050565b6000606082019050614f2f6000830186613fd3565b614f3c6020830185613fd3565b614f496040830184613fd3565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614fbe81613e54565b92915050565b600060208284031215614fda57614fd9613e1d565b5b6000614fe884828501614faf565b91505092915050565b6000819050919050565b600061501661501161500c84614ff1565b613f59565b613e80565b9050919050565b61502681614ffb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506181613e42565b82525050565b60006150738383615058565b60208301905092915050565b6000602082019050919050565b60006150978261502c565b6150a18185615037565b93506150ac83615048565b8060005b838110156150dd5781516150c48882615067565b97506150cf8361507f565b9250506001810190506150b0565b5085935050505092915050565b600060a0820190506150ff6000830188613fd3565b61510c602083018761501d565b818103604083015261511e818661508c565b905061512d606083018561407d565b61513a6080830184613fd3565b9695505050505050565b600060c082019050615159600083018961407d565b6151666020830188613fd3565b615173604083018761501d565b615180606083018661501d565b61518d608083018561407d565b61519a60a0830184613fd3565b979650505050505050565b6000815190506151b481613e8a565b92915050565b6000806000606084860312156151d3576151d2613e1d565b5b60006151e1868287016151a5565b93505060206151f2868287016151a5565b9250506040615203868287016151a5565b915050925092509256fea264697066735822122066da8f592f6c132822e6ceaa28ff1787f4c1e89f32de9aa11cb56bb524cbb05e64736f6c634300080a0033

Deployed Bytecode Sourcemap

15113:16188:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3724:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15194:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3131:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23174:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16225:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16185;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20511:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3901:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15297:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3030:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4401:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15252:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15605:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15457:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23513:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16040:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15685:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3247:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;932:103;;;;;;;;;;;;;:::i;:::-;;23339:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19619:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21058:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15389:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15933;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21429:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19455:112;;;;;;;;;;;;;:::i;:::-;;709:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15426:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16075:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21321:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2918:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22450:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16007:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16265:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16151:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4624:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3382:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22958:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16432:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15645:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22260:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21840:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20794:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15851:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15490:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20006:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15899:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3565:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15532:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19801:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15970:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1043:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16113:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15572:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:100;2864:13;2897:5;2890:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:100;:::o;3724:169::-;3807:4;3824:39;3833:12;:10;:12::i;:::-;3847:7;3856:6;3824:8;:39::i;:::-;3881:4;3874:11;;3724:169;;;;:::o;16360:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15194:51::-;;;:::o;3131:108::-;3192:7;3219:12;;3212:19;;3131:108;:::o;23174:157::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23281:9:::1;;;;;;;;;;;23253:38;;23270:9;23253:38;;;;;;;;;;;;23314:9;23302;;:21;;;;;;;;;;;;;;;;;;23174:157:::0;:::o;16225:33::-;;;;:::o;16185:::-;;;;:::o;20511:275::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20648:4:::1;20640;20635:1;20619:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20618:26;;;;:::i;:::-;20617:35;;;;:::i;:::-;20607:6;:45;;20585:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;20771:6;20761;:17;;;;:::i;:::-;20738:20;:40;;;;20511:275:::0;:::o;3901:492::-;4041:4;4058:36;4068:6;4076:9;4087:6;4058:9;:36::i;:::-;4107:24;4134:11;:19;4146:6;4134:19;;;;;;;;;;;;;;;:33;4154:12;:10;:12::i;:::-;4134:33;;;;;;;;;;;;;;;;4107:60;;4206:6;4186:16;:26;;4178:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4293:57;4302:6;4310:12;:10;:12::i;:::-;4343:6;4324:16;:25;4293:8;:57::i;:::-;4381:4;4374:11;;;3901:492;;;;;:::o;15297:53::-;15343:6;15297:53;:::o;3030:93::-;3088:5;3113:2;3106:9;;3030:93;:::o;4401:215::-;4489:4;4506:80;4515:12;:10;:12::i;:::-;4529:7;4575:10;4538:11;:25;4550:12;:10;:12::i;:::-;4538:25;;;;;;;;;;;;;;;:34;4564:7;4538:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4506:8;:80::i;:::-;4604:4;4597:11;;4401:215;;;;:::o;15252:38::-;;;:::o;15605:33::-;;;;;;;;;;;;;:::o;15457:24::-;;;;;;;;;;;;;:::o;23513:126::-;23579:4;23603:19;:28;23623:7;23603:28;;;;;;;;;;;;;;;;;;;;;;;;;23596:35;;23513:126;;;:::o;16040:28::-;;;;:::o;15685:31::-;;;;;;;;;;;;;:::o;3247:127::-;3321:7;3348:9;:18;3358:7;3348:18;;;;;;;;;;;;;;;;3341:25;;3247:127;;;:::o;932:103::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;997:30:::1;1024:1;997:18;:30::i;:::-;932:103::o:0;23339:166::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23452:9:::1;;;;;;;;;;;23421:41;;23438:12;23421:41;;;;;;;;;;;;23485:12;23473:9;;:24;;;;;;;;;;;;;;;;;;23339:166:::0;:::o;19619:121::-;19671:4;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19705:5:::1;19688:14;;:22;;;;;;;;;;;;;;;;;;19728:4;19721:11;;19619:121:::0;:::o;21058:167::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21213:4:::1;21171:31;:39;21203:6;21171:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21058:167:::0;;:::o;15389:30::-;;;;;;;;;;;;;:::o;15933:::-;;;;:::o;21429:403::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21597:13:::1;21579:15;:31;;;;21639:13;21621:15;:31;;;;21675:7;21663:9;:19;;;;21744:9;;21726:15;;21708;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;21693:12;:60;;;;21788:2;21772:12;;:18;;21764:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21429:403:::0;;;:::o;19455:112::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19526:4:::1;19510:13;;:20;;;;;;;;;;;;;;;;;;19555:4;19541:11;;:18;;;;;;;;;;;;;;;;;;19455:112::o:0;709:87::-;755:7;782:6;;;;;;;;;;;775:13;;709:87;:::o;15426:24::-;;;;;;;;;;;;;:::o;16075:31::-;;;;:::o;21321:100::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21406:7:::1;21392:11;;:21;;;;;;;;;;;;;;;;;;21321:100:::0;:::o;2918:104::-;2974:13;3007:7;3000:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2918:104;:::o;22450:304::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22594:13:::1;22586:21;;:4;:21;;;;22564:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;22705:41;22734:4;22740:5;22705:28;:41::i;:::-;22450:304:::0;;:::o;16007:24::-;;;;:::o;16265:27::-;;;;:::o;16151:25::-;;;;:::o;4624:413::-;4717:4;4734:24;4761:11;:25;4773:12;:10;:12::i;:::-;4761:25;;;;;;;;;;;;;;;:34;4787:7;4761:34;;;;;;;;;;;;;;;;4734:61;;4834:15;4814:16;:35;;4806:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4927:67;4936:12;:10;:12::i;:::-;4950:7;4978:15;4959:16;:34;4927:8;:67::i;:::-;5025:4;5018:11;;;4624:413;;;;:::o;3382:175::-;3468:4;3485:42;3495:12;:10;:12::i;:::-;3509:9;3520:6;3485:9;:42::i;:::-;3545:4;3538:11;;3382:175;;;;:::o;22958:208::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23095:15:::1;;;;;;;;;;;23052:59;;23075:18;23052:59;;;;;;;;;;;;23140:18;23122:15;;:36;;;;;;;;;;;;;;;;;;22958:208:::0;:::o;16432:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15645:33::-;;;;;;;;;;;;;:::o;22260:182::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22376:8:::1;22345:19;:28;22365:7;22345:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22416:7;22400:34;;;22425:8;22400:34;;;;;;:::i;:::-;;;;;;;;22260:182:::0;;:::o;21840:412::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22010:13:::1;21991:16;:32;;;;22053:13;22034:16;:32;;;;22090:7;22077:10;:20;;;;22162:10;;22143:16;;22124;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;22108:13;:64;;;;22208:2;22191:13;;:19;;22183:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21840:412:::0;;;:::o;20794:256::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20934:4:::1;20926;20921:1;20905:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20904:26;;;;:::i;:::-;20903:35;;;;:::i;:::-;20893:6;:45;;20871:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21035:6;21025;:17;;;;:::i;:::-;21013:9;:29;;;;20794:256:::0;:::o;15851:39::-;;;;;;;;;;;;;:::o;15490:35::-;;;;:::o;20006:497::-;20114:4;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20193:6:::1;20188:1;20172:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20171:28;;;;:::i;:::-;20158:9;:41;;20136:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20348:4;20343:1;20327:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20326:26;;;;:::i;:::-;20313:9;:39;;20291:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20464:9;20443:18;:30;;;;20491:4;20484:11;;20006:497:::0;;;:::o;15899:27::-;;;;:::o;3565:151::-;3654:7;3681:11;:18;3693:5;3681:18;;;;;;;;;;;;;;;:27;3700:7;3681:27;;;;;;;;;;;;;;;;3674:34;;3565:151;;;;:::o;15532:33::-;;;;:::o;19801:135::-;19861:4;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19901:5:::1;19878:20;;:28;;;;;;;;;;;;;;;;;;19924:4;19917:11;;19801:135:::0;:::o;15970:30::-;;;;:::o;1043:201::-;855:12;:10;:12::i;:::-;844:23;;:7;:5;:7::i;:::-;:23;;;836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1152:1:::1;1132:22;;:8;:22;;;;1124:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1208:28;1227:8;1208:18;:28::i;:::-;1043:201:::0;:::o;16113:31::-;;;;:::o;15572:24::-;;;;:::o;255:98::-;308:7;335:10;328:17;;255:98;:::o;6792:380::-;6945:1;6928:19;;:5;:19;;;;6920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7026:1;7007:21;;:7;:21;;;;6999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7110:6;7080:11;:18;7092:5;7080:18;;;;;;;;;;;;;;;:27;7099:7;7080:27;;;;;;;;;;;;;;;:36;;;;7148:7;7132:32;;7141:5;7132:32;;;7157:6;7132:32;;;;;;:::i;:::-;;;;;;;;6792:380;;;:::o;23697:4717::-;23845:1;23829:18;;:4;:18;;;;23821:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23922:1;23908:16;;:2;:16;;;;23900:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23991:1;23981:6;:11;23977:93;;;24009:28;24025:4;24031:2;24035:1;24009:15;:28::i;:::-;24052:7;;23977:93;24086:14;;;;;;;;;;;24082:2487;;;24147:7;:5;:7::i;:::-;24139:15;;:4;:15;;;;:49;;;;;24181:7;:5;:7::i;:::-;24175:13;;:2;:13;;;;24139:49;:86;;;;;24223:1;24209:16;;:2;:16;;;;24139:86;:128;;;;;24260:6;24246:21;;:2;:21;;;;24139:128;:158;;;;;24289:8;;;;;;;;;;;24288:9;24139:158;24117:2441;;;24337:13;;;;;;;;;;;24332:223;;24409:19;:25;24429:4;24409:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24438:19;:23;24458:2;24438:23;;;;;;;;;;;;;;;;;;;;;;;;;24409:52;24375:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24332:223;24711:20;;;;;;;;;;;24707:641;;;24792:7;:5;:7::i;:::-;24786:13;;:2;:13;;;;:72;;;;;24842:15;24828:30;;:2;:30;;;;24786:72;:129;;;;;24901:13;24887:28;;:2;:28;;;;24786:129;24756:573;;;25079:12;25004:28;:39;25033:9;25004:39;;;;;;;;;;;;;;;;:87;24966:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;25293:12;25251:28;:39;25280:9;25251:39;;;;;;;;;;;;;;;:54;;;;24756:573;24707:641;25422:25;:31;25448:4;25422:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25479:31;:35;25511:2;25479:35;;;;;;;;;;;;;;;;;;;;;;;;;25478:36;25422:92;25396:1147;;;25601:20;;25591:6;:30;;25557:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25809:9;;25792:13;25802:2;25792:9;:13::i;:::-;25783:6;:22;;;;:::i;:::-;:35;;25749:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25396:1147;;;25987:25;:29;26013:2;25987:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;26042:31;:37;26074:4;26042:37;;;;;;;;;;;;;;;;;;;;;;;;;26041:38;25987:92;25961:582;;;26166:20;;26156:6;:30;;26122:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25961:582;;;26323:31;:35;26355:2;26323:35;;;;;;;;;;;;;;;;;;;;;;;;;26318:225;;26443:9;;26426:13;26436:2;26426:9;:13::i;:::-;26417:6;:22;;;;:::i;:::-;:35;;26383:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26318:225;25961:582;25396:1147;24117:2441;24082:2487;26581:28;26612:24;26630:4;26612:9;:24::i;:::-;26581:55;;26649:12;26688:18;;26664:20;:42;;26649:57;;26737:7;:35;;;;;26761:11;;;;;;;;;;;26737:35;:61;;;;;26790:8;;;;;;;;;;;26789:9;26737:61;:110;;;;;26816:25;:31;26842:4;26816:31;;;;;;;;;;;;;;;;;;;;;;;;;26815:32;26737:110;:153;;;;;26865:19;:25;26885:4;26865:25;;;;;;;;;;;;;;;;;;;;;;;;;26864:26;26737:153;:194;;;;;26908:19;:23;26928:2;26908:23;;;;;;;;;;;;;;;;;;;;;;;;;26907:24;26737:194;26719:326;;;26969:4;26958:8;;:15;;;;;;;;;;;;;;;;;;26990:10;:8;:10::i;:::-;27028:5;27017:8;;:16;;;;;;;;;;;;;;;;;;26719:326;27057:12;27073:8;;;;;;;;;;;27072:9;27057:24;;27183:19;:25;27203:4;27183:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27212:19;:23;27232:2;27212:23;;;;;;;;;;;;;;;;;;;;;;;;;27183:52;27179:100;;;27262:5;27252:15;;27179:100;27291:12;27396:7;27392:969;;;27448:25;:29;27474:2;27448:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27497:1;27481:13;;:17;27448:50;27444:768;;;27526:34;27556:3;27526:25;27537:13;;27526:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27519:41;;27629:13;;27609:16;;27602:4;:23;;;;:::i;:::-;27601:41;;;;:::i;:::-;27579:18;;:63;;;;;;;:::i;:::-;;;;;;;;27699:13;;27685:10;;27678:4;:17;;;;:::i;:::-;27677:35;;;;:::i;:::-;27661:12;;:51;;;;;;;:::i;:::-;;;;;;;;27781:13;;27761:16;;27754:4;:23;;;;:::i;:::-;27753:41;;;;:::i;:::-;27731:18;;:63;;;;;;;:::i;:::-;;;;;;;;27444:768;;;27856:25;:31;27882:4;27856:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27906:1;27891:12;;:16;27856:51;27852:360;;;27935:33;27964:3;27935:24;27946:12;;27935:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27928:40;;28036:12;;28017:15;;28010:4;:22;;;;:::i;:::-;28009:39;;;;:::i;:::-;27987:18;;:61;;;;;;;:::i;:::-;;;;;;;;28104:12;;28091:9;;28084:4;:16;;;;:::i;:::-;28083:33;;;;:::i;:::-;28067:12;;:49;;;;;;;:::i;:::-;;;;;;;;28184:12;;28165:15;;28158:4;:22;;;;:::i;:::-;28157:39;;;;:::i;:::-;28135:18;;:61;;;;;;;:::i;:::-;;;;;;;;27852:360;27444:768;28239:1;28232:4;:8;28228:91;;;28261:42;28277:4;28291;28298;28261:15;:42::i;:::-;28228:91;28345:4;28335:14;;;;;:::i;:::-;;;27392:969;28373:33;28389:4;28395:2;28399:6;28373:15;:33::i;:::-;23810:4604;;;;23697:4717;;;;:::o;1252:191::-;1326:16;1345:6;;;;;;;;;;;1326:25;;1371:8;1362:6;;:17;;;;;;;;;;;;;;;;;;1426:8;1395:40;;1416:8;1395:40;;;;;;;;;;;;1315:128;1252:191;:::o;22762:188::-;22879:5;22845:25;:31;22871:4;22845:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22936:5;22902:40;;22930:4;22902:40;;;;;;;;;;;;22762:188;;:::o;5045:733::-;5203:1;5185:20;;:6;:20;;;;5177:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5287:1;5266:23;;:9;:23;;;;5258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5342:47;5363:6;5371:9;5382:6;5342:20;:47::i;:::-;5402:21;5426:9;:17;5436:6;5426:17;;;;;;;;;;;;;;;;5402:41;;5479:6;5462:13;:23;;5454:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5600:6;5584:13;:22;5564:9;:17;5574:6;5564:17;;;;;;;;;;;;;;;:42;;;;5652:6;5628:9;:20;5638:9;5628:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5693:9;5676:35;;5685:6;5676:35;;;5704:6;5676:35;;;;;;:::i;:::-;;;;;;;;5724:46;5744:6;5752:9;5763:6;5724:19;:46::i;:::-;5166:612;5045:733;;;:::o;29542:1756::-;29581:23;29607:24;29625:4;29607:9;:24::i;:::-;29581:50;;29642:25;29738:12;;29704:18;;29670;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;29642:108;;29761:12;29809:1;29790:15;:20;:46;;;;29835:1;29814:17;:22;29790:46;29786:85;;;29853:7;;;;;29786:85;29926:2;29905:18;;:23;;;;:::i;:::-;29887:15;:41;29883:115;;;29984:2;29963:18;;:23;;;;:::i;:::-;29945:41;;29883:115;30059:23;30172:1;30139:17;30104:18;;30086:15;:36;;;;:::i;:::-;30085:71;;;;:::i;:::-;:88;;;;:::i;:::-;30059:114;;30184:26;30213:36;30233:15;30213;:19;;:36;;;;:::i;:::-;30184:65;;30262:25;30290:21;30262:49;;30324:36;30341:18;30324:16;:36::i;:::-;30373:18;30394:44;30420:17;30394:21;:25;;:44;;;;:::i;:::-;30373:65;;30451:23;30477:81;30530:17;30477:34;30492:18;;30477:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;30451:107;;30569:17;30589:51;30622:17;30589:28;30604:12;;30589:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30569:71;;30653:23;30710:9;30692:15;30679:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;30653:66;;30753:1;30732:18;:22;;;;30786:1;30765:18;:22;;;;30813:1;30798:12;:16;;;;30849:9;;;;;;;;;;;30841:23;;30872:9;30841:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30827:59;;;;;30921:1;30903:15;:19;:42;;;;;30944:1;30926:15;:19;30903:42;30899:278;;;30962:46;30975:15;30992;30962:12;:46::i;:::-;31028:137;31061:18;31098:15;31132:18;;31028:137;;;;;;;;:::i;:::-;;;;;;;;30899:278;31211:15;;;;;;;;;;;31203:29;;31254:21;31203:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31189:101;;;;;29570:1728;;;;;;;;;;29542:1756;:::o;8798:98::-;8856:7;8887:1;8883;:5;;;;:::i;:::-;8876:12;;8798:98;;;;:::o;8904:::-;8962:7;8993:1;8989;:5;;;;:::i;:::-;8982:12;;8904:98;;;;:::o;7180:125::-;;;;:::o;7313:124::-;;;;:::o;8692:98::-;8750:7;8781:1;8777;:5;;;;:::i;:::-;8770:12;;8692:98;;;;:::o;28422:589::-;28548:21;28586:1;28572:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28548:40;;28617:4;28599;28604:1;28599:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28643:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28633:4;28638:1;28633:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28678:62;28695:4;28710:15;28728:11;28678:8;:62::i;:::-;28779:15;:66;;;28860:11;28886:1;28930:4;28957;28977:15;28779:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28477:534;28422:589;:::o;29019:515::-;29167:62;29184:4;29199:15;29217:11;29167:8;:62::i;:::-;29272:15;:31;;;29311:9;29344:4;29364:11;29390:1;29433;29476:9;;;;;;;;;;;29500:15;29272:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29019:515;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:227::-;12661:34;12657:1;12649:6;12645:14;12638:58;12730:10;12725:2;12717:6;12713:15;12706:35;12521:227;:::o;12754:366::-;12896:3;12917:67;12981:2;12976:3;12917:67;:::i;:::-;12910:74;;12993:93;13082:3;12993:93;:::i;:::-;13111:2;13106:3;13102:12;13095:19;;12754:366;;;:::o;13126:419::-;13292:4;13330:2;13319:9;13315:18;13307:26;;13379:9;13373:4;13369:20;13365:1;13354:9;13350:17;13343:47;13407:131;13533:4;13407:131;:::i;:::-;13399:139;;13126:419;;;:::o;13551:305::-;13591:3;13610:20;13628:1;13610:20;:::i;:::-;13605:25;;13644:20;13662:1;13644:20;:::i;:::-;13639:25;;13798:1;13730:66;13726:74;13723:1;13720:81;13717:107;;;13804:18;;:::i;:::-;13717:107;13848:1;13845;13841:9;13834:16;;13551:305;;;;:::o;13862:179::-;14002:31;13998:1;13990:6;13986:14;13979:55;13862:179;:::o;14047:366::-;14189:3;14210:67;14274:2;14269:3;14210:67;:::i;:::-;14203:74;;14286:93;14375:3;14286:93;:::i;:::-;14404:2;14399:3;14395:12;14388:19;;14047:366;;;:::o;14419:419::-;14585:4;14623:2;14612:9;14608:18;14600:26;;14672:9;14666:4;14662:20;14658:1;14647:9;14643:17;14636:47;14700:131;14826:4;14700:131;:::i;:::-;14692:139;;14419:419;;;:::o;14844:244::-;14984:34;14980:1;14972:6;14968:14;14961:58;15053:27;15048:2;15040:6;15036:15;15029:52;14844:244;:::o;15094:366::-;15236:3;15257:67;15321:2;15316:3;15257:67;:::i;:::-;15250:74;;15333:93;15422:3;15333:93;:::i;:::-;15451:2;15446:3;15442:12;15435:19;;15094:366;;;:::o;15466:419::-;15632:4;15670:2;15659:9;15655:18;15647:26;;15719:9;15713:4;15709:20;15705:1;15694:9;15690:17;15683:47;15747:131;15873:4;15747:131;:::i;:::-;15739:139;;15466:419;;;:::o;15891:224::-;16031:34;16027:1;16019:6;16015:14;16008:58;16100:7;16095:2;16087:6;16083:15;16076:32;15891:224;:::o;16121:366::-;16263:3;16284:67;16348:2;16343:3;16284:67;:::i;:::-;16277:74;;16360:93;16449:3;16360:93;:::i;:::-;16478:2;16473:3;16469:12;16462:19;;16121:366;;;:::o;16493:419::-;16659:4;16697:2;16686:9;16682:18;16674:26;;16746:9;16740:4;16736:20;16732:1;16721:9;16717:17;16710:47;16774:131;16900:4;16774:131;:::i;:::-;16766:139;;16493:419;;;:::o;16918:223::-;17058:34;17054:1;17046:6;17042:14;17035:58;17127:6;17122:2;17114:6;17110:15;17103:31;16918:223;:::o;17147:366::-;17289:3;17310:67;17374:2;17369:3;17310:67;:::i;:::-;17303:74;;17386:93;17475:3;17386:93;:::i;:::-;17504:2;17499:3;17495:12;17488:19;;17147:366;;;:::o;17519:419::-;17685:4;17723:2;17712:9;17708:18;17700:26;;17772:9;17766:4;17762:20;17758:1;17747:9;17743:17;17736:47;17800:131;17926:4;17800:131;:::i;:::-;17792:139;;17519:419;;;:::o;17944:240::-;18084:34;18080:1;18072:6;18068:14;18061:58;18153:23;18148:2;18140:6;18136:15;18129:48;17944:240;:::o;18190:366::-;18332:3;18353:67;18417:2;18412:3;18353:67;:::i;:::-;18346:74;;18429:93;18518:3;18429:93;:::i;:::-;18547:2;18542:3;18538:12;18531:19;;18190:366;;;:::o;18562:419::-;18728:4;18766:2;18755:9;18751:18;18743:26;;18815:9;18809:4;18805:20;18801:1;18790:9;18786:17;18779:47;18843:131;18969:4;18843:131;:::i;:::-;18835:139;;18562:419;;;:::o;18987:239::-;19127:34;19123:1;19115:6;19111:14;19104:58;19196:22;19191:2;19183:6;19179:15;19172:47;18987:239;:::o;19232:366::-;19374:3;19395:67;19459:2;19454:3;19395:67;:::i;:::-;19388:74;;19471:93;19560:3;19471:93;:::i;:::-;19589:2;19584:3;19580:12;19573:19;;19232:366;;;:::o;19604:419::-;19770:4;19808:2;19797:9;19793:18;19785:26;;19857:9;19851:4;19847:20;19843:1;19832:9;19828:17;19821:47;19885:131;20011:4;19885:131;:::i;:::-;19877:139;;19604:419;;;:::o;20029:225::-;20169:34;20165:1;20157:6;20153:14;20146:58;20238:8;20233:2;20225:6;20221:15;20214:33;20029:225;:::o;20260:366::-;20402:3;20423:67;20487:2;20482:3;20423:67;:::i;:::-;20416:74;;20499:93;20588:3;20499:93;:::i;:::-;20617:2;20612:3;20608:12;20601:19;;20260:366;;;:::o;20632:419::-;20798:4;20836:2;20825:9;20821:18;20813:26;;20885:9;20879:4;20875:20;20871:1;20860:9;20856:17;20849:47;20913:131;21039:4;20913:131;:::i;:::-;20905:139;;20632:419;;;:::o;21057:223::-;21197:34;21193:1;21185:6;21181:14;21174:58;21266:6;21261:2;21253:6;21249:15;21242:31;21057:223;:::o;21286:366::-;21428:3;21449:67;21513:2;21508:3;21449:67;:::i;:::-;21442:74;;21525:93;21614:3;21525:93;:::i;:::-;21643:2;21638:3;21634:12;21627:19;;21286:366;;;:::o;21658:419::-;21824:4;21862:2;21851:9;21847:18;21839:26;;21911:9;21905:4;21901:20;21897:1;21886:9;21882:17;21875:47;21939:131;22065:4;21939:131;:::i;:::-;21931:139;;21658:419;;;:::o;22083:221::-;22223:34;22219:1;22211:6;22207:14;22200:58;22292:4;22287:2;22279:6;22275:15;22268:29;22083:221;:::o;22310:366::-;22452:3;22473:67;22537:2;22532:3;22473:67;:::i;:::-;22466:74;;22549:93;22638:3;22549:93;:::i;:::-;22667:2;22662:3;22658:12;22651:19;;22310:366;;;:::o;22682:419::-;22848:4;22886:2;22875:9;22871:18;22863:26;;22935:9;22929:4;22925:20;22921:1;22910:9;22906:17;22899:47;22963:131;23089:4;22963:131;:::i;:::-;22955:139;;22682:419;;;:::o;23107:224::-;23247:34;23243:1;23235:6;23231:14;23224:58;23316:7;23311:2;23303:6;23299:15;23292:32;23107:224;:::o;23337:366::-;23479:3;23500:67;23564:2;23559:3;23500:67;:::i;:::-;23493:74;;23576:93;23665:3;23576:93;:::i;:::-;23694:2;23689:3;23685:12;23678:19;;23337:366;;;:::o;23709:419::-;23875:4;23913:2;23902:9;23898:18;23890:26;;23962:9;23956:4;23952:20;23948:1;23937:9;23933:17;23926:47;23990:131;24116:4;23990:131;:::i;:::-;23982:139;;23709:419;;;:::o;24134:222::-;24274:34;24270:1;24262:6;24258:14;24251:58;24343:5;24338:2;24330:6;24326:15;24319:30;24134:222;:::o;24362:366::-;24504:3;24525:67;24589:2;24584:3;24525:67;:::i;:::-;24518:74;;24601:93;24690:3;24601:93;:::i;:::-;24719:2;24714:3;24710:12;24703:19;;24362:366;;;:::o;24734:419::-;24900:4;24938:2;24927:9;24923:18;24915:26;;24987:9;24981:4;24977:20;24973:1;24962:9;24958:17;24951:47;25015:131;25141:4;25015:131;:::i;:::-;25007:139;;24734:419;;;:::o;25159:172::-;25299:24;25295:1;25287:6;25283:14;25276:48;25159:172;:::o;25337:366::-;25479:3;25500:67;25564:2;25559:3;25500:67;:::i;:::-;25493:74;;25576:93;25665:3;25576:93;:::i;:::-;25694:2;25689:3;25685:12;25678:19;;25337:366;;;:::o;25709:419::-;25875:4;25913:2;25902:9;25898:18;25890:26;;25962:9;25956:4;25952:20;25948:1;25937:9;25933:17;25926:47;25990:131;26116:4;25990:131;:::i;:::-;25982:139;;25709:419;;;:::o;26134:297::-;26274:34;26270:1;26262:6;26258:14;26251:58;26343:34;26338:2;26330:6;26326:15;26319:59;26412:11;26407:2;26399:6;26395:15;26388:36;26134:297;:::o;26437:366::-;26579:3;26600:67;26664:2;26659:3;26600:67;:::i;:::-;26593:74;;26676:93;26765:3;26676:93;:::i;:::-;26794:2;26789:3;26785:12;26778:19;;26437:366;;;:::o;26809:419::-;26975:4;27013:2;27002:9;26998:18;26990:26;;27062:9;27056:4;27052:20;27048:1;27037:9;27033:17;27026:47;27090:131;27216:4;27090:131;:::i;:::-;27082:139;;26809:419;;;:::o;27234:240::-;27374:34;27370:1;27362:6;27358:14;27351:58;27443:23;27438:2;27430:6;27426:15;27419:48;27234:240;:::o;27480:366::-;27622:3;27643:67;27707:2;27702:3;27643:67;:::i;:::-;27636:74;;27719:93;27808:3;27719:93;:::i;:::-;27837:2;27832:3;27828:12;27821:19;;27480:366;;;:::o;27852:419::-;28018:4;28056:2;28045:9;28041:18;28033:26;;28105:9;28099:4;28095:20;28091:1;28080:9;28076:17;28069:47;28133:131;28259:4;28133:131;:::i;:::-;28125:139;;27852:419;;;:::o;28277:169::-;28417:21;28413:1;28405:6;28401:14;28394:45;28277:169;:::o;28452:366::-;28594:3;28615:67;28679:2;28674:3;28615:67;:::i;:::-;28608:74;;28691:93;28780:3;28691:93;:::i;:::-;28809:2;28804:3;28800:12;28793:19;;28452:366;;;:::o;28824:419::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29077:9;29071:4;29067:20;29063:1;29052:9;29048:17;29041:47;29105:131;29231:4;29105:131;:::i;:::-;29097:139;;28824:419;;;:::o;29249:241::-;29389:34;29385:1;29377:6;29373:14;29366:58;29458:24;29453:2;29445:6;29441:15;29434:49;29249:241;:::o;29496:366::-;29638:3;29659:67;29723:2;29718:3;29659:67;:::i;:::-;29652:74;;29735:93;29824:3;29735:93;:::i;:::-;29853:2;29848:3;29844:12;29837:19;;29496:366;;;:::o;29868:419::-;30034:4;30072:2;30061:9;30057:18;30049:26;;30121:9;30115:4;30111:20;30107:1;30096:9;30092:17;30085:47;30149:131;30275:4;30149:131;:::i;:::-;30141:139;;29868:419;;;:::o;30293:191::-;30333:4;30353:20;30371:1;30353:20;:::i;:::-;30348:25;;30387:20;30405:1;30387:20;:::i;:::-;30382:25;;30426:1;30423;30420:8;30417:34;;;30431:18;;:::i;:::-;30417:34;30476:1;30473;30469:9;30461:17;;30293:191;;;;:::o;30490:225::-;30630:34;30626:1;30618:6;30614:14;30607:58;30699:8;30694:2;30686:6;30682:15;30675:33;30490:225;:::o;30721:366::-;30863:3;30884:67;30948:2;30943:3;30884:67;:::i;:::-;30877:74;;30960:93;31049:3;30960:93;:::i;:::-;31078:2;31073:3;31069:12;31062:19;;30721:366;;;:::o;31093:419::-;31259:4;31297:2;31286:9;31282:18;31274:26;;31346:9;31340:4;31336:20;31332:1;31321:9;31317:17;31310:47;31374:131;31500:4;31374:131;:::i;:::-;31366:139;;31093:419;;;:::o;31518:147::-;31619:11;31656:3;31641:18;;31518:147;;;;:::o;31671:114::-;;:::o;31791:398::-;31950:3;31971:83;32052:1;32047:3;31971:83;:::i;:::-;31964:90;;32063:93;32152:3;32063:93;:::i;:::-;32181:1;32176:3;32172:11;32165:18;;31791:398;;;:::o;32195:379::-;32379:3;32401:147;32544:3;32401:147;:::i;:::-;32394:154;;32565:3;32558:10;;32195:379;;;:::o;32580:442::-;32729:4;32767:2;32756:9;32752:18;32744:26;;32780:71;32848:1;32837:9;32833:17;32824:6;32780:71;:::i;:::-;32861:72;32929:2;32918:9;32914:18;32905:6;32861:72;:::i;:::-;32943;33011:2;33000:9;32996:18;32987:6;32943:72;:::i;:::-;32580:442;;;;;;:::o;33028:180::-;33076:77;33073:1;33066:88;33173:4;33170:1;33163:15;33197:4;33194:1;33187:15;33214:180;33262:77;33259:1;33252:88;33359:4;33356:1;33349:15;33383:4;33380:1;33373:15;33400:143;33457:5;33488:6;33482:13;33473:22;;33504:33;33531:5;33504:33;:::i;:::-;33400:143;;;;:::o;33549:351::-;33619:6;33668:2;33656:9;33647:7;33643:23;33639:32;33636:119;;;33674:79;;:::i;:::-;33636:119;33794:1;33819:64;33875:7;33866:6;33855:9;33851:22;33819:64;:::i;:::-;33809:74;;33765:128;33549:351;;;;:::o;33906:85::-;33951:7;33980:5;33969:16;;33906:85;;;:::o;33997:158::-;34055:9;34088:61;34106:42;34115:32;34141:5;34115:32;:::i;:::-;34106:42;:::i;:::-;34088:61;:::i;:::-;34075:74;;33997:158;;;:::o;34161:147::-;34256:45;34295:5;34256:45;:::i;:::-;34251:3;34244:58;34161:147;;:::o;34314:114::-;34381:6;34415:5;34409:12;34399:22;;34314:114;;;:::o;34434:184::-;34533:11;34567:6;34562:3;34555:19;34607:4;34602:3;34598:14;34583:29;;34434:184;;;;:::o;34624:132::-;34691:4;34714:3;34706:11;;34744:4;34739:3;34735:14;34727:22;;34624:132;;;:::o;34762:108::-;34839:24;34857:5;34839:24;:::i;:::-;34834:3;34827:37;34762:108;;:::o;34876:179::-;34945:10;34966:46;35008:3;35000:6;34966:46;:::i;:::-;35044:4;35039:3;35035:14;35021:28;;34876:179;;;;:::o;35061:113::-;35131:4;35163;35158:3;35154:14;35146:22;;35061:113;;;:::o;35210:732::-;35329:3;35358:54;35406:5;35358:54;:::i;:::-;35428:86;35507:6;35502:3;35428:86;:::i;:::-;35421:93;;35538:56;35588:5;35538:56;:::i;:::-;35617:7;35648:1;35633:284;35658:6;35655:1;35652:13;35633:284;;;35734:6;35728:13;35761:63;35820:3;35805:13;35761:63;:::i;:::-;35754:70;;35847:60;35900:6;35847:60;:::i;:::-;35837:70;;35693:224;35680:1;35677;35673:9;35668:14;;35633:284;;;35637:14;35933:3;35926:10;;35334:608;;;35210:732;;;;:::o;35948:831::-;36211:4;36249:3;36238:9;36234:19;36226:27;;36263:71;36331:1;36320:9;36316:17;36307:6;36263:71;:::i;:::-;36344:80;36420:2;36409:9;36405:18;36396:6;36344:80;:::i;:::-;36471:9;36465:4;36461:20;36456:2;36445:9;36441:18;36434:48;36499:108;36602:4;36593:6;36499:108;:::i;:::-;36491:116;;36617:72;36685:2;36674:9;36670:18;36661:6;36617:72;:::i;:::-;36699:73;36767:3;36756:9;36752:19;36743:6;36699:73;:::i;:::-;35948:831;;;;;;;;:::o;36785:807::-;37034:4;37072:3;37061:9;37057:19;37049:27;;37086:71;37154:1;37143:9;37139:17;37130:6;37086:71;:::i;:::-;37167:72;37235:2;37224:9;37220:18;37211:6;37167:72;:::i;:::-;37249:80;37325:2;37314:9;37310:18;37301:6;37249:80;:::i;:::-;37339;37415:2;37404:9;37400:18;37391:6;37339:80;:::i;:::-;37429:73;37497:3;37486:9;37482:19;37473:6;37429:73;:::i;:::-;37512;37580:3;37569:9;37565:19;37556:6;37512:73;:::i;:::-;36785:807;;;;;;;;;:::o;37598:143::-;37655:5;37686:6;37680:13;37671:22;;37702:33;37729:5;37702:33;:::i;:::-;37598:143;;;;:::o;37747:663::-;37835:6;37843;37851;37900:2;37888:9;37879:7;37875:23;37871:32;37868:119;;;37906:79;;:::i;:::-;37868:119;38026:1;38051:64;38107:7;38098:6;38087:9;38083:22;38051:64;:::i;:::-;38041:74;;37997:128;38164:2;38190:64;38246:7;38237:6;38226:9;38222:22;38190:64;:::i;:::-;38180:74;;38135:129;38303:2;38329:64;38385:7;38376:6;38365:9;38361:22;38329:64;:::i;:::-;38319:74;;38274:129;37747:663;;;;;:::o

Swarm Source

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