ETH Price: $3,090.60 (+5.14%)
Gas: 3 Gwei

Token

Build (BUILD)
 

Overview

Max Total Supply

11,000,000 BUILD

Holders

168 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Blockchain.com 1
Balance
20 BUILD

Value
$0.00
0x23f4569002a5a07f0ecf688142eeb6bcd883eef8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Build Token is the native currency of the Build A Block development agency. It is bought back & burned using profits generated on developments sold, allowing its holders to benefit from direct revenue sharing.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BUILD

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-21
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
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;
    }
}

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    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);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    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;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    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 {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    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 BUILD 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;

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

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

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;
    uint256 antiSnipingTime = 30 seconds;

    uint256 public buyTotalFees = 17;
    uint256 public buyMarketingFee = 15;
    uint256 public buyLiquidityFee = 2;

    uint256 public sellTotalFees = 50;
    uint256 public sellMarketingFee = 45;
    uint256 public sellLiquidityFee = 5;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public isSniper;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Build", "BUILD") {
        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 totalSupply = 11000000 * 10 ** 9;

        maxTransactionAmount = totalSupply / 100; // 1% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply / 100; // 1% from total supply maxWallet
        swapTokensAtAmount = totalSupply.div(10000);

        marketingWallet = address(0xC5a79BCEc228Df761DfB4309f624fdE7b19899a4); // set as marketing wallet

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function pause() public onlyOwner {
        tradingActive = false;
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10 ** 9);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10 ** 9);
    }

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

    function addSniperInList(address _account) external onlyOwner {
        require(
            _account != address(uniswapV2Router),
            "We can not blacklist router"
        );
        require(!isSniper[_account], "Sniper already exist");
        isSniper[_account] = true;
    }

    function removeSniperFromList(address _account) external onlyOwner {
        require(isSniper[_account], "Not a sniper");
        isSniper[_account] = false;
    }

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

        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."
                    );
                }
                // antibot
                if (
                    block.timestamp < launchedAtTimestamp + antiSnipingTime &&
                    from != address(uniswapV2Router)
                ) {
                    if (from == uniswapV2Pair) {
                        isSniper[to] = true;
                    } else if (to == uniswapV2Pair) {
                        isSniper[from] = true;
                    }
                }
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

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

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

    function airdrop(
        address[] calldata addresses,
        uint256[] calldata amounts
    ) external onlyOwner {
        require(
            addresses.length == amounts.length,
            "Array sizes must be equal"
        );
        uint256 i = 0;
        while (i < addresses.length) {
            uint256 _amount = amounts[i].mul(1e9);
            _transfer(msg.sender, addresses[i], _amount);
            i += 1;
        }
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"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":"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":"_account","type":"address"}],"name":"addSniperInList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"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":[{"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":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","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":"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeSniperFromList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"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"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"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"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff021916908315150217905550601e600d556011600e55600f805560026010556032601155602d60125560056013553480156200008457600080fd5b506040518060400160405280600581526020017f4275696c640000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4255494c4400000000000000000000000000000000000000000000000000000081525081600390805190602001906200010992919062000a29565b5080600490805190602001906200012292919062000a29565b5050506200014562000139620004d160201b60201c565b620004d960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001718160016200059f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000217919062000b43565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a5919062000b43565b6040518363ffffffff1660e01b8152600401620002c492919062000b86565b6020604051808303816000875af1158015620002e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030a919062000b43565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200035260a05160016200059f60201b60201c565b6200036760a05160016200068960201b60201c565b60006627147114878000905060648162000382919062000c1b565b60078190555060648162000397919062000c1b565b600981905550620003b9612710826200072a60201b620027251790919060201c565b60088190555073c5a79bcec228df761dfb4309f624fde7b19899a4600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000436620004286200074260201b60201c565b60016200076c60201b60201c565b620004493060016200076c60201b60201c565b6200045e61dead60016200076c60201b60201c565b62000480620004726200074260201b60201c565b60016200059f60201b60201c565b620004933060016200059f60201b60201c565b620004a861dead60016200059f60201b60201c565b620004c9620004bc6200074260201b60201c565b82620008a660201b60201c565b505062000e72565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005af620004d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005d56200074260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200062e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006259062000cb4565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836200073a919062000c1b565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200077c620004d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007a26200074260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f29062000cb4565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200089a919062000cf3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000919576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009109062000d60565b60405180910390fd5b6200092d6000838362000a1f60201b60201c565b806002600082825462000941919062000d82565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000998919062000d82565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009ff919062000df0565b60405180910390a362000a1b6000838362000a2460201b60201c565b5050565b505050565b505050565b82805462000a379062000e3c565b90600052602060002090601f01602090048101928262000a5b576000855562000aa7565b82601f1062000a7657805160ff191683800117855562000aa7565b8280016001018555821562000aa7579182015b8281111562000aa657825182559160200191906001019062000a89565b5b50905062000ab6919062000aba565b5090565b5b8082111562000ad557600081600090555060010162000abb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b0b8262000ade565b9050919050565b62000b1d8162000afe565b811462000b2957600080fd5b50565b60008151905062000b3d8162000b12565b92915050565b60006020828403121562000b5c5762000b5b62000ad9565b5b600062000b6c8482850162000b2c565b91505092915050565b62000b808162000afe565b82525050565b600060408201905062000b9d600083018562000b75565b62000bac602083018462000b75565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c288262000bb3565b915062000c358362000bb3565b92508262000c485762000c4762000bbd565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c9c60208362000c53565b915062000ca98262000c64565b602082019050919050565b6000602082019050818103600083015262000ccf8162000c8d565b9050919050565b60008115159050919050565b62000ced8162000cd6565b82525050565b600060208201905062000d0a600083018462000ce2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d48601f8362000c53565b915062000d558262000d10565b602082019050919050565b6000602082019050818103600083015262000d7b8162000d39565b9050919050565b600062000d8f8262000bb3565b915062000d9c8362000bb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dd45762000dd362000bec565b5b828201905092915050565b62000dea8162000bb3565b82525050565b600060208201905062000e07600083018462000ddf565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e5557607f821691505b6020821081141562000e6c5762000e6b62000e0d565b5b50919050565b60805160a05161563c62000ede6000396000818161147301528181611bf401528181612da40152612e55015260008181610ffe0152818161125001528181612d4e01528181613d1501528181613df601528181613e1d01528181613eb90152613ee0015261563c6000f3fe60806040526004361061036f5760003560e01c80637bce5a04116101c6578063c0246668116100f7578063dd7bd77511610095578063f14210a61161006f578063f14210a614610cb9578063f2fde38b14610ce2578063f637434214610d0b578063f8b45b0514610d3657610376565b8063dd7bd77514610c3a578063e2f4560514610c63578063f11a24d314610c8e57610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6a578063d257b34f14610b95578063d85ba06314610bd2578063dd62ed3e14610bfd57610376565b8063c024666814610aed578063c18bc19514610b16578063c6d2577d14610b3f57610376565b80639e281a9811610164578063aacebbe31161013e578063aacebbe314610a31578063b62496f514610a5a578063bbc0c74214610a97578063bf56b37114610ac257610376565b80639e281a981461098e578063a457c2d7146109b7578063a9059cbb146109f457610376565b806392136913116101a057806392136913146108e6578063924de9b71461091157806395d89b411461093a5780639a7a23d61461096557610376565b80637bce5a04146108795780638456cb59146108a45780638da5cb5b146108bb57610376565b806338d6f847116102a05780636a486a8e1161023e578063715018a611610218578063715018a6146107e3578063751039fc146107fa5780637571336a1461082557806375f0a8741461084e57610376565b80636a486a8e146107505780636ddd17131461077b57806370a08231146107a657610376565b80634a62bb651161027a5780634a62bb65146106965780634fbee193146106c157806366ca9b83146106fe578063672434821461072757610376565b806338d6f84714610605578063395093511461062e57806349bd5a5e1461066b57610376565b806318160ddd1161030d578063203e727e116102e7578063203e727e1461054957806323b872dd1461057257806327c8f835146105af578063313ce567146105da57610376565b806318160ddd146104c85780631a8145bb146104f35780631f3fed8f1461051e57610376565b8063095ea7b311610349578063095ea7b3146103e65780630f3a325f1461042357806310d5de53146104605780631694505e1461049d57610376565b806301339c211461037b57806302dbd8f81461039257806306fdde03146103bb57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d61565b005b34801561039e57600080fd5b506103b960048036038101906103b49190613fcf565b610e68565b005b3480156103c757600080fd5b506103d0610f0c565b6040516103dd91906140a8565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190614128565b610f9e565b60405161041a9190614183565b60405180910390f35b34801561042f57600080fd5b5061044a6004803603810190610445919061419e565b610fbc565b6040516104579190614183565b60405180910390f35b34801561046c57600080fd5b506104876004803603810190610482919061419e565b610fdc565b6040516104949190614183565b60405180910390f35b3480156104a957600080fd5b506104b2610ffc565b6040516104bf919061422a565b60405180910390f35b3480156104d457600080fd5b506104dd611020565b6040516104ea9190614254565b60405180910390f35b3480156104ff57600080fd5b5061050861102a565b6040516105159190614254565b60405180910390f35b34801561052a57600080fd5b50610533611030565b6040516105409190614254565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b919061426f565b611036565b005b34801561057e57600080fd5b506105996004803603810190610594919061429c565b6110cb565b6040516105a69190614183565b60405180910390f35b3480156105bb57600080fd5b506105c46111c3565b6040516105d191906142fe565b60405180910390f35b3480156105e657600080fd5b506105ef6111c9565b6040516105fc9190614335565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061419e565b6111d2565b005b34801561063a57600080fd5b5061065560048036038101906106509190614128565b6113c5565b6040516106629190614183565b60405180910390f35b34801561067757600080fd5b50610680611471565b60405161068d91906142fe565b60405180910390f35b3480156106a257600080fd5b506106ab611495565b6040516106b89190614183565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e3919061419e565b6114a8565b6040516106f59190614183565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190613fcf565b6114fe565b005b34801561073357600080fd5b5061074e6004803603810190610749919061440b565b6115a2565b005b34801561075c57600080fd5b506107656116f6565b6040516107729190614254565b60405180910390f35b34801561078757600080fd5b506107906116fc565b60405161079d9190614183565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061419e565b61170f565b6040516107da9190614254565b60405180910390f35b3480156107ef57600080fd5b506107f8611757565b005b34801561080657600080fd5b5061080f6117df565b60405161081c9190614183565b60405180910390f35b34801561083157600080fd5b5061084c600480360381019061084791906144b8565b61187f565b005b34801561085a57600080fd5b50610863611956565b60405161087091906142fe565b60405180910390f35b34801561088557600080fd5b5061088e61197c565b60405161089b9190614254565b60405180910390f35b3480156108b057600080fd5b506108b9611982565b005b3480156108c757600080fd5b506108d0611a1b565b6040516108dd91906142fe565b60405180910390f35b3480156108f257600080fd5b506108fb611a45565b6040516109089190614254565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906144f8565b611a4b565b005b34801561094657600080fd5b5061094f611ae4565b60405161095c91906140a8565b60405180910390f35b34801561097157600080fd5b5061098c600480360381019061098791906144b8565b611b76565b005b34801561099a57600080fd5b506109b560048036038101906109b09190614563565b611c8f565b005b3480156109c357600080fd5b506109de60048036038101906109d99190614128565b611e4a565b6040516109eb9190614183565b60405180910390f35b348015610a0057600080fd5b50610a1b6004803603810190610a169190614128565b611f35565b604051610a289190614183565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a53919061419e565b611f53565b005b348015610a6657600080fd5b50610a816004803603810190610a7c919061419e565b61208f565b604051610a8e9190614183565b60405180910390f35b348015610aa357600080fd5b50610aac6120af565b604051610ab99190614183565b60405180910390f35b348015610ace57600080fd5b50610ad76120c2565b604051610ae49190614254565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f91906144b8565b6120c8565b005b348015610b2257600080fd5b50610b3d6004803603810190610b38919061426f565b6121ed565b005b348015610b4b57600080fd5b50610b54612282565b604051610b619190614254565b60405180910390f35b348015610b7657600080fd5b50610b7f612288565b604051610b8c9190614254565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061426f565b61228e565b604051610bc99190614183565b60405180910390f35b348015610bde57600080fd5b50610be761231c565b604051610bf49190614254565b60405180910390f35b348015610c0957600080fd5b50610c246004803603810190610c1f91906145a3565b612322565b604051610c319190614254565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c919061419e565b6123a9565b005b348015610c6f57600080fd5b50610c7861250c565b604051610c859190614254565b60405180910390f35b348015610c9a57600080fd5b50610ca3612512565b604051610cb09190614254565b60405180910390f35b348015610cc557600080fd5b50610ce06004803603810190610cdb919061426f565b612518565b005b348015610cee57600080fd5b50610d096004803603810190610d04919061419e565b612621565b005b348015610d1757600080fd5b50610d20612719565b604051610d2d9190614254565b60405180910390f35b348015610d4257600080fd5b50610d4b61271f565b604051610d589190614254565b60405180910390f35b610d6961273b565b73ffffffffffffffffffffffffffffffffffffffff16610d87611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd49061462f565b60405180910390fd5b6000600b5414610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e199061469b565b60405180910390fd5b43600b8190555042600c819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b610e7061273b565b73ffffffffffffffffffffffffffffffffffffffff16610e8e611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061462f565b60405180910390fd5b8160128190555080601381905550601354601254610f0291906146ea565b6011819055505050565b606060038054610f1b9061476f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f479061476f565b8015610f945780601f10610f6957610100808354040283529160200191610f94565b820191906000526020600020905b815481529060010190602001808311610f7757829003601f168201915b5050505050905090565b6000610fb2610fab61273b565b8484612743565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60145481565b61103e61273b565b73ffffffffffffffffffffffffffffffffffffffff1661105c611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a99061462f565b60405180910390fd5b633b9aca00816110c291906147a1565b60078190555050565b60006110d884848461290e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061112361273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a9061486d565b60405180910390fd5b6111b7856111af61273b565b858403612743565b60019150509392505050565b61dead81565b60006009905090565b6111da61273b565b73ffffffffffffffffffffffffffffffffffffffff166111f8611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061462f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d4906148d9565b60405180910390fd5b601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190614945565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006114676113d261273b565b8484600160006113e061273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461146291906146ea565b612743565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61150661273b565b73ffffffffffffffffffffffffffffffffffffffff16611524611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461157a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115719061462f565b60405180910390fd5b81600f8190555080601081905550601054600f5461159891906146ea565b600e819055505050565b6115aa61273b565b73ffffffffffffffffffffffffffffffffffffffff166115c8611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461161e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116159061462f565b60405180910390fd5b818190508484905014611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d906149b1565b60405180910390fd5b60005b848490508110156116ef5760006116a6633b9aca00858585818110611691576116906149d1565b5b9050602002013561366390919063ffffffff16565b90506116da338787858181106116bf576116be6149d1565b5b90506020020160208101906116d4919061419e565b8361290e565b6001826116e791906146ea565b915050611669565b5050505050565b60115481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61175f61273b565b73ffffffffffffffffffffffffffffffffffffffff1661177d611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca9061462f565b60405180910390fd5b6117dd6000613679565b565b60006117e961273b565b73ffffffffffffffffffffffffffffffffffffffff16611807611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061462f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61188761273b565b73ffffffffffffffffffffffffffffffffffffffff166118a5611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f29061462f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b61198a61273b565b73ffffffffffffffffffffffffffffffffffffffff166119a8611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59061462f565b60405180910390fd5b6000600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b611a5361273b565b73ffffffffffffffffffffffffffffffffffffffff16611a71611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe9061462f565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611af39061476f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1f9061476f565b8015611b6c5780601f10611b4157610100808354040283529160200191611b6c565b820191906000526020600020905b815481529060010190602001808311611b4f57829003601f168201915b5050505050905090565b611b7e61273b565b73ffffffffffffffffffffffffffffffffffffffff16611b9c611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be99061462f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7890614a72565b60405180910390fd5b611c8b828261373f565b5050565b611c9761273b565b73ffffffffffffffffffffffffffffffffffffffff16611cb5611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061462f565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d4591906142fe565b602060405180830381865afa158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190614aa7565b1015611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614b20565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611e02929190614b40565b6020604051808303816000875af1158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e459190614b7e565b505050565b60008060016000611e5961273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614c1d565b60405180910390fd5b611f2a611f2161273b565b85858403612743565b600191505092915050565b6000611f49611f4261273b565b848461290e565b6001905092915050565b611f5b61273b565b73ffffffffffffffffffffffffffffffffffffffff16611f79611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc69061462f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b600b5481565b6120d061273b565b73ffffffffffffffffffffffffffffffffffffffff166120ee611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b9061462f565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121e19190614183565b60405180910390a25050565b6121f561273b565b73ffffffffffffffffffffffffffffffffffffffff16612213611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061462f565b60405180910390fd5b633b9aca008161227991906147a1565b60098190555050565b600c5481565b60075481565b600061229861273b565b73ffffffffffffffffffffffffffffffffffffffff166122b6611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123039061462f565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123b161273b565b73ffffffffffffffffffffffffffffffffffffffff166123cf611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c9061462f565b60405180910390fd5b601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890614c89565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60105481565b61252061273b565b73ffffffffffffffffffffffffffffffffffffffff1661253e611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b9061462f565b60405180910390fd5b804710156125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614b20565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561261d573d6000803e3d6000fd5b5050565b61262961273b565b73ffffffffffffffffffffffffffffffffffffffff16612647611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126949061462f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561270d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270490614d1b565b60405180910390fd5b61271681613679565b50565b60135481565b60095481565b600081836127339190614d6a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281a90614e9f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129019190614254565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e590614fc3565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a729061502f565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff9061502f565b60405180910390fd5b6000811415612b2257612b1d838360006137e0565b61365e565b600a60009054906101000a900460ff16156131ec57612b3f611a1b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612bad5750612b7d611a1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612be65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c20575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c395750600560149054906101000a900460ff16155b156131eb57600a60019054906101000a900460ff16612d3357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf35750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d299061509b565b60405180910390fd5b5b600d54600c54612d4391906146ea565b42108015612d9d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612f02577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e53576001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f01565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f00576001601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fa55750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561304c57600754811115612fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe69061512d565b60405180910390fd5b600954612ffb8361170f565b8261300691906146ea565b1115613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e90615199565b60405180910390fd5b6131ea565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ef5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313e57600754811115613139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131309061522b565b60405180910390fd5b6131e9565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131e85760095461319b8361170f565b826131a691906146ea565b11156131e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131de90615199565b60405180910390fd5b5b5b5b5b5b60006131f73061170f565b90506000600854821015905080801561321c5750600a60029054906101000a900460ff165b80156132355750600560149054906101000a900460ff16155b801561328b5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132e15750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133375750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337b576001600560146101000a81548160ff02191690831515021790555061335f613a61565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134315750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561343b57600090505b6000811561364e57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561349e57506000601154115b15613538576134cb60646134bd6011548861366390919063ffffffff16565b61272590919063ffffffff16565b9050601154601354826134de91906147a1565b6134e89190614d6a565b601560008282546134f991906146ea565b925050819055506011546012548261351191906147a1565b61351b9190614d6a565b6014600082825461352c91906146ea565b9250508190555061362a565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561359357506000600e54115b15613629576135c060646135b2600e548861366390919063ffffffff16565b61272590919063ffffffff16565b9050600e54601054826135d391906147a1565b6135dd9190614d6a565b601560008282546135ee91906146ea565b92505081905550600e54600f548261360691906147a1565b6136109190614d6a565b6014600082825461362191906146ea565b925050819055505b5b600081111561363f5761363e8730836137e0565b5b808561364b919061524b565b94505b6136598787876137e0565b505050505b505050565b6000818361367191906147a1565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384790614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b790614fc3565b60405180910390fd5b6138cb838383613c56565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613948906152f1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139e491906146ea565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a489190614254565b60405180910390a3613a5b848484613c5b565b50505050565b6000613a6c3061170f565b90506000601454601554613a8091906146ea565b9050600080831480613a925750600082145b15613a9f57505050613c54565b600854831115613aaf5760085492505b600060028360155486613ac291906147a1565b613acc9190614d6a565b613ad69190614d6a565b90506000613aed8286613c6090919063ffffffff16565b90506000479050613afd82613c76565b6000613b128247613c6090919063ffffffff16565b90506000613b3d87613b2f6014548561366390919063ffffffff16565b61272590919063ffffffff16565b905060008183613b4d919061524b565b905060006015819055506000601481905550600086118015613b6f5750600081115b15613bbc57613b7e8682613eb3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613bb393929190615311565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c0290615379565b60006040518083038185875af1925050503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b5050809750505050505050505050505b565b505050565b505050565b60008183613c6e919061524b565b905092915050565b6000600267ffffffffffffffff811115613c9357613c9261538e565b5b604051908082528060200260200182016040528015613cc15781602001602082028036833780820191505090505b5090503081600081518110613cd957613cd86149d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da291906153d2565b81600181518110613db657613db56149d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1b307f000000000000000000000000000000000000000000000000000000000000000084612743565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e7d9594939291906154f8565b600060405180830381600087803b158015613e9757600080fd5b505af1158015613eab573d6000803e3d6000fd5b505050505050565b613ede307f000000000000000000000000000000000000000000000000000000000000000084612743565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f4596959493929190615552565b60606040518083038185885af1158015613f63573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f8891906155b3565b5050505050565b600080fd5b600080fd5b6000819050919050565b613fac81613f99565b8114613fb757600080fd5b50565b600081359050613fc981613fa3565b92915050565b60008060408385031215613fe657613fe5613f8f565b5b6000613ff485828601613fba565b925050602061400585828601613fba565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561404957808201518184015260208101905061402e565b83811115614058576000848401525b50505050565b6000601f19601f8301169050919050565b600061407a8261400f565b614084818561401a565b935061409481856020860161402b565b61409d8161405e565b840191505092915050565b600060208201905081810360008301526140c2818461406f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140f5826140ca565b9050919050565b614105816140ea565b811461411057600080fd5b50565b600081359050614122816140fc565b92915050565b6000806040838503121561413f5761413e613f8f565b5b600061414d85828601614113565b925050602061415e85828601613fba565b9150509250929050565b60008115159050919050565b61417d81614168565b82525050565b60006020820190506141986000830184614174565b92915050565b6000602082840312156141b4576141b3613f8f565b5b60006141c284828501614113565b91505092915050565b6000819050919050565b60006141f06141eb6141e6846140ca565b6141cb565b6140ca565b9050919050565b6000614202826141d5565b9050919050565b6000614214826141f7565b9050919050565b61422481614209565b82525050565b600060208201905061423f600083018461421b565b92915050565b61424e81613f99565b82525050565b60006020820190506142696000830184614245565b92915050565b60006020828403121561428557614284613f8f565b5b600061429384828501613fba565b91505092915050565b6000806000606084860312156142b5576142b4613f8f565b5b60006142c386828701614113565b93505060206142d486828701614113565b92505060406142e586828701613fba565b9150509250925092565b6142f8816140ea565b82525050565b600060208201905061431360008301846142ef565b92915050565b600060ff82169050919050565b61432f81614319565b82525050565b600060208201905061434a6000830184614326565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261437557614374614350565b5b8235905067ffffffffffffffff81111561439257614391614355565b5b6020830191508360208202830111156143ae576143ad61435a565b5b9250929050565b60008083601f8401126143cb576143ca614350565b5b8235905067ffffffffffffffff8111156143e8576143e7614355565b5b6020830191508360208202830111156144045761440361435a565b5b9250929050565b6000806000806040858703121561442557614424613f8f565b5b600085013567ffffffffffffffff81111561444357614442613f94565b5b61444f8782880161435f565b9450945050602085013567ffffffffffffffff81111561447257614471613f94565b5b61447e878288016143b5565b925092505092959194509250565b61449581614168565b81146144a057600080fd5b50565b6000813590506144b28161448c565b92915050565b600080604083850312156144cf576144ce613f8f565b5b60006144dd85828601614113565b92505060206144ee858286016144a3565b9150509250929050565b60006020828403121561450e5761450d613f8f565b5b600061451c848285016144a3565b91505092915050565b6000614530826140ea565b9050919050565b61454081614525565b811461454b57600080fd5b50565b60008135905061455d81614537565b92915050565b6000806040838503121561457a57614579613f8f565b5b60006145888582860161454e565b925050602061459985828601613fba565b9150509250929050565b600080604083850312156145ba576145b9613f8f565b5b60006145c885828601614113565b92505060206145d985828601614113565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061461960208361401a565b9150614624826145e3565b602082019050919050565b600060208201905081810360008301526146488161460c565b9050919050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b600061468560108361401a565b91506146908261464f565b602082019050919050565b600060208201905081810360008301526146b481614678565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146f582613f99565b915061470083613f99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614735576147346146bb565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061478757607f821691505b6020821081141561479b5761479a614740565b5b50919050565b60006147ac82613f99565b91506147b783613f99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f0576147ef6146bb565b5b828202905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061485760288361401a565b9150614862826147fb565b604082019050919050565b600060208201905081810360008301526148868161484a565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b60006148c3601b8361401a565b91506148ce8261488d565b602082019050919050565b600060208201905081810360008301526148f2816148b6565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b600061492f60148361401a565b915061493a826148f9565b602082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f41727261792073697a6573206d75737420626520657175616c00000000000000600082015250565b600061499b60198361401a565b91506149a682614965565b602082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a5c60398361401a565b9150614a6782614a00565b604082019050919050565b60006020820190508181036000830152614a8b81614a4f565b9050919050565b600081519050614aa181613fa3565b92915050565b600060208284031215614abd57614abc613f8f565b5b6000614acb84828501614a92565b91505092915050565b7f496e76616c696420416d6f756e74000000000000000000000000000000000000600082015250565b6000614b0a600e8361401a565b9150614b1582614ad4565b602082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b6000604082019050614b5560008301856142ef565b614b626020830184614245565b9392505050565b600081519050614b788161448c565b92915050565b600060208284031215614b9457614b93613f8f565b5b6000614ba284828501614b69565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614c0760258361401a565b9150614c1282614bab565b604082019050919050565b60006020820190508181036000830152614c3681614bfa565b9050919050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000614c73600c8361401a565b9150614c7e82614c3d565b602082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d0560268361401a565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d7582613f99565b9150614d8083613f99565b925082614d9057614d8f614d3b565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df760248361401a565b9150614e0282614d9b565b604082019050919050565b60006020820190508181036000830152614e2681614dea565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e8960228361401a565b9150614e9482614e2d565b604082019050919050565b60006020820190508181036000830152614eb881614e7c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f1b60258361401a565b9150614f2682614ebf565b604082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fad60238361401a565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000615019600f8361401a565b915061502482614fe3565b602082019050919050565b600060208201905081810360008301526150488161500c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061508560168361401a565b91506150908261504f565b602082019050919050565b600060208201905081810360008301526150b481615078565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061511760358361401a565b9150615122826150bb565b604082019050919050565b600060208201905081810360008301526151468161510a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061518360138361401a565b915061518e8261514d565b602082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061521560368361401a565b9150615220826151b9565b604082019050919050565b6000602082019050818103600083015261524481615208565b9050919050565b600061525682613f99565b915061526183613f99565b925082821015615274576152736146bb565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152db60268361401a565b91506152e68261527f565b604082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b60006060820190506153266000830186614245565b6153336020830185614245565b6153406040830184614245565b949350505050565b600081905092915050565b50565b6000615363600083615348565b915061536e82615353565b600082019050919050565b600061538482615356565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506153cc816140fc565b92915050565b6000602082840312156153e8576153e7613f8f565b5b60006153f6848285016153bd565b91505092915050565b6000819050919050565b600061542461541f61541a846153ff565b6141cb565b613f99565b9050919050565b61543481615409565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61546f816140ea565b82525050565b60006154818383615466565b60208301905092915050565b6000602082019050919050565b60006154a58261543a565b6154af8185615445565b93506154ba83615456565b8060005b838110156154eb5781516154d28882615475565b97506154dd8361548d565b9250506001810190506154be565b5085935050505092915050565b600060a08201905061550d6000830188614245565b61551a602083018761542b565b818103604083015261552c818661549a565b905061553b60608301856142ef565b6155486080830184614245565b9695505050505050565b600060c08201905061556760008301896142ef565b6155746020830188614245565b615581604083018761542b565b61558e606083018661542b565b61559b60808301856142ef565b6155a860a0830184614245565b979650505050505050565b6000806000606084860312156155cc576155cb613f8f565b5b60006155da86828701614a92565b93505060206155eb86828701614a92565b92505060406155fc86828701614a92565b915050925092509256fea2646970667358221220407eb8ee70ef38fa41b506d7eea595ca3f67b1501281507f36b54abd9de059b264736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80637bce5a04116101c6578063c0246668116100f7578063dd7bd77511610095578063f14210a61161006f578063f14210a614610cb9578063f2fde38b14610ce2578063f637434214610d0b578063f8b45b0514610d3657610376565b8063dd7bd77514610c3a578063e2f4560514610c63578063f11a24d314610c8e57610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6a578063d257b34f14610b95578063d85ba06314610bd2578063dd62ed3e14610bfd57610376565b8063c024666814610aed578063c18bc19514610b16578063c6d2577d14610b3f57610376565b80639e281a9811610164578063aacebbe31161013e578063aacebbe314610a31578063b62496f514610a5a578063bbc0c74214610a97578063bf56b37114610ac257610376565b80639e281a981461098e578063a457c2d7146109b7578063a9059cbb146109f457610376565b806392136913116101a057806392136913146108e6578063924de9b71461091157806395d89b411461093a5780639a7a23d61461096557610376565b80637bce5a04146108795780638456cb59146108a45780638da5cb5b146108bb57610376565b806338d6f847116102a05780636a486a8e1161023e578063715018a611610218578063715018a6146107e3578063751039fc146107fa5780637571336a1461082557806375f0a8741461084e57610376565b80636a486a8e146107505780636ddd17131461077b57806370a08231146107a657610376565b80634a62bb651161027a5780634a62bb65146106965780634fbee193146106c157806366ca9b83146106fe578063672434821461072757610376565b806338d6f84714610605578063395093511461062e57806349bd5a5e1461066b57610376565b806318160ddd1161030d578063203e727e116102e7578063203e727e1461054957806323b872dd1461057257806327c8f835146105af578063313ce567146105da57610376565b806318160ddd146104c85780631a8145bb146104f35780631f3fed8f1461051e57610376565b8063095ea7b311610349578063095ea7b3146103e65780630f3a325f1461042357806310d5de53146104605780631694505e1461049d57610376565b806301339c211461037b57806302dbd8f81461039257806306fdde03146103bb57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d61565b005b34801561039e57600080fd5b506103b960048036038101906103b49190613fcf565b610e68565b005b3480156103c757600080fd5b506103d0610f0c565b6040516103dd91906140a8565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190614128565b610f9e565b60405161041a9190614183565b60405180910390f35b34801561042f57600080fd5b5061044a6004803603810190610445919061419e565b610fbc565b6040516104579190614183565b60405180910390f35b34801561046c57600080fd5b506104876004803603810190610482919061419e565b610fdc565b6040516104949190614183565b60405180910390f35b3480156104a957600080fd5b506104b2610ffc565b6040516104bf919061422a565b60405180910390f35b3480156104d457600080fd5b506104dd611020565b6040516104ea9190614254565b60405180910390f35b3480156104ff57600080fd5b5061050861102a565b6040516105159190614254565b60405180910390f35b34801561052a57600080fd5b50610533611030565b6040516105409190614254565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b919061426f565b611036565b005b34801561057e57600080fd5b506105996004803603810190610594919061429c565b6110cb565b6040516105a69190614183565b60405180910390f35b3480156105bb57600080fd5b506105c46111c3565b6040516105d191906142fe565b60405180910390f35b3480156105e657600080fd5b506105ef6111c9565b6040516105fc9190614335565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061419e565b6111d2565b005b34801561063a57600080fd5b5061065560048036038101906106509190614128565b6113c5565b6040516106629190614183565b60405180910390f35b34801561067757600080fd5b50610680611471565b60405161068d91906142fe565b60405180910390f35b3480156106a257600080fd5b506106ab611495565b6040516106b89190614183565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e3919061419e565b6114a8565b6040516106f59190614183565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190613fcf565b6114fe565b005b34801561073357600080fd5b5061074e6004803603810190610749919061440b565b6115a2565b005b34801561075c57600080fd5b506107656116f6565b6040516107729190614254565b60405180910390f35b34801561078757600080fd5b506107906116fc565b60405161079d9190614183565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061419e565b61170f565b6040516107da9190614254565b60405180910390f35b3480156107ef57600080fd5b506107f8611757565b005b34801561080657600080fd5b5061080f6117df565b60405161081c9190614183565b60405180910390f35b34801561083157600080fd5b5061084c600480360381019061084791906144b8565b61187f565b005b34801561085a57600080fd5b50610863611956565b60405161087091906142fe565b60405180910390f35b34801561088557600080fd5b5061088e61197c565b60405161089b9190614254565b60405180910390f35b3480156108b057600080fd5b506108b9611982565b005b3480156108c757600080fd5b506108d0611a1b565b6040516108dd91906142fe565b60405180910390f35b3480156108f257600080fd5b506108fb611a45565b6040516109089190614254565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906144f8565b611a4b565b005b34801561094657600080fd5b5061094f611ae4565b60405161095c91906140a8565b60405180910390f35b34801561097157600080fd5b5061098c600480360381019061098791906144b8565b611b76565b005b34801561099a57600080fd5b506109b560048036038101906109b09190614563565b611c8f565b005b3480156109c357600080fd5b506109de60048036038101906109d99190614128565b611e4a565b6040516109eb9190614183565b60405180910390f35b348015610a0057600080fd5b50610a1b6004803603810190610a169190614128565b611f35565b604051610a289190614183565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a53919061419e565b611f53565b005b348015610a6657600080fd5b50610a816004803603810190610a7c919061419e565b61208f565b604051610a8e9190614183565b60405180910390f35b348015610aa357600080fd5b50610aac6120af565b604051610ab99190614183565b60405180910390f35b348015610ace57600080fd5b50610ad76120c2565b604051610ae49190614254565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f91906144b8565b6120c8565b005b348015610b2257600080fd5b50610b3d6004803603810190610b38919061426f565b6121ed565b005b348015610b4b57600080fd5b50610b54612282565b604051610b619190614254565b60405180910390f35b348015610b7657600080fd5b50610b7f612288565b604051610b8c9190614254565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061426f565b61228e565b604051610bc99190614183565b60405180910390f35b348015610bde57600080fd5b50610be761231c565b604051610bf49190614254565b60405180910390f35b348015610c0957600080fd5b50610c246004803603810190610c1f91906145a3565b612322565b604051610c319190614254565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c919061419e565b6123a9565b005b348015610c6f57600080fd5b50610c7861250c565b604051610c859190614254565b60405180910390f35b348015610c9a57600080fd5b50610ca3612512565b604051610cb09190614254565b60405180910390f35b348015610cc557600080fd5b50610ce06004803603810190610cdb919061426f565b612518565b005b348015610cee57600080fd5b50610d096004803603810190610d04919061419e565b612621565b005b348015610d1757600080fd5b50610d20612719565b604051610d2d9190614254565b60405180910390f35b348015610d4257600080fd5b50610d4b61271f565b604051610d589190614254565b60405180910390f35b610d6961273b565b73ffffffffffffffffffffffffffffffffffffffff16610d87611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd49061462f565b60405180910390fd5b6000600b5414610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e199061469b565b60405180910390fd5b43600b8190555042600c819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b610e7061273b565b73ffffffffffffffffffffffffffffffffffffffff16610e8e611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061462f565b60405180910390fd5b8160128190555080601381905550601354601254610f0291906146ea565b6011819055505050565b606060038054610f1b9061476f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f479061476f565b8015610f945780601f10610f6957610100808354040283529160200191610f94565b820191906000526020600020905b815481529060010190602001808311610f7757829003601f168201915b5050505050905090565b6000610fb2610fab61273b565b8484612743565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60145481565b61103e61273b565b73ffffffffffffffffffffffffffffffffffffffff1661105c611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a99061462f565b60405180910390fd5b633b9aca00816110c291906147a1565b60078190555050565b60006110d884848461290e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061112361273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a9061486d565b60405180910390fd5b6111b7856111af61273b565b858403612743565b60019150509392505050565b61dead81565b60006009905090565b6111da61273b565b73ffffffffffffffffffffffffffffffffffffffff166111f8611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061462f565b60405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d4906148d9565b60405180910390fd5b601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190614945565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006114676113d261273b565b8484600160006113e061273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461146291906146ea565b612743565b6001905092915050565b7f000000000000000000000000039293dfd853c3fc4ac867bcb7b8426130f9e33381565b600a60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61150661273b565b73ffffffffffffffffffffffffffffffffffffffff16611524611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461157a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115719061462f565b60405180910390fd5b81600f8190555080601081905550601054600f5461159891906146ea565b600e819055505050565b6115aa61273b565b73ffffffffffffffffffffffffffffffffffffffff166115c8611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461161e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116159061462f565b60405180910390fd5b818190508484905014611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d906149b1565b60405180910390fd5b60005b848490508110156116ef5760006116a6633b9aca00858585818110611691576116906149d1565b5b9050602002013561366390919063ffffffff16565b90506116da338787858181106116bf576116be6149d1565b5b90506020020160208101906116d4919061419e565b8361290e565b6001826116e791906146ea565b915050611669565b5050505050565b60115481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61175f61273b565b73ffffffffffffffffffffffffffffffffffffffff1661177d611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca9061462f565b60405180910390fd5b6117dd6000613679565b565b60006117e961273b565b73ffffffffffffffffffffffffffffffffffffffff16611807611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061462f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61188761273b565b73ffffffffffffffffffffffffffffffffffffffff166118a5611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f29061462f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b61198a61273b565b73ffffffffffffffffffffffffffffffffffffffff166119a8611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59061462f565b60405180910390fd5b6000600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b611a5361273b565b73ffffffffffffffffffffffffffffffffffffffff16611a71611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe9061462f565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611af39061476f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1f9061476f565b8015611b6c5780601f10611b4157610100808354040283529160200191611b6c565b820191906000526020600020905b815481529060010190602001808311611b4f57829003601f168201915b5050505050905090565b611b7e61273b565b73ffffffffffffffffffffffffffffffffffffffff16611b9c611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be99061462f565b60405180910390fd5b7f000000000000000000000000039293dfd853c3fc4ac867bcb7b8426130f9e33373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7890614a72565b60405180910390fd5b611c8b828261373f565b5050565b611c9761273b565b73ffffffffffffffffffffffffffffffffffffffff16611cb5611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061462f565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d4591906142fe565b602060405180830381865afa158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190614aa7565b1015611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614b20565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611e02929190614b40565b6020604051808303816000875af1158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e459190614b7e565b505050565b60008060016000611e5961273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614c1d565b60405180910390fd5b611f2a611f2161273b565b85858403612743565b600191505092915050565b6000611f49611f4261273b565b848461290e565b6001905092915050565b611f5b61273b565b73ffffffffffffffffffffffffffffffffffffffff16611f79611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc69061462f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b600b5481565b6120d061273b565b73ffffffffffffffffffffffffffffffffffffffff166120ee611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b9061462f565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121e19190614183565b60405180910390a25050565b6121f561273b565b73ffffffffffffffffffffffffffffffffffffffff16612213611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061462f565b60405180910390fd5b633b9aca008161227991906147a1565b60098190555050565b600c5481565b60075481565b600061229861273b565b73ffffffffffffffffffffffffffffffffffffffff166122b6611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123039061462f565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123b161273b565b73ffffffffffffffffffffffffffffffffffffffff166123cf611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c9061462f565b60405180910390fd5b601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890614c89565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60105481565b61252061273b565b73ffffffffffffffffffffffffffffffffffffffff1661253e611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b9061462f565b60405180910390fd5b804710156125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614b20565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561261d573d6000803e3d6000fd5b5050565b61262961273b565b73ffffffffffffffffffffffffffffffffffffffff16612647611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126949061462f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561270d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270490614d1b565b60405180910390fd5b61271681613679565b50565b60135481565b60095481565b600081836127339190614d6a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281a90614e9f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129019190614254565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e590614fc3565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a729061502f565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff9061502f565b60405180910390fd5b6000811415612b2257612b1d838360006137e0565b61365e565b600a60009054906101000a900460ff16156131ec57612b3f611a1b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612bad5750612b7d611a1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612be65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c20575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c395750600560149054906101000a900460ff16155b156131eb57600a60019054906101000a900460ff16612d3357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf35750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d299061509b565b60405180910390fd5b5b600d54600c54612d4391906146ea565b42108015612d9d57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612f02577f000000000000000000000000039293dfd853c3fc4ac867bcb7b8426130f9e33373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e53576001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f01565b7f000000000000000000000000039293dfd853c3fc4ac867bcb7b8426130f9e33373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f00576001601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fa55750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561304c57600754811115612fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe69061512d565b60405180910390fd5b600954612ffb8361170f565b8261300691906146ea565b1115613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e90615199565b60405180910390fd5b6131ea565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ef5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313e57600754811115613139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131309061522b565b60405180910390fd5b6131e9565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131e85760095461319b8361170f565b826131a691906146ea565b11156131e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131de90615199565b60405180910390fd5b5b5b5b5b5b60006131f73061170f565b90506000600854821015905080801561321c5750600a60029054906101000a900460ff165b80156132355750600560149054906101000a900460ff16155b801561328b5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132e15750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133375750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337b576001600560146101000a81548160ff02191690831515021790555061335f613a61565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134315750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561343b57600090505b6000811561364e57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561349e57506000601154115b15613538576134cb60646134bd6011548861366390919063ffffffff16565b61272590919063ffffffff16565b9050601154601354826134de91906147a1565b6134e89190614d6a565b601560008282546134f991906146ea565b925050819055506011546012548261351191906147a1565b61351b9190614d6a565b6014600082825461352c91906146ea565b9250508190555061362a565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561359357506000600e54115b15613629576135c060646135b2600e548861366390919063ffffffff16565b61272590919063ffffffff16565b9050600e54601054826135d391906147a1565b6135dd9190614d6a565b601560008282546135ee91906146ea565b92505081905550600e54600f548261360691906147a1565b6136109190614d6a565b6014600082825461362191906146ea565b925050819055505b5b600081111561363f5761363e8730836137e0565b5b808561364b919061524b565b94505b6136598787876137e0565b505050505b505050565b6000818361367191906147a1565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384790614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b790614fc3565b60405180910390fd5b6138cb838383613c56565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613948906152f1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139e491906146ea565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a489190614254565b60405180910390a3613a5b848484613c5b565b50505050565b6000613a6c3061170f565b90506000601454601554613a8091906146ea565b9050600080831480613a925750600082145b15613a9f57505050613c54565b600854831115613aaf5760085492505b600060028360155486613ac291906147a1565b613acc9190614d6a565b613ad69190614d6a565b90506000613aed8286613c6090919063ffffffff16565b90506000479050613afd82613c76565b6000613b128247613c6090919063ffffffff16565b90506000613b3d87613b2f6014548561366390919063ffffffff16565b61272590919063ffffffff16565b905060008183613b4d919061524b565b905060006015819055506000601481905550600086118015613b6f5750600081115b15613bbc57613b7e8682613eb3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613bb393929190615311565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c0290615379565b60006040518083038185875af1925050503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b5050809750505050505050505050505b565b505050565b505050565b60008183613c6e919061524b565b905092915050565b6000600267ffffffffffffffff811115613c9357613c9261538e565b5b604051908082528060200260200182016040528015613cc15781602001602082028036833780820191505090505b5090503081600081518110613cd957613cd86149d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da291906153d2565b81600181518110613db657613db56149d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612743565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e7d9594939291906154f8565b600060405180830381600087803b158015613e9757600080fd5b505af1158015613eab573d6000803e3d6000fd5b505050505050565b613ede307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612743565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f4596959493929190615552565b60606040518083038185885af1158015613f63573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f8891906155b3565b5050505050565b600080fd5b600080fd5b6000819050919050565b613fac81613f99565b8114613fb757600080fd5b50565b600081359050613fc981613fa3565b92915050565b60008060408385031215613fe657613fe5613f8f565b5b6000613ff485828601613fba565b925050602061400585828601613fba565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561404957808201518184015260208101905061402e565b83811115614058576000848401525b50505050565b6000601f19601f8301169050919050565b600061407a8261400f565b614084818561401a565b935061409481856020860161402b565b61409d8161405e565b840191505092915050565b600060208201905081810360008301526140c2818461406f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140f5826140ca565b9050919050565b614105816140ea565b811461411057600080fd5b50565b600081359050614122816140fc565b92915050565b6000806040838503121561413f5761413e613f8f565b5b600061414d85828601614113565b925050602061415e85828601613fba565b9150509250929050565b60008115159050919050565b61417d81614168565b82525050565b60006020820190506141986000830184614174565b92915050565b6000602082840312156141b4576141b3613f8f565b5b60006141c284828501614113565b91505092915050565b6000819050919050565b60006141f06141eb6141e6846140ca565b6141cb565b6140ca565b9050919050565b6000614202826141d5565b9050919050565b6000614214826141f7565b9050919050565b61422481614209565b82525050565b600060208201905061423f600083018461421b565b92915050565b61424e81613f99565b82525050565b60006020820190506142696000830184614245565b92915050565b60006020828403121561428557614284613f8f565b5b600061429384828501613fba565b91505092915050565b6000806000606084860312156142b5576142b4613f8f565b5b60006142c386828701614113565b93505060206142d486828701614113565b92505060406142e586828701613fba565b9150509250925092565b6142f8816140ea565b82525050565b600060208201905061431360008301846142ef565b92915050565b600060ff82169050919050565b61432f81614319565b82525050565b600060208201905061434a6000830184614326565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261437557614374614350565b5b8235905067ffffffffffffffff81111561439257614391614355565b5b6020830191508360208202830111156143ae576143ad61435a565b5b9250929050565b60008083601f8401126143cb576143ca614350565b5b8235905067ffffffffffffffff8111156143e8576143e7614355565b5b6020830191508360208202830111156144045761440361435a565b5b9250929050565b6000806000806040858703121561442557614424613f8f565b5b600085013567ffffffffffffffff81111561444357614442613f94565b5b61444f8782880161435f565b9450945050602085013567ffffffffffffffff81111561447257614471613f94565b5b61447e878288016143b5565b925092505092959194509250565b61449581614168565b81146144a057600080fd5b50565b6000813590506144b28161448c565b92915050565b600080604083850312156144cf576144ce613f8f565b5b60006144dd85828601614113565b92505060206144ee858286016144a3565b9150509250929050565b60006020828403121561450e5761450d613f8f565b5b600061451c848285016144a3565b91505092915050565b6000614530826140ea565b9050919050565b61454081614525565b811461454b57600080fd5b50565b60008135905061455d81614537565b92915050565b6000806040838503121561457a57614579613f8f565b5b60006145888582860161454e565b925050602061459985828601613fba565b9150509250929050565b600080604083850312156145ba576145b9613f8f565b5b60006145c885828601614113565b92505060206145d985828601614113565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061461960208361401a565b9150614624826145e3565b602082019050919050565b600060208201905081810360008301526146488161460c565b9050919050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b600061468560108361401a565b91506146908261464f565b602082019050919050565b600060208201905081810360008301526146b481614678565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146f582613f99565b915061470083613f99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614735576147346146bb565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061478757607f821691505b6020821081141561479b5761479a614740565b5b50919050565b60006147ac82613f99565b91506147b783613f99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f0576147ef6146bb565b5b828202905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061485760288361401a565b9150614862826147fb565b604082019050919050565b600060208201905081810360008301526148868161484a565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b60006148c3601b8361401a565b91506148ce8261488d565b602082019050919050565b600060208201905081810360008301526148f2816148b6565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b600061492f60148361401a565b915061493a826148f9565b602082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f41727261792073697a6573206d75737420626520657175616c00000000000000600082015250565b600061499b60198361401a565b91506149a682614965565b602082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a5c60398361401a565b9150614a6782614a00565b604082019050919050565b60006020820190508181036000830152614a8b81614a4f565b9050919050565b600081519050614aa181613fa3565b92915050565b600060208284031215614abd57614abc613f8f565b5b6000614acb84828501614a92565b91505092915050565b7f496e76616c696420416d6f756e74000000000000000000000000000000000000600082015250565b6000614b0a600e8361401a565b9150614b1582614ad4565b602082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b6000604082019050614b5560008301856142ef565b614b626020830184614245565b9392505050565b600081519050614b788161448c565b92915050565b600060208284031215614b9457614b93613f8f565b5b6000614ba284828501614b69565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614c0760258361401a565b9150614c1282614bab565b604082019050919050565b60006020820190508181036000830152614c3681614bfa565b9050919050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000614c73600c8361401a565b9150614c7e82614c3d565b602082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d0560268361401a565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d7582613f99565b9150614d8083613f99565b925082614d9057614d8f614d3b565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df760248361401a565b9150614e0282614d9b565b604082019050919050565b60006020820190508181036000830152614e2681614dea565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e8960228361401a565b9150614e9482614e2d565b604082019050919050565b60006020820190508181036000830152614eb881614e7c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f1b60258361401a565b9150614f2682614ebf565b604082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fad60238361401a565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000615019600f8361401a565b915061502482614fe3565b602082019050919050565b600060208201905081810360008301526150488161500c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061508560168361401a565b91506150908261504f565b602082019050919050565b600060208201905081810360008301526150b481615078565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061511760358361401a565b9150615122826150bb565b604082019050919050565b600060208201905081810360008301526151468161510a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061518360138361401a565b915061518e8261514d565b602082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061521560368361401a565b9150615220826151b9565b604082019050919050565b6000602082019050818103600083015261524481615208565b9050919050565b600061525682613f99565b915061526183613f99565b925082821015615274576152736146bb565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152db60268361401a565b91506152e68261527f565b604082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b60006060820190506153266000830186614245565b6153336020830185614245565b6153406040830184614245565b949350505050565b600081905092915050565b50565b6000615363600083615348565b915061536e82615353565b600082019050919050565b600061538482615356565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506153cc816140fc565b92915050565b6000602082840312156153e8576153e7613f8f565b5b60006153f6848285016153bd565b91505092915050565b6000819050919050565b600061542461541f61541a846153ff565b6141cb565b613f99565b9050919050565b61543481615409565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61546f816140ea565b82525050565b60006154818383615466565b60208301905092915050565b6000602082019050919050565b60006154a58261543a565b6154af8185615445565b93506154ba83615456565b8060005b838110156154eb5781516154d28882615475565b97506154dd8361548d565b9250506001810190506154be565b5085935050505092915050565b600060a08201905061550d6000830188614245565b61551a602083018761542b565b818103604083015261552c818661549a565b905061553b60608301856142ef565b6155486080830184614245565b9695505050505050565b600060c08201905061556760008301896142ef565b6155746020830188614245565b615581604083018761542b565b61558e606083018661542b565b61559b60808301856142ef565b6155a860a0830184614245565b979650505050505050565b6000806000606084860312156155cc576155cb613f8f565b5b60006155da86828701614a92565b93505060206155eb86828701614a92565b92505060406155fc86828701614a92565b915050925092509256fea2646970667358221220407eb8ee70ef38fa41b506d7eea595ca3f67b1501281507f36b54abd9de059b264736f6c634300080a0033

