ETH Price: $2,532.21 (+5.34%)
 

Overview

Max Total Supply

1,000,000,000 Fifth and 200th

Holders

20

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,044,185.126310515807219922 Fifth and 200th

Value
$0.00
0xab8f432221f110b09a0c4f9123cfd93b5b90352a
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:
Ordinalis

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*
/*
Satoshis, not bitcoin, are the atomic, native currency of the Bitcoin network. One bitcoin can be sub-divided into 100,000,000 satoshis, but no further.
Ordinal theory does not require a sidechain or token aside from Bitcoin, and can be used without any changes to the Bitcoin network. It works right now.
Ordinal theory imbues satoshis with numismatic value, allowing them to be collected and traded as curios.
Individual satoshis can be inscribed with arbitrary content, creating unique Bitcoin-native digital artifacts that can be held in Bitcoin wallets and transferred using Bitcoin transactions. Inscriptions are as durable, immutable, secure, and decentralized as Bitcoin itself.
Other, more unusual use-cases are possible: off-chain colored-coins, public key infrastructure with key rotation, a decentralized replacement for the DNS. For now though, such use-cases are speculative, and exist only in the minds of fringe ordinal theorists.

Ordinal Theory Overview:    https://docs.ordinals.com/overview.html
Inscriptions:               https://docs.ordinals.com/inscriptions.html
Github:                     https://github.com/casey/ord/

Ordinals comes from the latin word ordinalis, wich means "relating to order, rank, or position in a series". All information above comes from the Ordinals website and might help people understand how all of this works.
*/

pragma solidity =0.8.8;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

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

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

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

