ETH Price: $3,424.97 (-0.45%)
Gas: 3 Gwei

Token

Proof Of Social (POS)
 

Overview

Max Total Supply

1,000,000,000 POS

Holders

117

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,965,424.723690412387695742 POS

Value
$0.00
0xcb31c8b2ce9d229b1968ceb2516b2eb650151227
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ProofOfSocial

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 2022-11-07
*/

/**

TG: https://t.me/ProofOfSocialPortal
Website:https://proofofsocial.com/
Twitter:https://twitter.com/ProofOfSocial

**/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public liqWallet;

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

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

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

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

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

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

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

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

    constructor() ERC20("Proof Of Social", "POS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 2;

        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 2;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18; // 2% from total supply maxTransactionAmountTxn
        maxWallet = 20_000_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        marketingWallet = address(0x751C7ae09F7fecC780Ea02F6Ee580a18088Cca9A);
        devWallet = address(0xAd84778Be4fBF67C9b061E19950113048528378e);
        liqWallet = address(0xAd84778Be4fBF67C9b061E19950113048528378e);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

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

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

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

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

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

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

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateLiqWallet(address newLiqWallet) external onlyOwner {
        emit liqWalletUpdated(newLiqWallet, liqWallet);
        liqWallet = newLiqWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

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

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

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

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

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600f81526020017f50726f6f66204f6620536f6369616c00000000000000000000000000000000008152506040518060400160405280600381526020017f504f53000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000b48565b5080600490805190602001906200011b92919062000b48565b5050506200013e620001326200060860201b60201c565b6200061060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016a816001620006d660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000210919062000c62565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000278573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029e919062000c62565b6040518363ffffffff1660e01b8152600401620002bd92919062000ca5565b6020604051808303816000875af1158015620002dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000303919062000c62565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034b60a0516001620006d660201b60201c565b6200036060a0516001620007c060201b60201c565b60006002905060006001905060006002905060006002905060006001905060006002905060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006009819055506a108b2a2c28029094000000600b81905550612710600582620003cb919062000d0b565b620003d7919062000d9b565b600a8190555086601081905550856011819055508460128190555060125460115460105462000407919062000dd3565b62000413919062000dd3565b600f8190555083601481905550826015819055508160168190555060165460155460145462000443919062000dd3565b6200044f919062000dd3565b60138190555073751c7ae09f7fecc780ea02f6ee580a18088cca9a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ad84778be4fbf67c9b061e19950113048528378e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ad84778be4fbf67c9b061e19950113048528378e600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000576620005686200086160201b60201c565b60016200088b60201b60201c565b620005893060016200088b60201b60201c565b6200059e61dead60016200088b60201b60201c565b620005c0620005b26200086160201b60201c565b6001620006d660201b60201c565b620005d3306001620006d660201b60201c565b620005e861dead6001620006d660201b60201c565b620005fa3382620009c560201b60201c565b505050505050505062000ff2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006e66200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200070c6200086160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000765576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075c9062000e91565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089b6200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008c16200086160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200091a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009119062000e91565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b9919062000ed0565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2f9062000f3d565b60405180910390fd5b62000a4c6000838362000b3e60201b60201c565b806002600082825462000a60919062000dd3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ab7919062000dd3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1e919062000f70565b60405180910390a362000b3a6000838362000b4360201b60201c565b5050565b505050565b505050565b82805462000b569062000fbc565b90600052602060002090601f01602090048101928262000b7a576000855562000bc6565b82601f1062000b9557805160ff191683800117855562000bc6565b8280016001018555821562000bc6579182015b8281111562000bc557825182559160200191906001019062000ba8565b5b50905062000bd5919062000bd9565b5090565b5b8082111562000bf457600081600090555060010162000bda565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c2a8262000bfd565b9050919050565b62000c3c8162000c1d565b811462000c4857600080fd5b50565b60008151905062000c5c8162000c31565b92915050565b60006020828403121562000c7b5762000c7a62000bf8565b5b600062000c8b8482850162000c4b565b91505092915050565b62000c9f8162000c1d565b82525050565b600060408201905062000cbc600083018562000c94565b62000ccb602083018462000c94565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d188262000cd2565b915062000d258362000cd2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d615762000d6062000cdc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000da88262000cd2565b915062000db58362000cd2565b92508262000dc85762000dc762000d6c565b5b828204905092915050565b600062000de08262000cd2565b915062000ded8362000cd2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e255762000e2462000cdc565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e7960208362000e30565b915062000e868262000e41565b602082019050919050565b6000602082019050818103600083015262000eac8162000e6a565b9050919050565b60008115159050919050565b62000eca8162000eb3565b82525050565b600060208201905062000ee7600083018462000ebf565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f25601f8362000e30565b915062000f328262000eed565b602082019050919050565b6000602082019050818103600083015262000f588162000f16565b9050919050565b62000f6a8162000cd2565b82525050565b600060208201905062000f87600083018462000f5f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fd557607f821691505b6020821081141562000fec5762000feb62000f8d565b5b50919050565b60805160a051615243620010506000396000818161127301528181611a9e0152612a2c015260008181610e3b015281816129d401528181613ac801528181613ba901528181613bd001528181613c6c0152613c9301526152436000f3fe60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cbf578063f2fde38b14610cea578063f637434214610d13578063f8b45b0514610d3e57610376565b8063dd62ed3e14610c2c578063e2f4560514610c69578063e884f26014610c9457610376565b8063c876d0b9116100d1578063c876d0b914610b6e578063c8c8ebe414610b99578063d257b34f14610bc4578063d85ba06314610c0157610376565b8063c024666814610af3578063c17b5b8c14610b1c578063c18bc19514610b4557610376565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb14610a25578063aacebbe314610a62578063b62496f514610a8b578063bbc0c74214610ac857610376565b80639fccce3214610992578063a0d82dc5146109bd578063a457c2d7146109e857610376565b8063924de9b7116101a0578063924de9b7146108ea57806395d89b41146109135780639a7a23d61461093e5780639c3b4fdc1461096757610376565b80638da5cb5b146108695780638ea5220f1461089457806392136913146108bf57610376565b80634a62bb65116102a057806373dd858c1161023e57806375f0a8741161021857806375f0a874146107d35780637bce5a04146107fe5780638095d564146108295780638a8c523c1461085257610376565b806373dd858c14610756578063751039fc1461077f5780637571336a146107aa57610376565b80636a486a8e1161027a5780636a486a8e146106ac5780636ddd1713146106d757806370a0823114610702578063715018a61461073f57610376565b80634a62bb65146106195780634ec39ba9146106445780634fbee1931461066f57610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d69565b60405161039d9190613dfb565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613eb6565b610dfb565b6040516103da9190613f11565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f2c565b610e19565b6040516104179190613f11565b60405180910390f35b34801561042c57600080fd5b50610435610e39565b6040516104429190613fb8565b60405180910390f35b34801561045757600080fd5b50610460610e5d565b60405161046d9190613fe2565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613f2c565b610e67565b005b3480156104ab57600080fd5b506104b4610fa3565b6040516104c19190613fe2565b60405180910390f35b3480156104d657600080fd5b506104df610fa9565b6040516104ec9190613fe2565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190613ffd565b610faf565b005b34801561052a57600080fd5b506105456004803603810190610540919061402a565b6110be565b6040516105529190613f11565b60405180910390f35b34801561056757600080fd5b506105706111b6565b60405161057d919061408c565b60405180910390f35b34801561059257600080fd5b5061059b6111bc565b6040516105a891906140c3565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613eb6565b6111c5565b6040516105e59190613f11565b60405180910390f35b3480156105fa57600080fd5b50610603611271565b604051610610919061408c565b60405180910390f35b34801561062557600080fd5b5061062e611295565b60405161063b9190613f11565b60405180910390f35b34801561065057600080fd5b506106596112a8565b604051610666919061408c565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613f2c565b6112ce565b6040516106a39190613f11565b60405180910390f35b3480156106b857600080fd5b506106c1611324565b6040516106ce9190613fe2565b60405180910390f35b3480156106e357600080fd5b506106ec61132a565b6040516106f99190613f11565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613f2c565b61133d565b6040516107369190613fe2565b60405180910390f35b34801561074b57600080fd5b50610754611385565b005b34801561076257600080fd5b5061077d60048036038101906107789190613f2c565b61140d565b005b34801561078b57600080fd5b50610794611549565b6040516107a19190613f11565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061410a565b6115e9565b005b3480156107df57600080fd5b506107e86116c0565b6040516107f5919061408c565b60405180910390f35b34801561080a57600080fd5b506108136116e6565b6040516108209190613fe2565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b919061414a565b6116ec565b005b34801561085e57600080fd5b506108676117eb565b005b34801561087557600080fd5b5061087e61189f565b60405161088b919061408c565b60405180910390f35b3480156108a057600080fd5b506108a96118c9565b6040516108b6919061408c565b60405180910390f35b3480156108cb57600080fd5b506108d46118ef565b6040516108e19190613fe2565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061419d565b6118f5565b005b34801561091f57600080fd5b5061092861198e565b6040516109359190613dfb565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061410a565b611a20565b005b34801561097357600080fd5b5061097c611b39565b6040516109899190613fe2565b60405180910390f35b34801561099e57600080fd5b506109a7611b3f565b6040516109b49190613fe2565b60405180910390f35b3480156109c957600080fd5b506109d2611b45565b6040516109df9190613fe2565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613eb6565b611b4b565b604051610a1c9190613f11565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613eb6565b611c36565b604051610a599190613f11565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190613f2c565b611c54565b005b348015610a9757600080fd5b50610ab26004803603810190610aad9190613f2c565b611d90565b604051610abf9190613f11565b60405180910390f35b348015610ad457600080fd5b50610add611db0565b604051610aea9190613f11565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b15919061410a565b611dc3565b005b348015610b2857600080fd5b50610b436004803603810190610b3e919061414a565b611ee8565b005b348015610b5157600080fd5b50610b6c6004803603810190610b679190613ffd565b611fe7565b005b348015610b7a57600080fd5b50610b836120f6565b604051610b909190613f11565b60405180910390f35b348015610ba557600080fd5b50610bae612109565b604051610bbb9190613fe2565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190613ffd565b61210f565b604051610bf89190613f11565b60405180910390f35b348015610c0d57600080fd5b50610c16612264565b604051610c239190613fe2565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e91906141ca565b61226a565b604051610c609190613fe2565b60405180910390f35b348015610c7557600080fd5b50610c7e6122f1565b604051610c8b9190613fe2565b60405180910390f35b348015610ca057600080fd5b50610ca96122f7565b604051610cb69190613f11565b60405180910390f35b348015610ccb57600080fd5b50610cd4612397565b604051610ce19190613fe2565b60405180910390f35b348015610cf657600080fd5b50610d116004803603810190610d0c9190613f2c565b61239d565b005b348015610d1f57600080fd5b50610d28612495565b604051610d359190613fe2565b60405180910390f35b348015610d4a57600080fd5b50610d5361249b565b604051610d609190613fe2565b60405180910390f35b606060038054610d7890614239565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490614239565b8015610df15780601f10610dc657610100808354040283529160200191610df1565b820191906000526020600020905b815481529060010190602001808311610dd457829003601f168201915b5050505050905090565b6000610e0f610e086124a1565b84846124a9565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e6f6124a1565b73ffffffffffffffffffffffffffffffffffffffff16610e8d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda906142b7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fb76124a1565b73ffffffffffffffffffffffffffffffffffffffff16610fd561189f565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906142b7565b60405180910390fd5b670de0b6b3a76400006103e86001611041610e5d565b61104b9190614306565b611055919061438f565b61105f919061438f565b8110156110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890614432565b60405180910390fd5b670de0b6b3a7640000816110b59190614306565b60098190555050565b60006110cb848484612674565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111166124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906144c4565b60405180910390fd5b6111aa856111a26124a1565b8584036124a9565b60019150509392505050565b61dead81565b60006012905090565b60006112676111d26124a1565b8484600160006111e06124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126291906144e4565b6124a9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138d6124a1565b73ffffffffffffffffffffffffffffffffffffffff166113ab61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906142b7565b60405180910390fd5b61140b600061330e565b565b6114156124a1565b73ffffffffffffffffffffffffffffffffffffffff1661143361189f565b73ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906142b7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006115536124a1565b73ffffffffffffffffffffffffffffffffffffffff1661157161189f565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906142b7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115f16124a1565b73ffffffffffffffffffffffffffffffffffffffff1661160f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c906142b7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6116f46124a1565b73ffffffffffffffffffffffffffffffffffffffff1661171261189f565b73ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f906142b7565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461179091906144e4565b61179a91906144e4565b600f81905550600b600f5411156117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd90614586565b60405180910390fd5b505050565b6117f36124a1565b73ffffffffffffffffffffffffffffffffffffffff1661181161189f565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906142b7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118fd6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661191b61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611968906142b7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461199d90614239565b80601f01602080910402602001604051908101604052809291908181526020018280546119c990614239565b8015611a165780601f106119eb57610100808354040283529160200191611a16565b820191906000526020600020905b8154815290600101906020018083116119f957829003601f168201915b5050505050905090565b611a286124a1565b73ffffffffffffffffffffffffffffffffffffffff16611a4661189f565b73ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906142b7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614618565b60405180910390fd5b611b3582826133d4565b5050565b60125481565b60195481565b60165481565b60008060016000611b5a6124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906146aa565b60405180910390fd5b611c2b611c226124a1565b858584036124a9565b600191505092915050565b6000611c4a611c436124a1565b8484612674565b6001905092915050565b611c5c6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611c7a61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906142b7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611dcb6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611de961189f565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e36906142b7565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611edc9190613f11565b60405180910390a25050565b611ef06124a1565b73ffffffffffffffffffffffffffffffffffffffff16611f0e61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906142b7565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611f8c91906144e4565b611f9691906144e4565b60138190555060636013541115611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990614586565b60405180910390fd5b505050565b611fef6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661200d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142b7565b60405180910390fd5b670de0b6b3a76400006103e86005612079610e5d565b6120839190614306565b61208d919061438f565b612097919061438f565b8110156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d09061473c565b60405180910390fd5b670de0b6b3a7640000816120ed9190614306565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b60006121196124a1565b73ffffffffffffffffffffffffffffffffffffffff1661213761189f565b73ffffffffffffffffffffffffffffffffffffffff161461218d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612184906142b7565b60405180910390fd5b620186a0600161219b610e5d565b6121a59190614306565b6121af919061438f565b8210156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906147ce565b60405180910390fd5b6103e860056121fe610e5d565b6122089190614306565b612212919061438f565b821115612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614860565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006123016124a1565b73ffffffffffffffffffffffffffffffffffffffff1661231f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c906142b7565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123a56124a1565b73ffffffffffffffffffffffffffffffffffffffff166123c361189f565b73ffffffffffffffffffffffffffffffffffffffff1614612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906142b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612480906148f2565b60405180910390fd5b6124928161330e565b50565b60155481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126679190613fe2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90614b3a565b60405180910390fd5b600081141561276e5761276983836000613475565b613309565b600c60009054906101000a900460ff1615612e315761278b61189f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127f957506127c961189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561286c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128855750600560149054906101000a900460ff16155b15612e3057600c60019054906101000a900460ff1661297f57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061293f5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614ba6565b60405180910390fd5b5b600e60009054906101000a900460ff1615612b475761299c61189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a2357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a7b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b465743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614c5e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bea5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9157600954811115612c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2b90614cf0565b60405180910390fd5b600b54612c408361133d565b82612c4b91906144e4565b1115612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614d5c565b60405180910390fd5b612e2f565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d345750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8357600954811115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614dee565b60405180910390fd5b612e2e565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e2d57600b54612de08361133d565b82612deb91906144e4565b1115612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2390614d5c565b60405180910390fd5b5b5b5b5b5b6000612e3c3061133d565b90506000600a548210159050808015612e615750600c60029054906101000a900460ff165b8015612e7a5750600560149054906101000a900460ff16155b8015612ed05750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f265750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f7c5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc0576001600560146101000a81548160ff021916908315150217905550612fa46136f6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130765750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561308057600090505b600081156132f957601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e357506000601354115b156131b0576131106064613102601354886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050601354601554826131239190614306565b61312d919061438f565b6018600082825461313e91906144e4565b92505081905550601354601654826131569190614306565b613160919061438f565b6019600082825461317191906144e4565b92505081905550601354601454826131899190614306565b613193919061438f565b601760008282546131a491906144e4565b925050819055506132d5565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320b57506000600f54115b156132d457613238606461322a600f54886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600f546011548261324b9190614306565b613255919061438f565b6018600082825461326691906144e4565b92505081905550600f546012548261327e9190614306565b613288919061438f565b6019600082825461329991906144e4565b92505081905550600f54601054826132b19190614306565b6132bb919061438f565b601760008282546132cc91906144e4565b925050819055505b5b60008111156132ea576132e9873083613475565b5b80856132f69190614e0e565b94505b613304878787613475565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90614b3a565b60405180910390fd5b613560838383613a09565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dd90614eb4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461367991906144e4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136dd9190613fe2565b60405180910390a36136f0848484613a0e565b50505050565b60006137013061133d565b9050600060195460175460185461371891906144e4565b61372291906144e4565b90506000808314806137345750600082145b15613741575050506139db565b6014600a546137509190614306565b831115613769576014600a546137669190614306565b92505b60006002836018548661377c9190614306565b613786919061438f565b613790919061438f565b905060006137a78286613a1390919063ffffffff16565b905060004790506137b782613a29565b60006137cc8247613a1390919063ffffffff16565b905060006137f7876137e9601754856139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600061382288613814601954866139dd90919063ffffffff16565b6139f390919063ffffffff16565b905060008183856138339190614e0e565b61383d9190614e0e565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161389d90614f05565b60006040518083038185875af1925050503d80600081146138da576040519150601f19603f3d011682016040523d82523d6000602084013e6138df565b606091505b5050809850506000871180156138f55750600081115b15613942576139048782613c66565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161393993929190614f1a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398890614f05565b60006040518083038185875af1925050503d80600081146139c5576040519150601f19603f3d011682016040523d82523d6000602084013e6139ca565b606091505b505080985050505050505050505050505b565b600081836139eb9190614306565b905092915050565b60008183613a01919061438f565b905092915050565b505050565b505050565b60008183613a219190614e0e565b905092915050565b6000600267ffffffffffffffff811115613a4657613a45614f51565b5b604051908082528060200260200182016040528015613a745781602001602082028036833780820191505090505b5090503081600081518110613a8c57613a8b614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b559190614fc4565b81600181518110613b6957613b68614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bce307f0000000000000000000000000000000000000000000000000000000000000000846124a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c309594939291906150ea565b600060405180830381600087803b158015613c4a57600080fd5b505af1158015613c5e573d6000803e3d6000fd5b505050505050565b613c91307f0000000000000000000000000000000000000000000000000000000000000000846124a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613d1896959493929190615144565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b91906151ba565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d9c578082015181840152602081019050613d81565b83811115613dab576000848401525b50505050565b6000601f19601f8301169050919050565b6000613dcd82613d62565b613dd78185613d6d565b9350613de7818560208601613d7e565b613df081613db1565b840191505092915050565b60006020820190508181036000830152613e158184613dc2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e4d82613e22565b9050919050565b613e5d81613e42565b8114613e6857600080fd5b50565b600081359050613e7a81613e54565b92915050565b6000819050919050565b613e9381613e80565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b60008060408385031215613ecd57613ecc613e1d565b5b6000613edb85828601613e6b565b9250506020613eec85828601613ea1565b9150509250929050565b60008115159050919050565b613f0b81613ef6565b82525050565b6000602082019050613f266000830184613f02565b92915050565b600060208284031215613f4257613f41613e1d565b5b6000613f5084828501613e6b565b91505092915050565b6000819050919050565b6000613f7e613f79613f7484613e22565b613f59565b613e22565b9050919050565b6000613f9082613f63565b9050919050565b6000613fa282613f85565b9050919050565b613fb281613f97565b82525050565b6000602082019050613fcd6000830184613fa9565b92915050565b613fdc81613e80565b82525050565b6000602082019050613ff76000830184613fd3565b92915050565b60006020828403121561401357614012613e1d565b5b600061402184828501613ea1565b91505092915050565b60008060006060848603121561404357614042613e1d565b5b600061405186828701613e6b565b935050602061406286828701613e6b565b925050604061407386828701613ea1565b9150509250925092565b61408681613e42565b82525050565b60006020820190506140a1600083018461407d565b92915050565b600060ff82169050919050565b6140bd816140a7565b82525050565b60006020820190506140d860008301846140b4565b92915050565b6140e781613ef6565b81146140f257600080fd5b50565b600081359050614104816140de565b92915050565b6000806040838503121561412157614120613e1d565b5b600061412f85828601613e6b565b9250506020614140858286016140f5565b9150509250929050565b60008060006060848603121561416357614162613e1d565b5b600061417186828701613ea1565b935050602061418286828701613ea1565b925050604061419386828701613ea1565b9150509250925092565b6000602082840312156141b3576141b2613e1d565b5b60006141c1848285016140f5565b91505092915050565b600080604083850312156141e1576141e0613e1d565b5b60006141ef85828601613e6b565b925050602061420085828601613e6b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425157607f821691505b602082108114156142655761426461420a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a1602083613d6d565b91506142ac8261426b565b602082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431182613e80565b915061431c83613e80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614355576143546142d7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439a82613e80565b91506143a583613e80565b9250826143b5576143b4614360565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061441c602f83613d6d565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144ae602883613d6d565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b60006144ef82613e80565b91506144fa83613e80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561452f5761452e6142d7565b5b828201905092915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614570601d83613d6d565b915061457b8261453a565b602082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614602603983613d6d565b915061460d826145a6565b604082019050919050565b60006020820190508181036000830152614631816145f5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614694602583613d6d565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614726602483613d6d565b9150614731826146ca565b604082019050919050565b6000602082019050818103600083015261475581614719565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147b8603583613d6d565b91506147c38261475c565b604082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061484a603483613d6d565b9150614855826147ee565b604082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148dc602683613d6d565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613d6d565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613d6d565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613d6d565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613d6d565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b90601683613d6d565b9150614b9b82614b5a565b602082019050919050565b60006020820190508181036000830152614bbf81614b83565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c48604983613d6d565b9150614c5382614bc6565b606082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614cda603583613d6d565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d46601383613d6d565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614dd8603683613d6d565b9150614de382614d7c565b604082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b6000614e1982613e80565b9150614e2483613e80565b925082821015614e3757614e366142d7565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e9e602683613d6d565b9150614ea982614e42565b604082019050919050565b60006020820190508181036000830152614ecd81614e91565b9050919050565b600081905092915050565b50565b6000614eef600083614ed4565b9150614efa82614edf565b600082019050919050565b6000614f1082614ee2565b9150819050919050565b6000606082019050614f2f6000830186613fd3565b614f3c6020830185613fd3565b614f496040830184613fd3565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614fbe81613e54565b92915050565b600060208284031215614fda57614fd9613e1d565b5b6000614fe884828501614faf565b91505092915050565b6000819050919050565b600061501661501161500c84614ff1565b613f59565b613e80565b9050919050565b61502681614ffb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506181613e42565b82525050565b60006150738383615058565b60208301905092915050565b6000602082019050919050565b60006150978261502c565b6150a18185615037565b93506150ac83615048565b8060005b838110156150dd5781516150c48882615067565b97506150cf8361507f565b9250506001810190506150b0565b5085935050505092915050565b600060a0820190506150ff6000830188613fd3565b61510c602083018761501d565b818103604083015261511e818661508c565b905061512d606083018561407d565b61513a6080830184613fd3565b9695505050505050565b600060c082019050615159600083018961407d565b6151666020830188613fd3565b615173604083018761501d565b615180606083018661501d565b61518d608083018561407d565b61519a60a0830184613fd3565b979650505050505050565b6000815190506151b481613e8a565b92915050565b6000806000606084860312156151d3576151d2613e1d565b5b60006151e1868287016151a5565b93505060206151f2868287016151a5565b9250506040615203868287016151a5565b915050925092509256fea2646970667358221220d3050d264d0a0793e40ee6e8dbfc6cf39daf5d90aa9ff4da11bad43bebc055e364736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cbf578063f2fde38b14610cea578063f637434214610d13578063f8b45b0514610d3e57610376565b8063dd62ed3e14610c2c578063e2f4560514610c69578063e884f26014610c9457610376565b8063c876d0b9116100d1578063c876d0b914610b6e578063c8c8ebe414610b99578063d257b34f14610bc4578063d85ba06314610c0157610376565b8063c024666814610af3578063c17b5b8c14610b1c578063c18bc19514610b4557610376565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb14610a25578063aacebbe314610a62578063b62496f514610a8b578063bbc0c74214610ac857610376565b80639fccce3214610992578063a0d82dc5146109bd578063a457c2d7146109e857610376565b8063924de9b7116101a0578063924de9b7146108ea57806395d89b41146109135780639a7a23d61461093e5780639c3b4fdc1461096757610376565b80638da5cb5b146108695780638ea5220f1461089457806392136913146108bf57610376565b80634a62bb65116102a057806373dd858c1161023e57806375f0a8741161021857806375f0a874146107d35780637bce5a04146107fe5780638095d564146108295780638a8c523c1461085257610376565b806373dd858c14610756578063751039fc1461077f5780637571336a146107aa57610376565b80636a486a8e1161027a5780636a486a8e146106ac5780636ddd1713146106d757806370a0823114610702578063715018a61461073f57610376565b80634a62bb65146106195780634ec39ba9146106445780634fbee1931461066f57610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d69565b60405161039d9190613dfb565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613eb6565b610dfb565b6040516103da9190613f11565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f2c565b610e19565b6040516104179190613f11565b60405180910390f35b34801561042c57600080fd5b50610435610e39565b6040516104429190613fb8565b60405180910390f35b34801561045757600080fd5b50610460610e5d565b60405161046d9190613fe2565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613f2c565b610e67565b005b3480156104ab57600080fd5b506104b4610fa3565b6040516104c19190613fe2565b60405180910390f35b3480156104d657600080fd5b506104df610fa9565b6040516104ec9190613fe2565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190613ffd565b610faf565b005b34801561052a57600080fd5b506105456004803603810190610540919061402a565b6110be565b6040516105529190613f11565b60405180910390f35b34801561056757600080fd5b506105706111b6565b60405161057d919061408c565b60405180910390f35b34801561059257600080fd5b5061059b6111bc565b6040516105a891906140c3565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613eb6565b6111c5565b6040516105e59190613f11565b60405180910390f35b3480156105fa57600080fd5b50610603611271565b604051610610919061408c565b60405180910390f35b34801561062557600080fd5b5061062e611295565b60405161063b9190613f11565b60405180910390f35b34801561065057600080fd5b506106596112a8565b604051610666919061408c565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613f2c565b6112ce565b6040516106a39190613f11565b60405180910390f35b3480156106b857600080fd5b506106c1611324565b6040516106ce9190613fe2565b60405180910390f35b3480156106e357600080fd5b506106ec61132a565b6040516106f99190613f11565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613f2c565b61133d565b6040516107369190613fe2565b60405180910390f35b34801561074b57600080fd5b50610754611385565b005b34801561076257600080fd5b5061077d60048036038101906107789190613f2c565b61140d565b005b34801561078b57600080fd5b50610794611549565b6040516107a19190613f11565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061410a565b6115e9565b005b3480156107df57600080fd5b506107e86116c0565b6040516107f5919061408c565b60405180910390f35b34801561080a57600080fd5b506108136116e6565b6040516108209190613fe2565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b919061414a565b6116ec565b005b34801561085e57600080fd5b506108676117eb565b005b34801561087557600080fd5b5061087e61189f565b60405161088b919061408c565b60405180910390f35b3480156108a057600080fd5b506108a96118c9565b6040516108b6919061408c565b60405180910390f35b3480156108cb57600080fd5b506108d46118ef565b6040516108e19190613fe2565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061419d565b6118f5565b005b34801561091f57600080fd5b5061092861198e565b6040516109359190613dfb565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061410a565b611a20565b005b34801561097357600080fd5b5061097c611b39565b6040516109899190613fe2565b60405180910390f35b34801561099e57600080fd5b506109a7611b3f565b6040516109b49190613fe2565b60405180910390f35b3480156109c957600080fd5b506109d2611b45565b6040516109df9190613fe2565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613eb6565b611b4b565b604051610a1c9190613f11565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613eb6565b611c36565b604051610a599190613f11565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190613f2c565b611c54565b005b348015610a9757600080fd5b50610ab26004803603810190610aad9190613f2c565b611d90565b604051610abf9190613f11565b60405180910390f35b348015610ad457600080fd5b50610add611db0565b604051610aea9190613f11565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b15919061410a565b611dc3565b005b348015610b2857600080fd5b50610b436004803603810190610b3e919061414a565b611ee8565b005b348015610b5157600080fd5b50610b6c6004803603810190610b679190613ffd565b611fe7565b005b348015610b7a57600080fd5b50610b836120f6565b604051610b909190613f11565b60405180910390f35b348015610ba557600080fd5b50610bae612109565b604051610bbb9190613fe2565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190613ffd565b61210f565b604051610bf89190613f11565b60405180910390f35b348015610c0d57600080fd5b50610c16612264565b604051610c239190613fe2565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e91906141ca565b61226a565b604051610c609190613fe2565b60405180910390f35b348015610c7557600080fd5b50610c7e6122f1565b604051610c8b9190613fe2565b60405180910390f35b348015610ca057600080fd5b50610ca96122f7565b604051610cb69190613f11565b60405180910390f35b348015610ccb57600080fd5b50610cd4612397565b604051610ce19190613fe2565b60405180910390f35b348015610cf657600080fd5b50610d116004803603810190610d0c9190613f2c565b61239d565b005b348015610d1f57600080fd5b50610d28612495565b604051610d359190613fe2565b60405180910390f35b348015610d4a57600080fd5b50610d5361249b565b604051610d609190613fe2565b60405180910390f35b606060038054610d7890614239565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490614239565b8015610df15780601f10610dc657610100808354040283529160200191610df1565b820191906000526020600020905b815481529060010190602001808311610dd457829003601f168201915b5050505050905090565b6000610e0f610e086124a1565b84846124a9565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e6f6124a1565b73ffffffffffffffffffffffffffffffffffffffff16610e8d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda906142b7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fb76124a1565b73ffffffffffffffffffffffffffffffffffffffff16610fd561189f565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906142b7565b60405180910390fd5b670de0b6b3a76400006103e86001611041610e5d565b61104b9190614306565b611055919061438f565b61105f919061438f565b8110156110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890614432565b60405180910390fd5b670de0b6b3a7640000816110b59190614306565b60098190555050565b60006110cb848484612674565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111166124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906144c4565b60405180910390fd5b6111aa856111a26124a1565b8584036124a9565b60019150509392505050565b61dead81565b60006012905090565b60006112676111d26124a1565b8484600160006111e06124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126291906144e4565b6124a9565b6001905092915050565b7f000000000000000000000000f8106a5197ebc119da228eb64d2640f077bc392f81565b600c60009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138d6124a1565b73ffffffffffffffffffffffffffffffffffffffff166113ab61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906142b7565b60405180910390fd5b61140b600061330e565b565b6114156124a1565b73ffffffffffffffffffffffffffffffffffffffff1661143361189f565b73ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906142b7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006115536124a1565b73ffffffffffffffffffffffffffffffffffffffff1661157161189f565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906142b7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115f16124a1565b73ffffffffffffffffffffffffffffffffffffffff1661160f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c906142b7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6116f46124a1565b73ffffffffffffffffffffffffffffffffffffffff1661171261189f565b73ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f906142b7565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461179091906144e4565b61179a91906144e4565b600f81905550600b600f5411156117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd90614586565b60405180910390fd5b505050565b6117f36124a1565b73ffffffffffffffffffffffffffffffffffffffff1661181161189f565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906142b7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118fd6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661191b61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611968906142b7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461199d90614239565b80601f01602080910402602001604051908101604052809291908181526020018280546119c990614239565b8015611a165780601f106119eb57610100808354040283529160200191611a16565b820191906000526020600020905b8154815290600101906020018083116119f957829003601f168201915b5050505050905090565b611a286124a1565b73ffffffffffffffffffffffffffffffffffffffff16611a4661189f565b73ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906142b7565b60405180910390fd5b7f000000000000000000000000f8106a5197ebc119da228eb64d2640f077bc392f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614618565b60405180910390fd5b611b3582826133d4565b5050565b60125481565b60195481565b60165481565b60008060016000611b5a6124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906146aa565b60405180910390fd5b611c2b611c226124a1565b858584036124a9565b600191505092915050565b6000611c4a611c436124a1565b8484612674565b6001905092915050565b611c5c6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611c7a61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906142b7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611dcb6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611de961189f565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e36906142b7565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611edc9190613f11565b60405180910390a25050565b611ef06124a1565b73ffffffffffffffffffffffffffffffffffffffff16611f0e61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906142b7565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611f8c91906144e4565b611f9691906144e4565b60138190555060636013541115611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990614586565b60405180910390fd5b505050565b611fef6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661200d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142b7565b60405180910390fd5b670de0b6b3a76400006103e86005612079610e5d565b6120839190614306565b61208d919061438f565b612097919061438f565b8110156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d09061473c565b60405180910390fd5b670de0b6b3a7640000816120ed9190614306565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b60006121196124a1565b73ffffffffffffffffffffffffffffffffffffffff1661213761189f565b73ffffffffffffffffffffffffffffffffffffffff161461218d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612184906142b7565b60405180910390fd5b620186a0600161219b610e5d565b6121a59190614306565b6121af919061438f565b8210156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906147ce565b60405180910390fd5b6103e860056121fe610e5d565b6122089190614306565b612212919061438f565b821115612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614860565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006123016124a1565b73ffffffffffffffffffffffffffffffffffffffff1661231f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c906142b7565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123a56124a1565b73ffffffffffffffffffffffffffffffffffffffff166123c361189f565b73ffffffffffffffffffffffffffffffffffffffff1614612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906142b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612480906148f2565b60405180910390fd5b6124928161330e565b50565b60155481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126679190613fe2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90614b3a565b60405180910390fd5b600081141561276e5761276983836000613475565b613309565b600c60009054906101000a900460ff1615612e315761278b61189f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127f957506127c961189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561286c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128855750600560149054906101000a900460ff16155b15612e3057600c60019054906101000a900460ff1661297f57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061293f5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614ba6565b60405180910390fd5b5b600e60009054906101000a900460ff1615612b475761299c61189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a2357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a7b57507f000000000000000000000000f8106a5197ebc119da228eb64d2640f077bc392f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b465743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614c5e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bea5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9157600954811115612c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2b90614cf0565b60405180910390fd5b600b54612c408361133d565b82612c4b91906144e4565b1115612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614d5c565b60405180910390fd5b612e2f565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d345750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8357600954811115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614dee565b60405180910390fd5b612e2e565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e2d57600b54612de08361133d565b82612deb91906144e4565b1115612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2390614d5c565b60405180910390fd5b5b5b5b5b5b6000612e3c3061133d565b90506000600a548210159050808015612e615750600c60029054906101000a900460ff165b8015612e7a5750600560149054906101000a900460ff16155b8015612ed05750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f265750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f7c5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc0576001600560146101000a81548160ff021916908315150217905550612fa46136f6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130765750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561308057600090505b600081156132f957601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e357506000601354115b156131b0576131106064613102601354886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050601354601554826131239190614306565b61312d919061438f565b6018600082825461313e91906144e4565b92505081905550601354601654826131569190614306565b613160919061438f565b6019600082825461317191906144e4565b92505081905550601354601454826131899190614306565b613193919061438f565b601760008282546131a491906144e4565b925050819055506132d5565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320b57506000600f54115b156132d457613238606461322a600f54886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600f546011548261324b9190614306565b613255919061438f565b6018600082825461326691906144e4565b92505081905550600f546012548261327e9190614306565b613288919061438f565b6019600082825461329991906144e4565b92505081905550600f54601054826132b19190614306565b6132bb919061438f565b601760008282546132cc91906144e4565b925050819055505b5b60008111156132ea576132e9873083613475565b5b80856132f69190614e0e565b94505b613304878787613475565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90614b3a565b60405180910390fd5b613560838383613a09565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dd90614eb4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461367991906144e4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136dd9190613fe2565b60405180910390a36136f0848484613a0e565b50505050565b60006137013061133d565b9050600060195460175460185461371891906144e4565b61372291906144e4565b90506000808314806137345750600082145b15613741575050506139db565b6014600a546137509190614306565b831115613769576014600a546137669190614306565b92505b60006002836018548661377c9190614306565b613786919061438f565b613790919061438f565b905060006137a78286613a1390919063ffffffff16565b905060004790506137b782613a29565b60006137cc8247613a1390919063ffffffff16565b905060006137f7876137e9601754856139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600061382288613814601954866139dd90919063ffffffff16565b6139f390919063ffffffff16565b905060008183856138339190614e0e565b61383d9190614e0e565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161389d90614f05565b60006040518083038185875af1925050503d80600081146138da576040519150601f19603f3d011682016040523d82523d6000602084013e6138df565b606091505b5050809850506000871180156138f55750600081115b15613942576139048782613c66565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161393993929190614f1a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398890614f05565b60006040518083038185875af1925050503d80600081146139c5576040519150601f19603f3d011682016040523d82523d6000602084013e6139ca565b606091505b505080985050505050505050505050505b565b600081836139eb9190614306565b905092915050565b60008183613a01919061438f565b905092915050565b505050565b505050565b60008183613a219190614e0e565b905092915050565b6000600267ffffffffffffffff811115613a4657613a45614f51565b5b604051908082528060200260200182016040528015613a745781602001602082028036833780820191505090505b5090503081600081518110613a8c57613a8b614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b559190614fc4565b81600181518110613b6957613b68614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bce307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c309594939291906150ea565b600060405180830381600087803b158015613c4a57600080fd5b505af1158015613c5e573d6000803e3d6000fd5b505050505050565b613c91307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613d1896959493929190615144565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b91906151ba565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d9c578082015181840152602081019050613d81565b83811115613dab576000848401525b50505050565b6000601f19601f8301169050919050565b6000613dcd82613d62565b613dd78185613d6d565b9350613de7818560208601613d7e565b613df081613db1565b840191505092915050565b60006020820190508181036000830152613e158184613dc2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e4d82613e22565b9050919050565b613e5d81613e42565b8114613e6857600080fd5b50565b600081359050613e7a81613e54565b92915050565b6000819050919050565b613e9381613e80565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b60008060408385031215613ecd57613ecc613e1d565b5b6000613edb85828601613e6b565b9250506020613eec85828601613ea1565b9150509250929050565b60008115159050919050565b613f0b81613ef6565b82525050565b6000602082019050613f266000830184613f02565b92915050565b600060208284031215613f4257613f41613e1d565b5b6000613f5084828501613e6b565b91505092915050565b6000819050919050565b6000613f7e613f79613f7484613e22565b613f59565b613e22565b9050919050565b6000613f9082613f63565b9050919050565b6000613fa282613f85565b9050919050565b613fb281613f97565b82525050565b6000602082019050613fcd6000830184613fa9565b92915050565b613fdc81613e80565b82525050565b6000602082019050613ff76000830184613fd3565b92915050565b60006020828403121561401357614012613e1d565b5b600061402184828501613ea1565b91505092915050565b60008060006060848603121561404357614042613e1d565b5b600061405186828701613e6b565b935050602061406286828701613e6b565b925050604061407386828701613ea1565b9150509250925092565b61408681613e42565b82525050565b60006020820190506140a1600083018461407d565b92915050565b600060ff82169050919050565b6140bd816140a7565b82525050565b60006020820190506140d860008301846140b4565b92915050565b6140e781613ef6565b81146140f257600080fd5b50565b600081359050614104816140de565b92915050565b6000806040838503121561412157614120613e1d565b5b600061412f85828601613e6b565b9250506020614140858286016140f5565b9150509250929050565b60008060006060848603121561416357614162613e1d565b5b600061417186828701613ea1565b935050602061418286828701613ea1565b925050604061419386828701613ea1565b9150509250925092565b6000602082840312156141b3576141b2613e1d565b5b60006141c1848285016140f5565b91505092915050565b600080604083850312156141e1576141e0613e1d565b5b60006141ef85828601613e6b565b925050602061420085828601613e6b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425157607f821691505b602082108114156142655761426461420a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a1602083613d6d565b91506142ac8261426b565b602082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431182613e80565b915061431c83613e80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614355576143546142d7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439a82613e80565b91506143a583613e80565b9250826143b5576143b4614360565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061441c602f83613d6d565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144ae602883613d6d565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b60006144ef82613e80565b91506144fa83613e80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561452f5761452e6142d7565b5b828201905092915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614570601d83613d6d565b915061457b8261453a565b602082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614602603983613d6d565b915061460d826145a6565b604082019050919050565b60006020820190508181036000830152614631816145f5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614694602583613d6d565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614726602483613d6d565b9150614731826146ca565b604082019050919050565b6000602082019050818103600083015261475581614719565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147b8603583613d6d565b91506147c38261475c565b604082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061484a603483613d6d565b9150614855826147ee565b604082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148dc602683613d6d565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613d6d565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613d6d565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613d6d565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613d6d565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b90601683613d6d565b9150614b9b82614b5a565b602082019050919050565b60006020820190508181036000830152614bbf81614b83565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c48604983613d6d565b9150614c5382614bc6565b606082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614cda603583613d6d565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d46601383613d6d565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614dd8603683613d6d565b9150614de382614d7c565b604082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b6000614e1982613e80565b9150614e2483613e80565b925082821015614e3757614e366142d7565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e9e602683613d6d565b9150614ea982614e42565b604082019050919050565b60006020820190508181036000830152614ecd81614e91565b9050919050565b600081905092915050565b50565b6000614eef600083614ed4565b9150614efa82614edf565b600082019050919050565b6000614f1082614ee2565b9150819050919050565b6000606082019050614f2f6000830186613fd3565b614f3c6020830185613fd3565b614f496040830184613fd3565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614fbe81613e54565b92915050565b600060208284031215614fda57614fd9613e1d565b5b6000614fe884828501614faf565b91505092915050565b6000819050919050565b600061501661501161500c84614ff1565b613f59565b613e80565b9050919050565b61502681614ffb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506181613e42565b82525050565b60006150738383615058565b60208301905092915050565b6000602082019050919050565b60006150978261502c565b6150a18185615037565b93506150ac83615048565b8060005b838110156150dd5781516150c48882615067565b97506150cf8361507f565b9250506001810190506150b0565b5085935050505092915050565b600060a0820190506150ff6000830188613fd3565b61510c602083018761501d565b818103604083015261511e818661508c565b905061512d606083018561407d565b61513a6080830184613fd3565b9695505050505050565b600060c082019050615159600083018961407d565b6151666020830188613fd3565b615173604083018761501d565b615180606083018661501d565b61518d608083018561407d565b61519a60a0830184613fd3565b979650505050505050565b6000815190506151b481613e8a565b92915050565b6000806000606084860312156151d3576151d2613e1d565b5b60006151e1868287016151a5565b93505060206151f2868287016151a5565b9250506040615203868287016151a5565b915050925092509256fea2646970667358221220d3050d264d0a0793e40ee6e8dbfc6cf39daf5d90aa9ff4da11bad43bebc055e364736f6c634300080a0033

Deployed Bytecode Sourcemap

15142:16192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2839:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3753:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16391:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15225:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3160:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23207:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16256:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16216;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20544:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3930:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15328:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3059:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4430:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15283:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15636:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15488:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23546:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16071:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15716:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3276:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;961:103;;;;;;;;;;;;;:::i;:::-;;23372:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19652:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21091:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15420:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15964;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21462:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19488:112;;;;;;;;;;;;;:::i;:::-;;738:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15457:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16106:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21354:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2947:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22483:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16038:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16296:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16182:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4653:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3411:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22991:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16463:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15676:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22293:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21873:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20827:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15882:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15521:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20039:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15930:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3594:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15563:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19834:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16001:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1072:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16144:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15603:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2839:100;2893:13;2926:5;2919:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2839:100;:::o;3753:169::-;3836:4;3853:39;3862:12;:10;:12::i;:::-;3876:7;3885:6;3853:8;:39::i;:::-;3910:4;3903:11;;3753:169;;;;:::o;16391:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15225:51::-;;;:::o;3160:108::-;3221:7;3248:12;;3241:19;;3160:108;:::o;23207:157::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23314:9:::1;;;;;;;;;;;23286:38;;23303:9;23286:38;;;;;;;;;;;;23347:9;23335;;:21;;;;;;;;;;;;;;;;;;23207:157:::0;:::o;16256:33::-;;;;:::o;16216:::-;;;;:::o;20544:275::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20681:4:::1;20673;20668:1;20652:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20651:26;;;;:::i;:::-;20650:35;;;;:::i;:::-;20640:6;:45;;20618:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;20804:6;20794;:17;;;;:::i;:::-;20771:20;:40;;;;20544:275:::0;:::o;3930:492::-;4070:4;4087:36;4097:6;4105:9;4116:6;4087:9;:36::i;:::-;4136:24;4163:11;:19;4175:6;4163:19;;;;;;;;;;;;;;;:33;4183:12;:10;:12::i;:::-;4163:33;;;;;;;;;;;;;;;;4136:60;;4235:6;4215:16;:26;;4207:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4322:57;4331:6;4339:12;:10;:12::i;:::-;4372:6;4353:16;:25;4322:8;:57::i;:::-;4410:4;4403:11;;;3930:492;;;;;:::o;15328:53::-;15374:6;15328:53;:::o;3059:93::-;3117:5;3142:2;3135:9;;3059:93;:::o;4430:215::-;4518:4;4535:80;4544:12;:10;:12::i;:::-;4558:7;4604:10;4567:11;:25;4579:12;:10;:12::i;:::-;4567:25;;;;;;;;;;;;;;;:34;4593:7;4567:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4535:8;:80::i;:::-;4633:4;4626:11;;4430:215;;;;:::o;15283:38::-;;;:::o;15636:33::-;;;;;;;;;;;;;:::o;15488:24::-;;;;;;;;;;;;;:::o;23546:126::-;23612:4;23636:19;:28;23656:7;23636:28;;;;;;;;;;;;;;;;;;;;;;;;;23629:35;;23546:126;;;:::o;16071:28::-;;;;:::o;15716:31::-;;;;;;;;;;;;;:::o;3276:127::-;3350:7;3377:9;:18;3387:7;3377:18;;;;;;;;;;;;;;;;3370:25;;3276:127;;;:::o;961:103::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1026:30:::1;1053:1;1026:18;:30::i;:::-;961:103::o:0;23372:166::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23485:9:::1;;;;;;;;;;;23454:41;;23471:12;23454:41;;;;;;;;;;;;23518:12;23506:9;;:24;;;;;;;;;;;;;;;;;;23372:166:::0;:::o;19652:121::-;19704:4;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19738:5:::1;19721:14;;:22;;;;;;;;;;;;;;;;;;19761:4;19754:11;;19652:121:::0;:::o;21091:167::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21246:4:::1;21204:31;:39;21236:6;21204:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21091:167:::0;;:::o;15420:30::-;;;;;;;;;;;;;:::o;15964:::-;;;;:::o;21462:403::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21630:13:::1;21612:15;:31;;;;21672:13;21654:15;:31;;;;21708:7;21696:9;:19;;;;21777:9;;21759:15;;21741;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;21726:12;:60;;;;21821:2;21805:12;;:18;;21797:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21462:403:::0;;;:::o;19488:112::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19559:4:::1;19543:13;;:20;;;;;;;;;;;;;;;;;;19588:4;19574:11;;:18;;;;;;;;;;;;;;;;;;19488:112::o:0;738:87::-;784:7;811:6;;;;;;;;;;;804:13;;738:87;:::o;15457:24::-;;;;;;;;;;;;;:::o;16106:31::-;;;;:::o;21354:100::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21439:7:::1;21425:11;;:21;;;;;;;;;;;;;;;;;;21354:100:::0;:::o;2947:104::-;3003:13;3036:7;3029:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2947:104;:::o;22483:304::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22627:13:::1;22619:21;;:4;:21;;;;22597:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;22738:41;22767:4;22773:5;22738:28;:41::i;:::-;22483:304:::0;;:::o;16038:24::-;;;;:::o;16296:27::-;;;;:::o;16182:25::-;;;;:::o;4653:413::-;4746:4;4763:24;4790:11;:25;4802:12;:10;:12::i;:::-;4790:25;;;;;;;;;;;;;;;:34;4816:7;4790:34;;;;;;;;;;;;;;;;4763:61;;4863:15;4843:16;:35;;4835:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4956:67;4965:12;:10;:12::i;:::-;4979:7;5007:15;4988:16;:34;4956:8;:67::i;:::-;5054:4;5047:11;;;4653:413;;;;:::o;3411:175::-;3497:4;3514:42;3524:12;:10;:12::i;:::-;3538:9;3549:6;3514:9;:42::i;:::-;3574:4;3567:11;;3411:175;;;;:::o;22991:208::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23128:15:::1;;;;;;;;;;;23085:59;;23108:18;23085:59;;;;;;;;;;;;23173:18;23155:15;;:36;;;;;;;;;;;;;;;;;;22991:208:::0;:::o;16463:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15676:33::-;;;;;;;;;;;;;:::o;22293:182::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22409:8:::1;22378:19;:28;22398:7;22378:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22449:7;22433:34;;;22458:8;22433:34;;;;;;:::i;:::-;;;;;;;;22293:182:::0;;:::o;21873:412::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22043:13:::1;22024:16;:32;;;;22086:13;22067:16;:32;;;;22123:7;22110:10;:20;;;;22195:10;;22176:16;;22157;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;22141:13;:64;;;;22241:2;22224:13;;:19;;22216:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21873:412:::0;;;:::o;20827:256::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20967:4:::1;20959;20954:1;20938:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20937:26;;;;:::i;:::-;20936:35;;;;:::i;:::-;20926:6;:45;;20904:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21068:6;21058;:17;;;;:::i;:::-;21046:9;:29;;;;20827:256:::0;:::o;15882:39::-;;;;;;;;;;;;;:::o;15521:35::-;;;;:::o;20039:497::-;20147:4;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20226:6:::1;20221:1;20205:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20204:28;;;;:::i;:::-;20191:9;:41;;20169:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20381:4;20376:1;20360:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20359:26;;;;:::i;:::-;20346:9;:39;;20324:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20497:9;20476:18;:30;;;;20524:4;20517:11;;20039:497:::0;;;:::o;15930:27::-;;;;:::o;3594:151::-;3683:7;3710:11;:18;3722:5;3710:18;;;;;;;;;;;;;;;:27;3729:7;3710:27;;;;;;;;;;;;;;;;3703:34;;3594:151;;;;:::o;15563:33::-;;;;:::o;19834:135::-;19894:4;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19934:5:::1;19911:20;;:28;;;;;;;;;;;;;;;;;;19957:4;19950:11;;19834:135:::0;:::o;16001:30::-;;;;:::o;1072:201::-;884:12;:10;:12::i;:::-;873:23;;:7;:5;:7::i;:::-;:23;;;865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1181:1:::1;1161:22;;:8;:22;;;;1153:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1237:28;1256:8;1237:18;:28::i;:::-;1072:201:::0;:::o;16144:31::-;;;;:::o;15603:24::-;;;;:::o;284:98::-;337:7;364:10;357:17;;284:98;:::o;6821:380::-;6974:1;6957:19;;:5;:19;;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7055:1;7036:21;;:7;:21;;;;7028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7139:6;7109:11;:18;7121:5;7109:18;;;;;;;;;;;;;;;:27;7128:7;7109:27;;;;;;;;;;;;;;;:36;;;;7177:7;7161:32;;7170:5;7161:32;;;7186:6;7161:32;;;;;;:::i;:::-;;;;;;;;6821:380;;;:::o;23730:4717::-;23878:1;23862:18;;:4;:18;;;;23854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23955:1;23941:16;;:2;:16;;;;23933:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24024:1;24014:6;:11;24010:93;;;24042:28;24058:4;24064:2;24068:1;24042:15;:28::i;:::-;24085:7;;24010:93;24119:14;;;;;;;;;;;24115:2487;;;24180:7;:5;:7::i;:::-;24172:15;;:4;:15;;;;:49;;;;;24214:7;:5;:7::i;:::-;24208:13;;:2;:13;;;;24172:49;:86;;;;;24256:1;24242:16;;:2;:16;;;;24172:86;:128;;;;;24293:6;24279:21;;:2;:21;;;;24172:128;:158;;;;;24322:8;;;;;;;;;;;24321:9;24172:158;24150:2441;;;24370:13;;;;;;;;;;;24365:223;;24442:19;:25;24462:4;24442:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24471:19;:23;24491:2;24471:23;;;;;;;;;;;;;;;;;;;;;;;;;24442:52;24408:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24365:223;24744:20;;;;;;;;;;;24740:641;;;24825:7;:5;:7::i;:::-;24819:13;;:2;:13;;;;:72;;;;;24875:15;24861:30;;:2;:30;;;;24819:72;:129;;;;;24934:13;24920:28;;:2;:28;;;;24819:129;24789:573;;;25112:12;25037:28;:39;25066:9;25037:39;;;;;;;;;;;;;;;;:87;24999:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;25326:12;25284:28;:39;25313:9;25284:39;;;;;;;;;;;;;;;:54;;;;24789:573;24740:641;25455:25;:31;25481:4;25455:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25512:31;:35;25544:2;25512:35;;;;;;;;;;;;;;;;;;;;;;;;;25511:36;25455:92;25429:1147;;;25634:20;;25624:6;:30;;25590:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25842:9;;25825:13;25835:2;25825:9;:13::i;:::-;25816:6;:22;;;;:::i;:::-;:35;;25782:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25429:1147;;;26020:25;:29;26046:2;26020:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;26075:31;:37;26107:4;26075:37;;;;;;;;;;;;;;;;;;;;;;;;;26074:38;26020:92;25994:582;;;26199:20;;26189:6;:30;;26155:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25994:582;;;26356:31;:35;26388:2;26356:35;;;;;;;;;;;;;;;;;;;;;;;;;26351:225;;26476:9;;26459:13;26469:2;26459:9;:13::i;:::-;26450:6;:22;;;;:::i;:::-;:35;;26416:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26351:225;25994:582;25429:1147;24150:2441;24115:2487;26614:28;26645:24;26663:4;26645:9;:24::i;:::-;26614:55;;26682:12;26721:18;;26697:20;:42;;26682:57;;26770:7;:35;;;;;26794:11;;;;;;;;;;;26770:35;:61;;;;;26823:8;;;;;;;;;;;26822:9;26770:61;:110;;;;;26849:25;:31;26875:4;26849:31;;;;;;;;;;;;;;;;;;;;;;;;;26848:32;26770:110;:153;;;;;26898:19;:25;26918:4;26898:25;;;;;;;;;;;;;;;;;;;;;;;;;26897:26;26770:153;:194;;;;;26941:19;:23;26961:2;26941:23;;;;;;;;;;;;;;;;;;;;;;;;;26940:24;26770:194;26752:326;;;27002:4;26991:8;;:15;;;;;;;;;;;;;;;;;;27023:10;:8;:10::i;:::-;27061:5;27050:8;;:16;;;;;;;;;;;;;;;;;;26752:326;27090:12;27106:8;;;;;;;;;;;27105:9;27090:24;;27216:19;:25;27236:4;27216:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27245:19;:23;27265:2;27245:23;;;;;;;;;;;;;;;;;;;;;;;;;27216:52;27212:100;;;27295:5;27285:15;;27212:100;27324:12;27429:7;27425:969;;;27481:25;:29;27507:2;27481:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27530:1;27514:13;;:17;27481:50;27477:768;;;27559:34;27589:3;27559:25;27570:13;;27559:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27552:41;;27662:13;;27642:16;;27635:4;:23;;;;:::i;:::-;27634:41;;;;:::i;:::-;27612:18;;:63;;;;;;;:::i;:::-;;;;;;;;27732:13;;27718:10;;27711:4;:17;;;;:::i;:::-;27710:35;;;;:::i;:::-;27694:12;;:51;;;;;;;:::i;:::-;;;;;;;;27814:13;;27794:16;;27787:4;:23;;;;:::i;:::-;27786:41;;;;:::i;:::-;27764:18;;:63;;;;;;;:::i;:::-;;;;;;;;27477:768;;;27889:25;:31;27915:4;27889:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27939:1;27924:12;;:16;27889:51;27885:360;;;27968:33;27997:3;27968:24;27979:12;;27968:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27961:40;;28069:12;;28050:15;;28043:4;:22;;;;:::i;:::-;28042:39;;;;:::i;:::-;28020:18;;:61;;;;;;;:::i;:::-;;;;;;;;28137:12;;28124:9;;28117:4;:16;;;;:::i;:::-;28116:33;;;;:::i;:::-;28100:12;;:49;;;;;;;:::i;:::-;;;;;;;;28217:12;;28198:15;;28191:4;:22;;;;:::i;:::-;28190:39;;;;:::i;:::-;28168:18;;:61;;;;;;;:::i;:::-;;;;;;;;27885:360;27477:768;28272:1;28265:4;:8;28261:91;;;28294:42;28310:4;28324;28331;28294:15;:42::i;:::-;28261:91;28378:4;28368:14;;;;;:::i;:::-;;;27425:969;28406:33;28422:4;28428:2;28432:6;28406:15;:33::i;:::-;23843:4604;;;;23730:4717;;;;:::o;1281:191::-;1355:16;1374:6;;;;;;;;;;;1355:25;;1400:8;1391:6;;:17;;;;;;;;;;;;;;;;;;1455:8;1424:40;;1445:8;1424:40;;;;;;;;;;;;1344:128;1281:191;:::o;22795:188::-;22912:5;22878:25;:31;22904:4;22878:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22969:5;22935:40;;22963:4;22935:40;;;;;;;;;;;;22795:188;;:::o;5074:733::-;5232:1;5214:20;;:6;:20;;;;5206:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5316:1;5295:23;;:9;:23;;;;5287:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5371:47;5392:6;5400:9;5411:6;5371:20;:47::i;:::-;5431:21;5455:9;:17;5465:6;5455:17;;;;;;;;;;;;;;;;5431:41;;5508:6;5491:13;:23;;5483:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5629:6;5613:13;:22;5593:9;:17;5603:6;5593:17;;;;;;;;;;;;;;;:42;;;;5681:6;5657:9;:20;5667:9;5657:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5722:9;5705:35;;5714:6;5705:35;;;5733:6;5705:35;;;;;;:::i;:::-;;;;;;;;5753:46;5773:6;5781:9;5792:6;5753:19;:46::i;:::-;5195:612;5074:733;;;:::o;29575:1756::-;29614:23;29640:24;29658:4;29640:9;:24::i;:::-;29614:50;;29675:25;29771:12;;29737:18;;29703;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;29675:108;;29794:12;29842:1;29823:15;:20;:46;;;;29868:1;29847:17;:22;29823:46;29819:85;;;29886:7;;;;;29819:85;29959:2;29938:18;;:23;;;;:::i;:::-;29920:15;:41;29916:115;;;30017:2;29996:18;;:23;;;;:::i;:::-;29978:41;;29916:115;30092:23;30205:1;30172:17;30137:18;;30119:15;:36;;;;:::i;:::-;30118:71;;;;:::i;:::-;:88;;;;:::i;:::-;30092:114;;30217:26;30246:36;30266:15;30246;:19;;:36;;;;:::i;:::-;30217:65;;30295:25;30323:21;30295:49;;30357:36;30374:18;30357:16;:36::i;:::-;30406:18;30427:44;30453:17;30427:21;:25;;:44;;;;:::i;:::-;30406:65;;30484:23;30510:81;30563:17;30510:34;30525:18;;30510:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;30484:107;;30602:17;30622:51;30655:17;30622:28;30637:12;;30622:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30602:71;;30686:23;30743:9;30725:15;30712:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;30686:66;;30786:1;30765:18;:22;;;;30819:1;30798:18;:22;;;;30846:1;30831:12;:16;;;;30882:9;;;;;;;;;;;30874:23;;30905:9;30874:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30860:59;;;;;30954:1;30936:15;:19;:42;;;;;30977:1;30959:15;:19;30936:42;30932:278;;;30995:46;31008:15;31025;30995:12;:46::i;:::-;31061:137;31094:18;31131:15;31165:18;;31061:137;;;;;;;;:::i;:::-;;;;;;;;30932:278;31244:15;;;;;;;;;;;31236:29;;31287:21;31236:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31222:101;;;;;29603:1728;;;;;;;;;;29575:1756;:::o;8827:98::-;8885:7;8916:1;8912;:5;;;;:::i;:::-;8905:12;;8827:98;;;;:::o;8933:::-;8991:7;9022:1;9018;:5;;;;:::i;:::-;9011:12;;8933:98;;;;:::o;7209:125::-;;;;:::o;7342:124::-;;;;:::o;8721:98::-;8779:7;8810:1;8806;:5;;;;:::i;:::-;8799:12;;8721:98;;;;:::o;28455:589::-;28581:21;28619:1;28605:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28581:40;;28650:4;28632;28637:1;28632:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28676:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28666:4;28671:1;28666:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28711:62;28728:4;28743:15;28761:11;28711:8;:62::i;:::-;28812:15;:66;;;28893:11;28919:1;28963:4;28990;29010:15;28812:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28510:534;28455:589;:::o;29052:515::-;29200:62;29217:4;29232:15;29250:11;29200:8;:62::i;:::-;29305:15;:31;;;29344:9;29377:4;29397:11;29423:1;29466;29509:9;;;;;;;;;;;29533:15;29305:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29052:515;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:227::-;12661:34;12657:1;12649:6;12645:14;12638:58;12730:10;12725:2;12717:6;12713:15;12706:35;12521:227;:::o;12754:366::-;12896:3;12917:67;12981:2;12976:3;12917:67;:::i;:::-;12910:74;;12993:93;13082:3;12993:93;:::i;:::-;13111:2;13106:3;13102:12;13095:19;;12754:366;;;:::o;13126:419::-;13292:4;13330:2;13319:9;13315:18;13307:26;;13379:9;13373:4;13369:20;13365:1;13354:9;13350:17;13343:47;13407:131;13533:4;13407:131;:::i;:::-;13399:139;;13126:419;;;:::o;13551:305::-;13591:3;13610:20;13628:1;13610:20;:::i;:::-;13605:25;;13644:20;13662:1;13644:20;:::i;:::-;13639:25;;13798:1;13730:66;13726:74;13723:1;13720:81;13717:107;;;13804:18;;:::i;:::-;13717:107;13848:1;13845;13841:9;13834:16;;13551:305;;;;:::o;13862:179::-;14002:31;13998:1;13990:6;13986:14;13979:55;13862:179;:::o;14047:366::-;14189:3;14210:67;14274:2;14269:3;14210:67;:::i;:::-;14203:74;;14286:93;14375:3;14286:93;:::i;:::-;14404:2;14399:3;14395:12;14388:19;;14047:366;;;:::o;14419:419::-;14585:4;14623:2;14612:9;14608:18;14600:26;;14672:9;14666:4;14662:20;14658:1;14647:9;14643:17;14636:47;14700:131;14826:4;14700:131;:::i;:::-;14692:139;;14419:419;;;:::o;14844:244::-;14984:34;14980:1;14972:6;14968:14;14961:58;15053:27;15048:2;15040:6;15036:15;15029:52;14844:244;:::o;15094:366::-;15236:3;15257:67;15321:2;15316:3;15257:67;:::i;:::-;15250:74;;15333:93;15422:3;15333:93;:::i;:::-;15451:2;15446:3;15442:12;15435:19;;15094:366;;;:::o;15466:419::-;15632:4;15670:2;15659:9;15655:18;15647:26;;15719:9;15713:4;15709:20;15705:1;15694:9;15690:17;15683:47;15747:131;15873:4;15747:131;:::i;:::-;15739:139;;15466:419;;;:::o;15891:224::-;16031:34;16027:1;16019:6;16015:14;16008:58;16100:7;16095:2;16087:6;16083:15;16076:32;15891:224;:::o;16121:366::-;16263:3;16284:67;16348:2;16343:3;16284:67;:::i;:::-;16277:74;;16360:93;16449:3;16360:93;:::i;:::-;16478:2;16473:3;16469:12;16462:19;;16121:366;;;:::o;16493:419::-;16659:4;16697:2;16686:9;16682:18;16674:26;;16746:9;16740:4;16736:20;16732:1;16721:9;16717:17;16710:47;16774:131;16900:4;16774:131;:::i;:::-;16766:139;;16493:419;;;:::o;16918:223::-;17058:34;17054:1;17046:6;17042:14;17035:58;17127:6;17122:2;17114:6;17110:15;17103:31;16918:223;:::o;17147:366::-;17289:3;17310:67;17374:2;17369:3;17310:67;:::i;:::-;17303:74;;17386:93;17475:3;17386:93;:::i;:::-;17504:2;17499:3;17495:12;17488:19;;17147:366;;;:::o;17519:419::-;17685:4;17723:2;17712:9;17708:18;17700:26;;17772:9;17766:4;17762:20;17758:1;17747:9;17743:17;17736:47;17800:131;17926:4;17800:131;:::i;:::-;17792:139;;17519:419;;;:::o;17944:240::-;18084:34;18080:1;18072:6;18068:14;18061:58;18153:23;18148:2;18140:6;18136:15;18129:48;17944:240;:::o;18190:366::-;18332:3;18353:67;18417:2;18412:3;18353:67;:::i;:::-;18346:74;;18429:93;18518:3;18429:93;:::i;:::-;18547:2;18542:3;18538:12;18531:19;;18190:366;;;:::o;18562:419::-;18728:4;18766:2;18755:9;18751:18;18743:26;;18815:9;18809:4;18805:20;18801:1;18790:9;18786:17;18779:47;18843:131;18969:4;18843:131;:::i;:::-;18835:139;;18562:419;;;:::o;18987:239::-;19127:34;19123:1;19115:6;19111:14;19104:58;19196:22;19191:2;19183:6;19179:15;19172:47;18987:239;:::o;19232:366::-;19374:3;19395:67;19459:2;19454:3;19395:67;:::i;:::-;19388:74;;19471:93;19560:3;19471:93;:::i;:::-;19589:2;19584:3;19580:12;19573:19;;19232:366;;;:::o;19604:419::-;19770:4;19808:2;19797:9;19793:18;19785:26;;19857:9;19851:4;19847:20;19843:1;19832:9;19828:17;19821:47;19885:131;20011:4;19885:131;:::i;:::-;19877:139;;19604:419;;;:::o;20029:225::-;20169:34;20165:1;20157:6;20153:14;20146:58;20238:8;20233:2;20225:6;20221:15;20214:33;20029:225;:::o;20260:366::-;20402:3;20423:67;20487:2;20482:3;20423:67;:::i;:::-;20416:74;;20499:93;20588:3;20499:93;:::i;:::-;20617:2;20612:3;20608:12;20601:19;;20260:366;;;:::o;20632:419::-;20798:4;20836:2;20825:9;20821:18;20813:26;;20885:9;20879:4;20875:20;20871:1;20860:9;20856:17;20849:47;20913:131;21039:4;20913:131;:::i;:::-;20905:139;;20632:419;;;:::o;21057:223::-;21197:34;21193:1;21185:6;21181:14;21174:58;21266:6;21261:2;21253:6;21249:15;21242:31;21057:223;:::o;21286:366::-;21428:3;21449:67;21513:2;21508:3;21449:67;:::i;:::-;21442:74;;21525:93;21614:3;21525:93;:::i;:::-;21643:2;21638:3;21634:12;21627:19;;21286:366;;;:::o;21658:419::-;21824:4;21862:2;21851:9;21847:18;21839:26;;21911:9;21905:4;21901:20;21897:1;21886:9;21882:17;21875:47;21939:131;22065:4;21939:131;:::i;:::-;21931:139;;21658:419;;;:::o;22083:221::-;22223:34;22219:1;22211:6;22207:14;22200:58;22292:4;22287:2;22279:6;22275:15;22268:29;22083:221;:::o;22310:366::-;22452:3;22473:67;22537:2;22532:3;22473:67;:::i;:::-;22466:74;;22549:93;22638:3;22549:93;:::i;:::-;22667:2;22662:3;22658:12;22651:19;;22310:366;;;:::o;22682:419::-;22848:4;22886:2;22875:9;22871:18;22863:26;;22935:9;22929:4;22925:20;22921:1;22910:9;22906:17;22899:47;22963:131;23089:4;22963:131;:::i;:::-;22955:139;;22682:419;;;:::o;23107:224::-;23247:34;23243:1;23235:6;23231:14;23224:58;23316:7;23311:2;23303:6;23299:15;23292:32;23107:224;:::o;23337:366::-;23479:3;23500:67;23564:2;23559:3;23500:67;:::i;:::-;23493:74;;23576:93;23665:3;23576:93;:::i;:::-;23694:2;23689:3;23685:12;23678:19;;23337:366;;;:::o;23709:419::-;23875:4;23913:2;23902:9;23898:18;23890:26;;23962:9;23956:4;23952:20;23948:1;23937:9;23933:17;23926:47;23990:131;24116:4;23990:131;:::i;:::-;23982:139;;23709:419;;;:::o;24134:222::-;24274:34;24270:1;24262:6;24258:14;24251:58;24343:5;24338:2;24330:6;24326:15;24319:30;24134:222;:::o;24362:366::-;24504:3;24525:67;24589:2;24584:3;24525:67;:::i;:::-;24518:74;;24601:93;24690:3;24601:93;:::i;:::-;24719:2;24714:3;24710:12;24703:19;;24362:366;;;:::o;24734:419::-;24900:4;24938:2;24927:9;24923:18;24915:26;;24987:9;24981:4;24977:20;24973:1;24962:9;24958:17;24951:47;25015:131;25141:4;25015:131;:::i;:::-;25007:139;;24734:419;;;:::o;25159:172::-;25299:24;25295:1;25287:6;25283:14;25276:48;25159:172;:::o;25337:366::-;25479:3;25500:67;25564:2;25559:3;25500:67;:::i;:::-;25493:74;;25576:93;25665:3;25576:93;:::i;:::-;25694:2;25689:3;25685:12;25678:19;;25337:366;;;:::o;25709:419::-;25875:4;25913:2;25902:9;25898:18;25890:26;;25962:9;25956:4;25952:20;25948:1;25937:9;25933:17;25926:47;25990:131;26116:4;25990:131;:::i;:::-;25982:139;;25709:419;;;:::o;26134:297::-;26274:34;26270:1;26262:6;26258:14;26251:58;26343:34;26338:2;26330:6;26326:15;26319:59;26412:11;26407:2;26399:6;26395:15;26388:36;26134:297;:::o;26437:366::-;26579:3;26600:67;26664:2;26659:3;26600:67;:::i;:::-;26593:74;;26676:93;26765:3;26676:93;:::i;:::-;26794:2;26789:3;26785:12;26778:19;;26437:366;;;:::o;26809:419::-;26975:4;27013:2;27002:9;26998:18;26990:26;;27062:9;27056:4;27052:20;27048:1;27037:9;27033:17;27026:47;27090:131;27216:4;27090:131;:::i;:::-;27082:139;;26809:419;;;:::o;27234:240::-;27374:34;27370:1;27362:6;27358:14;27351:58;27443:23;27438:2;27430:6;27426:15;27419:48;27234:240;:::o;27480:366::-;27622:3;27643:67;27707:2;27702:3;27643:67;:::i;:::-;27636:74;;27719:93;27808:3;27719:93;:::i;:::-;27837:2;27832:3;27828:12;27821:19;;27480:366;;;:::o;27852:419::-;28018:4;28056:2;28045:9;28041:18;28033:26;;28105:9;28099:4;28095:20;28091:1;28080:9;28076:17;28069:47;28133:131;28259:4;28133:131;:::i;:::-;28125:139;;27852:419;;;:::o;28277:169::-;28417:21;28413:1;28405:6;28401:14;28394:45;28277:169;:::o;28452:366::-;28594:3;28615:67;28679:2;28674:3;28615:67;:::i;:::-;28608:74;;28691:93;28780:3;28691:93;:::i;:::-;28809:2;28804:3;28800:12;28793:19;;28452:366;;;:::o;28824:419::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29077:9;29071:4;29067:20;29063:1;29052:9;29048:17;29041:47;29105:131;29231:4;29105:131;:::i;:::-;29097:139;;28824:419;;;:::o;29249:241::-;29389:34;29385:1;29377:6;29373:14;29366:58;29458:24;29453:2;29445:6;29441:15;29434:49;29249:241;:::o;29496:366::-;29638:3;29659:67;29723:2;29718:3;29659:67;:::i;:::-;29652:74;;29735:93;29824:3;29735:93;:::i;:::-;29853:2;29848:3;29844:12;29837:19;;29496:366;;;:::o;29868:419::-;30034:4;30072:2;30061:9;30057:18;30049:26;;30121:9;30115:4;30111:20;30107:1;30096:9;30092:17;30085:47;30149:131;30275:4;30149:131;:::i;:::-;30141:139;;29868:419;;;:::o;30293:191::-;30333:4;30353:20;30371:1;30353:20;:::i;:::-;30348:25;;30387:20;30405:1;30387:20;:::i;:::-;30382:25;;30426:1;30423;30420:8;30417:34;;;30431:18;;:::i;:::-;30417:34;30476:1;30473;30469:9;30461:17;;30293:191;;;;:::o;30490:225::-;30630:34;30626:1;30618:6;30614:14;30607:58;30699:8;30694:2;30686:6;30682:15;30675:33;30490:225;:::o;30721:366::-;30863:3;30884:67;30948:2;30943:3;30884:67;:::i;:::-;30877:74;;30960:93;31049:3;30960:93;:::i;:::-;31078:2;31073:3;31069:12;31062:19;;30721:366;;;:::o;31093:419::-;31259:4;31297:2;31286:9;31282:18;31274:26;;31346:9;31340:4;31336:20;31332:1;31321:9;31317:17;31310:47;31374:131;31500:4;31374:131;:::i;:::-;31366:139;;31093:419;;;:::o;31518:147::-;31619:11;31656:3;31641:18;;31518:147;;;;:::o;31671:114::-;;:::o;31791:398::-;31950:3;31971:83;32052:1;32047:3;31971:83;:::i;:::-;31964:90;;32063:93;32152:3;32063:93;:::i;:::-;32181:1;32176:3;32172:11;32165:18;;31791:398;;;:::o;32195:379::-;32379:3;32401:147;32544:3;32401:147;:::i;:::-;32394:154;;32565:3;32558:10;;32195:379;;;:::o;32580:442::-;32729:4;32767:2;32756:9;32752:18;32744:26;;32780:71;32848:1;32837:9;32833:17;32824:6;32780:71;:::i;:::-;32861:72;32929:2;32918:9;32914:18;32905:6;32861:72;:::i;:::-;32943;33011:2;33000:9;32996:18;32987:6;32943:72;:::i;:::-;32580:442;;;;;;:::o;33028:180::-;33076:77;33073:1;33066:88;33173:4;33170:1;33163:15;33197:4;33194:1;33187:15;33214:180;33262:77;33259:1;33252:88;33359:4;33356:1;33349:15;33383:4;33380:1;33373:15;33400:143;33457:5;33488:6;33482:13;33473:22;;33504:33;33531:5;33504:33;:::i;:::-;33400:143;;;;:::o;33549:351::-;33619:6;33668:2;33656:9;33647:7;33643:23;33639:32;33636:119;;;33674:79;;:::i;:::-;33636:119;33794:1;33819:64;33875:7;33866:6;33855:9;33851:22;33819:64;:::i;:::-;33809:74;;33765:128;33549:351;;;;:::o;33906:85::-;33951:7;33980:5;33969:16;;33906:85;;;:::o;33997:158::-;34055:9;34088:61;34106:42;34115:32;34141:5;34115:32;:::i;:::-;34106:42;:::i;:::-;34088:61;:::i;:::-;34075:74;;33997:158;;;:::o;34161:147::-;34256:45;34295:5;34256:45;:::i;:::-;34251:3;34244:58;34161:147;;:::o;34314:114::-;34381:6;34415:5;34409:12;34399:22;;34314:114;;;:::o;34434:184::-;34533:11;34567:6;34562:3;34555:19;34607:4;34602:3;34598:14;34583:29;;34434:184;;;;:::o;34624:132::-;34691:4;34714:3;34706:11;;34744:4;34739:3;34735:14;34727:22;;34624:132;;;:::o;34762:108::-;34839:24;34857:5;34839:24;:::i;:::-;34834:3;34827:37;34762:108;;:::o;34876:179::-;34945:10;34966:46;35008:3;35000:6;34966:46;:::i;:::-;35044:4;35039:3;35035:14;35021:28;;34876:179;;;;:::o;35061:113::-;35131:4;35163;35158:3;35154:14;35146:22;;35061:113;;;:::o;35210:732::-;35329:3;35358:54;35406:5;35358:54;:::i;:::-;35428:86;35507:6;35502:3;35428:86;:::i;:::-;35421:93;;35538:56;35588:5;35538:56;:::i;:::-;35617:7;35648:1;35633:284;35658:6;35655:1;35652:13;35633:284;;;35734:6;35728:13;35761:63;35820:3;35805:13;35761:63;:::i;:::-;35754:70;;35847:60;35900:6;35847:60;:::i;:::-;35837:70;;35693:224;35680:1;35677;35673:9;35668:14;;35633:284;;;35637:14;35933:3;35926:10;;35334:608;;;35210:732;;;;:::o;35948:831::-;36211:4;36249:3;36238:9;36234:19;36226:27;;36263:71;36331:1;36320:9;36316:17;36307:6;36263:71;:::i;:::-;36344:80;36420:2;36409:9;36405:18;36396:6;36344:80;:::i;:::-;36471:9;36465:4;36461:20;36456:2;36445:9;36441:18;36434:48;36499:108;36602:4;36593:6;36499:108;:::i;:::-;36491:116;;36617:72;36685:2;36674:9;36670:18;36661:6;36617:72;:::i;:::-;36699:73;36767:3;36756:9;36752:19;36743:6;36699:73;:::i;:::-;35948:831;;;;;;;;:::o;36785:807::-;37034:4;37072:3;37061:9;37057:19;37049:27;;37086:71;37154:1;37143:9;37139:17;37130:6;37086:71;:::i;:::-;37167:72;37235:2;37224:9;37220:18;37211:6;37167:72;:::i;:::-;37249:80;37325:2;37314:9;37310:18;37301:6;37249:80;:::i;:::-;37339;37415:2;37404:9;37400:18;37391:6;37339:80;:::i;:::-;37429:73;37497:3;37486:9;37482:19;37473:6;37429:73;:::i;:::-;37512;37580:3;37569:9;37565:19;37556:6;37512:73;:::i;:::-;36785:807;;;;;;;;;:::o;37598:143::-;37655:5;37686:6;37680:13;37671:22;;37702:33;37729:5;37702:33;:::i;:::-;37598:143;;;;:::o;37747:663::-;37835:6;37843;37851;37900:2;37888:9;37879:7;37875:23;37871:32;37868:119;;;37906:79;;:::i;:::-;37868:119;38026:1;38051:64;38107:7;38098:6;38087:9;38083:22;38051:64;:::i;:::-;38041:74;;37997:128;38164:2;38190:64;38246:7;38237:6;38226:9;38222:22;38190:64;:::i;:::-;38180:74;;38135:129;38303:2;38329:64;38385:7;38376:6;38365:9;38361:22;38329:64;:::i;:::-;38319:74;;38274:129;37747:663;;;;;:::o

Swarm Source

ipfs://d3050d264d0a0793e40ee6e8dbfc6cf39daf5d90aa9ff4da11bad43bebc055e3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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