Deployed Bytecode Sourcemap

18596:14982:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22342:242;;;;;;;;;;;;;:::i;:::-;;23908:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4647:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6043:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19801:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19731:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18671:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5135:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19549:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19509;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23009:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6245:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18774:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4978:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25252:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6782:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18729:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19020:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25118:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23636:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32713:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19382:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19100:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5306:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1079:103;;;;;;;;;;;;;:::i;:::-;;22636:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23263:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18866:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19297:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22260:74;;;;;;;;;;;;;:::i;:::-;;771:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19422:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23528:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4866:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24376:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33366:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7080:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5457:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24886:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19999:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19060:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19140:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24186:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23140:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19172:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18905:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22827:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19258:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5720:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25553:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18947:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19339:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33175:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1337:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19465:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18987:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22342:242;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22410:1:::1;22396:10;;:15;22388:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;22456:12;22443:10;:25;;;;22501:15;22479:19;:37;;;;22543:4;22527:13;;:20;;;;;;;;;;;;;;;;;;22572:4;22558:11;;:18;;;;;;;;;;;;;;;;;;22342:242::o:0;23908:270::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24052:13:::1;24033:16;:32;;;;24095:13;24076:16;:32;;;;24154:16;;24135;;:35;;;;:::i;:::-;24119:13;:51;;;;23908:270:::0;;:::o;4647:100::-;4701:13;4734:5;4727:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4647:100;:::o;6043:194::-;6151:4;6168:39;6177:12;:10;:12::i;:::-;6191:7;6200:6;6168:8;:39::i;:::-;6225:4;6218:11;;6043:194;;;;:::o;19801:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;19731:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;18671:51::-;;;:::o;5135:108::-;5196:7;5223:12;;5216:19;;5135:108;:::o;19549:33::-;;;;:::o;19509:::-;;;;:::o;23009:123::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23116:7:::1;23106:6;:18;;;;:::i;:::-;23083:20;:41;;;;23009:123:::0;:::o;6245:529::-;6385:4;6402:36;6412:6;6420:9;6431:6;6402:9;:36::i;:::-;6451:24;6478:11;:19;6490:6;6478:19;;;;;;;;;;;;;;;:33;6498:12;:10;:12::i;:::-;6478:33;;;;;;;;;;;;;;;;6451:60;;6564:6;6544:16;:26;;6522:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;6674:57;6683:6;6691:12;:10;:12::i;:::-;6724:6;6705:16;:25;6674:8;:57::i;:::-;6762:4;6755:11;;;6245:529;;;;;:::o;18774:53::-;18820:6;18774:53;:::o;4978:92::-;5036:5;5061:1;5054:8;;4978:92;:::o;25252:293::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25367:15:::1;25347:36;;:8;:36;;;;25325:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;25458:8;:18;25467:8;25458:18;;;;;;;;;;;;;;;;;;;;;;;;;25457:19;25449:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25533:4;25512:8;:18;25521:8;25512:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25252:293:::0;:::o;6782:290::-;6895:4;6912:130;6935:12;:10;:12::i;:::-;6962:7;7021:10;6984:11;:25;6996:12;:10;:12::i;:::-;6984:25;;;;;;;;;;;;;;;:34;7010:7;6984:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6912:8;:130::i;:::-;7060:4;7053:11;;6782:290;;;;:::o;18729:38::-;;;:::o;19020:33::-;;;;;;;;;;;;;:::o;25118:126::-;25184:4;25208:19;:28;25228:7;25208:28;;;;;;;;;;;;;;;;;;;;;;;;;25201:35;;25118:126;;;:::o;23636:264::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23778:13:::1;23760:15;:31;;;;23820:13;23802:15;:31;;;;23877:15;;23859;;:33;;;;:::i;:::-;23844:12;:48;;;;23636:264:::0;;:::o;32713:454::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32885:7:::1;;:14;;32865:9;;:16;;:34;32843:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;32963:9;32987:173;32998:9;;:16;;32994:1;:20;32987:173;;;33031:15;33049:19;33064:3;33049:7;;33057:1;33049:10;;;;;;;:::i;:::-;;;;;;;;:14;;:19;;;;:::i;:::-;33031:37;;33083:44;33093:10;33105:9;;33115:1;33105:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33119:7;33083:9;:44::i;:::-;33147:1;33142:6;;;;;:::i;:::-;;;33016:144;32987:173;;;32832:335;32713:454:::0;;;;:::o;19382:33::-;;;;:::o;19100:31::-;;;;;;;;;;;;;:::o;5306:143::-;5396:7;5423:9;:18;5433:7;5423:18;;;;;;;;;;;;;;;;5416:25;;5306:143;;;:::o;1079:103::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1144:30:::1;1171:1;1144:18;:30::i;:::-;1079:103::o:0;22636:121::-;22688:4;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22722:5:::1;22705:14;;:22;;;;;;;;;;;;;;;;;;22745:4;22738:11;;22636:121:::0;:::o;23263:169::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23420:4:::1;23378:31;:39;23410:6;23378:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23263:169:::0;;:::o;18866:30::-;;;;;;;;;;;;;:::o;19297:35::-;;;;:::o;22260:74::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22321:5:::1;22305:13;;:21;;;;;;;;;;;;;;;;;;22260:74::o:0;771:87::-;817:7;844:6;;;;;;;;;;;837:13;;771:87;:::o;19422:36::-;;;;:::o;23528:100::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23613:7:::1;23599:11;;:21;;;;;;;;;;;;;;;;;;23528:100:::0;:::o;4866:104::-;4922:13;4955:7;4948:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4866:104;:::o;24376:306::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24522:13:::1;24514:21;;:4;:21;;;;24492:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;24633:41;24662:4;24668:5;24633:28;:41::i;:::-;24376:306:::0;;:::o;33366:209::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33494:7:::1;33459:6;:16;;;33484:4;33459:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;33451:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33531:6;:15;;;33547:10;33559:7;33531:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33366:209:::0;;:::o;7080:475::-;7198:4;7215:24;7242:11;:25;7254:12;:10;:12::i;:::-;7242:25;;;;;;;;;;;;;;;:34;7268:7;7242:34;;;;;;;;;;;;;;;;7215:61;;7329:15;7309:16;:35;;7287:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7445:67;7454:12;:10;:12::i;:::-;7468:7;7496:15;7477:16;:34;7445:8;:67::i;:::-;7543:4;7536:11;;;7080:475;;;;:::o;5457:200::-;5568:4;5585:42;5595:12;:10;:12::i;:::-;5609:9;5620:6;5585:9;:42::i;:::-;5645:4;5638:11;;5457:200;;;;:::o;24886:224::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25039:15:::1;;;;;;;;;;;24996:59;;25019:18;24996:59;;;;;;;;;;;;25084:18;25066:15;;:36;;;;;;;;;;;;;;;;;;24886:224:::0;:::o;19999:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19060:33::-;;;;;;;;;;;;;:::o;19140:25::-;;;;:::o;24186:182::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24302:8:::1;24271:19;:28;24291:7;24271:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24342:7;24326:34;;;24351:8;24326:34;;;;;;:::i;:::-;;;;;;;;24186:182:::0;;:::o;23140:115::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23239:7:::1;23229:6;:18;;;;:::i;:::-;23217:9;:30;;;;23140:115:::0;:::o;19172:34::-;;;;:::o;18905:35::-;;;;:::o;22827:174::-;22924:4;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22962:9:::1;22941:18;:30;;;;22989:4;22982:11;;22827:174:::0;;;:::o;19258:32::-;;;;:::o;5720:176::-;5834:7;5861:11;:18;5873:5;5861:18;;;;;;;;;;;;;;;:27;5880:7;5861:27;;;;;;;;;;;;;;;;5854:34;;5720:176;;;;:::o;25553:166::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25639:8:::1;:18;25648:8;25639:18;;;;;;;;;;;;;;;;;;;;;;;;;25631:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;25706:5;25685:8;:18;25694:8;25685:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;25553:166:::0;:::o;18947:33::-;;;;:::o;19339:34::-;;;;:::o;33175:183::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33276:7:::1;33251:21;:32;;33243:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;33321:10;33313:28;;:37;33342:7;33313:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33175:183:::0;:::o;1337:238::-;1002:12;:10;:12::i;:::-;991:23;;:7;:5;:7::i;:::-;:23;;;983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1460:1:::1;1440:22;;:8;:22;;;;1418:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;1539:28;1558:8;1539:18;:28::i;:::-;1337:238:::0;:::o;19465:35::-;;;;:::o;18987:24::-;;;;:::o;12554:98::-;12612:7;12643:1;12639;:5;;;;:::i;:::-;12632:12;;12554:98;;;;:::o;129:::-;182:7;209:10;202:17;;129:98;:::o;9347:380::-;9500:1;9483:19;;:5;:19;;;;9475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9581:1;9562:21;;:7;:21;;;;9554:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9665:6;9635:11;:18;9647:5;9635:18;;;;;;;;;;;;;;;:27;9654:7;9635:27;;;;;;;;;;;;;;;:36;;;;9703:7;9687:32;;9696:5;9687:32;;;9712:6;9687:32;;;;;;:::i;:::-;;;;;;;;9347:380;;;:::o;25727:4336::-;25875:1;25859:18;;:4;:18;;;;25851:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25952:1;25938:16;;:2;:16;;;;25930:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26014:8;:12;26023:2;26014:12;;;;;;;;;;;;;;;;;;;;;;;;;26013:13;26005:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;26066:8;:14;26075:4;26066:14;;;;;;;;;;;;;;;;;;;;;;;;;26065:15;26057:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:1;26117:6;:11;26113:93;;;26145:28;26161:4;26167:2;26171:1;26145:15;:28::i;:::-;26188:7;;26113:93;26222:14;;;;;;;;;;;26218:2138;;;26283:7;:5;:7::i;:::-;26275:15;;:4;:15;;;;:49;;;;;26317:7;:5;:7::i;:::-;26311:13;;:2;:13;;;;26275:49;:86;;;;;26359:1;26345:16;;:2;:16;;;;26275:86;:128;;;;;26396:6;26382:21;;:2;:21;;;;26275:128;:158;;;;;26425:8;;;;;;;;;;;26424:9;26275:158;26253:2092;;;26473:13;;;;;;;;;;;26468:223;;26545:19;:25;26565:4;26545:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26574:19;:23;26594:2;26574:23;;;;;;;;;;;;;;;;;;;;;;;;;26545:52;26511:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26468:223;26803:15;;26781:19;;:37;;;;:::i;:::-;26763:15;:55;:112;;;;;26859:15;26843:32;;:4;:32;;;;26763:112;26737:400;;;26930:13;26922:21;;:4;:21;;;26918:200;;;26987:4;26972:8;:12;26981:2;26972:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;26918:200;;;27031:13;27025:19;;:2;:19;;;27021:97;;;27090:4;27073:8;:14;27082:4;27073:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27021:97;26918:200;26737:400;27209:25;:31;27235:4;27209:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27266:31;:35;27298:2;27266:35;;;;;;;;;;;;;;;;;;;;;;;;;27265:36;27209:92;27183:1147;;;27388:20;;27378:6;:30;;27344:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27596:9;;27579:13;27589:2;27579:9;:13::i;:::-;27570:6;:22;;;;:::i;:::-;:35;;27536:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27183:1147;;;27774:25;:29;27800:2;27774:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27829:31;:37;27861:4;27829:37;;;;;;;;;;;;;;;;;;;;;;;;;27828:38;27774:92;27748:582;;;27953:20;;27943:6;:30;;27909:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;27748:582;;;28110:31;:35;28142:2;28110:35;;;;;;;;;;;;;;;;;;;;;;;;;28105:225;;28230:9;;28213:13;28223:2;28213:9;:13::i;:::-;28204:6;:22;;;;:::i;:::-;:35;;28170:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28105:225;27748:582;27183:1147;26253:2092;26218:2138;28368:28;28399:24;28417:4;28399:9;:24::i;:::-;28368:55;;28436:12;28475:18;;28451:20;:42;;28436:57;;28524:7;:35;;;;;28548:11;;;;;;;;;;;28524:35;:61;;;;;28577:8;;;;;;;;;;;28576:9;28524:61;:110;;;;;28603:25;:31;28629:4;28603:31;;;;;;;;;;;;;;;;;;;;;;;;;28602:32;28524:110;:153;;;;;28652:19;:25;28672:4;28652:25;;;;;;;;;;;;;;;;;;;;;;;;;28651:26;28524:153;:194;;;;;28695:19;:23;28715:2;28695:23;;;;;;;;;;;;;;;;;;;;;;;;;28694:24;28524:194;28506:326;;;28756:4;28745:8;;:15;;;;;;;;;;;;;;;;;;28777:10;:8;:10::i;:::-;28815:5;28804:8;;:16;;;;;;;;;;;;;;;;;;28506:326;28844:12;28860:8;;;;;;;;;;;28859:9;28844:24;;28970:19;:25;28990:4;28970:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28999:19;:23;29019:2;28999:23;;;;;;;;;;;;;;;;;;;;;;;;;28970:52;28966:100;;;29049:5;29039:15;;28966:100;29078:12;29183:7;29179:831;;;29235:25;:29;29261:2;29235:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29284:1;29268:13;;:17;29235:50;29231:630;;;29313:34;29343:3;29313:25;29324:13;;29313:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29306:41;;29416:13;;29396:16;;29389:4;:23;;;;:::i;:::-;29388:41;;;;:::i;:::-;29366:18;;:63;;;;;;;:::i;:::-;;;;;;;;29498:13;;29478:16;;29471:4;:23;;;;:::i;:::-;29470:41;;;;:::i;:::-;29448:18;;:63;;;;;;;:::i;:::-;;;;;;;;29231:630;;;29573:25;:31;29599:4;29573:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29623:1;29608:12;;:16;29573:51;29569:292;;;29652:33;29681:3;29652:24;29663:12;;29652:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29645:40;;29753:12;;29734:15;;29727:4;:22;;;;:::i;:::-;29726:39;;;;:::i;:::-;29704:18;;:61;;;;;;;:::i;:::-;;;;;;;;29833:12;;29814:15;;29807:4;:22;;;;:::i;:::-;29806:39;;;;:::i;:::-;29784:18;;:61;;;;;;;:::i;:::-;;;;;;;;29569:292;29231:630;29888:1;29881:4;:8;29877:91;;;29910:42;29926:4;29940;29947;29910:15;:42::i;:::-;29877:91;29994:4;29984:14;;;;;:::i;:::-;;;29179:831;30022:33;30038:4;30044:2;30048:6;30022:15;:33::i;:::-;25840:4223;;;;25727:4336;;;;:::o;12448:98::-;12506:7;12537:1;12533;:5;;;;:::i;:::-;12526:12;;12448:98;;;;:::o;1735:191::-;1809:16;1828:6;;;;;;;;;;;1809:25;;1854:8;1845:6;;:17;;;;;;;;;;;;;;;;;;1909:8;1878:40;;1899:8;1878:40;;;;;;;;;;;;1798:128;1735:191;:::o;24690:188::-;24807:5;24773:25;:31;24799:4;24773:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24864:5;24830:40;;24858:4;24830:40;;;;;;;;;;;;24690:188;;:::o;7563:770::-;7721:1;7703:20;;:6;:20;;;;7695:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7805:1;7784:23;;:9;:23;;;;7776:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7860:47;7881:6;7889:9;7900:6;7860:20;:47::i;:::-;7920:21;7944:9;:17;7954:6;7944:17;;;;;;;;;;;;;;;;7920:41;;8011:6;7994:13;:23;;7972:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8155:6;8139:13;:22;8119:9;:17;8129:6;8119:17;;;;;;;;;;;;;;;:42;;;;8207:6;8183:9;:20;8193:9;8183:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8248:9;8231:35;;8240:6;8231:35;;;8259:6;8231:35;;;;;;:::i;:::-;;;;;;;;8279:46;8299:6;8307:9;8318:6;8279:19;:46::i;:::-;7684:649;7563:770;;;:::o;31193:1512::-;31232:23;31258:24;31276:4;31258:9;:24::i;:::-;31232:50;;31293:25;31342:18;;31321;;:39;;;;:::i;:::-;31293:67;;31371:12;31419:1;31400:15;:20;:46;;;;31445:1;31424:17;:22;31400:46;31396:85;;;31463:7;;;;;31396:85;31515:18;;31497:15;:36;31493:105;;;31568:18;;31550:36;;31493:105;31659:23;31772:1;31739:17;31704:18;;31686:15;:36;;;;:::i;:::-;31685:71;;;;:::i;:::-;:88;;;;:::i;:::-;31659:114;;31784:26;31813:36;31833:15;31813;:19;;:36;;;;:::i;:::-;31784:65;;31862:25;31890:21;31862:49;;31924:36;31941:18;31924:16;:36::i;:::-;31973:18;31994:44;32020:17;31994:21;:25;;:44;;;;:::i;:::-;31973:65;;32051:23;32077:81;32130:17;32077:34;32092:18;;32077:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;32051:107;;32171:23;32210:15;32197:10;:28;;;;:::i;:::-;32171:54;;32259:1;32238:18;:22;;;;32292:1;32271:18;:22;;;;32328:1;32310:15;:19;:42;;;;;32351:1;32333:15;:19;32310:42;32306:278;;;32369:46;32382:15;32399;32369:12;:46::i;:::-;32435:137;32468:18;32505:15;32539:18;;32435:137;;;;;;;;:::i;:::-;;;;;;;;32306:278;32618:15;;;;;;;;;;;32610:29;;32661:21;32610:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32596:101;;;;;31221:1484;;;;;;;;;31193:1512;:::o;9735:125::-;;;;:::o;9868:124::-;;;;:::o;12342:98::-;12400:7;12431:1;12427;:5;;;;:::i;:::-;12420:12;;12342:98;;;;:::o;30071:589::-;30197:21;30235:1;30221:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30197:40;;30266:4;30248;30253:1;30248:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30292:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30282:4;30287:1;30282:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30327:62;30344:4;30359:15;30377:11;30327:8;:62::i;:::-;30428:15;:66;;;30509:11;30535:1;30579:4;30606;30626:15;30428:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30126:534;30071:589;:::o;30668:517::-;30816:62;30833:4;30848:15;30866:11;30816:8;:62::i;:::-;30921:15;:31;;;30960:9;30993:4;31013:11;31039:1;31082;18820:6;31151:15;30921:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30668:517;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:117::-;7490:1;7487;7480:12;7504:117;7613:1;7610;7603:12;7627:117;7736:1;7733;7726:12;7767:568;7840:8;7850:6;7900:3;7893:4;7885:6;7881:17;7877:27;7867:122;;7908:79;;:::i;:::-;7867:122;8021:6;8008:20;7998:30;;8051:18;8043:6;8040:30;8037:117;;;8073:79;;:::i;:::-;8037:117;8187:4;8179:6;8175:17;8163:29;;8241:3;8233:4;8225:6;8221:17;8211:8;8207:32;8204:41;8201:128;;;8248:79;;:::i;:::-;8201:128;7767:568;;;;;:::o;8358:::-;8431:8;8441:6;8491:3;8484:4;8476:6;8472:17;8468:27;8458:122;;8499:79;;:::i;:::-;8458:122;8612:6;8599:20;8589:30;;8642:18;8634:6;8631:30;8628:117;;;8664:79;;:::i;:::-;8628:117;8778:4;8770:6;8766:17;8754:29;;8832:3;8824:4;8816:6;8812:17;8802:8;8798:32;8795:41;8792:128;;;8839:79;;:::i;:::-;8792:128;8358:568;;;;;:::o;8932:934::-;9054:6;9062;9070;9078;9127:2;9115:9;9106:7;9102:23;9098:32;9095:119;;;9133:79;;:::i;:::-;9095:119;9281:1;9270:9;9266:17;9253:31;9311:18;9303:6;9300:30;9297:117;;;9333:79;;:::i;:::-;9297:117;9446:80;9518:7;9509:6;9498:9;9494:22;9446:80;:::i;:::-;9428:98;;;;9224:312;9603:2;9592:9;9588:18;9575:32;9634:18;9626:6;9623:30;9620:117;;;9656:79;;:::i;:::-;9620:117;9769:80;9841:7;9832:6;9821:9;9817:22;9769:80;:::i;:::-;9751:98;;;;9546:313;8932:934;;;;;;;:::o;9872:116::-;9942:21;9957:5;9942:21;:::i;:::-;9935:5;9932:32;9922:60;;9978:1;9975;9968:12;9922:60;9872:116;:::o;9994:133::-;10037:5;10075:6;10062:20;10053:29;;10091:30;10115:5;10091:30;:::i;:::-;9994:133;;;;:::o;10133:468::-;10198:6;10206;10255:2;10243:9;10234:7;10230:23;10226:32;10223:119;;;10261:79;;:::i;:::-;10223:119;10381:1;10406:53;10451:7;10442:6;10431:9;10427:22;10406:53;:::i;:::-;10396:63;;10352:117;10508:2;10534:50;10576:7;10567:6;10556:9;10552:22;10534:50;:::i;:::-;10524:60;;10479:115;10133:468;;;;;:::o;10607:323::-;10663:6;10712:2;10700:9;10691:7;10687:23;10683:32;10680:119;;;10718:79;;:::i;:::-;10680:119;10838:1;10863:50;10905:7;10896:6;10885:9;10881:22;10863:50;:::i;:::-;10853:60;;10809:114;10607:323;;;;:::o;10936:110::-;10987:7;11016:24;11034:5;11016:24;:::i;:::-;11005:35;;10936:110;;;:::o;11052:150::-;11139:38;11171:5;11139:38;:::i;:::-;11132:5;11129:49;11119:77;;11192:1;11189;11182:12;11119:77;11052:150;:::o;11208:167::-;11268:5;11306:6;11293:20;11284:29;;11322:47;11363:5;11322:47;:::i;:::-;11208:167;;;;:::o;11381:502::-;11463:6;11471;11520:2;11508:9;11499:7;11495:23;11491:32;11488:119;;;11526:79;;:::i;:::-;11488:119;11646:1;11671:67;11730:7;11721:6;11710:9;11706:22;11671:67;:::i;:::-;11661:77;;11617:131;11787:2;11813:53;11858:7;11849:6;11838:9;11834:22;11813:53;:::i;:::-;11803:63;;11758:118;11381:502;;;;;:::o;11889:474::-;11957:6;11965;12014:2;12002:9;11993:7;11989:23;11985:32;11982:119;;;12020:79;;:::i;:::-;11982:119;12140:1;12165:53;12210:7;12201:6;12190:9;12186:22;12165:53;:::i;:::-;12155:63;;12111:117;12267:2;12293:53;12338:7;12329:6;12318:9;12314:22;12293:53;:::i;:::-;12283:63;;12238:118;11889:474;;;;;:::o;12369:182::-;12509:34;12505:1;12497:6;12493:14;12486:58;12369:182;:::o;12557:366::-;12699:3;12720:67;12784:2;12779:3;12720:67;:::i;:::-;12713:74;;12796:93;12885:3;12796:93;:::i;:::-;12914:2;12909:3;12905:12;12898:19;;12557:366;;;:::o;12929:419::-;13095:4;13133:2;13122:9;13118:18;13110:26;;13182:9;13176:4;13172:20;13168:1;13157:9;13153:17;13146:47;13210:131;13336:4;13210:131;:::i;:::-;13202:139;;12929:419;;;:::o;13354:166::-;13494:18;13490:1;13482:6;13478:14;13471:42;13354:166;:::o;13526:366::-;13668:3;13689:67;13753:2;13748:3;13689:67;:::i;:::-;13682:74;;13765:93;13854:3;13765:93;:::i;:::-;13883:2;13878:3;13874:12;13867:19;;13526:366;;;:::o;13898:419::-;14064:4;14102:2;14091:9;14087:18;14079:26;;14151:9;14145:4;14141:20;14137:1;14126:9;14122:17;14115:47;14179:131;14305:4;14179:131;:::i;:::-;14171:139;;13898:419;;;:::o;14323:180::-;14371:77;14368:1;14361:88;14468:4;14465:1;14458:15;14492:4;14489:1;14482:15;14509:305;14549:3;14568:20;14586:1;14568:20;:::i;:::-;14563:25;;14602:20;14620:1;14602:20;:::i;:::-;14597:25;;14756:1;14688:66;14684:74;14681:1;14678:81;14675:107;;;14762:18;;:::i;:::-;14675:107;14806:1;14803;14799:9;14792:16;;14509:305;;;;:::o;14820:180::-;14868:77;14865:1;14858:88;14965:4;14962:1;14955:15;14989:4;14986:1;14979:15;15006:320;15050:6;15087:1;15081:4;15077:12;15067:22;;15134:1;15128:4;15124:12;15155:18;15145:81;;15211:4;15203:6;15199:17;15189:27;;15145:81;15273:2;15265:6;15262:14;15242:18;15239:38;15236:84;;;15292:18;;:::i;:::-;15236:84;15057:269;15006:320;;;:::o;15332:348::-;15372:7;15395:20;15413:1;15395:20;:::i;:::-;15390:25;;15429:20;15447:1;15429:20;:::i;:::-;15424:25;;15617:1;15549:66;15545:74;15542:1;15539:81;15534:1;15527:9;15520:17;15516:105;15513:131;;;15624:18;;:::i;:::-;15513:131;15672:1;15669;15665:9;15654:20;;15332:348;;;;:::o;15686:227::-;15826:34;15822:1;15814:6;15810:14;15803:58;15895:10;15890:2;15882:6;15878:15;15871:35;15686:227;:::o;15919:366::-;16061:3;16082:67;16146:2;16141:3;16082:67;:::i;:::-;16075:74;;16158:93;16247:3;16158:93;:::i;:::-;16276:2;16271:3;16267:12;16260:19;;15919:366;;;:::o;16291:419::-;16457:4;16495:2;16484:9;16480:18;16472:26;;16544:9;16538:4;16534:20;16530:1;16519:9;16515:17;16508:47;16572:131;16698:4;16572:131;:::i;:::-;16564:139;;16291:419;;;:::o;16716:177::-;16856:29;16852:1;16844:6;16840:14;16833:53;16716:177;:::o;16899:366::-;17041:3;17062:67;17126:2;17121:3;17062:67;:::i;:::-;17055:74;;17138:93;17227:3;17138:93;:::i;:::-;17256:2;17251:3;17247:12;17240:19;;16899:366;;;:::o;17271:419::-;17437:4;17475:2;17464:9;17460:18;17452:26;;17524:9;17518:4;17514:20;17510:1;17499:9;17495:17;17488:47;17552:131;17678:4;17552:131;:::i;:::-;17544:139;;17271:419;;;:::o;17696:170::-;17836:22;17832:1;17824:6;17820:14;17813:46;17696:170;:::o;17872:366::-;18014:3;18035:67;18099:2;18094:3;18035:67;:::i;:::-;18028:74;;18111:93;18200:3;18111:93;:::i;:::-;18229:2;18224:3;18220:12;18213:19;;17872:366;;;:::o;18244:419::-;18410:4;18448:2;18437:9;18433:18;18425:26;;18497:9;18491:4;18487:20;18483:1;18472:9;18468:17;18461:47;18525:131;18651:4;18525:131;:::i;:::-;18517:139;;18244:419;;;:::o;18669:175::-;18809:27;18805:1;18797:6;18793:14;18786:51;18669:175;:::o;18850:366::-;18992:3;19013:67;19077:2;19072:3;19013:67;:::i;:::-;19006:74;;19089:93;19178:3;19089:93;:::i;:::-;19207:2;19202:3;19198:12;19191:19;;18850:366;;;:::o;19222:419::-;19388:4;19426:2;19415:9;19411:18;19403:26;;19475:9;19469:4;19465:20;19461:1;19450:9;19446:17;19439:47;19503:131;19629:4;19503:131;:::i;:::-;19495:139;;19222:419;;;:::o;19647:180::-;19695:77;19692:1;19685:88;19792:4;19789:1;19782:15;19816:4;19813:1;19806:15;19833:244;19973:34;19969:1;19961:6;19957:14;19950:58;20042:27;20037:2;20029:6;20025:15;20018:52;19833:244;:::o;20083:366::-;20225:3;20246:67;20310:2;20305:3;20246:67;:::i;:::-;20239:74;;20322:93;20411:3;20322:93;:::i;:::-;20440:2;20435:3;20431:12;20424:19;;20083:366;;;:::o;20455:419::-;20621:4;20659:2;20648:9;20644:18;20636:26;;20708:9;20702:4;20698:20;20694:1;20683:9;20679:17;20672:47;20736:131;20862:4;20736:131;:::i;:::-;20728:139;;20455:419;;;:::o;20880:143::-;20937:5;20968:6;20962:13;20953:22;;20984:33;21011:5;20984:33;:::i;:::-;20880:143;;;;:::o;21029:351::-;21099:6;21148:2;21136:9;21127:7;21123:23;21119:32;21116:119;;;21154:79;;:::i;:::-;21116:119;21274:1;21299:64;21355:7;21346:6;21335:9;21331:22;21299:64;:::i;:::-;21289:74;;21245:128;21029:351;;;;:::o;21386:164::-;21526:16;21522:1;21514:6;21510:14;21503:40;21386:164;:::o;21556:366::-;21698:3;21719:67;21783:2;21778:3;21719:67;:::i;:::-;21712:74;;21795:93;21884:3;21795:93;:::i;:::-;21913:2;21908:3;21904:12;21897:19;;21556:366;;;:::o;21928:419::-;22094:4;22132:2;22121:9;22117:18;22109:26;;22181:9;22175:4;22171:20;22167:1;22156:9;22152:17;22145:47;22209:131;22335:4;22209:131;:::i;:::-;22201:139;;21928:419;;;:::o;22353:332::-;22474:4;22512:2;22501:9;22497:18;22489:26;;22525:71;22593:1;22582:9;22578:17;22569:6;22525:71;:::i;:::-;22606:72;22674:2;22663:9;22659:18;22650:6;22606:72;:::i;:::-;22353:332;;;;;:::o;22691:137::-;22745:5;22776:6;22770:13;22761:22;;22792:30;22816:5;22792:30;:::i;:::-;22691:137;;;;:::o;22834:345::-;22901:6;22950:2;22938:9;22929:7;22925:23;22921:32;22918:119;;;22956:79;;:::i;:::-;22918:119;23076:1;23101:61;23154:7;23145:6;23134:9;23130:22;23101:61;:::i;:::-;23091:71;;23047:125;22834:345;;;;:::o;23185:224::-;23325:34;23321:1;23313:6;23309:14;23302:58;23394:7;23389:2;23381:6;23377:15;23370:32;23185:224;:::o;23415:366::-;23557:3;23578:67;23642:2;23637:3;23578:67;:::i;:::-;23571:74;;23654:93;23743:3;23654:93;:::i;:::-;23772:2;23767:3;23763:12;23756:19;;23415:366;;;:::o;23787:419::-;23953:4;23991:2;23980:9;23976:18;23968:26;;24040:9;24034:4;24030:20;24026:1;24015:9;24011:17;24004:47;24068:131;24194:4;24068:131;:::i;:::-;24060:139;;23787:419;;;:::o;24212:162::-;24352:14;24348:1;24340:6;24336:14;24329:38;24212:162;:::o;24380:366::-;24522:3;24543:67;24607:2;24602:3;24543:67;:::i;:::-;24536:74;;24619:93;24708:3;24619:93;:::i;:::-;24737:2;24732:3;24728:12;24721:19;;24380:366;;;:::o;24752:419::-;24918:4;24956:2;24945:9;24941:18;24933:26;;25005:9;24999:4;24995:20;24991:1;24980:9;24976:17;24969:47;25033:131;25159:4;25033:131;:::i;:::-;25025:139;;24752:419;;;:::o;25177:225::-;25317:34;25313:1;25305:6;25301:14;25294:58;25386:8;25381:2;25373:6;25369:15;25362:33;25177:225;:::o;25408:366::-;25550:3;25571:67;25635:2;25630:3;25571:67;:::i;:::-;25564:74;;25647:93;25736:3;25647:93;:::i;:::-;25765:2;25760:3;25756:12;25749:19;;25408:366;;;:::o;25780:419::-;25946:4;25984:2;25973:9;25969:18;25961:26;;26033:9;26027:4;26023:20;26019:1;26008:9;26004:17;25997:47;26061:131;26187:4;26061:131;:::i;:::-;26053:139;;25780:419;;;:::o;26205:180::-;26253:77;26250:1;26243:88;26350:4;26347:1;26340:15;26374:4;26371:1;26364:15;26391:185;26431:1;26448:20;26466:1;26448:20;:::i;:::-;26443:25;;26482:20;26500:1;26482:20;:::i;:::-;26477:25;;26521:1;26511:35;;26526:18;;:::i;:::-;26511:35;26568:1;26565;26561:9;26556:14;;26391:185;;;;:::o;26582:223::-;26722:34;26718:1;26710:6;26706:14;26699:58;26791:6;26786:2;26778:6;26774:15;26767:31;26582:223;:::o;26811:366::-;26953:3;26974:67;27038:2;27033:3;26974:67;:::i;:::-;26967:74;;27050:93;27139:3;27050:93;:::i;:::-;27168:2;27163:3;27159:12;27152:19;;26811:366;;;:::o;27183:419::-;27349:4;27387:2;27376:9;27372:18;27364:26;;27436:9;27430:4;27426:20;27422:1;27411:9;27407:17;27400:47;27464:131;27590:4;27464:131;:::i;:::-;27456:139;;27183:419;;;:::o;27608:221::-;27748:34;27744:1;27736:6;27732:14;27725:58;27817:4;27812:2;27804:6;27800:15;27793:29;27608:221;:::o;27835:366::-;27977:3;27998:67;28062:2;28057:3;27998:67;:::i;:::-;27991:74;;28074:93;28163:3;28074:93;:::i;:::-;28192:2;28187:3;28183:12;28176:19;;27835:366;;;:::o;28207:419::-;28373:4;28411:2;28400:9;28396:18;28388:26;;28460:9;28454:4;28450:20;28446:1;28435:9;28431:17;28424:47;28488:131;28614:4;28488:131;:::i;:::-;28480:139;;28207:419;;;:::o;28632:224::-;28772:34;28768:1;28760:6;28756:14;28749:58;28841:7;28836:2;28828:6;28824:15;28817:32;28632:224;:::o;28862:366::-;29004:3;29025:67;29089:2;29084:3;29025:67;:::i;:::-;29018:74;;29101:93;29190:3;29101:93;:::i;:::-;29219:2;29214:3;29210:12;29203:19;;28862:366;;;:::o;29234:419::-;29400:4;29438:2;29427:9;29423:18;29415:26;;29487:9;29481:4;29477:20;29473:1;29462:9;29458:17;29451:47;29515:131;29641:4;29515:131;:::i;:::-;29507:139;;29234:419;;;:::o;29659:222::-;29799:34;29795:1;29787:6;29783:14;29776:58;29868:5;29863:2;29855:6;29851:15;29844:30;29659:222;:::o;29887:366::-;30029:3;30050:67;30114:2;30109:3;30050:67;:::i;:::-;30043:74;;30126:93;30215:3;30126:93;:::i;:::-;30244:2;30239:3;30235:12;30228:19;;29887:366;;;:::o;30259:419::-;30425:4;30463:2;30452:9;30448:18;30440:26;;30512:9;30506:4;30502:20;30498:1;30487:9;30483:17;30476:47;30540:131;30666:4;30540:131;:::i;:::-;30532:139;;30259:419;;;:::o;30684:165::-;30824:17;30820:1;30812:6;30808:14;30801:41;30684:165;:::o;30855:366::-;30997:3;31018:67;31082:2;31077:3;31018:67;:::i;:::-;31011:74;;31094:93;31183:3;31094:93;:::i;:::-;31212:2;31207:3;31203:12;31196:19;;30855:366;;;:::o;31227:419::-;31393:4;31431:2;31420:9;31416:18;31408:26;;31480:9;31474:4;31470:20;31466:1;31455:9;31451:17;31444:47;31508:131;31634:4;31508:131;:::i;:::-;31500:139;;31227:419;;;:::o;31652:172::-;31792:24;31788:1;31780:6;31776:14;31769:48;31652:172;:::o;31830:366::-;31972:3;31993:67;32057:2;32052:3;31993:67;:::i;:::-;31986:74;;32069:93;32158:3;32069:93;:::i;:::-;32187:2;32182:3;32178:12;32171:19;;31830:366;;;:::o;32202:419::-;32368:4;32406:2;32395:9;32391:18;32383:26;;32455:9;32449:4;32445:20;32441:1;32430:9;32426:17;32419:47;32483:131;32609:4;32483:131;:::i;:::-;32475:139;;32202:419;;;:::o;32627:240::-;32767:34;32763:1;32755:6;32751:14;32744:58;32836:23;32831:2;32823:6;32819:15;32812:48;32627:240;:::o;32873:366::-;33015:3;33036:67;33100:2;33095:3;33036:67;:::i;:::-;33029:74;;33112:93;33201:3;33112:93;:::i;:::-;33230:2;33225:3;33221:12;33214:19;;32873:366;;;:::o;33245:419::-;33411:4;33449:2;33438:9;33434:18;33426:26;;33498:9;33492:4;33488:20;33484:1;33473:9;33469:17;33462:47;33526:131;33652:4;33526:131;:::i;:::-;33518:139;;33245:419;;;:::o;33670:169::-;33810:21;33806:1;33798:6;33794:14;33787:45;33670:169;:::o;33845:366::-;33987:3;34008:67;34072:2;34067:3;34008:67;:::i;:::-;34001:74;;34084:93;34173:3;34084:93;:::i;:::-;34202:2;34197:3;34193:12;34186:19;;33845:366;;;:::o;34217:419::-;34383:4;34421:2;34410:9;34406:18;34398:26;;34470:9;34464:4;34460:20;34456:1;34445:9;34441:17;34434:47;34498:131;34624:4;34498:131;:::i;:::-;34490:139;;34217:419;;;:::o;34642:241::-;34782:34;34778:1;34770:6;34766:14;34759:58;34851:24;34846:2;34838:6;34834:15;34827:49;34642:241;:::o;34889:366::-;35031:3;35052:67;35116:2;35111:3;35052:67;:::i;:::-;35045:74;;35128:93;35217:3;35128:93;:::i;:::-;35246:2;35241:3;35237:12;35230:19;;34889:366;;;:::o;35261:419::-;35427:4;35465:2;35454:9;35450:18;35442:26;;35514:9;35508:4;35504:20;35500:1;35489:9;35485:17;35478:47;35542:131;35668:4;35542:131;:::i;:::-;35534:139;;35261:419;;;:::o;35686:191::-;35726:4;35746:20;35764:1;35746:20;:::i;:::-;35741:25;;35780:20;35798:1;35780:20;:::i;:::-;35775:25;;35819:1;35816;35813:8;35810:34;;;35824:18;;:::i;:::-;35810:34;35869:1;35866;35862:9;35854:17;;35686:191;;;;:::o;35883:225::-;36023:34;36019:1;36011:6;36007:14;36000:58;36092:8;36087:2;36079:6;36075:15;36068:33;35883:225;:::o;36114:366::-;36256:3;36277:67;36341:2;36336:3;36277:67;:::i;:::-;36270:74;;36353:93;36442:3;36353:93;:::i;:::-;36471:2;36466:3;36462:12;36455:19;;36114:366;;;:::o;36486:419::-;36652:4;36690:2;36679:9;36675:18;36667:26;;36739:9;36733:4;36729:20;36725:1;36714:9;36710:17;36703:47;36767:131;36893:4;36767:131;:::i;:::-;36759:139;;36486:419;;;:::o;36911:442::-;37060:4;37098:2;37087:9;37083:18;37075:26;;37111:71;37179:1;37168:9;37164:17;37155:6;37111:71;:::i;:::-;37192:72;37260:2;37249:9;37245:18;37236:6;37192:72;:::i;:::-;37274;37342:2;37331:9;37327:18;37318:6;37274:72;:::i;:::-;36911:442;;;;;;:::o;37359:147::-;37460:11;37497:3;37482:18;;37359:147;;;;:::o;37512:114::-;;:::o;37632:398::-;37791:3;37812:83;37893:1;37888:3;37812:83;:::i;:::-;37805:90;;37904:93;37993:3;37904:93;:::i;:::-;38022:1;38017:3;38013:11;38006:18;;37632:398;;;:::o;38036:379::-;38220:3;38242:147;38385:3;38242:147;:::i;:::-;38235:154;;38406:3;38399:10;;38036:379;;;:::o;38421:180::-;38469:77;38466:1;38459:88;38566:4;38563:1;38556:15;38590:4;38587:1;38580:15;38607:143;38664:5;38695:6;38689:13;38680:22;;38711:33;38738:5;38711:33;:::i;:::-;38607:143;;;;:::o;38756:351::-;38826:6;38875:2;38863:9;38854:7;38850:23;38846:32;38843:119;;;38881:79;;:::i;:::-;38843:119;39001:1;39026:64;39082:7;39073:6;39062:9;39058:22;39026:64;:::i;:::-;39016:74;;38972:128;38756:351;;;;:::o;39113:85::-;39158:7;39187:5;39176:16;;39113:85;;;:::o;39204:158::-;39262:9;39295:61;39313:42;39322:32;39348:5;39322:32;:::i;:::-;39313:42;:::i;:::-;39295:61;:::i;:::-;39282:74;;39204:158;;;:::o;39368:147::-;39463:45;39502:5;39463:45;:::i;:::-;39458:3;39451:58;39368:147;;:::o;39521:114::-;39588:6;39622:5;39616:12;39606:22;;39521:114;;;:::o;39641:184::-;39740:11;39774:6;39769:3;39762:19;39814:4;39809:3;39805:14;39790:29;;39641:184;;;;:::o;39831:132::-;39898:4;39921:3;39913:11;;39951:4;39946:3;39942:14;39934:22;;39831:132;;;:::o;39969:108::-;40046:24;40064:5;40046:24;:::i;:::-;40041:3;40034:37;39969:108;;:::o;40083:179::-;40152:10;40173:46;40215:3;40207:6;40173:46;:::i;:::-;40251:4;40246:3;40242:14;40228:28;;40083:179;;;;:::o;40268:113::-;40338:4;40370;40365:3;40361:14;40353:22;;40268:113;;;:::o;40417:732::-;40536:3;40565:54;40613:5;40565:54;:::i;:::-;40635:86;40714:6;40709:3;40635:86;:::i;:::-;40628:93;;40745:56;40795:5;40745:56;:::i;:::-;40824:7;40855:1;40840:284;40865:6;40862:1;40859:13;40840:284;;;40941:6;40935:13;40968:63;41027:3;41012:13;40968:63;:::i;:::-;40961:70;;41054:60;41107:6;41054:60;:::i;:::-;41044:70;;40900:224;40887:1;40884;40880:9;40875:14;;40840:284;;;40844:14;41140:3;41133:10;;40541:608;;;40417:732;;;;:::o;41155:831::-;41418:4;41456:3;41445:9;41441:19;41433:27;;41470:71;41538:1;41527:9;41523:17;41514:6;41470:71;:::i;:::-;41551:80;41627:2;41616:9;41612:18;41603:6;41551:80;:::i;:::-;41678:9;41672:4;41668:20;41663:2;41652:9;41648:18;41641:48;41706:108;41809:4;41800:6;41706:108;:::i;:::-;41698:116;;41824:72;41892:2;41881:9;41877:18;41868:6;41824:72;:::i;:::-;41906:73;41974:3;41963:9;41959:19;41950:6;41906:73;:::i;:::-;41155:831;;;;;;;;:::o;41992:807::-;42241:4;42279:3;42268:9;42264:19;42256:27;;42293:71;42361:1;42350:9;42346:17;42337:6;42293:71;:::i;:::-;42374:72;42442:2;42431:9;42427:18;42418:6;42374:72;:::i;:::-;42456:80;42532:2;42521:9;42517:18;42508:6;42456:80;:::i;:::-;42546;42622:2;42611:9;42607:18;42598:6;42546:80;:::i;:::-;42636:73;42704:3;42693:9;42689:19;42680:6;42636:73;:::i;:::-;42719;42787:3;42776:9;42772:19;42763:6;42719:73;:::i;:::-;41992:807;;;;;;;;;:::o;42805:663::-;42893:6;42901;42909;42958:2;42946:9;42937:7;42933:23;42929:32;42926:119;;;42964:79;;:::i;:::-;42926:119;43084:1;43109:64;43165:7;43156:6;43145:9;43141:22;43109:64;:::i;:::-;43099:74;;43055:128;43222:2;43248:64;43304:7;43295:6;43284:9;43280:22;43248:64;:::i;:::-;43238:74;;43193:129;43361:2;43387:64;43443:7;43434:6;43423:9;43419:22;43387:64;:::i;:::-;43377:74;;43332:129;42805:663;;;;;:::o

Swarm Source

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