ETH Price: $2,605.27 (-0.22%)

Contract

0x97478bBD57993dEEc3ab286A6F63e7B3464d6d8B
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve178454322023-08-05 1:16:23439 days ago1691198183IN
0x97478bBD...3464d6d8B
0 ETH0.0007417715.78684706
Approve178453682023-08-05 1:03:35439 days ago1691197415IN
0x97478bBD...3464d6d8B
0 ETH0.0010030221.37411017
Approve178453052023-08-05 0:50:59439 days ago1691196659IN
0x97478bBD...3464d6d8B
0 ETH0.0007237115.41433096
Approve178453022023-08-05 0:50:23439 days ago1691196623IN
0x97478bBD...3464d6d8B
0 ETH0.0007202215.34773491
Approve178452772023-08-05 0:45:23439 days ago1691196323IN
0x97478bBD...3464d6d8B
0 ETH0.0007595216.07843381
Approve178452442023-08-05 0:38:47439 days ago1691195927IN
0x97478bBD...3464d6d8B
0 ETH0.0010882923.03813815
Approve178452402023-08-05 0:37:59439 days ago1691195879IN
0x97478bBD...3464d6d8B
0 ETH0.0011083423.46252757
Approve178452362023-08-05 0:37:11439 days ago1691195831IN
0x97478bBD...3464d6d8B
0 ETH0.0011920725.2349683
Approve178452222023-08-05 0:34:23439 days ago1691195663IN
0x97478bBD...3464d6d8B
0 ETH0.0009519120.1766916
Approve178452182023-08-05 0:33:35439 days ago1691195615IN
0x97478bBD...3464d6d8B
0 ETH0.001022521.64532807
Approve178452152023-08-05 0:32:59439 days ago1691195579IN
0x97478bBD...3464d6d8B
0 ETH0.0014171730
Approve178452122023-08-05 0:32:23439 days ago1691195543IN
0x97478bBD...3464d6d8B
0 ETH0.0012754527
Approve178452092023-08-05 0:31:47439 days ago1691195507IN
0x97478bBD...3464d6d8B
0 ETH0.000850318
Approve178452012023-08-05 0:30:11439 days ago1691195411IN
0x97478bBD...3464d6d8B
0 ETH0.0008053617.04869508
Approve178451982023-08-05 0:29:35439 days ago1691195375IN
0x97478bBD...3464d6d8B
0 ETH0.0006516613.87621091
Approve178451942023-08-05 0:28:47439 days ago1691195327IN
0x97478bBD...3464d6d8B
0 ETH0.0008360417.69826226
Approve178451942023-08-05 0:28:47439 days ago1691195327IN
0x97478bBD...3464d6d8B
0 ETH0.0008360417.69826226
Approve178451932023-08-05 0:28:35439 days ago1691195315IN
0x97478bBD...3464d6d8B
0 ETH0.000854318.08472293
Approve178451932023-08-05 0:28:35439 days ago1691195315IN
0x97478bBD...3464d6d8B
0 ETH0.000854318.08472293
Approve178451892023-08-05 0:27:47439 days ago1691195267IN
0x97478bBD...3464d6d8B
0 ETH0.0007936116.8
Approve178451822023-08-05 0:26:23439 days ago1691195183IN
0x97478bBD...3464d6d8B
0 ETH0.0008044317.028986
Approve178451782023-08-05 0:25:35439 days ago1691195135IN
0x97478bBD...3464d6d8B
0 ETH0.000623713.2909036
Approve178451752023-08-05 0:24:59439 days ago1691195099IN
0x97478bBD...3464d6d8B
0 ETH0.0007745916.39735229
Approve178451652023-08-05 0:22:59439 days ago1691194979IN
0x97478bBD...3464d6d8B
0 ETH0.0008565618.13262552
Approve178451622023-08-05 0:22:23439 days ago1691194943IN
0x97478bBD...3464d6d8B
0 ETH0.0009015319.08465155
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
178466182023-08-05 5:15:23439 days ago1691212523
0x97478bBD...3464d6d8B
0.00133162 ETH
178466182023-08-05 5:15:23439 days ago1691212523
0x97478bBD...3464d6d8B
0.00266325 ETH
178466182023-08-05 5:15:23439 days ago1691212523
0x97478bBD...3464d6d8B
0.00399487 ETH
178462832023-08-05 4:07:47439 days ago1691208467
0x97478bBD...3464d6d8B
0.00192565 ETH
178462832023-08-05 4:07:47439 days ago1691208467
0x97478bBD...3464d6d8B
0.0038513 ETH
178462832023-08-05 4:07:47439 days ago1691208467
0x97478bBD...3464d6d8B
0.00577696 ETH
178453932023-08-05 1:08:35439 days ago1691197715
0x97478bBD...3464d6d8B
0.00252521 ETH
178453932023-08-05 1:08:35439 days ago1691197715
0x97478bBD...3464d6d8B
0.00505042 ETH
178453932023-08-05 1:08:35439 days ago1691197715
0x97478bBD...3464d6d8B
0.00757563 ETH
178453422023-08-05 0:58:23439 days ago1691197103
0x97478bBD...3464d6d8B
0.00162613 ETH
178453422023-08-05 0:58:23439 days ago1691197103
0x97478bBD...3464d6d8B
0.00325226 ETH
178453422023-08-05 0:58:23439 days ago1691197103
0x97478bBD...3464d6d8B
0.00487839 ETH
178453362023-08-05 0:57:11439 days ago1691197031
0x97478bBD...3464d6d8B
0.0019821 ETH
178453362023-08-05 0:57:11439 days ago1691197031
0x97478bBD...3464d6d8B
0.0039642 ETH
178453362023-08-05 0:57:11439 days ago1691197031
0x97478bBD...3464d6d8B
0.0059463 ETH
178453322023-08-05 0:56:23439 days ago1691196983
0x97478bBD...3464d6d8B
0.00195248 ETH
178453322023-08-05 0:56:23439 days ago1691196983
0x97478bBD...3464d6d8B
0.00390497 ETH
178453322023-08-05 0:56:23439 days ago1691196983
0x97478bBD...3464d6d8B
0.00585745 ETH
178453282023-08-05 0:55:35439 days ago1691196935
0x97478bBD...3464d6d8B
0.00390497 ETH
178453282023-08-05 0:55:35439 days ago1691196935
0x97478bBD...3464d6d8B
0.00585745 ETH
178453282023-08-05 0:55:35439 days ago1691196935
0x97478bBD...3464d6d8B
0.00390497 ETH
178453282023-08-05 0:55:35439 days ago1691196935
0x97478bBD...3464d6d8B
0.00585745 ETH
178453182023-08-05 0:53:35439 days ago1691196815
0x97478bBD...3464d6d8B
0.00249688 ETH
178453182023-08-05 0:53:35439 days ago1691196815
0x97478bBD...3464d6d8B
0.00499377 ETH
178453182023-08-05 0:53:35439 days ago1691196815
0x97478bBD...3464d6d8B
0.00749066 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SaveDefi

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-05
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;