contract Ordinalis is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

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

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

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


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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("Ordinalis", "Fifth and 200th") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 10;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 10;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 35_000_000 * 1e18;
        maxWallet = 35_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 5) / 10000;

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

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

        marketingWallet = address(0xa2E937Aed4b5BBCDABbA8D6cBd9982Dc1849b24e);
        devWallet = address(0xa2E937Aed4b5BBCDABbA8D6cBd9982Dc1849b24e); 

        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); //can only be called once
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    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 excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    event BoughtEarly(address indexed sniper);

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

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

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

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                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;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

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

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        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 +
            tokensForDev;
        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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

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

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

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

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600981526020017f4f7264696e616c697300000000000000000000000000000000000000000000008152506040518060400160405280600f81526020017f466966746820616e64203230307468000000000000000000000000000000000081525081600390805190602001906200012e92919062000b49565b5080600490805190602001906200014792919062000b49565b5050506200016a6200015e6200060960201b60201c565b6200061160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000196816001620006d760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021457600080fd5b505afa15801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f919062000c63565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b257600080fd5b505afa158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed919062000c63565b6040518363ffffffff1660e01b81526004016200030c92919062000ca6565b602060405180830381600087803b1580156200032757600080fd5b505af11580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000362919062000c63565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620003b060a05160601c6001620006d760201b60201c565b620003c860a05160601c6001620007c160201b60201c565b6000806000600a90506000806000600a905060006b033b2e3c9fd0803ce800000090506a1cf389cd46047d030000006008819055506a1cf389cd46047d03000000600a8190555061271060058262000421919062000d0c565b6200042d919062000d9c565b6009819055508660158190555085601681905550846017819055506017546016546015546200045d919062000dd4565b62000469919062000dd4565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000499919062000dd4565b620004a5919062000dd4565b60188190555073a2e937aed4b5bbcdabba8d6cbd9982dc1849b24e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a2e937aed4b5bbcdabba8d6cbd9982dc1849b24e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000577620005696200086260201b60201c565b60016200088c60201b60201c565b6200058a3060016200088c60201b60201c565b6200059f61dead60016200088c60201b60201c565b620005c1620005b36200086260201b60201c565b6001620006d760201b60201c565b620005d4306001620006d760201b60201c565b620005e961dead6001620006d760201b60201c565b620005fb3382620009c660201b60201c565b505050505050505062000ff3565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006e76200060960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200070d6200086260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000766576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075d9062000e92565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089c6200060960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008c26200086260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200091b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009129062000e92565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009ba919062000ed1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a309062000f3e565b60405180910390fd5b62000a4d6000838362000b3f60201b60201c565b806002600082825462000a61919062000dd4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ab8919062000dd4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1f919062000f71565b60405180910390a362000b3b6000838362000b4460201b60201c565b5050565b505050565b505050565b82805462000b579062000fbd565b90600052602060002090601f01602090048101928262000b7b576000855562000bc7565b82601f1062000b9657805160ff191683800117855562000bc7565b8280016001018555821562000bc7579182015b8281111562000bc657825182559160200191906001019062000ba9565b5b50905062000bd6919062000bda565b5090565b5b8082111562000bf557600081600090555060010162000bdb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c2b8262000bfe565b9050919050565b62000c3d8162000c1e565b811462000c4957600080fd5b50565b60008151905062000c5d8162000c32565b92915050565b60006020828403121562000c7c5762000c7b62000bf9565b5b600062000c8c8482850162000c4c565b91505092915050565b62000ca08162000c1e565b82525050565b600060408201905062000cbd600083018562000c95565b62000ccc602083018462000c95565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d198262000cd3565b915062000d268362000cd3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d625762000d6162000cdd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000da98262000cd3565b915062000db68362000cd3565b92508262000dc95762000dc862000d6d565b5b828204905092915050565b600062000de18262000cd3565b915062000dee8362000cd3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e265762000e2562000cdd565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e7a60208362000e31565b915062000e878262000e42565b602082019050919050565b6000602082019050818103600083015262000ead8162000e6b565b9050919050565b60008115159050919050565b62000ecb8162000eb4565b82525050565b600060208201905062000ee8600083018462000ec0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f26601f8362000e31565b915062000f338262000eee565b602082019050919050565b6000602082019050818103600083015262000f598162000f17565b9050919050565b62000f6b8162000cd3565b82525050565b600060208201905062000f88600083018462000f60565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fd657607f821691505b6020821081141562000fed5762000fec62000f8e565b5b50919050565b60805160601c60a05160601c61557e62001081600039600081816110d2015281816118e2015281816121e1015281816122a7015281816122d40152818161291801528181613a1c01528181613ae40152613b11015260008181610ec0015281816128c001528181613c8701528181613d7701528181613d9e01528181613e3a0152613e61015261557e6000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d33578063f637434214610d5c578063f8b45b0514610d87578063fe72b27a14610db25761038c565b8063dd62ed3e14610c75578063e2f4560514610cb2578063e884f26014610cdd578063f11a24d314610d085761038c565b8063c876d0b9116100dc578063c876d0b914610bb7578063c8c8ebe414610be2578063d257b34f14610c0d578063d85ba06314610c4a5761038c565b8063bbc0c74214610b3a578063c024666814610b65578063c17b5b8c14610b8e5761038c565b80639ec22c0e1161016f578063a457c2d711610149578063a457c2d714610a58578063a4c82a0014610a95578063a9059cbb14610ac0578063b62496f514610afd5761038c565b80639ec22c0e146109d75780639fccce3214610a02578063a0d82dc514610a2d5761038c565b8063924de9b7116101ab578063924de9b71461092f57806395d89b41146109585780639a7a23d6146109835780639c3b4fdc146109ac5761038c565b80638da5cb5b146108ae5780638ea5220f146108d957806392136913146109045761038c565b806339509351116102b6578063715018a61161025457806375f0a8741161022357806375f0a874146108185780637bce5a04146108435780638095d5641461086e5780638a8c523c146108975761038c565b8063715018a614610784578063730c18881461079b578063751039fc146107c45780637571336a146107ef5761038c565b80634fbee193116102905780634fbee193146106b45780636a486a8e146106f15780636ddd17131461071c57806370a08231146107475761038c565b8063395093511461062157806349bd5a5e1461065e5780634a62bb65146106895761038c565b80631a8145bb1161032357806327c8f835116102fd57806327c8f835146105755780632c3e486c146105a05780632e82f1a0146105cb578063313ce567146105f65761038c565b80631a8145bb146104e25780631f3fed8f1461050d57806323b872dd146105385761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd14610461578063184c16c51461048c578063199ffc72146104b75761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610def565b6040516103b39190613fb8565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190614073565b610e81565b6040516103f091906140ce565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906140e9565b610e9f565b60405161042d91906140ce565b60405180910390f35b34801561044257600080fd5b5061044b610ebe565b6040516104589190614175565b60405180910390f35b34801561046d57600080fd5b50610476610ee2565b604051610483919061419f565b60405180910390f35b34801561049857600080fd5b506104a1610eec565b6040516104ae919061419f565b60405180910390f35b3480156104c357600080fd5b506104cc610ef2565b6040516104d9919061419f565b60405180910390f35b3480156104ee57600080fd5b506104f7610ef8565b604051610504919061419f565b60405180910390f35b34801561051957600080fd5b50610522610efe565b60405161052f919061419f565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a91906141ba565b610f04565b60405161056c91906140ce565b60405180910390f35b34801561058157600080fd5b5061058a610ffc565b604051610597919061421c565b60405180910390f35b3480156105ac57600080fd5b506105b5611002565b6040516105c2919061419f565b60405180910390f35b3480156105d757600080fd5b506105e0611008565b6040516105ed91906140ce565b60405180910390f35b34801561060257600080fd5b5061060b61101b565b6040516106189190614253565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614073565b611024565b60405161065591906140ce565b60405180910390f35b34801561066a57600080fd5b506106736110d0565b604051610680919061421c565b60405180910390f35b34801561069557600080fd5b5061069e6110f4565b6040516106ab91906140ce565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d691906140e9565b611107565b6040516106e891906140ce565b60405180910390f35b3480156106fd57600080fd5b5061070661115d565b604051610713919061419f565b60405180910390f35b34801561072857600080fd5b50610731611163565b60405161073e91906140ce565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906140e9565b611176565b60405161077b919061419f565b60405180910390f35b34801561079057600080fd5b506107996111be565b005b3480156107a757600080fd5b506107c260048036038101906107bd919061429a565b611246565b005b3480156107d057600080fd5b506107d9611386565b6040516107e691906140ce565b60405180910390f35b3480156107fb57600080fd5b50610816600480360381019061081191906142ed565b611426565b005b34801561082457600080fd5b5061082d6114fd565b60405161083a919061421c565b60405180910390f35b34801561084f57600080fd5b50610858611523565b604051610865919061419f565b60405180910390f35b34801561087a57600080fd5b506108956004803603810190610890919061432d565b611529565b005b3480156108a357600080fd5b506108ac611628565b005b3480156108ba57600080fd5b506108c36116e3565b6040516108d0919061421c565b60405180910390f35b3480156108e557600080fd5b506108ee61170d565b6040516108fb919061421c565b60405180910390f35b34801561091057600080fd5b50610919611733565b604051610926919061419f565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190614380565b611739565b005b34801561096457600080fd5b5061096d6117d2565b60405161097a9190613fb8565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a591906142ed565b611864565b005b3480156109b857600080fd5b506109c161197d565b6040516109ce919061419f565b60405180910390f35b3480156109e357600080fd5b506109ec611983565b6040516109f9919061419f565b60405180910390f35b348015610a0e57600080fd5b50610a17611989565b604051610a24919061419f565b60405180910390f35b348015610a3957600080fd5b50610a4261198f565b604051610a4f919061419f565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190614073565b611995565b604051610a8c91906140ce565b60405180910390f35b348015610aa157600080fd5b50610aaa611a80565b604051610ab7919061419f565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614073565b611a86565b604051610af491906140ce565b60405180910390f35b348015610b0957600080fd5b50610b246004803603810190610b1f91906140e9565b611aa4565b604051610b3191906140ce565b60405180910390f35b348015610b4657600080fd5b50610b4f611ac4565b604051610b5c91906140ce565b60405180910390f35b348015610b7157600080fd5b50610b8c6004803603810190610b8791906142ed565b611ad7565b005b348015610b9a57600080fd5b50610bb56004803603810190610bb0919061432d565b611bfc565b005b348015610bc357600080fd5b50610bcc611cfb565b604051610bd991906140ce565b60405180910390f35b348015610bee57600080fd5b50610bf7611d0e565b604051610c04919061419f565b60405180910390f35b348015610c1957600080fd5b50610c346004803603810190610c2f91906143ad565b611d14565b604051610c4191906140ce565b60405180910390f35b348015610c5657600080fd5b50610c5f611e69565b604051610c6c919061419f565b60405180910390f35b348015610c8157600080fd5b50610c9c6004803603810190610c9791906143da565b611e6f565b604051610ca9919061419f565b60405180910390f35b348015610cbe57600080fd5b50610cc7611ef6565b604051610cd4919061419f565b60405180910390f35b348015610ce957600080fd5b50610cf2611efc565b604051610cff91906140ce565b60405180910390f35b348015610d1457600080fd5b50610d1d611f9c565b604051610d2a919061419f565b60405180910390f35b348015610d3f57600080fd5b50610d5a6004803603810190610d5591906140e9565b611fa2565b005b348015610d6857600080fd5b50610d7161209a565b604051610d7e919061419f565b60405180910390f35b348015610d9357600080fd5b50610d9c6120a0565b604051610da9919061419f565b60405180910390f35b348015610dbe57600080fd5b50610dd96004803603810190610dd491906143ad565b6120a6565b604051610de691906140ce565b60405180910390f35b606060038054610dfe90614449565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2a90614449565b8015610e775780601f10610e4c57610100808354040283529160200191610e77565b820191906000526020600020905b815481529060010190602001808311610e5a57829003601f168201915b5050505050905090565b6000610e95610e8e61238d565b8484612395565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601d5481565b601c5481565b6000610f11848484612560565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f5c61238d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906144ed565b60405180910390fd5b610ff085610fe861238d565b858403612395565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006110c661103161238d565b84846001600061103f61238d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110c1919061453c565b612395565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c661238d565b73ffffffffffffffffffffffffffffffffffffffff166111e46116e3565b73ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611231906145de565b60405180910390fd5b61124460006132f8565b565b61124e61238d565b73ffffffffffffffffffffffffffffffffffffffff1661126c6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b9906145de565b60405180910390fd5b610258831015611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90614670565b60405180910390fd5b6103e8821115801561131a575060008210155b611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614702565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061139061238d565b73ffffffffffffffffffffffffffffffffffffffff166113ae6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb906145de565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61142e61238d565b73ffffffffffffffffffffffffffffffffffffffff1661144c6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611499906145de565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61153161238d565b73ffffffffffffffffffffffffffffffffffffffff1661154f6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906145de565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546115cd919061453c565b6115d7919061453c565b60148190555060036014541115611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a9061476e565b60405180910390fd5b505050565b61163061238d565b73ffffffffffffffffffffffffffffffffffffffff1661164e6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b906145de565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b61174161238d565b73ffffffffffffffffffffffffffffffffffffffff1661175f6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac906145de565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546117e190614449565b80601f016020809104026020016040519081016040528092919081815260200182805461180d90614449565b801561185a5780601f1061182f5761010080835404028352916020019161185a565b820191906000526020600020905b81548152906001019060200180831161183d57829003601f168201915b5050505050905090565b61186c61238d565b73ffffffffffffffffffffffffffffffffffffffff1661188a6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d7906145de565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614800565b60405180910390fd5b61197982826133be565b5050565b60175481565b60105481565b601e5481565b601b5481565b600080600160006119a461238d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890614892565b60405180910390fd5b611a75611a6c61238d565b85858403612395565b600191505092915050565b600e5481565b6000611a9a611a9361238d565b8484612560565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611adf61238d565b73ffffffffffffffffffffffffffffffffffffffff16611afd6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906145de565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bf091906140ce565b60405180910390a25050565b611c0461238d565b73ffffffffffffffffffffffffffffffffffffffff16611c226116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f906145de565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611ca0919061453c565b611caa919061453c565b60188190555060036018541115611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061476e565b60405180910390fd5b505050565b601360009054906101000a900460ff1681565b60085481565b6000611d1e61238d565b73ffffffffffffffffffffffffffffffffffffffff16611d3c6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906145de565b60405180910390fd5b620186a06001611da0610ee2565b611daa91906148b2565b611db4919061493b565b821015611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906149de565b60405180910390fd5b6103e86005611e03610ee2565b611e0d91906148b2565b611e17919061493b565b821115611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614a70565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f0661238d565b73ffffffffffffffffffffffffffffffffffffffff16611f246116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f71906145de565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611faa61238d565b73ffffffffffffffffffffffffffffffffffffffff16611fc86116e3565b73ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612015906145de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614b02565b60405180910390fd5b612097816132f8565b50565b601a5481565b600a5481565b60006120b061238d565b73ffffffffffffffffffffffffffffffffffffffff166120ce6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b906145de565b60405180910390fd5b600f54601054612134919061453c565b4211612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90614b6e565b60405180910390fd5b6103e88211156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614c00565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161221c919061421c565b60206040518083038186803b15801561223457600080fd5b505afa158015612248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226c9190614c35565b90506000612297612710612289868561345f90919063ffffffff16565b61347590919063ffffffff16565b905060008111156122d0576122cf7f000000000000000000000000000000000000000000000000000000000000000061dead8361348b565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561233d57600080fd5b505af1158015612351573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614cd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246c90614d66565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612553919061419f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c790614df8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263790614e8a565b60405180910390fd5b600081141561265a576126558383600061348b565b6132f3565b601160009054906101000a900460ff1615612d1d576126776116e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126e557506126b56116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561271e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612758575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127715750600560149054906101000a900460ff16155b15612d1c57601160019054906101000a900460ff1661286b57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061282b5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190614ef6565b60405180910390fd5b5b601360009054906101000a900460ff1615612a33576128886116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561290f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561296757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a325743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e490614fae565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ad65750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7d57600854811115612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1790615040565b60405180910390fd5b600a54612b2c83611176565b82612b37919061453c565b1115612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f906150ac565b60405180910390fd5b612d1b565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c205750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6f57600854811115612c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c619061513e565b60405180910390fd5b612d1a565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d1957600a54612ccc83611176565b82612cd7919061453c565b1115612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f906150ac565b60405180910390fd5b5b5b5b5b5b6000612d2830611176565b905060006009548210159050808015612d4d5750601160029054906101000a900460ff165b8015612d665750600560149054906101000a900460ff16155b8015612dbc5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e125750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e685750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eac576001600560146101000a81548160ff021916908315150217905550612e9061370c565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612f125750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612f2a5750600c60009054906101000a900460ff165b8015612f455750600d54600e54612f41919061453c565b4210155b8015612f9b5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612faa57612fa86139f3565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130605750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561306a57600090505b600081156132e357602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130cd57506000601854115b1561319a576130fa60646130ec6018548861345f90919063ffffffff16565b61347590919063ffffffff16565b9050601854601a548261310d91906148b2565b613117919061493b565b601d6000828254613128919061453c565b92505081905550601854601b548261314091906148b2565b61314a919061493b565b601e600082825461315b919061453c565b925050819055506018546019548261317391906148b2565b61317d919061493b565b601c600082825461318e919061453c565b925050819055506132bf565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f557506000601454115b156132be5761322260646132146014548861345f90919063ffffffff16565b61347590919063ffffffff16565b90506014546016548261323591906148b2565b61323f919061493b565b601d6000828254613250919061453c565b925050819055506014546017548261326891906148b2565b613272919061493b565b601e6000828254613283919061453c565b925050819055506014546015548261329b91906148b2565b6132a5919061493b565b601c60008282546132b6919061453c565b925050819055505b5b60008111156132d4576132d387308361348b565b5b80856132e0919061515e565b94505b6132ee87878761348b565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361346d91906148b2565b905092915050565b60008183613483919061493b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f290614df8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561356b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356290614e8a565b60405180910390fd5b613576838383613bc8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f390615204565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461368f919061453c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136f3919061419f565b60405180910390a3613706848484613bcd565b50505050565b600061371730611176565b90506000601e54601c54601d5461372e919061453c565b613738919061453c565b905060008083148061374a5750600082145b15613757575050506139f1565b601460095461376691906148b2565b83111561377f57601460095461377c91906148b2565b92505b6000600283601d548661379291906148b2565b61379c919061493b565b6137a6919061493b565b905060006137bd8286613bd290919063ffffffff16565b905060004790506137cd82613be8565b60006137e28247613bd290919063ffffffff16565b9050600061380d876137ff601c548561345f90919063ffffffff16565b61347590919063ffffffff16565b905060006138388861382a601e548661345f90919063ffffffff16565b61347590919063ffffffff16565b90506000818385613849919061515e565b613853919061515e565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138b390615255565b60006040518083038185875af1925050503d80600081146138f0576040519150601f19603f3d011682016040523d82523d6000602084013e6138f5565b606091505b50508098505060008711801561390b5750600081115b156139585761391a8782613e34565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d5460405161394f9392919061526a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161399e90615255565b60006040518083038185875af1925050503d80600081146139db576040519150601f19603f3d011682016040523d82523d6000602084013e6139e0565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613a57919061421c565b60206040518083038186803b158015613a6f57600080fd5b505afa158015613a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa79190614c35565b90506000613ad4612710613ac6600b548561345f90919063ffffffff16565b61347590919063ffffffff16565b90506000811115613b0d57613b0c7f000000000000000000000000000000000000000000000000000000000000000061dead8361348b565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b7a57600080fd5b505af1158015613b8e573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613be0919061515e565b905092915050565b6000600267ffffffffffffffff811115613c0557613c046152a1565b5b604051908082528060200260200182016040528015613c335781602001602082028036833780820191505090505b5090503081600081518110613c4b57613c4a6152d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ceb57600080fd5b505afa158015613cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d239190615314565b81600181518110613d3757613d366152d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d9c307f000000000000000000000000000000000000000000000000000000000000000084612395565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dfe95949392919061543a565b600060405180830381600087803b158015613e1857600080fd5b505af1158015613e2c573d6000803e3d6000fd5b505050505050565b613e5f307f000000000000000000000000000000000000000000000000000000000000000084612395565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613ec696959493929190615494565b6060604051808303818588803b158015613edf57600080fd5b505af1158015613ef3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f1891906154f5565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f59578082015181840152602081019050613f3e565b83811115613f68576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f8a82613f1f565b613f948185613f2a565b9350613fa4818560208601613f3b565b613fad81613f6e565b840191505092915050565b60006020820190508181036000830152613fd28184613f7f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061400a82613fdf565b9050919050565b61401a81613fff565b811461402557600080fd5b50565b60008135905061403781614011565b92915050565b6000819050919050565b6140508161403d565b811461405b57600080fd5b50565b60008135905061406d81614047565b92915050565b6000806040838503121561408a57614089613fda565b5b600061409885828601614028565b92505060206140a98582860161405e565b9150509250929050565b60008115159050919050565b6140c8816140b3565b82525050565b60006020820190506140e360008301846140bf565b92915050565b6000602082840312156140ff576140fe613fda565b5b600061410d84828501614028565b91505092915050565b6000819050919050565b600061413b61413661413184613fdf565b614116565b613fdf565b9050919050565b600061414d82614120565b9050919050565b600061415f82614142565b9050919050565b61416f81614154565b82525050565b600060208201905061418a6000830184614166565b92915050565b6141998161403d565b82525050565b60006020820190506141b46000830184614190565b92915050565b6000806000606084860312156141d3576141d2613fda565b5b60006141e186828701614028565b93505060206141f286828701614028565b92505060406142038682870161405e565b9150509250925092565b61421681613fff565b82525050565b6000602082019050614231600083018461420d565b92915050565b600060ff82169050919050565b61424d81614237565b82525050565b60006020820190506142686000830184614244565b92915050565b614277816140b3565b811461428257600080fd5b50565b6000813590506142948161426e565b92915050565b6000806000606084860312156142b3576142b2613fda565b5b60006142c18682870161405e565b93505060206142d28682870161405e565b92505060406142e386828701614285565b9150509250925092565b6000806040838503121561430457614303613fda565b5b600061431285828601614028565b925050602061432385828601614285565b9150509250929050565b60008060006060848603121561434657614345613fda565b5b60006143548682870161405e565b93505060206143658682870161405e565b92505060406143768682870161405e565b9150509250925092565b60006020828403121561439657614395613fda565b5b60006143a484828501614285565b91505092915050565b6000602082840312156143c3576143c2613fda565b5b60006143d18482850161405e565b91505092915050565b600080604083850312156143f1576143f0613fda565b5b60006143ff85828601614028565b925050602061441085828601614028565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446157607f821691505b602082108114156144755761447461441a565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144d7602883613f2a565b91506144e28261447b565b604082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145478261403d565b91506145528361403d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145875761458661450d565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145c8602083613f2a565b91506145d382614592565b602082019050919050565b600060208201905081810360008301526145f7816145bb565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061465a603383613f2a565b9150614665826145fe565b604082019050919050565b600060208201905081810360008301526146898161464d565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006146ec603083613f2a565b91506146f782614690565b604082019050919050565b6000602082019050818103600083015261471b816146df565b9050919050565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b6000614758601c83613f2a565b915061476382614722565b602082019050919050565b600060208201905081810360008301526147878161474b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147ea603983613f2a565b91506147f58261478e565b604082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061487c602583613f2a565b915061488782614820565b604082019050919050565b600060208201905081810360008301526148ab8161486f565b9050919050565b60006148bd8261403d565b91506148c88361403d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149015761490061450d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149468261403d565b91506149518361403d565b9250826149615761496061490c565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149c8603583613f2a565b91506149d38261496c565b604082019050919050565b600060208201905081810360008301526149f7816149bb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a5a603483613f2a565b9150614a65826149fe565b604082019050919050565b60006020820190508181036000830152614a8981614a4d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614aec602683613f2a565b9150614af782614a90565b604082019050919050565b60006020820190508181036000830152614b1b81614adf565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614b58602083613f2a565b9150614b6382614b22565b602082019050919050565b60006020820190508181036000830152614b8781614b4b565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614bea602a83613f2a565b9150614bf582614b8e565b604082019050919050565b60006020820190508181036000830152614c1981614bdd565b9050919050565b600081519050614c2f81614047565b92915050565b600060208284031215614c4b57614c4a613fda565b5b6000614c5984828501614c20565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cbe602483613f2a565b9150614cc982614c62565b604082019050919050565b60006020820190508181036000830152614ced81614cb1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d50602283613f2a565b9150614d5b82614cf4565b604082019050919050565b60006020820190508181036000830152614d7f81614d43565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614de2602583613f2a565b9150614ded82614d86565b604082019050919050565b60006020820190508181036000830152614e1181614dd5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e74602383613f2a565b9150614e7f82614e18565b604082019050919050565b60006020820190508181036000830152614ea381614e67565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ee0601683613f2a565b9150614eeb82614eaa565b602082019050919050565b60006020820190508181036000830152614f0f81614ed3565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f98604983613f2a565b9150614fa382614f16565b606082019050919050565b60006020820190508181036000830152614fc781614f8b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061502a603583613f2a565b915061503582614fce565b604082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615096601383613f2a565b91506150a182615060565b602082019050919050565b600060208201905081810360008301526150c581615089565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615128603683613f2a565b9150615133826150cc565b604082019050919050565b600060208201905081810360008301526151578161511b565b9050919050565b60006151698261403d565b91506151748361403d565b9250828210156151875761518661450d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006151ee602683613f2a565b91506151f982615192565b604082019050919050565b6000602082019050818103600083015261521d816151e1565b9050919050565b600081905092915050565b50565b600061523f600083615224565b915061524a8261522f565b600082019050919050565b600061526082615232565b9150819050919050565b600060608201905061527f6000830186614190565b61528c6020830185614190565b6152996040830184614190565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061530e81614011565b92915050565b60006020828403121561532a57615329613fda565b5b6000615338848285016152ff565b91505092915050565b6000819050919050565b600061536661536161535c84615341565b614116565b61403d565b9050919050565b6153768161534b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153b181613fff565b82525050565b60006153c383836153a8565b60208301905092915050565b6000602082019050919050565b60006153e78261537c565b6153f18185615387565b93506153fc83615398565b8060005b8381101561542d57815161541488826153b7565b975061541f836153cf565b925050600181019050615400565b5085935050505092915050565b600060a08201905061544f6000830188614190565b61545c602083018761536d565b818103604083015261546e81866153dc565b905061547d606083018561420d565b61548a6080830184614190565b9695505050505050565b600060c0820190506154a9600083018961420d565b6154b66020830188614190565b6154c3604083018761536d565b6154d0606083018661536d565b6154dd608083018561420d565b6154ea60a0830184614190565b979650505050505050565b60008060006060848603121561550e5761550d613fda565b5b600061551c86828701614c20565b935050602061552d86828701614c20565b925050604061553e86828701614c20565b915050925092509256fea26469706673582212201fca5c46734babfa6c2502bc71a03613b1fbb077e5d548b338230942e38d818364736f6c63430008080033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d33578063f637434214610d5c578063f8b45b0514610d87578063fe72b27a14610db25761038c565b8063dd62ed3e14610c75578063e2f4560514610cb2578063e884f26014610cdd578063f11a24d314610d085761038c565b8063c876d0b9116100dc578063c876d0b914610bb7578063c8c8ebe414610be2578063d257b34f14610c0d578063d85ba06314610c4a5761038c565b8063bbc0c74214610b3a578063c024666814610b65578063c17b5b8c14610b8e5761038c565b80639ec22c0e1161016f578063a457c2d711610149578063a457c2d714610a58578063a4c82a0014610a95578063a9059cbb14610ac0578063b62496f514610afd5761038c565b80639ec22c0e146109d75780639fccce3214610a02578063a0d82dc514610a2d5761038c565b8063924de9b7116101ab578063924de9b71461092f57806395d89b41146109585780639a7a23d6146109835780639c3b4fdc146109ac5761038c565b80638da5cb5b146108ae5780638ea5220f146108d957806392136913146109045761038c565b806339509351116102b6578063715018a61161025457806375f0a8741161022357806375f0a874146108185780637bce5a04146108435780638095d5641461086e5780638a8c523c146108975761038c565b8063715018a614610784578063730c18881461079b578063751039fc146107c45780637571336a146107ef5761038c565b80634fbee193116102905780634fbee193146106b45780636a486a8e146106f15780636ddd17131461071c57806370a08231146107475761038c565b8063395093511461062157806349bd5a5e1461065e5780634a62bb65146106895761038c565b80631a8145bb1161032357806327c8f835116102fd57806327c8f835146105755780632c3e486c146105a05780632e82f1a0146105cb578063313ce567146105f65761038c565b80631a8145bb146104e25780631f3fed8f1461050d57806323b872dd146105385761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd14610461578063184c16c51461048c578063199ffc72146104b75761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610def565b6040516103b39190613fb8565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190614073565b610e81565b6040516103f091906140ce565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906140e9565b610e9f565b60405161042d91906140ce565b60405180910390f35b34801561044257600080fd5b5061044b610ebe565b6040516104589190614175565b60405180910390f35b34801561046d57600080fd5b50610476610ee2565b604051610483919061419f565b60405180910390f35b34801561049857600080fd5b506104a1610eec565b6040516104ae919061419f565b60405180910390f35b3480156104c357600080fd5b506104cc610ef2565b6040516104d9919061419f565b60405180910390f35b3480156104ee57600080fd5b506104f7610ef8565b604051610504919061419f565b60405180910390f35b34801561051957600080fd5b50610522610efe565b60405161052f919061419f565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a91906141ba565b610f04565b60405161056c91906140ce565b60405180910390f35b34801561058157600080fd5b5061058a610ffc565b604051610597919061421c565b60405180910390f35b3480156105ac57600080fd5b506105b5611002565b6040516105c2919061419f565b60405180910390f35b3480156105d757600080fd5b506105e0611008565b6040516105ed91906140ce565b60405180910390f35b34801561060257600080fd5b5061060b61101b565b6040516106189190614253565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614073565b611024565b60405161065591906140ce565b60405180910390f35b34801561066a57600080fd5b506106736110d0565b604051610680919061421c565b60405180910390f35b34801561069557600080fd5b5061069e6110f4565b6040516106ab91906140ce565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d691906140e9565b611107565b6040516106e891906140ce565b60405180910390f35b3480156106fd57600080fd5b5061070661115d565b604051610713919061419f565b60405180910390f35b34801561072857600080fd5b50610731611163565b60405161073e91906140ce565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906140e9565b611176565b60405161077b919061419f565b60405180910390f35b34801561079057600080fd5b506107996111be565b005b3480156107a757600080fd5b506107c260048036038101906107bd919061429a565b611246565b005b3480156107d057600080fd5b506107d9611386565b6040516107e691906140ce565b60405180910390f35b3480156107fb57600080fd5b50610816600480360381019061081191906142ed565b611426565b005b34801561082457600080fd5b5061082d6114fd565b60405161083a919061421c565b60405180910390f35b34801561084f57600080fd5b50610858611523565b604051610865919061419f565b60405180910390f35b34801561087a57600080fd5b506108956004803603810190610890919061432d565b611529565b005b3480156108a357600080fd5b506108ac611628565b005b3480156108ba57600080fd5b506108c36116e3565b6040516108d0919061421c565b60405180910390f35b3480156108e557600080fd5b506108ee61170d565b6040516108fb919061421c565b60405180910390f35b34801561091057600080fd5b50610919611733565b604051610926919061419f565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190614380565b611739565b005b34801561096457600080fd5b5061096d6117d2565b60405161097a9190613fb8565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a591906142ed565b611864565b005b3480156109b857600080fd5b506109c161197d565b6040516109ce919061419f565b60405180910390f35b3480156109e357600080fd5b506109ec611983565b6040516109f9919061419f565b60405180910390f35b348015610a0e57600080fd5b50610a17611989565b604051610a24919061419f565b60405180910390f35b348015610a3957600080fd5b50610a4261198f565b604051610a4f919061419f565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190614073565b611995565b604051610a8c91906140ce565b60405180910390f35b348015610aa157600080fd5b50610aaa611a80565b604051610ab7919061419f565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614073565b611a86565b604051610af491906140ce565b60405180910390f35b348015610b0957600080fd5b50610b246004803603810190610b1f91906140e9565b611aa4565b604051610b3191906140ce565b60405180910390f35b348015610b4657600080fd5b50610b4f611ac4565b604051610b5c91906140ce565b60405180910390f35b348015610b7157600080fd5b50610b8c6004803603810190610b8791906142ed565b611ad7565b005b348015610b9a57600080fd5b50610bb56004803603810190610bb0919061432d565b611bfc565b005b348015610bc357600080fd5b50610bcc611cfb565b604051610bd991906140ce565b60405180910390f35b348015610bee57600080fd5b50610bf7611d0e565b604051610c04919061419f565b60405180910390f35b348015610c1957600080fd5b50610c346004803603810190610c2f91906143ad565b611d14565b604051610c4191906140ce565b60405180910390f35b348015610c5657600080fd5b50610c5f611e69565b604051610c6c919061419f565b60405180910390f35b348015610c8157600080fd5b50610c9c6004803603810190610c9791906143da565b611e6f565b604051610ca9919061419f565b60405180910390f35b348015610cbe57600080fd5b50610cc7611ef6565b604051610cd4919061419f565b60405180910390f35b348015610ce957600080fd5b50610cf2611efc565b604051610cff91906140ce565b60405180910390f35b348015610d1457600080fd5b50610d1d611f9c565b604051610d2a919061419f565b60405180910390f35b348015610d3f57600080fd5b50610d5a6004803603810190610d5591906140e9565b611fa2565b005b348015610d6857600080fd5b50610d7161209a565b604051610d7e919061419f565b60405180910390f35b348015610d9357600080fd5b50610d9c6120a0565b604051610da9919061419f565b60405180910390f35b348015610dbe57600080fd5b50610dd96004803603810190610dd491906143ad565b6120a6565b604051610de691906140ce565b60405180910390f35b606060038054610dfe90614449565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2a90614449565b8015610e775780601f10610e4c57610100808354040283529160200191610e77565b820191906000526020600020905b815481529060010190602001808311610e5a57829003601f168201915b5050505050905090565b6000610e95610e8e61238d565b8484612395565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601d5481565b601c5481565b6000610f11848484612560565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f5c61238d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906144ed565b60405180910390fd5b610ff085610fe861238d565b858403612395565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006110c661103161238d565b84846001600061103f61238d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110c1919061453c565b612395565b6001905092915050565b7f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e1281565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c661238d565b73ffffffffffffffffffffffffffffffffffffffff166111e46116e3565b73ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611231906145de565b60405180910390fd5b61124460006132f8565b565b61124e61238d565b73ffffffffffffffffffffffffffffffffffffffff1661126c6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b9906145de565b60405180910390fd5b610258831015611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90614670565b60405180910390fd5b6103e8821115801561131a575060008210155b611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614702565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061139061238d565b73ffffffffffffffffffffffffffffffffffffffff166113ae6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb906145de565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61142e61238d565b73ffffffffffffffffffffffffffffffffffffffff1661144c6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611499906145de565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61153161238d565b73ffffffffffffffffffffffffffffffffffffffff1661154f6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906145de565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546115cd919061453c565b6115d7919061453c565b60148190555060036014541115611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a9061476e565b60405180910390fd5b505050565b61163061238d565b73ffffffffffffffffffffffffffffffffffffffff1661164e6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b906145de565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b61174161238d565b73ffffffffffffffffffffffffffffffffffffffff1661175f6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac906145de565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546117e190614449565b80601f016020809104026020016040519081016040528092919081815260200182805461180d90614449565b801561185a5780601f1061182f5761010080835404028352916020019161185a565b820191906000526020600020905b81548152906001019060200180831161183d57829003601f168201915b5050505050905090565b61186c61238d565b73ffffffffffffffffffffffffffffffffffffffff1661188a6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d7906145de565b60405180910390fd5b7f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e1273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614800565b60405180910390fd5b61197982826133be565b5050565b60175481565b60105481565b601e5481565b601b5481565b600080600160006119a461238d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890614892565b60405180910390fd5b611a75611a6c61238d565b85858403612395565b600191505092915050565b600e5481565b6000611a9a611a9361238d565b8484612560565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611adf61238d565b73ffffffffffffffffffffffffffffffffffffffff16611afd6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906145de565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bf091906140ce565b60405180910390a25050565b611c0461238d565b73ffffffffffffffffffffffffffffffffffffffff16611c226116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f906145de565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611ca0919061453c565b611caa919061453c565b60188190555060036018541115611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061476e565b60405180910390fd5b505050565b601360009054906101000a900460ff1681565b60085481565b6000611d1e61238d565b73ffffffffffffffffffffffffffffffffffffffff16611d3c6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906145de565b60405180910390fd5b620186a06001611da0610ee2565b611daa91906148b2565b611db4919061493b565b821015611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906149de565b60405180910390fd5b6103e86005611e03610ee2565b611e0d91906148b2565b611e17919061493b565b821115611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614a70565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f0661238d565b73ffffffffffffffffffffffffffffffffffffffff16611f246116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f71906145de565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611faa61238d565b73ffffffffffffffffffffffffffffffffffffffff16611fc86116e3565b73ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612015906145de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614b02565b60405180910390fd5b612097816132f8565b50565b601a5481565b600a5481565b60006120b061238d565b73ffffffffffffffffffffffffffffffffffffffff166120ce6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b906145de565b60405180910390fd5b600f54601054612134919061453c565b4211612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90614b6e565b60405180910390fd5b6103e88211156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614c00565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e126040518263ffffffff1660e01b815260040161221c919061421c565b60206040518083038186803b15801561223457600080fd5b505afa158015612248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226c9190614c35565b90506000612297612710612289868561345f90919063ffffffff16565b61347590919063ffffffff16565b905060008111156122d0576122cf7f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e1261dead8361348b565b5b60007f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e1290508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561233d57600080fd5b505af1158015612351573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614cd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246c90614d66565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612553919061419f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c790614df8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263790614e8a565b60405180910390fd5b600081141561265a576126558383600061348b565b6132f3565b601160009054906101000a900460ff1615612d1d576126776116e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126e557506126b56116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561271e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612758575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127715750600560149054906101000a900460ff16155b15612d1c57601160019054906101000a900460ff1661286b57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061282b5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190614ef6565b60405180910390fd5b5b601360009054906101000a900460ff1615612a33576128886116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561290f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561296757507f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e1273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a325743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e490614fae565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ad65750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7d57600854811115612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1790615040565b60405180910390fd5b600a54612b2c83611176565b82612b37919061453c565b1115612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f906150ac565b60405180910390fd5b612d1b565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c205750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6f57600854811115612c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c619061513e565b60405180910390fd5b612d1a565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d1957600a54612ccc83611176565b82612cd7919061453c565b1115612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f906150ac565b60405180910390fd5b5b5b5b5b5b6000612d2830611176565b905060006009548210159050808015612d4d5750601160029054906101000a900460ff165b8015612d665750600560149054906101000a900460ff16155b8015612dbc5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e125750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e685750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eac576001600560146101000a81548160ff021916908315150217905550612e9061370c565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612f125750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612f2a5750600c60009054906101000a900460ff165b8015612f455750600d54600e54612f41919061453c565b4210155b8015612f9b5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612faa57612fa86139f3565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130605750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561306a57600090505b600081156132e357602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130cd57506000601854115b1561319a576130fa60646130ec6018548861345f90919063ffffffff16565b61347590919063ffffffff16565b9050601854601a548261310d91906148b2565b613117919061493b565b601d6000828254613128919061453c565b92505081905550601854601b548261314091906148b2565b61314a919061493b565b601e600082825461315b919061453c565b925050819055506018546019548261317391906148b2565b61317d919061493b565b601c600082825461318e919061453c565b925050819055506132bf565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f557506000601454115b156132be5761322260646132146014548861345f90919063ffffffff16565b61347590919063ffffffff16565b90506014546016548261323591906148b2565b61323f919061493b565b601d6000828254613250919061453c565b925050819055506014546017548261326891906148b2565b613272919061493b565b601e6000828254613283919061453c565b925050819055506014546015548261329b91906148b2565b6132a5919061493b565b601c60008282546132b6919061453c565b925050819055505b5b60008111156132d4576132d387308361348b565b5b80856132e0919061515e565b94505b6132ee87878761348b565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361346d91906148b2565b905092915050565b60008183613483919061493b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f290614df8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561356b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356290614e8a565b60405180910390fd5b613576838383613bc8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f390615204565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461368f919061453c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136f3919061419f565b60405180910390a3613706848484613bcd565b50505050565b600061371730611176565b90506000601e54601c54601d5461372e919061453c565b613738919061453c565b905060008083148061374a5750600082145b15613757575050506139f1565b601460095461376691906148b2565b83111561377f57601460095461377c91906148b2565b92505b6000600283601d548661379291906148b2565b61379c919061493b565b6137a6919061493b565b905060006137bd8286613bd290919063ffffffff16565b905060004790506137cd82613be8565b60006137e28247613bd290919063ffffffff16565b9050600061380d876137ff601c548561345f90919063ffffffff16565b61347590919063ffffffff16565b905060006138388861382a601e548661345f90919063ffffffff16565b61347590919063ffffffff16565b90506000818385613849919061515e565b613853919061515e565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138b390615255565b60006040518083038185875af1925050503d80600081146138f0576040519150601f19603f3d011682016040523d82523d6000602084013e6138f5565b606091505b50508098505060008711801561390b5750600081115b156139585761391a8782613e34565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d5460405161394f9392919061526a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161399e90615255565b60006040518083038185875af1925050503d80600081146139db576040519150601f19603f3d011682016040523d82523d6000602084013e6139e0565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e126040518263ffffffff1660e01b8152600401613a57919061421c565b60206040518083038186803b158015613a6f57600080fd5b505afa158015613a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa79190614c35565b90506000613ad4612710613ac6600b548561345f90919063ffffffff16565b61347590919063ffffffff16565b90506000811115613b0d57613b0c7f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e1261dead8361348b565b5b60007f0000000000000000000000008b9fcea38c59003c7ce7c2563f89e68a83c05e1290508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b7a57600080fd5b505af1158015613b8e573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613be0919061515e565b905092915050565b6000600267ffffffffffffffff811115613c0557613c046152a1565b5b604051908082528060200260200182016040528015613c335781602001602082028036833780820191505090505b5090503081600081518110613c4b57613c4a6152d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ceb57600080fd5b505afa158015613cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d239190615314565b81600181518110613d3757613d366152d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d9c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612395565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dfe95949392919061543a565b600060405180830381600087803b158015613e1857600080fd5b505af1158015613e2c573d6000803e3d6000fd5b505050505050565b613e5f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612395565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613ec696959493929190615494565b6060604051808303818588803b158015613edf57600080fd5b505af1158015613ef3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f1891906154f5565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f59578082015181840152602081019050613f3e565b83811115613f68576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f8a82613f1f565b613f948185613f2a565b9350613fa4818560208601613f3b565b613fad81613f6e565b840191505092915050565b60006020820190508181036000830152613fd28184613f7f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061400a82613fdf565b9050919050565b61401a81613fff565b811461402557600080fd5b50565b60008135905061403781614011565b92915050565b6000819050919050565b6140508161403d565b811461405b57600080fd5b50565b60008135905061406d81614047565b92915050565b6000806040838503121561408a57614089613fda565b5b600061409885828601614028565b92505060206140a98582860161405e565b9150509250929050565b60008115159050919050565b6140c8816140b3565b82525050565b60006020820190506140e360008301846140bf565b92915050565b6000602082840312156140ff576140fe613fda565b5b600061410d84828501614028565b91505092915050565b6000819050919050565b600061413b61413661413184613fdf565b614116565b613fdf565b9050919050565b600061414d82614120565b9050919050565b600061415f82614142565b9050919050565b61416f81614154565b82525050565b600060208201905061418a6000830184614166565b92915050565b6141998161403d565b82525050565b60006020820190506141b46000830184614190565b92915050565b6000806000606084860312156141d3576141d2613fda565b5b60006141e186828701614028565b93505060206141f286828701614028565b92505060406142038682870161405e565b9150509250925092565b61421681613fff565b82525050565b6000602082019050614231600083018461420d565b92915050565b600060ff82169050919050565b61424d81614237565b82525050565b60006020820190506142686000830184614244565b92915050565b614277816140b3565b811461428257600080fd5b50565b6000813590506142948161426e565b92915050565b6000806000606084860312156142b3576142b2613fda565b5b60006142c18682870161405e565b93505060206142d28682870161405e565b92505060406142e386828701614285565b9150509250925092565b6000806040838503121561430457614303613fda565b5b600061431285828601614028565b925050602061432385828601614285565b9150509250929050565b60008060006060848603121561434657614345613fda565b5b60006143548682870161405e565b93505060206143658682870161405e565b92505060406143768682870161405e565b9150509250925092565b60006020828403121561439657614395613fda565b5b60006143a484828501614285565b91505092915050565b6000602082840312156143c3576143c2613fda565b5b60006143d18482850161405e565b91505092915050565b600080604083850312156143f1576143f0613fda565b5b60006143ff85828601614028565b925050602061441085828601614028565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446157607f821691505b602082108114156144755761447461441a565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144d7602883613f2a565b91506144e28261447b565b604082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145478261403d565b91506145528361403d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145875761458661450d565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145c8602083613f2a565b91506145d382614592565b602082019050919050565b600060208201905081810360008301526145f7816145bb565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061465a603383613f2a565b9150614665826145fe565b604082019050919050565b600060208201905081810360008301526146898161464d565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006146ec603083613f2a565b91506146f782614690565b604082019050919050565b6000602082019050818103600083015261471b816146df565b9050919050565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b6000614758601c83613f2a565b915061476382614722565b602082019050919050565b600060208201905081810360008301526147878161474b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147ea603983613f2a565b91506147f58261478e565b604082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061487c602583613f2a565b915061488782614820565b604082019050919050565b600060208201905081810360008301526148ab8161486f565b9050919050565b60006148bd8261403d565b91506148c88361403d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149015761490061450d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149468261403d565b91506149518361403d565b9250826149615761496061490c565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149c8603583613f2a565b91506149d38261496c565b604082019050919050565b600060208201905081810360008301526149f7816149bb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a5a603483613f2a565b9150614a65826149fe565b604082019050919050565b60006020820190508181036000830152614a8981614a4d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614aec602683613f2a565b9150614af782614a90565b604082019050919050565b60006020820190508181036000830152614b1b81614adf565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614b58602083613f2a565b9150614b6382614b22565b602082019050919050565b60006020820190508181036000830152614b8781614b4b565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614bea602a83613f2a565b9150614bf582614b8e565b604082019050919050565b60006020820190508181036000830152614c1981614bdd565b9050919050565b600081519050614c2f81614047565b92915050565b600060208284031215614c4b57614c4a613fda565b5b6000614c5984828501614c20565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cbe602483613f2a565b9150614cc982614c62565b604082019050919050565b60006020820190508181036000830152614ced81614cb1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d50602283613f2a565b9150614d5b82614cf4565b604082019050919050565b60006020820190508181036000830152614d7f81614d43565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614de2602583613f2a565b9150614ded82614d86565b604082019050919050565b60006020820190508181036000830152614e1181614dd5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e74602383613f2a565b9150614e7f82614e18565b604082019050919050565b60006020820190508181036000830152614ea381614e67565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ee0601683613f2a565b9150614eeb82614eaa565b602082019050919050565b60006020820190508181036000830152614f0f81614ed3565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f98604983613f2a565b9150614fa382614f16565b606082019050919050565b60006020820190508181036000830152614fc781614f8b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061502a603583613f2a565b915061503582614fce565b604082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615096601383613f2a565b91506150a182615060565b602082019050919050565b600060208201905081810360008301526150c581615089565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615128603683613f2a565b9150615133826150cc565b604082019050919050565b600060208201905081810360008301526151578161511b565b9050919050565b60006151698261403d565b91506151748361403d565b9250828210156151875761518661450d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006151ee602683613f2a565b91506151f982615192565b604082019050919050565b6000602082019050818103600083015261521d816151e1565b9050919050565b600081905092915050565b50565b600061523f600083615224565b915061524a8261522f565b600082019050919050565b600061526082615232565b9150819050919050565b600060608201905061527f6000830186614190565b61528c6020830185614190565b6152996040830184614190565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061530e81614011565b92915050565b60006020828403121561532a57615329613fda565b5b6000615338848285016152ff565b91505092915050565b6000819050919050565b600061536661536161535c84615341565b614116565b61403d565b9050919050565b6153768161534b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153b181613fff565b82525050565b60006153c383836153a8565b60208301905092915050565b6000602082019050919050565b60006153e78261537c565b6153f18185615387565b93506153fc83615398565b8060005b8381101561542d57815161541488826153b7565b975061541f836153cf565b925050600181019050615400565b5085935050505092915050565b600060a08201905061544f6000830188614190565b61545c602083018761536d565b818103604083015261546e81866153dc565b905061547d606083018561420d565b61548a6080830184614190565b9695505050505050565b600060c0820190506154a9600083018961420d565b6154b66020830188614190565b6154c3604083018761536d565b6154d0606083018661536d565b6154dd608083018561420d565b6154ea60a0830184614190565b979650505050505050565b60008060006060848603121561550e5761550d613fda565b5b600061551c86828701614c20565b935050602061552d86828701614c20565b925050604061553e86828701614c20565b915050925092509256fea26469706673582212201fca5c46734babfa6c2502bc71a03613b1fbb077e5d548b338230942e38d818364736f6c63430008080033

