ETH Price: $3,019.32 (+2.02%)
Gas: 2 Gwei

Token

BUSHI (BUSHI)
 

Overview

Max Total Supply

1,000,000,000 BUSHI

Holders

94

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16,453.09538068877409488 BUSHI

Value
$0.00
0x677847a700864762cd407f784aeef3a86bec1758
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:
Bushifinal

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-25
*/

/*
       
ANYTHING U WANT TO TYPE ABOUT PROJECT GOES HERE

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

interface IBEP20 {
    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 IBEP20Metadata is IBEP20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount,
                "BEP20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue,
                "BEP20: decreased allowance below zero"));
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

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

abstract contract Ownable is Context {

    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

interface IUniswapV2Router01 {
    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 removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
                             uint256 amountBMin, address to, uint256 deadline) 
                             external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
                                       uint256 amountAMin, uint256 amountBMin, address to,
                                       uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                       external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
                                          uint256 amountETHMin, address to, uint256 deadline,
                                          bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                          external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

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

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
                   external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) 
                          external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
                         external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
                           external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
                          external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
        external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
        uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);

    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 Bushifinal is BEP20, Ownable { // 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 public sellAmount = 0;
    uint256 public buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet;
    address payable public devWallet;

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellLiquidityFee;
    uint256 public buyMarketingFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    bool public swapAndLiquifyEnabled = true;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = false; 
    uint256 private gasPriceLimit = 7 * 1 gwei; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public launchtimestamp; // FOR LAUNCH TIMESTAMP 
    uint256 public cooldowntimer = 0; // DEFAULT COOLDOWN TIMER

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDevWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellLiquidityFee, uint256 buyMarketingFees,
                     uint256 buyLiquidityFee, uint256 buyDevFee, uint256 sellDevFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() BEP20("BUSHI", "BUSHI") { // PROJECTNAME AND TICKER GO HERE
        marketingWallet = payable(0x2dC661daBFbBc88715b318056d16f3AD0D2d3276); // CHANGE THIS TO YOURS
        devWallet = payable(0x4E90F89Ff5CF5F041F325d3936d4555e5f08Ee9F); // CHANGE THIS TO YOURS
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 3;
        sellMarketingFees = 8;
        buyLiquidityFee = 0;
        sellLiquidityFee = 0;
        buyDevFee = 2;
        sellDevFee = 7;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyMarketingFees.add(buyLiquidityFee).add(buyDevFee);
        totalSellFees = sellMarketingFees.add(sellLiquidityFee).add(sellDevFee);

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), uniswapV2Router.WETH());

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 _totalSupply = (1_000_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), _totalSupply); // only time internal mint function is ever called is to create supply
        maxWallet = _totalSupply / 50; // 2%
        swapTokensAtAmount = _totalSupply / 100; // 1%;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

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

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDevWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        devWallet = payable(wallet);
        emit updateDevWallet(wallet);
    }
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 100, "max wallet cannot be set to less than 1%");
        maxWallet = value;
    }

    // TAKES ALL BNB FROM THE CONTRACT ADDRESS AND SENDS IT TO OWNERS WALLET
    function Sweep() external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // THIS IS THE ONE YOU USE TO TRASNFER OWNER IF U EVER DO
    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 liquidityBuy,
                        uint256 liquiditySell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyLiquidityFee = liquidityBuy;
        sellMarketingFees = marketingSell;
        sellLiquidityFee = liquiditySell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

        totalSellFees = sellMarketingFees.add(sellLiquidityFee).add(sellDevFee);
        totalBuyFees = buyMarketingFees.add(buyLiquidityFee).add(buyDevFee);

        // ABSOLUTE TAX LIMITS GO HERE
        require(totalSellFees <= 99 && totalBuyFees <= 99, "total fees cannot be higher than 15%");

        emit UpdateFees(sellMarketingFees, sellLiquidityFee, sellDevFee, buyMarketingFees,
                        buyLiquidityFee, buyDevFee);
    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 liquidityFee;
        uint256 devFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                liquidityFee = sellLiquidityFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                liquidityFee = buyLiquidityFee;
                devFee = buyDevFee;

                if (limitsInEffect) {
                require(block.number > launchblock + 2,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferBlock[tx.origin] = block.number;
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
            }

            if (maxWalletEnabled) {
            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWallet,
                    "Exceeds maximum wallet token amount." );
            }
            }

            uint256 totalFees = marketingFees.add(liquidityFee).add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

                uint256 swapTokens;

                if (swapAndLiquifyEnabled && liquidityFee > 0) {
                    uint256 totalBuySell = buyAmount.add(sellAmount);
                    uint256 swapAmountBought = contractTokenBalance
                        .mul(buyAmount)
                        .div(totalBuySell);
                    uint256 swapAmountSold = contractTokenBalance
                        .mul(sellAmount)
                        .div(totalBuySell);

                    uint256 swapBuyTokens = swapAmountBought
                        .mul(liquidityFee)
                        .div(totalBuyFees);

                    uint256 swapSellTokens = swapAmountSold
                        .mul(liquidityFee)
                        .div(totalSellFees);

                    swapTokens = swapSellTokens.add(swapBuyTokens);

                    swapAndLiquify(swapTokens);
                }

                uint256 remainingBalance = swapTokensAtAmount.sub(swapTokens);
                swapAndSendDividends(remainingBalance);
                buyAmount = 0;
                sellAmount = 0;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);

            amount = amount.sub(fees);

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);
           
        }

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


    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // 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
            owner(),
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _marketDevTotal = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee);

        uint256 feePortions;
        if (_marketDevTotal > 0) {
            feePortions = address(this).balance.div(_marketDevTotal);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }
        
        if (devPayout > 0) {
            (successOp1, ) = address(devWallet).call{value: devPayout}("");
        }

        emit SendDividends(
            marketingPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","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":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","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":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","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":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAmount","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":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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 payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","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":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"sellMarketingFees","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":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760156101000a81548160ff021916908315150217905550600060085560006009556001600f60006101000a81548160ff0219169083151502179055506001601760006101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff0219169083151502179055506401a13b8600601c5560006021553480156200009557600080fd5b506040518060400160405280600581526020017f42555348490000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f425553484900000000000000000000000000000000000000000000000000000081525081600390805190602001906200011a92919062000aed565b5080600490805190602001906200013392919062000aed565b5050506000620001486200080460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350732dc661dabfbbc88715b318056d16f3ad0d2d3276600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734e90f89ff5cf5f041f325d3936d4555e5f08ee9f600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060036013819055506008601181905550600060148190555060006012819055506002601581905550600760168190555062000313601554620002ff6014546013546200080c60201b620028fa1790919060201c565b6200080c60201b620028fa1790919060201c565b600b81905550620003526016546200033e6012546011546200080c60201b620028fa1790919060201c565b6200080c60201b620028fa1790919060201c565b600a8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000407573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042d919062000c07565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004dd919062000c07565b6040518363ffffffff1660e01b8152600401620004fc92919062000c4a565b6020604051808303816000875af11580156200051c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000542919062000c07565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b7600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200086f60201b60201c565b6001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006b033b2e3c9fd0803ce8000000905062000713620007066200091060201b60201c565b826200093a60201b60201c565b60328162000722919062000cdf565b600e8190555060648162000737919062000cdf565b6010819055506001601a6000620007536200091060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000efb565b600033905090565b60008082846200081d919062000d17565b90508381101562000865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085c9062000dd5565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a39062000e47565b60405180910390fd5b620009c06000838362000ae860201b60201c565b620009dc816002546200080c60201b620028fa1790919060201c565b60028190555062000a3a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200080c60201b620028fa1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000adc919062000e7a565b60405180910390a35050565b505050565b82805462000afb9062000ec6565b90600052602060002090601f01602090048101928262000b1f576000855562000b6b565b82601f1062000b3a57805160ff191683800117855562000b6b565b8280016001018555821562000b6b579182015b8281111562000b6a57825182559160200191906001019062000b4d565b5b50905062000b7a919062000b7e565b5090565b5b8082111562000b9957600081600090555060010162000b7f565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bcf8262000ba2565b9050919050565b62000be18162000bc2565b811462000bed57600080fd5b50565b60008151905062000c018162000bd6565b92915050565b60006020828403121562000c205762000c1f62000b9d565b5b600062000c308482850162000bf0565b91505092915050565b62000c448162000bc2565b82525050565b600060408201905062000c61600083018562000c39565b62000c70602083018462000c39565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cec8262000c77565b915062000cf98362000c77565b92508262000d0c5762000d0b62000c81565b5b828204905092915050565b600062000d248262000c77565b915062000d318362000c77565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d695762000d6862000cb0565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000dbd601b8362000d74565b915062000dca8262000d85565b602082019050919050565b6000602082019050818103600083015262000df08162000dae565b9050919050565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e2f601f8362000d74565b915062000e3c8262000df7565b602082019050919050565b6000602082019050818103600083015262000e628162000e20565b9050919050565b62000e748162000c77565b82525050565b600060208201905062000e91600083018462000e69565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000edf57607f821691505b60208210810362000ef55762000ef462000e97565b5b50919050565b61584b8062000f0b6000396000f3fe6080604052600436106103395760003560e01c806375f0a874116101ab578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610bf5578063f637434214610c1e578063f8b45b0514610c49578063fc6b151c14610c7457610340565b8063dd62ed3e14610b62578063e2f4560514610b9f578063f11a24d314610bca57610340565b8063b62496f5116100d1578063b62496f514610aa8578063b74e3b1114610ae5578063d045a32914610b0e578063d5e3725114610b3957610340565b8063a614ff7514610a17578063a9059cbb14610a40578063b494298814610a7d57610340565b806395451c29116101645780639a7a23d61161013e5780639a7a23d61461095b5780639c3b4fdc14610984578063a0d82dc5146109af578063a457c2d7146109da57610340565b806395451c29146108dc57806395d89b4114610907578063992c58e41461093257610340565b806375f0a874146107f05780637fdde05c1461081b5780638a8c523c146108445780638c3c82b21461085b5780638da5cb5b146108865780638ea5220f146108b157610340565b80633f407b84116102855780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461075c57806370a0823114610773578063715018a6146107b057806375829def146107c757610340565b80635d098b38146106e15780635eee4bae1461070a578063679ca6e91461073357610340565b80634a74bb021161025f5780634a74bb02146106235780634ada218b1461064e5780634fbee193146106795780635124f874146106b657610340565b80633f407b84146105a257806349bd5a5e146105cd5780634a62bb65146105f857610340565b80631d7b1fb4116102f25780632307b441116102cc5780632307b441146104d457806323b872dd146104fd578063313ce5671461053a578063395093511461056557610340565b80631d7b1fb4146104555780631f53ac02146104805780631fa70531146104a957610340565b806305ca5f081461034557806306fdde031461036e57806308dfe8a514610399578063095ea7b3146103c25780631694505e146103ff57806318160ddd1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c60048036038101906103679190613fc3565b610c9d565b005b34801561037a57600080fd5b50610383610e00565b6040516103909190614089565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614141565b610e92565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614181565b610fd2565b6040516103f691906141d0565b60405180910390f35b34801561040b57600080fd5b50610414610ff0565b604051610421919061424a565b60405180910390f35b34801561043657600080fd5b5061043f611016565b60405161044c9190614274565b60405180910390f35b34801561046157600080fd5b5061046a611020565b6040516104779190614274565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a2919061428f565b611026565b005b3480156104b557600080fd5b506104be611190565b6040516104cb9190614274565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906144c7565b611196565b005b34801561050957600080fd5b50610524600480360381019061051f919061453f565b611338565b60405161053191906141d0565b60405180910390f35b34801561054657600080fd5b5061054f611411565b60405161055c91906145ae565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190614181565b61141a565b60405161059991906141d0565b60405180910390f35b3480156105ae57600080fd5b506105b76114cd565b6040516105c49190614274565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906145d8565b60405180910390f35b34801561060457600080fd5b5061060d6114f9565b60405161061a91906141d0565b60405180910390f35b34801561062f57600080fd5b5061063861150c565b60405161064591906141d0565b60405180910390f35b34801561065a57600080fd5b5061066361151f565b60405161067091906141d0565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b919061428f565b611532565b6040516106ad91906141d0565b60405180910390f35b3480156106c257600080fd5b506106cb611588565b6040516106d89190614274565b60405180910390f35b3480156106ed57600080fd5b506107086004803603810190610703919061428f565b61158e565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fc3565b6116f8565b005b34801561073f57600080fd5b5061075a600480360381019061075591906145f3565b6117ac565b005b34801561076857600080fd5b50610771611860565b005b34801561077f57600080fd5b5061079a6004803603810190610795919061428f565b611946565b6040516107a79190614274565b60405180910390f35b3480156107bc57600080fd5b506107c561198e565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061428f565b611ae6565b005b3480156107fc57600080fd5b50610805611c39565b6040516108129190614641565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614141565b611c5f565b005b34801561085057600080fd5b50610859611d51565b005b34801561086757600080fd5b50610870611e59565b60405161087d9190614274565b60405180910390f35b34801561089257600080fd5b5061089b611e5f565b6040516108a891906145d8565b60405180910390f35b3480156108bd57600080fd5b506108c6611e89565b6040516108d39190614641565b60405180910390f35b3480156108e857600080fd5b506108f1611eaf565b6040516108fe9190614274565b60405180910390f35b34801561091357600080fd5b5061091c611eb5565b6040516109299190614089565b60405180910390f35b34801561093e57600080fd5b506109596004803603810190610954919061465c565b611f47565b005b34801561096757600080fd5b50610982600480360381019061097d9190614141565b612114565b005b34801561099057600080fd5b506109996121b9565b6040516109a69190614274565b60405180910390f35b3480156109bb57600080fd5b506109c46121bf565b6040516109d19190614274565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614181565b6121c5565b604051610a0e91906141d0565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906145f3565b612292565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190614181565b612346565b604051610a7491906141d0565b60405180910390f35b348015610a8957600080fd5b50610a92612364565b604051610a9f9190614274565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca919061428f565b61236a565b604051610adc91906141d0565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b079190613fc3565b61238a565b005b348015610b1a57600080fd5b50610b23612470565b604051610b3091906141d0565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b91906145f3565b612483565b005b348015610b6e57600080fd5b50610b896004803603810190610b8491906146e9565b61258d565b604051610b969190614274565b60405180910390f35b348015610bab57600080fd5b50610bb4612614565b604051610bc19190614274565b60405180910390f35b348015610bd657600080fd5b50610bdf61261a565b604051610bec9190614274565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c17919061428f565b612620565b005b348015610c2a57600080fd5b50610c336127e6565b604051610c409190614274565b60405180910390f35b348015610c5557600080fd5b50610c5e6127ec565b604051610c6b9190614274565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190613fc3565b6127f2565b005b610ca5612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90614775565b60405180910390fd5b670de0b6b3a764000081610d4891906147c4565b90506000610d636008546009546128fa90919063ffffffff16565b90506000610d8e82610d806009548661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000610db983610dab6008548761296090919063ffffffff16565b6129da90919063ffffffff16565b9050610dc484612a24565b610dd982600954612c6690919063ffffffff16565b600981905550610df481600854612c6690919063ffffffff16565b60088190555050505050565b606060038054610e0f9061484d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b9061484d565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090614775565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fc691906141d0565b60405180910390a25050565b6000610fe6610fdf612958565b8484612cb0565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60215481565b61102e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161118591906145d8565b60405180910390a150565b60095481565b61119e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614775565b60405180910390fd5b8051825114611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906148ca565b60405180910390fd5b60c8825111156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061495c565b60405180910390fd5b60005b82518110156113335760008382815181106112d7576112d661497c565b5b602002602001015190506000670de0b6b3a76400008484815181106112ff576112fe61497c565b5b602002602001015161131191906147c4565b905061131e338383612e79565b5050808061132b906149ab565b9150506112b9565b505050565b600061134584848461310c565b61140684611351612958565b611401856040518060600160405280602881526020016157a360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b7612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b600190509392505050565b60006012905090565b60006114c3611427612958565b846114be8560016000611438612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b612cb0565b6001905092915050565b60085481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b601760009054906101000a900460ff1681565b600760159054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b611596612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116ed91906145d8565b60405180910390a150565b611700612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690614775565b60405180910390fd5b670de0b6b3a7640000816117a391906147c4565b60108190555050565b6117b4612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90614775565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b611868612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90614775565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611942573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611996612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614775565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611aee612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7490614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c3681612620565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c67612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614775565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d59612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614775565b60405180910390fd5b600760159054906101000a900460ff1615611e0257600080fd5b6001600760156101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054611ec49061484d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef09061484d565b8015611f3d5780601f10611f1257610100808354040283529160200191611f3d565b820191906000526020600020905b815481529060010190602001808311611f2057829003601f168201915b5050505050905090565b611f4f612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590614775565b60405180910390fd5b8560138190555083601481905550846011819055508260128190555081601581905550806016819055506120336016546120256012546011546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600a819055506120646015546120566014546013546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600b819055506063600a541115801561208057506063600b5411155b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614a65565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161210496959493929190614a85565b60405180910390a1505050505050565b61211c612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a290614775565b60405180910390fd5b6121b58282613aa8565b5050565b60155481565b60165481565b60006122886121d2612958565b84612283856040518060600160405280602581526020016157f160259139600160006121fc612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b6001905092915050565b61229a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232090614775565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061235a612353612958565b848461310c565b6001905092915050565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b612392612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614775565b60405180910390fd5b61012c811115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614b58565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b61248b612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614775565b60405180910390fd5b801515601760009054906101000a900460ff1615150361253957600080fd5b80601760006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161258291906141d0565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612628612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614775565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614bea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600e5481565b6127fa612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288090614775565b60405180910390fd5b670de0b6b3a76400008161289d91906147c4565b905060646002546128ae9190614c39565b8110156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614cdc565b60405180910390fd5b80600e8190555050565b60008082846129099190614cfc565b90508381101561294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590614d9e565b60405180910390fd5b8091505092915050565b600033905090565b600080830361297257600090506129d4565b6000828461298091906147c4565b905082848261298f9190614c39565b146129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690614e30565b60405180910390fd5b809150505b92915050565b6000612a1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b49565b905092915050565b6000810315612c6357612a3681613bac565b6000600190506000600190506000612a5b6015546013546128fa90919063ffffffff16565b612a726016546011546128fa90919063ffffffff16565b612a7c9190614cfc565b9050600080821115612a9e57612a9b82476129da90919063ffffffff16565b90505b600081612ab86011546013546128fa90919063ffffffff16565b612ac291906147c4565b9050600082612ade6016546015546128fa90919063ffffffff16565b612ae891906147c4565b90506000821115612b8257600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b3990614e81565b60006040518083038185875af1925050503d8060008114612b76576040519150601f19603f3d011682016040523d82523d6000602084013e612b7b565b606091505b5050809650505b6000811115612c1a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612bd190614e81565b60006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612c465750865b604051612c54929190614e96565b60405180910390a15050505050505b50565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614fc3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c9190614274565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90615055565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906150e7565b60405180910390fd5b612f62838383613def565b612fcd816040518060600160405280602681526020016157cb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613060816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ff9190614274565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290615179565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e19061520b565b60405180910390fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329057600760159054906101000a900460ff1661328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690615277565b60405180910390fd5b5b600084036132ac576132a486866000612e79565b505050613a3f565b600760149054906101000a900460ff161580156133135750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a30576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156134c257601154935060125492506016549150601b60009054906101000a900460ff16156134bd57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134369190614cfc565b421015613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f906152e3565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613789565b601354935060145492506015549150601b60009054906101000a900460ff1615613714576002601f546134f59190614cfc565b4311613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d9061534f565b60405180910390fd5b601c543a111561357b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613572906153bb565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f390615427565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136499190614cfc565b42101561368b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613682906152e3565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561378857600061373487611946565b9050600e5486826137459190614cfc565b1115613786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377d906154b9565b60405180910390fd5b505b5b60006137b0836137a286886128fa90919063ffffffff16565b6128fa90919063ffffffff16565b905060006137bd30611946565b9050600060105482101590508080156138205750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561399e576001600760146101000a81548160ff0219169083151502179055506000601760009054906101000a900460ff16801561385e5750600087115b1561394e57600061387c6008546009546128fa90919063ffffffff16565b905060006138a7826138996009548861296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138d2836138c46008548961296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138fd600b546138ef8d8661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000613928600a5461391a8e8661296090919063ffffffff16565b6129da90919063ffffffff16565b905061393d82826128fa90919063ffffffff16565b955061394886613df4565b50505050505b600061396582601054612c6690919063ffffffff16565b905061397081612a24565b600060098190555060006008819055506000600760146101000a81548160ff02191690831515021790555050505b60006139c660646139b8868c61296090919063ffffffff16565b6129da90919063ffffffff16565b90506139db818a612c6690919063ffffffff16565b98508415613a03576139f8816008546128fa90919063ffffffff16565b600881905550613a1f565b613a18816009546128fa90919063ffffffff16565b6009819055505b613a2a8b3083612e79565b50505050505b613a3b868686612e79565b5050505b505050565b6000838311158290613a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a839190614089565b60405180910390fd5b5060008385613a9b91906154d9565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b879190614089565b60405180910390fd5b5060008385613b9f9190614c39565b9050809150509392505050565b6000600267ffffffffffffffff811115613bc957613bc86142c1565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e61497c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda9190615522565b81600181518110613cee57613ced61497c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db9959493929190615648565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b505050565b6000613e0a6002836129da90919063ffffffff16565b90506000613e218284612c6690919063ffffffff16565b90506000479050613e3183613bac565b6000613e468247612c6690919063ffffffff16565b9050613e528382613e94565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613e85939291906156a2565b60405180910390a15050505050565b613ec130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f0d611e5f565b426040518863ffffffff1660e01b8152600401613f2f969594939291906156d9565b60606040518083038185885af1158015613f4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f72919061574f565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613fa081613f8d565b8114613fab57600080fd5b50565b600081359050613fbd81613f97565b92915050565b600060208284031215613fd957613fd8613f83565b5b6000613fe784828501613fae565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561402a57808201518184015260208101905061400f565b83811115614039576000848401525b50505050565b6000601f19601f8301169050919050565b600061405b82613ff0565b6140658185613ffb565b935061407581856020860161400c565b61407e8161403f565b840191505092915050565b600060208201905081810360008301526140a38184614050565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140d6826140ab565b9050919050565b6140e6816140cb565b81146140f157600080fd5b50565b600081359050614103816140dd565b92915050565b60008115159050919050565b61411e81614109565b811461412957600080fd5b50565b60008135905061413b81614115565b92915050565b6000806040838503121561415857614157613f83565b5b6000614166858286016140f4565b92505060206141778582860161412c565b9150509250929050565b6000806040838503121561419857614197613f83565b5b60006141a6858286016140f4565b92505060206141b785828601613fae565b9150509250929050565b6141ca81614109565b82525050565b60006020820190506141e560008301846141c1565b92915050565b6000819050919050565b600061421061420b614206846140ab565b6141eb565b6140ab565b9050919050565b6000614222826141f5565b9050919050565b600061423482614217565b9050919050565b61424481614229565b82525050565b600060208201905061425f600083018461423b565b92915050565b61426e81613f8d565b82525050565b60006020820190506142896000830184614265565b92915050565b6000602082840312156142a5576142a4613f83565b5b60006142b3848285016140f4565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142f98261403f565b810181811067ffffffffffffffff82111715614318576143176142c1565b5b80604052505050565b600061432b613f79565b905061433782826142f0565b919050565b600067ffffffffffffffff821115614357576143566142c1565b5b602082029050602081019050919050565b600080fd5b600061438061437b8461433c565b614321565b905080838252602082019050602084028301858111156143a3576143a2614368565b5b835b818110156143cc57806143b888826140f4565b8452602084019350506020810190506143a5565b5050509392505050565b600082601f8301126143eb576143ea6142bc565b5b81356143fb84826020860161436d565b91505092915050565b600067ffffffffffffffff82111561441f5761441e6142c1565b5b602082029050602081019050919050565b600061444361443e84614404565b614321565b9050808382526020820190506020840283018581111561446657614465614368565b5b835b8181101561448f578061447b8882613fae565b845260208401935050602081019050614468565b5050509392505050565b600082601f8301126144ae576144ad6142bc565b5b81356144be848260208601614430565b91505092915050565b600080604083850312156144de576144dd613f83565b5b600083013567ffffffffffffffff8111156144fc576144fb613f88565b5b614508858286016143d6565b925050602083013567ffffffffffffffff81111561452957614528613f88565b5b61453585828601614499565b9150509250929050565b60008060006060848603121561455857614557613f83565b5b6000614566868287016140f4565b9350506020614577868287016140f4565b925050604061458886828701613fae565b9150509250925092565b600060ff82169050919050565b6145a881614592565b82525050565b60006020820190506145c3600083018461459f565b92915050565b6145d2816140cb565b82525050565b60006020820190506145ed60008301846145c9565b92915050565b60006020828403121561460957614608613f83565b5b60006146178482850161412c565b91505092915050565b600061462b826140ab565b9050919050565b61463b81614620565b82525050565b60006020820190506146566000830184614632565b92915050565b60008060008060008060c0878903121561467957614678613f83565b5b600061468789828a01613fae565b965050602061469889828a01613fae565b95505060406146a989828a01613fae565b94505060606146ba89828a01613fae565b93505060806146cb89828a01613fae565b92505060a06146dc89828a01613fae565b9150509295509295509295565b60008060408385031215614700576146ff613f83565b5b600061470e858286016140f4565b925050602061471f858286016140f4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475f602083613ffb565b915061476a82614729565b602082019050919050565b6000602082019050818103600083015261478e81614752565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147cf82613f8d565b91506147da83613f8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561481357614812614795565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061486557607f821691505b6020821081036148785761487761481e565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006148b4601e83613ffb565b91506148bf8261487e565b602082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614946602283613ffb565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006149b682613f8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149e8576149e7614795565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a4f602483613ffb565b9150614a5a826149f3565b604082019050919050565b60006020820190508181036000830152614a7e81614a42565b9050919050565b600060c082019050614a9a6000830189614265565b614aa76020830188614265565b614ab46040830187614265565b614ac16060830186614265565b614ace6080830185614265565b614adb60a0830184614265565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614b42602683613ffb565b9150614b4d82614ae6565b604082019050919050565b60006020820190508181036000830152614b7181614b35565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bd4602683613ffb565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c4482613f8d565b9150614c4f83613f8d565b925082614c5f57614c5e614c0a565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614cc6602883613ffb565b9150614cd182614c6a565b604082019050919050565b60006020820190508181036000830152614cf581614cb9565b9050919050565b6000614d0782613f8d565b9150614d1283613f8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d4757614d46614795565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d88601b83613ffb565b9150614d9382614d52565b602082019050919050565b60006020820190508181036000830152614db781614d7b565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e1a602183613ffb565b9150614e2582614dbe565b604082019050919050565b60006020820190508181036000830152614e4981614e0d565b9050919050565b600081905092915050565b50565b6000614e6b600083614e50565b9150614e7682614e5b565b600082019050919050565b6000614e8c82614e5e565b9150819050919050565b6000604082019050614eab6000830185614265565b614eb860208301846141c1565b9392505050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1b602483613ffb565b9150614f2682614ebf565b604082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fad602283613ffb565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061503f602583613ffb565b915061504a82614fe3565b604082019050919050565b6000602082019050818103600083015261506e81615032565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150d1602383613ffb565b91506150dc82615075565b604082019050919050565b60006020820190508181036000830152615100816150c4565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615163602683613ffb565b915061516e82615107565b604082019050919050565b6000602082019050818103600083015261519281615156565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151f5602483613ffb565b915061520082615199565b604082019050919050565b60006020820190508181036000830152615224816151e8565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615261602083613ffb565b915061526c8261522b565b602082019050919050565b6000602082019050818103600083015261529081615254565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b60006152cd601683613ffb565b91506152d882615297565b602082019050919050565b600060208201905081810360008301526152fc816152c0565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b6000615339601283613ffb565b915061534482615303565b602082019050919050565b600060208201905081810360008301526153688161532c565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b60006153a5601883613ffb565b91506153b08261536f565b602082019050919050565b600060208201905081810360008301526153d481615398565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b6000615411601483613ffb565b915061541c826153db565b602082019050919050565b6000602082019050818103600083015261544081615404565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006154a3602483613ffb565b91506154ae82615447565b604082019050919050565b600060208201905081810360008301526154d281615496565b9050919050565b60006154e482613f8d565b91506154ef83613f8d565b92508282101561550257615501614795565b5b828203905092915050565b60008151905061551c816140dd565b92915050565b60006020828403121561553857615537613f83565b5b60006155468482850161550d565b91505092915050565b6000819050919050565b600061557461556f61556a8461554f565b6141eb565b613f8d565b9050919050565b61558481615559565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155bf816140cb565b82525050565b60006155d183836155b6565b60208301905092915050565b6000602082019050919050565b60006155f58261558a565b6155ff8185615595565b935061560a836155a6565b8060005b8381101561563b57815161562288826155c5565b975061562d836155dd565b92505060018101905061560e565b5085935050505092915050565b600060a08201905061565d6000830188614265565b61566a602083018761557b565b818103604083015261567c81866155ea565b905061568b60608301856145c9565b6156986080830184614265565b9695505050505050565b60006060820190506156b76000830186614265565b6156c46020830185614265565b6156d16040830184614265565b949350505050565b600060c0820190506156ee60008301896145c9565b6156fb6020830188614265565b615708604083018761557b565b615715606083018661557b565b61572260808301856145c9565b61572f60a0830184614265565b979650505050505050565b60008151905061574981613f97565b92915050565b60008060006060848603121561576857615767613f83565b5b60006157768682870161573a565b93505060206157878682870161573a565b92505060406157988682870161573a565b915050925092509256fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203388a4f06c43d3ab23479030e855337897943accfa8fdc754b158795c805af4264736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103395760003560e01c806375f0a874116101ab578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610bf5578063f637434214610c1e578063f8b45b0514610c49578063fc6b151c14610c7457610340565b8063dd62ed3e14610b62578063e2f4560514610b9f578063f11a24d314610bca57610340565b8063b62496f5116100d1578063b62496f514610aa8578063b74e3b1114610ae5578063d045a32914610b0e578063d5e3725114610b3957610340565b8063a614ff7514610a17578063a9059cbb14610a40578063b494298814610a7d57610340565b806395451c29116101645780639a7a23d61161013e5780639a7a23d61461095b5780639c3b4fdc14610984578063a0d82dc5146109af578063a457c2d7146109da57610340565b806395451c29146108dc57806395d89b4114610907578063992c58e41461093257610340565b806375f0a874146107f05780637fdde05c1461081b5780638a8c523c146108445780638c3c82b21461085b5780638da5cb5b146108865780638ea5220f146108b157610340565b80633f407b84116102855780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461075c57806370a0823114610773578063715018a6146107b057806375829def146107c757610340565b80635d098b38146106e15780635eee4bae1461070a578063679ca6e91461073357610340565b80634a74bb021161025f5780634a74bb02146106235780634ada218b1461064e5780634fbee193146106795780635124f874146106b657610340565b80633f407b84146105a257806349bd5a5e146105cd5780634a62bb65146105f857610340565b80631d7b1fb4116102f25780632307b441116102cc5780632307b441146104d457806323b872dd146104fd578063313ce5671461053a578063395093511461056557610340565b80631d7b1fb4146104555780631f53ac02146104805780631fa70531146104a957610340565b806305ca5f081461034557806306fdde031461036e57806308dfe8a514610399578063095ea7b3146103c25780631694505e146103ff57806318160ddd1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c60048036038101906103679190613fc3565b610c9d565b005b34801561037a57600080fd5b50610383610e00565b6040516103909190614089565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614141565b610e92565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614181565b610fd2565b6040516103f691906141d0565b60405180910390f35b34801561040b57600080fd5b50610414610ff0565b604051610421919061424a565b60405180910390f35b34801561043657600080fd5b5061043f611016565b60405161044c9190614274565b60405180910390f35b34801561046157600080fd5b5061046a611020565b6040516104779190614274565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a2919061428f565b611026565b005b3480156104b557600080fd5b506104be611190565b6040516104cb9190614274565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906144c7565b611196565b005b34801561050957600080fd5b50610524600480360381019061051f919061453f565b611338565b60405161053191906141d0565b60405180910390f35b34801561054657600080fd5b5061054f611411565b60405161055c91906145ae565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190614181565b61141a565b60405161059991906141d0565b60405180910390f35b3480156105ae57600080fd5b506105b76114cd565b6040516105c49190614274565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906145d8565b60405180910390f35b34801561060457600080fd5b5061060d6114f9565b60405161061a91906141d0565b60405180910390f35b34801561062f57600080fd5b5061063861150c565b60405161064591906141d0565b60405180910390f35b34801561065a57600080fd5b5061066361151f565b60405161067091906141d0565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b919061428f565b611532565b6040516106ad91906141d0565b60405180910390f35b3480156106c257600080fd5b506106cb611588565b6040516106d89190614274565b60405180910390f35b3480156106ed57600080fd5b506107086004803603810190610703919061428f565b61158e565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fc3565b6116f8565b005b34801561073f57600080fd5b5061075a600480360381019061075591906145f3565b6117ac565b005b34801561076857600080fd5b50610771611860565b005b34801561077f57600080fd5b5061079a6004803603810190610795919061428f565b611946565b6040516107a79190614274565b60405180910390f35b3480156107bc57600080fd5b506107c561198e565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061428f565b611ae6565b005b3480156107fc57600080fd5b50610805611c39565b6040516108129190614641565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614141565b611c5f565b005b34801561085057600080fd5b50610859611d51565b005b34801561086757600080fd5b50610870611e59565b60405161087d9190614274565b60405180910390f35b34801561089257600080fd5b5061089b611e5f565b6040516108a891906145d8565b60405180910390f35b3480156108bd57600080fd5b506108c6611e89565b6040516108d39190614641565b60405180910390f35b3480156108e857600080fd5b506108f1611eaf565b6040516108fe9190614274565b60405180910390f35b34801561091357600080fd5b5061091c611eb5565b6040516109299190614089565b60405180910390f35b34801561093e57600080fd5b506109596004803603810190610954919061465c565b611f47565b005b34801561096757600080fd5b50610982600480360381019061097d9190614141565b612114565b005b34801561099057600080fd5b506109996121b9565b6040516109a69190614274565b60405180910390f35b3480156109bb57600080fd5b506109c46121bf565b6040516109d19190614274565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614181565b6121c5565b604051610a0e91906141d0565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906145f3565b612292565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190614181565b612346565b604051610a7491906141d0565b60405180910390f35b348015610a8957600080fd5b50610a92612364565b604051610a9f9190614274565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca919061428f565b61236a565b604051610adc91906141d0565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b079190613fc3565b61238a565b005b348015610b1a57600080fd5b50610b23612470565b604051610b3091906141d0565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b91906145f3565b612483565b005b348015610b6e57600080fd5b50610b896004803603810190610b8491906146e9565b61258d565b604051610b969190614274565b60405180910390f35b348015610bab57600080fd5b50610bb4612614565b604051610bc19190614274565b60405180910390f35b348015610bd657600080fd5b50610bdf61261a565b604051610bec9190614274565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c17919061428f565b612620565b005b348015610c2a57600080fd5b50610c336127e6565b604051610c409190614274565b60405180910390f35b348015610c5557600080fd5b50610c5e6127ec565b604051610c6b9190614274565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190613fc3565b6127f2565b005b610ca5612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90614775565b60405180910390fd5b670de0b6b3a764000081610d4891906147c4565b90506000610d636008546009546128fa90919063ffffffff16565b90506000610d8e82610d806009548661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000610db983610dab6008548761296090919063ffffffff16565b6129da90919063ffffffff16565b9050610dc484612a24565b610dd982600954612c6690919063ffffffff16565b600981905550610df481600854612c6690919063ffffffff16565b60088190555050505050565b606060038054610e0f9061484d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b9061484d565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090614775565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fc691906141d0565b60405180910390a25050565b6000610fe6610fdf612958565b8484612cb0565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60215481565b61102e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161118591906145d8565b60405180910390a150565b60095481565b61119e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614775565b60405180910390fd5b8051825114611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906148ca565b60405180910390fd5b60c8825111156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061495c565b60405180910390fd5b60005b82518110156113335760008382815181106112d7576112d661497c565b5b602002602001015190506000670de0b6b3a76400008484815181106112ff576112fe61497c565b5b602002602001015161131191906147c4565b905061131e338383612e79565b5050808061132b906149ab565b9150506112b9565b505050565b600061134584848461310c565b61140684611351612958565b611401856040518060600160405280602881526020016157a360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b7612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b600190509392505050565b60006012905090565b60006114c3611427612958565b846114be8560016000611438612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b612cb0565b6001905092915050565b60085481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b601760009054906101000a900460ff1681565b600760159054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b611596612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116ed91906145d8565b60405180910390a150565b611700612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690614775565b60405180910390fd5b670de0b6b3a7640000816117a391906147c4565b60108190555050565b6117b4612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90614775565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b611868612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90614775565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611942573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611996612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614775565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611aee612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7490614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c3681612620565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c67612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614775565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d59612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614775565b60405180910390fd5b600760159054906101000a900460ff1615611e0257600080fd5b6001600760156101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054611ec49061484d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef09061484d565b8015611f3d5780601f10611f1257610100808354040283529160200191611f3d565b820191906000526020600020905b815481529060010190602001808311611f2057829003601f168201915b5050505050905090565b611f4f612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590614775565b60405180910390fd5b8560138190555083601481905550846011819055508260128190555081601581905550806016819055506120336016546120256012546011546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600a819055506120646015546120566014546013546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600b819055506063600a541115801561208057506063600b5411155b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614a65565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161210496959493929190614a85565b60405180910390a1505050505050565b61211c612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a290614775565b60405180910390fd5b6121b58282613aa8565b5050565b60155481565b60165481565b60006122886121d2612958565b84612283856040518060600160405280602581526020016157f160259139600160006121fc612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b6001905092915050565b61229a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232090614775565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061235a612353612958565b848461310c565b6001905092915050565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b612392612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614775565b60405180910390fd5b61012c811115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614b58565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b61248b612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614775565b60405180910390fd5b801515601760009054906101000a900460ff1615150361253957600080fd5b80601760006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161258291906141d0565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612628612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614775565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614bea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600e5481565b6127fa612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288090614775565b60405180910390fd5b670de0b6b3a76400008161289d91906147c4565b905060646002546128ae9190614c39565b8110156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614cdc565b60405180910390fd5b80600e8190555050565b60008082846129099190614cfc565b90508381101561294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590614d9e565b60405180910390fd5b8091505092915050565b600033905090565b600080830361297257600090506129d4565b6000828461298091906147c4565b905082848261298f9190614c39565b146129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690614e30565b60405180910390fd5b809150505b92915050565b6000612a1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b49565b905092915050565b6000810315612c6357612a3681613bac565b6000600190506000600190506000612a5b6015546013546128fa90919063ffffffff16565b612a726016546011546128fa90919063ffffffff16565b612a7c9190614cfc565b9050600080821115612a9e57612a9b82476129da90919063ffffffff16565b90505b600081612ab86011546013546128fa90919063ffffffff16565b612ac291906147c4565b9050600082612ade6016546015546128fa90919063ffffffff16565b612ae891906147c4565b90506000821115612b8257600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b3990614e81565b60006040518083038185875af1925050503d8060008114612b76576040519150601f19603f3d011682016040523d82523d6000602084013e612b7b565b606091505b5050809650505b6000811115612c1a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612bd190614e81565b60006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612c465750865b604051612c54929190614e96565b60405180910390a15050505050505b50565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614fc3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c9190614274565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90615055565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906150e7565b60405180910390fd5b612f62838383613def565b612fcd816040518060600160405280602681526020016157cb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613060816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ff9190614274565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290615179565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e19061520b565b60405180910390fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329057600760159054906101000a900460ff1661328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690615277565b60405180910390fd5b5b600084036132ac576132a486866000612e79565b505050613a3f565b600760149054906101000a900460ff161580156133135750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a30576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156134c257601154935060125492506016549150601b60009054906101000a900460ff16156134bd57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134369190614cfc565b421015613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f906152e3565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613789565b601354935060145492506015549150601b60009054906101000a900460ff1615613714576002601f546134f59190614cfc565b4311613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d9061534f565b60405180910390fd5b601c543a111561357b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613572906153bb565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f390615427565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136499190614cfc565b42101561368b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613682906152e3565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561378857600061373487611946565b9050600e5486826137459190614cfc565b1115613786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377d906154b9565b60405180910390fd5b505b5b60006137b0836137a286886128fa90919063ffffffff16565b6128fa90919063ffffffff16565b905060006137bd30611946565b9050600060105482101590508080156138205750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561399e576001600760146101000a81548160ff0219169083151502179055506000601760009054906101000a900460ff16801561385e5750600087115b1561394e57600061387c6008546009546128fa90919063ffffffff16565b905060006138a7826138996009548861296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138d2836138c46008548961296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138fd600b546138ef8d8661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000613928600a5461391a8e8661296090919063ffffffff16565b6129da90919063ffffffff16565b905061393d82826128fa90919063ffffffff16565b955061394886613df4565b50505050505b600061396582601054612c6690919063ffffffff16565b905061397081612a24565b600060098190555060006008819055506000600760146101000a81548160ff02191690831515021790555050505b60006139c660646139b8868c61296090919063ffffffff16565b6129da90919063ffffffff16565b90506139db818a612c6690919063ffffffff16565b98508415613a03576139f8816008546128fa90919063ffffffff16565b600881905550613a1f565b613a18816009546128fa90919063ffffffff16565b6009819055505b613a2a8b3083612e79565b50505050505b613a3b868686612e79565b5050505b505050565b6000838311158290613a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a839190614089565b60405180910390fd5b5060008385613a9b91906154d9565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b879190614089565b60405180910390fd5b5060008385613b9f9190614c39565b9050809150509392505050565b6000600267ffffffffffffffff811115613bc957613bc86142c1565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e61497c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda9190615522565b81600181518110613cee57613ced61497c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db9959493929190615648565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b505050565b6000613e0a6002836129da90919063ffffffff16565b90506000613e218284612c6690919063ffffffff16565b90506000479050613e3183613bac565b6000613e468247612c6690919063ffffffff16565b9050613e528382613e94565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613e85939291906156a2565b60405180910390a15050505050565b613ec130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f0d611e5f565b426040518863ffffffff1660e01b8152600401613f2f969594939291906156d9565b60606040518083038185885af1158015613f4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f72919061574f565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613fa081613f8d565b8114613fab57600080fd5b50565b600081359050613fbd81613f97565b92915050565b600060208284031215613fd957613fd8613f83565b5b6000613fe784828501613fae565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561402a57808201518184015260208101905061400f565b83811115614039576000848401525b50505050565b6000601f19601f8301169050919050565b600061405b82613ff0565b6140658185613ffb565b935061407581856020860161400c565b61407e8161403f565b840191505092915050565b600060208201905081810360008301526140a38184614050565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140d6826140ab565b9050919050565b6140e6816140cb565b81146140f157600080fd5b50565b600081359050614103816140dd565b92915050565b60008115159050919050565b61411e81614109565b811461412957600080fd5b50565b60008135905061413b81614115565b92915050565b6000806040838503121561415857614157613f83565b5b6000614166858286016140f4565b92505060206141778582860161412c565b9150509250929050565b6000806040838503121561419857614197613f83565b5b60006141a6858286016140f4565b92505060206141b785828601613fae565b9150509250929050565b6141ca81614109565b82525050565b60006020820190506141e560008301846141c1565b92915050565b6000819050919050565b600061421061420b614206846140ab565b6141eb565b6140ab565b9050919050565b6000614222826141f5565b9050919050565b600061423482614217565b9050919050565b61424481614229565b82525050565b600060208201905061425f600083018461423b565b92915050565b61426e81613f8d565b82525050565b60006020820190506142896000830184614265565b92915050565b6000602082840312156142a5576142a4613f83565b5b60006142b3848285016140f4565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142f98261403f565b810181811067ffffffffffffffff82111715614318576143176142c1565b5b80604052505050565b600061432b613f79565b905061433782826142f0565b919050565b600067ffffffffffffffff821115614357576143566142c1565b5b602082029050602081019050919050565b600080fd5b600061438061437b8461433c565b614321565b905080838252602082019050602084028301858111156143a3576143a2614368565b5b835b818110156143cc57806143b888826140f4565b8452602084019350506020810190506143a5565b5050509392505050565b600082601f8301126143eb576143ea6142bc565b5b81356143fb84826020860161436d565b91505092915050565b600067ffffffffffffffff82111561441f5761441e6142c1565b5b602082029050602081019050919050565b600061444361443e84614404565b614321565b9050808382526020820190506020840283018581111561446657614465614368565b5b835b8181101561448f578061447b8882613fae565b845260208401935050602081019050614468565b5050509392505050565b600082601f8301126144ae576144ad6142bc565b5b81356144be848260208601614430565b91505092915050565b600080604083850312156144de576144dd613f83565b5b600083013567ffffffffffffffff8111156144fc576144fb613f88565b5b614508858286016143d6565b925050602083013567ffffffffffffffff81111561452957614528613f88565b5b61453585828601614499565b9150509250929050565b60008060006060848603121561455857614557613f83565b5b6000614566868287016140f4565b9350506020614577868287016140f4565b925050604061458886828701613fae565b9150509250925092565b600060ff82169050919050565b6145a881614592565b82525050565b60006020820190506145c3600083018461459f565b92915050565b6145d2816140cb565b82525050565b60006020820190506145ed60008301846145c9565b92915050565b60006020828403121561460957614608613f83565b5b60006146178482850161412c565b91505092915050565b600061462b826140ab565b9050919050565b61463b81614620565b82525050565b60006020820190506146566000830184614632565b92915050565b60008060008060008060c0878903121561467957614678613f83565b5b600061468789828a01613fae565b965050602061469889828a01613fae565b95505060406146a989828a01613fae565b94505060606146ba89828a01613fae565b93505060806146cb89828a01613fae565b92505060a06146dc89828a01613fae565b9150509295509295509295565b60008060408385031215614700576146ff613f83565b5b600061470e858286016140f4565b925050602061471f858286016140f4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475f602083613ffb565b915061476a82614729565b602082019050919050565b6000602082019050818103600083015261478e81614752565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147cf82613f8d565b91506147da83613f8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561481357614812614795565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061486557607f821691505b6020821081036148785761487761481e565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006148b4601e83613ffb565b91506148bf8261487e565b602082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614946602283613ffb565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006149b682613f8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149e8576149e7614795565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a4f602483613ffb565b9150614a5a826149f3565b604082019050919050565b60006020820190508181036000830152614a7e81614a42565b9050919050565b600060c082019050614a9a6000830189614265565b614aa76020830188614265565b614ab46040830187614265565b614ac16060830186614265565b614ace6080830185614265565b614adb60a0830184614265565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614b42602683613ffb565b9150614b4d82614ae6565b604082019050919050565b60006020820190508181036000830152614b7181614b35565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bd4602683613ffb565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c4482613f8d565b9150614c4f83613f8d565b925082614c5f57614c5e614c0a565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614cc6602883613ffb565b9150614cd182614c6a565b604082019050919050565b60006020820190508181036000830152614cf581614cb9565b9050919050565b6000614d0782613f8d565b9150614d1283613f8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d4757614d46614795565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d88601b83613ffb565b9150614d9382614d52565b602082019050919050565b60006020820190508181036000830152614db781614d7b565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e1a602183613ffb565b9150614e2582614dbe565b604082019050919050565b60006020820190508181036000830152614e4981614e0d565b9050919050565b600081905092915050565b50565b6000614e6b600083614e50565b9150614e7682614e5b565b600082019050919050565b6000614e8c82614e5e565b9150819050919050565b6000604082019050614eab6000830185614265565b614eb860208301846141c1565b9392505050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1b602483613ffb565b9150614f2682614ebf565b604082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fad602283613ffb565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061503f602583613ffb565b915061504a82614fe3565b604082019050919050565b6000602082019050818103600083015261506e81615032565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150d1602383613ffb565b91506150dc82615075565b604082019050919050565b60006020820190508181036000830152615100816150c4565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615163602683613ffb565b915061516e82615107565b604082019050919050565b6000602082019050818103600083015261519281615156565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151f5602483613ffb565b915061520082615199565b604082019050919050565b60006020820190508181036000830152615224816151e8565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615261602083613ffb565b915061526c8261522b565b602082019050919050565b6000602082019050818103600083015261529081615254565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b60006152cd601683613ffb565b91506152d882615297565b602082019050919050565b600060208201905081810360008301526152fc816152c0565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b6000615339601283613ffb565b915061534482615303565b602082019050919050565b600060208201905081810360008301526153688161532c565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b60006153a5601883613ffb565b91506153b08261536f565b602082019050919050565b600060208201905081810360008301526153d481615398565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b6000615411601483613ffb565b915061541c826153db565b602082019050919050565b6000602082019050818103600083015261544081615404565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006154a3602483613ffb565b91506154ae82615447565b604082019050919050565b600060208201905081810360008301526154d281615496565b9050919050565b60006154e482613f8d565b91506154ef83613f8d565b92508282101561550257615501614795565b5b828203905092915050565b60008151905061551c816140dd565b92915050565b60006020828403121561553857615537613f83565b5b60006155468482850161550d565b91505092915050565b6000819050919050565b600061557461556f61556a8461554f565b6141eb565b613f8d565b9050919050565b61558481615559565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155bf816140cb565b82525050565b60006155d183836155b6565b60208301905092915050565b6000602082019050919050565b60006155f58261558a565b6155ff8185615595565b935061560a836155a6565b8060005b8381101561563b57815161562288826155c5565b975061562d836155dd565b92505060018101905061560e565b5085935050505092915050565b600060a08201905061565d6000830188614265565b61566a602083018761557b565b818103604083015261567c81866155ea565b905061568b60608301856145c9565b6156986080830184614265565b9695505050505050565b60006060820190506156b76000830186614265565b6156c46020830185614265565b6156d16040830184614265565b949350505050565b600060c0820190506156ee60008301896145c9565b6156fb6020830188614265565b615708604083018761557b565b615715606083018661557b565b61572260808301856145c9565b61572f60a0830184614265565b979650505050505050565b60008151905061574981613f97565b92915050565b60008060006060848603121561576857615767613f83565b5b60006157768682870161573a565b93505060206157878682870161573a565b92505060406157988682870161573a565b915050925092509256fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203388a4f06c43d3ab23479030e855337897943accfa8fdc754b158795c805af4264736f6c634300080d0033

Deployed Bytecode Sourcemap

15423:15817:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29167:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3306:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20207:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4220:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15507:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3627:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16863:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20008:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15699:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30676:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4397:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19413:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4750:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15663:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15557:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16472:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16225:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15620:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23272:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16085:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19795:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21415:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20551:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21261:146;;;;;;;;;;;;;:::i;:::-;;3743:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7198:148;;;;;;;;;;;;;:::i;:::-;;22166:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15809:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20396:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19551:232;;;;;;;;;;;;;:::i;:::-;;16801:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6984:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15854:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16008;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3414:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22386:878;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21759:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16160:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16191:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4976:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20658:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3878:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16750:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16333:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20769:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15926:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21543:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4061:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15968:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16123:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7354:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16047:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15895:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20957:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29167:443;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29265:6:::1;29255;:17;;;;:::i;:::-;29246:26;;29283:19;29305:25;29319:10;;29305:9;;:13;;:25;;;;:::i;:::-;29283:47;;29341:15;29359:38;29385:11;29359:21;29370:9;;29359:6;:10;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;29341:56;;29408:16;29427:39;29454:11;29427:22;29438:10;;29427:6;:10;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;29408:58;;29479:28;29500:6;29479:20;:28::i;:::-;29532:22;29546:7;29532:9;;:13;;:22;;;;:::i;:::-;29520:9;:34;;;;29578:24;29593:8;29578:10;;:14;;:24;;;;:::i;:::-;29565:10;:37;;;;29235:375;;;29167:443:::0;:::o;3306:100::-;3360:13;3393:5;3386:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3306:100;:::o;20207:181::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20322:8:::1;20291:19;:28;20311:7;20291:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20362:7;20346:34;;;20371:8;20346:34;;;;;;:::i;:::-;;;;;;;;20207:181:::0;;:::o;4220:169::-;4303:4;4320:39;4329:12;:10;:12::i;:::-;4343:7;4352:6;4320:8;:39::i;:::-;4377:4;4370:11;;4220:169;;;;:::o;15507:41::-;;;;;;;;;;;;;:::o;3627:108::-;3688:7;3715:12;;3708:19;;3627:108;:::o;16863:32::-;;;;:::o;20008:187::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20106:4:::1;20076:19;:27;20096:6;20076:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20141:6;20121:9;;:27;;;;;;;;;;;;;;;;;;20164:23;20180:6;20164:23;;;;;;:::i;:::-;;;;;;;;20008:187:::0;:::o;15699:28::-;;;;:::o;30676:561::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30848:6:::1;:13;30823:14;:21;:38;30815:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30940:3;30915:14;:21;:28;;30907:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30998:9;30993:237;31017:14;:21;31013:1;:25;30993:237;;;31060:14;31077;31092:1;31077:17;;;;;;;;:::i;:::-;;;;;;;;31060:34;;31109:21;31146:6;31133;31140:1;31133:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;31109:44;;31168:50;31184:10;31196:6;31204:13;31168:15;:50::i;:::-;31045:185;;31040:3;;;;;:::i;:::-;;;;30993:237;;;;30676:561:::0;;:::o;4397:345::-;4510:4;4527:36;4537:6;4545:9;4556:6;4527:9;:36::i;:::-;4574:138;4583:6;4591:12;:10;:12::i;:::-;4605:106;4643:6;4605:106;;;;;;;;;;;;;;;;;:11;:19;4617:6;4605:19;;;;;;;;;;;;;;;:33;4625:12;:10;:12::i;:::-;4605:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4574:8;:138::i;:::-;4730:4;4723:11;;4397:345;;;;;:::o;19413:93::-;19471:5;19496:2;19489:9;;19413:93;:::o;4750:218::-;4838:4;4855:83;4864:12;:10;:12::i;:::-;4878:7;4887:50;4926:10;4887:11;:25;4899:12;:10;:12::i;:::-;4887:25;;;;;;;;;;;;;;;:34;4913:7;4887:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4855:8;:83::i;:::-;4956:4;4949:11;;4750:218;;;;:::o;15663:29::-;;;;:::o;15557:28::-;;;;;;;;;;;;;:::o;16472:34::-;;;;;;;;;;;;;:::o;16225:40::-;;;;;;;;;;;;;:::o;15620:34::-;;;;;;;;;;;;;:::o;23272:126::-;23338:4;23362:19;:28;23382:7;23362:28;;;;;;;;;;;;;;;;;;;;;;;;;23355:35;;23272:126;;;:::o;16085:31::-;;;;:::o;19795:205::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19899:4:::1;19869:19;:27;19889:6;19869:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19940:6;19914:15;;:33;;;;;;;;;;;;;;;;;;19963:29;19985:6;19963:29;;;;;;:::i;:::-;;;;;;;;19795:205:::0;:::o;21415:120::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21520:6:::1;21510;:17;;;;:::i;:::-;21489:18;:38;;;;21415:120:::0;:::o;20551:99::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20637:5:::1;20620:14;;:22;;;;;;;;;;;;;;;;;;20551:99:::0;:::o;21261:146::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21308:17:::1;21328:21;21308:41;;21368:10;21360:28;;:39;21389:9;21360:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21297:110;21261:146::o:0;3743:127::-;3817:7;3844:9;:18;3854:7;3844:18;;;;;;;;;;;;;;;;3837:25;;3743:127;;;:::o;7198:148::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7305:1:::1;7268:40;;7289:6;;;;;;;;;;;7268:40;;;;;;;;;;;;7336:1;7319:6;;:19;;;;;;;;;;;;;;;;;;7198:148::o:0;22166:212::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22267:4:::1;22235:19;:29;22255:8;22235:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22328:4;22282:33;:43;22316:8;22282:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;22343:27;22361:8;22343:17;:27::i;:::-;22166:212:::0;:::o;15809:38::-;;;;;;;;;;;;;:::o;20396:147::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20529:6:::1;20485:33;:41;20519:6;20485:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20396:147:::0;;:::o;19551:232::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19615:14:::1;;;;;;;;;;;19614:15;19606:24;;;::::0;::::1;;19658:4;19641:14;;:21;;;;;;;;;;;;;;;;;;19687:12;19673:11;:26;;;;19728:15;19710;:33;;;;19759:16;;;;;;;;;;19551:232::o:0;16801:30::-;;;;:::o;6984:79::-;7022:7;7049:6;;;;;;;;;;;7042:13;;6984:79;:::o;15854:32::-;;;;;;;;;;;;;:::o;16008:::-;;;;:::o;3414:104::-;3470:13;3503:7;3496:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3414:104;:::o;22386:878::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22603:12:::1;22584:16;:31;;;;22644:12;22626:15;:30;;;;22687:13;22667:17;:33;;;;22730:13;22711:16;:32;;;;22766:6;22754:9;:18;;;;22796:7;22783:10;:20;;;;22832:55;22876:10;;22832:39;22854:16;;22832:17;;:21;;:39;;;;:::i;:::-;:43;;:55;;;;:::i;:::-;22816:13;:71;;;;22913:52;22955:9;;22913:37;22934:15;;22913:16;;:20;;:37;;;;:::i;:::-;:41;;:52;;;;:::i;:::-;22898:12;:67;;;;23043:2;23026:13;;:19;;:41;;;;;23065:2;23049:12;;:18;;23026:41;23018:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23126:130;23137:17;;23156:16;;23174:10;;23186:16;;23229:15;;23246:9;;23126:130;;;;;;;;;;;:::i;:::-;;;;;;;;22386:878:::0;;;;;;:::o;21759:140::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21850:41:::1;21879:4;21885:5;21850:28;:41::i;:::-;21759:140:::0;;:::o;16160:24::-;;;;:::o;16191:25::-;;;;:::o;4976:286::-;5069:4;5086:146;5095:12;:10;:12::i;:::-;5109:7;5118:113;5157:15;5118:113;;;;;;;;;;;;;;;;;:11;:25;5130:12;:10;:12::i;:::-;5118:25;;;;;;;;;;;;;;;:34;5144:7;5118:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5086:8;:146::i;:::-;5250:4;5243:11;;4976:286;;;;:::o;20658:103::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20748:5:::1;20729:16;;:24;;;;;;;;;;;;;;;;;;20658:103:::0;:::o;3878:175::-;3964:4;3981:42;3991:12;:10;:12::i;:::-;4005:9;4016:6;3981:9;:42::i;:::-;4041:4;4034:11;;3878:175;;;;:::o;16750:26::-;;;;:::o;16333:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20769:174::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20857:3:::1;20848:5;:12;;20840:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20930:5;20914:13;:21;;;;20769:174:::0;:::o;15926:35::-;;;;;;;;;;;;;:::o;21543:208::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21648:7:::1;21623:32;;:21;;;;;;;;;;;:32;;::::0;21615:41:::1;;;::::0;::::1;;21691:7;21667:21;;:31;;;;;;;;;;;;;;;;;;21714:29;21735:7;21714:29;;;;;;:::i;:::-;;;;;;;;21543:208:::0;:::o;4061:151::-;4150:7;4177:11;:18;4189:5;4177:18;;;;;;;;;;;;;;;:27;4196:7;4177:27;;;;;;;;;;;;;;;;4170:34;;4061:151;;;;:::o;15968:33::-;;;;:::o;16123:30::-;;;;:::o;7354:244::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7463:1:::1;7443:22;;:8;:22;;::::0;7435:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7553:8;7524:38;;7545:6;;;;;;;;;;;7524:38;;;;;;;;;;;;7582:8;7573:6;;:17;;;;;;;;;;;;;;;;;;7354:244:::0;:::o;16047:31::-;;;;:::o;15895:24::-;;;;:::o;20957:218::-;7121:12;:10;:12::i;:::-;7111:22;;:6;;;;;;;;;;;:22;;;7103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21041:6:::1;21032:5;:16;;;;:::i;:::-;21024:24;;21091:3;21076:12;;:18;;;;:::i;:::-;21067:5;:27;;21059:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21162:5;21150:9;:17;;;;20957:218:::0;:::o;540:179::-;598:7;618:9;634:1;630;:5;;;;:::i;:::-;618:17;;659:1;654;:6;;646:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;710:1;703:8;;;540:179;;;;:::o;164:98::-;217:7;244:10;237:17;;164:98;:::o;1069:248::-;1127:7;1156:1;1151;:6;1147:47;;1181:1;1174:8;;;;1147:47;1206:9;1222:1;1218;:5;;;;:::i;:::-;1206:17;;1251:1;1246;1242;:5;;;;:::i;:::-;:10;1234:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1308:1;1301:8;;;1069:248;;;;;:::o;1325:132::-;1383:7;1410:39;1414:1;1417;1410:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1403:46;;1325:132;;;;:::o;29643:1025::-;29722:1;29712:6;:11;29708:50;29740:7;29708:50;29768:24;29785:6;29768:16;:24::i;:::-;29805:12;29820:4;29805:19;;29835:15;29853:4;29835:22;;29878:23;29940:31;29961:9;;29940:16;;:20;;:31;;;;:::i;:::-;29904:33;29926:10;;29904:17;;:21;;:33;;;;:::i;:::-;:67;;;;:::i;:::-;29878:93;;29984:19;30036:1;30018:15;:19;30014:108;;;30068:42;30094:15;30068:21;:25;;:42;;;;:::i;:::-;30054:56;;30014:108;30132:23;30200:11;30158:39;30179:17;;30158:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;30132:79;;30222:17;30270:11;30242:25;30256:10;;30242:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;30222:59;;30324:1;30306:15;:19;30302:123;;;30364:15;;;;;;;;;;;30356:29;;30393:15;30356:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30342:71;;;;;30302:123;30461:1;30449:9;:13;30445:108;;;30504:9;;;;;;;;;;;30496:23;;30527:9;30496:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30479:62;;;;;30445:108;30570:90;30598:15;30628:7;:21;;;;;30639:10;30628:21;30570:90;;;;;;;:::i;:::-;;;;;;;;29697:971;;;;;;29643:1025;;:::o;727:136::-;785:7;812:43;816:1;819;812:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;805:50;;727:136;;;;:::o;6202:346::-;6321:1;6304:19;;:5;:19;;;6296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6402:1;6383:21;;:7;:21;;;6375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6486:6;6456:11;:18;6468:5;6456:18;;;;;;;;;;;;;;;:27;6475:7;6456:27;;;;;;;;;;;;;;;:36;;;;6524:7;6508:32;;6517:5;6508:32;;;6533:6;6508:32;;;;;;:::i;:::-;;;;;;;;6202:346;;;:::o;5270:538::-;5394:1;5376:20;;:6;:20;;;5368:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5478:1;5457:23;;:9;:23;;;5449:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5533:47;5554:6;5562:9;5573:6;5533:20;:47::i;:::-;5613:70;5635:6;5613:70;;;;;;;;;;;;;;;;;:9;:17;5623:6;5613:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5593:9;:17;5603:6;5593:17;;;;;;;;;;;;;;;:90;;;;5717:32;5742:6;5717:9;:20;5727:9;5717:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5694:9;:20;5704:9;5694:20;;;;;;;;;;;;;;;:55;;;;5782:9;5765:35;;5774:6;5765:35;;;5793:6;5765:35;;;;;;:::i;:::-;;;;;;;;5270:538;;;:::o;23406:4235::-;23522:1;23506:18;;:4;:18;;;23498:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23600:1;23586:16;;:2;:16;;;23578:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23656:21;23688:20;23719:14;23751:33;:39;23785:4;23751:39;;;;;;;;;;;;;;;;;;;;;;;;;23746:142;;23815:14;;;;;;;;;;;23807:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23746:142;23914:1;23904:6;:11;23900:3678;;23932:28;23948:4;23954:2;23958:1;23932:15;:28::i;:::-;23975:7;;;;;23900:3678;24038:8;;;;;;;;;;;24037:9;:39;;;;;24051:19;:25;24071:4;24051:25;;;;;;;;;;;;;;;;;;;;;;;;;24050:26;24037:39;:67;;;;;24081:19;:23;24101:2;24081:23;;;;;;;;;;;;;;;;;;;;;;;;;24080:24;24037:67;24019:3559;;;24131:14;24148:25;:29;24174:2;24148:29;;;;;;;;;;;;;;;;;;;;;;;;;24131:46;;24196:9;24192:1514;;;24242:17;;24226:33;;24293:16;;24278:31;;24337:10;;24328:19;;24372:14;;;;;;;;;;;24368:269;;;24476:13;;24434:28;:39;24463:9;24434:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24415:15;:74;;24407:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24602:15;24560:28;:39;24589:9;24560:39;;;;;;;;;;;;;;;:57;;;;24368:269;24192:1514;;;24721:16;;24705:32;;24771:15;;24756:30;;24814:9;;24805:18;;24848:14;;;;;;;;;;;24844:598;;;24920:1;24906:11;;:15;;;;:::i;:::-;24891:12;:30;24883:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24985:13;;24970:11;:28;;24962:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25092:12;25053:24;:35;25078:9;25053:35;;;;;;;;;;;;;;;;:51;25045:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25216:13;;25174:28;:39;25203:9;25174:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25155:15;:74;;25147:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;25338:12;25300:24;:35;25325:9;25300:35;;;;;;;;;;;;;;;:50;;;;25411:15;25369:28;:39;25398:9;25369:39;;;;;;;;;;;;;;;:57;;;;24844:598;25462:16;;;;;;;;;;;25458:233;;;25495:32;25530:13;25540:2;25530:9;:13::i;:::-;25495:48;;25603:9;;25593:6;25566:24;:33;;;;:::i;:::-;:46;;25558:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25480:211;25458:233;24192:1514;25722:17;25742:43;25778:6;25742:31;25760:12;25742:13;:17;;:31;;;;:::i;:::-;:35;;:43;;;;:::i;:::-;25722:63;;25802:28;25833:24;25851:4;25833:9;:24::i;:::-;25802:55;;25874:12;25913:18;;25889:20;:42;;25874:57;;25952:7;:43;;;;;25964:25;:31;25990:4;25964:31;;;;;;;;;;;;;;;;;;;;;;;;;25963:32;25952:43;25948:1272;;;26027:4;26016:8;;:15;;;;;;;;;;;;;;;;;;26052:18;26095:21;;;;;;;;;;;:41;;;;;26135:1;26120:12;:16;26095:41;26091:875;;;26161:20;26184:25;26198:10;;26184:9;;:13;;:25;;;;:::i;:::-;26161:48;;26232:24;26259:105;26351:12;26259:61;26310:9;;26259:20;:50;;:61;;;;:::i;:::-;:91;;:105;;;;:::i;:::-;26232:132;;26387:22;26412:106;26505:12;26412:62;26463:10;;26412:20;:50;;:62;;;;:::i;:::-;:92;;:106;;;;:::i;:::-;26387:131;;26543:21;26567:104;26658:12;;26567:60;26614:12;26567:16;:46;;:60;;;;:::i;:::-;:90;;:104;;;;:::i;:::-;26543:128;;26696:22;26721:103;26810:13;;26721:58;26766:12;26721:14;:44;;:58;;;;:::i;:::-;:88;;:103;;;;:::i;:::-;26696:128;;26862:33;26881:13;26862:14;:18;;:33;;;;:::i;:::-;26849:46;;26920:26;26935:10;26920:14;:26::i;:::-;26138:828;;;;;26091:875;26986:24;27013:34;27036:10;27013:18;;:22;;:34;;;;:::i;:::-;26986:61;;27066:38;27087:16;27066:20;:38::i;:::-;27135:1;27123:9;:13;;;;27168:1;27155:10;:14;;;;27199:5;27188:8;;:16;;;;;;;;;;;;;;;;;;25997:1223;;25948:1272;27236:12;27251:30;27277:3;27251:21;27262:9;27251:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27236:45;;27307:16;27318:4;27307:6;:10;;:16;;;;:::i;:::-;27298:25;;27344:9;27340:155;;;27387:20;27402:4;27387:10;;:14;;:20;;;;:::i;:::-;27374:10;:33;;;;27340:155;;;27460:19;27474:4;27460:9;;:13;;:19;;;;:::i;:::-;27448:9;:31;;;;27340:155;27511:42;27527:4;27541;27548;27511:15;:42::i;:::-;24116:3462;;;;;24019:3559;27590:33;27606:4;27612:2;27616:6;27590:15;:33::i;:::-;23485:4156;;;23406:4235;;;;:::o;871:190::-;957:7;990:1;985;:6;;993:12;977:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1017:9;1033:1;1029;:5;;;;:::i;:::-;1017:17;;1052:1;1045:8;;;871:190;;;;;:::o;21907:188::-;22024:5;21990:25;:31;22016:4;21990:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22081:5;22047:40;;22075:4;22047:40;;;;;;;;;;;;21907:188;;:::o;1465:189::-;1551:7;1583:1;1579;:5;1586:12;1571:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1610:9;1626:1;1622;:5;;;;:::i;:::-;1610:17;;1645:1;1638:8;;;1465:189;;;;;:::o;28139:499::-;28205:21;28243:1;28229:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28205:40;;28274:4;28256;28261:1;28256:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28300:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28290:4;28295:1;28290:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28333:62;28350:4;28365:15;;;;;;;;;;;28383:11;28333:8;:62::i;:::-;28406:15;;;;;;;;;;;:66;;;28487:11;28513:1;28557:4;28584;28604:15;28406:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28194:444;28139:499;:::o;6556:91::-;;;;:::o;27651:480::-;27710:12;27725:13;27736:1;27725:6;:10;;:13;;;;:::i;:::-;27710:28;;27749:17;27769:16;27780:4;27769:6;:10;;:16;;;;:::i;:::-;27749:36;;27796:22;27821:21;27796:46;;27853:22;27870:4;27853:16;:22::i;:::-;27956:18;27977:41;28003:14;27977:21;:25;;:41;;;;:::i;:::-;27956:62;;28029:35;28042:9;28053:10;28029:12;:35::i;:::-;28080:43;28095:4;28101:10;28113:9;28080:43;;;;;;;;:::i;:::-;;;;;;;;27699:432;;;;27651:480;:::o;28646:513::-;28794:62;28811:4;28826:15;;;;;;;;;;;28844:11;28794:8;:62::i;:::-;28899:15;;;;;;;;;;;:31;;;28938:9;28971:4;28991:11;29017:1;29060;29103:7;:5;:7::i;:::-;29125:15;28899:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28646:513;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:90::-;2956:7;2999:5;2992:13;2985:21;2974:32;;2922:90;;;:::o;3018:116::-;3088:21;3103:5;3088:21;:::i;:::-;3081:5;3078:32;3068:60;;3124:1;3121;3114:12;3068:60;3018:116;:::o;3140:133::-;3183:5;3221:6;3208:20;3199:29;;3237:30;3261:5;3237:30;:::i;:::-;3140:133;;;;:::o;3279:468::-;3344:6;3352;3401:2;3389:9;3380:7;3376:23;3372:32;3369:119;;;3407:79;;:::i;:::-;3369:119;3527:1;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3498:117;3654:2;3680:50;3722:7;3713:6;3702:9;3698:22;3680:50;:::i;:::-;3670:60;;3625:115;3279:468;;;;;:::o;3753:474::-;3821:6;3829;3878:2;3866:9;3857:7;3853:23;3849:32;3846:119;;;3884:79;;:::i;:::-;3846:119;4004:1;4029:53;4074:7;4065:6;4054:9;4050:22;4029:53;:::i;:::-;4019:63;;3975:117;4131:2;4157:53;4202:7;4193:6;4182:9;4178:22;4157:53;:::i;:::-;4147:63;;4102:118;3753:474;;;;;:::o;4233:109::-;4314:21;4329:5;4314:21;:::i;:::-;4309:3;4302:34;4233:109;;:::o;4348:210::-;4435:4;4473:2;4462:9;4458:18;4450:26;;4486:65;4548:1;4537:9;4533:17;4524:6;4486:65;:::i;:::-;4348:210;;;;:::o;4564:60::-;4592:3;4613:5;4606:12;;4564:60;;;:::o;4630:142::-;4680:9;4713:53;4731:34;4740:24;4758:5;4740:24;:::i;:::-;4731:34;:::i;:::-;4713:53;:::i;:::-;4700:66;;4630:142;;;:::o;4778:126::-;4828:9;4861:37;4892:5;4861:37;:::i;:::-;4848:50;;4778:126;;;:::o;4910:153::-;4987:9;5020:37;5051:5;5020:37;:::i;:::-;5007:50;;4910:153;;;:::o;5069:185::-;5183:64;5241:5;5183:64;:::i;:::-;5178:3;5171:77;5069:185;;:::o;5260:276::-;5380:4;5418:2;5407:9;5403:18;5395:26;;5431:98;5526:1;5515:9;5511:17;5502:6;5431:98;:::i;:::-;5260:276;;;;:::o;5542:118::-;5629:24;5647:5;5629:24;:::i;:::-;5624:3;5617:37;5542:118;;:::o;5666:222::-;5759:4;5797:2;5786:9;5782:18;5774:26;;5810:71;5878:1;5867:9;5863:17;5854:6;5810:71;:::i;:::-;5666:222;;;;:::o;5894:329::-;5953:6;6002:2;5990:9;5981:7;5977:23;5973:32;5970:119;;;6008:79;;:::i;:::-;5970:119;6128:1;6153:53;6198:7;6189:6;6178:9;6174:22;6153:53;:::i;:::-;6143:63;;6099:117;5894:329;;;;:::o;6229:117::-;6338:1;6335;6328:12;6352:180;6400:77;6397:1;6390:88;6497:4;6494:1;6487:15;6521:4;6518:1;6511:15;6538:281;6621:27;6643:4;6621:27;:::i;:::-;6613:6;6609:40;6751:6;6739:10;6736:22;6715:18;6703:10;6700:34;6697:62;6694:88;;;6762:18;;:::i;:::-;6694:88;6802:10;6798:2;6791:22;6581:238;6538:281;;:::o;6825:129::-;6859:6;6886:20;;:::i;:::-;6876:30;;6915:33;6943:4;6935:6;6915:33;:::i;:::-;6825:129;;;:::o;6960:311::-;7037:4;7127:18;7119:6;7116:30;7113:56;;;7149:18;;:::i;:::-;7113:56;7199:4;7191:6;7187:17;7179:25;;7259:4;7253;7249:15;7241:23;;6960:311;;;:::o;7277:117::-;7386:1;7383;7376:12;7417:710;7513:5;7538:81;7554:64;7611:6;7554:64;:::i;:::-;7538:81;:::i;:::-;7529:90;;7639:5;7668:6;7661:5;7654:21;7702:4;7695:5;7691:16;7684:23;;7755:4;7747:6;7743:17;7735:6;7731:30;7784:3;7776:6;7773:15;7770:122;;;7803:79;;:::i;:::-;7770:122;7918:6;7901:220;7935:6;7930:3;7927:15;7901:220;;;8010:3;8039:37;8072:3;8060:10;8039:37;:::i;:::-;8034:3;8027:50;8106:4;8101:3;8097:14;8090:21;;7977:144;7961:4;7956:3;7952:14;7945:21;;7901:220;;;7905:21;7519:608;;7417:710;;;;;:::o;8150:370::-;8221:5;8270:3;8263:4;8255:6;8251:17;8247:27;8237:122;;8278:79;;:::i;:::-;8237:122;8395:6;8382:20;8420:94;8510:3;8502:6;8495:4;8487:6;8483:17;8420:94;:::i;:::-;8411:103;;8227:293;8150:370;;;;:::o;8526:311::-;8603:4;8693:18;8685:6;8682:30;8679:56;;;8715:18;;:::i;:::-;8679:56;8765:4;8757:6;8753:17;8745:25;;8825:4;8819;8815:15;8807:23;;8526:311;;;:::o;8860:710::-;8956:5;8981:81;8997:64;9054:6;8997:64;:::i;:::-;8981:81;:::i;:::-;8972:90;;9082:5;9111:6;9104:5;9097:21;9145:4;9138:5;9134:16;9127:23;;9198:4;9190:6;9186:17;9178:6;9174:30;9227:3;9219:6;9216:15;9213:122;;;9246:79;;:::i;:::-;9213:122;9361:6;9344:220;9378:6;9373:3;9370:15;9344:220;;;9453:3;9482:37;9515:3;9503:10;9482:37;:::i;:::-;9477:3;9470:50;9549:4;9544:3;9540:14;9533:21;;9420:144;9404:4;9399:3;9395:14;9388:21;;9344:220;;;9348:21;8962:608;;8860:710;;;;;:::o;9593:370::-;9664:5;9713:3;9706:4;9698:6;9694:17;9690:27;9680:122;;9721:79;;:::i;:::-;9680:122;9838:6;9825:20;9863:94;9953:3;9945:6;9938:4;9930:6;9926:17;9863:94;:::i;:::-;9854:103;;9670:293;9593:370;;;;:::o;9969:894::-;10087:6;10095;10144:2;10132:9;10123:7;10119:23;10115:32;10112:119;;;10150:79;;:::i;:::-;10112:119;10298:1;10287:9;10283:17;10270:31;10328:18;10320:6;10317:30;10314:117;;;10350:79;;:::i;:::-;10314:117;10455:78;10525:7;10516:6;10505:9;10501:22;10455:78;:::i;:::-;10445:88;;10241:302;10610:2;10599:9;10595:18;10582:32;10641:18;10633:6;10630:30;10627:117;;;10663:79;;:::i;:::-;10627:117;10768:78;10838:7;10829:6;10818:9;10814:22;10768:78;:::i;:::-;10758:88;;10553:303;9969:894;;;;;:::o;10869:619::-;10946:6;10954;10962;11011:2;10999:9;10990:7;10986:23;10982:32;10979:119;;;11017:79;;:::i;:::-;10979:119;11137:1;11162:53;11207:7;11198:6;11187:9;11183:22;11162:53;:::i;:::-;11152:63;;11108:117;11264:2;11290:53;11335:7;11326:6;11315:9;11311:22;11290:53;:::i;:::-;11280:63;;11235:118;11392:2;11418:53;11463:7;11454:6;11443:9;11439:22;11418:53;:::i;:::-;11408:63;;11363:118;10869:619;;;;;:::o;11494:86::-;11529:7;11569:4;11562:5;11558:16;11547:27;;11494:86;;;:::o;11586:112::-;11669:22;11685:5;11669:22;:::i;:::-;11664:3;11657:35;11586:112;;:::o;11704:214::-;11793:4;11831:2;11820:9;11816:18;11808:26;;11844:67;11908:1;11897:9;11893:17;11884:6;11844:67;:::i;:::-;11704:214;;;;:::o;11924:118::-;12011:24;12029:5;12011:24;:::i;:::-;12006:3;11999:37;11924:118;;:::o;12048:222::-;12141:4;12179:2;12168:9;12164:18;12156:26;;12192:71;12260:1;12249:9;12245:17;12236:6;12192:71;:::i;:::-;12048:222;;;;:::o;12276:323::-;12332:6;12381:2;12369:9;12360:7;12356:23;12352:32;12349:119;;;12387:79;;:::i;:::-;12349:119;12507:1;12532:50;12574:7;12565:6;12554:9;12550:22;12532:50;:::i;:::-;12522:60;;12478:114;12276:323;;;;:::o;12605:104::-;12650:7;12679:24;12697:5;12679:24;:::i;:::-;12668:35;;12605:104;;;:::o;12715:142::-;12818:32;12844:5;12818:32;:::i;:::-;12813:3;12806:45;12715:142;;:::o;12863:254::-;12972:4;13010:2;12999:9;12995:18;12987:26;;13023:87;13107:1;13096:9;13092:17;13083:6;13023:87;:::i;:::-;12863:254;;;;:::o;13123:1057::-;13227:6;13235;13243;13251;13259;13267;13316:3;13304:9;13295:7;13291:23;13287:33;13284:120;;;13323:79;;:::i;:::-;13284:120;13443:1;13468:53;13513:7;13504:6;13493:9;13489:22;13468:53;:::i;:::-;13458:63;;13414:117;13570:2;13596:53;13641:7;13632:6;13621:9;13617:22;13596:53;:::i;:::-;13586:63;;13541:118;13698:2;13724:53;13769:7;13760:6;13749:9;13745:22;13724:53;:::i;:::-;13714:63;;13669:118;13826:2;13852:53;13897:7;13888:6;13877:9;13873:22;13852:53;:::i;:::-;13842:63;;13797:118;13954:3;13981:53;14026:7;14017:6;14006:9;14002:22;13981:53;:::i;:::-;13971:63;;13925:119;14083:3;14110:53;14155:7;14146:6;14135:9;14131:22;14110:53;:::i;:::-;14100:63;;14054:119;13123:1057;;;;;;;;:::o;14186:474::-;14254:6;14262;14311:2;14299:9;14290:7;14286:23;14282:32;14279:119;;;14317:79;;:::i;:::-;14279:119;14437:1;14462:53;14507:7;14498:6;14487:9;14483:22;14462:53;:::i;:::-;14452:63;;14408:117;14564:2;14590:53;14635:7;14626:6;14615:9;14611:22;14590:53;:::i;:::-;14580:63;;14535:118;14186:474;;;;;:::o;14666:182::-;14806:34;14802:1;14794:6;14790:14;14783:58;14666:182;:::o;14854:366::-;14996:3;15017:67;15081:2;15076:3;15017:67;:::i;:::-;15010:74;;15093:93;15182:3;15093:93;:::i;:::-;15211:2;15206:3;15202:12;15195:19;;14854:366;;;:::o;15226:419::-;15392:4;15430:2;15419:9;15415:18;15407:26;;15479:9;15473:4;15469:20;15465:1;15454:9;15450:17;15443:47;15507:131;15633:4;15507:131;:::i;:::-;15499:139;;15226:419;;;:::o;15651:180::-;15699:77;15696:1;15689:88;15796:4;15793:1;15786:15;15820:4;15817:1;15810:15;15837:348;15877:7;15900:20;15918:1;15900:20;:::i;:::-;15895:25;;15934:20;15952:1;15934:20;:::i;:::-;15929:25;;16122:1;16054:66;16050:74;16047:1;16044:81;16039:1;16032:9;16025:17;16021:105;16018:131;;;16129:18;;:::i;:::-;16018:131;16177:1;16174;16170:9;16159:20;;15837:348;;;;:::o;16191:180::-;16239:77;16236:1;16229:88;16336:4;16333:1;16326:15;16360:4;16357:1;16350:15;16377:320;16421:6;16458:1;16452:4;16448:12;16438:22;;16505:1;16499:4;16495:12;16526:18;16516:81;;16582:4;16574:6;16570:17;16560:27;;16516:81;16644:2;16636:6;16633:14;16613:18;16610:38;16607:84;;16663:18;;:::i;:::-;16607:84;16428:269;16377:320;;;:::o;16703:180::-;16843:32;16839:1;16831:6;16827:14;16820:56;16703:180;:::o;16889:366::-;17031:3;17052:67;17116:2;17111:3;17052:67;:::i;:::-;17045:74;;17128:93;17217:3;17128:93;:::i;:::-;17246:2;17241:3;17237:12;17230:19;;16889:366;;;:::o;17261:419::-;17427:4;17465:2;17454:9;17450:18;17442:26;;17514:9;17508:4;17504:20;17500:1;17489:9;17485:17;17478:47;17542:131;17668:4;17542:131;:::i;:::-;17534:139;;17261:419;;;:::o;17686:221::-;17826:34;17822:1;17814:6;17810:14;17803:58;17895:4;17890:2;17882:6;17878:15;17871:29;17686:221;:::o;17913:366::-;18055:3;18076:67;18140:2;18135:3;18076:67;:::i;:::-;18069:74;;18152:93;18241:3;18152:93;:::i;:::-;18270:2;18265:3;18261:12;18254:19;;17913:366;;;:::o;18285:419::-;18451:4;18489:2;18478:9;18474:18;18466:26;;18538:9;18532:4;18528:20;18524:1;18513:9;18509:17;18502:47;18566:131;18692:4;18566:131;:::i;:::-;18558:139;;18285:419;;;:::o;18710:180::-;18758:77;18755:1;18748:88;18855:4;18852:1;18845:15;18879:4;18876:1;18869:15;18896:233;18935:3;18958:24;18976:5;18958:24;:::i;:::-;18949:33;;19004:66;18997:5;18994:77;18991:103;;19074:18;;:::i;:::-;18991:103;19121:1;19114:5;19110:13;19103:20;;18896:233;;;:::o;19135:223::-;19275:34;19271:1;19263:6;19259:14;19252:58;19344:6;19339:2;19331:6;19327:15;19320:31;19135:223;:::o;19364:366::-;19506:3;19527:67;19591:2;19586:3;19527:67;:::i;:::-;19520:74;;19603:93;19692:3;19603:93;:::i;:::-;19721:2;19716:3;19712:12;19705:19;;19364:366;;;:::o;19736:419::-;19902:4;19940:2;19929:9;19925:18;19917:26;;19989:9;19983:4;19979:20;19975:1;19964:9;19960:17;19953:47;20017:131;20143:4;20017:131;:::i;:::-;20009:139;;19736:419;;;:::o;20161:775::-;20394:4;20432:3;20421:9;20417:19;20409:27;;20446:71;20514:1;20503:9;20499:17;20490:6;20446:71;:::i;:::-;20527:72;20595:2;20584:9;20580:18;20571:6;20527:72;:::i;:::-;20609;20677:2;20666:9;20662:18;20653:6;20609:72;:::i;:::-;20691;20759:2;20748:9;20744:18;20735:6;20691:72;:::i;:::-;20773:73;20841:3;20830:9;20826:19;20817:6;20773:73;:::i;:::-;20856;20924:3;20913:9;20909:19;20900:6;20856:73;:::i;:::-;20161:775;;;;;;;;;:::o;20942:225::-;21082:34;21078:1;21070:6;21066:14;21059:58;21151:8;21146:2;21138:6;21134:15;21127:33;20942:225;:::o;21173:366::-;21315:3;21336:67;21400:2;21395:3;21336:67;:::i;:::-;21329:74;;21412:93;21501:3;21412:93;:::i;:::-;21530:2;21525:3;21521:12;21514:19;;21173:366;;;:::o;21545:419::-;21711:4;21749:2;21738:9;21734:18;21726:26;;21798:9;21792:4;21788:20;21784:1;21773:9;21769:17;21762:47;21826:131;21952:4;21826:131;:::i;:::-;21818:139;;21545:419;;;:::o;21970:225::-;22110:34;22106:1;22098:6;22094:14;22087:58;22179:8;22174:2;22166:6;22162:15;22155:33;21970:225;:::o;22201:366::-;22343:3;22364:67;22428:2;22423:3;22364:67;:::i;:::-;22357:74;;22440:93;22529:3;22440:93;:::i;:::-;22558:2;22553:3;22549:12;22542:19;;22201:366;;;:::o;22573:419::-;22739:4;22777:2;22766:9;22762:18;22754:26;;22826:9;22820:4;22816:20;22812:1;22801:9;22797:17;22790:47;22854:131;22980:4;22854:131;:::i;:::-;22846:139;;22573:419;;;:::o;22998:180::-;23046:77;23043:1;23036:88;23143:4;23140:1;23133:15;23167:4;23164:1;23157:15;23184:185;23224:1;23241:20;23259:1;23241:20;:::i;:::-;23236:25;;23275:20;23293:1;23275:20;:::i;:::-;23270:25;;23314:1;23304:35;;23319:18;;:::i;:::-;23304:35;23361:1;23358;23354:9;23349:14;;23184:185;;;;:::o;23375:227::-;23515:34;23511:1;23503:6;23499:14;23492:58;23584:10;23579:2;23571:6;23567:15;23560:35;23375:227;:::o;23608:366::-;23750:3;23771:67;23835:2;23830:3;23771:67;:::i;:::-;23764:74;;23847:93;23936:3;23847:93;:::i;:::-;23965:2;23960:3;23956:12;23949:19;;23608:366;;;:::o;23980:419::-;24146:4;24184:2;24173:9;24169:18;24161:26;;24233:9;24227:4;24223:20;24219:1;24208:9;24204:17;24197:47;24261:131;24387:4;24261:131;:::i;:::-;24253:139;;23980:419;;;:::o;24405:305::-;24445:3;24464:20;24482:1;24464:20;:::i;:::-;24459:25;;24498:20;24516:1;24498:20;:::i;:::-;24493:25;;24652:1;24584:66;24580:74;24577:1;24574:81;24571:107;;;24658:18;;:::i;:::-;24571:107;24702:1;24699;24695:9;24688:16;;24405:305;;;;:::o;24716:177::-;24856:29;24852:1;24844:6;24840:14;24833:53;24716:177;:::o;24899:366::-;25041:3;25062:67;25126:2;25121:3;25062:67;:::i;:::-;25055:74;;25138:93;25227:3;25138:93;:::i;:::-;25256:2;25251:3;25247:12;25240:19;;24899:366;;;:::o;25271:419::-;25437:4;25475:2;25464:9;25460:18;25452:26;;25524:9;25518:4;25514:20;25510:1;25499:9;25495:17;25488:47;25552:131;25678:4;25552:131;:::i;:::-;25544:139;;25271:419;;;:::o;25696:220::-;25836:34;25832:1;25824:6;25820:14;25813:58;25905:3;25900:2;25892:6;25888:15;25881:28;25696:220;:::o;25922:366::-;26064:3;26085:67;26149:2;26144:3;26085:67;:::i;:::-;26078:74;;26161:93;26250:3;26161:93;:::i;:::-;26279:2;26274:3;26270:12;26263:19;;25922:366;;;:::o;26294:419::-;26460:4;26498:2;26487:9;26483:18;26475:26;;26547:9;26541:4;26537:20;26533:1;26522:9;26518:17;26511:47;26575:131;26701:4;26575:131;:::i;:::-;26567:139;;26294:419;;;:::o;26719:147::-;26820:11;26857:3;26842:18;;26719:147;;;;:::o;26872:114::-;;:::o;26992:398::-;27151:3;27172:83;27253:1;27248:3;27172:83;:::i;:::-;27165:90;;27264:93;27353:3;27264:93;:::i;:::-;27382:1;27377:3;27373:11;27366:18;;26992:398;;;:::o;27396:379::-;27580:3;27602:147;27745:3;27602:147;:::i;:::-;27595:154;;27766:3;27759:10;;27396:379;;;:::o;27781:320::-;27896:4;27934:2;27923:9;27919:18;27911:26;;27947:71;28015:1;28004:9;28000:17;27991:6;27947:71;:::i;:::-;28028:66;28090:2;28079:9;28075:18;28066:6;28028:66;:::i;:::-;27781:320;;;;;:::o;28107:223::-;28247:34;28243:1;28235:6;28231:14;28224:58;28316:6;28311:2;28303:6;28299:15;28292:31;28107:223;:::o;28336:366::-;28478:3;28499:67;28563:2;28558:3;28499:67;:::i;:::-;28492:74;;28575:93;28664:3;28575:93;:::i;:::-;28693:2;28688:3;28684:12;28677:19;;28336:366;;;:::o;28708:419::-;28874:4;28912:2;28901:9;28897:18;28889:26;;28961:9;28955:4;28951:20;28947:1;28936:9;28932:17;28925:47;28989:131;29115:4;28989:131;:::i;:::-;28981:139;;28708:419;;;:::o;29133:221::-;29273:34;29269:1;29261:6;29257:14;29250:58;29342:4;29337:2;29329:6;29325:15;29318:29;29133:221;:::o;29360:366::-;29502:3;29523:67;29587:2;29582:3;29523:67;:::i;:::-;29516:74;;29599:93;29688:3;29599:93;:::i;:::-;29717:2;29712:3;29708:12;29701:19;;29360:366;;;:::o;29732:419::-;29898:4;29936:2;29925:9;29921:18;29913:26;;29985:9;29979:4;29975:20;29971:1;29960:9;29956:17;29949:47;30013:131;30139:4;30013:131;:::i;:::-;30005:139;;29732:419;;;:::o;30157:224::-;30297:34;30293:1;30285:6;30281:14;30274:58;30366:7;30361:2;30353:6;30349:15;30342:32;30157:224;:::o;30387:366::-;30529:3;30550:67;30614:2;30609:3;30550:67;:::i;:::-;30543:74;;30626:93;30715:3;30626:93;:::i;:::-;30744:2;30739:3;30735:12;30728:19;;30387:366;;;:::o;30759:419::-;30925:4;30963:2;30952:9;30948:18;30940:26;;31012:9;31006:4;31002:20;30998:1;30987:9;30983:17;30976:47;31040:131;31166:4;31040:131;:::i;:::-;31032:139;;30759:419;;;:::o;31184:222::-;31324:34;31320:1;31312:6;31308:14;31301:58;31393:5;31388:2;31380:6;31376:15;31369:30;31184:222;:::o;31412:366::-;31554:3;31575:67;31639:2;31634:3;31575:67;:::i;:::-;31568:74;;31651:93;31740:3;31651:93;:::i;:::-;31769:2;31764:3;31760:12;31753:19;;31412:366;;;:::o;31784:419::-;31950:4;31988:2;31977:9;31973:18;31965:26;;32037:9;32031:4;32027:20;32023:1;32012:9;32008:17;32001:47;32065:131;32191:4;32065:131;:::i;:::-;32057:139;;31784:419;;;:::o;32209:225::-;32349:34;32345:1;32337:6;32333:14;32326:58;32418:8;32413:2;32405:6;32401:15;32394:33;32209:225;:::o;32440:366::-;32582:3;32603:67;32667:2;32662:3;32603:67;:::i;:::-;32596:74;;32679:93;32768:3;32679:93;:::i;:::-;32797:2;32792:3;32788:12;32781:19;;32440:366;;;:::o;32812:419::-;32978:4;33016:2;33005:9;33001:18;32993:26;;33065:9;33059:4;33055:20;33051:1;33040:9;33036:17;33029:47;33093:131;33219:4;33093:131;:::i;:::-;33085:139;;32812:419;;;:::o;33237:223::-;33377:34;33373:1;33365:6;33361:14;33354:58;33446:6;33441:2;33433:6;33429:15;33422:31;33237:223;:::o;33466:366::-;33608:3;33629:67;33693:2;33688:3;33629:67;:::i;:::-;33622:74;;33705:93;33794:3;33705:93;:::i;:::-;33823:2;33818:3;33814:12;33807:19;;33466:366;;;:::o;33838:419::-;34004:4;34042:2;34031:9;34027:18;34019:26;;34091:9;34085:4;34081:20;34077:1;34066:9;34062:17;34055:47;34119:131;34245:4;34119:131;:::i;:::-;34111:139;;33838:419;;;:::o;34263:182::-;34403:34;34399:1;34391:6;34387:14;34380:58;34263:182;:::o;34451:366::-;34593:3;34614:67;34678:2;34673:3;34614:67;:::i;:::-;34607:74;;34690:93;34779:3;34690:93;:::i;:::-;34808:2;34803:3;34799:12;34792:19;;34451:366;;;:::o;34823:419::-;34989:4;35027:2;35016:9;35012:18;35004:26;;35076:9;35070:4;35066:20;35062:1;35051:9;35047:17;35040:47;35104:131;35230:4;35104:131;:::i;:::-;35096:139;;34823:419;;;:::o;35248:172::-;35388:24;35384:1;35376:6;35372:14;35365:48;35248:172;:::o;35426:366::-;35568:3;35589:67;35653:2;35648:3;35589:67;:::i;:::-;35582:74;;35665:93;35754:3;35665:93;:::i;:::-;35783:2;35778:3;35774:12;35767:19;;35426:366;;;:::o;35798:419::-;35964:4;36002:2;35991:9;35987:18;35979:26;;36051:9;36045:4;36041:20;36037:1;36026:9;36022:17;36015:47;36079:131;36205:4;36079:131;:::i;:::-;36071:139;;35798:419;;;:::o;36223:168::-;36363:20;36359:1;36351:6;36347:14;36340:44;36223:168;:::o;36397:366::-;36539:3;36560:67;36624:2;36619:3;36560:67;:::i;:::-;36553:74;;36636:93;36725:3;36636:93;:::i;:::-;36754:2;36749:3;36745:12;36738:19;;36397:366;;;:::o;36769:419::-;36935:4;36973:2;36962:9;36958:18;36950:26;;37022:9;37016:4;37012:20;37008:1;36997:9;36993:17;36986:47;37050:131;37176:4;37050:131;:::i;:::-;37042:139;;36769:419;;;:::o;37194:174::-;37334:26;37330:1;37322:6;37318:14;37311:50;37194:174;:::o;37374:366::-;37516:3;37537:67;37601:2;37596:3;37537:67;:::i;:::-;37530:74;;37613:93;37702:3;37613:93;:::i;:::-;37731:2;37726:3;37722:12;37715:19;;37374:366;;;:::o;37746:419::-;37912:4;37950:2;37939:9;37935:18;37927:26;;37999:9;37993:4;37989:20;37985:1;37974:9;37970:17;37963:47;38027:131;38153:4;38027:131;:::i;:::-;38019:139;;37746:419;;;:::o;38171:170::-;38311:22;38307:1;38299:6;38295:14;38288:46;38171:170;:::o;38347:366::-;38489:3;38510:67;38574:2;38569:3;38510:67;:::i;:::-;38503:74;;38586:93;38675:3;38586:93;:::i;:::-;38704:2;38699:3;38695:12;38688:19;;38347:366;;;:::o;38719:419::-;38885:4;38923:2;38912:9;38908:18;38900:26;;38972:9;38966:4;38962:20;38958:1;38947:9;38943:17;38936:47;39000:131;39126:4;39000:131;:::i;:::-;38992:139;;38719:419;;;:::o;39144:223::-;39284:34;39280:1;39272:6;39268:14;39261:58;39353:6;39348:2;39340:6;39336:15;39329:31;39144:223;:::o;39373:366::-;39515:3;39536:67;39600:2;39595:3;39536:67;:::i;:::-;39529:74;;39612:93;39701:3;39612:93;:::i;:::-;39730:2;39725:3;39721:12;39714:19;;39373:366;;;:::o;39745:419::-;39911:4;39949:2;39938:9;39934:18;39926:26;;39998:9;39992:4;39988:20;39984:1;39973:9;39969:17;39962:47;40026:131;40152:4;40026:131;:::i;:::-;40018:139;;39745:419;;;:::o;40170:191::-;40210:4;40230:20;40248:1;40230:20;:::i;:::-;40225:25;;40264:20;40282:1;40264:20;:::i;:::-;40259:25;;40303:1;40300;40297:8;40294:34;;;40308:18;;:::i;:::-;40294:34;40353:1;40350;40346:9;40338:17;;40170:191;;;;:::o;40367:143::-;40424:5;40455:6;40449:13;40440:22;;40471:33;40498:5;40471:33;:::i;:::-;40367:143;;;;:::o;40516:351::-;40586:6;40635:2;40623:9;40614:7;40610:23;40606:32;40603:119;;;40641:79;;:::i;:::-;40603:119;40761:1;40786:64;40842:7;40833:6;40822:9;40818:22;40786:64;:::i;:::-;40776:74;;40732:128;40516:351;;;;:::o;40873:85::-;40918:7;40947:5;40936:16;;40873:85;;;:::o;40964:158::-;41022:9;41055:61;41073:42;41082:32;41108:5;41082:32;:::i;:::-;41073:42;:::i;:::-;41055:61;:::i;:::-;41042:74;;40964:158;;;:::o;41128:147::-;41223:45;41262:5;41223:45;:::i;:::-;41218:3;41211:58;41128:147;;:::o;41281:114::-;41348:6;41382:5;41376:12;41366:22;;41281:114;;;:::o;41401:184::-;41500:11;41534:6;41529:3;41522:19;41574:4;41569:3;41565:14;41550:29;;41401:184;;;;:::o;41591:132::-;41658:4;41681:3;41673:11;;41711:4;41706:3;41702:14;41694:22;;41591:132;;;:::o;41729:108::-;41806:24;41824:5;41806:24;:::i;:::-;41801:3;41794:37;41729:108;;:::o;41843:179::-;41912:10;41933:46;41975:3;41967:6;41933:46;:::i;:::-;42011:4;42006:3;42002:14;41988:28;;41843:179;;;;:::o;42028:113::-;42098:4;42130;42125:3;42121:14;42113:22;;42028:113;;;:::o;42177:732::-;42296:3;42325:54;42373:5;42325:54;:::i;:::-;42395:86;42474:6;42469:3;42395:86;:::i;:::-;42388:93;;42505:56;42555:5;42505:56;:::i;:::-;42584:7;42615:1;42600:284;42625:6;42622:1;42619:13;42600:284;;;42701:6;42695:13;42728:63;42787:3;42772:13;42728:63;:::i;:::-;42721:70;;42814:60;42867:6;42814:60;:::i;:::-;42804:70;;42660:224;42647:1;42644;42640:9;42635:14;;42600:284;;;42604:14;42900:3;42893:10;;42301:608;;;42177:732;;;;:::o;42915:831::-;43178:4;43216:3;43205:9;43201:19;43193:27;;43230:71;43298:1;43287:9;43283:17;43274:6;43230:71;:::i;:::-;43311:80;43387:2;43376:9;43372:18;43363:6;43311:80;:::i;:::-;43438:9;43432:4;43428:20;43423:2;43412:9;43408:18;43401:48;43466:108;43569:4;43560:6;43466:108;:::i;:::-;43458:116;;43584:72;43652:2;43641:9;43637:18;43628:6;43584:72;:::i;:::-;43666:73;43734:3;43723:9;43719:19;43710:6;43666:73;:::i;:::-;42915:831;;;;;;;;:::o;43752:442::-;43901:4;43939:2;43928:9;43924:18;43916:26;;43952:71;44020:1;44009:9;44005:17;43996:6;43952:71;:::i;:::-;44033:72;44101:2;44090:9;44086:18;44077:6;44033:72;:::i;:::-;44115;44183:2;44172:9;44168:18;44159:6;44115:72;:::i;:::-;43752:442;;;;;;:::o;44200:807::-;44449:4;44487:3;44476:9;44472:19;44464:27;;44501:71;44569:1;44558:9;44554:17;44545:6;44501:71;:::i;:::-;44582:72;44650:2;44639:9;44635:18;44626:6;44582:72;:::i;:::-;44664:80;44740:2;44729:9;44725:18;44716:6;44664:80;:::i;:::-;44754;44830:2;44819:9;44815:18;44806:6;44754:80;:::i;:::-;44844:73;44912:3;44901:9;44897:19;44888:6;44844:73;:::i;:::-;44927;44995:3;44984:9;44980:19;44971:6;44927:73;:::i;:::-;44200:807;;;;;;;;;:::o;45013:143::-;45070:5;45101:6;45095:13;45086:22;;45117:33;45144:5;45117:33;:::i;:::-;45013:143;;;;:::o;45162:663::-;45250:6;45258;45266;45315:2;45303:9;45294:7;45290:23;45286:32;45283:119;;;45321:79;;:::i;:::-;45283:119;45441:1;45466:64;45522:7;45513:6;45502:9;45498:22;45466:64;:::i;:::-;45456:74;;45412:128;45579:2;45605:64;45661:7;45652:6;45641:9;45637:22;45605:64;:::i;:::-;45595:74;;45550:129;45718:2;45744:64;45800:7;45791:6;45780:9;45776:22;45744:64;:::i;:::-;45734:74;;45689:129;45162:663;;;;;:::o

Swarm Source

ipfs://3388a4f06c43d3ab23479030e855337897943accfa8fdc754b158795c805af42
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.