/*

https://twitter.com/savedefiETH
https://t.me/xcrveth

*/

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 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 {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

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

    function WETH() external pure returns (address);

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

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

    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    )   external
        payable
        returns (
            uint[] memory amounts
        );
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public devWallet;
    address public swapToken; 
    address public daoWallet;

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

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

    uint256 public buyTotalFees;
    uint256 public buyCurveFee;
    uint256 public buyMarketingFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellCurveFee;
    uint256 public sellMarketingFee;
    uint256 public sellBurnFee;

	uint256 public tokensForCurve;
    uint256 public tokensForMarketing;
    uint256 public burnFees;
    uint256 public tokensBurnt;

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor() ERC20("Save Defi", "XCRV") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyCurveFee = 6;
        uint256 _buyMarketingFee = 6;
        uint256 _buyBurnFee = 0;

        uint256 _sellCurveFee = 11;
        uint256 _sellMarketingFee = 11;
        uint256 _sellBurnFee = 0;

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxTransactionAmount = 2 * 1e7 * 1e18; 
        maxWallet = 2 * 1e7 * 1e18; 
        swapTokensAtAmount = (totalSupply * 10) / 10000; 

        buyCurveFee = _buyCurveFee;
        buyMarketingFee = _buyMarketingFee;
        buyBurnFee = _buyBurnFee;
        buyTotalFees = buyCurveFee + buyMarketingFee + buyBurnFee;

        sellCurveFee = _sellCurveFee;
        sellMarketingFee = _sellMarketingFee;
        sellBurnFee = _sellBurnFee;
        sellTotalFees = sellCurveFee + sellMarketingFee + sellBurnFee;

        devWallet = address(0xcd272c5FFdCcAf85c57f59500fAE339ab3F28208); 
        swapToken = address(0xD533a949740bb3306d119CC777fa900bA034cd52); // Curve DAO Token
        daoWallet = address(0x3D9602dD1031B5B5ea1d12d481c4996Fff9aB1f3);
        
        // 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 {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function updateFees(uint256 _buyCurveFee, uint256 _buyMarketingFee, uint256 _buyBurnFee, uint256 _sellCurveFee, uint256 _sellMarketingFee, uint256 _sellBurnFee) external onlyOwner {
        buyCurveFee = _buyCurveFee;
        buyMarketingFee = _buyMarketingFee;
        buyBurnFee = _buyBurnFee;
        buyTotalFees = buyCurveFee + buyMarketingFee + buyBurnFee;

        sellCurveFee = _sellCurveFee;
        sellMarketingFee = _sellMarketingFee;
        sellBurnFee = _sellBurnFee;
        sellTotalFees = sellCurveFee + sellMarketingFee + sellBurnFee;
    } 

    function updateswapTokenAddress(address _swapToken) external onlyOwner {
        swapToken = _swapToken;
    }

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

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForCurve += (fees * sellCurveFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;  
                burnFees = (fees * sellBurnFee) / sellTotalFees;  
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForCurve += (fees * buyCurveFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                burnFees = (fees * buyBurnFee) / buyTotalFees; 
            }
            
            if (fees > 0) {
                
                super._transfer(from, address(this), fees.sub(burnFees));
                if(burnFees > 0) {
                    super._transfer(from, address(0xdead), burnFees);
                    // _totalSupply -= burnFees;
                    tokensBurnt += burnFees;
                }
            }
            
            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 burnEthForCurve(uint256 ethAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH(); 
        path[1] = swapToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokens{value: ethAmount}(
            0,
            path,
            daoWallet,
            block.timestamp
        );

    }

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

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

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

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForCurve = ethBalance - ethForMarketing;

        burnEthForCurve(ethForCurve);

        tokensForCurve = 0;
        tokensForMarketing = 0;

        //there will be no leftover eth in the contract 
        (success, ) = address(devWallet).call{value: address(this).balance}("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoCurve","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCurveFee","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":"daoWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCurveFee","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":"swapToken","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"tokensBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForCurve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyCurveFee","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyBurnFee","type":"uint256"},{"internalType":"uint256","name":"_sellCurveFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"}],"name":"updateFees","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":"_swapToken","type":"address"}],"name":"updateswapTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600981526020017f53617665204465666900000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f58435256000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000b23565b5080600490805190602001906200010092919062000b23565b5050506200012362000117620005e360201b60201c565b620005eb60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014f816001620006b160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000c3d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000c3d565b6040518363ffffffff1660e01b8152600401620002a292919062000c80565b6020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000c3d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033060a0516001620006b160201b60201c565b6200034560a05160016200079b60201b60201c565b600060069050600060069050600080600b90506000600b90506000806b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006009819055506a108b2a2c28029094000000600b81905550612710600a82620003a6919062000ce6565b620003b2919062000d76565b600a8190555086600e8190555085600f8190555084601081905550601054600f54600e54620003e2919062000dae565b620003ee919062000dae565b600d819055508360128190555082601381905550816014819055506014546013546012546200041e919062000dae565b6200042a919062000dae565b60118190555073cd272c5ffdccaf85c57f59500fae339ab3f28208600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d533a949740bb3306d119cc777fa900ba034cd52600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733d9602dd1031b5b5ea1d12d481c4996fff9ab1f3600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000551620005436200083c60201b60201c565b60016200086660201b60201c565b620005643060016200086660201b60201c565b6200057961dead60016200086660201b60201c565b6200059b6200058d6200083c60201b60201c565b6001620006b160201b60201c565b620005ae306001620006b160201b60201c565b620005c361dead6001620006b160201b60201c565b620005d53382620009a060201b60201c565b505050505050505062000fcd565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006c1620005e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006e76200083c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000740576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007379062000e6c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000876620005e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200089c6200083c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ec9062000e6c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000994919062000eab565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0a9062000f18565b60405180910390fd5b62000a276000838362000b1960201b60201c565b806002600082825462000a3b919062000dae565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a92919062000dae565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af9919062000f4b565b60405180910390a362000b156000838362000b1e60201b60201c565b5050565b505050565b505050565b82805462000b319062000f97565b90600052602060002090601f01602090048101928262000b55576000855562000ba1565b82601f1062000b7057805160ff191683800117855562000ba1565b8280016001018555821562000ba1579182015b8281111562000ba057825182559160200191906001019062000b83565b5b50905062000bb0919062000bb4565b5090565b5b8082111562000bcf57600081600090555060010162000bb5565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c058262000bd8565b9050919050565b62000c178162000bf8565b811462000c2357600080fd5b50565b60008151905062000c378162000c0c565b92915050565b60006020828403121562000c565762000c5562000bd3565b5b600062000c668482850162000c26565b91505092915050565b62000c7a8162000bf8565b82525050565b600060408201905062000c97600083018562000c6f565b62000ca6602083018462000c6f565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cf38262000cad565b915062000d008362000cad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d3c5762000d3b62000cb7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d838262000cad565b915062000d908362000cad565b92508262000da35762000da262000d47565b5b828204905092915050565b600062000dbb8262000cad565b915062000dc88362000cad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e005762000dff62000cb7565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e5460208362000e0b565b915062000e618262000e1c565b602082019050919050565b6000602082019050818103600083015262000e878162000e45565b9050919050565b60008115159050919050565b62000ea58162000e8e565b82525050565b600060208201905062000ec2600083018462000e9a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f00601f8362000e0b565b915062000f0d8262000ec8565b602082019050919050565b6000602082019050818103600083015262000f338162000ef1565b9050919050565b62000f458162000cad565b82525050565b600060208201905062000f62600083018462000f3a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fb057607f821691505b6020821081141562000fc75762000fc662000f68565b5b50919050565b60805160a0516146bc6200101d60003960008181610e4801526115d2015260008181610c5b01528181612f0d01528181612fee01528181613015015281816130fb015261324901526146bc6000f3fe6080604052600436106102b25760003560e01c80638a8c523c11610175578063b62496f5116100dc578063d85ba06311610095578063e2f456051161006f578063e2f4560514610adf578063e71dc3f514610b0a578063f2fde38b14610b35578063f8b45b0514610b5e576102b9565b8063d85ba06314610a4c578063dc73e49c14610a77578063dd62ed3e14610aa2576102b9565b8063b62496f514610928578063bbc0c74214610965578063c024666814610990578063c6ead8af146109b9578063c8c8ebe4146109e4578063d257b34f14610a0f576102b9565b806395d89b411161012e57806395d89b4114610806578063992c58e4146108315780639a7a23d61461085a578063a457c2d714610883578063a9059cbb146108c0578063adb873bd146108fd576102b9565b80638a8c523c1461071a5780638cf737cd146107315780638da5cb5b1461075c5780638ea5220f1461078757806392136913146107b2578063924de9b7146107dd576102b9565b80634a62bb65116102195780636f556967116101d25780636f5569671461061c57806370a0823114610647578063715018a614610684578063751039fc1461069b5780637571336a146106c65780637bce5a04146106ef576102b9565b80634a62bb651461050a5780634fbee1931461053557806351eada4f14610572578063698a58971461059b5780636a486a8e146105c65780636ddd1713146105f1576102b9565b806323b872dd1161026b57806323b872dd146103e45780632c65bf6f14610421578063313ce5671461044c578063395093511461047757806340f6ac31146104b457806349bd5a5e146104df576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631f3fed8f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b89565b6040516102e091906133b0565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b919061347a565b610c1b565b60405161031d91906134d5565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906134f0565b610c39565b60405161035a91906134d5565b60405180910390f35b34801561036f57600080fd5b50610378610c59565b604051610385919061357c565b60405180910390f35b34801561039a57600080fd5b506103a3610c7d565b6040516103b091906135a6565b60405180910390f35b3480156103c557600080fd5b506103ce610c87565b6040516103db91906135a6565b60405180910390f35b3480156103f057600080fd5b5061040b600480360381019061040691906135c1565b610c8d565b60405161041891906134d5565b60405180910390f35b34801561042d57600080fd5b50610436610d85565b60405161044391906135a6565b60405180910390f35b34801561045857600080fd5b50610461610d8b565b60405161046e9190613630565b60405180910390f35b34801561048357600080fd5b5061049e6004803603810190610499919061347a565b610d94565b6040516104ab91906134d5565b60405180910390f35b3480156104c057600080fd5b506104c9610e40565b6040516104d691906135a6565b60405180910390f35b3480156104eb57600080fd5b506104f4610e46565b604051610501919061365a565b60405180910390f35b34801561051657600080fd5b5061051f610e6a565b60405161052c91906134d5565b60405180910390f35b34801561054157600080fd5b5061055c600480360381019061055791906134f0565b610e7d565b60405161056991906134d5565b60405180910390f35b34801561057e57600080fd5b50610599600480360381019061059491906134f0565b610ed3565b005b3480156105a757600080fd5b506105b0610f93565b6040516105bd919061365a565b60405180910390f35b3480156105d257600080fd5b506105db610fb9565b6040516105e891906135a6565b60405180910390f35b3480156105fd57600080fd5b50610606610fbf565b60405161061391906134d5565b60405180910390f35b34801561062857600080fd5b50610631610fd2565b60405161063e91906135a6565b60405180910390f35b34801561065357600080fd5b5061066e600480360381019061066991906134f0565b610fd8565b60405161067b91906135a6565b60405180910390f35b34801561069057600080fd5b50610699611020565b005b3480156106a757600080fd5b506106b06110a8565b6040516106bd91906134d5565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e891906136a1565b611148565b005b3480156106fb57600080fd5b5061070461121f565b60405161071191906135a6565b60405180910390f35b34801561072657600080fd5b5061072f611225565b005b34801561073d57600080fd5b506107466112d9565b60405161075391906135a6565b60405180910390f35b34801561076857600080fd5b506107716112df565b60405161077e919061365a565b60405180910390f35b34801561079357600080fd5b5061079c611309565b6040516107a9919061365a565b60405180910390f35b3480156107be57600080fd5b506107c761132f565b6040516107d491906135a6565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff91906136e1565b611335565b005b34801561081257600080fd5b5061081b6113ce565b60405161082891906133b0565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061370e565b611460565b005b34801561086657600080fd5b50610881600480360381019061087c91906136a1565b611554565b005b34801561088f57600080fd5b506108aa60048036038101906108a5919061347a565b61166d565b6040516108b791906134d5565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e2919061347a565b611758565b6040516108f491906134d5565b60405180910390f35b34801561090957600080fd5b50610912611776565b60405161091f91906135a6565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a91906134f0565b61177c565b60405161095c91906134d5565b60405180910390f35b34801561097157600080fd5b5061097a61179c565b60405161098791906134d5565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906136a1565b6117af565b005b3480156109c557600080fd5b506109ce6118d4565b6040516109db91906135a6565b60405180910390f35b3480156109f057600080fd5b506109f96118da565b604051610a0691906135a6565b60405180910390f35b348015610a1b57600080fd5b50610a366004803603810190610a31919061379b565b6118e0565b604051610a4391906134d5565b60405180910390f35b348015610a5857600080fd5b50610a61611a35565b604051610a6e91906135a6565b60405180910390f35b348015610a8357600080fd5b50610a8c611a3b565b604051610a99919061365a565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac491906137c8565b611a61565b604051610ad691906135a6565b60405180910390f35b348015610aeb57600080fd5b50610af4611ae8565b604051610b0191906135a6565b60405180910390f35b348015610b1657600080fd5b50610b1f611aee565b604051610b2c91906135a6565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b5791906134f0565b611af4565b005b348015610b6a57600080fd5b50610b73611bec565b604051610b8091906135a6565b60405180910390f35b606060038054610b9890613837565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc490613837565b8015610c115780601f10610be657610100808354040283529160200191610c11565b820191906000526020600020905b815481529060010190602001808311610bf457829003601f168201915b5050505050905090565b6000610c2f610c28611bf2565b8484611bfa565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60165481565b6000610c9a848484611dc5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ce5611bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c906138db565b60405180910390fd5b610d7985610d71611bf2565b858403611bfa565b60019150509392505050565b60125481565b60006012905090565b6000610e36610da1611bf2565b848460016000610daf611bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e31919061392a565b611bfa565b6001905092915050565b60175481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610edb611bf2565b73ffffffffffffffffffffffffffffffffffffffff16610ef96112df565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906139cc565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b60155481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611028611bf2565b73ffffffffffffffffffffffffffffffffffffffff166110466112df565b73ffffffffffffffffffffffffffffffffffffffff161461109c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611093906139cc565b60405180910390fd5b6110a660006128bd565b565b60006110b2611bf2565b73ffffffffffffffffffffffffffffffffffffffff166110d06112df565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906139cc565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b611150611bf2565b73ffffffffffffffffffffffffffffffffffffffff1661116e6112df565b73ffffffffffffffffffffffffffffffffffffffff16146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb906139cc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b61122d611bf2565b73ffffffffffffffffffffffffffffffffffffffff1661124b6112df565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906139cc565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b61133d611bf2565b73ffffffffffffffffffffffffffffffffffffffff1661135b6112df565b73ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a8906139cc565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546113dd90613837565b80601f016020809104026020016040519081016040528092919081815260200182805461140990613837565b80156114565780601f1061142b57610100808354040283529160200191611456565b820191906000526020600020905b81548152906001019060200180831161143957829003601f168201915b5050505050905090565b611468611bf2565b73ffffffffffffffffffffffffffffffffffffffff166114866112df565b73ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d3906139cc565b60405180910390fd5b85600e8190555084600f8190555083601081905550601054600f54600e54611504919061392a565b61150e919061392a565b600d8190555082601281905550816013819055508060148190555060145460135460125461153c919061392a565b611546919061392a565b601181905550505050505050565b61155c611bf2565b73ffffffffffffffffffffffffffffffffffffffff1661157a6112df565b73ffffffffffffffffffffffffffffffffffffffff16146115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c7906139cc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165690613a5e565b60405180910390fd5b6116698282612983565b5050565b6000806001600061167c611bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090613af0565b60405180910390fd5b61174d611744611bf2565b85858403611bfa565b600191505092915050565b600061176c611765611bf2565b8484611dc5565b6001905092915050565b60145481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6117b7611bf2565b73ffffffffffffffffffffffffffffffffffffffff166117d56112df565b73ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906139cc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118c891906134d5565b60405180910390a25050565b60185481565b60095481565b60006118ea611bf2565b73ffffffffffffffffffffffffffffffffffffffff166119086112df565b73ffffffffffffffffffffffffffffffffffffffff161461195e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611955906139cc565b60405180910390fd5b620186a0600161196c610c7d565b6119769190613b10565b6119809190613b99565b8210156119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613c3c565b60405180910390fd5b6103e860056119cf610c7d565b6119d99190613b10565b6119e39190613b99565b821115611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90613cce565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b611afc611bf2565b73ffffffffffffffffffffffffffffffffffffffff16611b1a6112df565b73ffffffffffffffffffffffffffffffffffffffff1614611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b67906139cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd790613d60565b60405180910390fd5b611be9816128bd565b50565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190613df2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190613e84565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611db891906135a6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c90613f16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90613fa8565b60405180910390fd5b6000811415611ebf57611eba83836000612a24565b6128b8565b600c60009054906101000a900460ff16156123ba57611edc6112df565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f4a5750611f1a6112df565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f835750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fbd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fd65750600560149054906101000a900460ff16155b156123b957600c60019054906101000a900460ff166120d057601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120905750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c690614014565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121735750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561221a576009548111156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906140a6565b60405180910390fd5b600b546121c983610fd8565b826121d4919061392a565b1115612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90614112565b60405180910390fd5b6123b8565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122bd5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561230c57600954811115612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe906141a4565b60405180910390fd5b6123b7565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123b657600b5461236983610fd8565b82612374919061392a565b11156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90614112565b60405180910390fd5b5b5b5b5b5b60006123c530610fd8565b90506000600a5482101590508080156123ea5750600c60029054906101000a900460ff165b80156124035750600560149054906101000a900460ff16155b80156124595750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124af5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125055750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612549576001600560146101000a81548160ff02191690831515021790555061252d612ca5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ff5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561260957600090505b600081156128a857601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561266c57506000601154115b1561272757612699606461268b60115488612e2290919063ffffffff16565b612e3890919063ffffffff16565b9050601154601254826126ac9190613b10565b6126b69190613b99565b601560008282546126c7919061392a565b92505081905550601154601354826126df9190613b10565b6126e99190613b99565b601660008282546126fa919061392a565b92505081905550601154601454826127129190613b10565b61271c9190613b99565b60178190555061283a565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561278257506000600d54115b15612839576127af60646127a1600d5488612e2290919063ffffffff16565b612e3890919063ffffffff16565b9050600d54600e54826127c29190613b10565b6127cc9190613b99565b601560008282546127dd919061392a565b92505081905550600d54600f54826127f59190613b10565b6127ff9190613b99565b60166000828254612810919061392a565b92505081905550600d54601054826128289190613b10565b6128329190613b99565b6017819055505b5b600081111561289957612862873061285d60175485612e4e90919063ffffffff16565b612a24565b600060175411156128985761287c8761dead601754612a24565b60175460186000828254612890919061392a565b925050819055505b5b80856128a591906141c4565b94505b6128b3878787612a24565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90613f16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afb90613fa8565b60405180910390fd5b612b0f838383612e64565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8c9061426a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c28919061392a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c8c91906135a6565b60405180910390a3612c9f848484612e69565b50505050565b6000612cb030610fd8565b90506000601654601554612cc4919061392a565b9050600080831480612cd65750600082145b15612ce357505050612e20565b6014600a54612cf29190613b10565b831115612d0b576014600a54612d089190613b10565b92505b60008390506000479050612d1e82612e6e565b6000612d338247612e4e90919063ffffffff16565b90506000612d5e86612d5060165485612e2290919063ffffffff16565b612e3890919063ffffffff16565b905060008183612d6e91906141c4565b9050612d79816130ab565b60006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612dcf906142bb565b60006040518083038185875af1925050503d8060008114612e0c576040519150601f19603f3d011682016040523d82523d6000602084013e612e11565b606091505b50508096505050505050505050505b565b60008183612e309190613b10565b905092915050565b60008183612e469190613b99565b905092915050565b60008183612e5c91906141c4565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612e8b57612e8a6142d0565b5b604051908082528060200260200182016040528015612eb95781602001602082028036833780820191505090505b5090503081600081518110612ed157612ed06142ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a9190614343565b81600181518110612fae57612fad6142ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613013307f000000000000000000000000000000000000000000000000000000000000000084611bfa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613075959493929190614469565b600060405180830381600087803b15801561308f57600080fd5b505af11580156130a3573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff8111156130c8576130c76142d0565b5b6040519080825280602002602001820160405280156130f65781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131889190614343565b8160008151811061319c5761319b6142ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061320d5761320c6142ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ff36ab583600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016132ca94939291906144c3565b60006040518083038185885af11580156132e8573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190613312919061463d565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613351578082015181840152602081019050613336565b83811115613360576000848401525b50505050565b6000601f19601f8301169050919050565b600061338282613317565b61338c8185613322565b935061339c818560208601613333565b6133a581613366565b840191505092915050565b600060208201905081810360008301526133ca8184613377565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613411826133e6565b9050919050565b61342181613406565b811461342c57600080fd5b50565b60008135905061343e81613418565b92915050565b6000819050919050565b61345781613444565b811461346257600080fd5b50565b6000813590506134748161344e565b92915050565b60008060408385031215613491576134906133dc565b5b600061349f8582860161342f565b92505060206134b085828601613465565b9150509250929050565b60008115159050919050565b6134cf816134ba565b82525050565b60006020820190506134ea60008301846134c6565b92915050565b600060208284031215613506576135056133dc565b5b60006135148482850161342f565b91505092915050565b6000819050919050565b600061354261353d613538846133e6565b61351d565b6133e6565b9050919050565b600061355482613527565b9050919050565b600061356682613549565b9050919050565b6135768161355b565b82525050565b6000602082019050613591600083018461356d565b92915050565b6135a081613444565b82525050565b60006020820190506135bb6000830184613597565b92915050565b6000806000606084860312156135da576135d96133dc565b5b60006135e88682870161342f565b93505060206135f98682870161342f565b925050604061360a86828701613465565b9150509250925092565b600060ff82169050919050565b61362a81613614565b82525050565b60006020820190506136456000830184613621565b92915050565b61365481613406565b82525050565b600060208201905061366f600083018461364b565b92915050565b61367e816134ba565b811461368957600080fd5b50565b60008135905061369b81613675565b92915050565b600080604083850312156136b8576136b76133dc565b5b60006136c68582860161342f565b92505060206136d78582860161368c565b9150509250929050565b6000602082840312156136f7576136f66133dc565b5b60006137058482850161368c565b91505092915050565b60008060008060008060c0878903121561372b5761372a6133dc565b5b600061373989828a01613465565b965050602061374a89828a01613465565b955050604061375b89828a01613465565b945050606061376c89828a01613465565b935050608061377d89828a01613465565b92505060a061378e89828a01613465565b9150509295509295509295565b6000602082840312156137b1576137b06133dc565b5b60006137bf84828501613465565b91505092915050565b600080604083850312156137df576137de6133dc565b5b60006137ed8582860161342f565b92505060206137fe8582860161342f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061384f57607f821691505b6020821081141561386357613862613808565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138c5602883613322565b91506138d082613869565b604082019050919050565b600060208201905081810360008301526138f4816138b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061393582613444565b915061394083613444565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613975576139746138fb565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139b6602083613322565b91506139c182613980565b602082019050919050565b600060208201905081810360008301526139e5816139a9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a48603983613322565b9150613a53826139ec565b604082019050919050565b60006020820190508181036000830152613a7781613a3b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613ada602583613322565b9150613ae582613a7e565b604082019050919050565b60006020820190508181036000830152613b0981613acd565b9050919050565b6000613b1b82613444565b9150613b2683613444565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5f57613b5e6138fb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ba482613444565b9150613baf83613444565b925082613bbf57613bbe613b6a565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613c26603583613322565b9150613c3182613bca565b604082019050919050565b60006020820190508181036000830152613c5581613c19565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613cb8603483613322565b9150613cc382613c5c565b604082019050919050565b60006020820190508181036000830152613ce781613cab565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d4a602683613322565b9150613d5582613cee565b604082019050919050565b60006020820190508181036000830152613d7981613d3d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ddc602483613322565b9150613de782613d80565b604082019050919050565b60006020820190508181036000830152613e0b81613dcf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e6e602283613322565b9150613e7982613e12565b604082019050919050565b60006020820190508181036000830152613e9d81613e61565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f00602583613322565b9150613f0b82613ea4565b604082019050919050565b60006020820190508181036000830152613f2f81613ef3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f92602383613322565b9150613f9d82613f36565b604082019050919050565b60006020820190508181036000830152613fc181613f85565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613ffe601683613322565b915061400982613fc8565b602082019050919050565b6000602082019050818103600083015261402d81613ff1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614090603583613322565b915061409b82614034565b604082019050919050565b600060208201905081810360008301526140bf81614083565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140fc601383613322565b9150614107826140c6565b602082019050919050565b6000602082019050818103600083015261412b816140ef565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061418e603683613322565b915061419982614132565b604082019050919050565b600060208201905081810360008301526141bd81614181565b9050919050565b60006141cf82613444565b91506141da83613444565b9250828210156141ed576141ec6138fb565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614254602683613322565b915061425f826141f8565b604082019050919050565b6000602082019050818103600083015261428381614247565b9050919050565b600081905092915050565b50565b60006142a560008361428a565b91506142b082614295565b600082019050919050565b60006142c682614298565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061433d81613418565b92915050565b600060208284031215614359576143586133dc565b5b60006143678482850161432e565b91505092915050565b6000819050919050565b600061439561439061438b84614370565b61351d565b613444565b9050919050565b6143a58161437a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143e081613406565b82525050565b60006143f283836143d7565b60208301905092915050565b6000602082019050919050565b6000614416826143ab565b61442081856143b6565b935061442b836143c7565b8060005b8381101561445c57815161444388826143e6565b975061444e836143fe565b92505060018101905061442f565b5085935050505092915050565b600060a08201905061447e6000830188613597565b61448b602083018761439c565b818103604083015261449d818661440b565b90506144ac606083018561364b565b6144b96080830184613597565b9695505050505050565b60006080820190506144d8600083018761439c565b81810360208301526144ea818661440b565b90506144f9604083018561364b565b6145066060830184613597565b95945050505050565b600080fd5b61451d82613366565b810181811067ffffffffffffffff8211171561453c5761453b6142d0565b5b80604052505050565b600061454f6133d2565b905061455b8282614514565b919050565b600067ffffffffffffffff82111561457b5761457a6142d0565b5b602082029050602081019050919050565b600080fd5b6000815190506145a08161344e565b92915050565b60006145b96145b484614560565b614545565b905080838252602082019050602084028301858111156145dc576145db61458c565b5b835b8181101561460557806145f18882614591565b8452602084019350506020810190506145de565b5050509392505050565b600082601f8301126146245761462361450f565b5b81516146348482602086016145a6565b91505092915050565b600060208284031215614653576146526133dc565b5b600082015167ffffffffffffffff811115614671576146706133e1565b5b61467d8482850161460f565b9150509291505056fea26469706673582212208b86d4082e8265408737fff1341b52fa7e0bfef78044a52fe6669d7ec69f10c064736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80638a8c523c11610175578063b62496f5116100dc578063d85ba06311610095578063e2f456051161006f578063e2f4560514610adf578063e71dc3f514610b0a578063f2fde38b14610b35578063f8b45b0514610b5e576102b9565b8063d85ba06314610a4c578063dc73e49c14610a77578063dd62ed3e14610aa2576102b9565b8063b62496f514610928578063bbc0c74214610965578063c024666814610990578063c6ead8af146109b9578063c8c8ebe4146109e4578063d257b34f14610a0f576102b9565b806395d89b411161012e57806395d89b4114610806578063992c58e4146108315780639a7a23d61461085a578063a457c2d714610883578063a9059cbb146108c0578063adb873bd146108fd576102b9565b80638a8c523c1461071a5780638cf737cd146107315780638da5cb5b1461075c5780638ea5220f1461078757806392136913146107b2578063924de9b7146107dd576102b9565b80634a62bb65116102195780636f556967116101d25780636f5569671461061c57806370a0823114610647578063715018a614610684578063751039fc1461069b5780637571336a146106c65780637bce5a04146106ef576102b9565b80634a62bb651461050a5780634fbee1931461053557806351eada4f14610572578063698a58971461059b5780636a486a8e146105c65780636ddd1713146105f1576102b9565b806323b872dd1161026b57806323b872dd146103e45780632c65bf6f14610421578063313ce5671461044c578063395093511461047757806340f6ac31146104b457806349bd5a5e146104df576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631f3fed8f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b89565b6040516102e091906133b0565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b919061347a565b610c1b565b60405161031d91906134d5565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906134f0565b610c39565b60405161035a91906134d5565b60405180910390f35b34801561036f57600080fd5b50610378610c59565b604051610385919061357c565b60405180910390f35b34801561039a57600080fd5b506103a3610c7d565b6040516103b091906135a6565b60405180910390f35b3480156103c557600080fd5b506103ce610c87565b6040516103db91906135a6565b60405180910390f35b3480156103f057600080fd5b5061040b600480360381019061040691906135c1565b610c8d565b60405161041891906134d5565b60405180910390f35b34801561042d57600080fd5b50610436610d85565b60405161044391906135a6565b60405180910390f35b34801561045857600080fd5b50610461610d8b565b60405161046e9190613630565b60405180910390f35b34801561048357600080fd5b5061049e6004803603810190610499919061347a565b610d94565b6040516104ab91906134d5565b60405180910390f35b3480156104c057600080fd5b506104c9610e40565b6040516104d691906135a6565b60405180910390f35b3480156104eb57600080fd5b506104f4610e46565b604051610501919061365a565b60405180910390f35b34801561051657600080fd5b5061051f610e6a565b60405161052c91906134d5565b60405180910390f35b34801561054157600080fd5b5061055c600480360381019061055791906134f0565b610e7d565b60405161056991906134d5565b60405180910390f35b34801561057e57600080fd5b50610599600480360381019061059491906134f0565b610ed3565b005b3480156105a757600080fd5b506105b0610f93565b6040516105bd919061365a565b60405180910390f35b3480156105d257600080fd5b506105db610fb9565b6040516105e891906135a6565b60405180910390f35b3480156105fd57600080fd5b50610606610fbf565b60405161061391906134d5565b60405180910390f35b34801561062857600080fd5b50610631610fd2565b60405161063e91906135a6565b60405180910390f35b34801561065357600080fd5b5061066e600480360381019061066991906134f0565b610fd8565b60405161067b91906135a6565b60405180910390f35b34801561069057600080fd5b50610699611020565b005b3480156106a757600080fd5b506106b06110a8565b6040516106bd91906134d5565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e891906136a1565b611148565b005b3480156106fb57600080fd5b5061070461121f565b60405161071191906135a6565b60405180910390f35b34801561072657600080fd5b5061072f611225565b005b34801561073d57600080fd5b506107466112d9565b60405161075391906135a6565b60405180910390f35b34801561076857600080fd5b506107716112df565b60405161077e919061365a565b60405180910390f35b34801561079357600080fd5b5061079c611309565b6040516107a9919061365a565b60405180910390f35b3480156107be57600080fd5b506107c761132f565b6040516107d491906135a6565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff91906136e1565b611335565b005b34801561081257600080fd5b5061081b6113ce565b60405161082891906133b0565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061370e565b611460565b005b34801561086657600080fd5b50610881600480360381019061087c91906136a1565b611554565b005b34801561088f57600080fd5b506108aa60048036038101906108a5919061347a565b61166d565b6040516108b791906134d5565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e2919061347a565b611758565b6040516108f491906134d5565b60405180910390f35b34801561090957600080fd5b50610912611776565b60405161091f91906135a6565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a91906134f0565b61177c565b60405161095c91906134d5565b60405180910390f35b34801561097157600080fd5b5061097a61179c565b60405161098791906134d5565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906136a1565b6117af565b005b3480156109c557600080fd5b506109ce6118d4565b6040516109db91906135a6565b60405180910390f35b3480156109f057600080fd5b506109f96118da565b604051610a0691906135a6565b60405180910390f35b348015610a1b57600080fd5b50610a366004803603810190610a31919061379b565b6118e0565b604051610a4391906134d5565b60405180910390f35b348015610a5857600080fd5b50610a61611a35565b604051610a6e91906135a6565b60405180910390f35b348015610a8357600080fd5b50610a8c611a3b565b604051610a99919061365a565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac491906137c8565b611a61565b604051610ad691906135a6565b60405180910390f35b348015610aeb57600080fd5b50610af4611ae8565b604051610b0191906135a6565b60405180910390f35b348015610b1657600080fd5b50610b1f611aee565b604051610b2c91906135a6565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b5791906134f0565b611af4565b005b348015610b6a57600080fd5b50610b73611bec565b604051610b8091906135a6565b60405180910390f35b606060038054610b9890613837565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc490613837565b8015610c115780601f10610be657610100808354040283529160200191610c11565b820191906000526020600020905b815481529060010190602001808311610bf457829003601f168201915b5050505050905090565b6000610c2f610c28611bf2565b8484611bfa565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60165481565b6000610c9a848484611dc5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ce5611bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c906138db565b60405180910390fd5b610d7985610d71611bf2565b858403611bfa565b60019150509392505050565b60125481565b60006012905090565b6000610e36610da1611bf2565b848460016000610daf611bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e31919061392a565b611bfa565b6001905092915050565b60175481565b7f00000000000000000000000036b8adba24e14dd420d6b4dc96892256bad87ca581565b600c60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610edb611bf2565b73ffffffffffffffffffffffffffffffffffffffff16610ef96112df565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906139cc565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b60155481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611028611bf2565b73ffffffffffffffffffffffffffffffffffffffff166110466112df565b73ffffffffffffffffffffffffffffffffffffffff161461109c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611093906139cc565b60405180910390fd5b6110a660006128bd565b565b60006110b2611bf2565b73ffffffffffffffffffffffffffffffffffffffff166110d06112df565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906139cc565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b611150611bf2565b73ffffffffffffffffffffffffffffffffffffffff1661116e6112df565b73ffffffffffffffffffffffffffffffffffffffff16146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb906139cc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b61122d611bf2565b73ffffffffffffffffffffffffffffffffffffffff1661124b6112df565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906139cc565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b61133d611bf2565b73ffffffffffffffffffffffffffffffffffffffff1661135b6112df565b73ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a8906139cc565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546113dd90613837565b80601f016020809104026020016040519081016040528092919081815260200182805461140990613837565b80156114565780601f1061142b57610100808354040283529160200191611456565b820191906000526020600020905b81548152906001019060200180831161143957829003601f168201915b5050505050905090565b611468611bf2565b73ffffffffffffffffffffffffffffffffffffffff166114866112df565b73ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d3906139cc565b60405180910390fd5b85600e8190555084600f8190555083601081905550601054600f54600e54611504919061392a565b61150e919061392a565b600d8190555082601281905550816013819055508060148190555060145460135460125461153c919061392a565b611546919061392a565b601181905550505050505050565b61155c611bf2565b73ffffffffffffffffffffffffffffffffffffffff1661157a6112df565b73ffffffffffffffffffffffffffffffffffffffff16146115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c7906139cc565b60405180910390fd5b7f00000000000000000000000036b8adba24e14dd420d6b4dc96892256bad87ca573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165690613a5e565b60405180910390fd5b6116698282612983565b5050565b6000806001600061167c611bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090613af0565b60405180910390fd5b61174d611744611bf2565b85858403611bfa565b600191505092915050565b600061176c611765611bf2565b8484611dc5565b6001905092915050565b60145481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6117b7611bf2565b73ffffffffffffffffffffffffffffffffffffffff166117d56112df565b73ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906139cc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118c891906134d5565b60405180910390a25050565b60185481565b60095481565b60006118ea611bf2565b73ffffffffffffffffffffffffffffffffffffffff166119086112df565b73ffffffffffffffffffffffffffffffffffffffff161461195e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611955906139cc565b60405180910390fd5b620186a0600161196c610c7d565b6119769190613b10565b6119809190613b99565b8210156119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613c3c565b60405180910390fd5b6103e860056119cf610c7d565b6119d99190613b10565b6119e39190613b99565b821115611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90613cce565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b611afc611bf2565b73ffffffffffffffffffffffffffffffffffffffff16611b1a6112df565b73ffffffffffffffffffffffffffffffffffffffff1614611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b67906139cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd790613d60565b60405180910390fd5b611be9816128bd565b50565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190613df2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190613e84565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611db891906135a6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c90613f16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90613fa8565b60405180910390fd5b6000811415611ebf57611eba83836000612a24565b6128b8565b600c60009054906101000a900460ff16156123ba57611edc6112df565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f4a5750611f1a6112df565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f835750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fbd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fd65750600560149054906101000a900460ff16155b156123b957600c60019054906101000a900460ff166120d057601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120905750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c690614014565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121735750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561221a576009548111156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906140a6565b60405180910390fd5b600b546121c983610fd8565b826121d4919061392a565b1115612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90614112565b60405180910390fd5b6123b8565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122bd5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561230c57600954811115612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe906141a4565b60405180910390fd5b6123b7565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123b657600b5461236983610fd8565b82612374919061392a565b11156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90614112565b60405180910390fd5b5b5b5b5b5b60006123c530610fd8565b90506000600a5482101590508080156123ea5750600c60029054906101000a900460ff165b80156124035750600560149054906101000a900460ff16155b80156124595750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124af5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125055750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612549576001600560146101000a81548160ff02191690831515021790555061252d612ca5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ff5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561260957600090505b600081156128a857601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561266c57506000601154115b1561272757612699606461268b60115488612e2290919063ffffffff16565b612e3890919063ffffffff16565b9050601154601254826126ac9190613b10565b6126b69190613b99565b601560008282546126c7919061392a565b92505081905550601154601354826126df9190613b10565b6126e99190613b99565b601660008282546126fa919061392a565b92505081905550601154601454826127129190613b10565b61271c9190613b99565b60178190555061283a565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561278257506000600d54115b15612839576127af60646127a1600d5488612e2290919063ffffffff16565b612e3890919063ffffffff16565b9050600d54600e54826127c29190613b10565b6127cc9190613b99565b601560008282546127dd919061392a565b92505081905550600d54600f54826127f59190613b10565b6127ff9190613b99565b60166000828254612810919061392a565b92505081905550600d54601054826128289190613b10565b6128329190613b99565b6017819055505b5b600081111561289957612862873061285d60175485612e4e90919063ffffffff16565b612a24565b600060175411156128985761287c8761dead601754612a24565b60175460186000828254612890919061392a565b925050819055505b5b80856128a591906141c4565b94505b6128b3878787612a24565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90613f16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afb90613fa8565b60405180910390fd5b612b0f838383612e64565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8c9061426a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c28919061392a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c8c91906135a6565b60405180910390a3612c9f848484612e69565b50505050565b6000612cb030610fd8565b90506000601654601554612cc4919061392a565b9050600080831480612cd65750600082145b15612ce357505050612e20565b6014600a54612cf29190613b10565b831115612d0b576014600a54612d089190613b10565b92505b60008390506000479050612d1e82612e6e565b6000612d338247612e4e90919063ffffffff16565b90506000612d5e86612d5060165485612e2290919063ffffffff16565b612e3890919063ffffffff16565b905060008183612d6e91906141c4565b9050612d79816130ab565b60006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612dcf906142bb565b60006040518083038185875af1925050503d8060008114612e0c576040519150601f19603f3d011682016040523d82523d6000602084013e612e11565b606091505b50508096505050505050505050505b565b60008183612e309190613b10565b905092915050565b60008183612e469190613b99565b905092915050565b60008183612e5c91906141c4565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612e8b57612e8a6142d0565b5b604051908082528060200260200182016040528015612eb95781602001602082028036833780820191505090505b5090503081600081518110612ed157612ed06142ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a9190614343565b81600181518110612fae57612fad6142ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613013307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bfa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613075959493929190614469565b600060405180830381600087803b15801561308f57600080fd5b505af11580156130a3573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff8111156130c8576130c76142d0565b5b6040519080825280602002602001820160405280156130f65781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131889190614343565b8160008151811061319c5761319b6142ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061320d5761320c6142ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16637ff36ab583600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016132ca94939291906144c3565b60006040518083038185885af11580156132e8573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190613312919061463d565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613351578082015181840152602081019050613336565b83811115613360576000848401525b50505050565b6000601f19601f8301169050919050565b600061338282613317565b61338c8185613322565b935061339c818560208601613333565b6133a581613366565b840191505092915050565b600060208201905081810360008301526133ca8184613377565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613411826133e6565b9050919050565b61342181613406565b811461342c57600080fd5b50565b60008135905061343e81613418565b92915050565b6000819050919050565b61345781613444565b811461346257600080fd5b50565b6000813590506134748161344e565b92915050565b60008060408385031215613491576134906133dc565b5b600061349f8582860161342f565b92505060206134b085828601613465565b9150509250929050565b60008115159050919050565b6134cf816134ba565b82525050565b60006020820190506134ea60008301846134c6565b92915050565b600060208284031215613506576135056133dc565b5b60006135148482850161342f565b91505092915050565b6000819050919050565b600061354261353d613538846133e6565b61351d565b6133e6565b9050919050565b600061355482613527565b9050919050565b600061356682613549565b9050919050565b6135768161355b565b82525050565b6000602082019050613591600083018461356d565b92915050565b6135a081613444565b82525050565b60006020820190506135bb6000830184613597565b92915050565b6000806000606084860312156135da576135d96133dc565b5b60006135e88682870161342f565b93505060206135f98682870161342f565b925050604061360a86828701613465565b9150509250925092565b600060ff82169050919050565b61362a81613614565b82525050565b60006020820190506136456000830184613621565b92915050565b61365481613406565b82525050565b600060208201905061366f600083018461364b565b92915050565b61367e816134ba565b811461368957600080fd5b50565b60008135905061369b81613675565b92915050565b600080604083850312156136b8576136b76133dc565b5b60006136c68582860161342f565b92505060206136d78582860161368c565b9150509250929050565b6000602082840312156136f7576136f66133dc565b5b60006137058482850161368c565b91505092915050565b60008060008060008060c0878903121561372b5761372a6133dc565b5b600061373989828a01613465565b965050602061374a89828a01613465565b955050604061375b89828a01613465565b945050606061376c89828a01613465565b935050608061377d89828a01613465565b92505060a061378e89828a01613465565b9150509295509295509295565b6000602082840312156137b1576137b06133dc565b5b60006137bf84828501613465565b91505092915050565b600080604083850312156137df576137de6133dc565b5b60006137ed8582860161342f565b92505060206137fe8582860161342f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061384f57607f821691505b6020821081141561386357613862613808565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138c5602883613322565b91506138d082613869565b604082019050919050565b600060208201905081810360008301526138f4816138b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061393582613444565b915061394083613444565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613975576139746138fb565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139b6602083613322565b91506139c182613980565b602082019050919050565b600060208201905081810360008301526139e5816139a9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a48603983613322565b9150613a53826139ec565b604082019050919050565b60006020820190508181036000830152613a7781613a3b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613ada602583613322565b9150613ae582613a7e565b604082019050919050565b60006020820190508181036000830152613b0981613acd565b9050919050565b6000613b1b82613444565b9150613b2683613444565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5f57613b5e6138fb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ba482613444565b9150613baf83613444565b925082613bbf57613bbe613b6a565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613c26603583613322565b9150613c3182613bca565b604082019050919050565b60006020820190508181036000830152613c5581613c19565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613cb8603483613322565b9150613cc382613c5c565b604082019050919050565b60006020820190508181036000830152613ce781613cab565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d4a602683613322565b9150613d5582613cee565b604082019050919050565b60006020820190508181036000830152613d7981613d3d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ddc602483613322565b9150613de782613d80565b604082019050919050565b60006020820190508181036000830152613e0b81613dcf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e6e602283613322565b9150613e7982613e12565b604082019050919050565b60006020820190508181036000830152613e9d81613e61565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f00602583613322565b9150613f0b82613ea4565b604082019050919050565b60006020820190508181036000830152613f2f81613ef3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f92602383613322565b9150613f9d82613f36565b604082019050919050565b60006020820190508181036000830152613fc181613f85565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613ffe601683613322565b915061400982613fc8565b602082019050919050565b6000602082019050818103600083015261402d81613ff1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614090603583613322565b915061409b82614034565b604082019050919050565b600060208201905081810360008301526140bf81614083565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140fc601383613322565b9150614107826140c6565b602082019050919050565b6000602082019050818103600083015261412b816140ef565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061418e603683613322565b915061419982614132565b604082019050919050565b600060208201905081810360008301526141bd81614181565b9050919050565b60006141cf82613444565b91506141da83613444565b9250828210156141ed576141ec6138fb565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614254602683613322565b915061425f826141f8565b604082019050919050565b6000602082019050818103600083015261428381614247565b9050919050565b600081905092915050565b50565b60006142a560008361428a565b91506142b082614295565b600082019050919050565b60006142c682614298565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061433d81613418565b92915050565b600060208284031215614359576143586133dc565b5b60006143678482850161432e565b91505092915050565b6000819050919050565b600061439561439061438b84614370565b61351d565b613444565b9050919050565b6143a58161437a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143e081613406565b82525050565b60006143f283836143d7565b60208301905092915050565b6000602082019050919050565b6000614416826143ab565b61442081856143b6565b935061442b836143c7565b8060005b8381101561445c57815161444388826143e6565b975061444e836143fe565b92505060018101905061442f565b5085935050505092915050565b600060a08201905061447e6000830188613597565b61448b602083018761439c565b818103604083015261449d818661440b565b90506144ac606083018561364b565b6144b96080830184613597565b9695505050505050565b60006080820190506144d8600083018761439c565b81810360208301526144ea818661440b565b90506144f9604083018561364b565b6145066060830184613597565b95945050505050565b600080fd5b61451d82613366565b810181811067ffffffffffffffff8211171561453c5761453b6142d0565b5b80604052505050565b600061454f6133d2565b905061455b8282614514565b919050565b600067ffffffffffffffff82111561457b5761457a6142d0565b5b602082029050602081019050919050565b600080fd5b6000815190506145a08161344e565b92915050565b60006145b96145b484614560565b614545565b905080838252602082019050602084028301858111156145dc576145db61458c565b5b835b8181101561460557806145f18882614591565b8452602084019350506020810190506145de565b5050509392505050565b600082601f8301126146245761462361450f565b5b81516146348482602086016145a6565b91505092915050565b600060208284031215614653576146526133dc565b5b600082015167ffffffffffffffff811115614671576146706133e1565b5b61467d8482850161460f565b9150509291505056fea26469706673582212208b86d4082e8265408737fff1341b52fa7e0bfef78044a52fe6669d7ec69f10c064736f6c634300080a0033

Deployed Bytecode Sourcemap

9764:12826:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2693:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3607:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10838:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9842:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3014:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10621:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3784:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10481:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2913:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4284:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10661:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9900:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10188:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16142:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14256:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10040:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10446:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10268:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10585:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3130:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;841:103;;;;;;;;;;;;;:::i;:::-;;14376:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15073:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10375:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13557:112;;;;;;;;;;;;;:::i;:::-;;10342:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;618:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9977:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10515:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15336:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2801:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13677:570;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15634:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4507:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3265:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10553:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11059:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10228:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15444:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10691:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10073:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14567:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10308:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10008:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3448:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10115:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10412:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;952:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10155:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2693:100;2747:13;2780:5;2773:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2693:100;:::o;3607:169::-;3690:4;3707:39;3716:12;:10;:12::i;:::-;3730:7;3739:6;3707:8;:39::i;:::-;3764:4;3757:11;;3607:169;;;;:::o;10838:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;9842:51::-;;;:::o;3014:108::-;3075:7;3102:12;;3095:19;;3014:108;:::o;10621:33::-;;;;:::o;3784:492::-;3924:4;3941:36;3951:6;3959:9;3970:6;3941:9;:36::i;:::-;3990:24;4017:11;:19;4029:6;4017:19;;;;;;;;;;;;;;;:33;4037:12;:10;:12::i;:::-;4017:33;;;;;;;;;;;;;;;;3990:60;;4089:6;4069:16;:26;;4061:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4176:57;4185:6;4193:12;:10;:12::i;:::-;4226:6;4207:16;:25;4176:8;:57::i;:::-;4264:4;4257:11;;;3784:492;;;;;:::o;10481:27::-;;;;:::o;2913:93::-;2971:5;2996:2;2989:9;;2913:93;:::o;4284:215::-;4372:4;4389:80;4398:12;:10;:12::i;:::-;4412:7;4458:10;4421:11;:25;4433:12;:10;:12::i;:::-;4421:25;;;;;;;;;;;;;;;:34;4447:7;4421:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4389:8;:80::i;:::-;4487:4;4480:11;;4284:215;;;;:::o;10661:23::-;;;;:::o;9900:38::-;;;:::o;10188:33::-;;;;;;;;;;;;;:::o;16142:126::-;16208:4;16232:19;:28;16252:7;16232:28;;;;;;;;;;;;;;;;;;;;;;;;;16225:35;;16142:126;;;:::o;14256:112::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14350:10:::1;14338:9;;:22;;;;;;;;;;;;;;;;;;14256:112:::0;:::o;10040:24::-;;;;;;;;;;;;;:::o;10446:28::-;;;;:::o;10268:31::-;;;;;;;;;;;;;:::o;10585:29::-;;;;:::o;3130:127::-;3204:7;3231:9;:18;3241:7;3231:18;;;;;;;;;;;;;;;;3224:25;;3130:127;;;:::o;841:103::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;906:30:::1;933:1;906:18;:30::i;:::-;841:103::o:0;14376:121::-;14428:4;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14462:5:::1;14445:14;;:22;;;;;;;;;;;;;;;;;;14485:4;14478:11;;14376:121:::0;:::o;15073:167::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15228:4:::1;15186:31;:39;15218:6;15186:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;15073:167:::0;;:::o;10375:30::-;;;;:::o;13557:112::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13628:4:::1;13612:13;;:20;;;;;;;;;;;;;;;;;;13657:4;13643:11;;:18;;;;;;;;;;;;;;;;;;13557:112::o:0;10342:26::-;;;;:::o;618:87::-;664:7;691:6;;;;;;;;;;;684:13;;618:87;:::o;9977:24::-;;;;;;;;;;;;;:::o;10515:31::-;;;;:::o;15336:100::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15421:7:::1;15407:11;;:21;;;;;;;;;;;;;;;;;;15336:100:::0;:::o;2801:104::-;2857:13;2890:7;2883:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2801:104;:::o;13677:570::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13882:12:::1;13868:11;:26;;;;13923:16;13905:15;:34;;;;13963:11;13950:10;:24;;;;14032:10;;14014:15;;14000:11;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;13985:12;:57;;;;14070:13;14055:12;:28;;;;14113:17;14094:16;:36;;;;14155:12;14141:11;:26;;;;14228:11;;14209:16;;14194:12;;:31;;;;:::i;:::-;:45;;;;:::i;:::-;14178:13;:61;;;;13677:570:::0;;;;;;:::o;15634:304::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15778:13:::1;15770:21;;:4;:21;;;;15748:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;15889:41;15918:4;15924:5;15889:28;:41::i;:::-;15634:304:::0;;:::o;4507:413::-;4600:4;4617:24;4644:11;:25;4656:12;:10;:12::i;:::-;4644:25;;;;;;;;;;;;;;;:34;4670:7;4644:34;;;;;;;;;;;;;;;;4617:61;;4717:15;4697:16;:35;;4689:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4810:67;4819:12;:10;:12::i;:::-;4833:7;4861:15;4842:16;:34;4810:8;:67::i;:::-;4908:4;4901:11;;;4507:413;;;;:::o;3265:175::-;3351:4;3368:42;3378:12;:10;:12::i;:::-;3392:9;3403:6;3368:9;:42::i;:::-;3428:4;3421:11;;3265:175;;;;:::o;10553:26::-;;;;:::o;11059:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;10228:33::-;;;;;;;;;;;;;:::o;15444:182::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15560:8:::1;15529:19;:28;15549:7;15529:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;15600:7;15584:34;;;15609:8;15584:34;;;;;;:::i;:::-;;;;;;;;15444:182:::0;;:::o;10691:26::-;;;;:::o;10073:35::-;;;;:::o;14567:497::-;14675:4;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14754:6:::1;14749:1;14733:13;:11;:13::i;:::-;:17;;;;:::i;:::-;14732:28;;;;:::i;:::-;14719:9;:41;;14697:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;14909:4;14904:1;14888:13;:11;:13::i;:::-;:17;;;;:::i;:::-;14887:26;;;;:::i;:::-;14874:9;:39;;14852:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;15025:9;15004:18;:30;;;;15052:4;15045:11;;14567:497:::0;;;:::o;10308:27::-;;;;:::o;10008:24::-;;;;;;;;;;;;;:::o;3448:151::-;3537:7;3564:11;:18;3576:5;3564:18;;;;;;;;;;;;;;;:27;3583:7;3564:27;;;;;;;;;;;;;;;;3557:34;;3448:151;;;;:::o;10115:33::-;;;;:::o;10412:25::-;;;;:::o;952:201::-;764:12;:10;:12::i;:::-;753:23;;:7;:5;:7::i;:::-;:23;;;745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1061:1:::1;1041:22;;:8;:22;;;;1033:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1117:28;1136:8;1117:18;:28::i;:::-;952:201:::0;:::o;10155:24::-;;;;:::o;164:98::-;217:7;244:10;237:17;;164:98;:::o;6675:380::-;6828:1;6811:19;;:5;:19;;;;6803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6909:1;6890:21;;:7;:21;;;;6882:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6993:6;6963:11;:18;6975:5;6963:18;;;;;;;;;;;;;;;:27;6982:7;6963:27;;;;;;;;;;;;;;;:36;;;;7031:7;7015:32;;7024:5;7015:32;;;7040:6;7015:32;;;;;;:::i;:::-;;;;;;;;6675:380;;;:::o;16276:4183::-;16424:1;16408:18;;:4;:18;;;;16400:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16501:1;16487:16;;:2;:16;;;;16479:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16570:1;16560:6;:11;16556:93;;;16588:28;16604:4;16610:2;16614:1;16588:15;:28::i;:::-;16631:7;;16556:93;16665:14;;;;;;;;;;;16661:1694;;;16726:7;:5;:7::i;:::-;16718:15;;:4;:15;;;;:49;;;;;16760:7;:5;:7::i;:::-;16754:13;;:2;:13;;;;16718:49;:86;;;;;16802:1;16788:16;;:2;:16;;;;16718:86;:128;;;;;16839:6;16825:21;;:2;:21;;;;16718:128;:158;;;;;16868:8;;;;;;;;;;;16867:9;16718:158;16696:1648;;;16916:13;;;;;;;;;;;16911:223;;16988:19;:25;17008:4;16988:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;17017:19;:23;17037:2;17017:23;;;;;;;;;;;;;;;;;;;;;;;;;16988:52;16954:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;16911:223;17208:25;:31;17234:4;17208:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;17265:31;:35;17297:2;17265:35;;;;;;;;;;;;;;;;;;;;;;;;;17264:36;17208:92;17182:1147;;;17387:20;;17377:6;:30;;17343:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;17595:9;;17578:13;17588:2;17578:9;:13::i;:::-;17569:6;:22;;;;:::i;:::-;:35;;17535:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;17182:1147;;;17773:25;:29;17799:2;17773:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;17828:31;:37;17860:4;17828:37;;;;;;;;;;;;;;;;;;;;;;;;;17827:38;17773:92;17747:582;;;17952:20;;17942:6;:30;;17908:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;17747:582;;;18109:31;:35;18141:2;18109:35;;;;;;;;;;;;;;;;;;;;;;;;;18104:225;;18229:9;;18212:13;18222:2;18212:9;:13::i;:::-;18203:6;:22;;;;:::i;:::-;:35;;18169:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;18104:225;17747:582;17182:1147;16696:1648;16661:1694;18367:28;18398:24;18416:4;18398:9;:24::i;:::-;18367:55;;18435:12;18474:18;;18450:20;:42;;18435:57;;18523:7;:35;;;;;18547:11;;;;;;;;;;;18523:35;:61;;;;;18576:8;;;;;;;;;;;18575:9;18523:61;:110;;;;;18602:25;:31;18628:4;18602:31;;;;;;;;;;;;;;;;;;;;;;;;;18601:32;18523:110;:153;;;;;18651:19;:25;18671:4;18651:25;;;;;;;;;;;;;;;;;;;;;;;;;18650:26;18523:153;:194;;;;;18694:19;:23;18714:2;18694:23;;;;;;;;;;;;;;;;;;;;;;;;;18693:24;18523:194;18505:324;;;18755:4;18744:8;;:15;;;;;;;;;;;;;;;;;;18774:10;:8;:10::i;:::-;18812:5;18801:8;;:16;;;;;;;;;;;;;;;;;;18505:324;18841:12;18857:8;;;;;;;;;;;18856:9;18841:24;;18967:19;:25;18987:4;18967:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;18996:19;:23;19016:2;18996:23;;;;;;;;;;;;;;;;;;;;;;;;;18967:52;18963:100;;;19046:5;19036:15;;18963:100;19075:12;19182:7;19178:1228;;;19234:25;:29;19260:2;19234:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;19283:1;19267:13;;:17;19234:50;19230:749;;;19312:34;19342:3;19312:25;19323:13;;19312:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;19305:41;;19407:13;;19391:12;;19384:4;:19;;;;:::i;:::-;19383:37;;;;:::i;:::-;19365:14;;:55;;;;;;;:::i;:::-;;;;;;;;19489:13;;19469:16;;19462:4;:23;;;;:::i;:::-;19461:41;;;;:::i;:::-;19439:18;;:63;;;;;;;:::i;:::-;;;;;;;;19557:13;;19542:11;;19535:4;:18;;;;:::i;:::-;19534:36;;;;:::i;:::-;19523:8;:47;;;;19230:749;;;19634:25;:31;19660:4;19634:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;19684:1;19669:12;;:16;19634:51;19630:349;;;19713:33;19742:3;19713:24;19724:12;;19713:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;19706:40;;19806:12;;19791:11;;19784:4;:18;;;;:::i;:::-;19783:35;;;;:::i;:::-;19765:14;;:53;;;;;;;:::i;:::-;;;;;;;;19886:12;;19867:15;;19860:4;:22;;;;:::i;:::-;19859:39;;;;:::i;:::-;19837:18;;:61;;;;;;;:::i;:::-;;;;;;;;19950:12;;19936:10;;19929:4;:17;;;;:::i;:::-;19928:34;;;;:::i;:::-;19917:8;:45;;;;19630:349;19230:749;20018:1;20011:4;:8;20007:345;;;20058:56;20074:4;20088;20095:18;20104:8;;20095:4;:8;;:18;;;;:::i;:::-;20058:15;:56::i;:::-;20147:1;20136:8;;:12;20133:204;;;20173:48;20189:4;20203:6;20212:8;;20173:15;:48::i;:::-;20309:8;;20294:11;;:23;;;;;;;:::i;:::-;;;;;;;;20133:204;20007:345;20390:4;20380:14;;;;;:::i;:::-;;;19178:1228;20418:33;20434:4;20440:2;20444:6;20418:15;:33::i;:::-;16389:4070;;;;16276:4183;;;;:::o;1159:191::-;1233:16;1252:6;;;;;;;;;;;1233:25;;1278:8;1269:6;;:17;;;;;;;;;;;;;;;;;;1333:8;1302:40;;1323:8;1302:40;;;;;;;;;;;;1222:128;1159:191;:::o;15946:188::-;16063:5;16029:25;:31;16055:4;16029:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16120:5;16086:40;;16114:4;16086:40;;;;;;;;;;;;15946:188;;:::o;4928:733::-;5086:1;5068:20;;:6;:20;;;;5060:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5170:1;5149:23;;:9;:23;;;;5141:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5225:47;5246:6;5254:9;5265:6;5225:20;:47::i;:::-;5285:21;5309:9;:17;5319:6;5309:17;;;;;;;;;;;;;;;;5285:41;;5362:6;5345:13;:23;;5337:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5483:6;5467:13;:22;5447:9;:17;5457:6;5447:17;;;;;;;;;;;;;;;:42;;;;5535:6;5511:9;:20;5521:9;5511:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5576:9;5559:35;;5568:6;5559:35;;;5587:6;5559:35;;;;;;:::i;:::-;;;;;;;;5607:46;5627:6;5635:9;5646:6;5607:19;:46::i;:::-;5049:612;4928:733;;;:::o;21515:1070::-;21554:23;21580:24;21598:4;21580:9;:24::i;:::-;21554:50;;21615:25;21660:18;;21643:14;;:35;;;;:::i;:::-;21615:63;;21689:12;21737:1;21718:15;:20;:46;;;;21763:1;21742:17;:22;21718:46;21714:85;;;21781:7;;;;;21714:85;21854:2;21833:18;;:23;;;;:::i;:::-;21815:15;:41;21811:115;;;21912:2;21891:18;;:23;;;;:::i;:::-;21873:41;;21811:115;21938:26;21967:15;21938:44;;21995:25;22023:21;21995:49;;22057:36;22074:18;22057:16;:36::i;:::-;22106:18;22127:44;22153:17;22127:21;:25;;:44;;;;:::i;:::-;22106:65;;22184:23;22210:57;22249:17;22210:34;22225:18;;22210:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;22184:83;;22280:19;22315:15;22302:10;:28;;;;:::i;:::-;22280:50;;22343:28;22359:11;22343:15;:28::i;:::-;22401:1;22384:14;:18;;;;22434:1;22413:18;:22;;;;22528:9;;;;;;;;;;;22520:23;;22551:21;22520:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22506:71;;;;;21543:1042;;;;;;;;21515:1070;:::o;7563:98::-;7621:7;7652:1;7648;:5;;;;:::i;:::-;7641:12;;7563:98;;;;:::o;7669:::-;7727:7;7758:1;7754;:5;;;;:::i;:::-;7747:12;;7669:98;;;;:::o;7457:::-;7515:7;7546:1;7542;:5;;;;:::i;:::-;7535:12;;7457:98;;;;:::o;7063:125::-;;;;:::o;7196:124::-;;;;:::o;20467:591::-;20593:21;20631:1;20617:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20593:40;;20662:4;20644;20649:1;20644:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;20688:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20678:4;20683:1;20678:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;20723:62;20740:4;20755:15;20773:11;20723:8;:62::i;:::-;20824:15;:66;;;20905:11;20931:1;20975:4;21002;21022:15;20824:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20522:536;20467:591;:::o;21066:441::-;21189:21;21227:1;21213:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21189:40;;21250:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21240:4;21245:1;21240:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;21294:9;;;;;;;;;;;21284:4;21289:1;21284:7;;;;;;;;:::i;:::-;;;;;;;:19;;;;;;;;;;;21342:15;:37;;;21387:9;21412:1;21428:4;21447:9;;;;;;;;;;;21471:15;21342:155;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21118:389;21066:441;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:152::-;4251:9;4284:37;4315:5;4284:37;:::i;:::-;4271:50;;4175:152;;;:::o;4333:183::-;4446:63;4503:5;4446:63;:::i;:::-;4441:3;4434:76;4333:183;;:::o;4522:274::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:97;4786:1;4775:9;4771:17;4762:6;4692:97;:::i;:::-;4522:274;;;;:::o;4802:118::-;4889:24;4907:5;4889:24;:::i;:::-;4884:3;4877:37;4802:118;;:::o;4926:222::-;5019:4;5057:2;5046:9;5042:18;5034:26;;5070:71;5138:1;5127:9;5123:17;5114:6;5070:71;:::i;:::-;4926:222;;;;:::o;5154:619::-;5231:6;5239;5247;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5549:2;5575:53;5620:7;5611:6;5600:9;5596:22;5575:53;:::i;:::-;5565:63;;5520:118;5677:2;5703:53;5748:7;5739:6;5728:9;5724:22;5703:53;:::i;:::-;5693:63;;5648:118;5154:619;;;;;:::o;5779:86::-;5814:7;5854:4;5847:5;5843:16;5832:27;;5779:86;;;:::o;5871:112::-;5954:22;5970:5;5954:22;:::i;:::-;5949:3;5942:35;5871:112;;:::o;5989:214::-;6078:4;6116:2;6105:9;6101:18;6093:26;;6129:67;6193:1;6182:9;6178:17;6169:6;6129:67;:::i;:::-;5989:214;;;;:::o;6209:118::-;6296:24;6314:5;6296:24;:::i;:::-;6291:3;6284:37;6209:118;;:::o;6333:222::-;6426:4;6464:2;6453:9;6449:18;6441:26;;6477:71;6545:1;6534:9;6530:17;6521:6;6477:71;:::i;:::-;6333:222;;;;:::o;6561:116::-;6631:21;6646:5;6631:21;:::i;:::-;6624:5;6621:32;6611:60;;6667:1;6664;6657:12;6611:60;6561:116;:::o;6683:133::-;6726:5;6764:6;6751:20;6742:29;;6780:30;6804:5;6780:30;:::i;:::-;6683:133;;;;:::o;6822:468::-;6887:6;6895;6944:2;6932:9;6923:7;6919:23;6915:32;6912:119;;;6950:79;;:::i;:::-;6912:119;7070:1;7095:53;7140:7;7131:6;7120:9;7116:22;7095:53;:::i;:::-;7085:63;;7041:117;7197:2;7223:50;7265:7;7256:6;7245:9;7241:22;7223:50;:::i;:::-;7213:60;;7168:115;6822:468;;;;;:::o;7296:323::-;7352:6;7401:2;7389:9;7380:7;7376:23;7372:32;7369:119;;;7407:79;;:::i;:::-;7369:119;7527:1;7552:50;7594:7;7585:6;7574:9;7570:22;7552:50;:::i;:::-;7542:60;;7498:114;7296:323;;;;:::o;7625:1057::-;7729:6;7737;7745;7753;7761;7769;7818:3;7806:9;7797:7;7793:23;7789:33;7786:120;;;7825:79;;:::i;:::-;7786:120;7945:1;7970:53;8015:7;8006:6;7995:9;7991:22;7970:53;:::i;:::-;7960:63;;7916:117;8072:2;8098:53;8143:7;8134:6;8123:9;8119:22;8098:53;:::i;:::-;8088:63;;8043:118;8200:2;8226:53;8271:7;8262:6;8251:9;8247:22;8226:53;:::i;:::-;8216:63;;8171:118;8328:2;8354:53;8399:7;8390:6;8379:9;8375:22;8354:53;:::i;:::-;8344:63;;8299:118;8456:3;8483:53;8528:7;8519:6;8508:9;8504:22;8483:53;:::i;:::-;8473:63;;8427:119;8585:3;8612:53;8657:7;8648:6;8637:9;8633:22;8612:53;:::i;:::-;8602:63;;8556:119;7625:1057;;;;;;;;:::o;8688:329::-;8747:6;8796:2;8784:9;8775:7;8771:23;8767:32;8764:119;;;8802:79;;:::i;:::-;8764:119;8922:1;8947:53;8992:7;8983:6;8972:9;8968:22;8947:53;:::i;:::-;8937:63;;8893:117;8688:329;;;;:::o;9023:474::-;9091:6;9099;9148:2;9136:9;9127:7;9123:23;9119:32;9116:119;;;9154:79;;:::i;:::-;9116:119;9274:1;9299:53;9344:7;9335:6;9324:9;9320:22;9299:53;:::i;:::-;9289:63;;9245:117;9401:2;9427:53;9472:7;9463:6;9452:9;9448:22;9427:53;:::i;:::-;9417:63;;9372:118;9023:474;;;;;:::o;9503:180::-;9551:77;9548:1;9541:88;9648:4;9645:1;9638:15;9672:4;9669:1;9662:15;9689:320;9733:6;9770:1;9764:4;9760:12;9750:22;;9817:1;9811:4;9807:12;9838:18;9828:81;;9894:4;9886:6;9882:17;9872:27;;9828:81;9956:2;9948:6;9945:14;9925:18;9922:38;9919:84;;;9975:18;;:::i;:::-;9919:84;9740:269;9689:320;;;:::o;10015:227::-;10155:34;10151:1;10143:6;10139:14;10132:58;10224:10;10219:2;10211:6;10207:15;10200:35;10015:227;:::o;10248:366::-;10390:3;10411:67;10475:2;10470:3;10411:67;:::i;:::-;10404:74;;10487:93;10576:3;10487:93;:::i;:::-;10605:2;10600:3;10596:12;10589:19;;10248:366;;;:::o;10620:419::-;10786:4;10824:2;10813:9;10809:18;10801:26;;10873:9;10867:4;10863:20;10859:1;10848:9;10844:17;10837:47;10901:131;11027:4;10901:131;:::i;:::-;10893:139;;10620:419;;;:::o;11045:180::-;11093:77;11090:1;11083:88;11190:4;11187:1;11180:15;11214:4;11211:1;11204:15;11231:305;11271:3;11290:20;11308:1;11290:20;:::i;:::-;11285:25;;11324:20;11342:1;11324:20;:::i;:::-;11319:25;;11478:1;11410:66;11406:74;11403:1;11400:81;11397:107;;;11484:18;;:::i;:::-;11397:107;11528:1;11525;11521:9;11514:16;;11231:305;;;;:::o;11542:182::-;11682:34;11678:1;11670:6;11666:14;11659:58;11542:182;:::o;11730:366::-;11872:3;11893:67;11957:2;11952:3;11893:67;:::i;:::-;11886:74;;11969:93;12058:3;11969:93;:::i;:::-;12087:2;12082:3;12078:12;12071:19;;11730:366;;;:::o;12102:419::-;12268:4;12306:2;12295:9;12291:18;12283:26;;12355:9;12349:4;12345:20;12341:1;12330:9;12326:17;12319:47;12383:131;12509:4;12383:131;:::i;:::-;12375:139;;12102:419;;;:::o;12527:244::-;12667:34;12663:1;12655:6;12651:14;12644:58;12736:27;12731:2;12723:6;12719:15;12712:52;12527:244;:::o;12777:366::-;12919:3;12940:67;13004:2;12999:3;12940:67;:::i;:::-;12933:74;;13016:93;13105:3;13016:93;:::i;:::-;13134:2;13129:3;13125:12;13118:19;;12777:366;;;:::o;13149:419::-;13315:4;13353:2;13342:9;13338:18;13330:26;;13402:9;13396:4;13392:20;13388:1;13377:9;13373:17;13366:47;13430:131;13556:4;13430:131;:::i;:::-;13422:139;;13149:419;;;:::o;13574:224::-;13714:34;13710:1;13702:6;13698:14;13691:58;13783:7;13778:2;13770:6;13766:15;13759:32;13574:224;:::o;13804:366::-;13946:3;13967:67;14031:2;14026:3;13967:67;:::i;:::-;13960:74;;14043:93;14132:3;14043:93;:::i;:::-;14161:2;14156:3;14152:12;14145:19;;13804:366;;;:::o;14176:419::-;14342:4;14380:2;14369:9;14365:18;14357:26;;14429:9;14423:4;14419:20;14415:1;14404:9;14400:17;14393:47;14457:131;14583:4;14457:131;:::i;:::-;14449:139;;14176:419;;;:::o;14601:348::-;14641:7;14664:20;14682:1;14664:20;:::i;:::-;14659:25;;14698:20;14716:1;14698:20;:::i;:::-;14693:25;;14886:1;14818:66;14814:74;14811:1;14808:81;14803:1;14796:9;14789:17;14785:105;14782:131;;;14893:18;;:::i;:::-;14782:131;14941:1;14938;14934:9;14923:20;;14601:348;;;;:::o;14955:180::-;15003:77;15000:1;14993:88;15100:4;15097:1;15090:15;15124:4;15121:1;15114:15;15141:185;15181:1;15198:20;15216:1;15198:20;:::i;:::-;15193:25;;15232:20;15250:1;15232:20;:::i;:::-;15227:25;;15271:1;15261:35;;15276:18;;:::i;:::-;15261:35;15318:1;15315;15311:9;15306:14;;15141:185;;;;:::o;15332:240::-;15472:34;15468:1;15460:6;15456:14;15449:58;15541:23;15536:2;15528:6;15524:15;15517:48;15332:240;:::o;15578:366::-;15720:3;15741:67;15805:2;15800:3;15741:67;:::i;:::-;15734:74;;15817:93;15906:3;15817:93;:::i;:::-;15935:2;15930:3;15926:12;15919:19;;15578:366;;;:::o;15950:419::-;16116:4;16154:2;16143:9;16139:18;16131:26;;16203:9;16197:4;16193:20;16189:1;16178:9;16174:17;16167:47;16231:131;16357:4;16231:131;:::i;:::-;16223:139;;15950:419;;;:::o;16375:239::-;16515:34;16511:1;16503:6;16499:14;16492:58;16584:22;16579:2;16571:6;16567:15;16560:47;16375:239;:::o;16620:366::-;16762:3;16783:67;16847:2;16842:3;16783:67;:::i;:::-;16776:74;;16859:93;16948:3;16859:93;:::i;:::-;16977:2;16972:3;16968:12;16961:19;;16620:366;;;:::o;16992:419::-;17158:4;17196:2;17185:9;17181:18;17173:26;;17245:9;17239:4;17235:20;17231:1;17220:9;17216:17;17209:47;17273:131;17399:4;17273:131;:::i;:::-;17265:139;;16992:419;;;:::o;17417:225::-;17557:34;17553:1;17545:6;17541:14;17534:58;17626:8;17621:2;17613:6;17609:15;17602:33;17417:225;:::o;17648:366::-;17790:3;17811:67;17875:2;17870:3;17811:67;:::i;:::-;17804:74;;17887:93;17976:3;17887:93;:::i;:::-;18005:2;18000:3;17996:12;17989:19;;17648:366;;;:::o;18020:419::-;18186:4;18224:2;18213:9;18209:18;18201:26;;18273:9;18267:4;18263:20;18259:1;18248:9;18244:17;18237:47;18301:131;18427:4;18301:131;:::i;:::-;18293:139;;18020:419;;;:::o;18445:223::-;18585:34;18581:1;18573:6;18569:14;18562:58;18654:6;18649:2;18641:6;18637:15;18630:31;18445:223;:::o;18674:366::-;18816:3;18837:67;18901:2;18896:3;18837:67;:::i;:::-;18830:74;;18913:93;19002:3;18913:93;:::i;:::-;19031:2;19026:3;19022:12;19015:19;;18674:366;;;:::o;19046:419::-;19212:4;19250:2;19239:9;19235:18;19227:26;;19299:9;19293:4;19289:20;19285:1;19274:9;19270:17;19263:47;19327:131;19453:4;19327:131;:::i;:::-;19319:139;;19046:419;;;:::o;19471:221::-;19611:34;19607:1;19599:6;19595:14;19588:58;19680:4;19675:2;19667:6;19663:15;19656:29;19471:221;:::o;19698:366::-;19840:3;19861:67;19925:2;19920:3;19861:67;:::i;:::-;19854:74;;19937:93;20026:3;19937:93;:::i;:::-;20055:2;20050:3;20046:12;20039:19;;19698:366;;;:::o;20070:419::-;20236:4;20274:2;20263:9;20259:18;20251:26;;20323:9;20317:4;20313:20;20309:1;20298:9;20294:17;20287:47;20351:131;20477:4;20351:131;:::i;:::-;20343:139;;20070:419;;;:::o;20495:224::-;20635:34;20631:1;20623:6;20619:14;20612:58;20704:7;20699:2;20691:6;20687:15;20680:32;20495:224;:::o;20725:366::-;20867:3;20888:67;20952:2;20947:3;20888:67;:::i;:::-;20881:74;;20964:93;21053:3;20964:93;:::i;:::-;21082:2;21077:3;21073:12;21066:19;;20725:366;;;:::o;21097:419::-;21263:4;21301:2;21290:9;21286:18;21278:26;;21350:9;21344:4;21340:20;21336:1;21325:9;21321:17;21314:47;21378:131;21504:4;21378:131;:::i;:::-;21370:139;;21097:419;;;:::o;21522:222::-;21662:34;21658:1;21650:6;21646:14;21639:58;21731:5;21726:2;21718:6;21714:15;21707:30;21522:222;:::o;21750:366::-;21892:3;21913:67;21977:2;21972:3;21913:67;:::i;:::-;21906:74;;21989:93;22078:3;21989:93;:::i;:::-;22107:2;22102:3;22098:12;22091:19;;21750:366;;;:::o;22122:419::-;22288:4;22326:2;22315:9;22311:18;22303:26;;22375:9;22369:4;22365:20;22361:1;22350:9;22346:17;22339:47;22403:131;22529:4;22403:131;:::i;:::-;22395:139;;22122:419;;;:::o;22547:172::-;22687:24;22683:1;22675:6;22671:14;22664:48;22547:172;:::o;22725:366::-;22867:3;22888:67;22952:2;22947:3;22888:67;:::i;:::-;22881:74;;22964:93;23053:3;22964:93;:::i;:::-;23082:2;23077:3;23073:12;23066:19;;22725:366;;;:::o;23097:419::-;23263:4;23301:2;23290:9;23286:18;23278:26;;23350:9;23344:4;23340:20;23336:1;23325:9;23321:17;23314:47;23378:131;23504:4;23378:131;:::i;:::-;23370:139;;23097:419;;;:::o;23522:240::-;23662:34;23658:1;23650:6;23646:14;23639:58;23731:23;23726:2;23718:6;23714:15;23707:48;23522:240;:::o;23768:366::-;23910:3;23931:67;23995:2;23990:3;23931:67;:::i;:::-;23924:74;;24007:93;24096:3;24007:93;:::i;:::-;24125:2;24120:3;24116:12;24109:19;;23768:366;;;:::o;24140:419::-;24306:4;24344:2;24333:9;24329:18;24321:26;;24393:9;24387:4;24383:20;24379:1;24368:9;24364:17;24357:47;24421:131;24547:4;24421:131;:::i;:::-;24413:139;;24140:419;;;:::o;24565:169::-;24705:21;24701:1;24693:6;24689:14;24682:45;24565:169;:::o;24740:366::-;24882:3;24903:67;24967:2;24962:3;24903:67;:::i;:::-;24896:74;;24979:93;25068:3;24979:93;:::i;:::-;25097:2;25092:3;25088:12;25081:19;;24740:366;;;:::o;25112:419::-;25278:4;25316:2;25305:9;25301:18;25293:26;;25365:9;25359:4;25355:20;25351:1;25340:9;25336:17;25329:47;25393:131;25519:4;25393:131;:::i;:::-;25385:139;;25112:419;;;:::o;25537:241::-;25677:34;25673:1;25665:6;25661:14;25654:58;25746:24;25741:2;25733:6;25729:15;25722:49;25537:241;:::o;25784:366::-;25926:3;25947:67;26011:2;26006:3;25947:67;:::i;:::-;25940:74;;26023:93;26112:3;26023:93;:::i;:::-;26141:2;26136:3;26132:12;26125:19;;25784:366;;;:::o;26156:419::-;26322:4;26360:2;26349:9;26345:18;26337:26;;26409:9;26403:4;26399:20;26395:1;26384:9;26380:17;26373:47;26437:131;26563:4;26437:131;:::i;:::-;26429:139;;26156:419;;;:::o;26581:191::-;26621:4;26641:20;26659:1;26641:20;:::i;:::-;26636:25;;26675:20;26693:1;26675:20;:::i;:::-;26670:25;;26714:1;26711;26708:8;26705:34;;;26719:18;;:::i;:::-;26705:34;26764:1;26761;26757:9;26749:17;;26581:191;;;;:::o;26778:225::-;26918:34;26914:1;26906:6;26902:14;26895:58;26987:8;26982:2;26974:6;26970:15;26963:33;26778:225;:::o;27009:366::-;27151:3;27172:67;27236:2;27231:3;27172:67;:::i;:::-;27165:74;;27248:93;27337:3;27248:93;:::i;:::-;27366:2;27361:3;27357:12;27350:19;;27009:366;;;:::o;27381:419::-;27547:4;27585:2;27574:9;27570:18;27562:26;;27634:9;27628:4;27624:20;27620:1;27609:9;27605:17;27598:47;27662:131;27788:4;27662:131;:::i;:::-;27654:139;;27381:419;;;:::o;27806:147::-;27907:11;27944:3;27929:18;;27806:147;;;;:::o;27959:114::-;;:::o;28079:398::-;28238:3;28259:83;28340:1;28335:3;28259:83;:::i;:::-;28252:90;;28351:93;28440:3;28351:93;:::i;:::-;28469:1;28464:3;28460:11;28453:18;;28079:398;;;:::o;28483:379::-;28667:3;28689:147;28832:3;28689:147;:::i;:::-;28682:154;;28853:3;28846:10;;28483:379;;;:::o;28868:180::-;28916:77;28913:1;28906:88;29013:4;29010:1;29003:15;29037:4;29034:1;29027:15;29054:180;29102:77;29099:1;29092:88;29199:4;29196:1;29189:15;29223:4;29220:1;29213:15;29240:143;29297:5;29328:6;29322:13;29313:22;;29344:33;29371:5;29344:33;:::i;:::-;29240:143;;;;:::o;29389:351::-;29459:6;29508:2;29496:9;29487:7;29483:23;29479:32;29476:119;;;29514:79;;:::i;:::-;29476:119;29634:1;29659:64;29715:7;29706:6;29695:9;29691:22;29659:64;:::i;:::-;29649:74;;29605:128;29389:351;;;;:::o;29746:85::-;29791:7;29820:5;29809:16;;29746:85;;;:::o;29837:158::-;29895:9;29928:61;29946:42;29955:32;29981:5;29955:32;:::i;:::-;29946:42;:::i;:::-;29928:61;:::i;:::-;29915:74;;29837:158;;;:::o;30001:147::-;30096:45;30135:5;30096:45;:::i;:::-;30091:3;30084:58;30001:147;;:::o;30154:114::-;30221:6;30255:5;30249:12;30239:22;;30154:114;;;:::o;30274:184::-;30373:11;30407:6;30402:3;30395:19;30447:4;30442:3;30438:14;30423:29;;30274:184;;;;:::o;30464:132::-;30531:4;30554:3;30546:11;;30584:4;30579:3;30575:14;30567:22;;30464:132;;;:::o;30602:108::-;30679:24;30697:5;30679:24;:::i;:::-;30674:3;30667:37;30602:108;;:::o;30716:179::-;30785:10;30806:46;30848:3;30840:6;30806:46;:::i;:::-;30884:4;30879:3;30875:14;30861:28;;30716:179;;;;:::o;30901:113::-;30971:4;31003;30998:3;30994:14;30986:22;;30901:113;;;:::o;31050:732::-;31169:3;31198:54;31246:5;31198:54;:::i;:::-;31268:86;31347:6;31342:3;31268:86;:::i;:::-;31261:93;;31378:56;31428:5;31378:56;:::i;:::-;31457:7;31488:1;31473:284;31498:6;31495:1;31492:13;31473:284;;;31574:6;31568:13;31601:63;31660:3;31645:13;31601:63;:::i;:::-;31594:70;;31687:60;31740:6;31687:60;:::i;:::-;31677:70;;31533:224;31520:1;31517;31513:9;31508:14;;31473:284;;;31477:14;31773:3;31766:10;;31174:608;;;31050:732;;;;:::o;31788:831::-;32051:4;32089:3;32078:9;32074:19;32066:27;;32103:71;32171:1;32160:9;32156:17;32147:6;32103:71;:::i;:::-;32184:80;32260:2;32249:9;32245:18;32236:6;32184:80;:::i;:::-;32311:9;32305:4;32301:20;32296:2;32285:9;32281:18;32274:48;32339:108;32442:4;32433:6;32339:108;:::i;:::-;32331:116;;32457:72;32525:2;32514:9;32510:18;32501:6;32457:72;:::i;:::-;32539:73;32607:3;32596:9;32592:19;32583:6;32539:73;:::i;:::-;31788:831;;;;;;;;:::o;32625:720::-;32860:4;32898:3;32887:9;32883:19;32875:27;;32912:79;32988:1;32977:9;32973:17;32964:6;32912:79;:::i;:::-;33038:9;33032:4;33028:20;33023:2;33012:9;33008:18;33001:48;33066:108;33169:4;33160:6;33066:108;:::i;:::-;33058:116;;33184:72;33252:2;33241:9;33237:18;33228:6;33184:72;:::i;:::-;33266;33334:2;33323:9;33319:18;33310:6;33266:72;:::i;:::-;32625:720;;;;;;;:::o;33351:117::-;33460:1;33457;33450:12;33474:281;33557:27;33579:4;33557:27;:::i;:::-;33549:6;33545:40;33687:6;33675:10;33672:22;33651:18;33639:10;33636:34;33633:62;33630:88;;;33698:18;;:::i;:::-;33630:88;33738:10;33734:2;33727:22;33517:238;33474:281;;:::o;33761:129::-;33795:6;33822:20;;:::i;:::-;33812:30;;33851:33;33879:4;33871:6;33851:33;:::i;:::-;33761:129;;;:::o;33896:311::-;33973:4;34063:18;34055:6;34052:30;34049:56;;;34085:18;;:::i;:::-;34049:56;34135:4;34127:6;34123:17;34115:25;;34195:4;34189;34185:15;34177:23;;33896:311;;;:::o;34213:117::-;34322:1;34319;34312:12;34336:143;34393:5;34424:6;34418:13;34409:22;;34440:33;34467:5;34440:33;:::i;:::-;34336:143;;;;:::o;34502:732::-;34609:5;34634:81;34650:64;34707:6;34650:64;:::i;:::-;34634:81;:::i;:::-;34625:90;;34735:5;34764:6;34757:5;34750:21;34798:4;34791:5;34787:16;34780:23;;34851:4;34843:6;34839:17;34831:6;34827:30;34880:3;34872:6;34869:15;34866:122;;;34899:79;;:::i;:::-;34866:122;35014:6;34997:231;35031:6;35026:3;35023:15;34997:231;;;35106:3;35135:48;35179:3;35167:10;35135:48;:::i;:::-;35130:3;35123:61;35213:4;35208:3;35204:14;35197:21;;35073:155;35057:4;35052:3;35048:14;35041:21;;34997:231;;;35001:21;34615:619;;34502:732;;;;;:::o;35257:385::-;35339:5;35388:3;35381:4;35373:6;35369:17;35365:27;35355:122;;35396:79;;:::i;:::-;35355:122;35506:6;35500:13;35531:105;35632:3;35624:6;35617:4;35609:6;35605:17;35531:105;:::i;:::-;35522:114;;35345:297;35257:385;;;;:::o;35648:554::-;35743:6;35792:2;35780:9;35771:7;35767:23;35763:32;35760:119;;;35798:79;;:::i;:::-;35760:119;35939:1;35928:9;35924:17;35918:24;35969:18;35961:6;35958:30;35955:117;;;35991:79;;:::i;:::-;35955:117;36096:89;36177:7;36168:6;36157:9;36153:22;36096:89;:::i;:::-;36086:99;;35889:306;35648:554;;;;:::o

Swarm Source

ipfs://8b86d4082e8265408737fff1341b52fa7e0bfef78044a52fe6669d7ec69f10c0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.