Deployed Bytecode Sourcemap

16377:16821:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4076:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4990:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17821:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16456:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4397:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17021:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16836:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17684:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17644;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5167:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16559:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16931:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16892:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4296:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5667:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16514:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17119:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23400:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17499:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17199:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4513:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2198:103;;;;;;;;;;;;;:::i;:::-;;30780:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20815:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21592:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16651:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17392;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21875:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20652:155;;;;;;;;;;;;;:::i;:::-;;1975:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16688:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17534:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21767:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4184:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22892:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17466:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17075:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17724:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17610:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5890:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16983:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4648:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17893:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17159:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22702:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22284:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17310:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16721:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21087:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17358:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4831:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16763:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20944:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17429:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2309:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17572:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16803:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32139:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4076:100;4130:13;4163:5;4156:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4076:100;:::o;4990:169::-;5073:4;5090:39;5099:12;:10;:12::i;:::-;5113:7;5122:6;5090:8;:39::i;:::-;5147:4;5140:11;;4990:169;;;;:::o;17821:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;16456:51::-;;;:::o;4397:108::-;4458:7;4485:12;;4478:19;;4397:108;:::o;17021:47::-;;;;:::o;16836:36::-;;;;:::o;17684:33::-;;;;:::o;17644:::-;;;;:::o;5167:492::-;5307:4;5324:36;5334:6;5342:9;5353:6;5324:9;:36::i;:::-;5373:24;5400:11;:19;5412:6;5400:19;;;;;;;;;;;;;;;:33;5420:12;:10;:12::i;:::-;5400:33;;;;;;;;;;;;;;;;5373:60;;5472:6;5452:16;:26;;5444:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5559:57;5568:6;5576:12;:10;:12::i;:::-;5609:6;5590:16;:25;5559:8;:57::i;:::-;5647:4;5640:11;;;5167:492;;;;;:::o;16559:53::-;16605:6;16559:53;:::o;16931:45::-;;;;:::o;16892:32::-;;;;;;;;;;;;;:::o;4296:93::-;4354:5;4379:2;4372:9;;4296:93;:::o;5667:215::-;5755:4;5772:80;5781:12;:10;:12::i;:::-;5795:7;5841:10;5804:11;:25;5816:12;:10;:12::i;:::-;5804:25;;;;;;;;;;;;;;;:34;5830:7;5804:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5772:8;:80::i;:::-;5870:4;5863:11;;5667:215;;;;:::o;16514:38::-;;;:::o;17119:33::-;;;;;;;;;;;;;:::o;23400:126::-;23466:4;23490:19;:28;23510:7;23490:28;;;;;;;;;;;;;;;;;;;;;;;;;23483:35;;23400:126;;;:::o;17499:28::-;;;;:::o;17199:31::-;;;;;;;;;;;;;:::o;4513:127::-;4587:7;4614:9;:18;4624:7;4614:18;;;;;;;;;;;;;;;;4607:25;;4513:127;;;:::o;2198:103::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2263:30:::1;2290:1;2263:18;:30::i;:::-;2198:103::o:0;30780:555::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30982:3:::1;30959:19;:26;;30937:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;31109:4;31097:8;:16;;:33;;;;;31129:1;31117:8;:13;;31097:33;31075:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;31235:19;31217:15;:37;;;;31284:8;31265:16;:27;;;;31319:8;31303:13;;:24;;;;;;;;;;;;;;;;;;30780:555:::0;;;:::o;20815:121::-;20867:4;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20901:5:::1;20884:14;;:22;;;;;;;;;;;;;;;;;;20924:4;20917:11;;20815:121:::0;:::o;21592:167::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21747:4:::1;21705:31;:39;21737:6;21705:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21592:167:::0;;:::o;16651:30::-;;;;;;;;;;;;;:::o;17392:::-;;;;:::o;21875:401::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22043:13:::1;22025:15;:31;;;;22085:13;22067:15;:31;;;;22121:7;22109:9;:19;;;;22190:9;;22172:15;;22154;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;22139:12;:60;;;;22234:1;22218:12;;:17;;22210:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21875:401:::0;;;:::o;20652:155::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20723:4:::1;20707:13;;:20;;;;;;;;;;;;;;;;;;20752:4;20738:11;;:18;;;;;;;;;;;;;;;;;;20784:15;20767:14;:32;;;;20652:155::o:0;1975:87::-;2021:7;2048:6;;;;;;;;;;;2041:13;;1975:87;:::o;16688:24::-;;;;;;;;;;;;;:::o;17534:31::-;;;;:::o;21767:100::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21852:7:::1;21838:11;;:21;;;;;;;;;;;;;;;;;;21767:100:::0;:::o;4184:104::-;4240:13;4273:7;4266:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4184:104;:::o;22892:304::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23036:13:::1;23028:21;;:4;:21;;;;23006:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23147:41;23176:4;23182:5;23147:28;:41::i;:::-;22892:304:::0;;:::o;17466:24::-;;;;:::o;17075:35::-;;;;:::o;17724:27::-;;;;:::o;17610:25::-;;;;:::o;5890:413::-;5983:4;6000:24;6027:11;:25;6039:12;:10;:12::i;:::-;6027:25;;;;;;;;;;;;;;;:34;6053:7;6027:34;;;;;;;;;;;;;;;;6000:61;;6100:15;6080:16;:35;;6072:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6193:67;6202:12;:10;:12::i;:::-;6216:7;6244:15;6225:16;:34;6193:8;:67::i;:::-;6291:4;6284:11;;;5890:413;;;;:::o;16983:29::-;;;;:::o;4648:175::-;4734:4;4751:42;4761:12;:10;:12::i;:::-;4775:9;4786:6;4751:9;:42::i;:::-;4811:4;4804:11;;4648:175;;;;:::o;17893:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;17159:33::-;;;;;;;;;;;;;:::o;22702:182::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22818:8:::1;22787:19;:28;22807:7;22787:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22858:7;22842:34;;;22867:8;22842:34;;;;;;:::i;:::-;;;;;;;;22702:182:::0;;:::o;22284:410::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22454:13:::1;22435:16;:32;;;;22497:13;22478:16;:32;;;;22534:7;22521:10;:20;;;;22606:10;;22587:16;;22568;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;22552:13;:64;;;;22652:1;22635:13;;:18;;22627:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;22284:410:::0;;;:::o;17310:39::-;;;;;;;;;;;;;:::o;16721:35::-;;;;:::o;21087:497::-;21195:4;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21274:6:::1;21269:1;21253:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21252:28;;;;:::i;:::-;21239:9;:41;;21217:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21429:4;21424:1;21408:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21407:26;;;;:::i;:::-;21394:9;:39;;21372:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21545:9;21524:18;:30;;;;21572:4;21565:11;;21087:497:::0;;;:::o;17358:27::-;;;;:::o;4831:151::-;4920:7;4947:11;:18;4959:5;4947:18;;;;;;;;;;;;;;;:27;4966:7;4947:27;;;;;;;;;;;;;;;;4940:34;;4831:151;;;;:::o;16763:33::-;;;;:::o;20944:135::-;21004:4;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21044:5:::1;21021:20;;:28;;;;;;;;;;;;;;;;;;21067:4;21060:11;;20944:135:::0;:::o;17429:30::-;;;;:::o;2309:201::-;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2418:1:::1;2398:22;;:8;:22;;;;2390:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2474:28;2493:8;2474:18;:28::i;:::-;2309:201:::0;:::o;17572:31::-;;;;:::o;16803:24::-;;;;:::o;32139:1056::-;32250:4;2121:12;:10;:12::i;:::-;2110:23;;:7;:5;:7::i;:::-;:23;;;2102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32335:19:::1;;32312:20;;:42;;;;:::i;:::-;32294:15;:60;32272:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;32444:4;32433:7;:15;;32425:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32529:15;32506:20;:38;;;;32599:28;32630:4;:14;;;32645:13;32630:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32599:60;;32709:20;32732:44;32770:5;32732:33;32757:7;32732:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;32709:67;;32896:1;32881:12;:16;32877:110;;;32914:61;32930:13;32953:6;32962:12;32914:15;:61::i;:::-;32877:110;33062:19;33099:13;33062:51;;33124:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33151:14;;;;;;;;;;33183:4;33176:11;;;;;32139:1056:::0;;;:::o;1521:98::-;1574:7;1601:10;1594:17;;1521:98;:::o;8058:380::-;8211:1;8194:19;;:5;:19;;;;8186:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8292:1;8273:21;;:7;:21;;;;8265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8376:6;8346:11;:18;8358:5;8346:18;;;;;;;;;;;;;;;:27;8365:7;8346:27;;;;;;;;;;;;;;;:36;;;;8414:7;8398:32;;8407:5;8398:32;;;8423:6;8398:32;;;;;;:::i;:::-;;;;;;;;8058:380;;;:::o;23584:4616::-;23732:1;23716:18;;:4;:18;;;;23708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23809:1;23795:16;;:2;:16;;;;23787:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23878:1;23868:6;:11;23864:93;;;23896:28;23912:4;23918:2;23922:1;23896:15;:28::i;:::-;23939:7;;23864:93;23973:14;;;;;;;;;;;23969:2298;;;24034:7;:5;:7::i;:::-;24026:15;;:4;:15;;;;:49;;;;;24068:7;:5;:7::i;:::-;24062:13;;:2;:13;;;;24026:49;:86;;;;;24110:1;24096:16;;:2;:16;;;;24026:86;:128;;;;;24147:6;24133:21;;:2;:21;;;;24026:128;:158;;;;;24176:8;;;;;;;;;;;24175:9;24026:158;24004:2252;;;24224:13;;;;;;;;;;;24219:223;;24296:19;:25;24316:4;24296:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24325:19;:23;24345:2;24325:23;;;;;;;;;;;;;;;;;;;;;;;;;24296:52;24262:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24219:223;24466:20;;;;;;;;;;;24462:641;;;24547:7;:5;:7::i;:::-;24541:13;;:2;:13;;;;:72;;;;;24597:15;24583:30;;:2;:30;;;;24541:72;:129;;;;;24656:13;24642:28;;:2;:28;;;;24541:129;24511:573;;;24834:12;24759:28;:39;24788:9;24759:39;;;;;;;;;;;;;;;;:87;24721:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;25048:12;25006:28;:39;25035:9;25006:39;;;;;;;;;;;;;;;:54;;;;24511:573;24462:641;25149:25;:31;25175:4;25149:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25206:31;:35;25238:2;25206:35;;;;;;;;;;;;;;;;;;;;;;;;;25205:36;25149:92;25123:1118;;;25328:20;;25318:6;:30;;25284:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25536:9;;25519:13;25529:2;25519:9;:13::i;:::-;25510:6;:22;;;;:::i;:::-;:35;;25476:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25123:1118;;;25685:25;:29;25711:2;25685:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25740:31;:37;25772:4;25740:37;;;;;;;;;;;;;;;;;;;;;;;;;25739:38;25685:92;25659:582;;;25864:20;;25854:6;:30;;25820:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25659:582;;;26021:31;:35;26053:2;26021:35;;;;;;;;;;;;;;;;;;;;;;;;;26016:225;;26141:9;;26124:13;26134:2;26124:9;:13::i;:::-;26115:6;:22;;;;:::i;:::-;:35;;26081:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26016:225;25659:582;25123:1118;24004:2252;23969:2298;26279:28;26310:24;26328:4;26310:9;:24::i;:::-;26279:55;;26347:12;26386:18;;26362:20;:42;;26347:57;;26435:7;:35;;;;;26459:11;;;;;;;;;;;26435:35;:61;;;;;26488:8;;;;;;;;;;;26487:9;26435:61;:110;;;;;26514:25;:31;26540:4;26514:31;;;;;;;;;;;;;;;;;;;;;;;;;26513:32;26435:110;:153;;;;;26563:19;:25;26583:4;26563:25;;;;;;;;;;;;;;;;;;;;;;;;;26562:26;26435:153;:194;;;;;26606:19;:23;26626:2;26606:23;;;;;;;;;;;;;;;;;;;;;;;;;26605:24;26435:194;26417:326;;;26667:4;26656:8;;:15;;;;;;;;;;;;;;;;;;26688:10;:8;:10::i;:::-;26726:5;26715:8;;:16;;;;;;;;;;;;;;;;;;26417:326;26774:8;;;;;;;;;;;26773:9;:55;;;;;26799:25;:29;26825:2;26799:29;;;;;;;;;;;;;;;;;;;;;;;;;26773:55;:85;;;;;26845:13;;;;;;;;;;;26773:85;:153;;;;;26911:15;;26894:14;;:32;;;;:::i;:::-;26875:15;:51;;26773:153;:196;;;;;26944:19;:25;26964:4;26944:25;;;;;;;;;;;;;;;;;;;;;;;;;26943:26;26773:196;26755:282;;;26996:29;:27;:29::i;:::-;;26755:282;27049:12;27065:8;;;;;;;;;;;27064:9;27049:24;;27090:19;:25;27110:4;27090:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27119:19;:23;27139:2;27119:23;;;;;;;;;;;;;;;;;;;;;;;;;27090:52;27086:100;;;27169:5;27159:15;;27086:100;27198:12;27229:7;27225:922;;;27257:25;:29;27283:2;27257:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27306:1;27290:13;;:17;27257:50;27253:745;;;27335:34;27365:3;27335:25;27346:13;;27335:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27328:41;;27438:13;;27418:16;;27411:4;:23;;;;:::i;:::-;27410:41;;;;:::i;:::-;27388:18;;:63;;;;;;;:::i;:::-;;;;;;;;27508:13;;27494:10;;27487:4;:17;;;;:::i;:::-;27486:35;;;;:::i;:::-;27470:12;;:51;;;;;;;:::i;:::-;;;;;;;;27590:13;;27570:16;;27563:4;:23;;;;:::i;:::-;27562:41;;;;:::i;:::-;27540:18;;:63;;;;;;;:::i;:::-;;;;;;;;27253:745;;;27642:25;:31;27668:4;27642:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27692:1;27677:12;;:16;27642:51;27638:360;;;27721:33;27750:3;27721:24;27732:12;;27721:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27714:40;;27822:12;;27803:15;;27796:4;:22;;;;:::i;:::-;27795:39;;;;:::i;:::-;27773:18;;:61;;;;;;;:::i;:::-;;;;;;;;27890:12;;27877:9;;27870:4;:16;;;;:::i;:::-;27869:33;;;;:::i;:::-;27853:12;;:49;;;;;;;:::i;:::-;;;;;;;;27970:12;;27951:15;;27944:4;:22;;;;:::i;:::-;27943:39;;;;:::i;:::-;27921:18;;:61;;;;;;;:::i;:::-;;;;;;;;27638:360;27253:745;28025:1;28018:4;:8;28014:91;;;28047:42;28063:4;28077;28084;28047:15;:42::i;:::-;28014:91;28131:4;28121:14;;;;;:::i;:::-;;;27225:922;28159:33;28175:4;28181:2;28185:6;28159:15;:33::i;:::-;23697:4503;;;;23584:4616;;;;:::o;2518:191::-;2592:16;2611:6;;;;;;;;;;;2592:25;;2637:8;2628:6;;:17;;;;;;;;;;;;;;;;;;2692:8;2661:40;;2682:8;2661:40;;;;;;;;;;;;2581:128;2518:191;:::o;23204:188::-;23321:5;23287:25;:31;23313:4;23287:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23378:5;23344:40;;23372:4;23344:40;;;;;;;;;;;;23204:188;;:::o;10062:98::-;10120:7;10151:1;10147;:5;;;;:::i;:::-;10140:12;;10062:98;;;;:::o;10168:::-;10226:7;10257:1;10253;:5;;;;:::i;:::-;10246:12;;10168:98;;;;:::o;6311:733::-;6469:1;6451:20;;:6;:20;;;;6443:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6553:1;6532:23;;:9;:23;;;;6524:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6608:47;6629:6;6637:9;6648:6;6608:20;:47::i;:::-;6668:21;6692:9;:17;6702:6;6692:17;;;;;;;;;;;;;;;;6668:41;;6745:6;6728:13;:23;;6720:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6866:6;6850:13;:22;6830:9;:17;6840:6;6830:17;;;;;;;;;;;;;;;:42;;;;6918:6;6894:9;:20;6904:9;6894:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6959:9;6942:35;;6951:6;6942:35;;;6970:6;6942:35;;;;;;:::i;:::-;;;;;;;;6990:46;7010:6;7018:9;7029:6;6990:19;:46::i;:::-;6432:612;6311:733;;;:::o;29065:1707::-;29104:23;29130:24;29148:4;29130:9;:24::i;:::-;29104:50;;29165:25;29261:12;;29227:18;;29193;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;29165:108;;29284:12;29332:1;29313:15;:20;:46;;;;29358:1;29337:17;:22;29313:46;29309:85;;;29376:7;;;;;29309:85;29449:2;29428:18;;:23;;;;:::i;:::-;29410:15;:41;29406:115;;;29507:2;29486:18;;:23;;;;:::i;:::-;29468:41;;29406:115;29533:23;29646:1;29613:17;29578:18;;29560:15;:36;;;;:::i;:::-;29559:71;;;;:::i;:::-;:88;;;;:::i;:::-;29533:114;;29658:26;29687:36;29707:15;29687;:19;;:36;;;;:::i;:::-;29658:65;;29736:25;29764:21;29736:49;;29798:36;29815:18;29798:16;:36::i;:::-;29847:18;29868:44;29894:17;29868:21;:25;;:44;;;;:::i;:::-;29847:65;;29925:23;29951:81;30004:17;29951:34;29966:18;;29951:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;29925:107;;30043:17;30063:51;30096:17;30063:28;30078:12;;30063:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30043:71;;30127:23;30184:9;30166:15;30153:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;30127:66;;30227:1;30206:18;:22;;;;30260:1;30239:18;:22;;;;30287:1;30272:12;:16;;;;30323:9;;;;;;;;;;;30315:23;;30346:9;30315:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30301:59;;;;;30395:1;30377:15;:19;:42;;;;;30418:1;30400:15;:19;30377:42;30373:278;;;30436:46;30449:15;30466;30436:12;:46::i;:::-;30502:137;30535:18;30572:15;30606:18;;30502:137;;;;;;;;:::i;:::-;;;;;;;;30373:278;30685:15;;;;;;;;;;;30677:29;;30728:21;30677:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30663:101;;;;;29093:1679;;;;;;;;;;29065:1707;:::o;31343:788::-;31400:4;31434:15;31417:14;:32;;;;31504:28;31535:4;:14;;;31550:13;31535:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31504:60;;31614:20;31637:77;31698:5;31637:42;31662:16;;31637:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;31614:100;;31834:1;31819:12;:16;31815:110;;;31852:61;31868:13;31891:6;31900:12;31852:15;:61::i;:::-;31815:110;32000:19;32037:13;32000:51;;32062:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32089:12;;;;;;;;;;32119:4;32112:11;;;;;31343:788;:::o;8446:125::-;;;;:::o;8579:124::-;;;;:::o;9956:98::-;10014:7;10045:1;10041;:5;;;;:::i;:::-;10034:12;;9956:98;;;;:::o;28208:475::-;28274:21;28312:1;28298:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28274:40;;28343:4;28325;28330:1;28325:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28369:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28359:4;28364:1;28359:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28404:62;28421:4;28436:15;28454:11;28404:8;:62::i;:::-;28479:15;:66;;;28560:11;28586:1;28602:4;28629;28649:15;28479:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28263:420;28208:475;:::o;28691:366::-;28772:62;28789:4;28804:15;28822:11;28772:8;:62::i;:::-;28847:15;:31;;;28886:9;28919:4;28939:11;28965:1;28981;16605:6;29023:15;28847:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28691:366;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:613::-;6901:6;6909;6917;6966:2;6954:9;6945:7;6941:23;6937:32;6934:119;;;6972:79;;:::i;:::-;6934:119;7092:1;7117:53;7162:7;7153:6;7142:9;7138:22;7117:53;:::i;:::-;7107:63;;7063:117;7219:2;7245:53;7290:7;7281:6;7270:9;7266:22;7245:53;:::i;:::-;7235:63;;7190:118;7347:2;7373:50;7415:7;7406:6;7395:9;7391:22;7373:50;:::i;:::-;7363:60;;7318:115;6827:613;;;;;:::o;7446:468::-;7511:6;7519;7568:2;7556:9;7547:7;7543:23;7539:32;7536:119;;;7574:79;;:::i;:::-;7536:119;7694:1;7719:53;7764:7;7755:6;7744:9;7740:22;7719:53;:::i;:::-;7709:63;;7665:117;7821:2;7847:50;7889:7;7880:6;7869:9;7865:22;7847:50;:::i;:::-;7837:60;;7792:115;7446:468;;;;;:::o;7920:619::-;7997:6;8005;8013;8062:2;8050:9;8041:7;8037:23;8033:32;8030:119;;;8068:79;;:::i;:::-;8030:119;8188:1;8213:53;8258:7;8249:6;8238:9;8234:22;8213:53;:::i;:::-;8203:63;;8159:117;8315:2;8341:53;8386:7;8377:6;8366:9;8362:22;8341:53;:::i;:::-;8331:63;;8286:118;8443:2;8469:53;8514:7;8505:6;8494:9;8490:22;8469:53;:::i;:::-;8459:63;;8414:118;7920:619;;;;;:::o;8545:323::-;8601:6;8650:2;8638:9;8629:7;8625:23;8621:32;8618:119;;;8656:79;;:::i;:::-;8618:119;8776:1;8801:50;8843:7;8834:6;8823:9;8819:22;8801:50;:::i;:::-;8791:60;;8747:114;8545:323;;;;:::o;8874:329::-;8933:6;8982:2;8970:9;8961:7;8957:23;8953:32;8950:119;;;8988:79;;:::i;:::-;8950:119;9108:1;9133:53;9178:7;9169:6;9158:9;9154:22;9133:53;:::i;:::-;9123:63;;9079:117;8874:329;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:227::-;10341:34;10337:1;10329:6;10325:14;10318:58;10410:10;10405:2;10397:6;10393:15;10386:35;10201:227;:::o;10434:366::-;10576:3;10597:67;10661:2;10656:3;10597:67;:::i;:::-;10590:74;;10673:93;10762:3;10673:93;:::i;:::-;10791:2;10786:3;10782:12;10775:19;;10434:366;;;:::o;10806:419::-;10972:4;11010:2;10999:9;10995:18;10987:26;;11059:9;11053:4;11049:20;11045:1;11034:9;11030:17;11023:47;11087:131;11213:4;11087:131;:::i;:::-;11079:139;;10806:419;;;:::o;11231:180::-;11279:77;11276:1;11269:88;11376:4;11373:1;11366:15;11400:4;11397:1;11390:15;11417:305;11457:3;11476:20;11494:1;11476:20;:::i;:::-;11471:25;;11510:20;11528:1;11510:20;:::i;:::-;11505:25;;11664:1;11596:66;11592:74;11589:1;11586:81;11583:107;;;11670:18;;:::i;:::-;11583:107;11714:1;11711;11707:9;11700:16;;11417:305;;;;:::o;11728:182::-;11868:34;11864:1;11856:6;11852:14;11845:58;11728:182;:::o;11916:366::-;12058:3;12079:67;12143:2;12138:3;12079:67;:::i;:::-;12072:74;;12155:93;12244:3;12155:93;:::i;:::-;12273:2;12268:3;12264:12;12257:19;;11916:366;;;:::o;12288:419::-;12454:4;12492:2;12481:9;12477:18;12469:26;;12541:9;12535:4;12531:20;12527:1;12516:9;12512:17;12505:47;12569:131;12695:4;12569:131;:::i;:::-;12561:139;;12288:419;;;:::o;12713:238::-;12853:34;12849:1;12841:6;12837:14;12830:58;12922:21;12917:2;12909:6;12905:15;12898:46;12713:238;:::o;12957:366::-;13099:3;13120:67;13184:2;13179:3;13120:67;:::i;:::-;13113:74;;13196:93;13285:3;13196:93;:::i;:::-;13314:2;13309:3;13305:12;13298:19;;12957:366;;;:::o;13329:419::-;13495:4;13533:2;13522:9;13518:18;13510:26;;13582:9;13576:4;13572:20;13568:1;13557:9;13553:17;13546:47;13610:131;13736:4;13610:131;:::i;:::-;13602:139;;13329:419;;;:::o;13754:235::-;13894:34;13890:1;13882:6;13878:14;13871:58;13963:18;13958:2;13950:6;13946:15;13939:43;13754:235;:::o;13995:366::-;14137:3;14158:67;14222:2;14217:3;14158:67;:::i;:::-;14151:74;;14234:93;14323:3;14234:93;:::i;:::-;14352:2;14347:3;14343:12;14336:19;;13995:366;;;:::o;14367:419::-;14533:4;14571:2;14560:9;14556:18;14548:26;;14620:9;14614:4;14610:20;14606:1;14595:9;14591:17;14584:47;14648:131;14774:4;14648:131;:::i;:::-;14640:139;;14367:419;;;:::o;14792:178::-;14932:30;14928:1;14920:6;14916:14;14909:54;14792:178;:::o;14976:366::-;15118:3;15139:67;15203:2;15198:3;15139:67;:::i;:::-;15132:74;;15215:93;15304:3;15215:93;:::i;:::-;15333:2;15328:3;15324:12;15317:19;;14976:366;;;:::o;15348:419::-;15514:4;15552:2;15541:9;15537:18;15529:26;;15601:9;15595:4;15591:20;15587:1;15576:9;15572:17;15565:47;15629:131;15755:4;15629:131;:::i;:::-;15621:139;;15348:419;;;:::o;15773:244::-;15913:34;15909:1;15901:6;15897:14;15890:58;15982:27;15977:2;15969:6;15965:15;15958:52;15773:244;:::o;16023:366::-;16165:3;16186:67;16250:2;16245:3;16186:67;:::i;:::-;16179:74;;16262:93;16351:3;16262:93;:::i;:::-;16380:2;16375:3;16371:12;16364:19;;16023:366;;;:::o;16395:419::-;16561:4;16599:2;16588:9;16584:18;16576:26;;16648:9;16642:4;16638:20;16634:1;16623:9;16619:17;16612:47;16676:131;16802:4;16676:131;:::i;:::-;16668:139;;16395:419;;;:::o;16820:224::-;16960:34;16956:1;16948:6;16944:14;16937:58;17029:7;17024:2;17016:6;17012:15;17005:32;16820:224;:::o;17050:366::-;17192:3;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17289:93;17378:3;17289:93;:::i;:::-;17407:2;17402:3;17398:12;17391:19;;17050:366;;;:::o;17422:419::-;17588:4;17626:2;17615:9;17611:18;17603:26;;17675:9;17669:4;17665:20;17661:1;17650:9;17646:17;17639:47;17703:131;17829:4;17703:131;:::i;:::-;17695:139;;17422:419;;;:::o;17847:348::-;17887:7;17910:20;17928:1;17910:20;:::i;:::-;17905:25;;17944:20;17962:1;17944:20;:::i;:::-;17939:25;;18132:1;18064:66;18060:74;18057:1;18054:81;18049:1;18042:9;18035:17;18031:105;18028:131;;;18139:18;;:::i;:::-;18028:131;18187:1;18184;18180:9;18169:20;;17847:348;;;;:::o;18201:180::-;18249:77;18246:1;18239:88;18346:4;18343:1;18336:15;18370:4;18367:1;18360:15;18387:185;18427:1;18444:20;18462:1;18444:20;:::i;:::-;18439:25;;18478:20;18496:1;18478:20;:::i;:::-;18473:25;;18517:1;18507:35;;18522:18;;:::i;:::-;18507:35;18564:1;18561;18557:9;18552:14;;18387:185;;;;:::o;18578:240::-;18718:34;18714:1;18706:6;18702:14;18695:58;18787:23;18782:2;18774:6;18770:15;18763:48;18578:240;:::o;18824:366::-;18966:3;18987:67;19051:2;19046:3;18987:67;:::i;:::-;18980:74;;19063:93;19152:3;19063:93;:::i;:::-;19181:2;19176:3;19172:12;19165:19;;18824:366;;;:::o;19196:419::-;19362:4;19400:2;19389:9;19385:18;19377:26;;19449:9;19443:4;19439:20;19435:1;19424:9;19420:17;19413:47;19477:131;19603:4;19477:131;:::i;:::-;19469:139;;19196:419;;;:::o;19621:239::-;19761:34;19757:1;19749:6;19745:14;19738:58;19830:22;19825:2;19817:6;19813:15;19806:47;19621:239;:::o;19866:366::-;20008:3;20029:67;20093:2;20088:3;20029:67;:::i;:::-;20022:74;;20105:93;20194:3;20105:93;:::i;:::-;20223:2;20218:3;20214:12;20207:19;;19866:366;;;:::o;20238:419::-;20404:4;20442:2;20431:9;20427:18;20419:26;;20491:9;20485:4;20481:20;20477:1;20466:9;20462:17;20455:47;20519:131;20645:4;20519:131;:::i;:::-;20511:139;;20238:419;;;:::o;20663:225::-;20803:34;20799:1;20791:6;20787:14;20780:58;20872:8;20867:2;20859:6;20855:15;20848:33;20663:225;:::o;20894:366::-;21036:3;21057:67;21121:2;21116:3;21057:67;:::i;:::-;21050:74;;21133:93;21222:3;21133:93;:::i;:::-;21251:2;21246:3;21242:12;21235:19;;20894:366;;;:::o;21266:419::-;21432:4;21470:2;21459:9;21455:18;21447:26;;21519:9;21513:4;21509:20;21505:1;21494:9;21490:17;21483:47;21547:131;21673:4;21547:131;:::i;:::-;21539:139;;21266:419;;;:::o;21691:182::-;21831:34;21827:1;21819:6;21815:14;21808:58;21691:182;:::o;21879:366::-;22021:3;22042:67;22106:2;22101:3;22042:67;:::i;:::-;22035:74;;22118:93;22207:3;22118:93;:::i;:::-;22236:2;22231:3;22227:12;22220:19;;21879:366;;;:::o;22251:419::-;22417:4;22455:2;22444:9;22440:18;22432:26;;22504:9;22498:4;22494:20;22490:1;22479:9;22475:17;22468:47;22532:131;22658:4;22532:131;:::i;:::-;22524:139;;22251:419;;;:::o;22676:229::-;22816:34;22812:1;22804:6;22800:14;22793:58;22885:12;22880:2;22872:6;22868:15;22861:37;22676:229;:::o;22911:366::-;23053:3;23074:67;23138:2;23133:3;23074:67;:::i;:::-;23067:74;;23150:93;23239:3;23150:93;:::i;:::-;23268:2;23263:3;23259:12;23252:19;;22911:366;;;:::o;23283:419::-;23449:4;23487:2;23476:9;23472:18;23464:26;;23536:9;23530:4;23526:20;23522:1;23511:9;23507:17;23500:47;23564:131;23690:4;23564:131;:::i;:::-;23556:139;;23283:419;;;:::o;23708:143::-;23765:5;23796:6;23790:13;23781:22;;23812:33;23839:5;23812:33;:::i;:::-;23708:143;;;;:::o;23857:351::-;23927:6;23976:2;23964:9;23955:7;23951:23;23947:32;23944:119;;;23982:79;;:::i;:::-;23944:119;24102:1;24127:64;24183:7;24174:6;24163:9;24159:22;24127:64;:::i;:::-;24117:74;;24073:128;23857:351;;;;:::o;24214:223::-;24354:34;24350:1;24342:6;24338:14;24331:58;24423:6;24418:2;24410:6;24406:15;24399:31;24214:223;:::o;24443:366::-;24585:3;24606:67;24670:2;24665:3;24606:67;:::i;:::-;24599:74;;24682:93;24771:3;24682:93;:::i;:::-;24800:2;24795:3;24791:12;24784:19;;24443:366;;;:::o;24815:419::-;24981:4;25019:2;25008:9;25004:18;24996:26;;25068:9;25062:4;25058:20;25054:1;25043:9;25039:17;25032:47;25096:131;25222:4;25096:131;:::i;:::-;25088:139;;24815:419;;;:::o;25240:221::-;25380:34;25376:1;25368:6;25364:14;25357:58;25449:4;25444:2;25436:6;25432:15;25425:29;25240:221;:::o;25467:366::-;25609:3;25630:67;25694:2;25689:3;25630:67;:::i;:::-;25623:74;;25706:93;25795:3;25706:93;:::i;:::-;25824:2;25819:3;25815:12;25808:19;;25467:366;;;:::o;25839:419::-;26005:4;26043:2;26032:9;26028:18;26020:26;;26092:9;26086:4;26082:20;26078:1;26067:9;26063:17;26056:47;26120:131;26246:4;26120:131;:::i;:::-;26112:139;;25839:419;;;:::o;26264:224::-;26404:34;26400:1;26392:6;26388:14;26381:58;26473:7;26468:2;26460:6;26456:15;26449:32;26264:224;:::o;26494:366::-;26636:3;26657:67;26721:2;26716:3;26657:67;:::i;:::-;26650:74;;26733:93;26822:3;26733:93;:::i;:::-;26851:2;26846:3;26842:12;26835:19;;26494:366;;;:::o;26866:419::-;27032:4;27070:2;27059:9;27055:18;27047:26;;27119:9;27113:4;27109:20;27105:1;27094:9;27090:17;27083:47;27147:131;27273:4;27147:131;:::i;:::-;27139:139;;26866:419;;;:::o;27291:222::-;27431:34;27427:1;27419:6;27415:14;27408:58;27500:5;27495:2;27487:6;27483:15;27476:30;27291:222;:::o;27519:366::-;27661:3;27682:67;27746:2;27741:3;27682:67;:::i;:::-;27675:74;;27758:93;27847:3;27758:93;:::i;:::-;27876:2;27871:3;27867:12;27860:19;;27519:366;;;:::o;27891:419::-;28057:4;28095:2;28084:9;28080:18;28072:26;;28144:9;28138:4;28134:20;28130:1;28119:9;28115:17;28108:47;28172:131;28298:4;28172:131;:::i;:::-;28164:139;;27891:419;;;:::o;28316:172::-;28456:24;28452:1;28444:6;28440:14;28433:48;28316:172;:::o;28494:366::-;28636:3;28657:67;28721:2;28716:3;28657:67;:::i;:::-;28650:74;;28733:93;28822:3;28733:93;:::i;:::-;28851:2;28846:3;28842:12;28835:19;;28494:366;;;:::o;28866:419::-;29032:4;29070:2;29059:9;29055:18;29047:26;;29119:9;29113:4;29109:20;29105:1;29094:9;29090:17;29083:47;29147:131;29273:4;29147:131;:::i;:::-;29139:139;;28866:419;;;:::o;29291:297::-;29431:34;29427:1;29419:6;29415:14;29408:58;29500:34;29495:2;29487:6;29483:15;29476:59;29569:11;29564:2;29556:6;29552:15;29545:36;29291:297;:::o;29594:366::-;29736:3;29757:67;29821:2;29816:3;29757:67;:::i;:::-;29750:74;;29833:93;29922:3;29833:93;:::i;:::-;29951:2;29946:3;29942:12;29935:19;;29594:366;;;:::o;29966:419::-;30132:4;30170:2;30159:9;30155:18;30147:26;;30219:9;30213:4;30209:20;30205:1;30194:9;30190:17;30183:47;30247:131;30373:4;30247:131;:::i;:::-;30239:139;;29966:419;;;:::o;30391:240::-;30531:34;30527:1;30519:6;30515:14;30508:58;30600:23;30595:2;30587:6;30583:15;30576:48;30391:240;:::o;30637:366::-;30779:3;30800:67;30864:2;30859:3;30800:67;:::i;:::-;30793:74;;30876:93;30965:3;30876:93;:::i;:::-;30994:2;30989:3;30985:12;30978:19;;30637:366;;;:::o;31009:419::-;31175:4;31213:2;31202:9;31198:18;31190:26;;31262:9;31256:4;31252:20;31248:1;31237:9;31233:17;31226:47;31290:131;31416:4;31290:131;:::i;:::-;31282:139;;31009:419;;;:::o;31434:169::-;31574:21;31570:1;31562:6;31558:14;31551:45;31434:169;:::o;31609:366::-;31751:3;31772:67;31836:2;31831:3;31772:67;:::i;:::-;31765:74;;31848:93;31937:3;31848:93;:::i;:::-;31966:2;31961:3;31957:12;31950:19;;31609:366;;;:::o;31981:419::-;32147:4;32185:2;32174:9;32170:18;32162:26;;32234:9;32228:4;32224:20;32220:1;32209:9;32205:17;32198:47;32262:131;32388:4;32262:131;:::i;:::-;32254:139;;31981:419;;;:::o;32406:241::-;32546:34;32542:1;32534:6;32530:14;32523:58;32615:24;32610:2;32602:6;32598:15;32591:49;32406:241;:::o;32653:366::-;32795:3;32816:67;32880:2;32875:3;32816:67;:::i;:::-;32809:74;;32892:93;32981:3;32892:93;:::i;:::-;33010:2;33005:3;33001:12;32994:19;;32653:366;;;:::o;33025:419::-;33191:4;33229:2;33218:9;33214:18;33206:26;;33278:9;33272:4;33268:20;33264:1;33253:9;33249:17;33242:47;33306:131;33432:4;33306:131;:::i;:::-;33298:139;;33025:419;;;:::o;33450:191::-;33490:4;33510:20;33528:1;33510:20;:::i;:::-;33505:25;;33544:20;33562:1;33544:20;:::i;:::-;33539:25;;33583:1;33580;33577:8;33574:34;;;33588:18;;:::i;:::-;33574:34;33633:1;33630;33626:9;33618:17;;33450:191;;;;:::o;33647:225::-;33787:34;33783:1;33775:6;33771:14;33764:58;33856:8;33851:2;33843:6;33839:15;33832:33;33647:225;:::o;33878:366::-;34020:3;34041:67;34105:2;34100:3;34041:67;:::i;:::-;34034:74;;34117:93;34206:3;34117:93;:::i;:::-;34235:2;34230:3;34226:12;34219:19;;33878:366;;;:::o;34250:419::-;34416:4;34454:2;34443:9;34439:18;34431:26;;34503:9;34497:4;34493:20;34489:1;34478:9;34474:17;34467:47;34531:131;34657:4;34531:131;:::i;:::-;34523:139;;34250:419;;;:::o;34675:147::-;34776:11;34813:3;34798:18;;34675:147;;;;:::o;34828:114::-;;:::o;34948:398::-;35107:3;35128:83;35209:1;35204:3;35128:83;:::i;:::-;35121:90;;35220:93;35309:3;35220:93;:::i;:::-;35338:1;35333:3;35329:11;35322:18;;34948:398;;;:::o;35352:379::-;35536:3;35558:147;35701:3;35558:147;:::i;:::-;35551:154;;35722:3;35715:10;;35352:379;;;:::o;35737:442::-;35886:4;35924:2;35913:9;35909:18;35901:26;;35937:71;36005:1;35994:9;35990:17;35981:6;35937:71;:::i;:::-;36018:72;36086:2;36075:9;36071:18;36062:6;36018:72;:::i;:::-;36100;36168:2;36157:9;36153:18;36144:6;36100:72;:::i;:::-;35737:442;;;;;;:::o;36185:180::-;36233:77;36230:1;36223:88;36330:4;36327:1;36320:15;36354:4;36351:1;36344:15;36371:180;36419:77;36416:1;36409:88;36516:4;36513:1;36506:15;36540:4;36537:1;36530:15;36557:143;36614:5;36645:6;36639:13;36630:22;;36661:33;36688:5;36661:33;:::i;:::-;36557:143;;;;:::o;36706:351::-;36776:6;36825:2;36813:9;36804:7;36800:23;36796:32;36793:119;;;36831:79;;:::i;:::-;36793:119;36951:1;36976:64;37032:7;37023:6;37012:9;37008:22;36976:64;:::i;:::-;36966:74;;36922:128;36706:351;;;;:::o;37063:85::-;37108:7;37137:5;37126:16;;37063:85;;;:::o;37154:158::-;37212:9;37245:61;37263:42;37272:32;37298:5;37272:32;:::i;:::-;37263:42;:::i;:::-;37245:61;:::i;:::-;37232:74;;37154:158;;;:::o;37318:147::-;37413:45;37452:5;37413:45;:::i;:::-;37408:3;37401:58;37318:147;;:::o;37471:114::-;37538:6;37572:5;37566:12;37556:22;;37471:114;;;:::o;37591:184::-;37690:11;37724:6;37719:3;37712:19;37764:4;37759:3;37755:14;37740:29;;37591:184;;;;:::o;37781:132::-;37848:4;37871:3;37863:11;;37901:4;37896:3;37892:14;37884:22;;37781:132;;;:::o;37919:108::-;37996:24;38014:5;37996:24;:::i;:::-;37991:3;37984:37;37919:108;;:::o;38033:179::-;38102:10;38123:46;38165:3;38157:6;38123:46;:::i;:::-;38201:4;38196:3;38192:14;38178:28;;38033:179;;;;:::o;38218:113::-;38288:4;38320;38315:3;38311:14;38303:22;;38218:113;;;:::o;38367:732::-;38486:3;38515:54;38563:5;38515:54;:::i;:::-;38585:86;38664:6;38659:3;38585:86;:::i;:::-;38578:93;;38695:56;38745:5;38695:56;:::i;:::-;38774:7;38805:1;38790:284;38815:6;38812:1;38809:13;38790:284;;;38891:6;38885:13;38918:63;38977:3;38962:13;38918:63;:::i;:::-;38911:70;;39004:60;39057:6;39004:60;:::i;:::-;38994:70;;38850:224;38837:1;38834;38830:9;38825:14;;38790:284;;;38794:14;39090:3;39083:10;;38491:608;;;38367:732;;;;:::o;39105:831::-;39368:4;39406:3;39395:9;39391:19;39383:27;;39420:71;39488:1;39477:9;39473:17;39464:6;39420:71;:::i;:::-;39501:80;39577:2;39566:9;39562:18;39553:6;39501:80;:::i;:::-;39628:9;39622:4;39618:20;39613:2;39602:9;39598:18;39591:48;39656:108;39759:4;39750:6;39656:108;:::i;:::-;39648:116;;39774:72;39842:2;39831:9;39827:18;39818:6;39774:72;:::i;:::-;39856:73;39924:3;39913:9;39909:19;39900:6;39856:73;:::i;:::-;39105:831;;;;;;;;:::o;39942:807::-;40191:4;40229:3;40218:9;40214:19;40206:27;;40243:71;40311:1;40300:9;40296:17;40287:6;40243:71;:::i;:::-;40324:72;40392:2;40381:9;40377:18;40368:6;40324:72;:::i;:::-;40406:80;40482:2;40471:9;40467:18;40458:6;40406:80;:::i;:::-;40496;40572:2;40561:9;40557:18;40548:6;40496:80;:::i;:::-;40586:73;40654:3;40643:9;40639:19;40630:6;40586:73;:::i;:::-;40669;40737:3;40726:9;40722:19;40713:6;40669:73;:::i;:::-;39942:807;;;;;;;;;:::o;40755:663::-;40843:6;40851;40859;40908:2;40896:9;40887:7;40883:23;40879:32;40876:119;;;40914:79;;:::i;:::-;40876:119;41034:1;41059:64;41115:7;41106:6;41095:9;41091:22;41059:64;:::i;:::-;41049:74;;41005:128;41172:2;41198:64;41254:7;41245:6;41234:9;41230:22;41198:64;:::i;:::-;41188:74;;41143:129;41311:2;41337:64;41393:7;41384:6;41373:9;41369:22;41337:64;:::i;:::-;41327:74;;41282:129;40755:663;;;;;:::o

Swarm Source

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