ETH Price: $3,308.88 (+0.03%)
Gas: 17 Gwei

Token

ZOOK PROTOCOL (ZOOK)
 

Overview

Max Total Supply

100,000,000 ZOOK

Holders

653 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$1,735.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
2.937324365780577514 ZOOK

Value
$0.00 ( ~0 Eth) [0.0000%]
0x0e9bcbc732d4eed18063186119118d28cc64d7d0
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Unveiling the FUTURE of finance! Dive into the world All-in-one Access DeFi Ecosystem, supercharged on Ethereum.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
zook

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

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

// SPDX-License-Identifier: MIT

// Zook Protocol links:

// Twitter - https://x.com/zookfi 

// Telegram - https://telegram.me/zookfi

// Website - https://www.zook.fi/

// Discord - https://discord.gg/zookfi

// Medium - https://medium.com/@zookfi


pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public developmentWallet;
    address public liquidityWallet;
    address public marketingWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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



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

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

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyMarketingFee;

    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellMarketingFee;



    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForMarketing;



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

    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 developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

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

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

    constructor() ERC20("ZOOK PROTOCOL", "ZOOK") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniV2router); 

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

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

        // launch buy fees
        uint256 _buyLiquidityFee = 10;
        uint256 _buyDevelopmentFee = 10;
        uint256 _buyMarketingFee = 10;
        
        // launch sell fees
        uint256 _sellLiquidityFee = 10;
        uint256 _sellDevelopmentFee = 40;
        uint256 _sellMarketingFee = 30;


        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransaction = 1000_000 * 1e18; // 1% max transaction at launch
        maxWallet = 1000_000 * 1e18; // 1% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet


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

        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellLiquidityFee + sellDevelopmentFee + sellMarketingFee ;

        developmentWallet = address(0x4860da3d48EF5c82c269eE185Dc27Aa9DAfDC1d9); 
        liquidityWallet = address(0x897B2fFCeE9a9611BF465866fD293d9dD931a230); 
        marketingWallet = address(0x2Cec118b9749a659b851cecbe1b5a8c0C417773f);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

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

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

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

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

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[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 _liquidityFee,
        uint256 _developmentFee,
        uint256  _marketingFee
    ) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyMarketingFee =  _marketingFee;
        buyTotalFees =  buyLiquidityFee + buyDevelopmentFee + buyMarketingFee ;
        require(buyTotalFees <= 5);
    }

    function updateSellFees(
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256  _marketingFee
    ) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellMarketingFee =  _marketingFee;
        sellTotalFees = sellLiquidityFee + sellDevelopmentFee + sellMarketingFee ;
        require(sellTotalFees <= 5); 
    }

    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 updatedevelopmentWallet(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function updatemarketingWallet (address newWallet) external onlyOwner{
        emit marketingWalletUpdated(newWallet,marketingWallet);
       marketingWallet = newWallet;
    }

    function updateliquidityWallet(address newliquidityWallet) external onlyOwner {
        emit liquidityWalletUpdated(newliquidityWallet, liquidityWallet);
        liquidityWallet = newliquidityWallet;
    }

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

    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(!blocked[from], "Sniper blocked");

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

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

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

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[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;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; 

                
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / 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
            liquidityWallet,
            block.timestamp
        );
    }

    function updateBlockList(address[] calldata blockAddressess, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockAddressess.length;i++){
            address blockAddress = blockAddressess[i];
            if(blockAddress != address(this) && 
               blockAddress != uniV2router && 
               blockAddress != address(uniswapV2Pair))
                blocked[blockAddress] = shouldBlock;
        }
    }

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForDevelopment - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForDevelopment = 0;
        tokensForMarketing = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(marketingWallet).call{value: ethForMarketing}("");
    }
}

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":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","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":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"address[]","name":"blockAddressess","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"updateBlockList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","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":"address","name":"newWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newliquidityWallet","type":"address"}],"name":"updateliquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280600d81526020017f5a4f4f4b2050524f544f434f4c000000000000000000000000000000000000008152506040518060400160405280600481526020017f5a4f4f4b0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000ba8565b5080600490805190602001906200017092919062000ba8565b50505062000193620001876200066860201b60201c565b6200067060201b60201c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050620001cd8160016200073660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000cc2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000cc2565b6040518363ffffffff1660e01b81526004016200032092919062000d05565b6020604051808303816000875af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000cc2565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ae60a05160016200073660201b60201c565b620003c360a05160016200082060201b60201c565b6000600a90506000600a90506000600a90506000600a90506000602890506000601e905060006a52b7d2dcc80cd2e4000000905069d3c21bcecceda1000000600a8190555069d3c21bcecceda1000000600c819055506127106005826200042b919062000d6b565b62000437919062000dfb565b600b8190555086601381905550856014819055508460158190555060155460145460135462000467919062000e33565b62000473919062000e33565b601281905550836017819055508260188190555081601981905550601954601854601754620004a3919062000e33565b620004af919062000e33565b601681905550734860da3d48ef5c82c269ee185dc27aa9dafdc1d9600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073897b2ffcee9a9611bf465866fd293d9dd931a230600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732cec118b9749a659b851cecbe1b5a8c0c417773f600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d6620005c8620008c160201b60201c565b6001620008eb60201b60201c565b620005e9306001620008eb60201b60201c565b620005fe61dead6001620008eb60201b60201c565b6200062062000612620008c160201b60201c565b60016200073660201b60201c565b620006333060016200073660201b60201c565b6200064861dead60016200073660201b60201c565b6200065a338262000a2560201b60201c565b505050505050505062001052565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007466200066860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200076c620008c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007bc9062000ef1565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008fb6200066860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000921620008c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200097a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009719062000ef1565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a19919062000f30565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8f9062000f9d565b60405180910390fd5b62000aac6000838362000b9e60201b60201c565b806002600082825462000ac0919062000e33565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b17919062000e33565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7e919062000fd0565b60405180910390a362000b9a6000838362000ba360201b60201c565b5050565b505050565b505050565b82805462000bb6906200101c565b90600052602060002090601f01602090048101928262000bda576000855562000c26565b82601f1062000bf557805160ff191683800117855562000c26565b8280016001018555821562000c26579182015b8281111562000c2557825182559160200191906001019062000c08565b5b50905062000c35919062000c39565b5090565b5b8082111562000c5457600081600090555060010162000c3a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c8a8262000c5d565b9050919050565b62000c9c8162000c7d565b811462000ca857600080fd5b50565b60008151905062000cbc8162000c91565b92915050565b60006020828403121562000cdb5762000cda62000c58565b5b600062000ceb8482850162000cab565b91505092915050565b62000cff8162000c7d565b82525050565b600060408201905062000d1c600083018562000cf4565b62000d2b602083018462000cf4565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d788262000d32565b915062000d858362000d32565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dc15762000dc062000d3c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e088262000d32565b915062000e158362000d32565b92508262000e285762000e2762000dcc565b5b828204905092915050565b600062000e408262000d32565b915062000e4d8362000d32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e855762000e8462000d3c565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ed960208362000e90565b915062000ee68262000ea1565b602082019050919050565b6000602082019050818103600083015262000f0c8162000eca565b9050919050565b60008115159050919050565b62000f2a8162000f13565b82525050565b600060208201905062000f47600083018462000f1f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f85601f8362000e90565b915062000f928262000f4d565b602082019050919050565b6000602082019050818103600083015262000fb88162000f76565b9050919050565b62000fca8162000d32565b82525050565b600060208201905062000fe7600083018462000fbf565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200103557607f821691505b602082108114156200104c576200104b62000fed565b5b50919050565b60805160a051615741620010b7600039600081816113040152818161182d01528181611d130152612dab015260008181610fdc01528181612d5301528181613e4701528181613f2801528181613f4f01528181613feb015261401201526157416000f3fe6080604052600436106103905760003560e01c806392136913116101dc578063c79c04fd11610102578063e2f45605116100a0578063f11a24d31161006f578063f11a24d314610d71578063f2fde38b14610d9c578063f637434214610dc5578063f8b45b0514610df057610397565b8063e2f4560514610cb3578063e596219514610cde578063e884f26014610d1b578063ef8700e514610d4657610397565b8063d4698016116100dc578063d469801614610be3578063d85ba06314610c0e578063dd62ed3e14610c39578063e1bc339414610c7657610397565b8063c79c04fd14610b52578063c876d0b914610b7b578063d257b34f14610ba657610397565b8063b20414111161017a578063c024666811610149578063c024666814610aaa578063c04a541414610ad3578063c17b5b8c14610afe578063c3f70b5214610b2757610397565b8063b2041411146109ee578063b62496f514610a19578063bbc0c74214610a56578063bff7816914610a8157610397565b806395d89b41116101b657806395d89b41146109205780639a7a23d61461094b578063a457c2d714610974578063a9059cbb146109b157610397565b806392136913146108a3578063924de9b7146108ce57806392aa3773146108f757610397565b806349bd5a5e116102c1578063751039fc1161025f5780638095d5641161022e5780638095d5641461080f5780638a13a44b146108385780638a8c523c146108615780638da5cb5b1461087857610397565b8063751039fc146107655780637571336a1461079057806375f0a874146107b95780637bce5a04146107e457610397565b80636a486a8e1161029b5780636a486a8e146106bb5780636ddd1713146106e657806370a0823114610711578063715018a61461074e57610397565b806349bd5a5e146106285780634a62bb65146106535780634fbee1931461067e57610397565b80631c499ab01161032e57806327c8f8351161030857806327c8f8351461056a578063313ce56714610595578063377ad127146105c057806339509351146105eb57610397565b80631c499ab0146104d95780631f3fed8f1461050257806323b872dd1461052d57610397565b80631694505e1161036a5780631694505e1461042d57806318160ddd1461045857806318a94cf1146104835780631a8145bb146104ae57610397565b80630517d13d1461039c57806306fdde03146103c5578063095ea7b3146103f057610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103c360048036038101906103be9190614121565b610e1b565b005b3480156103d157600080fd5b506103da610f2a565b6040516103e791906141e7565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190614267565b610fbc565b60405161042491906142c2565b60405180910390f35b34801561043957600080fd5b50610442610fda565b60405161044f919061433c565b60405180910390f35b34801561046457600080fd5b5061046d610ffe565b60405161047a9190614366565b60405180910390f35b34801561048f57600080fd5b50610498611008565b6040516104a59190614366565b60405180910390f35b3480156104ba57600080fd5b506104c361100e565b6040516104d09190614366565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190614121565b611014565b005b34801561050e57600080fd5b50610517611123565b6040516105249190614366565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190614381565b611129565b60405161056191906142c2565b60405180910390f35b34801561057657600080fd5b5061057f611221565b60405161058c91906143e3565b60405180910390f35b3480156105a157600080fd5b506105aa611227565b6040516105b7919061441a565b60405180910390f35b3480156105cc57600080fd5b506105d5611230565b6040516105e291906143e3565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614267565b611256565b60405161061f91906142c2565b60405180910390f35b34801561063457600080fd5b5061063d611302565b60405161064a91906143e3565b60405180910390f35b34801561065f57600080fd5b50610668611326565b60405161067591906142c2565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a09190614435565b611339565b6040516106b291906142c2565b60405180910390f35b3480156106c757600080fd5b506106d061138f565b6040516106dd9190614366565b60405180910390f35b3480156106f257600080fd5b506106fb611395565b60405161070891906142c2565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190614435565b6113a8565b6040516107459190614366565b60405180910390f35b34801561075a57600080fd5b506107636113f0565b005b34801561077157600080fd5b5061077a611478565b60405161078791906142c2565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b2919061448e565b611518565b005b3480156107c557600080fd5b506107ce6115ef565b6040516107db91906143e3565b60405180910390f35b3480156107f057600080fd5b506107f9611615565b6040516108069190614366565b60405180910390f35b34801561081b57600080fd5b50610836600480360381019061083191906144ce565b61161b565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614586565b6116e4565b005b34801561086d57600080fd5b506108766118f3565b005b34801561088457600080fd5b5061088d6119fe565b60405161089a91906143e3565b60405180910390f35b3480156108af57600080fd5b506108b8611a28565b6040516108c59190614366565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f091906145e6565b611a2e565b005b34801561090357600080fd5b5061091e60048036038101906109199190614435565b611ac7565b005b34801561092c57600080fd5b50610935611c03565b60405161094291906141e7565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d919061448e565b611c95565b005b34801561098057600080fd5b5061099b60048036038101906109969190614267565b611dae565b6040516109a891906142c2565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190614267565b611e99565b6040516109e591906142c2565b60405180910390f35b3480156109fa57600080fd5b50610a03611eb7565b604051610a109190614366565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614435565b611ebd565b604051610a4d91906142c2565b60405180910390f35b348015610a6257600080fd5b50610a6b611edd565b604051610a7891906142c2565b60405180910390f35b348015610a8d57600080fd5b50610aa86004803603810190610aa39190614435565b611ef0565b005b348015610ab657600080fd5b50610ad16004803603810190610acc919061448e565b61202c565b005b348015610adf57600080fd5b50610ae8612151565b604051610af591906143e3565b60405180910390f35b348015610b0a57600080fd5b50610b256004803603810190610b2091906144ce565b612177565b005b348015610b3357600080fd5b50610b3c612240565b604051610b499190614366565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b749190614435565b612246565b005b348015610b8757600080fd5b50610b90612382565b604051610b9d91906142c2565b60405180910390f35b348015610bb257600080fd5b50610bcd6004803603810190610bc89190614121565b612395565b604051610bda91906142c2565b60405180910390f35b348015610bef57600080fd5b50610bf86124ea565b604051610c0591906143e3565b60405180910390f35b348015610c1a57600080fd5b50610c23612510565b604051610c309190614366565b60405180910390f35b348015610c4557600080fd5b50610c606004803603810190610c5b9190614613565b612516565b604051610c6d9190614366565b60405180910390f35b348015610c8257600080fd5b50610c9d6004803603810190610c989190614435565b61259d565b604051610caa91906142c2565b60405180910390f35b348015610cbf57600080fd5b50610cc86125bd565b604051610cd59190614366565b60405180910390f35b348015610cea57600080fd5b50610d056004803603810190610d009190614435565b6125c3565b604051610d1291906142c2565b60405180910390f35b348015610d2757600080fd5b50610d306125e3565b604051610d3d91906142c2565b60405180910390f35b348015610d5257600080fd5b50610d5b612683565b604051610d689190614366565b60405180910390f35b348015610d7d57600080fd5b50610d86612689565b604051610d939190614366565b60405180910390f35b348015610da857600080fd5b50610dc36004803603810190610dbe9190614435565b61268f565b005b348015610dd157600080fd5b50610dda612787565b604051610de79190614366565b60405180910390f35b348015610dfc57600080fd5b50610e0561278d565b604051610e129190614366565b60405180910390f35b610e23612793565b73ffffffffffffffffffffffffffffffffffffffff16610e416119fe565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e9061469f565b60405180910390fd5b670de0b6b3a76400006103e86001610ead610ffe565b610eb791906146ee565b610ec19190614777565b610ecb9190614777565b811015610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f049061481a565b60405180910390fd5b670de0b6b3a764000081610f2191906146ee565b600a8190555050565b606060038054610f3990614869565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6590614869565b8015610fb25780601f10610f8757610100808354040283529160200191610fb2565b820191906000526020600020905b815481529060010190602001808311610f9557829003601f168201915b5050505050905090565b6000610fd0610fc9612793565b848461279b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b601a5481565b61101c612793565b73ffffffffffffffffffffffffffffffffffffffff1661103a6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110879061469f565b60405180910390fd5b670de0b6b3a76400006103e860056110a6610ffe565b6110b091906146ee565b6110ba9190614777565b6110c49190614777565b811015611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd9061490d565b60405180910390fd5b670de0b6b3a76400008161111a91906146ee565b600c8190555050565b601c5481565b6000611136848484612966565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611181612793565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061499f565b60405180910390fd5b6112158561120d612793565b85840361279b565b60019150509392505050565b61dead81565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006112f8611263612793565b848460016000611271612793565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f391906149bf565b61279b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f8612793565b73ffffffffffffffffffffffffffffffffffffffff166114166119fe565b73ffffffffffffffffffffffffffffffffffffffff161461146c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114639061469f565b60405180910390fd5b611476600061368d565b565b6000611482612793565b73ffffffffffffffffffffffffffffffffffffffff166114a06119fe565b73ffffffffffffffffffffffffffffffffffffffff16146114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed9061469f565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611520612793565b73ffffffffffffffffffffffffffffffffffffffff1661153e6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b9061469f565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611623612793565b73ffffffffffffffffffffffffffffffffffffffff166116416119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e9061469f565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546116bf91906149bf565b6116c991906149bf565b601281905550600560125411156116df57600080fd5b505050565b6116ec612793565b73ffffffffffffffffffffffffffffffffffffffff1661170a6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117579061469f565b60405180910390fd5b60005b838390508110156118ed57600084848381811061178357611782614a15565b5b90506020020160208101906117989190614435565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156118245750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561187c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156118d95782601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806118e590614a44565b915050611763565b50505050565b6118fb612793565b73ffffffffffffffffffffffffffffffffffffffff166119196119fe565b73ffffffffffffffffffffffffffffffffffffffff161461196f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119669061469f565b60405180910390fd5b600d60019054906101000a900460ff16156119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614ad9565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550436010819055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611a36612793565b73ffffffffffffffffffffffffffffffffffffffff16611a546119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa19061469f565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b611acf612793565b73ffffffffffffffffffffffffffffffffffffffff16611aed6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061469f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611c1290614869565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3e90614869565b8015611c8b5780601f10611c6057610100808354040283529160200191611c8b565b820191906000526020600020905b815481529060010190602001808311611c6e57829003601f168201915b5050505050905090565b611c9d612793565b73ffffffffffffffffffffffffffffffffffffffff16611cbb6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d089061469f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614b6b565b60405180910390fd5b611daa8282613753565b5050565b60008060016000611dbd612793565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7190614bfd565b60405180910390fd5b611e8e611e85612793565b8585840361279b565b600191505092915050565b6000611ead611ea6612793565b8484612966565b6001905092915050565b60145481565b601f6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611ef8612793565b73ffffffffffffffffffffffffffffffffffffffff16611f166119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f639061469f565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612034612793565b73ffffffffffffffffffffffffffffffffffffffff166120526119fe565b73ffffffffffffffffffffffffffffffffffffffff16146120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f9061469f565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161214591906142c2565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61217f612793565b73ffffffffffffffffffffffffffffffffffffffff1661219d6119fe565b73ffffffffffffffffffffffffffffffffffffffff16146121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea9061469f565b60405180910390fd5b82601781905550816018819055508060198190555060195460185460175461221b91906149bf565b61222591906149bf565b6016819055506005601654111561223b57600080fd5b505050565b600a5481565b61224e612793565b73ffffffffffffffffffffffffffffffffffffffff1661226c6119fe565b73ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b99061469f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900460ff1681565b600061239f612793565b73ffffffffffffffffffffffffffffffffffffffff166123bd6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a9061469f565b60405180910390fd5b620186a06001612421610ffe565b61242b91906146ee565b6124359190614777565b821015612477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246e90614c8f565b60405180910390fd5b6103e86005612484610ffe565b61248e91906146ee565b6124989190614777565b8211156124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d190614d21565b60405180910390fd5b81600b8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60116020528060005260406000206000915054906101000a900460ff1681565b60006125ed612793565b73ffffffffffffffffffffffffffffffffffffffff1661260b6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614612661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126589061469f565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b601b5481565b60135481565b612697612793565b73ffffffffffffffffffffffffffffffffffffffff166126b56119fe565b73ffffffffffffffffffffffffffffffffffffffff161461270b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127029061469f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614db3565b60405180910390fd5b6127848161368d565b50565b60175481565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561280b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280290614e45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287290614ed7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129599190614366565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90614f69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d90614ffb565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90615067565b60405180910390fd5b6000811415612aed57612ae8838360006137f4565b613688565b600d60009054906101000a900460ff16156131b057612b0a6119fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b785750612b486119fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bb15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612beb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c045750600660149054906101000a900460ff16155b156131af57600d60019054906101000a900460ff16612cfe57601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cbe5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf4906150d3565b60405180910390fd5b5b600f60009054906101000a900460ff1615612ec657612d1b6119fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612da257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ec55743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e779061518b565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f695750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301057600a54811115612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa9061521d565b60405180910390fd5b600c54612fbf836113a8565b82612fca91906149bf565b111561300b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300290615289565b60405180910390fd5b6131ae565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130b35750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561310257600a548111156130fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f49061531b565b60405180910390fd5b6131ad565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131ac57600c5461315f836113a8565b8261316a91906149bf565b11156131ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a290615289565b60405180910390fd5b5b5b5b5b5b60006131bb306113a8565b90506000600b5482101590508080156131e05750600d60029054906101000a900460ff165b80156131f95750600660149054906101000a900460ff16155b801561324f5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132a55750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132fb5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561333f576001600660146101000a81548160ff021916908315150217905550613323613a75565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133f55750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133ff57600090505b6000811561367857601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561346257506000601654115b1561352f5761348f606461348160165488613d5c90919063ffffffff16565b613d7290919063ffffffff16565b9050601654601754826134a291906146ee565b6134ac9190614777565b601a60008282546134bd91906149bf565b92505081905550601654601854826134d591906146ee565b6134df9190614777565b601b60008282546134f091906149bf565b925050819055506016546019548261350891906146ee565b6135129190614777565b601c600082825461352391906149bf565b92505081905550613654565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358a57506000601254115b15613653576135b760646135a960125488613d5c90919063ffffffff16565b613d7290919063ffffffff16565b9050601254601354826135ca91906146ee565b6135d49190614777565b601a60008282546135e591906149bf565b92505081905550601254601454826135fd91906146ee565b6136079190614777565b601b600082825461361891906149bf565b925050819055506012546015548261363091906146ee565b61363a9190614777565b601c600082825461364b91906149bf565b925050819055505b5b6000811115613669576136688730836137f4565b5b8085613675919061533b565b94505b6136838787876137f4565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385b90614f69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138cb90614ffb565b60405180910390fd5b6138df838383613d88565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395c906153e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139f891906149bf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a5c9190614366565b60405180910390a3613a6f848484613d8d565b50505050565b6000613a80306113a8565b90506000601c54601b54601a54613a9791906149bf565b613aa191906149bf565b9050600080831480613ab35750600082145b15613ac057505050613d5a565b6014600b54613acf91906146ee565b831115613ae8576014600b54613ae591906146ee565b92505b6000600283601a5486613afb91906146ee565b613b059190614777565b613b0f9190614777565b90506000613b268286613d9290919063ffffffff16565b90506000479050613b3682613da8565b6000613b4b8247613d9290919063ffffffff16565b90506000613b7687613b68601b5485613d5c90919063ffffffff16565b613d7290919063ffffffff16565b90506000613ba188613b93601c5486613d5c90919063ffffffff16565b613d7290919063ffffffff16565b90506000818385613bb2919061533b565b613bbc919061533b565b90506000601a819055506000601b819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613c1c90615432565b60006040518083038185875af1925050503d8060008114613c59576040519150601f19603f3d011682016040523d82523d6000602084013e613c5e565b606091505b505080985050600087118015613c745750600081115b15613cc157613c838782613fe5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601a54604051613cb893929190615447565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613d0790615432565b60006040518083038185875af1925050503d8060008114613d44576040519150601f19603f3d011682016040523d82523d6000602084013e613d49565b606091505b505080985050505050505050505050505b565b60008183613d6a91906146ee565b905092915050565b60008183613d809190614777565b905092915050565b505050565b505050565b60008183613da0919061533b565b905092915050565b6000600267ffffffffffffffff811115613dc557613dc461547e565b5b604051908082528060200260200182016040528015613df35781602001602082028036833780820191505090505b5090503081600081518110613e0b57613e0a614a15565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed491906154c2565b81600181518110613ee857613ee7614a15565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f4d307f00000000000000000000000000000000000000000000000000000000000000008461279b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613faf9594939291906155e8565b600060405180830381600087803b158015613fc957600080fd5b505af1158015613fdd573d6000803e3d6000fd5b505050505050565b614010307f00000000000000000000000000000000000000000000000000000000000000008461279b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161409796959493929190615642565b60606040518083038185885af11580156140b5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140da91906156b8565b5050505050565b600080fd5b600080fd5b6000819050919050565b6140fe816140eb565b811461410957600080fd5b50565b60008135905061411b816140f5565b92915050565b600060208284031215614137576141366140e1565b5b60006141458482850161410c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561418857808201518184015260208101905061416d565b83811115614197576000848401525b50505050565b6000601f19601f8301169050919050565b60006141b98261414e565b6141c38185614159565b93506141d381856020860161416a565b6141dc8161419d565b840191505092915050565b6000602082019050818103600083015261420181846141ae565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061423482614209565b9050919050565b61424481614229565b811461424f57600080fd5b50565b6000813590506142618161423b565b92915050565b6000806040838503121561427e5761427d6140e1565b5b600061428c85828601614252565b925050602061429d8582860161410c565b9150509250929050565b60008115159050919050565b6142bc816142a7565b82525050565b60006020820190506142d760008301846142b3565b92915050565b6000819050919050565b60006143026142fd6142f884614209565b6142dd565b614209565b9050919050565b6000614314826142e7565b9050919050565b600061432682614309565b9050919050565b6143368161431b565b82525050565b6000602082019050614351600083018461432d565b92915050565b614360816140eb565b82525050565b600060208201905061437b6000830184614357565b92915050565b60008060006060848603121561439a576143996140e1565b5b60006143a886828701614252565b93505060206143b986828701614252565b92505060406143ca8682870161410c565b9150509250925092565b6143dd81614229565b82525050565b60006020820190506143f860008301846143d4565b92915050565b600060ff82169050919050565b614414816143fe565b82525050565b600060208201905061442f600083018461440b565b92915050565b60006020828403121561444b5761444a6140e1565b5b600061445984828501614252565b91505092915050565b61446b816142a7565b811461447657600080fd5b50565b60008135905061448881614462565b92915050565b600080604083850312156144a5576144a46140e1565b5b60006144b385828601614252565b92505060206144c485828601614479565b9150509250929050565b6000806000606084860312156144e7576144e66140e1565b5b60006144f58682870161410c565b93505060206145068682870161410c565b92505060406145178682870161410c565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261454657614545614521565b5b8235905067ffffffffffffffff81111561456357614562614526565b5b60208301915083602082028301111561457f5761457e61452b565b5b9250929050565b60008060006040848603121561459f5761459e6140e1565b5b600084013567ffffffffffffffff8111156145bd576145bc6140e6565b5b6145c986828701614530565b935093505060206145dc86828701614479565b9150509250925092565b6000602082840312156145fc576145fb6140e1565b5b600061460a84828501614479565b91505092915050565b6000806040838503121561462a576146296140e1565b5b600061463885828601614252565b925050602061464985828601614252565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614689602083614159565b915061469482614653565b602082019050919050565b600060208201905081810360008301526146b88161467c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146f9826140eb565b9150614704836140eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561473d5761473c6146bf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614782826140eb565b915061478d836140eb565b92508261479d5761479c614748565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614804602983614159565b915061480f826147a8565b604082019050919050565b60006020820190508181036000830152614833816147f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061488157607f821691505b602082108114156148955761489461483a565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006148f7602483614159565b91506149028261489b565b604082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614989602883614159565b91506149948261492d565b604082019050919050565b600060208201905081810360008301526149b88161497c565b9050919050565b60006149ca826140eb565b91506149d5836140eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a0a57614a096146bf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a4f826140eb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a8257614a816146bf565b5b600182019050919050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ac3600e83614159565b9150614ace82614a8d565b602082019050919050565b60006020820190508181036000830152614af281614ab6565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b55603983614159565b9150614b6082614af9565b604082019050919050565b60006020820190508181036000830152614b8481614b48565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614be7602583614159565b9150614bf282614b8b565b604082019050919050565b60006020820190508181036000830152614c1681614bda565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c79603583614159565b9150614c8482614c1d565b604082019050919050565b60006020820190508181036000830152614ca881614c6c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d0b603483614159565b9150614d1682614caf565b604082019050919050565b60006020820190508181036000830152614d3a81614cfe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d9d602683614159565b9150614da882614d41565b604082019050919050565b60006020820190508181036000830152614dcc81614d90565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e2f602483614159565b9150614e3a82614dd3565b604082019050919050565b60006020820190508181036000830152614e5e81614e22565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec1602283614159565b9150614ecc82614e65565b604082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f53602583614159565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602383614159565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b6000615051600e83614159565b915061505c8261501b565b602082019050919050565b6000602082019050818103600083015261508081615044565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150bd601683614159565b91506150c882615087565b602082019050919050565b600060208201905081810360008301526150ec816150b0565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615175604983614159565b9150615180826150f3565b606082019050919050565b600060208201905081810360008301526151a481615168565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615207602f83614159565b9150615212826151ab565b604082019050919050565b60006020820190508181036000830152615236816151fa565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615273601383614159565b915061527e8261523d565b602082019050919050565b600060208201905081810360008301526152a281615266565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615305603083614159565b9150615310826152a9565b604082019050919050565b60006020820190508181036000830152615334816152f8565b9050919050565b6000615346826140eb565b9150615351836140eb565b925082821015615364576153636146bf565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006153cb602683614159565b91506153d68261536f565b604082019050919050565b600060208201905081810360008301526153fa816153be565b9050919050565b600081905092915050565b50565b600061541c600083615401565b91506154278261540c565b600082019050919050565b600061543d8261540f565b9150819050919050565b600060608201905061545c6000830186614357565b6154696020830185614357565b6154766040830184614357565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154bc8161423b565b92915050565b6000602082840312156154d8576154d76140e1565b5b60006154e6848285016154ad565b91505092915050565b6000819050919050565b600061551461550f61550a846154ef565b6142dd565b6140eb565b9050919050565b615524816154f9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61555f81614229565b82525050565b60006155718383615556565b60208301905092915050565b6000602082019050919050565b60006155958261552a565b61559f8185615535565b93506155aa83615546565b8060005b838110156155db5781516155c28882615565565b97506155cd8361557d565b9250506001810190506155ae565b5085935050505092915050565b600060a0820190506155fd6000830188614357565b61560a602083018761551b565b818103604083015261561c818661558a565b905061562b60608301856143d4565b6156386080830184614357565b9695505050505050565b600060c08201905061565760008301896143d4565b6156646020830188614357565b615671604083018761551b565b61567e606083018661551b565b61568b60808301856143d4565b61569860a0830184614357565b979650505050505050565b6000815190506156b2816140f5565b92915050565b6000806000606084860312156156d1576156d06140e1565b5b60006156df868287016156a3565b93505060206156f0868287016156a3565b9250506040615701868287016156a3565b915050925092509256fea264697066735822122088c5c8d04c5df770be06a9bbe02141879cbad4ede10ec9290882e107c997353464736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103905760003560e01c806392136913116101dc578063c79c04fd11610102578063e2f45605116100a0578063f11a24d31161006f578063f11a24d314610d71578063f2fde38b14610d9c578063f637434214610dc5578063f8b45b0514610df057610397565b8063e2f4560514610cb3578063e596219514610cde578063e884f26014610d1b578063ef8700e514610d4657610397565b8063d4698016116100dc578063d469801614610be3578063d85ba06314610c0e578063dd62ed3e14610c39578063e1bc339414610c7657610397565b8063c79c04fd14610b52578063c876d0b914610b7b578063d257b34f14610ba657610397565b8063b20414111161017a578063c024666811610149578063c024666814610aaa578063c04a541414610ad3578063c17b5b8c14610afe578063c3f70b5214610b2757610397565b8063b2041411146109ee578063b62496f514610a19578063bbc0c74214610a56578063bff7816914610a8157610397565b806395d89b41116101b657806395d89b41146109205780639a7a23d61461094b578063a457c2d714610974578063a9059cbb146109b157610397565b806392136913146108a3578063924de9b7146108ce57806392aa3773146108f757610397565b806349bd5a5e116102c1578063751039fc1161025f5780638095d5641161022e5780638095d5641461080f5780638a13a44b146108385780638a8c523c146108615780638da5cb5b1461087857610397565b8063751039fc146107655780637571336a1461079057806375f0a874146107b95780637bce5a04146107e457610397565b80636a486a8e1161029b5780636a486a8e146106bb5780636ddd1713146106e657806370a0823114610711578063715018a61461074e57610397565b806349bd5a5e146106285780634a62bb65146106535780634fbee1931461067e57610397565b80631c499ab01161032e57806327c8f8351161030857806327c8f8351461056a578063313ce56714610595578063377ad127146105c057806339509351146105eb57610397565b80631c499ab0146104d95780631f3fed8f1461050257806323b872dd1461052d57610397565b80631694505e1161036a5780631694505e1461042d57806318160ddd1461045857806318a94cf1146104835780631a8145bb146104ae57610397565b80630517d13d1461039c57806306fdde03146103c5578063095ea7b3146103f057610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103c360048036038101906103be9190614121565b610e1b565b005b3480156103d157600080fd5b506103da610f2a565b6040516103e791906141e7565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190614267565b610fbc565b60405161042491906142c2565b60405180910390f35b34801561043957600080fd5b50610442610fda565b60405161044f919061433c565b60405180910390f35b34801561046457600080fd5b5061046d610ffe565b60405161047a9190614366565b60405180910390f35b34801561048f57600080fd5b50610498611008565b6040516104a59190614366565b60405180910390f35b3480156104ba57600080fd5b506104c361100e565b6040516104d09190614366565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190614121565b611014565b005b34801561050e57600080fd5b50610517611123565b6040516105249190614366565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190614381565b611129565b60405161056191906142c2565b60405180910390f35b34801561057657600080fd5b5061057f611221565b60405161058c91906143e3565b60405180910390f35b3480156105a157600080fd5b506105aa611227565b6040516105b7919061441a565b60405180910390f35b3480156105cc57600080fd5b506105d5611230565b6040516105e291906143e3565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614267565b611256565b60405161061f91906142c2565b60405180910390f35b34801561063457600080fd5b5061063d611302565b60405161064a91906143e3565b60405180910390f35b34801561065f57600080fd5b50610668611326565b60405161067591906142c2565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a09190614435565b611339565b6040516106b291906142c2565b60405180910390f35b3480156106c757600080fd5b506106d061138f565b6040516106dd9190614366565b60405180910390f35b3480156106f257600080fd5b506106fb611395565b60405161070891906142c2565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190614435565b6113a8565b6040516107459190614366565b60405180910390f35b34801561075a57600080fd5b506107636113f0565b005b34801561077157600080fd5b5061077a611478565b60405161078791906142c2565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b2919061448e565b611518565b005b3480156107c557600080fd5b506107ce6115ef565b6040516107db91906143e3565b60405180910390f35b3480156107f057600080fd5b506107f9611615565b6040516108069190614366565b60405180910390f35b34801561081b57600080fd5b50610836600480360381019061083191906144ce565b61161b565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614586565b6116e4565b005b34801561086d57600080fd5b506108766118f3565b005b34801561088457600080fd5b5061088d6119fe565b60405161089a91906143e3565b60405180910390f35b3480156108af57600080fd5b506108b8611a28565b6040516108c59190614366565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f091906145e6565b611a2e565b005b34801561090357600080fd5b5061091e60048036038101906109199190614435565b611ac7565b005b34801561092c57600080fd5b50610935611c03565b60405161094291906141e7565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d919061448e565b611c95565b005b34801561098057600080fd5b5061099b60048036038101906109969190614267565b611dae565b6040516109a891906142c2565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190614267565b611e99565b6040516109e591906142c2565b60405180910390f35b3480156109fa57600080fd5b50610a03611eb7565b604051610a109190614366565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614435565b611ebd565b604051610a4d91906142c2565b60405180910390f35b348015610a6257600080fd5b50610a6b611edd565b604051610a7891906142c2565b60405180910390f35b348015610a8d57600080fd5b50610aa86004803603810190610aa39190614435565b611ef0565b005b348015610ab657600080fd5b50610ad16004803603810190610acc919061448e565b61202c565b005b348015610adf57600080fd5b50610ae8612151565b604051610af591906143e3565b60405180910390f35b348015610b0a57600080fd5b50610b256004803603810190610b2091906144ce565b612177565b005b348015610b3357600080fd5b50610b3c612240565b604051610b499190614366565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b749190614435565b612246565b005b348015610b8757600080fd5b50610b90612382565b604051610b9d91906142c2565b60405180910390f35b348015610bb257600080fd5b50610bcd6004803603810190610bc89190614121565b612395565b604051610bda91906142c2565b60405180910390f35b348015610bef57600080fd5b50610bf86124ea565b604051610c0591906143e3565b60405180910390f35b348015610c1a57600080fd5b50610c23612510565b604051610c309190614366565b60405180910390f35b348015610c4557600080fd5b50610c606004803603810190610c5b9190614613565b612516565b604051610c6d9190614366565b60405180910390f35b348015610c8257600080fd5b50610c9d6004803603810190610c989190614435565b61259d565b604051610caa91906142c2565b60405180910390f35b348015610cbf57600080fd5b50610cc86125bd565b604051610cd59190614366565b60405180910390f35b348015610cea57600080fd5b50610d056004803603810190610d009190614435565b6125c3565b604051610d1291906142c2565b60405180910390f35b348015610d2757600080fd5b50610d306125e3565b604051610d3d91906142c2565b60405180910390f35b348015610d5257600080fd5b50610d5b612683565b604051610d689190614366565b60405180910390f35b348015610d7d57600080fd5b50610d86612689565b604051610d939190614366565b60405180910390f35b348015610da857600080fd5b50610dc36004803603810190610dbe9190614435565b61268f565b005b348015610dd157600080fd5b50610dda612787565b604051610de79190614366565b60405180910390f35b348015610dfc57600080fd5b50610e0561278d565b604051610e129190614366565b60405180910390f35b610e23612793565b73ffffffffffffffffffffffffffffffffffffffff16610e416119fe565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e9061469f565b60405180910390fd5b670de0b6b3a76400006103e86001610ead610ffe565b610eb791906146ee565b610ec19190614777565b610ecb9190614777565b811015610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f049061481a565b60405180910390fd5b670de0b6b3a764000081610f2191906146ee565b600a8190555050565b606060038054610f3990614869565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6590614869565b8015610fb25780601f10610f8757610100808354040283529160200191610fb2565b820191906000526020600020905b815481529060010190602001808311610f9557829003601f168201915b5050505050905090565b6000610fd0610fc9612793565b848461279b565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b601a5481565b61101c612793565b73ffffffffffffffffffffffffffffffffffffffff1661103a6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110879061469f565b60405180910390fd5b670de0b6b3a76400006103e860056110a6610ffe565b6110b091906146ee565b6110ba9190614777565b6110c49190614777565b811015611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd9061490d565b60405180910390fd5b670de0b6b3a76400008161111a91906146ee565b600c8190555050565b601c5481565b6000611136848484612966565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611181612793565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061499f565b60405180910390fd5b6112158561120d612793565b85840361279b565b60019150509392505050565b61dead81565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006112f8611263612793565b848460016000611271612793565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f391906149bf565b61279b565b6001905092915050565b7f000000000000000000000000a0b1b4f76368ac3d3a47cb3f807879a87c1362b281565b600d60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f8612793565b73ffffffffffffffffffffffffffffffffffffffff166114166119fe565b73ffffffffffffffffffffffffffffffffffffffff161461146c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114639061469f565b60405180910390fd5b611476600061368d565b565b6000611482612793565b73ffffffffffffffffffffffffffffffffffffffff166114a06119fe565b73ffffffffffffffffffffffffffffffffffffffff16146114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed9061469f565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611520612793565b73ffffffffffffffffffffffffffffffffffffffff1661153e6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b9061469f565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611623612793565b73ffffffffffffffffffffffffffffffffffffffff166116416119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e9061469f565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546116bf91906149bf565b6116c991906149bf565b601281905550600560125411156116df57600080fd5b505050565b6116ec612793565b73ffffffffffffffffffffffffffffffffffffffff1661170a6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117579061469f565b60405180910390fd5b60005b838390508110156118ed57600084848381811061178357611782614a15565b5b90506020020160208101906117989190614435565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156118245750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561187c57507f000000000000000000000000a0b1b4f76368ac3d3a47cb3f807879a87c1362b273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156118d95782601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806118e590614a44565b915050611763565b50505050565b6118fb612793565b73ffffffffffffffffffffffffffffffffffffffff166119196119fe565b73ffffffffffffffffffffffffffffffffffffffff161461196f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119669061469f565b60405180910390fd5b600d60019054906101000a900460ff16156119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614ad9565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550436010819055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611a36612793565b73ffffffffffffffffffffffffffffffffffffffff16611a546119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa19061469f565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b611acf612793565b73ffffffffffffffffffffffffffffffffffffffff16611aed6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061469f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611c1290614869565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3e90614869565b8015611c8b5780601f10611c6057610100808354040283529160200191611c8b565b820191906000526020600020905b815481529060010190602001808311611c6e57829003601f168201915b5050505050905090565b611c9d612793565b73ffffffffffffffffffffffffffffffffffffffff16611cbb6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d089061469f565b60405180910390fd5b7f000000000000000000000000a0b1b4f76368ac3d3a47cb3f807879a87c1362b273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614b6b565b60405180910390fd5b611daa8282613753565b5050565b60008060016000611dbd612793565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7190614bfd565b60405180910390fd5b611e8e611e85612793565b8585840361279b565b600191505092915050565b6000611ead611ea6612793565b8484612966565b6001905092915050565b60145481565b601f6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611ef8612793565b73ffffffffffffffffffffffffffffffffffffffff16611f166119fe565b73ffffffffffffffffffffffffffffffffffffffff1614611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f639061469f565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612034612793565b73ffffffffffffffffffffffffffffffffffffffff166120526119fe565b73ffffffffffffffffffffffffffffffffffffffff16146120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f9061469f565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161214591906142c2565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61217f612793565b73ffffffffffffffffffffffffffffffffffffffff1661219d6119fe565b73ffffffffffffffffffffffffffffffffffffffff16146121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea9061469f565b60405180910390fd5b82601781905550816018819055508060198190555060195460185460175461221b91906149bf565b61222591906149bf565b6016819055506005601654111561223b57600080fd5b505050565b600a5481565b61224e612793565b73ffffffffffffffffffffffffffffffffffffffff1661226c6119fe565b73ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b99061469f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900460ff1681565b600061239f612793565b73ffffffffffffffffffffffffffffffffffffffff166123bd6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a9061469f565b60405180910390fd5b620186a06001612421610ffe565b61242b91906146ee565b6124359190614777565b821015612477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246e90614c8f565b60405180910390fd5b6103e86005612484610ffe565b61248e91906146ee565b6124989190614777565b8211156124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d190614d21565b60405180910390fd5b81600b8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60116020528060005260406000206000915054906101000a900460ff1681565b60006125ed612793565b73ffffffffffffffffffffffffffffffffffffffff1661260b6119fe565b73ffffffffffffffffffffffffffffffffffffffff1614612661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126589061469f565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b601b5481565b60135481565b612697612793565b73ffffffffffffffffffffffffffffffffffffffff166126b56119fe565b73ffffffffffffffffffffffffffffffffffffffff161461270b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127029061469f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614db3565b60405180910390fd5b6127848161368d565b50565b60175481565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561280b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280290614e45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287290614ed7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129599190614366565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90614f69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d90614ffb565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90615067565b60405180910390fd5b6000811415612aed57612ae8838360006137f4565b613688565b600d60009054906101000a900460ff16156131b057612b0a6119fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b785750612b486119fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bb15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612beb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c045750600660149054906101000a900460ff16155b156131af57600d60019054906101000a900460ff16612cfe57601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cbe5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf4906150d3565b60405180910390fd5b5b600f60009054906101000a900460ff1615612ec657612d1b6119fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612da257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfa57507f000000000000000000000000a0b1b4f76368ac3d3a47cb3f807879a87c1362b273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ec55743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e779061518b565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f695750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301057600a54811115612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa9061521d565b60405180910390fd5b600c54612fbf836113a8565b82612fca91906149bf565b111561300b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300290615289565b60405180910390fd5b6131ae565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130b35750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561310257600a548111156130fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f49061531b565b60405180910390fd5b6131ad565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131ac57600c5461315f836113a8565b8261316a91906149bf565b11156131ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a290615289565b60405180910390fd5b5b5b5b5b5b60006131bb306113a8565b90506000600b5482101590508080156131e05750600d60029054906101000a900460ff165b80156131f95750600660149054906101000a900460ff16155b801561324f5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132a55750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132fb5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561333f576001600660146101000a81548160ff021916908315150217905550613323613a75565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133f55750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133ff57600090505b6000811561367857601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561346257506000601654115b1561352f5761348f606461348160165488613d5c90919063ffffffff16565b613d7290919063ffffffff16565b9050601654601754826134a291906146ee565b6134ac9190614777565b601a60008282546134bd91906149bf565b92505081905550601654601854826134d591906146ee565b6134df9190614777565b601b60008282546134f091906149bf565b925050819055506016546019548261350891906146ee565b6135129190614777565b601c600082825461352391906149bf565b92505081905550613654565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358a57506000601254115b15613653576135b760646135a960125488613d5c90919063ffffffff16565b613d7290919063ffffffff16565b9050601254601354826135ca91906146ee565b6135d49190614777565b601a60008282546135e591906149bf565b92505081905550601254601454826135fd91906146ee565b6136079190614777565b601b600082825461361891906149bf565b925050819055506012546015548261363091906146ee565b61363a9190614777565b601c600082825461364b91906149bf565b925050819055505b5b6000811115613669576136688730836137f4565b5b8085613675919061533b565b94505b6136838787876137f4565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385b90614f69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138cb90614ffb565b60405180910390fd5b6138df838383613d88565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395c906153e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139f891906149bf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a5c9190614366565b60405180910390a3613a6f848484613d8d565b50505050565b6000613a80306113a8565b90506000601c54601b54601a54613a9791906149bf565b613aa191906149bf565b9050600080831480613ab35750600082145b15613ac057505050613d5a565b6014600b54613acf91906146ee565b831115613ae8576014600b54613ae591906146ee565b92505b6000600283601a5486613afb91906146ee565b613b059190614777565b613b0f9190614777565b90506000613b268286613d9290919063ffffffff16565b90506000479050613b3682613da8565b6000613b4b8247613d9290919063ffffffff16565b90506000613b7687613b68601b5485613d5c90919063ffffffff16565b613d7290919063ffffffff16565b90506000613ba188613b93601c5486613d5c90919063ffffffff16565b613d7290919063ffffffff16565b90506000818385613bb2919061533b565b613bbc919061533b565b90506000601a819055506000601b819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613c1c90615432565b60006040518083038185875af1925050503d8060008114613c59576040519150601f19603f3d011682016040523d82523d6000602084013e613c5e565b606091505b505080985050600087118015613c745750600081115b15613cc157613c838782613fe5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601a54604051613cb893929190615447565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613d0790615432565b60006040518083038185875af1925050503d8060008114613d44576040519150601f19603f3d011682016040523d82523d6000602084013e613d49565b606091505b505080985050505050505050505050505b565b60008183613d6a91906146ee565b905092915050565b60008183613d809190614777565b905092915050565b505050565b505050565b60008183613da0919061533b565b905092915050565b6000600267ffffffffffffffff811115613dc557613dc461547e565b5b604051908082528060200260200182016040528015613df35781602001602082028036833780820191505090505b5090503081600081518110613e0b57613e0a614a15565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed491906154c2565b81600181518110613ee857613ee7614a15565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f4d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461279b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613faf9594939291906155e8565b600060405180830381600087803b158015613fc957600080fd5b505af1158015613fdd573d6000803e3d6000fd5b505050505050565b614010307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461279b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161409796959493929190615642565b60606040518083038185885af11580156140b5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140da91906156b8565b5050505050565b600080fd5b600080fd5b6000819050919050565b6140fe816140eb565b811461410957600080fd5b50565b60008135905061411b816140f5565b92915050565b600060208284031215614137576141366140e1565b5b60006141458482850161410c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561418857808201518184015260208101905061416d565b83811115614197576000848401525b50505050565b6000601f19601f8301169050919050565b60006141b98261414e565b6141c38185614159565b93506141d381856020860161416a565b6141dc8161419d565b840191505092915050565b6000602082019050818103600083015261420181846141ae565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061423482614209565b9050919050565b61424481614229565b811461424f57600080fd5b50565b6000813590506142618161423b565b92915050565b6000806040838503121561427e5761427d6140e1565b5b600061428c85828601614252565b925050602061429d8582860161410c565b9150509250929050565b60008115159050919050565b6142bc816142a7565b82525050565b60006020820190506142d760008301846142b3565b92915050565b6000819050919050565b60006143026142fd6142f884614209565b6142dd565b614209565b9050919050565b6000614314826142e7565b9050919050565b600061432682614309565b9050919050565b6143368161431b565b82525050565b6000602082019050614351600083018461432d565b92915050565b614360816140eb565b82525050565b600060208201905061437b6000830184614357565b92915050565b60008060006060848603121561439a576143996140e1565b5b60006143a886828701614252565b93505060206143b986828701614252565b92505060406143ca8682870161410c565b9150509250925092565b6143dd81614229565b82525050565b60006020820190506143f860008301846143d4565b92915050565b600060ff82169050919050565b614414816143fe565b82525050565b600060208201905061442f600083018461440b565b92915050565b60006020828403121561444b5761444a6140e1565b5b600061445984828501614252565b91505092915050565b61446b816142a7565b811461447657600080fd5b50565b60008135905061448881614462565b92915050565b600080604083850312156144a5576144a46140e1565b5b60006144b385828601614252565b92505060206144c485828601614479565b9150509250929050565b6000806000606084860312156144e7576144e66140e1565b5b60006144f58682870161410c565b93505060206145068682870161410c565b92505060406145178682870161410c565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261454657614545614521565b5b8235905067ffffffffffffffff81111561456357614562614526565b5b60208301915083602082028301111561457f5761457e61452b565b5b9250929050565b60008060006040848603121561459f5761459e6140e1565b5b600084013567ffffffffffffffff8111156145bd576145bc6140e6565b5b6145c986828701614530565b935093505060206145dc86828701614479565b9150509250925092565b6000602082840312156145fc576145fb6140e1565b5b600061460a84828501614479565b91505092915050565b6000806040838503121561462a576146296140e1565b5b600061463885828601614252565b925050602061464985828601614252565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614689602083614159565b915061469482614653565b602082019050919050565b600060208201905081810360008301526146b88161467c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146f9826140eb565b9150614704836140eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561473d5761473c6146bf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614782826140eb565b915061478d836140eb565b92508261479d5761479c614748565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614804602983614159565b915061480f826147a8565b604082019050919050565b60006020820190508181036000830152614833816147f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061488157607f821691505b602082108114156148955761489461483a565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006148f7602483614159565b91506149028261489b565b604082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614989602883614159565b91506149948261492d565b604082019050919050565b600060208201905081810360008301526149b88161497c565b9050919050565b60006149ca826140eb565b91506149d5836140eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a0a57614a096146bf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a4f826140eb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a8257614a816146bf565b5b600182019050919050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ac3600e83614159565b9150614ace82614a8d565b602082019050919050565b60006020820190508181036000830152614af281614ab6565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b55603983614159565b9150614b6082614af9565b604082019050919050565b60006020820190508181036000830152614b8481614b48565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614be7602583614159565b9150614bf282614b8b565b604082019050919050565b60006020820190508181036000830152614c1681614bda565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c79603583614159565b9150614c8482614c1d565b604082019050919050565b60006020820190508181036000830152614ca881614c6c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d0b603483614159565b9150614d1682614caf565b604082019050919050565b60006020820190508181036000830152614d3a81614cfe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d9d602683614159565b9150614da882614d41565b604082019050919050565b60006020820190508181036000830152614dcc81614d90565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e2f602483614159565b9150614e3a82614dd3565b604082019050919050565b60006020820190508181036000830152614e5e81614e22565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec1602283614159565b9150614ecc82614e65565b604082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f53602583614159565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602383614159565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b6000615051600e83614159565b915061505c8261501b565b602082019050919050565b6000602082019050818103600083015261508081615044565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150bd601683614159565b91506150c882615087565b602082019050919050565b600060208201905081810360008301526150ec816150b0565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615175604983614159565b9150615180826150f3565b606082019050919050565b600060208201905081810360008301526151a481615168565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615207602f83614159565b9150615212826151ab565b604082019050919050565b60006020820190508181036000830152615236816151fa565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615273601383614159565b915061527e8261523d565b602082019050919050565b600060208201905081810360008301526152a281615266565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615305603083614159565b9150615310826152a9565b604082019050919050565b60006020820190508181036000830152615334816152f8565b9050919050565b6000615346826140eb565b9150615351836140eb565b925082821015615364576153636146bf565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006153cb602683614159565b91506153d68261536f565b604082019050919050565b600060208201905081810360008301526153fa816153be565b9050919050565b600081905092915050565b50565b600061541c600083615401565b91506154278261540c565b600082019050919050565b600061543d8261540f565b9150819050919050565b600060608201905061545c6000830186614357565b6154696020830185614357565b6154766040830184614357565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154bc8161423b565b92915050565b6000602082840312156154d8576154d76140e1565b5b60006154e6848285016154ad565b91505092915050565b6000819050919050565b600061551461550f61550a846154ef565b6142dd565b6140eb565b9050919050565b615524816154f9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61555f81614229565b82525050565b60006155718383615556565b60208301905092915050565b6000602082019050919050565b60006155958261552a565b61559f8185615535565b93506155aa83615546565b8060005b838110156155db5781516155c28882615565565b97506155cd8361557d565b9250506001810190506155ae565b5085935050505092915050565b600060a0820190506155fd6000830188614357565b61560a602083018761551b565b818103604083015261561c818661558a565b905061562b60608301856143d4565b6156386080830184614357565b9695505050505050565b600060c08201905061565760008301896143d4565b6156646020830188614357565b615671604083018761551b565b61567e606083018661551b565b61568b60808301856143d4565b61569860a0830184614357565b979650505050505050565b6000815190506156b2816140f5565b92915050565b6000806000606084860312156156d1576156d06140e1565b5b60006156df868287016156a3565b93505060206156f0868287016156a3565b9250506040615701868287016156a3565b915050925092509256fea264697066735822122088c5c8d04c5df770be06a9bbe02141879cbad4ede10ec9290882e107c997353464736f6c634300080a0033

