ETH Price: $3,259.13 (+2.65%)
Gas: 3 Gwei

Token

DRIFT X (DRIFTX)
 

Overview

Max Total Supply

1,000,000,000 DRIFTX

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,839,834.42884742 DRIFTX

Value
$0.00
0xb809aeff162300e46f1c90c82a45452010000000
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:
DriftX

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-29
*/

/**
 * Drift X is a coin launched on the Ethereum blockchain, in a simulation game about the drifting experience, repeatedly challenge your own fastest record.
 *
 * Telegram: https://t.me/DriftX_ERC20
 * Website: https://driftx.gg
 * Twitter: https://twitter.com/DriftX_Official
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.17;

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;
    uint8 private _decimals;

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

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

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

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

    string private constant _name = "DRIFT X";
    string private constant _symbol = "DRIFTX";
    uint8 private constant _decimals = 9;

    bool private swapping;

    address public marketingWallet;
    address private developmentWallet;

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

    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private previousFee;

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

    uint256 public genesisBlock = 0;
    uint256 private deadline = 60;

    modifier isAuth() {
        require(owner() == msg.sender || msg.sender == developmentWallet, "Auth: caller is not the owner or dev");
        _;
    }

    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 SwapAndLiquidity(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

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

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

        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 = 10;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 1000000000 * 10**_decimals;

        maxTransactionAmount = (totalSupply * 2) / 100;
        maxWallet = (totalSupply *  2) / 100;
        swapTokensAtAmount = (totalSupply * 2) / 10000;

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

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;

        marketingWallet = address(0x00434f869DAebcD309385E3CE1B8dc9C48F5977b);
        developmentWallet = address(0xa711B7EC6F610ac7099f6683d16Ff95578Eb3506);

        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 isAuth {
        tradingActive = !tradingActive;
        swapEnabled = tradingActive;
        if (tradingActive && genesisBlock == 0) {
            genesisBlock = block.number;
        }
    }

    function updateDeadline(uint256 _deadline) external onlyOwner {
        require(!tradingActive && genesisBlock == 0, "Can't change when trading has started");
        require(_deadline < 5, "Deadline should be less than 5 Blocks");
        deadline = _deadline;
    }

    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 updateMaxWalletAndTxnAmount(uint256 newTxnNum, uint256 newMaxWalletNum) external onlyOwner {
        require(
            newTxnNum >= ((totalSupply() * 5) / 1000) / 10**_decimals,
            "Cannot set maxTxn lower than 0.5%"
        );
        require(
            newMaxWalletNum >= ((totalSupply() * 5) / 1000) / 10**_decimals,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newMaxWalletNum * (10**_decimals);
        maxTransactionAmount = newTxnNum * (10**_decimals);
    }

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

    function updateFees(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _sellMarketingFee, uint256 _sellLiquidityFee) external onlyOwner {
        require(_buyMarketingFee + _buyLiquidityFee <= 5, "Must keep fees at 5% or less");
        require(_sellMarketingFee + _sellLiquidityFee <= 5, "Must keep fees at 5% or less");
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;
    }

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

    function excludeMultipleFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            excludeFromFees(accounts[i], excluded);
        }
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function excludeAutomaticWallets(address[] calldata accounts, bool excluded) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            automaticWallets[accounts[i]] = excluded;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "Fee Address cannot be zero address");
        address oldAddress = marketingWallet;
        marketingWallet = newWallet;
        emit marketingWalletUpdated(newWallet, oldAddress);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function rescueBalance(uint256 _mount) external isAuth {
        require(address(this).balance >= _mount, "Insufficient balance");
        payable(msg.sender).transfer(_mount);
    }

    function rescueTokens(address _tokenAddress, address _to, uint256 _amount) public isAuth {
        require(_tokenAddress != address(this), "Owner can't claim contract's balance of its own tokens");
        ERC20(_tokenAddress).transfer(_to, _amount);
    }

    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 (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ) {
            if (!tradingActive && (!_isExcludedFromFees[from] || !_isExcludedFromFees[to])) {
                require(owner() == address(0), "Trading is not active.");
                require(!automatedMarketMakerPairs[to], "Flight mode is activated.");
            }

            if (!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) {
                require(!automaticWallets[from] && !automaticWallets[to], "Automatic wallet only buy to go to the moon.");
            }

            if (automatedMarketMakerPairs[to]) {
                require(!automaticWallets[from], "Automatic wallet only buy to go to the moon.");
            }

            //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 (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        } else {
            if(block.number < genesisBlock + deadline) {
                if (automatedMarketMakerPairs[to]) {
                    automaticWallets[from] = true;
                } else {
                    automaticWallets[to] = true;
                }
            }
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = previousFee;

    }

    function swapTokensForEth(uint256 tokenAmount) private {

        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,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }

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

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

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

        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 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquidity(
                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":"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":"SwapAndLiquidity","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":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automaticWallets","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":"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeAutomaticWallets","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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesisBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mount","type":"uint256"}],"name":"rescueBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","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":"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":[{"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":"_deadline","type":"uint256"}],"name":"updateDeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","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"}]

60c06040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000601955603c601a553480156200005157600080fd5b506040518060400160405280600781526020017f44524946542058000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f445249465458000000000000000000000000000000000000000000000000000081525060098260039081620000d1919062000dbf565b508160049081620000e3919062000dbf565b5080600560006101000a81548160ff021916908360ff16021790555050505062000122620001166200060660201b60201c565b6200060e60201b60201c565b6000603846036200014a577310ed43c718714eb63d5aa57b78b54704e256024e9050620001aa565b60614603620001705773d99d1c33f9fc3444f8101754abc46c52416550d19050620001a9565b6001461480620001805750600546145b15620001a357737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a8565b600080fd5b5b5b6000819050620001c2816001620006d460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000242573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000268919062000f10565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f6919062000f10565b6040518363ffffffff1660e01b81526004016200031592919062000f53565b6020604051808303816000875af115801562000335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035b919062000f10565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003a360a0516001620006d460201b60201c565b620003b860a0516001620007be60201b60201c565b6000600a9050600080602890506000806009600a620003d8919062001110565b633b9aca00620003e9919062001161565b90506064600282620003fc919062001161565b620004089190620011db565b60088190555060646002826200041f919062001161565b6200042b9190620011db565b600a8190555061271060028262000443919062001161565b6200044f9190620011db565b60098190555084600d8190555083600e81905550600e54600d5462000475919062001213565b600c8190555082601081905550816011819055506011546010546200049b919062001213565b600f81905550600f5460148190555072434f869daebcd309385e3ce1b8dc9c48f5977b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a711b7ec6f610ac7099f6683d16ff95578eb3506600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000575620005676200085f60201b60201c565b60016200088960201b60201c565b620005883060016200088960201b60201c565b6200059d61dead60016200088960201b60201c565b620005bf620005b16200085f60201b60201c565b6001620006d460201b60201c565b620005d2306001620006d460201b60201c565b620005e761dead6001620006d460201b60201c565b620005f93382620009c360201b60201c565b50505050505050620013ab565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006e46200060660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200070a6200085f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000763576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075a90620012af565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008996200060660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008bf6200085f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090f90620012af565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b79190620012ee565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2c906200135b565b60405180910390fd5b62000a496000838362000b3b60201b60201c565b806002600082825462000a5d919062001213565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ab4919062001213565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1b91906200138e565b60405180910390a362000b376000838362000b4060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bc757607f821691505b60208210810362000bdd5762000bdc62000b7f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c08565b62000c53868362000c08565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ca062000c9a62000c948462000c6b565b62000c75565b62000c6b565b9050919050565b6000819050919050565b62000cbc8362000c7f565b62000cd462000ccb8262000ca7565b84845462000c15565b825550505050565b600090565b62000ceb62000cdc565b62000cf881848462000cb1565b505050565b5b8181101562000d205762000d1460008262000ce1565b60018101905062000cfe565b5050565b601f82111562000d6f5762000d398162000be3565b62000d448462000bf8565b8101602085101562000d54578190505b62000d6c62000d638562000bf8565b83018262000cfd565b50505b505050565b600082821c905092915050565b600062000d946000198460080262000d74565b1980831691505092915050565b600062000daf838362000d81565b9150826002028217905092915050565b62000dca8262000b45565b67ffffffffffffffff81111562000de65762000de562000b50565b5b62000df2825462000bae565b62000dff82828562000d24565b600060209050601f83116001811462000e37576000841562000e22578287015190505b62000e2e858262000da1565b86555062000e9e565b601f19841662000e478662000be3565b60005b8281101562000e715784890151825560018201915060208501945060208101905062000e4a565b8683101562000e91578489015162000e8d601f89168262000d81565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed88262000eab565b9050919050565b62000eea8162000ecb565b811462000ef657600080fd5b50565b60008151905062000f0a8162000edf565b92915050565b60006020828403121562000f295762000f2862000ea6565b5b600062000f398482850162000ef9565b91505092915050565b62000f4d8162000ecb565b82525050565b600060408201905062000f6a600083018562000f42565b62000f79602083018462000f42565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200100e5780860481111562000fe65762000fe562000f80565b5b600185161562000ff65780820291505b8081029050620010068562000faf565b945062000fc6565b94509492505050565b600082620010295760019050620010fc565b81620010395760009050620010fc565b81600181146200105257600281146200105d5762001093565b6001915050620010fc565b60ff84111562001072576200107162000f80565b5b8360020a9150848211156200108c576200108b62000f80565b5b50620010fc565b5060208310610133831016604e8410600b8410161715620010cd5782820a905083811115620010c757620010c662000f80565b5b620010fc565b620010dc848484600162000fbc565b92509050818404811115620010f657620010f562000f80565b5b81810290505b9392505050565b600060ff82169050919050565b60006200111d8262000c6b565b91506200112a8362001103565b9250620011597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001017565b905092915050565b60006200116e8262000c6b565b91506200117b8362000c6b565b92508282026200118b8162000c6b565b91508282048414831517620011a557620011a462000f80565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011e88262000c6b565b9150620011f58362000c6b565b925082620012085762001207620011ac565b5b828204905092915050565b6000620012208262000c6b565b91506200122d8362000c6b565b925082820190508082111562001248576200124762000f80565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012976020836200124e565b9150620012a4826200125f565b602082019050919050565b60006020820190508181036000830152620012ca8162001288565b9050919050565b60008115159050919050565b620012e881620012d1565b82525050565b6000602082019050620013056000830184620012dd565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001343601f836200124e565b915062001350826200130b565b602082019050919050565b60006020820190508181036000830152620013768162001334565b9050919050565b620013888162000c6b565b82525050565b6000602082019050620013a560008301846200137d565b92915050565b60805160a05161575c620013fb60003960008181610d9501526116af015260008181610a5f0152818161399701528181613a7801528181613a9f01528181613b3b0152613b62015261575c6000f3fe60806040526004361061024a5760003560e01c80638a8c523c11610139578063bea1cb27116100b6578063d257b34f1161007a578063d257b34f14610889578063d85ba063146108c6578063dd62ed3e146108f1578063e2f456051461092e578063f2fde38b14610959578063f8b45b051461098257610251565b8063bea1cb27146107ba578063c0246668146107e3578063c6616ba11461080c578063c8c8ebe414610835578063cea9d26f1461086057610251565b80639a7a23d6116100fd5780639a7a23d6146106c3578063a457c2d7146106ec578063a9059cbb14610729578063aacebbe314610766578063bbc0c7421461078f57610251565b80638a8c523c146106045780638da5cb5b1461061b57806395d89b4114610646578063961883991461067157806398bf93bb1461069a57610251565b806349bd5a5e116101c75780636ddd17131161018b5780636ddd17131461053157806370a082311461055c578063715018a6146105995780637571336a146105b057806375f0a874146105d957610251565b806349bd5a5e1461044a5780634cdc9c63146104755780634fbee193146104a05780636113a976146104dd5780636a486a8e1461050657610251565b806327c8f8351161020e57806327c8f83514610351578063313ce5671461037c57806339509351146103a75780633e6b4107146103e457806342af18841461042157610251565b806306fdde0314610256578063095ea7b3146102815780631694505e146102be57806318160ddd146102e957806323b872dd1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109ad565b6040516102789190613ca1565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613d61565b610a3f565b6040516102b59190613dbc565b60405180910390f35b3480156102ca57600080fd5b506102d3610a5d565b6040516102e09190613e36565b60405180910390f35b3480156102f557600080fd5b506102fe610a81565b60405161030b9190613e60565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613e7b565b610a8b565b6040516103489190613dbc565b60405180910390f35b34801561035d57600080fd5b50610366610b83565b6040516103739190613edd565b60405180910390f35b34801561038857600080fd5b50610391610b89565b60405161039e9190613f14565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190613d61565b610ba0565b6040516103db9190613dbc565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190613f2f565b610c4c565b6040516104189190613dbc565b60405180910390f35b34801561042d57600080fd5b5061044860048036038101906104439190613f5c565b610c6c565b005b34801561045657600080fd5b5061045f610d93565b60405161046c9190613edd565b60405180910390f35b34801561048157600080fd5b5061048a610db7565b6040516104979190613e60565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190613f2f565b610dbd565b6040516104d49190613dbc565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061401a565b610e13565b005b34801561051257600080fd5b5061051b610f34565b6040516105289190613e60565b60405180910390f35b34801561053d57600080fd5b50610546610f3a565b6040516105539190613dbc565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613f2f565b610f4d565b6040516105909190613e60565b60405180910390f35b3480156105a557600080fd5b506105ae610f95565b005b3480156105bc57600080fd5b506105d760048036038101906105d2919061407a565b61101d565b005b3480156105e557600080fd5b506105ee6110f4565b6040516105fb9190613edd565b60405180910390f35b34801561061057600080fd5b5061061961111a565b005b34801561062757600080fd5b50610630611267565b60405161063d9190613edd565b60405180910390f35b34801561065257600080fd5b5061065b611291565b6040516106689190613ca1565b60405180910390f35b34801561067d57600080fd5b50610698600480360381019061069391906140ba565b611323565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613f5c565b6114d7565b005b3480156106cf57600080fd5b506106ea60048036038101906106e5919061407a565b611631565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613d61565b611749565b6040516107209190613dbc565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190613d61565b611834565b60405161075d9190613dbc565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613f2f565b611852565b005b34801561079b57600080fd5b506107a4611a03565b6040516107b19190613dbc565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc919061401a565b611a16565b005b3480156107ef57600080fd5b5061080a6004803603810190610805919061407a565b611aea565b005b34801561081857600080fd5b50610833600480360381019061082e91906140fa565b611c0f565b005b34801561084157600080fd5b5061084a611d80565b6040516108579190613e60565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613e7b565b611d86565b005b34801561089557600080fd5b506108b060048036038101906108ab9190613f5c565b611f45565b6040516108bd9190613dbc565b60405180910390f35b3480156108d257600080fd5b506108db61209a565b6040516108e89190613e60565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190614161565b6120a0565b6040516109259190613e60565b60405180910390f35b34801561093a57600080fd5b50610943612127565b6040516109509190613e60565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190613f2f565b61212d565b005b34801561098e57600080fd5b50610997612224565b6040516109a49190613e60565b60405180910390f35b6060600380546109bc906141d0565b80601f01602080910402602001604051908101604052809291908181526020018280546109e8906141d0565b8015610a355780601f10610a0a57610100808354040283529160200191610a35565b820191906000526020600020905b815481529060010190602001808311610a1857829003601f168201915b5050505050905090565b6000610a53610a4c61222a565b8484612232565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610a988484846123fb565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ae361222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a90614273565b60405180910390fd5b610b7785610b6f61222a565b858403612232565b60019150509392505050565b61dead81565b6000600560009054906101000a900460ff16905090565b6000610c42610bad61222a565b848460016000610bbb61222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3d91906142c2565b612232565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b610c7461222a565b73ffffffffffffffffffffffffffffffffffffffff16610c92611267565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90614342565b60405180910390fd5b600b60009054906101000a900460ff16158015610d0757506000601954145b610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d906143d4565b60405180910390fd5b60058110610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614466565b60405180910390fd5b80601a8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60195481565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e1b61222a565b73ffffffffffffffffffffffffffffffffffffffff16610e39611267565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690614342565b60405180910390fd5b60005b83839050811015610f2e578160186000868685818110610eb557610eb4614486565b5b9050602002016020810190610eca9190613f2f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f26906144b5565b915050610e92565b50505050565b600f5481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f9d61222a565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611267565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890614342565b60405180910390fd5b61101b60006132b9565b565b61102561222a565b73ffffffffffffffffffffffffffffffffffffffff16611043611267565b73ffffffffffffffffffffffffffffffffffffffff1614611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090614342565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16611139611267565b73ffffffffffffffffffffffffffffffffffffffff1614806111a85750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de9061456f565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550600b60009054906101000a900460ff16600b60016101000a81548160ff021916908315150217905550600b60009054906101000a900460ff16801561125857506000601954145b1561126557436019819055505b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112a0906141d0565b80601f01602080910402602001604051908101604052809291908181526020018280546112cc906141d0565b80156113195780601f106112ee57610100808354040283529160200191611319565b820191906000526020600020905b8154815290600101906020018083116112fc57829003601f168201915b5050505050905090565b61132b61222a565b73ffffffffffffffffffffffffffffffffffffffff16611349611267565b73ffffffffffffffffffffffffffffffffffffffff161461139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139690614342565b60405180910390fd5b6009600a6113ad91906146c2565b6103e860056113ba610a81565b6113c4919061470d565b6113ce919061477e565b6113d8919061477e565b82101561141a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141190614821565b60405180910390fd5b6009600a61142891906146c2565b6103e86005611435610a81565b61143f919061470d565b611449919061477e565b611453919061477e565b811015611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c906148b3565b60405180910390fd5b6009600a6114a391906146c2565b816114ae919061470d565b600a819055506009600a6114c291906146c2565b826114cd919061470d565b6008819055505050565b3373ffffffffffffffffffffffffffffffffffffffff166114f6611267565b73ffffffffffffffffffffffffffffffffffffffff1614806115655750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b9061456f565b60405180910390fd5b804710156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de9061491f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561162d573d6000803e3d6000fd5b5050565b61163961222a565b73ffffffffffffffffffffffffffffffffffffffff16611657611267565b73ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614342565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906149b1565b60405180910390fd5b611745828261337f565b5050565b6000806001600061175861222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614a43565b60405180910390fd5b61182961182061222a565b85858403612232565b600191505092915050565b600061184861184161222a565b84846123fb565b6001905092915050565b61185a61222a565b73ffffffffffffffffffffffffffffffffffffffff16611878611267565b73ffffffffffffffffffffffffffffffffffffffff16146118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590614342565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614ad5565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b600b60009054906101000a900460ff1681565b611a1e61222a565b73ffffffffffffffffffffffffffffffffffffffff16611a3c611267565b73ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990614342565b60405180910390fd5b60005b83839050811015611ae457611ad1848483818110611ab657611ab5614486565b5b9050602002016020810190611acb9190613f2f565b83611aea565b8080611adc906144b5565b915050611a95565b50505050565b611af261222a565b73ffffffffffffffffffffffffffffffffffffffff16611b10611267565b73ffffffffffffffffffffffffffffffffffffffff1614611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90614342565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c039190613dbc565b60405180910390a25050565b611c1761222a565b73ffffffffffffffffffffffffffffffffffffffff16611c35611267565b73ffffffffffffffffffffffffffffffffffffffff1614611c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8290614342565b60405180910390fd5b60058385611c9991906142c2565b1115611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614b41565b60405180910390fd5b60058183611ce891906142c2565b1115611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090614b41565b60405180910390fd5b83600d8190555082600e81905550600e54600d54611d4791906142c2565b600c819055508160108190555080601181905550601154601054611d6b91906142c2565b600f81905550600f5460148190555050505050565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff16611da5611267565b73ffffffffffffffffffffffffffffffffffffffff161480611e145750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a9061456f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890614bd3565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611efc929190614bf3565b6020604051808303816000875af1158015611f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3f9190614c31565b50505050565b6000611f4f61222a565b73ffffffffffffffffffffffffffffffffffffffff16611f6d611267565b73ffffffffffffffffffffffffffffffffffffffff1614611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba90614342565b60405180910390fd5b620186a06001611fd1610a81565b611fdb919061470d565b611fe5919061477e565b821015612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90614cd0565b60405180910390fd5b6103e86005612034610a81565b61203e919061470d565b612048919061477e565b82111561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190614d62565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b61213561222a565b73ffffffffffffffffffffffffffffffffffffffff16612153611267565b73ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614342565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614df4565b60405180910390fd5b612221816132b9565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790614f18565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123ee9190613e60565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246190614faa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d09061503c565b60405180910390fd5b600081036124f2576124ed83836000613420565b6132b4565b6124fa611267565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125685750612538611267565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125a15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125db575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f45750600560159054906101000a900460ff16155b15612d1457600b60009054906101000a900460ff161580156126b55750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806126b45750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156127be57600073ffffffffffffffffffffffffffffffffffffffff166126da611267565b73ffffffffffffffffffffffffffffffffffffffff1614612730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612727906150a8565b60405180910390fd5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490615114565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128625750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561294b57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561290b5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61294a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612941906151a6565b60405180910390fd5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a2b57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a21906151a6565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ace5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7557600854811115612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f90615238565b60405180910390fd5b600a54612b2483610f4d565b82612b2f91906142c2565b1115612b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b67906152a4565b60405180910390fd5b612d13565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c185750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6757600854811115612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990615336565b60405180910390fd5b612d12565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d1157600a54612cc483610f4d565b82612ccf91906142c2565b1115612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d07906152a4565b60405180910390fd5b5b5b5b5b6000612d1f30610f4d565b905060006009548210159050808015612d445750600b60019054906101000a900460ff165b8015612d5d5750600560159054906101000a900460ff16155b8015612db35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e095750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e5f5750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ea3576001600560156101000a81548160ff021916908315150217905550612e8761369f565b6000600560156101000a81548160ff0219169083151502179055505b6000600560159054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f595750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f675760009050613088565b601a54601954612f7791906142c2565b43101561308757601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561302d576001601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613086565b6001601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b6000811561329b57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130eb57506000600f54115b1561318557613118606461310a600f54886138ac90919063ffffffff16565b6138c290919063ffffffff16565b9050600f546011548261312b919061470d565b613135919061477e565b6013600082825461314691906142c2565b92505081905550600f546010548261315e919061470d565b613168919061477e565b6012600082825461317991906142c2565b92505081905550613277565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131e057506000600c54115b156132765761320d60646131ff600c54886138ac90919063ffffffff16565b6138c290919063ffffffff16565b9050600c54600e5482613220919061470d565b61322a919061477e565b6013600082825461323b91906142c2565b92505081905550600c54600d5482613253919061470d565b61325d919061477e565b6012600082825461326e91906142c2565b925050819055505b5b600081111561328c5761328b873083613420565b5b80856132989190615356565b94505b6132a6878787613420565b601454600f81905550505050505b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361348f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348690614faa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f59061503c565b60405180910390fd5b6135098383836138d8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561358f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613586906153fc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461362291906142c2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136869190613e60565b60405180910390a36136998484846138dd565b50505050565b60006136aa30610f4d565b905060006012546013546136be91906142c2565b90506000808314806136d05750600082145b156136dd575050506138aa565b60146009546136ec919061470d565b831115613705576014600954613702919061470d565b92505b600060028360135486613718919061470d565b613722919061477e565b61372c919061477e565b9050600061374382866138e290919063ffffffff16565b90506000479050613753826138f8565b600061376882476138e290919063ffffffff16565b9050600061379387613785601254856138ac90919063ffffffff16565b6138c290919063ffffffff16565b9050600081836137a39190615356565b9050600060138190555060006012819055506000861180156137c55750600081115b15613812576137d48682613b35565b7f34755123977fda4465c19ffa30709bc81ed728f17cf49014d33b243ae2d682fb85826013546040516138099392919061541c565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161385890615484565b60006040518083038185875af1925050503d8060008114613895576040519150601f19603f3d011682016040523d82523d6000602084013e61389a565b606091505b5050809750505050505050505050505b565b600081836138ba919061470d565b905092915050565b600081836138d0919061477e565b905092915050565b505050565b505050565b600081836138f09190615356565b905092915050565b6000600267ffffffffffffffff81111561391557613914615499565b5b6040519080825280602002602001820160405280156139435781602001602082028036833780820191505090505b509050308160008151811061395b5761395a614486565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2491906154dd565b81600181518110613a3857613a37614486565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a9d307f000000000000000000000000000000000000000000000000000000000000000084612232565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613aff959493929190615603565b600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b505050505050565b613b60307f000000000000000000000000000000000000000000000000000000000000000084612232565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613bc79695949392919061565d565b60606040518083038185885af1158015613be5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c0a91906156d3565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c4b578082015181840152602081019050613c30565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c7382613c11565b613c7d8185613c1c565b9350613c8d818560208601613c2d565b613c9681613c57565b840191505092915050565b60006020820190508181036000830152613cbb8184613c68565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cf882613ccd565b9050919050565b613d0881613ced565b8114613d1357600080fd5b50565b600081359050613d2581613cff565b92915050565b6000819050919050565b613d3e81613d2b565b8114613d4957600080fd5b50565b600081359050613d5b81613d35565b92915050565b60008060408385031215613d7857613d77613cc3565b5b6000613d8685828601613d16565b9250506020613d9785828601613d4c565b9150509250929050565b60008115159050919050565b613db681613da1565b82525050565b6000602082019050613dd16000830184613dad565b92915050565b6000819050919050565b6000613dfc613df7613df284613ccd565b613dd7565b613ccd565b9050919050565b6000613e0e82613de1565b9050919050565b6000613e2082613e03565b9050919050565b613e3081613e15565b82525050565b6000602082019050613e4b6000830184613e27565b92915050565b613e5a81613d2b565b82525050565b6000602082019050613e756000830184613e51565b92915050565b600080600060608486031215613e9457613e93613cc3565b5b6000613ea286828701613d16565b9350506020613eb386828701613d16565b9250506040613ec486828701613d4c565b9150509250925092565b613ed781613ced565b82525050565b6000602082019050613ef26000830184613ece565b92915050565b600060ff82169050919050565b613f0e81613ef8565b82525050565b6000602082019050613f296000830184613f05565b92915050565b600060208284031215613f4557613f44613cc3565b5b6000613f5384828501613d16565b91505092915050565b600060208284031215613f7257613f71613cc3565b5b6000613f8084828501613d4c565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613fae57613fad613f89565b5b8235905067ffffffffffffffff811115613fcb57613fca613f8e565b5b602083019150836020820283011115613fe757613fe6613f93565b5b9250929050565b613ff781613da1565b811461400257600080fd5b50565b60008135905061401481613fee565b92915050565b60008060006040848603121561403357614032613cc3565b5b600084013567ffffffffffffffff81111561405157614050613cc8565b5b61405d86828701613f98565b9350935050602061407086828701614005565b9150509250925092565b6000806040838503121561409157614090613cc3565b5b600061409f85828601613d16565b92505060206140b085828601614005565b9150509250929050565b600080604083850312156140d1576140d0613cc3565b5b60006140df85828601613d4c565b92505060206140f085828601613d4c565b9150509250929050565b6000806000806080858703121561411457614113613cc3565b5b600061412287828801613d4c565b945050602061413387828801613d4c565b935050604061414487828801613d4c565b925050606061415587828801613d4c565b91505092959194509250565b6000806040838503121561417857614177613cc3565b5b600061418685828601613d16565b925050602061419785828601613d16565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141e857607f821691505b6020821081036141fb576141fa6141a1565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061425d602883613c1c565b915061426882614201565b604082019050919050565b6000602082019050818103600083015261428c81614250565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142cd82613d2b565b91506142d883613d2b565b92508282019050808211156142f0576142ef614293565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061432c602083613c1c565b9150614337826142f6565b602082019050919050565b6000602082019050818103600083015261435b8161431f565b9050919050565b7f43616e2774206368616e6765207768656e2074726164696e672068617320737460008201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b60006143be602583613c1c565b91506143c982614362565b604082019050919050565b600060208201905081810360008301526143ed816143b1565b9050919050565b7f446561646c696e652073686f756c64206265206c657373207468616e2035204260008201527f6c6f636b73000000000000000000000000000000000000000000000000000000602082015250565b6000614450602583613c1c565b915061445b826143f4565b604082019050919050565b6000602082019050818103600083015261447f81614443565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006144c082613d2b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144f2576144f1614293565b5b600182019050919050565b7f417574683a2063616c6c6572206973206e6f7420746865206f776e6572206f7260008201527f2064657600000000000000000000000000000000000000000000000000000000602082015250565b6000614559602483613c1c565b9150614564826144fd565b604082019050919050565b600060208201905081810360008301526145888161454c565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156145e6578086048111156145c2576145c1614293565b5b60018516156145d15780820291505b80810290506145df8561458f565b94506145a6565b94509492505050565b6000826145ff57600190506146bb565b8161460d57600090506146bb565b8160018114614623576002811461462d5761465c565b60019150506146bb565b60ff84111561463f5761463e614293565b5b8360020a91508482111561465657614655614293565b5b506146bb565b5060208310610133831016604e8410600b84101617156146915782820a90508381111561468c5761468b614293565b5b6146bb565b61469e848484600161459c565b925090508184048111156146b5576146b4614293565b5b81810290505b9392505050565b60006146cd82613d2b565b91506146d883613ef8565b92506147057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846145ef565b905092915050565b600061471882613d2b565b915061472383613d2b565b925082820261473181613d2b565b9150828204841483151761474857614747614293565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061478982613d2b565b915061479483613d2b565b9250826147a4576147a361474f565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b600061480b602183613c1c565b9150614816826147af565b604082019050919050565b6000602082019050818103600083015261483a816147fe565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061489d602483613c1c565b91506148a882614841565b604082019050919050565b600060208201905081810360008301526148cc81614890565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614909601483613c1c565b9150614914826148d3565b602082019050919050565b60006020820190508181036000830152614938816148fc565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061499b603983613c1c565b91506149a68261493f565b604082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a2d602583613c1c565b9150614a38826149d1565b604082019050919050565b60006020820190508181036000830152614a5c81614a20565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614abf602283613c1c565b9150614aca82614a63565b604082019050919050565b60006020820190508181036000830152614aee81614ab2565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000614b2b601c83613c1c565b9150614b3682614af5565b602082019050919050565b60006020820190508181036000830152614b5a81614b1e565b9050919050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b6000614bbd603683613c1c565b9150614bc882614b61565b604082019050919050565b60006020820190508181036000830152614bec81614bb0565b9050919050565b6000604082019050614c086000830185613ece565b614c156020830184613e51565b9392505050565b600081519050614c2b81613fee565b92915050565b600060208284031215614c4757614c46613cc3565b5b6000614c5584828501614c1c565b91505092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614cba603583613c1c565b9150614cc582614c5e565b604082019050919050565b60006020820190508181036000830152614ce981614cad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d4c603483613c1c565b9150614d5782614cf0565b604082019050919050565b60006020820190508181036000830152614d7b81614d3f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dde602683613c1c565b9150614de982614d82565b604082019050919050565b60006020820190508181036000830152614e0d81614dd1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e70602483613c1c565b9150614e7b82614e14565b604082019050919050565b60006020820190508181036000830152614e9f81614e63565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f02602283613c1c565b9150614f0d82614ea6565b604082019050919050565b60006020820190508181036000830152614f3181614ef5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f94602583613c1c565b9150614f9f82614f38565b604082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615026602383613c1c565b915061503182614fca565b604082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615092601683613c1c565b915061509d8261505c565b602082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f466c69676874206d6f6465206973206163746976617465642e00000000000000600082015250565b60006150fe601983613c1c565b9150615109826150c8565b602082019050919050565b6000602082019050818103600083015261512d816150f1565b9050919050565b7f4175746f6d617469632077616c6c6574206f6e6c792062757920746f20676f2060008201527f746f20746865206d6f6f6e2e0000000000000000000000000000000000000000602082015250565b6000615190602c83613c1c565b915061519b82615134565b604082019050919050565b600060208201905081810360008301526151bf81615183565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615222603583613c1c565b915061522d826151c6565b604082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061528e601383613c1c565b915061529982615258565b602082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615320603683613c1c565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b600061536182613d2b565b915061536c83613d2b565b925082820390508181111561538457615383614293565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006153e6602683613c1c565b91506153f18261538a565b604082019050919050565b60006020820190508181036000830152615415816153d9565b9050919050565b60006060820190506154316000830186613e51565b61543e6020830185613e51565b61544b6040830184613e51565b949350505050565b600081905092915050565b50565b600061546e600083615453565b91506154798261545e565b600082019050919050565b600061548f82615461565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154d781613cff565b92915050565b6000602082840312156154f3576154f2613cc3565b5b6000615501848285016154c8565b91505092915050565b6000819050919050565b600061552f61552a6155258461550a565b613dd7565b613d2b565b9050919050565b61553f81615514565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61557a81613ced565b82525050565b600061558c8383615571565b60208301905092915050565b6000602082019050919050565b60006155b082615545565b6155ba8185615550565b93506155c583615561565b8060005b838110156155f65781516155dd8882615580565b97506155e883615598565b9250506001810190506155c9565b5085935050505092915050565b600060a0820190506156186000830188613e51565b6156256020830187615536565b818103604083015261563781866155a5565b90506156466060830185613ece565b6156536080830184613e51565b9695505050505050565b600060c0820190506156726000830189613ece565b61567f6020830188613e51565b61568c6040830187615536565b6156996060830186615536565b6156a66080830185613ece565b6156b360a0830184613e51565b979650505050505050565b6000815190506156cd81613d35565b92915050565b6000806000606084860312156156ec576156eb613cc3565b5b60006156fa868287016156be565b935050602061570b868287016156be565b925050604061571c868287016156be565b915050925092509256fea2646970667358221220301244ca3d1a403ff80ecf859fd8953e566b46532a69cf9b9e086fe17fd4de4064736f6c63430008110033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638a8c523c11610139578063bea1cb27116100b6578063d257b34f1161007a578063d257b34f14610889578063d85ba063146108c6578063dd62ed3e146108f1578063e2f456051461092e578063f2fde38b14610959578063f8b45b051461098257610251565b8063bea1cb27146107ba578063c0246668146107e3578063c6616ba11461080c578063c8c8ebe414610835578063cea9d26f1461086057610251565b80639a7a23d6116100fd5780639a7a23d6146106c3578063a457c2d7146106ec578063a9059cbb14610729578063aacebbe314610766578063bbc0c7421461078f57610251565b80638a8c523c146106045780638da5cb5b1461061b57806395d89b4114610646578063961883991461067157806398bf93bb1461069a57610251565b806349bd5a5e116101c75780636ddd17131161018b5780636ddd17131461053157806370a082311461055c578063715018a6146105995780637571336a146105b057806375f0a874146105d957610251565b806349bd5a5e1461044a5780634cdc9c63146104755780634fbee193146104a05780636113a976146104dd5780636a486a8e1461050657610251565b806327c8f8351161020e57806327c8f83514610351578063313ce5671461037c57806339509351146103a75780633e6b4107146103e457806342af18841461042157610251565b806306fdde0314610256578063095ea7b3146102815780631694505e146102be57806318160ddd146102e957806323b872dd1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109ad565b6040516102789190613ca1565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613d61565b610a3f565b6040516102b59190613dbc565b60405180910390f35b3480156102ca57600080fd5b506102d3610a5d565b6040516102e09190613e36565b60405180910390f35b3480156102f557600080fd5b506102fe610a81565b60405161030b9190613e60565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613e7b565b610a8b565b6040516103489190613dbc565b60405180910390f35b34801561035d57600080fd5b50610366610b83565b6040516103739190613edd565b60405180910390f35b34801561038857600080fd5b50610391610b89565b60405161039e9190613f14565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190613d61565b610ba0565b6040516103db9190613dbc565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190613f2f565b610c4c565b6040516104189190613dbc565b60405180910390f35b34801561042d57600080fd5b5061044860048036038101906104439190613f5c565b610c6c565b005b34801561045657600080fd5b5061045f610d93565b60405161046c9190613edd565b60405180910390f35b34801561048157600080fd5b5061048a610db7565b6040516104979190613e60565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190613f2f565b610dbd565b6040516104d49190613dbc565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061401a565b610e13565b005b34801561051257600080fd5b5061051b610f34565b6040516105289190613e60565b60405180910390f35b34801561053d57600080fd5b50610546610f3a565b6040516105539190613dbc565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613f2f565b610f4d565b6040516105909190613e60565b60405180910390f35b3480156105a557600080fd5b506105ae610f95565b005b3480156105bc57600080fd5b506105d760048036038101906105d2919061407a565b61101d565b005b3480156105e557600080fd5b506105ee6110f4565b6040516105fb9190613edd565b60405180910390f35b34801561061057600080fd5b5061061961111a565b005b34801561062757600080fd5b50610630611267565b60405161063d9190613edd565b60405180910390f35b34801561065257600080fd5b5061065b611291565b6040516106689190613ca1565b60405180910390f35b34801561067d57600080fd5b50610698600480360381019061069391906140ba565b611323565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613f5c565b6114d7565b005b3480156106cf57600080fd5b506106ea60048036038101906106e5919061407a565b611631565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613d61565b611749565b6040516107209190613dbc565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190613d61565b611834565b60405161075d9190613dbc565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613f2f565b611852565b005b34801561079b57600080fd5b506107a4611a03565b6040516107b19190613dbc565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc919061401a565b611a16565b005b3480156107ef57600080fd5b5061080a6004803603810190610805919061407a565b611aea565b005b34801561081857600080fd5b50610833600480360381019061082e91906140fa565b611c0f565b005b34801561084157600080fd5b5061084a611d80565b6040516108579190613e60565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613e7b565b611d86565b005b34801561089557600080fd5b506108b060048036038101906108ab9190613f5c565b611f45565b6040516108bd9190613dbc565b60405180910390f35b3480156108d257600080fd5b506108db61209a565b6040516108e89190613e60565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190614161565b6120a0565b6040516109259190613e60565b60405180910390f35b34801561093a57600080fd5b50610943612127565b6040516109509190613e60565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190613f2f565b61212d565b005b34801561098e57600080fd5b50610997612224565b6040516109a49190613e60565b60405180910390f35b6060600380546109bc906141d0565b80601f01602080910402602001604051908101604052809291908181526020018280546109e8906141d0565b8015610a355780601f10610a0a57610100808354040283529160200191610a35565b820191906000526020600020905b815481529060010190602001808311610a1857829003601f168201915b5050505050905090565b6000610a53610a4c61222a565b8484612232565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610a988484846123fb565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ae361222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a90614273565b60405180910390fd5b610b7785610b6f61222a565b858403612232565b60019150509392505050565b61dead81565b6000600560009054906101000a900460ff16905090565b6000610c42610bad61222a565b848460016000610bbb61222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3d91906142c2565b612232565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b610c7461222a565b73ffffffffffffffffffffffffffffffffffffffff16610c92611267565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90614342565b60405180910390fd5b600b60009054906101000a900460ff16158015610d0757506000601954145b610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d906143d4565b60405180910390fd5b60058110610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614466565b60405180910390fd5b80601a8190555050565b7f000000000000000000000000af3b9f0efbb15ba80db7c728ce4e5a71bf050d3a81565b60195481565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e1b61222a565b73ffffffffffffffffffffffffffffffffffffffff16610e39611267565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690614342565b60405180910390fd5b60005b83839050811015610f2e578160186000868685818110610eb557610eb4614486565b5b9050602002016020810190610eca9190613f2f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f26906144b5565b915050610e92565b50505050565b600f5481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f9d61222a565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611267565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890614342565b60405180910390fd5b61101b60006132b9565b565b61102561222a565b73ffffffffffffffffffffffffffffffffffffffff16611043611267565b73ffffffffffffffffffffffffffffffffffffffff1614611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090614342565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16611139611267565b73ffffffffffffffffffffffffffffffffffffffff1614806111a85750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de9061456f565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550600b60009054906101000a900460ff16600b60016101000a81548160ff021916908315150217905550600b60009054906101000a900460ff16801561125857506000601954145b1561126557436019819055505b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112a0906141d0565b80601f01602080910402602001604051908101604052809291908181526020018280546112cc906141d0565b80156113195780601f106112ee57610100808354040283529160200191611319565b820191906000526020600020905b8154815290600101906020018083116112fc57829003601f168201915b5050505050905090565b61132b61222a565b73ffffffffffffffffffffffffffffffffffffffff16611349611267565b73ffffffffffffffffffffffffffffffffffffffff161461139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139690614342565b60405180910390fd5b6009600a6113ad91906146c2565b6103e860056113ba610a81565b6113c4919061470d565b6113ce919061477e565b6113d8919061477e565b82101561141a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141190614821565b60405180910390fd5b6009600a61142891906146c2565b6103e86005611435610a81565b61143f919061470d565b611449919061477e565b611453919061477e565b811015611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c906148b3565b60405180910390fd5b6009600a6114a391906146c2565b816114ae919061470d565b600a819055506009600a6114c291906146c2565b826114cd919061470d565b6008819055505050565b3373ffffffffffffffffffffffffffffffffffffffff166114f6611267565b73ffffffffffffffffffffffffffffffffffffffff1614806115655750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b9061456f565b60405180910390fd5b804710156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de9061491f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561162d573d6000803e3d6000fd5b5050565b61163961222a565b73ffffffffffffffffffffffffffffffffffffffff16611657611267565b73ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614342565b60405180910390fd5b7f000000000000000000000000af3b9f0efbb15ba80db7c728ce4e5a71bf050d3a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906149b1565b60405180910390fd5b611745828261337f565b5050565b6000806001600061175861222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614a43565b60405180910390fd5b61182961182061222a565b85858403612232565b600191505092915050565b600061184861184161222a565b84846123fb565b6001905092915050565b61185a61222a565b73ffffffffffffffffffffffffffffffffffffffff16611878611267565b73ffffffffffffffffffffffffffffffffffffffff16146118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590614342565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614ad5565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b600b60009054906101000a900460ff1681565b611a1e61222a565b73ffffffffffffffffffffffffffffffffffffffff16611a3c611267565b73ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990614342565b60405180910390fd5b60005b83839050811015611ae457611ad1848483818110611ab657611ab5614486565b5b9050602002016020810190611acb9190613f2f565b83611aea565b8080611adc906144b5565b915050611a95565b50505050565b611af261222a565b73ffffffffffffffffffffffffffffffffffffffff16611b10611267565b73ffffffffffffffffffffffffffffffffffffffff1614611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90614342565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c039190613dbc565b60405180910390a25050565b611c1761222a565b73ffffffffffffffffffffffffffffffffffffffff16611c35611267565b73ffffffffffffffffffffffffffffffffffffffff1614611c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8290614342565b60405180910390fd5b60058385611c9991906142c2565b1115611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614b41565b60405180910390fd5b60058183611ce891906142c2565b1115611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090614b41565b60405180910390fd5b83600d8190555082600e81905550600e54600d54611d4791906142c2565b600c819055508160108190555080601181905550601154601054611d6b91906142c2565b600f81905550600f5460148190555050505050565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff16611da5611267565b73ffffffffffffffffffffffffffffffffffffffff161480611e145750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a9061456f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890614bd3565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611efc929190614bf3565b6020604051808303816000875af1158015611f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3f9190614c31565b50505050565b6000611f4f61222a565b73ffffffffffffffffffffffffffffffffffffffff16611f6d611267565b73ffffffffffffffffffffffffffffffffffffffff1614611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba90614342565b60405180910390fd5b620186a06001611fd1610a81565b611fdb919061470d565b611fe5919061477e565b821015612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90614cd0565b60405180910390fd5b6103e86005612034610a81565b61203e919061470d565b612048919061477e565b82111561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190614d62565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b61213561222a565b73ffffffffffffffffffffffffffffffffffffffff16612153611267565b73ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614342565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614df4565b60405180910390fd5b612221816132b9565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790614f18565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123ee9190613e60565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246190614faa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d09061503c565b60405180910390fd5b600081036124f2576124ed83836000613420565b6132b4565b6124fa611267565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125685750612538611267565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125a15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125db575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f45750600560159054906101000a900460ff16155b15612d1457600b60009054906101000a900460ff161580156126b55750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806126b45750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156127be57600073ffffffffffffffffffffffffffffffffffffffff166126da611267565b73ffffffffffffffffffffffffffffffffffffffff1614612730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612727906150a8565b60405180910390fd5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490615114565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128625750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561294b57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561290b5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61294a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612941906151a6565b60405180910390fd5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a2b57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a21906151a6565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ace5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7557600854811115612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f90615238565b60405180910390fd5b600a54612b2483610f4d565b82612b2f91906142c2565b1115612b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b67906152a4565b60405180910390fd5b612d13565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c185750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6757600854811115612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990615336565b60405180910390fd5b612d12565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d1157600a54612cc483610f4d565b82612ccf91906142c2565b1115612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d07906152a4565b60405180910390fd5b5b5b5b5b6000612d1f30610f4d565b905060006009548210159050808015612d445750600b60019054906101000a900460ff165b8015612d5d5750600560159054906101000a900460ff16155b8015612db35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e095750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e5f5750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ea3576001600560156101000a81548160ff021916908315150217905550612e8761369f565b6000600560156101000a81548160ff0219169083151502179055505b6000600560159054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f595750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f675760009050613088565b601a54601954612f7791906142c2565b43101561308757601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561302d576001601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613086565b6001601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b6000811561329b57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130eb57506000600f54115b1561318557613118606461310a600f54886138ac90919063ffffffff16565b6138c290919063ffffffff16565b9050600f546011548261312b919061470d565b613135919061477e565b6013600082825461314691906142c2565b92505081905550600f546010548261315e919061470d565b613168919061477e565b6012600082825461317991906142c2565b92505081905550613277565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131e057506000600c54115b156132765761320d60646131ff600c54886138ac90919063ffffffff16565b6138c290919063ffffffff16565b9050600c54600e5482613220919061470d565b61322a919061477e565b6013600082825461323b91906142c2565b92505081905550600c54600d5482613253919061470d565b61325d919061477e565b6012600082825461326e91906142c2565b925050819055505b5b600081111561328c5761328b873083613420565b5b80856132989190615356565b94505b6132a6878787613420565b601454600f81905550505050505b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361348f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348690614faa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f59061503c565b60405180910390fd5b6135098383836138d8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561358f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613586906153fc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461362291906142c2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136869190613e60565b60405180910390a36136998484846138dd565b50505050565b60006136aa30610f4d565b905060006012546013546136be91906142c2565b90506000808314806136d05750600082145b156136dd575050506138aa565b60146009546136ec919061470d565b831115613705576014600954613702919061470d565b92505b600060028360135486613718919061470d565b613722919061477e565b61372c919061477e565b9050600061374382866138e290919063ffffffff16565b90506000479050613753826138f8565b600061376882476138e290919063ffffffff16565b9050600061379387613785601254856138ac90919063ffffffff16565b6138c290919063ffffffff16565b9050600081836137a39190615356565b9050600060138190555060006012819055506000861180156137c55750600081115b15613812576137d48682613b35565b7f34755123977fda4465c19ffa30709bc81ed728f17cf49014d33b243ae2d682fb85826013546040516138099392919061541c565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161385890615484565b60006040518083038185875af1925050503d8060008114613895576040519150601f19603f3d011682016040523d82523d6000602084013e61389a565b606091505b5050809750505050505050505050505b565b600081836138ba919061470d565b905092915050565b600081836138d0919061477e565b905092915050565b505050565b505050565b600081836138f09190615356565b905092915050565b6000600267ffffffffffffffff81111561391557613914615499565b5b6040519080825280602002602001820160405280156139435781602001602082028036833780820191505090505b509050308160008151811061395b5761395a614486565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2491906154dd565b81600181518110613a3857613a37614486565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a9d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612232565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613aff959493929190615603565b600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b505050505050565b613b60307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612232565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613bc79695949392919061565d565b60606040518083038185885af1158015613be5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c0a91906156d3565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c4b578082015181840152602081019050613c30565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c7382613c11565b613c7d8185613c1c565b9350613c8d818560208601613c2d565b613c9681613c57565b840191505092915050565b60006020820190508181036000830152613cbb8184613c68565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cf882613ccd565b9050919050565b613d0881613ced565b8114613d1357600080fd5b50565b600081359050613d2581613cff565b92915050565b6000819050919050565b613d3e81613d2b565b8114613d4957600080fd5b50565b600081359050613d5b81613d35565b92915050565b60008060408385031215613d7857613d77613cc3565b5b6000613d8685828601613d16565b9250506020613d9785828601613d4c565b9150509250929050565b60008115159050919050565b613db681613da1565b82525050565b6000602082019050613dd16000830184613dad565b92915050565b6000819050919050565b6000613dfc613df7613df284613ccd565b613dd7565b613ccd565b9050919050565b6000613e0e82613de1565b9050919050565b6000613e2082613e03565b9050919050565b613e3081613e15565b82525050565b6000602082019050613e4b6000830184613e27565b92915050565b613e5a81613d2b565b82525050565b6000602082019050613e756000830184613e51565b92915050565b600080600060608486031215613e9457613e93613cc3565b5b6000613ea286828701613d16565b9350506020613eb386828701613d16565b9250506040613ec486828701613d4c565b9150509250925092565b613ed781613ced565b82525050565b6000602082019050613ef26000830184613ece565b92915050565b600060ff82169050919050565b613f0e81613ef8565b82525050565b6000602082019050613f296000830184613f05565b92915050565b600060208284031215613f4557613f44613cc3565b5b6000613f5384828501613d16565b91505092915050565b600060208284031215613f7257613f71613cc3565b5b6000613f8084828501613d4c565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613fae57613fad613f89565b5b8235905067ffffffffffffffff811115613fcb57613fca613f8e565b5b602083019150836020820283011115613fe757613fe6613f93565b5b9250929050565b613ff781613da1565b811461400257600080fd5b50565b60008135905061401481613fee565b92915050565b60008060006040848603121561403357614032613cc3565b5b600084013567ffffffffffffffff81111561405157614050613cc8565b5b61405d86828701613f98565b9350935050602061407086828701614005565b9150509250925092565b6000806040838503121561409157614090613cc3565b5b600061409f85828601613d16565b92505060206140b085828601614005565b9150509250929050565b600080604083850312156140d1576140d0613cc3565b5b60006140df85828601613d4c565b92505060206140f085828601613d4c565b9150509250929050565b6000806000806080858703121561411457614113613cc3565b5b600061412287828801613d4c565b945050602061413387828801613d4c565b935050604061414487828801613d4c565b925050606061415587828801613d4c565b91505092959194509250565b6000806040838503121561417857614177613cc3565b5b600061418685828601613d16565b925050602061419785828601613d16565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141e857607f821691505b6020821081036141fb576141fa6141a1565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061425d602883613c1c565b915061426882614201565b604082019050919050565b6000602082019050818103600083015261428c81614250565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142cd82613d2b565b91506142d883613d2b565b92508282019050808211156142f0576142ef614293565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061432c602083613c1c565b9150614337826142f6565b602082019050919050565b6000602082019050818103600083015261435b8161431f565b9050919050565b7f43616e2774206368616e6765207768656e2074726164696e672068617320737460008201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b60006143be602583613c1c565b91506143c982614362565b604082019050919050565b600060208201905081810360008301526143ed816143b1565b9050919050565b7f446561646c696e652073686f756c64206265206c657373207468616e2035204260008201527f6c6f636b73000000000000000000000000000000000000000000000000000000602082015250565b6000614450602583613c1c565b915061445b826143f4565b604082019050919050565b6000602082019050818103600083015261447f81614443565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006144c082613d2b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144f2576144f1614293565b5b600182019050919050565b7f417574683a2063616c6c6572206973206e6f7420746865206f776e6572206f7260008201527f2064657600000000000000000000000000000000000000000000000000000000602082015250565b6000614559602483613c1c565b9150614564826144fd565b604082019050919050565b600060208201905081810360008301526145888161454c565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156145e6578086048111156145c2576145c1614293565b5b60018516156145d15780820291505b80810290506145df8561458f565b94506145a6565b94509492505050565b6000826145ff57600190506146bb565b8161460d57600090506146bb565b8160018114614623576002811461462d5761465c565b60019150506146bb565b60ff84111561463f5761463e614293565b5b8360020a91508482111561465657614655614293565b5b506146bb565b5060208310610133831016604e8410600b84101617156146915782820a90508381111561468c5761468b614293565b5b6146bb565b61469e848484600161459c565b925090508184048111156146b5576146b4614293565b5b81810290505b9392505050565b60006146cd82613d2b565b91506146d883613ef8565b92506147057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846145ef565b905092915050565b600061471882613d2b565b915061472383613d2b565b925082820261473181613d2b565b9150828204841483151761474857614747614293565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061478982613d2b565b915061479483613d2b565b9250826147a4576147a361474f565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b600061480b602183613c1c565b9150614816826147af565b604082019050919050565b6000602082019050818103600083015261483a816147fe565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061489d602483613c1c565b91506148a882614841565b604082019050919050565b600060208201905081810360008301526148cc81614890565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614909601483613c1c565b9150614914826148d3565b602082019050919050565b60006020820190508181036000830152614938816148fc565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061499b603983613c1c565b91506149a68261493f565b604082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a2d602583613c1c565b9150614a38826149d1565b604082019050919050565b60006020820190508181036000830152614a5c81614a20565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614abf602283613c1c565b9150614aca82614a63565b604082019050919050565b60006020820190508181036000830152614aee81614ab2565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000614b2b601c83613c1c565b9150614b3682614af5565b602082019050919050565b60006020820190508181036000830152614b5a81614b1e565b9050919050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b6000614bbd603683613c1c565b9150614bc882614b61565b604082019050919050565b60006020820190508181036000830152614bec81614bb0565b9050919050565b6000604082019050614c086000830185613ece565b614c156020830184613e51565b9392505050565b600081519050614c2b81613fee565b92915050565b600060208284031215614c4757614c46613cc3565b5b6000614c5584828501614c1c565b91505092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614cba603583613c1c565b9150614cc582614c5e565b604082019050919050565b60006020820190508181036000830152614ce981614cad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d4c603483613c1c565b9150614d5782614cf0565b604082019050919050565b60006020820190508181036000830152614d7b81614d3f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dde602683613c1c565b9150614de982614d82565b604082019050919050565b60006020820190508181036000830152614e0d81614dd1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e70602483613c1c565b9150614e7b82614e14565b604082019050919050565b60006020820190508181036000830152614e9f81614e63565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f02602283613c1c565b9150614f0d82614ea6565b604082019050919050565b60006020820190508181036000830152614f3181614ef5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f94602583613c1c565b9150614f9f82614f38565b604082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615026602383613c1c565b915061503182614fca565b604082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615092601683613c1c565b915061509d8261505c565b602082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f466c69676874206d6f6465206973206163746976617465642e00000000000000600082015250565b60006150fe601983613c1c565b9150615109826150c8565b602082019050919050565b6000602082019050818103600083015261512d816150f1565b9050919050565b7f4175746f6d617469632077616c6c6574206f6e6c792062757920746f20676f2060008201527f746f20746865206d6f6f6e2e0000000000000000000000000000000000000000602082015250565b6000615190602c83613c1c565b915061519b82615134565b604082019050919050565b600060208201905081810360008301526151bf81615183565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615222603583613c1c565b915061522d826151c6565b604082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061528e601383613c1c565b915061529982615258565b602082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615320603683613c1c565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b600061536182613d2b565b915061536c83613d2b565b925082820390508181111561538457615383614293565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006153e6602683613c1c565b91506153f18261538a565b604082019050919050565b60006020820190508181036000830152615415816153d9565b9050919050565b60006060820190506154316000830186613e51565b61543e6020830185613e51565b61544b6040830184613e51565b949350505050565b600081905092915050565b50565b600061546e600083615453565b91506154798261545e565b600082019050919050565b600061548f82615461565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154d781613cff565b92915050565b6000602082840312156154f3576154f2613cc3565b5b6000615501848285016154c8565b91505092915050565b6000819050919050565b600061552f61552a6155258461550a565b613dd7565b613d2b565b9050919050565b61553f81615514565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61557a81613ced565b82525050565b600061558c8383615571565b60208301905092915050565b6000602082019050919050565b60006155b082615545565b6155ba8185615550565b93506155c583615561565b8060005b838110156155f65781516155dd8882615580565b97506155e883615598565b9250506001810190506155c9565b5085935050505092915050565b600060a0820190506156186000830188613e51565b6156256020830187615536565b818103604083015261563781866155a5565b90506156466060830185613ece565b6156536080830184613e51565b9695505050505050565b600060c0820190506156726000830189613ece565b61567f6020830188613e51565b61568c6040830187615536565b6156996060830186615536565b6156a66080830185613ece565b6156b360a0830184613e51565b979650505050505050565b6000815190506156cd81613d35565b92915050565b6000806000606084860312156156ec576156eb613cc3565b5b60006156fa868287016156be565b935050602061570b868287016156be565b925050604061571c868287016156be565b915050925092509256fea2646970667358221220301244ca3d1a403ff80ecf859fd8953e566b46532a69cf9b9e086fe17fd4de4064736f6c63430008110033

Deployed Bytecode Sourcemap

14196:15354:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3013:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3934:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14272:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3341:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4111:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14375:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3233:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4599:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15423:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18800:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14330:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15480:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22395:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21652:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14995:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14843:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3457:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1072:103;;;;;;;;;;;;;:::i;:::-;;20095:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14609:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18560:232;;;;;;;;;;;;;:::i;:::-;;849:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3121:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19551:536;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22529:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21361:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4822:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3592:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21887:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14803:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21129:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20939:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20247:684;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14688:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22722:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19079:464;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14883:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3775:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14730:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1183:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14770:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3013:100;3067:13;3100:5;3093:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3013:100;:::o;3934:169::-;4017:4;4034:39;4043:12;:10;:12::i;:::-;4057:7;4066:6;4034:8;:39::i;:::-;4091:4;4084:11;;3934:169;;;;:::o;14272:51::-;;;:::o;3341:108::-;3402:7;3429:12;;3422:19;;3341:108;:::o;4111:480::-;4251:4;4268:36;4278:6;4286:9;4297:6;4268:9;:36::i;:::-;4317:24;4344:11;:19;4356:6;4344:19;;;;;;;;;;;;;;;:33;4364:12;:10;:12::i;:::-;4344:33;;;;;;;;;;;;;;;;4317:60;;4416:6;4396:16;:26;;4388:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4495:57;4504:6;4512:12;:10;:12::i;:::-;4545:6;4526:16;:25;4495:8;:57::i;:::-;4579:4;4572:11;;;4111:480;;;;;:::o;14375:53::-;14421:6;14375:53;:::o;3233:100::-;3291:5;3316:9;;;;;;;;;;;3309:16;;3233:100;:::o;4599:215::-;4687:4;4704:80;4713:12;:10;:12::i;:::-;4727:7;4773:10;4736:11;:25;4748:12;:10;:12::i;:::-;4736:25;;;;;;;;;;;;;;;:34;4762:7;4736:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4704:8;:80::i;:::-;4802:4;4795:11;;4599:215;;;;:::o;15423:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;18800:271::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18882:13:::1;;;;;;;;;;;18881:14;:35;;;;;18915:1;18899:12;;:17;18881:35;18873:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18989:1;18977:9;:13;18969:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19054:9;19043:8;:20;;;;18800:271:::0;:::o;14330:38::-;;;:::o;15480:31::-;;;;:::o;22395:126::-;22461:4;22485:19;:28;22505:7;22485:28;;;;;;;;;;;;;;;;;;;;;;;;;22478:35;;22395:126;;;:::o;21652:227::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21764:9:::1;21759:113;21783:8;;:15;;21779:1;:19;21759:113;;;21852:8;21820:16;:29;21837:8;;21846:1;21837:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21820:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21800:3;;;;;:::i;:::-;;;;21759:113;;;;21652:227:::0;;;:::o;14995:28::-;;;;:::o;14843:31::-;;;;;;;;;;;;;:::o;3457:127::-;3531:7;3558:9;:18;3568:7;3558:18;;;;;;;;;;;;;;;;3551:25;;3457:127;;;:::o;1072:103::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1137:30:::1;1164:1;1137:18;:30::i;:::-;1072:103::o:0;20095:144::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20227:4:::1;20185:31;:39;20217:6;20185:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20095:144:::0;;:::o;14609:30::-;;;;;;;;;;;;;:::o;18560:232::-;15604:10;15593:21;;:7;:5;:7::i;:::-;:21;;;:56;;;;15632:17;;;;;;;;;;;15618:31;;:10;:31;;;15593:56;15585:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;18629:13:::1;;;;;;;;;;;18628:14;18612:13;;:30;;;;;;;;;;;;;;;;;;18667:13;;;;;;;;;;;18653:11;;:27;;;;;;;;;;;;;;;;;;18695:13;;;;;;;;;;;:34;;;;;18728:1;18712:12;;:17;18695:34;18691:94;;;18761:12;18746;:27;;;;18691:94;18560:232::o:0;849:87::-;895:7;922:6;;;;;;;;;;;915:13;;849:87;:::o;3121:104::-;3177:13;3210:7;3203:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3121:104;:::o;19551:536::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14569:1:::1;19728:2;:13;;;;:::i;:::-;19720:4;19715:1;19699:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19698:26;;;;:::i;:::-;19697:44;;;;:::i;:::-;19684:9;:57;;19662:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;14569:1;19885:2;:13;;;;:::i;:::-;19877:4;19872:1;19856:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19855:26;;;;:::i;:::-;19854:44;;;;:::i;:::-;19835:15;:63;;19813:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;14569:1;20004:2;:13;;;;:::i;:::-;19985:15;:33;;;;:::i;:::-;19973:9;:45;;;;14569:1;20065:2;:13;;;;:::i;:::-;20052:9;:27;;;;:::i;:::-;20029:20;:50;;;;19551:536:::0;;:::o;22529:185::-;15604:10;15593:21;;:7;:5;:7::i;:::-;:21;;;:56;;;;15632:17;;;;;;;;;;;15618:31;;:10;:31;;;15593:56;15585:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22628:6:::1;22603:21;:31;;22595:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22678:10;22670:28;;:36;22699:6;22670:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22529:185:::0;:::o;21361:283::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21484:13:::1;21476:21;;:4;:21;;::::0;21454:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21595:41;21624:4;21630:5;21595:28;:41::i;:::-;21361:283:::0;;:::o;4822:401::-;4915:4;4932:24;4959:11;:25;4971:12;:10;:12::i;:::-;4959:25;;;;;;;;;;;;;;;:34;4985:7;4959:34;;;;;;;;;;;;;;;;4932:61;;5032:15;5012:16;:35;;5004:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5117:67;5126:12;:10;:12::i;:::-;5140:7;5168:15;5149:16;:34;5117:8;:67::i;:::-;5211:4;5204:11;;;4822:401;;;;:::o;3592:175::-;3678:4;3695:42;3705:12;:10;:12::i;:::-;3719:9;3730:6;3695:9;:42::i;:::-;3755:4;3748:11;;3592:175;;;;:::o;21887:304::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21996:1:::1;21975:23;;:9;:23;;::::0;21967:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22048:18;22069:15;;;;;;;;;;;22048:36;;22113:9;22095:15;;:27;;;;;;;;;;;;;;;;;;22172:10;22138:45;;22161:9;22138:45;;;;;;;;;;;;21956:235;21887:304:::0;:::o;14803:33::-;;;;;;;;;;;;;:::o;21129:224::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21240:9:::1;21236:110;21259:8;;:15;;21255:1;:19;21236:110;;;21296:38;21312:8;;21321:1;21312:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21325:8;21296:15;:38::i;:::-;21276:3;;;;;:::i;:::-;;;;21236:110;;;;21129:224:::0;;;:::o;20939:182::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21055:8:::1;21024:19;:28;21044:7;21024:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21095:7;21079:34;;;21104:8;21079:34;;;;;;:::i;:::-;;;;;;;;20939:182:::0;;:::o;20247:684::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20450:1:::1;20430:16;20411;:35;;;;:::i;:::-;:40;;20403:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;20544:1;20523:17;20503;:37;;;;:::i;:::-;:42;;20495:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20607:16;20589:15;:34;;;;20652:16;20634:15;:34;;;;20712:15;;20694;;:33;;;;:::i;:::-;20679:12;:48;;;;20759:17;20740:16;:36;;;;20806:17;20787:16;:36;;;;20869:16;;20850;;:35;;;;:::i;:::-;20834:13;:51;;;;20910:13;;20896:11;:27;;;;20247:684:::0;;;;:::o;14688:35::-;;;;:::o;22722:259::-;15604:10;15593:21;;:7;:5;:7::i;:::-;:21;;;:56;;;;15632:17;;;;;;;;;;;15618:31;;:10;:31;;;15593:56;15585:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22855:4:::1;22830:30;;:13;:30;;::::0;22822:97:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22936:13;22930:29;;;22960:3;22965:7;22930:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22722:259:::0;;;:::o;19079:464::-;19160:4;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19233:6:::1;19228:1;19212:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19211:28;;;;:::i;:::-;19198:9;:41;;19176:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19388:4;19383:1;19367:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19366:26;;;;:::i;:::-;19353:9;:39;;19331:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19504:9;19483:18;:30;;;;19531:4;19524:11;;19079:464:::0;;;:::o;14883:27::-;;;;:::o;3775:151::-;3864:7;3891:11;:18;3903:5;3891:18;;;;;;;;;;;;;;;:27;3910:7;3891:27;;;;;;;;;;;;;;;;3884:34;;3775:151;;;;:::o;14730:33::-;;;;:::o;1183:201::-;995:12;:10;:12::i;:::-;984:23;;:7;:5;:7::i;:::-;:23;;;976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1292:1:::1;1272:22;;:8;:22;;::::0;1264:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1348:28;1367:8;1348:18;:28::i;:::-;1183:201:::0;:::o;14770:24::-;;;;:::o;395:98::-;448:7;475:10;468:17;;395:98;:::o;6367:380::-;6520:1;6503:19;;:5;:19;;;6495:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6601:1;6582:21;;:7;:21;;;6574:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6685:6;6655:11;:18;6667:5;6655:18;;;;;;;;;;;;;;;:27;6674:7;6655:27;;;;;;;;;;;;;;;:36;;;;6723:7;6707:32;;6716:5;6707:32;;;6732:6;6707:32;;;;;;:::i;:::-;;;;;;;;6367:380;;;:::o;22989:4211::-;23137:1;23121:18;;:4;:18;;;23113:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23214:1;23200:16;;:2;:16;;;23192:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23283:1;23273:6;:11;23269:93;;23301:28;23317:4;23323:2;23327:1;23301:15;:28::i;:::-;23344:7;;23269:93;23400:7;:5;:7::i;:::-;23392:15;;:4;:15;;;;:45;;;;;23430:7;:5;:7::i;:::-;23424:13;;:2;:13;;;;23392:45;:78;;;;;23468:1;23454:16;;:2;:16;;;;23392:78;:116;;;;;23501:6;23487:21;;:2;:21;;;;23392:116;:142;;;;;23526:8;;;;;;;;;;;23525:9;23392:142;23374:1944;;;23566:13;;;;;;;;;;;23565:14;:74;;;;;23585:19;:25;23605:4;23585:25;;;;;;;;;;;;;;;;;;;;;;;;;23584:26;:54;;;;23615:19;:23;23635:2;23615:23;;;;;;;;;;;;;;;;;;;;;;;;;23614:24;23584:54;23565:74;23561:258;;;23687:1;23668:21;;:7;:5;:7::i;:::-;:21;;;23660:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;23744:25;:29;23770:2;23744:29;;;;;;;;;;;;;;;;;;;;;;;;;23743:30;23735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23561:258;23840:25;:31;23866:4;23840:31;;;;;;;;;;;;;;;;;;;;;;;;;23839:32;:66;;;;;23876:25;:29;23902:2;23876:29;;;;;;;;;;;;;;;;;;;;;;;;;23875:30;23839:66;23835:212;;;23935:16;:22;23952:4;23935:22;;;;;;;;;;;;;;;;;;;;;;;;;23934:23;:48;;;;;23962:16;:20;23979:2;23962:20;;;;;;;;;;;;;;;;;;;;;;;;;23961:21;23934:48;23926:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;23835:212;24067:25;:29;24093:2;24067:29;;;;;;;;;;;;;;;;;;;;;;;;;24063:150;;;24126:16;:22;24143:4;24126:22;;;;;;;;;;;;;;;;;;;;;;;;;24125:23;24117:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24063:150;24275:25;:31;24301:4;24275:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;24328:31;:35;24360:2;24328:35;;;;;;;;;;;;;;;;;;;;;;;;;24327:36;24275:88;24253:1054;;;24438:20;;24428:6;:30;;24398:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;24630:9;;24613:13;24623:2;24613:9;:13::i;:::-;24604:6;:22;;;;:::i;:::-;:35;;24574:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;24253:1054;;;24784:25;:29;24810:2;24784:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;24835:31;:37;24867:4;24835:37;;;;;;;;;;;;;;;;;;;;;;;;;24834:38;24784:88;24762:545;;;24947:20;;24937:6;:30;;24907:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;24762:545;;;25107:31;:35;25139:2;25107:35;;;;;;;;;;;;;;;;;;;;;;;;;25102:205;;25219:9;;25202:13;25212:2;25202:9;:13::i;:::-;25193:6;:22;;;;:::i;:::-;:35;;25163:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;25102:205;24762:545;24253:1054;23374:1944;25330:28;25361:24;25379:4;25361:9;:24::i;:::-;25330:55;;25398:12;25437:18;;25413:20;:42;;25398:57;;25486:7;:35;;;;;25510:11;;;;;;;;;;;25486:35;:61;;;;;25539:8;;;;;;;;;;;25538:9;25486:61;:110;;;;;25565:25;:31;25591:4;25565:31;;;;;;;;;;;;;;;;;;;;;;;;;25564:32;25486:110;:153;;;;;25614:19;:25;25634:4;25614:25;;;;;;;;;;;;;;;;;;;;;;;;;25613:26;25486:153;:194;;;;;25657:19;:23;25677:2;25657:23;;;;;;;;;;;;;;;;;;;;;;;;;25656:24;25486:194;25468:326;;;25718:4;25707:8;;:15;;;;;;;;;;;;;;;;;;25739:10;:8;:10::i;:::-;25777:5;25766:8;;:16;;;;;;;;;;;;;;;;;;25468:326;25806:12;25822:8;;;;;;;;;;;25821:9;25806:24;;25847:19;:25;25867:4;25847:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25876:19;:23;25896:2;25876:23;;;;;;;;;;;;;;;;;;;;;;;;;25847:52;25843:392;;;25926:5;25916:15;;25843:392;;;25997:8;;25982:12;;:23;;;;:::i;:::-;25967:12;:38;25964:260;;;26030:25;:29;26056:2;26030:29;;;;;;;;;;;;;;;;;;;;;;;;;26026:183;;;26109:4;26084:16;:22;26101:4;26084:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26026:183;;;26185:4;26162:16;:20;26179:2;26162:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;26026:183;25964:260;25843:392;26247:12;26280:7;26276:831;;;26332:25;:29;26358:2;26332:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26381:1;26365:13;;:17;26332:50;26328:630;;;26410:34;26440:3;26410:25;26421:13;;26410:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26403:41;;26513:13;;26493:16;;26486:4;:23;;;;:::i;:::-;26485:41;;;;:::i;:::-;26463:18;;:63;;;;;;;:::i;:::-;;;;;;;;26595:13;;26575:16;;26568:4;:23;;;;:::i;:::-;26567:41;;;;:::i;:::-;26545:18;;:63;;;;;;;:::i;:::-;;;;;;;;26328:630;;;26670:25;:31;26696:4;26670:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26720:1;26705:12;;:16;26670:51;26666:292;;;26749:33;26778:3;26749:24;26760:12;;26749:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26742:40;;26850:12;;26831:15;;26824:4;:22;;;;:::i;:::-;26823:39;;;;:::i;:::-;26801:18;;:61;;;;;;;:::i;:::-;;;;;;;;26930:12;;26911:15;;26904:4;:22;;;;:::i;:::-;26903:39;;;;:::i;:::-;26881:18;;:61;;;;;;;:::i;:::-;;;;;;;;26666:292;26328:630;26985:1;26978:4;:8;26974:91;;;27007:42;27023:4;27037;27044;27007:15;:42::i;:::-;26974:91;27091:4;27081:14;;;;;:::i;:::-;;;26276:831;27119:33;27135:4;27141:2;27145:6;27119:15;:33::i;:::-;27179:11;;27163:13;:27;;;;23102:4098;;;;22989:4211;;;;:::o;1392:191::-;1466:16;1485:6;;;;;;;;;;;1466:25;;1511:8;1502:6;;:17;;;;;;;;;;;;;;;;;;1566:8;1535:40;;1556:8;1535:40;;;;;;;;;;;;1455:128;1392:191;:::o;22199:188::-;22316:5;22282:25;:31;22308:4;22282:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22373:5;22339:40;;22367:4;22339:40;;;;;;;;;;;;22199:188;;:::o;5231:721::-;5389:1;5371:20;;:6;:20;;;5363:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5473:1;5452:23;;:9;:23;;;5444:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5528:47;5549:6;5557:9;5568:6;5528:20;:47::i;:::-;5588:21;5612:9;:17;5622:6;5612:17;;;;;;;;;;;;;;;;5588:41;;5665:6;5648:13;:23;;5640:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5778:6;5762:13;:22;5742:9;:17;5752:6;5742:17;;;;;;;;;;;;;;;:42;;;;5826:6;5802:9;:20;5812:9;5802:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5867:9;5850:35;;5859:6;5850:35;;;5878:6;5850:35;;;;;;:::i;:::-;;;;;;;;5898:46;5918:6;5926:9;5937:6;5898:19;:46::i;:::-;5352:600;5231:721;;;:::o;28095:1452::-;28134:23;28160:24;28178:4;28160:9;:24::i;:::-;28134:50;;28195:25;28253:18;;28223;;:48;;;;:::i;:::-;28195:76;;28282:12;28330:1;28311:15;:20;:46;;;;28356:1;28335:17;:22;28311:46;28307:85;;;28374:7;;;;;28307:85;28447:2;28426:18;;:23;;;;:::i;:::-;28408:15;:41;28404:115;;;28505:2;28484:18;;:23;;;;:::i;:::-;28466:41;;28404:115;28531:23;28636:1;28607:17;28576:18;;28558:15;:36;;;;:::i;:::-;28557:67;;;;:::i;:::-;:80;;;;:::i;:::-;28531:106;;28648:26;28677:36;28697:15;28677;:19;;:36;;;;:::i;:::-;28648:65;;28726:25;28754:21;28726:49;;28788:36;28805:18;28788:16;:36::i;:::-;28837:18;28858:44;28884:17;28858:21;:25;;:44;;;;:::i;:::-;28837:65;;28915:23;28941:81;28994:17;28941:34;28956:18;;28941:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;28915:107;;29035:23;29074:15;29061:10;:28;;;;:::i;:::-;29035:54;;29123:1;29102:18;:22;;;;29156:1;29135:18;:22;;;;29192:1;29174:15;:19;:42;;;;;29215:1;29197:15;:19;29174:42;29170:280;;;29233:46;29246:15;29263;29233:12;:46::i;:::-;29299:139;29334:18;29371:15;29405:18;;29299:139;;;;;;;;:::i;:::-;;;;;;;;29170:280;29484:15;;;;;;;;;;;29476:29;;29513:21;29476:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29462:77;;;;;28123:1424;;;;;;;;;28095:1452;:::o;8281:98::-;8339:7;8370:1;8366;:5;;;;:::i;:::-;8359:12;;8281:98;;;;:::o;8387:::-;8445:7;8476:1;8472;:5;;;;:::i;:::-;8465:12;;8387:98;;;;:::o;6755:125::-;;;;:::o;6888:124::-;;;;:::o;8175:98::-;8233:7;8264:1;8260;:5;;;;:::i;:::-;8253:12;;8175:98;;;;:::o;27208:503::-;27276:21;27314:1;27300:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27276:40;;27345:4;27327;27332:1;27327:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27371:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27361:4;27366:1;27361:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27406:62;27423:4;27438:15;27456:11;27406:8;:62::i;:::-;27507:15;:66;;;27588:11;27614:1;27630:4;27657;27677:15;27507:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27263:448;27208:503;:::o;27719:368::-;27802:62;27819:4;27834:15;27852:11;27802:8;:62::i;:::-;27877:15;:31;;;27916:9;27949:4;27969:11;27995:1;28011;14421:6;28053:15;27877:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27719:368;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:117::-;6962:1;6959;6952:12;6976:117;7085:1;7082;7075:12;7099:117;7208:1;7205;7198:12;7239:568;7312:8;7322:6;7372:3;7365:4;7357:6;7353:17;7349:27;7339:122;;7380:79;;:::i;:::-;7339:122;7493:6;7480:20;7470:30;;7523:18;7515:6;7512:30;7509:117;;;7545:79;;:::i;:::-;7509:117;7659:4;7651:6;7647:17;7635:29;;7713:3;7705:4;7697:6;7693:17;7683:8;7679:32;7676:41;7673:128;;;7720:79;;:::i;:::-;7673:128;7239:568;;;;;:::o;7813:116::-;7883:21;7898:5;7883:21;:::i;:::-;7876:5;7873:32;7863:60;;7919:1;7916;7909:12;7863:60;7813:116;:::o;7935:133::-;7978:5;8016:6;8003:20;7994:29;;8032:30;8056:5;8032:30;:::i;:::-;7935:133;;;;:::o;8074:698::-;8166:6;8174;8182;8231:2;8219:9;8210:7;8206:23;8202:32;8199:119;;;8237:79;;:::i;:::-;8199:119;8385:1;8374:9;8370:17;8357:31;8415:18;8407:6;8404:30;8401:117;;;8437:79;;:::i;:::-;8401:117;8550:80;8622:7;8613:6;8602:9;8598:22;8550:80;:::i;:::-;8532:98;;;;8328:312;8679:2;8705:50;8747:7;8738:6;8727:9;8723:22;8705:50;:::i;:::-;8695:60;;8650:115;8074:698;;;;;:::o;8778:468::-;8843:6;8851;8900:2;8888:9;8879:7;8875:23;8871:32;8868:119;;;8906:79;;:::i;:::-;8868:119;9026:1;9051:53;9096:7;9087:6;9076:9;9072:22;9051:53;:::i;:::-;9041:63;;8997:117;9153:2;9179:50;9221:7;9212:6;9201:9;9197:22;9179:50;:::i;:::-;9169:60;;9124:115;8778:468;;;;;:::o;9252:474::-;9320:6;9328;9377:2;9365:9;9356:7;9352:23;9348:32;9345:119;;;9383:79;;:::i;:::-;9345:119;9503:1;9528:53;9573:7;9564:6;9553:9;9549:22;9528:53;:::i;:::-;9518:63;;9474:117;9630:2;9656:53;9701:7;9692:6;9681:9;9677:22;9656:53;:::i;:::-;9646:63;;9601:118;9252:474;;;;;:::o;9732:765::-;9818:6;9826;9834;9842;9891:3;9879:9;9870:7;9866:23;9862:33;9859:120;;;9898:79;;:::i;:::-;9859:120;10018:1;10043:53;10088:7;10079:6;10068:9;10064:22;10043:53;:::i;:::-;10033:63;;9989:117;10145:2;10171:53;10216:7;10207:6;10196:9;10192:22;10171:53;:::i;:::-;10161:63;;10116:118;10273:2;10299:53;10344:7;10335:6;10324:9;10320:22;10299:53;:::i;:::-;10289:63;;10244:118;10401:2;10427:53;10472:7;10463:6;10452:9;10448:22;10427:53;:::i;:::-;10417:63;;10372:118;9732:765;;;;;;;:::o;10503:474::-;10571:6;10579;10628:2;10616:9;10607:7;10603:23;10599:32;10596:119;;;10634:79;;:::i;:::-;10596:119;10754:1;10779:53;10824:7;10815:6;10804:9;10800:22;10779:53;:::i;:::-;10769:63;;10725:117;10881:2;10907:53;10952:7;10943:6;10932:9;10928:22;10907:53;:::i;:::-;10897:63;;10852:118;10503:474;;;;;:::o;10983:180::-;11031:77;11028:1;11021:88;11128:4;11125:1;11118:15;11152:4;11149:1;11142:15;11169:320;11213:6;11250:1;11244:4;11240:12;11230:22;;11297:1;11291:4;11287:12;11318:18;11308:81;;11374:4;11366:6;11362:17;11352:27;;11308:81;11436:2;11428:6;11425:14;11405:18;11402:38;11399:84;;11455:18;;:::i;:::-;11399:84;11220:269;11169:320;;;:::o;11495:227::-;11635:34;11631:1;11623:6;11619:14;11612:58;11704:10;11699:2;11691:6;11687:15;11680:35;11495:227;:::o;11728:366::-;11870:3;11891:67;11955:2;11950:3;11891:67;:::i;:::-;11884:74;;11967:93;12056:3;11967:93;:::i;:::-;12085:2;12080:3;12076:12;12069:19;;11728:366;;;:::o;12100:419::-;12266:4;12304:2;12293:9;12289:18;12281:26;;12353:9;12347:4;12343:20;12339:1;12328:9;12324:17;12317:47;12381:131;12507:4;12381:131;:::i;:::-;12373:139;;12100:419;;;:::o;12525:180::-;12573:77;12570:1;12563:88;12670:4;12667:1;12660:15;12694:4;12691:1;12684:15;12711:191;12751:3;12770:20;12788:1;12770:20;:::i;:::-;12765:25;;12804:20;12822:1;12804:20;:::i;:::-;12799:25;;12847:1;12844;12840:9;12833:16;;12868:3;12865:1;12862:10;12859:36;;;12875:18;;:::i;:::-;12859:36;12711:191;;;;:::o;12908:182::-;13048:34;13044:1;13036:6;13032:14;13025:58;12908:182;:::o;13096:366::-;13238:3;13259:67;13323:2;13318:3;13259:67;:::i;:::-;13252:74;;13335:93;13424:3;13335:93;:::i;:::-;13453:2;13448:3;13444:12;13437:19;;13096:366;;;:::o;13468:419::-;13634:4;13672:2;13661:9;13657:18;13649:26;;13721:9;13715:4;13711:20;13707:1;13696:9;13692:17;13685:47;13749:131;13875:4;13749:131;:::i;:::-;13741:139;;13468:419;;;:::o;13893:224::-;14033:34;14029:1;14021:6;14017:14;14010:58;14102:7;14097:2;14089:6;14085:15;14078:32;13893:224;:::o;14123:366::-;14265:3;14286:67;14350:2;14345:3;14286:67;:::i;:::-;14279:74;;14362:93;14451:3;14362:93;:::i;:::-;14480:2;14475:3;14471:12;14464:19;;14123:366;;;:::o;14495:419::-;14661:4;14699:2;14688:9;14684:18;14676:26;;14748:9;14742:4;14738:20;14734:1;14723:9;14719:17;14712:47;14776:131;14902:4;14776:131;:::i;:::-;14768:139;;14495:419;;;:::o;14920:224::-;15060:34;15056:1;15048:6;15044:14;15037:58;15129:7;15124:2;15116:6;15112:15;15105:32;14920:224;:::o;15150:366::-;15292:3;15313:67;15377:2;15372:3;15313:67;:::i;:::-;15306:74;;15389:93;15478:3;15389:93;:::i;:::-;15507:2;15502:3;15498:12;15491:19;;15150:366;;;:::o;15522:419::-;15688:4;15726:2;15715:9;15711:18;15703:26;;15775:9;15769:4;15765:20;15761:1;15750:9;15746:17;15739:47;15803:131;15929:4;15803:131;:::i;:::-;15795:139;;15522:419;;;:::o;15947:180::-;15995:77;15992:1;15985:88;16092:4;16089:1;16082:15;16116:4;16113:1;16106:15;16133:233;16172:3;16195:24;16213:5;16195:24;:::i;:::-;16186:33;;16241:66;16234:5;16231:77;16228:103;;16311:18;;:::i;:::-;16228:103;16358:1;16351:5;16347:13;16340:20;;16133:233;;;:::o;16372:223::-;16512:34;16508:1;16500:6;16496:14;16489:58;16581:6;16576:2;16568:6;16564:15;16557:31;16372:223;:::o;16601:366::-;16743:3;16764:67;16828:2;16823:3;16764:67;:::i;:::-;16757:74;;16840:93;16929:3;16840:93;:::i;:::-;16958:2;16953:3;16949:12;16942:19;;16601:366;;;:::o;16973:419::-;17139:4;17177:2;17166:9;17162:18;17154:26;;17226:9;17220:4;17216:20;17212:1;17201:9;17197:17;17190:47;17254:131;17380:4;17254:131;:::i;:::-;17246:139;;16973:419;;;:::o;17398:102::-;17440:8;17487:5;17484:1;17480:13;17459:34;;17398:102;;;:::o;17506:848::-;17567:5;17574:4;17598:6;17589:15;;17622:5;17613:14;;17636:712;17657:1;17647:8;17644:15;17636:712;;;17752:4;17747:3;17743:14;17737:4;17734:24;17731:50;;;17761:18;;:::i;:::-;17731:50;17811:1;17801:8;17797:16;17794:451;;;18226:4;18219:5;18215:16;18206:25;;17794:451;18276:4;18270;18266:15;18258:23;;18306:32;18329:8;18306:32;:::i;:::-;18294:44;;17636:712;;;17506:848;;;;;;;:::o;18360:1073::-;18414:5;18605:8;18595:40;;18626:1;18617:10;;18628:5;;18595:40;18654:4;18644:36;;18671:1;18662:10;;18673:5;;18644:36;18740:4;18788:1;18783:27;;;;18824:1;18819:191;;;;18733:277;;18783:27;18801:1;18792:10;;18803:5;;;18819:191;18864:3;18854:8;18851:17;18848:43;;;18871:18;;:::i;:::-;18848:43;18920:8;18917:1;18913:16;18904:25;;18955:3;18948:5;18945:14;18942:40;;;18962:18;;:::i;:::-;18942:40;18995:5;;;18733:277;;19119:2;19109:8;19106:16;19100:3;19094:4;19091:13;19087:36;19069:2;19059:8;19056:16;19051:2;19045:4;19042:12;19038:35;19022:111;19019:246;;;19175:8;19169:4;19165:19;19156:28;;19210:3;19203:5;19200:14;19197:40;;;19217:18;;:::i;:::-;19197:40;19250:5;;19019:246;19290:42;19328:3;19318:8;19312:4;19309:1;19290:42;:::i;:::-;19275:57;;;;19364:4;19359:3;19355:14;19348:5;19345:25;19342:51;;;19373:18;;:::i;:::-;19342:51;19422:4;19415:5;19411:16;19402:25;;18360:1073;;;;;;:::o;19439:281::-;19497:5;19521:23;19539:4;19521:23;:::i;:::-;19513:31;;19565:25;19581:8;19565:25;:::i;:::-;19553:37;;19609:104;19646:66;19636:8;19630:4;19609:104;:::i;:::-;19600:113;;19439:281;;;;:::o;19726:410::-;19766:7;19789:20;19807:1;19789:20;:::i;:::-;19784:25;;19823:20;19841:1;19823:20;:::i;:::-;19818:25;;19878:1;19875;19871:9;19900:30;19918:11;19900:30;:::i;:::-;19889:41;;20079:1;20070:7;20066:15;20063:1;20060:22;20040:1;20033:9;20013:83;19990:139;;20109:18;;:::i;:::-;19990:139;19774:362;19726:410;;;;:::o;20142:180::-;20190:77;20187:1;20180:88;20287:4;20284:1;20277:15;20311:4;20308:1;20301:15;20328:185;20368:1;20385:20;20403:1;20385:20;:::i;:::-;20380:25;;20419:20;20437:1;20419:20;:::i;:::-;20414:25;;20458:1;20448:35;;20463:18;;:::i;:::-;20448:35;20505:1;20502;20498:9;20493:14;;20328:185;;;;:::o;20519:220::-;20659:34;20655:1;20647:6;20643:14;20636:58;20728:3;20723:2;20715:6;20711:15;20704:28;20519:220;:::o;20745:366::-;20887:3;20908:67;20972:2;20967:3;20908:67;:::i;:::-;20901:74;;20984:93;21073:3;20984:93;:::i;:::-;21102:2;21097:3;21093:12;21086:19;;20745:366;;;:::o;21117:419::-;21283:4;21321:2;21310:9;21306:18;21298:26;;21370:9;21364:4;21360:20;21356:1;21345:9;21341:17;21334:47;21398:131;21524:4;21398:131;:::i;:::-;21390:139;;21117:419;;;:::o;21542:223::-;21682:34;21678:1;21670:6;21666:14;21659:58;21751:6;21746:2;21738:6;21734:15;21727:31;21542:223;:::o;21771:366::-;21913:3;21934:67;21998:2;21993:3;21934:67;:::i;:::-;21927:74;;22010:93;22099:3;22010:93;:::i;:::-;22128:2;22123:3;22119:12;22112:19;;21771:366;;;:::o;22143:419::-;22309:4;22347:2;22336:9;22332:18;22324:26;;22396:9;22390:4;22386:20;22382:1;22371:9;22367:17;22360:47;22424:131;22550:4;22424:131;:::i;:::-;22416:139;;22143:419;;;:::o;22568:170::-;22708:22;22704:1;22696:6;22692:14;22685:46;22568:170;:::o;22744:366::-;22886:3;22907:67;22971:2;22966:3;22907:67;:::i;:::-;22900:74;;22983:93;23072:3;22983:93;:::i;:::-;23101:2;23096:3;23092:12;23085:19;;22744:366;;;:::o;23116:419::-;23282:4;23320:2;23309:9;23305:18;23297:26;;23369:9;23363:4;23359:20;23355:1;23344:9;23340:17;23333:47;23397:131;23523:4;23397:131;:::i;:::-;23389:139;;23116:419;;;:::o;23541:244::-;23681:34;23677:1;23669:6;23665:14;23658:58;23750:27;23745:2;23737:6;23733:15;23726:52;23541:244;:::o;23791:366::-;23933:3;23954:67;24018:2;24013:3;23954:67;:::i;:::-;23947:74;;24030:93;24119:3;24030:93;:::i;:::-;24148:2;24143:3;24139:12;24132:19;;23791:366;;;:::o;24163:419::-;24329:4;24367:2;24356:9;24352:18;24344:26;;24416:9;24410:4;24406:20;24402:1;24391:9;24387:17;24380:47;24444:131;24570:4;24444:131;:::i;:::-;24436:139;;24163:419;;;:::o;24588:224::-;24728:34;24724:1;24716:6;24712:14;24705:58;24797:7;24792:2;24784:6;24780:15;24773:32;24588:224;:::o;24818:366::-;24960:3;24981:67;25045:2;25040:3;24981:67;:::i;:::-;24974:74;;25057:93;25146:3;25057:93;:::i;:::-;25175:2;25170:3;25166:12;25159:19;;24818:366;;;:::o;25190:419::-;25356:4;25394:2;25383:9;25379:18;25371:26;;25443:9;25437:4;25433:20;25429:1;25418:9;25414:17;25407:47;25471:131;25597:4;25471:131;:::i;:::-;25463:139;;25190:419;;;:::o;25615:221::-;25755:34;25751:1;25743:6;25739:14;25732:58;25824:4;25819:2;25811:6;25807:15;25800:29;25615:221;:::o;25842:366::-;25984:3;26005:67;26069:2;26064:3;26005:67;:::i;:::-;25998:74;;26081:93;26170:3;26081:93;:::i;:::-;26199:2;26194:3;26190:12;26183:19;;25842:366;;;:::o;26214:419::-;26380:4;26418:2;26407:9;26403:18;26395:26;;26467:9;26461:4;26457:20;26453:1;26442:9;26438:17;26431:47;26495:131;26621:4;26495:131;:::i;:::-;26487:139;;26214:419;;;:::o;26639:178::-;26779:30;26775:1;26767:6;26763:14;26756:54;26639:178;:::o;26823:366::-;26965:3;26986:67;27050:2;27045:3;26986:67;:::i;:::-;26979:74;;27062:93;27151:3;27062:93;:::i;:::-;27180:2;27175:3;27171:12;27164:19;;26823:366;;;:::o;27195:419::-;27361:4;27399:2;27388:9;27384:18;27376:26;;27448:9;27442:4;27438:20;27434:1;27423:9;27419:17;27412:47;27476:131;27602:4;27476:131;:::i;:::-;27468:139;;27195:419;;;:::o;27620:241::-;27760:34;27756:1;27748:6;27744:14;27737:58;27829:24;27824:2;27816:6;27812:15;27805:49;27620:241;:::o;27867:366::-;28009:3;28030:67;28094:2;28089:3;28030:67;:::i;:::-;28023:74;;28106:93;28195:3;28106:93;:::i;:::-;28224:2;28219:3;28215:12;28208:19;;27867:366;;;:::o;28239:419::-;28405:4;28443:2;28432:9;28428:18;28420:26;;28492:9;28486:4;28482:20;28478:1;28467:9;28463:17;28456:47;28520:131;28646:4;28520:131;:::i;:::-;28512:139;;28239:419;;;:::o;28664:332::-;28785:4;28823:2;28812:9;28808:18;28800:26;;28836:71;28904:1;28893:9;28889:17;28880:6;28836:71;:::i;:::-;28917:72;28985:2;28974:9;28970:18;28961:6;28917:72;:::i;:::-;28664:332;;;;;:::o;29002:137::-;29056:5;29087:6;29081:13;29072:22;;29103:30;29127:5;29103:30;:::i;:::-;29002:137;;;;:::o;29145:345::-;29212:6;29261:2;29249:9;29240:7;29236:23;29232:32;29229:119;;;29267:79;;:::i;:::-;29229:119;29387:1;29412:61;29465:7;29456:6;29445:9;29441:22;29412:61;:::i;:::-;29402:71;;29358:125;29145:345;;;;:::o;29496:240::-;29636:34;29632:1;29624:6;29620:14;29613:58;29705:23;29700:2;29692:6;29688:15;29681:48;29496:240;:::o;29742:366::-;29884:3;29905:67;29969:2;29964:3;29905:67;:::i;:::-;29898:74;;29981:93;30070:3;29981:93;:::i;:::-;30099:2;30094:3;30090:12;30083:19;;29742:366;;;:::o;30114:419::-;30280:4;30318:2;30307:9;30303:18;30295:26;;30367:9;30361:4;30357:20;30353:1;30342:9;30338:17;30331:47;30395:131;30521:4;30395:131;:::i;:::-;30387:139;;30114:419;;;:::o;30539:239::-;30679:34;30675:1;30667:6;30663:14;30656:58;30748:22;30743:2;30735:6;30731:15;30724:47;30539:239;:::o;30784:366::-;30926:3;30947:67;31011:2;31006:3;30947:67;:::i;:::-;30940:74;;31023:93;31112:3;31023:93;:::i;:::-;31141:2;31136:3;31132:12;31125:19;;30784:366;;;:::o;31156:419::-;31322:4;31360:2;31349:9;31345:18;31337:26;;31409:9;31403:4;31399:20;31395:1;31384:9;31380:17;31373:47;31437:131;31563:4;31437:131;:::i;:::-;31429:139;;31156:419;;;:::o;31581:225::-;31721:34;31717:1;31709:6;31705:14;31698:58;31790:8;31785:2;31777:6;31773:15;31766:33;31581:225;:::o;31812:366::-;31954:3;31975:67;32039:2;32034:3;31975:67;:::i;:::-;31968:74;;32051:93;32140:3;32051:93;:::i;:::-;32169:2;32164:3;32160:12;32153:19;;31812:366;;;:::o;32184:419::-;32350:4;32388:2;32377:9;32373:18;32365:26;;32437:9;32431:4;32427:20;32423:1;32412:9;32408:17;32401:47;32465:131;32591:4;32465:131;:::i;:::-;32457:139;;32184:419;;;:::o;32609:223::-;32749:34;32745:1;32737:6;32733:14;32726:58;32818:6;32813:2;32805:6;32801:15;32794:31;32609:223;:::o;32838:366::-;32980:3;33001:67;33065:2;33060:3;33001:67;:::i;:::-;32994:74;;33077:93;33166:3;33077:93;:::i;:::-;33195:2;33190:3;33186:12;33179:19;;32838:366;;;:::o;33210:419::-;33376:4;33414:2;33403:9;33399:18;33391:26;;33463:9;33457:4;33453:20;33449:1;33438:9;33434:17;33427:47;33491:131;33617:4;33491:131;:::i;:::-;33483:139;;33210:419;;;:::o;33635:221::-;33775:34;33771:1;33763:6;33759:14;33752:58;33844:4;33839:2;33831:6;33827:15;33820:29;33635:221;:::o;33862:366::-;34004:3;34025:67;34089:2;34084:3;34025:67;:::i;:::-;34018:74;;34101:93;34190:3;34101:93;:::i;:::-;34219:2;34214:3;34210:12;34203:19;;33862:366;;;:::o;34234:419::-;34400:4;34438:2;34427:9;34423:18;34415:26;;34487:9;34481:4;34477:20;34473:1;34462:9;34458:17;34451:47;34515:131;34641:4;34515:131;:::i;:::-;34507:139;;34234:419;;;:::o;34659:224::-;34799:34;34795:1;34787:6;34783:14;34776:58;34868:7;34863:2;34855:6;34851:15;34844:32;34659:224;:::o;34889:366::-;35031:3;35052:67;35116:2;35111:3;35052:67;:::i;:::-;35045:74;;35128:93;35217:3;35128:93;:::i;:::-;35246:2;35241:3;35237:12;35230:19;;34889:366;;;:::o;35261:419::-;35427:4;35465:2;35454:9;35450:18;35442:26;;35514:9;35508:4;35504:20;35500:1;35489:9;35485:17;35478:47;35542:131;35668:4;35542:131;:::i;:::-;35534:139;;35261:419;;;:::o;35686:222::-;35826:34;35822:1;35814:6;35810:14;35803:58;35895:5;35890:2;35882:6;35878:15;35871:30;35686:222;:::o;35914:366::-;36056:3;36077:67;36141:2;36136:3;36077:67;:::i;:::-;36070:74;;36153:93;36242:3;36153:93;:::i;:::-;36271:2;36266:3;36262:12;36255:19;;35914:366;;;:::o;36286:419::-;36452:4;36490:2;36479:9;36475:18;36467:26;;36539:9;36533:4;36529:20;36525:1;36514:9;36510:17;36503:47;36567:131;36693:4;36567:131;:::i;:::-;36559:139;;36286:419;;;:::o;36711:172::-;36851:24;36847:1;36839:6;36835:14;36828:48;36711:172;:::o;36889:366::-;37031:3;37052:67;37116:2;37111:3;37052:67;:::i;:::-;37045:74;;37128:93;37217:3;37128:93;:::i;:::-;37246:2;37241:3;37237:12;37230:19;;36889:366;;;:::o;37261:419::-;37427:4;37465:2;37454:9;37450:18;37442:26;;37514:9;37508:4;37504:20;37500:1;37489:9;37485:17;37478:47;37542:131;37668:4;37542:131;:::i;:::-;37534:139;;37261:419;;;:::o;37686:175::-;37826:27;37822:1;37814:6;37810:14;37803:51;37686:175;:::o;37867:366::-;38009:3;38030:67;38094:2;38089:3;38030:67;:::i;:::-;38023:74;;38106:93;38195:3;38106:93;:::i;:::-;38224:2;38219:3;38215:12;38208:19;;37867:366;;;:::o;38239:419::-;38405:4;38443:2;38432:9;38428:18;38420:26;;38492:9;38486:4;38482:20;38478:1;38467:9;38463:17;38456:47;38520:131;38646:4;38520:131;:::i;:::-;38512:139;;38239:419;;;:::o;38664:231::-;38804:34;38800:1;38792:6;38788:14;38781:58;38873:14;38868:2;38860:6;38856:15;38849:39;38664:231;:::o;38901:366::-;39043:3;39064:67;39128:2;39123:3;39064:67;:::i;:::-;39057:74;;39140:93;39229:3;39140:93;:::i;:::-;39258:2;39253:3;39249:12;39242:19;;38901:366;;;:::o;39273:419::-;39439:4;39477:2;39466:9;39462:18;39454:26;;39526:9;39520:4;39516:20;39512:1;39501:9;39497:17;39490:47;39554:131;39680:4;39554:131;:::i;:::-;39546:139;;39273:419;;;:::o;39698:240::-;39838:34;39834:1;39826:6;39822:14;39815:58;39907:23;39902:2;39894:6;39890:15;39883:48;39698:240;:::o;39944:366::-;40086:3;40107:67;40171:2;40166:3;40107:67;:::i;:::-;40100:74;;40183:93;40272:3;40183:93;:::i;:::-;40301:2;40296:3;40292:12;40285:19;;39944:366;;;:::o;40316:419::-;40482:4;40520:2;40509:9;40505:18;40497:26;;40569:9;40563:4;40559:20;40555:1;40544:9;40540:17;40533:47;40597:131;40723:4;40597:131;:::i;:::-;40589:139;;40316:419;;;:::o;40741:169::-;40881:21;40877:1;40869:6;40865:14;40858:45;40741:169;:::o;40916:366::-;41058:3;41079:67;41143:2;41138:3;41079:67;:::i;:::-;41072:74;;41155:93;41244:3;41155:93;:::i;:::-;41273:2;41268:3;41264:12;41257:19;;40916:366;;;:::o;41288:419::-;41454:4;41492:2;41481:9;41477:18;41469:26;;41541:9;41535:4;41531:20;41527:1;41516:9;41512:17;41505:47;41569:131;41695:4;41569:131;:::i;:::-;41561:139;;41288:419;;;:::o;41713:241::-;41853:34;41849:1;41841:6;41837:14;41830:58;41922:24;41917:2;41909:6;41905:15;41898:49;41713:241;:::o;41960:366::-;42102:3;42123:67;42187:2;42182:3;42123:67;:::i;:::-;42116:74;;42199:93;42288:3;42199:93;:::i;:::-;42317:2;42312:3;42308:12;42301:19;;41960:366;;;:::o;42332:419::-;42498:4;42536:2;42525:9;42521:18;42513:26;;42585:9;42579:4;42575:20;42571:1;42560:9;42556:17;42549:47;42613:131;42739:4;42613:131;:::i;:::-;42605:139;;42332:419;;;:::o;42757:194::-;42797:4;42817:20;42835:1;42817:20;:::i;:::-;42812:25;;42851:20;42869:1;42851:20;:::i;:::-;42846:25;;42895:1;42892;42888:9;42880:17;;42919:1;42913:4;42910:11;42907:37;;;42924:18;;:::i;:::-;42907:37;42757:194;;;;:::o;42957:225::-;43097:34;43093:1;43085:6;43081:14;43074:58;43166:8;43161:2;43153:6;43149:15;43142:33;42957:225;:::o;43188:366::-;43330:3;43351:67;43415:2;43410:3;43351:67;:::i;:::-;43344:74;;43427:93;43516:3;43427:93;:::i;:::-;43545:2;43540:3;43536:12;43529:19;;43188:366;;;:::o;43560:419::-;43726:4;43764:2;43753:9;43749:18;43741:26;;43813:9;43807:4;43803:20;43799:1;43788:9;43784:17;43777:47;43841:131;43967:4;43841:131;:::i;:::-;43833:139;;43560:419;;;:::o;43985:442::-;44134:4;44172:2;44161:9;44157:18;44149:26;;44185:71;44253:1;44242:9;44238:17;44229:6;44185:71;:::i;:::-;44266:72;44334:2;44323:9;44319:18;44310:6;44266:72;:::i;:::-;44348;44416:2;44405:9;44401:18;44392:6;44348:72;:::i;:::-;43985:442;;;;;;:::o;44433:147::-;44534:11;44571:3;44556:18;;44433:147;;;;:::o;44586:114::-;;:::o;44706:398::-;44865:3;44886:83;44967:1;44962:3;44886:83;:::i;:::-;44879:90;;44978:93;45067:3;44978:93;:::i;:::-;45096:1;45091:3;45087:11;45080:18;;44706:398;;;:::o;45110:379::-;45294:3;45316:147;45459:3;45316:147;:::i;:::-;45309:154;;45480:3;45473:10;;45110:379;;;:::o;45495:180::-;45543:77;45540:1;45533:88;45640:4;45637:1;45630:15;45664:4;45661:1;45654:15;45681:143;45738:5;45769:6;45763:13;45754:22;;45785:33;45812:5;45785:33;:::i;:::-;45681:143;;;;:::o;45830:351::-;45900:6;45949:2;45937:9;45928:7;45924:23;45920:32;45917:119;;;45955:79;;:::i;:::-;45917:119;46075:1;46100:64;46156:7;46147:6;46136:9;46132:22;46100:64;:::i;:::-;46090:74;;46046:128;45830:351;;;;:::o;46187:85::-;46232:7;46261:5;46250:16;;46187:85;;;:::o;46278:158::-;46336:9;46369:61;46387:42;46396:32;46422:5;46396:32;:::i;:::-;46387:42;:::i;:::-;46369:61;:::i;:::-;46356:74;;46278:158;;;:::o;46442:147::-;46537:45;46576:5;46537:45;:::i;:::-;46532:3;46525:58;46442:147;;:::o;46595:114::-;46662:6;46696:5;46690:12;46680:22;;46595:114;;;:::o;46715:184::-;46814:11;46848:6;46843:3;46836:19;46888:4;46883:3;46879:14;46864:29;;46715:184;;;;:::o;46905:132::-;46972:4;46995:3;46987:11;;47025:4;47020:3;47016:14;47008:22;;46905:132;;;:::o;47043:108::-;47120:24;47138:5;47120:24;:::i;:::-;47115:3;47108:37;47043:108;;:::o;47157:179::-;47226:10;47247:46;47289:3;47281:6;47247:46;:::i;:::-;47325:4;47320:3;47316:14;47302:28;;47157:179;;;;:::o;47342:113::-;47412:4;47444;47439:3;47435:14;47427:22;;47342:113;;;:::o;47491:732::-;47610:3;47639:54;47687:5;47639:54;:::i;:::-;47709:86;47788:6;47783:3;47709:86;:::i;:::-;47702:93;;47819:56;47869:5;47819:56;:::i;:::-;47898:7;47929:1;47914:284;47939:6;47936:1;47933:13;47914:284;;;48015:6;48009:13;48042:63;48101:3;48086:13;48042:63;:::i;:::-;48035:70;;48128:60;48181:6;48128:60;:::i;:::-;48118:70;;47974:224;47961:1;47958;47954:9;47949:14;;47914:284;;;47918:14;48214:3;48207:10;;47615:608;;;47491:732;;;;:::o;48229:831::-;48492:4;48530:3;48519:9;48515:19;48507:27;;48544:71;48612:1;48601:9;48597:17;48588:6;48544:71;:::i;:::-;48625:80;48701:2;48690:9;48686:18;48677:6;48625:80;:::i;:::-;48752:9;48746:4;48742:20;48737:2;48726:9;48722:18;48715:48;48780:108;48883:4;48874:6;48780:108;:::i;:::-;48772:116;;48898:72;48966:2;48955:9;48951:18;48942:6;48898:72;:::i;:::-;48980:73;49048:3;49037:9;49033:19;49024:6;48980:73;:::i;:::-;48229:831;;;;;;;;:::o;49066:807::-;49315:4;49353:3;49342:9;49338:19;49330:27;;49367:71;49435:1;49424:9;49420:17;49411:6;49367:71;:::i;:::-;49448:72;49516:2;49505:9;49501:18;49492:6;49448:72;:::i;:::-;49530:80;49606:2;49595:9;49591:18;49582:6;49530:80;:::i;:::-;49620;49696:2;49685:9;49681:18;49672:6;49620:80;:::i;:::-;49710:73;49778:3;49767:9;49763:19;49754:6;49710:73;:::i;:::-;49793;49861:3;49850:9;49846:19;49837:6;49793:73;:::i;:::-;49066:807;;;;;;;;;:::o;49879:143::-;49936:5;49967:6;49961:13;49952:22;;49983:33;50010:5;49983:33;:::i;:::-;49879:143;;;;:::o;50028:663::-;50116:6;50124;50132;50181:2;50169:9;50160:7;50156:23;50152:32;50149:119;;;50187:79;;:::i;:::-;50149:119;50307:1;50332:64;50388:7;50379:6;50368:9;50364:22;50332:64;:::i;:::-;50322:74;;50278:128;50445:2;50471:64;50527:7;50518:6;50507:9;50503:22;50471:64;:::i;:::-;50461:74;;50416:129;50584:2;50610:64;50666:7;50657:6;50646:9;50642:22;50610:64;:::i;:::-;50600:74;;50555:129;50028:663;;;;;:::o

Swarm Source

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