Deployed Bytecode Sourcemap

15245:17042:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20992:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2942:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3856:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15319:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3263:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16418:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16502;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21265:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16584:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4033:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15422:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3162:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15482:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4533:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15377:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15816:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24021:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16345:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15896:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3379:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1064:103;;;;;;;;;;;;;:::i;:::-;;20100:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21523:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15668:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16306;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21888:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30106:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19847:201;;;;;;;;;;;;;:::i;:::-;;841:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16458:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21780:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23805:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3050:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22913:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4756:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3514:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16267:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16755:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15856:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23618:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22723:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15592:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22301:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15707:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23421:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16068:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20487:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15631:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16196:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3697:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16689:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15743:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16148:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20282:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16542:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16230:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1175:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16380:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15783:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20992:265;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21131:4:::1;21123;21118:1;21102:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21101:26;;;;:::i;:::-;21100:35;;;;:::i;:::-;21090:6;:45;;21068:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;21242:6;21232;:17;;;;:::i;:::-;21215:14;:34;;;;20992:265:::0;:::o;2942:100::-;2996:13;3029:5;3022:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2942:100;:::o;3856:169::-;3939:4;3956:39;3965:12;:10;:12::i;:::-;3979:7;3988:6;3956:8;:39::i;:::-;4013:4;4006:11;;3856:169;;;;:::o;15319:51::-;;;:::o;3263:108::-;3324:7;3351:12;;3344:19;;3263:108;:::o;16418:33::-;;;;:::o;16502:::-;;;;:::o;21265:250::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21399:4:::1;21391;21386:1;21370:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21369:26;;;;:::i;:::-;21368:35;;;;:::i;:::-;21358:6;:45;;21336:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21500:6;21490;:17;;;;:::i;:::-;21478:9;:29;;;;21265:250:::0;:::o;16584:33::-;;;;:::o;4033:492::-;4173:4;4190:36;4200:6;4208:9;4219:6;4190:9;:36::i;:::-;4239:24;4266:11;:19;4278:6;4266:19;;;;;;;;;;;;;;;:33;4286:12;:10;:12::i;:::-;4266:33;;;;;;;;;;;;;;;;4239:60;;4338:6;4318:16;:26;;4310:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4425:57;4434:6;4442:12;:10;:12::i;:::-;4475:6;4456:16;:25;4425:8;:57::i;:::-;4513:4;4506:11;;;4033:492;;;;;:::o;15422:53::-;15468:6;15422:53;:::o;3162:93::-;3220:5;3245:2;3238:9;;3162:93;:::o;15482:71::-;;;;;;;;;;;;;:::o;4533:215::-;4621:4;4638:80;4647:12;:10;:12::i;:::-;4661:7;4707:10;4670:11;:25;4682:12;:10;:12::i;:::-;4670:25;;;;;;;;;;;;;;;:34;4696:7;4670:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4638:8;:80::i;:::-;4736:4;4729:11;;4533:215;;;;:::o;15377:38::-;;;:::o;15816:33::-;;;;;;;;;;;;;:::o;24021:126::-;24087:4;24111:19;:28;24131:7;24111:28;;;;;;;;;;;;;;;;;;;;;;;;;24104:35;;24021:126;;;:::o;16345:28::-;;;;:::o;15896:31::-;;;;;;;;;;;;;:::o;3379:127::-;3453:7;3480:9;:18;3490:7;3480:18;;;;;;;;;;;;;;;;3473:25;;3379:127;;;:::o;1064:103::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1129:30:::1;1156:1;1129:18;:30::i;:::-;1064:103::o:0;20100:121::-;20152:4;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20186:5:::1;20169:14;;:22;;;;;;;;;;;;;;;;;;20209:4;20202:11;;20100:121:::0;:::o;21523:161::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21672:4:::1;21636:25;:33;21662:6;21636:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21523:161:::0;;:::o;15668:30::-;;;;;;;;;;;;;:::o;16306:::-;;;;:::o;21888:405::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22065:13:::1;22047:15;:31;;;;22109:15;22089:17;:35;;;;22154:13;22135:15;:32;;;;22232:15;;22212:17;;22194:15;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;22178:12;:69;;;;22283:1;22267:12;;:17;;22259:26;;;::::0;::::1;;21888:405:::0;;;:::o;30106:439::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30219:9:::1;30215:323;30235:15;;:22;;30233:1;:24;30215:323;;;30277:20;30300:15;;30316:1;30300:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30277:41;;30360:4;30336:29;;:12;:29;;;;:77;;;;;30402:11;;;;;;;;;;;30386:27;;:12;:27;;;;30336:77;:136;;;;;30458:13;30434:38;;:12;:38;;;;30336:136;30333:193;;;30515:11;30491:7;:21;30499:12;30491:21;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30333:193;30262:276;30258:3;;;;;:::i;:::-;;;;30215:323;;;;30106:439:::0;;;:::o;19847:201::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19911:13:::1;;;;;;;;;;;19910:14;19902:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;19970:4;19954:13;;:20;;;;;;;;;;;;;;;;;;19999:12;19985:11;:26;;;;20036:4;20022:11;;:18;;;;;;;;;;;;;;;;;;19847:201::o:0;841:87::-;887:7;914:6;;;;;;;;;;;907:13;;841:87;:::o;16458:31::-;;;;:::o;21780:100::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21865:7:::1;21851:11;;:21;;;;;;;;;;;;;;;;;;21780:100:::0;:::o;23805:208::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23942:15:::1;;;;;;;;;;;23899:59;;23922:18;23899:59;;;;;;;;;;;;23987:18;23969:15;;:36;;;;;;;;;;;;;;;;;;23805:208:::0;:::o;3050:104::-;3106:13;3139:7;3132:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3050:104;:::o;22913:304::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23057:13:::1;23049:21;;:4;:21;;;;23027:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23168:41;23197:4;23203:5;23168:28;:41::i;:::-;22913:304:::0;;:::o;4756:413::-;4849:4;4866:24;4893:11;:25;4905:12;:10;:12::i;:::-;4893:25;;;;;;;;;;;;;;;:34;4919:7;4893:34;;;;;;;;;;;;;;;;4866:61;;4966:15;4946:16;:35;;4938:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5059:67;5068:12;:10;:12::i;:::-;5082:7;5110:15;5091:16;:34;5059:8;:67::i;:::-;5157:4;5150:11;;;4756:413;;;;:::o;3514:175::-;3600:4;3617:42;3627:12;:10;:12::i;:::-;3641:9;3652:6;3617:9;:42::i;:::-;3677:4;3670:11;;3514:175;;;;:::o;16267:32::-;;;;:::o;16755:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15856:33::-;;;;;;;;;;;;;:::o;23618:179::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23736:15:::1;;;;;;;;;;;23703:49;;23726:9;23703:49;;;;;;;;;;;;23780:9;23762:15;;:27;;;;;;;;;;;;;;;;;;23618:179:::0;:::o;22723:182::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22839:8:::1;22808:19;:28;22828:7;22808:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22879:7;22863:34;;;22888:8;22863:34;;;;;;:::i;:::-;;;;;;;;22723:182:::0;;:::o;15592:32::-;;;;;;;;;;;;;:::o;22301:414::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22480:13:::1;22461:16;:32;;;;22525:15;22504:18;:36;;;;22571:13;22551:16;:33;;;;22651:16;;22630:18;;22611:16;;:37;;;;:::i;:::-;:56;;;;:::i;:::-;22595:13;:72;;;;22704:1;22687:13;;:18;;22679:27;;;::::0;::::1;;22301:414:::0;;;:::o;15707:29::-;;;;:::o;23421:189::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23544:17:::1;;;;;;;;;;;23508:54;;23533:9;23508:54;;;;;;;;;;;;23593:9;23573:17;;:29;;;;;;;;;;;;;;;;;;23421:189:::0;:::o;16068:39::-;;;;;;;;;;;;;:::o;20487:497::-;20595:4;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20674:6:::1;20669:1;20653:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20652:28;;;;:::i;:::-;20639:9;:41;;20617:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20829:4;20824:1;20808:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20807:26;;;;:::i;:::-;20794:9;:39;;20772:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20945:9;20924:18;:30;;;;20972:4;20965:11;;20487:497:::0;;;:::o;15631:30::-;;;;;;;;;;;;;:::o;16196:27::-;;;;:::o;3697:151::-;3786:7;3813:11;:18;3825:5;3813:18;;;;;;;;;;;;;;;:27;3832:7;3813:27;;;;;;;;;;;;;;;;3806:34;;3697:151;;;;:::o;16689:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15743:33::-;;;;:::o;16148:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;20282:135::-;20342:4;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20382:5:::1;20359:20;;:28;;;;;;;;;;;;;;;;;;20405:4;20398:11;;20282:135:::0;:::o;16542:35::-;;;;:::o;16230:30::-;;;;:::o;1175:201::-;987:12;:10;:12::i;:::-;976:23;;:7;:5;:7::i;:::-;:23;;;968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1284:1:::1;1264:22;;:8;:22;;;;1256:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1340:28;1359:8;1340:18;:28::i;:::-;1175:201:::0;:::o;16380:31::-;;;;:::o;15783:24::-;;;;:::o;387:98::-;440:7;467:10;460:17;;387:98;:::o;6924:380::-;7077:1;7060:19;;:5;:19;;;;7052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7158:1;7139:21;;:7;:21;;;;7131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7242:6;7212:11;:18;7224:5;7212:18;;;;;;;;;;;;;;;:27;7231:7;7212:27;;;;;;;;;;;;;;;:36;;;;7280:7;7264:32;;7273:5;7264:32;;;7289:6;7264:32;;;;;;:::i;:::-;;;;;;;;6924:380;;;:::o;24155:4817::-;24303:1;24287:18;;:4;:18;;;;24279:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24380:1;24366:16;;:2;:16;;;;24358:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24442:7;:13;24450:4;24442:13;;;;;;;;;;;;;;;;;;;;;;;;;24441:14;24433:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;24501:1;24491:6;:11;24487:93;;;24519:28;24535:4;24541:2;24545:1;24519:15;:28::i;:::-;24562:7;;24487:93;24596:14;;;;;;;;;;;24592:2445;;;24657:7;:5;:7::i;:::-;24649:15;;:4;:15;;;;:49;;;;;24691:7;:5;:7::i;:::-;24685:13;;:2;:13;;;;24649:49;:86;;;;;24733:1;24719:16;;:2;:16;;;;24649:86;:128;;;;;24770:6;24756:21;;:2;:21;;;;24649:128;:158;;;;;24799:8;;;;;;;;;;;24798:9;24649:158;24627:2399;;;24847:13;;;;;;;;;;;24842:223;;24919:19;:25;24939:4;24919:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24948:19;:23;24968:2;24948:23;;;;;;;;;;;;;;;;;;;;;;;;;24919:52;24885:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24842:223;25221:20;;;;;;;;;;;25217:641;;;25302:7;:5;:7::i;:::-;25296:13;;:2;:13;;;;:72;;;;;25352:15;25338:30;;:2;:30;;;;25296:72;:129;;;;;25411:13;25397:28;;:2;:28;;;;25296:129;25266:573;;;25589:12;25514:28;:39;25543:9;25514:39;;;;;;;;;;;;;;;;:87;25476:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;25803:12;25761:28;:39;25790:9;25761:39;;;;;;;;;;;;;;;:54;;;;25266:573;25217:641;25932:25;:31;25958:4;25932:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;25989:25;:29;26015:2;25989:29;;;;;;;;;;;;;;;;;;;;;;;;;25988:30;25932:86;25906:1105;;;26105:14;;26095:6;:24;;26061:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;26301:9;;26284:13;26294:2;26284:9;:13::i;:::-;26275:6;:22;;;;:::i;:::-;:35;;26241:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25906:1105;;;26479:25;:29;26505:2;26479:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;26534:25;:31;26560:4;26534:31;;;;;;;;;;;;;;;;;;;;;;;;;26533:32;26479:86;26453:558;;;26652:14;;26642:6;:24;;26608:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;26453:558;;;26797:25;:29;26823:2;26797:29;;;;;;;;;;;;;;;;;;;;;;;;;26792:219;;26911:9;;26894:13;26904:2;26894:9;:13::i;:::-;26885:6;:22;;;;:::i;:::-;:35;;26851:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26792:219;26453:558;25906:1105;24627:2399;24592:2445;27049:28;27080:24;27098:4;27080:9;:24::i;:::-;27049:55;;27117:12;27156:18;;27132:20;:42;;27117:57;;27205:7;:35;;;;;27229:11;;;;;;;;;;;27205:35;:61;;;;;27258:8;;;;;;;;;;;27257:9;27205:61;:110;;;;;27284:25;:31;27310:4;27284:31;;;;;;;;;;;;;;;;;;;;;;;;;27283:32;27205:110;:153;;;;;27333:19;:25;27353:4;27333:25;;;;;;;;;;;;;;;;;;;;;;;;;27332:26;27205:153;:194;;;;;27376:19;:23;27396:2;27376:23;;;;;;;;;;;;;;;;;;;;;;;;;27375:24;27205:194;27187:326;;;27437:4;27426:8;;:15;;;;;;;;;;;;;;;;;;27458:10;:8;:10::i;:::-;27496:5;27485:8;;:16;;;;;;;;;;;;;;;;;;27187:326;27525:12;27541:8;;;;;;;;;;;27540:9;27525:24;;27651:19;:25;27671:4;27651:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27680:19;:23;27700:2;27680:23;;;;;;;;;;;;;;;;;;;;;;;;;27651:52;27647:100;;;27730:5;27720:15;;27647:100;27759:12;27864:7;27860:1059;;;27916:25;:29;27942:2;27916:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27965:1;27949:13;;:17;27916:50;27912:823;;;27996:34;28026:3;27996:25;28007:13;;27996:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27989:41;;28099:13;;28079:16;;28072:4;:23;;;;:::i;:::-;28071:41;;;;:::i;:::-;28049:18;;:63;;;;;;;:::i;:::-;;;;;;;;28185:13;;28163:18;;28156:4;:25;;;;:::i;:::-;28155:43;;;;:::i;:::-;28131:20;;:67;;;;;;;:::i;:::-;;;;;;;;28267:13;;28247:16;;28240:4;:23;;;;:::i;:::-;28239:41;;;;:::i;:::-;28217:18;;:63;;;;;;;:::i;:::-;;;;;;;;27912:823;;;28363:25;:31;28389:4;28363:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28413:1;28398:12;;:16;28363:51;28359:376;;;28442:33;28471:3;28442:24;28453:12;;28442:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28435:40;;28543:12;;28524:15;;28517:4;:22;;;;:::i;:::-;28516:39;;;;:::i;:::-;28494:18;;:61;;;;;;;:::i;:::-;;;;;;;;28627:12;;28606:17;;28599:4;:24;;;;:::i;:::-;28598:41;;;;:::i;:::-;28574:20;;:65;;;;;;;:::i;:::-;;;;;;;;28707:12;;28688:15;;28681:4;:22;;;;:::i;:::-;28680:39;;;;:::i;:::-;28658:18;;:61;;;;;;;:::i;:::-;;;;;;;;28359:376;27912:823;28762:1;28755:4;:8;28751:126;;;28819:42;28835:4;28849;28856;28819:15;:42::i;:::-;28751:126;28903:4;28893:14;;;;;:::i;:::-;;;27860:1059;28931:33;28947:4;28953:2;28957:6;28931:15;:33::i;:::-;24268:4704;;;;24155:4817;;;;:::o;1384:191::-;1458:16;1477:6;;;;;;;;;;;1458:25;;1503:8;1494:6;;:17;;;;;;;;;;;;;;;;;;1558:8;1527:40;;1548:8;1527:40;;;;;;;;;;;;1447:128;1384:191;:::o;23225:188::-;23342:5;23308:25;:31;23334:4;23308:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23399:5;23365:40;;23393:4;23365:40;;;;;;;;;;;;23225:188;;:::o;5177:733::-;5335:1;5317:20;;:6;:20;;;;5309:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5419:1;5398:23;;:9;:23;;;;5390:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5474:47;5495:6;5503:9;5514:6;5474:20;:47::i;:::-;5534:21;5558:9;:17;5568:6;5558:17;;;;;;;;;;;;;;;;5534:41;;5611:6;5594:13;:23;;5586:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5732:6;5716:13;:22;5696:9;:17;5706:6;5696:17;;;;;;;;;;;;;;;:42;;;;5784:6;5760:9;:20;5770:9;5760:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5825:9;5808:35;;5817:6;5808:35;;;5836:6;5808:35;;;;;;:::i;:::-;;;;;;;;5856:46;5876:6;5884:9;5895:6;5856:19;:46::i;:::-;5298:612;5177:733;;;:::o;30553:1731::-;30593:23;30619:24;30637:4;30619:9;:24::i;:::-;30593:50;;30654:25;30752:18;;30716:20;;30682:18;;:54;;;;:::i;:::-;:88;;;;:::i;:::-;30654:116;;30781:12;30829:1;30810:15;:20;:46;;;;30855:1;30834:17;:22;30810:46;30806:85;;;30873:7;;;;;30806:85;30946:2;30925:18;;:23;;;;:::i;:::-;30907:15;:41;30903:115;;;31004:2;30983:18;;:23;;;;:::i;:::-;30965:41;;30903:115;31079:23;31166:1;31146:17;31124:18;;31106:15;:36;;;;:::i;:::-;31105:58;;;;:::i;:::-;:62;;;;:::i;:::-;31079:88;;31178:26;31207:36;31227:15;31207;:19;;:36;;;;:::i;:::-;31178:65;;31256:25;31284:21;31256:49;;31318:36;31335:18;31318:16;:36::i;:::-;31367:18;31388:44;31414:17;31388:21;:25;;:44;;;;:::i;:::-;31367:65;;31445:25;31473:59;31514:17;31473:36;31488:20;;31473:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;31445:87;;31543:23;31569:57;31608:17;31569:34;31584:18;;31569:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;31543:83;;31639:23;31698:15;31678:17;31665:10;:30;;;;:::i;:::-;:48;;;;:::i;:::-;31639:74;;31747:1;31726:18;:22;;;;31782:1;31759:20;:24;;;;31815:1;31794:18;:22;;;;31851:17;;;;;;;;;;;31843:31;;31882:17;31843:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31829:75;;;;;31939:1;31921:15;:19;:42;;;;;31962:1;31944:15;:19;31921:42;31917:278;;;31980:46;31993:15;32010;31980:12;:46::i;:::-;32046:137;32079:18;32116:15;32150:18;;32046:137;;;;;;;;:::i;:::-;;;;;;;;31917:278;32227:15;;;;;;;;;;;32219:29;;32256:15;32219:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32205:71;;;;;30582:1702;;;;;;;;;;30553:1731;:::o;8930:98::-;8988:7;9019:1;9015;:5;;;;:::i;:::-;9008:12;;8930:98;;;;:::o;9036:::-;9094:7;9125:1;9121;:5;;;;:::i;:::-;9114:12;;9036:98;;;;:::o;7312:125::-;;;;:::o;7445:124::-;;;;:::o;8824:98::-;8882:7;8913:1;8909;:5;;;;:::i;:::-;8902:12;;8824:98;;;;:::o;28980:589::-;29106:21;29144:1;29130:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29106:40;;29175:4;29157;29162:1;29157:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29201:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29191:4;29196:1;29191:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29236:62;29253:4;29268:15;29286:11;29236:8;:62::i;:::-;29337:15;:66;;;29418:11;29444:1;29488:4;29515;29535:15;29337:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29035:534;28980:589;:::o;29577:521::-;29725:62;29742:4;29757:15;29775:11;29725:8;:62::i;:::-;29830:15;:31;;;29869:9;29902:4;29922:11;29948:1;29991;30034:15;;;;;;;;;;;30064;29830:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29577:521;;:::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:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:329::-;6625:6;6674:2;6662:9;6653:7;6649:23;6645:32;6642:119;;;6680:79;;:::i;:::-;6642:119;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6566:329;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:117::-;8370:1;8367;8360:12;8384:117;8493:1;8490;8483:12;8507:117;8616:1;8613;8606:12;8647:568;8720:8;8730:6;8780:3;8773:4;8765:6;8761:17;8757:27;8747:122;;8788:79;;:::i;:::-;8747:122;8901:6;8888:20;8878:30;;8931:18;8923:6;8920:30;8917:117;;;8953:79;;:::i;:::-;8917:117;9067:4;9059:6;9055:17;9043:29;;9121:3;9113:4;9105:6;9101:17;9091:8;9087:32;9084:41;9081:128;;;9128:79;;:::i;:::-;9081:128;8647:568;;;;;:::o;9221:698::-;9313:6;9321;9329;9378:2;9366:9;9357:7;9353:23;9349:32;9346:119;;;9384:79;;:::i;:::-;9346:119;9532:1;9521:9;9517:17;9504:31;9562:18;9554:6;9551:30;9548:117;;;9584:79;;:::i;:::-;9548:117;9697:80;9769:7;9760:6;9749:9;9745:22;9697:80;:::i;:::-;9679:98;;;;9475:312;9826:2;9852:50;9894:7;9885:6;9874:9;9870:22;9852:50;:::i;:::-;9842:60;;9797:115;9221:698;;;;;:::o;9925:323::-;9981:6;10030:2;10018:9;10009:7;10005:23;10001:32;9998:119;;;10036:79;;:::i;:::-;9998:119;10156:1;10181:50;10223:7;10214:6;10203:9;10199:22;10181:50;:::i;:::-;10171:60;;10127:114;9925:323;;;;:::o;10254:474::-;10322:6;10330;10379:2;10367:9;10358:7;10354:23;10350:32;10347:119;;;10385:79;;:::i;:::-;10347:119;10505:1;10530:53;10575:7;10566:6;10555:9;10551:22;10530:53;:::i;:::-;10520:63;;10476:117;10632:2;10658:53;10703:7;10694:6;10683:9;10679:22;10658:53;:::i;:::-;10648:63;;10603:118;10254:474;;;;;:::o;10734:182::-;10874:34;10870:1;10862:6;10858:14;10851:58;10734:182;:::o;10922:366::-;11064:3;11085:67;11149:2;11144:3;11085:67;:::i;:::-;11078:74;;11161:93;11250:3;11161:93;:::i;:::-;11279:2;11274:3;11270:12;11263:19;;10922:366;;;:::o;11294:419::-;11460:4;11498:2;11487:9;11483:18;11475:26;;11547:9;11541:4;11537:20;11533:1;11522:9;11518:17;11511:47;11575:131;11701:4;11575:131;:::i;:::-;11567:139;;11294:419;;;:::o;11719:180::-;11767:77;11764:1;11757:88;11864:4;11861:1;11854:15;11888:4;11885:1;11878:15;11905:348;11945:7;11968:20;11986:1;11968:20;:::i;:::-;11963:25;;12002:20;12020:1;12002:20;:::i;:::-;11997:25;;12190:1;12122:66;12118:74;12115:1;12112:81;12107:1;12100:9;12093:17;12089:105;12086:131;;;12197:18;;:::i;:::-;12086:131;12245:1;12242;12238:9;12227:20;;11905:348;;;;:::o;12259:180::-;12307:77;12304:1;12297:88;12404:4;12401:1;12394:15;12428:4;12425:1;12418:15;12445:185;12485:1;12502:20;12520:1;12502:20;:::i;:::-;12497:25;;12536:20;12554:1;12536:20;:::i;:::-;12531:25;;12575:1;12565:35;;12580:18;;:::i;:::-;12565:35;12622:1;12619;12615:9;12610:14;;12445:185;;;;:::o;12636:228::-;12776:34;12772:1;12764:6;12760:14;12753:58;12845:11;12840:2;12832:6;12828:15;12821:36;12636:228;:::o;12870:366::-;13012:3;13033:67;13097:2;13092:3;13033:67;:::i;:::-;13026:74;;13109:93;13198:3;13109:93;:::i;:::-;13227:2;13222:3;13218:12;13211:19;;12870:366;;;:::o;13242:419::-;13408:4;13446:2;13435:9;13431:18;13423:26;;13495:9;13489:4;13485:20;13481:1;13470:9;13466:17;13459:47;13523:131;13649:4;13523:131;:::i;:::-;13515:139;;13242:419;;;:::o;13667:180::-;13715:77;13712:1;13705:88;13812:4;13809:1;13802:15;13836:4;13833:1;13826:15;13853:320;13897:6;13934:1;13928:4;13924:12;13914:22;;13981:1;13975:4;13971:12;14002:18;13992:81;;14058:4;14050:6;14046:17;14036:27;;13992:81;14120:2;14112:6;14109:14;14089:18;14086:38;14083:84;;;14139:18;;:::i;:::-;14083:84;13904:269;13853:320;;;:::o;14179:223::-;14319:34;14315:1;14307:6;14303:14;14296:58;14388:6;14383:2;14375:6;14371:15;14364:31;14179:223;:::o;14408:366::-;14550:3;14571:67;14635:2;14630:3;14571:67;:::i;:::-;14564:74;;14647:93;14736:3;14647:93;:::i;:::-;14765:2;14760:3;14756:12;14749:19;;14408:366;;;:::o;14780:419::-;14946:4;14984:2;14973:9;14969:18;14961:26;;15033:9;15027:4;15023:20;15019:1;15008:9;15004:17;14997:47;15061:131;15187:4;15061:131;:::i;:::-;15053:139;;14780:419;;;:::o;15205:227::-;15345:34;15341:1;15333:6;15329:14;15322:58;15414:10;15409:2;15401:6;15397:15;15390:35;15205:227;:::o;15438:366::-;15580:3;15601:67;15665:2;15660:3;15601:67;:::i;:::-;15594:74;;15677:93;15766:3;15677:93;:::i;:::-;15795:2;15790:3;15786:12;15779:19;;15438:366;;;:::o;15810:419::-;15976:4;16014:2;16003:9;15999:18;15991:26;;16063:9;16057:4;16053:20;16049:1;16038:9;16034:17;16027:47;16091:131;16217:4;16091:131;:::i;:::-;16083:139;;15810:419;;;:::o;16235:305::-;16275:3;16294:20;16312:1;16294:20;:::i;:::-;16289:25;;16328:20;16346:1;16328:20;:::i;:::-;16323:25;;16482:1;16414:66;16410:74;16407:1;16404:81;16401:107;;;16488:18;;:::i;:::-;16401:107;16532:1;16529;16525:9;16518:16;;16235:305;;;;:::o;16546:180::-;16594:77;16591:1;16584:88;16691:4;16688:1;16681:15;16715:4;16712:1;16705:15;16732:233;16771:3;16794:24;16812:5;16794:24;:::i;:::-;16785:33;;16840:66;16833:5;16830:77;16827:103;;;16910:18;;:::i;:::-;16827:103;16957:1;16950:5;16946:13;16939:20;;16732:233;;;:::o;16971:164::-;17111:16;17107:1;17099:6;17095:14;17088:40;16971:164;:::o;17141:366::-;17283:3;17304:67;17368:2;17363:3;17304:67;:::i;:::-;17297:74;;17380:93;17469:3;17380:93;:::i;:::-;17498:2;17493:3;17489:12;17482:19;;17141:366;;;:::o;17513:419::-;17679:4;17717:2;17706:9;17702:18;17694:26;;17766:9;17760:4;17756:20;17752:1;17741:9;17737:17;17730:47;17794:131;17920:4;17794:131;:::i;:::-;17786:139;;17513:419;;;:::o;17938:244::-;18078:34;18074:1;18066:6;18062:14;18055:58;18147:27;18142:2;18134:6;18130:15;18123:52;17938:244;:::o;18188:366::-;18330:3;18351:67;18415:2;18410:3;18351:67;:::i;:::-;18344:74;;18427:93;18516:3;18427:93;:::i;:::-;18545:2;18540:3;18536:12;18529:19;;18188:366;;;:::o;18560:419::-;18726:4;18764:2;18753:9;18749:18;18741:26;;18813:9;18807:4;18803:20;18799:1;18788:9;18784:17;18777:47;18841:131;18967:4;18841:131;:::i;:::-;18833:139;;18560:419;;;:::o;18985:224::-;19125:34;19121:1;19113:6;19109:14;19102:58;19194:7;19189:2;19181:6;19177:15;19170:32;18985:224;:::o;19215:366::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:419::-;19753:4;19791:2;19780:9;19776:18;19768:26;;19840:9;19834:4;19830:20;19826:1;19815:9;19811:17;19804:47;19868:131;19994:4;19868:131;:::i;:::-;19860:139;;19587:419;;;:::o;20012:240::-;20152:34;20148:1;20140:6;20136:14;20129:58;20221:23;20216:2;20208:6;20204:15;20197:48;20012:240;:::o;20258:366::-;20400:3;20421:67;20485:2;20480:3;20421:67;:::i;:::-;20414:74;;20497:93;20586:3;20497:93;:::i;:::-;20615:2;20610:3;20606:12;20599:19;;20258:366;;;:::o;20630:419::-;20796:4;20834:2;20823:9;20819:18;20811:26;;20883:9;20877:4;20873:20;20869:1;20858:9;20854:17;20847:47;20911:131;21037:4;20911:131;:::i;:::-;20903:139;;20630:419;;;:::o;21055:239::-;21195:34;21191:1;21183:6;21179:14;21172:58;21264:22;21259:2;21251:6;21247:15;21240:47;21055:239;:::o;21300:366::-;21442:3;21463:67;21527:2;21522:3;21463:67;:::i;:::-;21456:74;;21539:93;21628:3;21539:93;:::i;:::-;21657:2;21652:3;21648:12;21641:19;;21300:366;;;:::o;21672:419::-;21838:4;21876:2;21865:9;21861:18;21853:26;;21925:9;21919:4;21915:20;21911:1;21900:9;21896:17;21889:47;21953:131;22079:4;21953:131;:::i;:::-;21945:139;;21672:419;;;:::o;22097:225::-;22237:34;22233:1;22225:6;22221:14;22214:58;22306:8;22301:2;22293:6;22289:15;22282:33;22097:225;:::o;22328:366::-;22470:3;22491:67;22555:2;22550:3;22491:67;:::i;:::-;22484:74;;22567:93;22656:3;22567:93;:::i;:::-;22685:2;22680:3;22676:12;22669:19;;22328:366;;;:::o;22700:419::-;22866:4;22904:2;22893:9;22889:18;22881:26;;22953:9;22947:4;22943:20;22939:1;22928:9;22924:17;22917:47;22981:131;23107:4;22981:131;:::i;:::-;22973:139;;22700:419;;;:::o;23125:223::-;23265:34;23261:1;23253:6;23249:14;23242:58;23334:6;23329:2;23321:6;23317:15;23310:31;23125:223;:::o;23354:366::-;23496:3;23517:67;23581:2;23576:3;23517:67;:::i;:::-;23510:74;;23593:93;23682:3;23593:93;:::i;:::-;23711:2;23706:3;23702:12;23695:19;;23354:366;;;:::o;23726:419::-;23892:4;23930:2;23919:9;23915:18;23907:26;;23979:9;23973:4;23969:20;23965:1;23954:9;23950:17;23943:47;24007:131;24133:4;24007:131;:::i;:::-;23999:139;;23726:419;;;:::o;24151:221::-;24291:34;24287:1;24279:6;24275:14;24268:58;24360:4;24355:2;24347:6;24343:15;24336:29;24151:221;:::o;24378:366::-;24520:3;24541:67;24605:2;24600:3;24541:67;:::i;:::-;24534:74;;24617:93;24706:3;24617:93;:::i;:::-;24735:2;24730:3;24726:12;24719:19;;24378:366;;;:::o;24750:419::-;24916:4;24954:2;24943:9;24939:18;24931:26;;25003:9;24997:4;24993:20;24989:1;24978:9;24974:17;24967:47;25031:131;25157:4;25031:131;:::i;:::-;25023:139;;24750:419;;;:::o;25175:224::-;25315:34;25311:1;25303:6;25299:14;25292:58;25384:7;25379:2;25371:6;25367:15;25360:32;25175:224;:::o;25405:366::-;25547:3;25568:67;25632:2;25627:3;25568:67;:::i;:::-;25561:74;;25644:93;25733:3;25644:93;:::i;:::-;25762:2;25757:3;25753:12;25746:19;;25405:366;;;:::o;25777:419::-;25943:4;25981:2;25970:9;25966:18;25958:26;;26030:9;26024:4;26020:20;26016:1;26005:9;26001:17;25994:47;26058:131;26184:4;26058:131;:::i;:::-;26050:139;;25777:419;;;:::o;26202:222::-;26342:34;26338:1;26330:6;26326:14;26319:58;26411:5;26406:2;26398:6;26394:15;26387:30;26202:222;:::o;26430:366::-;26572:3;26593:67;26657:2;26652:3;26593:67;:::i;:::-;26586:74;;26669:93;26758:3;26669:93;:::i;:::-;26787:2;26782:3;26778:12;26771:19;;26430:366;;;:::o;26802:419::-;26968:4;27006:2;26995:9;26991:18;26983:26;;27055:9;27049:4;27045:20;27041:1;27030:9;27026:17;27019:47;27083:131;27209:4;27083:131;:::i;:::-;27075:139;;26802:419;;;:::o;27227:164::-;27367:16;27363:1;27355:6;27351:14;27344:40;27227:164;:::o;27397:366::-;27539:3;27560:67;27624:2;27619:3;27560:67;:::i;:::-;27553:74;;27636:93;27725:3;27636:93;:::i;:::-;27754:2;27749:3;27745:12;27738:19;;27397:366;;;:::o;27769:419::-;27935:4;27973:2;27962:9;27958:18;27950:26;;28022:9;28016:4;28012:20;28008:1;27997:9;27993:17;27986:47;28050:131;28176:4;28050:131;:::i;:::-;28042:139;;27769:419;;;:::o;28194:172::-;28334:24;28330:1;28322:6;28318:14;28311:48;28194:172;:::o;28372:366::-;28514:3;28535:67;28599:2;28594:3;28535:67;:::i;:::-;28528:74;;28611:93;28700:3;28611:93;:::i;:::-;28729:2;28724:3;28720:12;28713:19;;28372:366;;;:::o;28744:419::-;28910:4;28948:2;28937:9;28933:18;28925:26;;28997:9;28991:4;28987:20;28983:1;28972:9;28968:17;28961:47;29025:131;29151:4;29025:131;:::i;:::-;29017:139;;28744:419;;;:::o;29169:297::-;29309:34;29305:1;29297:6;29293:14;29286:58;29378:34;29373:2;29365:6;29361:15;29354:59;29447:11;29442:2;29434:6;29430:15;29423:36;29169:297;:::o;29472:366::-;29614:3;29635:67;29699:2;29694:3;29635:67;:::i;:::-;29628:74;;29711:93;29800:3;29711:93;:::i;:::-;29829:2;29824:3;29820:12;29813:19;;29472:366;;;:::o;29844:419::-;30010:4;30048:2;30037:9;30033:18;30025:26;;30097:9;30091:4;30087:20;30083:1;30072:9;30068:17;30061:47;30125:131;30251:4;30125:131;:::i;:::-;30117:139;;29844:419;;;:::o;30269:234::-;30409:34;30405:1;30397:6;30393:14;30386:58;30478:17;30473:2;30465:6;30461:15;30454:42;30269:234;:::o;30509:366::-;30651:3;30672:67;30736:2;30731:3;30672:67;:::i;:::-;30665:74;;30748:93;30837:3;30748:93;:::i;:::-;30866:2;30861:3;30857:12;30850:19;;30509:366;;;:::o;30881:419::-;31047:4;31085:2;31074:9;31070:18;31062:26;;31134:9;31128:4;31124:20;31120:1;31109:9;31105:17;31098:47;31162:131;31288:4;31162:131;:::i;:::-;31154:139;;30881:419;;;:::o;31306:169::-;31446:21;31442:1;31434:6;31430:14;31423:45;31306:169;:::o;31481:366::-;31623:3;31644:67;31708:2;31703:3;31644:67;:::i;:::-;31637:74;;31720:93;31809:3;31720:93;:::i;:::-;31838:2;31833:3;31829:12;31822:19;;31481:366;;;:::o;31853:419::-;32019:4;32057:2;32046:9;32042:18;32034:26;;32106:9;32100:4;32096:20;32092:1;32081:9;32077:17;32070:47;32134:131;32260:4;32134:131;:::i;:::-;32126:139;;31853:419;;;:::o;32278:235::-;32418:34;32414:1;32406:6;32402:14;32395:58;32487:18;32482:2;32474:6;32470:15;32463:43;32278:235;:::o;32519:366::-;32661:3;32682:67;32746:2;32741:3;32682:67;:::i;:::-;32675:74;;32758:93;32847:3;32758:93;:::i;:::-;32876:2;32871:3;32867:12;32860:19;;32519:366;;;:::o;32891:419::-;33057:4;33095:2;33084:9;33080:18;33072:26;;33144:9;33138:4;33134:20;33130:1;33119:9;33115:17;33108:47;33172:131;33298:4;33172:131;:::i;:::-;33164:139;;32891:419;;;:::o;33316:191::-;33356:4;33376:20;33394:1;33376:20;:::i;:::-;33371:25;;33410:20;33428:1;33410:20;:::i;:::-;33405:25;;33449:1;33446;33443:8;33440:34;;;33454:18;;:::i;:::-;33440:34;33499:1;33496;33492:9;33484:17;;33316:191;;;;:::o;33513:225::-;33653:34;33649:1;33641:6;33637:14;33630:58;33722:8;33717:2;33709:6;33705:15;33698:33;33513:225;:::o;33744:366::-;33886:3;33907:67;33971:2;33966:3;33907:67;:::i;:::-;33900:74;;33983:93;34072:3;33983:93;:::i;:::-;34101:2;34096:3;34092:12;34085:19;;33744:366;;;:::o;34116:419::-;34282:4;34320:2;34309:9;34305:18;34297:26;;34369:9;34363:4;34359:20;34355:1;34344:9;34340:17;34333:47;34397:131;34523:4;34397:131;:::i;:::-;34389:139;;34116:419;;;:::o;34541:147::-;34642:11;34679:3;34664:18;;34541:147;;;;:::o;34694:114::-;;:::o;34814:398::-;34973:3;34994:83;35075:1;35070:3;34994:83;:::i;:::-;34987:90;;35086:93;35175:3;35086:93;:::i;:::-;35204:1;35199:3;35195:11;35188:18;;34814:398;;;:::o;35218:379::-;35402:3;35424:147;35567:3;35424:147;:::i;:::-;35417:154;;35588:3;35581:10;;35218:379;;;:::o;35603:442::-;35752:4;35790:2;35779:9;35775:18;35767:26;;35803:71;35871:1;35860:9;35856:17;35847:6;35803:71;:::i;:::-;35884:72;35952:2;35941:9;35937:18;35928:6;35884:72;:::i;:::-;35966;36034:2;36023:9;36019:18;36010:6;35966:72;:::i;:::-;35603:442;;;;;;:::o;36051:180::-;36099:77;36096:1;36089:88;36196:4;36193:1;36186:15;36220:4;36217:1;36210:15;36237:143;36294:5;36325:6;36319:13;36310:22;;36341:33;36368:5;36341:33;:::i;:::-;36237:143;;;;:::o;36386:351::-;36456:6;36505:2;36493:9;36484:7;36480:23;36476:32;36473:119;;;36511:79;;:::i;:::-;36473:119;36631:1;36656:64;36712:7;36703:6;36692:9;36688:22;36656:64;:::i;:::-;36646:74;;36602:128;36386:351;;;;:::o;36743:85::-;36788:7;36817:5;36806:16;;36743:85;;;:::o;36834:158::-;36892:9;36925:61;36943:42;36952:32;36978:5;36952:32;:::i;:::-;36943:42;:::i;:::-;36925:61;:::i;:::-;36912:74;;36834:158;;;:::o;36998:147::-;37093:45;37132:5;37093:45;:::i;:::-;37088:3;37081:58;36998:147;;:::o;37151:114::-;37218:6;37252:5;37246:12;37236:22;;37151:114;;;:::o;37271:184::-;37370:11;37404:6;37399:3;37392:19;37444:4;37439:3;37435:14;37420:29;;37271:184;;;;:::o;37461:132::-;37528:4;37551:3;37543:11;;37581:4;37576:3;37572:14;37564:22;;37461:132;;;:::o;37599:108::-;37676:24;37694:5;37676:24;:::i;:::-;37671:3;37664:37;37599:108;;:::o;37713:179::-;37782:10;37803:46;37845:3;37837:6;37803:46;:::i;:::-;37881:4;37876:3;37872:14;37858:28;;37713:179;;;;:::o;37898:113::-;37968:4;38000;37995:3;37991:14;37983:22;;37898:113;;;:::o;38047:732::-;38166:3;38195:54;38243:5;38195:54;:::i;:::-;38265:86;38344:6;38339:3;38265:86;:::i;:::-;38258:93;;38375:56;38425:5;38375:56;:::i;:::-;38454:7;38485:1;38470:284;38495:6;38492:1;38489:13;38470:284;;;38571:6;38565:13;38598:63;38657:3;38642:13;38598:63;:::i;:::-;38591:70;;38684:60;38737:6;38684:60;:::i;:::-;38674:70;;38530:224;38517:1;38514;38510:9;38505:14;;38470:284;;;38474:14;38770:3;38763:10;;38171:608;;;38047:732;;;;:::o;38785:831::-;39048:4;39086:3;39075:9;39071:19;39063:27;;39100:71;39168:1;39157:9;39153:17;39144:6;39100:71;:::i;:::-;39181:80;39257:2;39246:9;39242:18;39233:6;39181:80;:::i;:::-;39308:9;39302:4;39298:20;39293:2;39282:9;39278:18;39271:48;39336:108;39439:4;39430:6;39336:108;:::i;:::-;39328:116;;39454:72;39522:2;39511:9;39507:18;39498:6;39454:72;:::i;:::-;39536:73;39604:3;39593:9;39589:19;39580:6;39536:73;:::i;:::-;38785:831;;;;;;;;:::o;39622:807::-;39871:4;39909:3;39898:9;39894:19;39886:27;;39923:71;39991:1;39980:9;39976:17;39967:6;39923:71;:::i;:::-;40004:72;40072:2;40061:9;40057:18;40048:6;40004:72;:::i;:::-;40086:80;40162:2;40151:9;40147:18;40138:6;40086:80;:::i;:::-;40176;40252:2;40241:9;40237:18;40228:6;40176:80;:::i;:::-;40266:73;40334:3;40323:9;40319:19;40310:6;40266:73;:::i;:::-;40349;40417:3;40406:9;40402:19;40393:6;40349:73;:::i;:::-;39622:807;;;;;;;;;:::o;40435:143::-;40492:5;40523:6;40517:13;40508:22;;40539:33;40566:5;40539:33;:::i;:::-;40435:143;;;;:::o;40584:663::-;40672:6;40680;40688;40737:2;40725:9;40716:7;40712:23;40708:32;40705:119;;;40743:79;;:::i;:::-;40705:119;40863:1;40888:64;40944:7;40935:6;40924:9;40920:22;40888:64;:::i;:::-;40878:74;;40834:128;41001:2;41027:64;41083:7;41074:6;41063:9;41059:22;41027:64;:::i;:::-;41017:74;;40972:129;41140:2;41166:64;41222:7;41213:6;41202:9;41198:22;41166:64;:::i;:::-;41156:74;;41111:129;40584:663;;;;;:::o

Swarm Source

ipfs://88c5c8d04c5df770be06a9bbe02141879cbad4ede10ec9290882e107c9973534
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.