ETH Price: $3,335.24 (-0.75%)

Contract

0xFC21540d6B89667D167D42086E1feb04DA3E9B21
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve214952582024-12-27 17:22:119 hrs ago1735320131IN
0xFC21540d...4DA3E9B21
0 ETH0.000215738.66795969
Approve214776162024-12-25 6:11:592 days ago1735107119IN
0xFC21540d...4DA3E9B21
0 ETH0.000247295.24367013
Transfer214738672024-12-24 17:38:233 days ago1735061903IN
0xFC21540d...4DA3E9B21
0 ETH0.001576746.9757585
Approve214717442024-12-24 10:30:353 days ago1735036235IN
0xFC21540d...4DA3E9B21
0 ETH0.000460439.76065784
Approve214714362024-12-24 9:27:593 days ago1735032479IN
0xFC21540d...4DA3E9B21
0 ETH0.000378088.01491588
Approve214660742024-12-23 15:27:114 days ago1734967631IN
0xFC21540d...4DA3E9B21
0 ETH0.0010364521.9491029
Approve214581942024-12-22 13:00:115 days ago1734872411IN
0xFC21540d...4DA3E9B21
0 ETH0.000281035.95751063
Approve214525092024-12-21 17:55:116 days ago1734803711IN
0xFC21540d...4DA3E9B21
0 ETH0.000365417.79179349
Approve214525062024-12-21 17:54:356 days ago1734803675IN
0xFC21540d...4DA3E9B21
0 ETH0.000401348.55791867
Approve214426522024-12-20 8:51:237 days ago1734684683IN
0xFC21540d...4DA3E9B21
0 ETH0.0012495226.45439676
Approve214426492024-12-20 8:50:477 days ago1734684647IN
0xFC21540d...4DA3E9B21
0 ETH0.0013165727.8740761
Approve214426472024-12-20 8:50:237 days ago1734684623IN
0xFC21540d...4DA3E9B21
0 ETH0.0013491128.56304967
Approve214426432024-12-20 8:49:357 days ago1734684575IN
0xFC21540d...4DA3E9B21
0 ETH0.0011534224.45089676
Approve214426382024-12-20 8:48:357 days ago1734684515IN
0xFC21540d...4DA3E9B21
0 ETH0.0012151325.75263004
Transfer214426362024-12-20 8:48:117 days ago1734684491IN
0xFC21540d...4DA3E9B21
0 ETH0.0025251229.39579616
Transfer214426342024-12-20 8:47:477 days ago1734684467IN
0xFC21540d...4DA3E9B21
0 ETH0.0020379331.83631399
Transfer214426342024-12-20 8:47:477 days ago1734684467IN
0xFC21540d...4DA3E9B21
0 ETH0.0020383231.83631399
Transfer214426342024-12-20 8:47:477 days ago1734684467IN
0xFC21540d...4DA3E9B21
0 ETH0.0020383231.83631399
Transfer214426342024-12-20 8:47:477 days ago1734684467IN
0xFC21540d...4DA3E9B21
0 ETH0.0020383231.83631399
Transfer214426342024-12-20 8:47:477 days ago1734684467IN
0xFC21540d...4DA3E9B21
0 ETH0.0020383231.83631399
Transfer214426342024-12-20 8:47:477 days ago1734684467IN
0xFC21540d...4DA3E9B21
0 ETH0.0020383231.83631399
Transfer214426342024-12-20 8:47:477 days ago1734684467IN
0xFC21540d...4DA3E9B21
0 ETH0.002038731.83631399
Transfer214426342024-12-20 8:47:477 days ago1734684467IN
0xFC21540d...4DA3E9B21
0 ETH0.002038731.83631399
Transfer214425032024-12-20 8:21:117 days ago1734682871IN
0xFC21540d...4DA3E9B21
0 ETH0.003917.25488783
Approve214231122024-12-17 15:20:2310 days ago1734448823IN
0xFC21540d...4DA3E9B21
0 ETH0.0021864946.29159562
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214895322024-12-26 22:09:5928 hrs ago1735250999
0xFC21540d...4DA3E9B21
0.00290743 ETH
214895322024-12-26 22:09:5928 hrs ago1735250999
0xFC21540d...4DA3E9B21
0.00290743 ETH
214738672024-12-24 17:38:233 days ago1735061903
0xFC21540d...4DA3E9B21
0.00548488 ETH
214738672024-12-24 17:38:233 days ago1735061903
0xFC21540d...4DA3E9B21
0.00548488 ETH
214575172024-12-22 10:43:475 days ago1734864227
0xFC21540d...4DA3E9B21
0.00489746 ETH
214575172024-12-22 10:43:475 days ago1734864227
0xFC21540d...4DA3E9B21
0.00489746 ETH
214525112024-12-21 17:55:356 days ago1734803735
0xFC21540d...4DA3E9B21
0.00489746 ETH
214525112024-12-21 17:55:356 days ago1734803735
0xFC21540d...4DA3E9B21
0.00489746 ETH
214525062024-12-21 17:54:356 days ago1734803675
0xFC21540d...4DA3E9B21
0.00418193 ETH
214525062024-12-21 17:54:356 days ago1734803675
0xFC21540d...4DA3E9B21
0.00418193 ETH
214425032024-12-20 8:21:117 days ago1734682871
0xFC21540d...4DA3E9B21
0.0108501 ETH
214425032024-12-20 8:21:117 days ago1734682871
0xFC21540d...4DA3E9B21
0.0108501 ETH
214425032024-12-20 8:21:117 days ago1734682871
0xFC21540d...4DA3E9B21
0.0108501 ETH
214425032024-12-20 8:21:117 days ago1734682871
0xFC21540d...4DA3E9B21
0.0108501 ETH
213967862024-12-13 23:10:5914 days ago1734131459
0xFC21540d...4DA3E9B21
0.01230277 ETH
213967862024-12-13 23:10:5914 days ago1734131459
0xFC21540d...4DA3E9B21
0.01230277 ETH
213944572024-12-13 15:22:2314 days ago1734103343
0xFC21540d...4DA3E9B21
0.00741518 ETH
213944572024-12-13 15:22:2314 days ago1734103343
0xFC21540d...4DA3E9B21
0.00741518 ETH
213836092024-12-12 3:02:3515 days ago1733972555
0xFC21540d...4DA3E9B21
0.00526946 ETH
213836092024-12-12 3:02:3515 days ago1733972555
0xFC21540d...4DA3E9B21
0.00526946 ETH
213707362024-12-10 7:52:5917 days ago1733817179
0xFC21540d...4DA3E9B21
0.00400106 ETH
213707362024-12-10 7:52:5917 days ago1733817179
0xFC21540d...4DA3E9B21
0.00400106 ETH
213602752024-12-08 20:50:3519 days ago1733691035
0xFC21540d...4DA3E9B21
0.00294504 ETH
213602752024-12-08 20:50:3519 days ago1733691035
0xFC21540d...4DA3E9B21
0.00294504 ETH
213507092024-12-07 12:47:2320 days ago1733575643
0xFC21540d...4DA3E9B21
0.00287753 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
InfiTokenContract

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-10
*/

// SPDX-License-Identifier: MIT

// Website: https://infinetsolutions.io
// Telegram: https://t.me/infinet_solutions
// Twitter: https://twitter.com/Infinet_io
// Docs: http://docs.infinetsolutions.io/

pragma solidity ^0.8.17;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Invalid owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "New owner is ZERO");
        _transferOwnership(newOwner);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from, address to, 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 IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

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

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

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

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

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

    function 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;

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (
        uint112 reserve0,
        uint112 reserve1,
        uint32 blockTimestampLast
    );

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

contract ERC20 is IERC20, Context {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

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

    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 approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: Not owner != address(0)");
        require(spender != address(0), "ERC20: Not spender != address(0)");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        _transfer(from, to, amount);
        uint256 curAllow = _allowances[from][_msgSender()];
        require(curAllow >= amount, "ERC20: Not curAllow >= amount");
        unchecked {
            _approve(from, _msgSender(), curAllow - amount);
        }
        return true;
    }

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

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

    function decreaseAllowance(address spender, uint256 subValue) public virtual returns (bool) {
        uint256 curAllow = _allowances[_msgSender()][spender];
        require(curAllow >= subValue, "ERC20: Not curAllow >= subValue");
        unchecked {
            _approve(_msgSender(), spender, curAllow - subValue);
        }
        return true;
    }

    function _mint(
    	address account,
	    uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(
    	address account,
	    uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 kBalance = _balances[account];
        require(kBalance >= amount, "ERC20: kBalance >= amount");
        unchecked {
            _balances[account] = kBalance - amount;
        }
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }

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

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: Not from != address(0)");
        require(to != address(0), "ERC20: Not to != address(0)");
        _beforeTokenTransfer(from, to, amount);
        uint256 balanceFrom = _balances[from];
        require(balanceFrom >= amount, "ERC20: Not balanceFrom >= amount");
        unchecked {
            _balances[from] = balanceFrom - amount;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

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

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

    IUniswapV2Router02 public swapRouter;
    address public swapPair;
    
    uint256 public minSwapTokenAmount;
    uint256 public maxTokenAmountPerWallet;
    uint256 public maxTokenAmountPerTxn;

    bool public bTradingActive = false;
    bool public bSwapEnabled = false;

    address public marketingWallet;
    address public devWallet;

    uint256 public tokenAmountForMarketing;
    uint256 public tokenAmountForDev;

    mapping(address => bool) public bExcludedMaxTokenAmountPerTxn;

    mapping(address => bool) public bExcludedFromTax;

    mapping(address => bool) public automatedMarketMakerPairs;

    bool public limitsInEffect = true;

    uint256 public sellTotalTax;
    uint256 public sellMarketingTax;
    uint256 public sellDevTax;

    uint256 public buyTotalTax;
    uint256 public buyMarketingTax;
    uint256 public buyDevTax;
    bool public isPaused;

    
    bool private bSwapping;

    mapping(address => bool) private blackList;
    
    constructor(address _devWallet, address _marketingWallet, address _swapRouter) ERC20("INFINET", "INFI"){
        devWallet = address(_devWallet);
        marketingWallet = address(_marketingWallet);


        swapRouter = IUniswapV2Router02(_swapRouter);
        swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(address(this), swapRouter.WETH());

        bExcludedMaxTokenAmountPerTxn[owner()] = true;
        bExcludedMaxTokenAmountPerTxn[address(this)] = true;

        uint256 totalSupply = 1_000_000_000 * (10 ** decimals());
        minSwapTokenAmount = (totalSupply * 10) / 20000; // 0.05% from total supply
        maxTokenAmountPerTxn = (totalSupply * 3) / 200; // 1.5% from total supply max transaction amount
        maxTokenAmountPerWallet = (totalSupply * 3) / 200;  // 1.5% from total supply max wallet amount
        bExcludedFromTax[address(this)] = true;
        bExcludedFromTax[owner()] = true;


        automatedMarketMakerPairs[address(swapPair)] = true;
        
        bExcludedMaxTokenAmountPerTxn[address(0xdead)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapRouter)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapPair)] = true;

        bExcludedFromTax[address(0xdead)] = true;

        sellMarketingTax = 20;
        sellDevTax = 25;
        sellTotalTax = sellMarketingTax + sellDevTax;


        buyMarketingTax = 10;
        buyDevTax = 10;
        buyTotalTax = buyMarketingTax + buyDevTax;


        _mint(msg.sender, totalSupply);
    }

    function updateDevWallet(address _devWallet) external onlyOwner {
        devWallet = _devWallet;
    }

    function updateMarketingWallet(address _marketingWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
    }

    function togglePause() external onlyOwner {
        isPaused = !isPaused;
    }

    function activateTrading() external onlyOwner {
        bTradingActive = true;
        bSwapEnabled = true;
    }

    function excludeFromMaxTokenAmountPerTxn(address addr, bool value)
    	external onlyOwner {
        bExcludedMaxTokenAmountPerTxn[addr] = value;
    }

    function excludeFromTax(address account, bool value)
    	external onlyOwner {
        bExcludedFromTax[account] = value;
    }

    function removeLimits()
    	external onlyOwner {
        limitsInEffect = false;
    }


    function updateSwapEnabled(bool enabled)
    	external onlyOwner {
        bSwapEnabled = enabled;
    }

    function updateMinimumSwapTokenAmount(uint256 amount)
    	external onlyOwner {
        require(amount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(amount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        minSwapTokenAmount = amount;
    }

    function updateMaxTokensPerWallet(uint256 newNum)
    	external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / (10 ** decimals()), "Cannot set maxTokenAmountPerWallet lower than 0.5%");
        maxTokenAmountPerWallet = newNum * (10 ** decimals());
    }

    function updateMaxTokenAmountPerTxn(uint256 newNum)
    	external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()), "Cannot set maxTokenAmountPerTxn lower than 0.1%");
        maxTokenAmountPerTxn = newNum * (10 ** decimals());
    }

    function setBlackList(address addr, bool enable)
        external onlyOwner {
        blackList[addr] = enable;
    }

    function updateBuyTax(uint256 newMarketFee, uint256 newDevFee)
    	external onlyOwner {
        buyMarketingTax = newMarketFee;
        buyDevTax = newDevFee;
        buyTotalTax = buyMarketingTax + buyDevTax;
        require(buyTotalTax <= 95, "Must keep tax at 95% or less");
    }

    function updateSellTax(uint256 newMarketFee, uint256 newDevFee)
        external onlyOwner {
        sellMarketingTax = newMarketFee;
        sellDevTax = newDevFee;
        sellTotalTax = sellMarketingTax + sellDevTax;
        require(sellTotalTax <= 95, "Must keep tax at 95% or less");
    }
    
    function setAutomatedMarketMakerPairs(address pair, bool value)
        external onlyOwner {
        require(pair != swapPair, "The pair cannot be removed from automatedMarketMakerPairs");
        automatedMarketMakerPairs[pair] = value;
    }

    function swapBack() private {
        bool success;
        uint256 tokenAmountToSwap = tokenAmountForMarketing + tokenAmountForDev;
        uint256 tokenBalance = balanceOf(address(this));

        if (tokenAmountToSwap == 0 || tokenBalance == 0)
            return;

        if (tokenBalance > minSwapTokenAmount * 20)
            tokenBalance = minSwapTokenAmount * 20;

        uint256 prevETHBalance = address(this).balance;
        swapTokensForEth(tokenBalance);

        uint256 ethBalance = address(this).balance.sub(prevETHBalance);
        uint256 ethForDev = ethBalance.mul(tokenAmountForDev).div(tokenAmountToSwap);

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

        tokenAmountForMarketing = 0;
        tokenAmountForDev = 0;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: Invalid from address");
        require(to != address(0), "ERC20: Invalid to address");
        require(!blackList[from], "ERC20: from is black list");
        require(!blackList[to], "ERC20: to is black list");

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

        if (tx.origin != owner()){
            require(!isPaused, "Contract is paused!");
        }

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

                if (automatedMarketMakerPairs[from] && !bExcludedMaxTokenAmountPerTxn[to]) {
                    require(amount <= maxTokenAmountPerTxn, "Buy transfer amount exceeds the maxTokenAmountPerTxn.");
                    require(amount + balanceOf(to) <= maxTokenAmountPerWallet, "Max wallet exceeded");
                }
                else if (automatedMarketMakerPairs[to] && !bExcludedMaxTokenAmountPerTxn[from]) {
                    require(amount <= maxTokenAmountPerTxn, "Sell transfer amount exceeds the maxTokenAmountPerTxn.");
                }
                else if (!bExcludedMaxTokenAmountPerTxn[to]) {
                    require(amount + balanceOf(to) <= maxTokenAmountPerWallet, "Max wallet exceeded");
                }
            }
        }

        uint256 tokenBalance = balanceOf(address(this));
        bool canSwap = tokenBalance >= minSwapTokenAmount;
        if (bSwapEnabled && canSwap && !bSwapping &&
            !automatedMarketMakerPairs[from] && !bExcludedFromTax[from] && !bExcludedFromTax[to]) {
            bSwapping = true;
            swapBack();
            bSwapping = false;
        }

        bool bTax = !bSwapping;
        if (bExcludedFromTax[from] || bExcludedFromTax[to])
            bTax = false;

        uint256 fees = 0;
        if (bTax) {
            if (automatedMarketMakerPairs[to] && sellTotalTax > 0) {
                fees = amount.mul(sellTotalTax).div(100);
                tokenAmountForDev += (fees * sellDevTax) / sellTotalTax;
                tokenAmountForMarketing += (fees * sellMarketingTax) / sellTotalTax;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalTax > 0) {
                fees = amount.mul(buyTotalTax).div(100);
                tokenAmountForDev += (fees * buyDevTax) / buyTotalTax;
                tokenAmountForMarketing += (fees * buyMarketingTax) / buyTotalTax;
            }
            if (fees > 0)
                super._transfer(from, address(this), fees);
            amount -= fees;
        }

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

    receive() external payable {}

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

        _approve(address(this), address(swapRouter), amount);

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

    function withdrawEthPool() external onlyOwner() {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function emergencyWithdrawToken(address tokenAddress) external onlyOwner() {
        IERC20 token = IERC20(tokenAddress);
        uint256 balance = token.balanceOf(address(this));
        token.transfer(msg.sender, balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_swapRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"activateTrading","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":"","type":"address"}],"name":"bExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedMaxTokenAmountPerTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bTradingActive","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":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","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":"subValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"emergencyWithdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenAmountForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAmountForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokensPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMinimumSwapTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEthPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001601260006101000a81548160ff0219169083151502179055503480156200006257600080fd5b50604051620062dd380380620062dd833981810160405281019062000088919062000b7c565b6040518060400160405280600781526020017f494e46494e4554000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f494e464900000000000000000000000000000000000000000000000000000000815250816000908162000105919062000e52565b50806001908162000117919062000e52565b5050506200013a6200012e6200088e60201b60201c565b6200089660201b60201c565b82600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000291919062000f39565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062000f39565b6040518363ffffffff1660e01b81526004016200036092919062000f7c565b6020604051808303816000875af115801562000380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a6919062000f39565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f6000620003fc6200095c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000620004b76200098660201b60201c565b600a620004c5919062001139565b633b9aca00620004d691906200118a565b9050614e20600a82620004ea91906200118a565b620004f6919062001204565b60088190555060c86003826200050d91906200118a565b62000519919062001204565b600a8190555060c86003826200053091906200118a565b6200053c919062001204565b6009819055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000620005b06200095c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506014808190555060196015819055506015546014546200084491906200123c565b601381905550600a601781905550600a6018819055506018546017546200086c91906200123c565b6016819055506200088433826200098f60201b60201c565b5050505062001328565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f890620012d8565b60405180910390fd5b62000a156000838362000b0860201b60201c565b806002600082825462000a2991906200123c565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a8191906200123c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ae891906200130b565b60405180910390a362000b046000838362000b0d60201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b448262000b17565b9050919050565b62000b568162000b37565b811462000b6257600080fd5b50565b60008151905062000b768162000b4b565b92915050565b60008060006060848603121562000b985762000b9762000b12565b5b600062000ba88682870162000b65565b935050602062000bbb8682870162000b65565b925050604062000bce8682870162000b65565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c5a57607f821691505b60208210810362000c705762000c6f62000c12565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cda7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c9b565b62000ce6868362000c9b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d3362000d2d62000d278462000cfe565b62000d08565b62000cfe565b9050919050565b6000819050919050565b62000d4f8362000d12565b62000d6762000d5e8262000d3a565b84845462000ca8565b825550505050565b600090565b62000d7e62000d6f565b62000d8b81848462000d44565b505050565b5b8181101562000db35762000da760008262000d74565b60018101905062000d91565b5050565b601f82111562000e025762000dcc8162000c76565b62000dd78462000c8b565b8101602085101562000de7578190505b62000dff62000df68562000c8b565b83018262000d90565b50505b505050565b600082821c905092915050565b600062000e276000198460080262000e07565b1980831691505092915050565b600062000e42838362000e14565b9150826002028217905092915050565b62000e5d8262000bd8565b67ffffffffffffffff81111562000e795762000e7862000be3565b5b62000e85825462000c41565b62000e9282828562000db7565b600060209050601f83116001811462000eca576000841562000eb5578287015190505b62000ec1858262000e34565b86555062000f31565b601f19841662000eda8662000c76565b60005b8281101562000f045784890151825560018201915060208501945060208101905062000edd565b8683101562000f24578489015162000f20601f89168262000e14565b8355505b6001600288020188555050505b505050505050565b60006020828403121562000f525762000f5162000b12565b5b600062000f628482850162000b65565b91505092915050565b62000f768162000b37565b82525050565b600060408201905062000f93600083018562000f6b565b62000fa2602083018462000f6b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001037578086048111156200100f576200100e62000fa9565b5b60018516156200101f5780820291505b80810290506200102f8562000fd8565b945062000fef565b94509492505050565b60008262001052576001905062001125565b8162001062576000905062001125565b81600181146200107b57600281146200108657620010bc565b600191505062001125565b60ff8411156200109b576200109a62000fa9565b5b8360020a915084821115620010b557620010b462000fa9565b5b5062001125565b5060208310610133831016604e8410600b8410161715620010f65782820a905083811115620010f057620010ef62000fa9565b5b62001125565b62001105848484600162000fe5565b925090508184048111156200111f576200111e62000fa9565b5b81810290505b9392505050565b600060ff82169050919050565b6000620011468262000cfe565b915062001153836200112c565b9250620011827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001040565b905092915050565b6000620011978262000cfe565b9150620011a48362000cfe565b9250828202620011b48162000cfe565b91508282048414831517620011ce57620011cd62000fa9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012118262000cfe565b91506200121e8362000cfe565b925082620012315762001230620011d5565b5b828204905092915050565b6000620012498262000cfe565b9150620012568362000cfe565b925082820190508082111562001271576200127062000fa9565b5b92915050565b600082825260208201905092915050565b7f45524332303a204e6f74206163636f756e7420213d2061646472657373283029600082015250565b6000620012c060208362001277565b9150620012cd8262001288565b602082019050919050565b60006020820190508181036000830152620012f381620012b1565b9050919050565b620013058162000cfe565b82525050565b6000602082019050620013226000830184620012fa565b92915050565b614fa580620013386000396000f3fe60806040526004361061031e5760003560e01c806370a08231116101ab578063b187bd26116100f7578063c4ae316811610095578063dd62ed3e1161006f578063dd62ed3e14610b89578063e27a55fe14610bc6578063e96db1ef14610bf1578063f2fde38b14610c1c57610325565b8063c4ae316814610b1e578063c6a3064714610b35578063d929a08314610b5e57610325565b8063b79c1886116100d1578063b79c188614610a74578063be69188314610a9d578063c31c9c0714610ac8578063c42c3f8814610af357610325565b8063b187bd26146109e3578063b38d5ef414610a0e578063b62496f514610a3757610325565b80638ea5220f11610164578063a457c2d71161013e578063a457c2d714610915578063a9059cbb14610952578063aacebbe31461098f578063af8f26e7146109b857610325565b80638ea5220f14610896578063924de9b7146108c157806395d89b41146108ea57610325565b806370a08231146107aa578063715018a6146107e7578063751039fc146107fe57806375f0a874146108155780637d673170146108405780638da5cb5b1461086b57610325565b8063313ce5671161026a578063544d1ec91161022357806368092bd9116101fd57806368092bd9146106f0578063685fbc6b146107195780636f498e21146107445780637070678b1461078157610325565b8063544d1ec9146106735780635df6e68e1461069c57806367b740e9146106c757610325565b8063313ce56714610561578063330124111461058c578063372b44b8146105b757806339509351146105e257806345167f261461061f5780634a62bb651461064857610325565b80631816467f116102d757806322f59835116102b157806322f598351461049357806323b872dd146104d057806326991cc81461050d5780632c81355e1461053857610325565b80631816467f1461041657806318c34be11461043f5780631af032031461046a57610325565b806306fdde031461032a578063095ea7b3146103555780630bd05b69146103925780630e3d57eb146103a9578063151d8039146103c057806318160ddd146103eb57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c45565b60405161034c9190613a4c565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613b07565b610cd7565b6040516103899190613b62565b60405180910390f35b34801561039e57600080fd5b506103a7610cf5565b005b3480156103b557600080fd5b506103be610da9565b005b3480156103cc57600080fd5b506103d5610e96565b6040516103e29190613b62565b60405180910390f35b3480156103f757600080fd5b50610400610ea9565b60405161040d9190613b8c565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613ba7565b610eb3565b005b34801561044b57600080fd5b50610454610f73565b6040516104619190613b8c565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c9190613ba7565b610f79565b005b34801561049f57600080fd5b506104ba60048036038101906104b59190613ba7565b6110fc565b6040516104c79190613b62565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f29190613bd4565b61111c565b6040516105049190613b62565b60405180910390f35b34801561051957600080fd5b50610522611214565b60405161052f9190613c36565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613c51565b61123a565b005b34801561056d57600080fd5b50610576611387565b6040516105839190613c9a565b60405180910390f35b34801561059857600080fd5b506105a1611390565b6040516105ae9190613b8c565b60405180910390f35b3480156105c357600080fd5b506105cc611396565b6040516105d99190613b8c565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613b07565b61139c565b6040516106169190613b62565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190613ce1565b611448565b005b34801561065457600080fd5b5061065d6115af565b60405161066a9190613b62565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613c51565b6115c2565b005b3480156106a857600080fd5b506106b16116e7565b6040516106be9190613b8c565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190613c51565b6116ed565b005b3480156106fc57600080fd5b5061071760048036038101906107129190613ce1565b611812565b005b34801561072557600080fd5b5061072e6118e9565b60405161073b9190613b8c565b60405180910390f35b34801561075057600080fd5b5061076b60048036038101906107669190613ba7565b6118ef565b6040516107789190613b62565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613ce1565b61190f565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613ba7565b6119e6565b6040516107de9190613b8c565b60405180910390f35b3480156107f357600080fd5b506107fc611a2f565b005b34801561080a57600080fd5b50610813611ab7565b005b34801561082157600080fd5b5061082a611b50565b6040516108379190613c36565b60405180910390f35b34801561084c57600080fd5b50610855611b76565b6040516108629190613b8c565b60405180910390f35b34801561087757600080fd5b50610880611b7c565b60405161088d9190613c36565b60405180910390f35b3480156108a257600080fd5b506108ab611ba6565b6040516108b89190613c36565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e39190613d21565b611bcc565b005b3480156108f657600080fd5b506108ff611c65565b60405161090c9190613a4c565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190613b07565b611cf7565b6040516109499190613b62565b60405180910390f35b34801561095e57600080fd5b5061097960048036038101906109749190613b07565b611de2565b6040516109869190613b62565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b19190613ba7565b611e00565b005b3480156109c457600080fd5b506109cd611ec0565b6040516109da9190613b8c565b60405180910390f35b3480156109ef57600080fd5b506109f8611ec6565b604051610a059190613b62565b60405180910390f35b348015610a1a57600080fd5b50610a356004803603810190610a309190613d4e565b611ed9565b005b348015610a4357600080fd5b50610a5e6004803603810190610a599190613ba7565b611fc3565b604051610a6b9190613b62565b60405180910390f35b348015610a8057600080fd5b50610a9b6004803603810190610a969190613d4e565b611fe3565b005b348015610aa957600080fd5b50610ab26120cd565b604051610abf9190613b8c565b60405180910390f35b348015610ad457600080fd5b50610add6120d3565b604051610aea9190613ded565b60405180910390f35b348015610aff57600080fd5b50610b086120f9565b604051610b159190613b8c565b60405180910390f35b348015610b2a57600080fd5b50610b336120ff565b005b348015610b4157600080fd5b50610b5c6004803603810190610b579190613ce1565b6121a7565b005b348015610b6a57600080fd5b50610b7361227e565b604051610b809190613b62565b60405180910390f35b348015610b9557600080fd5b50610bb06004803603810190610bab9190613e08565b612291565b604051610bbd9190613b8c565b60405180910390f35b348015610bd257600080fd5b50610bdb612318565b604051610be89190613b8c565b60405180910390f35b348015610bfd57600080fd5b50610c0661231e565b604051610c139190613b8c565b60405180910390f35b348015610c2857600080fd5b50610c436004803603810190610c3e9190613ba7565b612324565b005b606060008054610c5490613e77565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8090613e77565b8015610ccd5780601f10610ca257610100808354040283529160200191610ccd565b820191906000526020600020905b815481529060010190602001808311610cb057829003601f168201915b5050505050905090565b6000610ceb610ce461241b565b8484612423565b6001905092915050565b610cfd61241b565b73ffffffffffffffffffffffffffffffffffffffff16610d1b611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890613ef4565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b610db161241b565b73ffffffffffffffffffffffffffffffffffffffff16610dcf611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90613ef4565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e4b90613f45565b60006040518083038185875af1925050503d8060008114610e88576040519150601f19603f3d011682016040523d82523d6000602084013e610e8d565b606091505b50508091505050565b600b60019054906101000a900460ff1681565b6000600254905090565b610ebb61241b565b73ffffffffffffffffffffffffffffffffffffffff16610ed9611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613ef4565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b610f8161241b565b73ffffffffffffffffffffffffffffffffffffffff16610f9f611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613ef4565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110359190613c36565b602060405180830381865afa158015611052573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110769190613f6f565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016110b3929190613f9c565b6020604051808303816000875af11580156110d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f69190613fda565b50505050565b60106020528060005260406000206000915054906101000a900460ff1681565b60006111298484846125ec565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061117461241b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb90614053565b60405180910390fd5b6112088561120061241b565b858403612423565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61124261241b565b73ffffffffffffffffffffffffffffffffffffffff16611260611b7c565b73ffffffffffffffffffffffffffffffffffffffff16146112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad90613ef4565b60405180910390fd5b620186a060016112c4610ea9565b6112ce91906140a2565b6112d89190614113565b81101561131a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611311906141b6565b60405180910390fd5b6103e86005611327610ea9565b61133191906140a2565b61133b9190614113565b81111561137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490614248565b60405180910390fd5b8060088190555050565b60006012905090565b60175481565b600e5481565b600061143e6113a961241b565b8484600460006113b761241b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114399190614268565b612423565b6001905092915050565b61145061241b565b73ffffffffffffffffffffffffffffffffffffffff1661146e611b7c565b73ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90613ef4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061430e565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601260009054906101000a900460ff1681565b6115ca61241b565b73ffffffffffffffffffffffffffffffffffffffff166115e8611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613ef4565b60405180910390fd5b611646611387565b600a6116529190614461565b6103e8600161165f610ea9565b61166991906140a2565b6116739190614113565b61167d9190614113565b8110156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b69061451e565b60405180910390fd5b6116c7611387565b600a6116d39190614461565b816116de91906140a2565b600a8190555050565b60165481565b6116f561241b565b73ffffffffffffffffffffffffffffffffffffffff16611713611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613ef4565b60405180910390fd5b611771611387565b600a61177d9190614461565b6103e8600561178a610ea9565b61179491906140a2565b61179e9190614113565b6117a89190614113565b8110156117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906145b0565b60405180910390fd5b6117f2611387565b600a6117fe9190614461565b8161180991906140a2565b60098190555050565b61181a61241b565b73ffffffffffffffffffffffffffffffffffffffff16611838611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613ef4565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b600f6020528060005260406000206000915054906101000a900460ff1681565b61191761241b565b73ffffffffffffffffffffffffffffffffffffffff16611935611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290613ef4565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a3761241b565b73ffffffffffffffffffffffffffffffffffffffff16611a55611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613ef4565b60405180910390fd5b611ab560006131fa565b565b611abf61241b565b73ffffffffffffffffffffffffffffffffffffffff16611add611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90613ef4565b60405180910390fd5b6000601260006101000a81548160ff021916908315150217905550565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bd461241b565b73ffffffffffffffffffffffffffffffffffffffff16611bf2611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f90613ef4565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b606060018054611c7490613e77565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca090613e77565b8015611ced5780601f10611cc257610100808354040283529160200191611ced565b820191906000526020600020905b815481529060010190602001808311611cd057829003601f168201915b5050505050905090565b60008060046000611d0661241b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061461c565b60405180910390fd5b611dd7611dce61241b565b85858403612423565b600191505092915050565b6000611df6611def61241b565b84846125ec565b6001905092915050565b611e0861241b565b73ffffffffffffffffffffffffffffffffffffffff16611e26611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390613ef4565b60405180910390fd5b80600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b601960009054906101000a900460ff1681565b611ee161241b565b73ffffffffffffffffffffffffffffffffffffffff16611eff611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613ef4565b60405180910390fd5b8160178190555080601881905550601854601754611f739190614268565b601681905550605f6016541115611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690614688565b60405180910390fd5b5050565b60116020528060005260406000206000915054906101000a900460ff1681565b611feb61241b565b73ffffffffffffffffffffffffffffffffffffffff16612009611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690613ef4565b60405180910390fd5b816014819055508060158190555060155460145461207d9190614268565b601381905550605f60135411156120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c090614688565b60405180910390fd5b5050565b60155481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b61210761241b565b73ffffffffffffffffffffffffffffffffffffffff16612125611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290613ef4565b60405180910390fd5b601960009054906101000a900460ff1615601960006101000a81548160ff021916908315150217905550565b6121af61241b565b73ffffffffffffffffffffffffffffffffffffffff166121cd611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613ef4565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60135481565b60145481565b61232c61241b565b73ffffffffffffffffffffffffffffffffffffffff1661234a611b7c565b73ffffffffffffffffffffffffffffffffffffffff16146123a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239790613ef4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361240f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612406906146f4565b60405180910390fd5b612418816131fa565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990614760565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f8906147cc565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125df9190613b8c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290614838565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c1906148a4565b60405180910390fd5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274e90614910565b60405180910390fd5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127db9061497c565b60405180910390fd5b600081036127fd576127f8838360006132c0565b6131f5565b612805611b7c565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461288857601960009054906101000a900460ff1615612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e906149e8565b60405180910390fd5b5b601260009054906101000a900460ff1615612d83576128a5611b7c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291357506128e3611b7c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561294c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612986575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299f5750601960019054906101000a900460ff16155b15612d8257600b60009054906101000a900460ff16612a9957601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a595750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f90614a54565b60405180910390fd5b5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b3c5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612be357600a54811115612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d90614ae6565b60405180910390fd5b600954612b92836119e6565b82612b9d9190614268565b1115612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd590614b52565b60405180910390fd5b612d81565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c865750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cd557600a54811115612cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc790614be4565b60405180910390fd5b612d80565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d7f57600954612d32836119e6565b82612d3d9190614268565b1115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614b52565b60405180910390fd5b5b5b5b5b5b6000612d8e306119e6565b905060006008548210159050600b60019054906101000a900460ff168015612db35750805b8015612dcc5750601960019054906101000a900460ff16155b8015612e225750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e785750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ece5750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f12576001601960016101000a81548160ff021916908315150217905550612ef6613542565b6000601960016101000a81548160ff0219169083151502179055505b6000601960019054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fc85750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fd257600090505b600081156131e557601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303557506000601354115b156130cf5761306260646130546013548861372d90919063ffffffff16565b61374390919063ffffffff16565b90506013546015548261307591906140a2565b61307f9190614113565b600e60008282546130909190614268565b92505081905550601354601454826130a891906140a2565b6130b29190614113565b600d60008282546130c39190614268565b925050819055506131c1565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312a57506000601654115b156131c05761315760646131496016548861372d90919063ffffffff16565b61374390919063ffffffff16565b90506016546018548261316a91906140a2565b6131749190614113565b600e60008282546131859190614268565b925050819055506016546017548261319d91906140a2565b6131a79190614113565b600d60008282546131b89190614268565b925050819055505b5b60008111156131d6576131d58730836132c0565b5b80856131e29190614c04565b94505b6131f08787876132c0565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361332f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332690614c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361339e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339590614cf0565b60405180910390fd5b6133a9838383613759565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342790614d5c565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134c59190614268565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135299190613b8c565b60405180910390a361353c84848461375e565b50505050565b600080600e54600d546135559190614268565b90506000613562306119e6565b905060008214806135735750600081145b156135805750505061372b565b601460085461358f91906140a2565b8111156135a85760146008546135a591906140a2565b90505b60004790506135b682613763565b60006135cb82476139a690919063ffffffff16565b905060006135f6856135e8600e548561372d90919063ffffffff16565b61374390919063ffffffff16565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161363e90613f45565b60006040518083038185875af1925050503d806000811461367b576040519150601f19603f3d011682016040523d82523d6000602084013e613680565b606091505b505080965050600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136cc90613f45565b60006040518083038185875af1925050503d8060008114613709576040519150601f19603f3d011682016040523d82523d6000602084013e61370e565b606091505b5050809650506000600d819055506000600e819055505050505050505b565b6000818361373b91906140a2565b905092915050565b600081836137519190614113565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156137805761377f614d7c565b5b6040519080825280602002602001820160405280156137ae5781602001602082028036833780820191505090505b50905030816000815181106137c6576137c5614dab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561386d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138919190614def565b816001815181106138a5576138a4614dab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061390c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612423565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613970959493929190614f15565b600060405180830381600087803b15801561398a57600080fd5b505af115801561399e573d6000803e3d6000fd5b505050505050565b600081836139b49190614c04565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139f65780820151818401526020810190506139db565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a1e826139bc565b613a2881856139c7565b9350613a388185602086016139d8565b613a4181613a02565b840191505092915050565b60006020820190508181036000830152613a668184613a13565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a9e82613a73565b9050919050565b613aae81613a93565b8114613ab957600080fd5b50565b600081359050613acb81613aa5565b92915050565b6000819050919050565b613ae481613ad1565b8114613aef57600080fd5b50565b600081359050613b0181613adb565b92915050565b60008060408385031215613b1e57613b1d613a6e565b5b6000613b2c85828601613abc565b9250506020613b3d85828601613af2565b9150509250929050565b60008115159050919050565b613b5c81613b47565b82525050565b6000602082019050613b776000830184613b53565b92915050565b613b8681613ad1565b82525050565b6000602082019050613ba16000830184613b7d565b92915050565b600060208284031215613bbd57613bbc613a6e565b5b6000613bcb84828501613abc565b91505092915050565b600080600060608486031215613bed57613bec613a6e565b5b6000613bfb86828701613abc565b9350506020613c0c86828701613abc565b9250506040613c1d86828701613af2565b9150509250925092565b613c3081613a93565b82525050565b6000602082019050613c4b6000830184613c27565b92915050565b600060208284031215613c6757613c66613a6e565b5b6000613c7584828501613af2565b91505092915050565b600060ff82169050919050565b613c9481613c7e565b82525050565b6000602082019050613caf6000830184613c8b565b92915050565b613cbe81613b47565b8114613cc957600080fd5b50565b600081359050613cdb81613cb5565b92915050565b60008060408385031215613cf857613cf7613a6e565b5b6000613d0685828601613abc565b9250506020613d1785828601613ccc565b9150509250929050565b600060208284031215613d3757613d36613a6e565b5b6000613d4584828501613ccc565b91505092915050565b60008060408385031215613d6557613d64613a6e565b5b6000613d7385828601613af2565b9250506020613d8485828601613af2565b9150509250929050565b6000819050919050565b6000613db3613dae613da984613a73565b613d8e565b613a73565b9050919050565b6000613dc582613d98565b9050919050565b6000613dd782613dba565b9050919050565b613de781613dcc565b82525050565b6000602082019050613e026000830184613dde565b92915050565b60008060408385031215613e1f57613e1e613a6e565b5b6000613e2d85828601613abc565b9250506020613e3e85828601613abc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e8f57607f821691505b602082108103613ea257613ea1613e48565b5b50919050565b7f496e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b6000613ede600d836139c7565b9150613ee982613ea8565b602082019050919050565b60006020820190508181036000830152613f0d81613ed1565b9050919050565b600081905092915050565b50565b6000613f2f600083613f14565b9150613f3a82613f1f565b600082019050919050565b6000613f5082613f22565b9150819050919050565b600081519050613f6981613adb565b92915050565b600060208284031215613f8557613f84613a6e565b5b6000613f9384828501613f5a565b91505092915050565b6000604082019050613fb16000830185613c27565b613fbe6020830184613b7d565b9392505050565b600081519050613fd481613cb5565b92915050565b600060208284031215613ff057613fef613a6e565b5b6000613ffe84828501613fc5565b91505092915050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e74000000600082015250565b600061403d601d836139c7565b915061404882614007565b602082019050919050565b6000602082019050818103600083015261406c81614030565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140ad82613ad1565b91506140b883613ad1565b92508282026140c681613ad1565b915082820484148315176140dd576140dc614073565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061411e82613ad1565b915061412983613ad1565b925082614139576141386140e4565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006141a06035836139c7565b91506141ab82614144565b604082019050919050565b600060208201905081810360008301526141cf81614193565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006142326034836139c7565b915061423d826141d6565b604082019050919050565b6000602082019050818103600083015261426181614225565b9050919050565b600061427382613ad1565b915061427e83613ad1565b925082820190508082111561429657614295614073565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142f86039836139c7565b91506143038261429c565b604082019050919050565b60006020820190508181036000830152614327816142eb565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156143855780860481111561436157614360614073565b5b60018516156143705780820291505b808102905061437e8561432e565b9450614345565b94509492505050565b60008261439e576001905061445a565b816143ac576000905061445a565b81600181146143c257600281146143cc576143fb565b600191505061445a565b60ff8411156143de576143dd614073565b5b8360020a9150848211156143f5576143f4614073565b5b5061445a565b5060208310610133831016604e8410600b84101617156144305782820a90508381111561442b5761442a614073565b5b61445a565b61443d848484600161433b565b9250905081840481111561445457614453614073565b5b81810290505b9392505050565b600061446c82613ad1565b915061447783613c7e565b92506144a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461438e565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614508602f836139c7565b9150614513826144ac565b604082019050919050565b60006020820190508181036000830152614537816144fb565b9050919050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c60008201527f6574206c6f776572207468616e20302e35250000000000000000000000000000602082015250565b600061459a6032836139c7565b91506145a58261453e565b604082019050919050565b600060208201905081810360008301526145c98161458d565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c756500600082015250565b6000614606601f836139c7565b9150614611826145d0565b602082019050919050565b60006020820190508181036000830152614635816145f9565b9050919050565b7f4d757374206b6565702074617820617420393525206f72206c65737300000000600082015250565b6000614672601c836139c7565b915061467d8261463c565b602082019050919050565b600060208201905081810360008301526146a181614665565b9050919050565b7f4e6577206f776e6572206973205a45524f000000000000000000000000000000600082015250565b60006146de6011836139c7565b91506146e9826146a8565b602082019050919050565b6000602082019050818103600083015261470d816146d1565b9050919050565b7f45524332303a204e6f74206f776e657220213d20616464726573732830290000600082015250565b600061474a601e836139c7565b915061475582614714565b602082019050919050565b600060208201905081810360008301526147798161473d565b9050919050565b7f45524332303a204e6f74207370656e64657220213d2061646472657373283029600082015250565b60006147b66020836139c7565b91506147c182614780565b602082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b7f45524332303a20496e76616c69642066726f6d20616464726573730000000000600082015250565b6000614822601b836139c7565b915061482d826147ec565b602082019050919050565b6000602082019050818103600083015261485181614815565b9050919050565b7f45524332303a20496e76616c696420746f206164647265737300000000000000600082015250565b600061488e6019836139c7565b915061489982614858565b602082019050919050565b600060208201905081810360008301526148bd81614881565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c69737400000000000000600082015250565b60006148fa6019836139c7565b9150614905826148c4565b602082019050919050565b60006020820190508181036000830152614929816148ed565b9050919050565b7f45524332303a20746f20697320626c61636b206c697374000000000000000000600082015250565b60006149666017836139c7565b915061497182614930565b602082019050919050565b6000602082019050818103600083015261499581614959565b9050919050565b7f436f6e7472616374206973207061757365642100000000000000000000000000600082015250565b60006149d26013836139c7565b91506149dd8261499c565b602082019050919050565b60006020820190508181036000830152614a01816149c5565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614a3e6016836139c7565b9150614a4982614a08565b602082019050919050565b60006020820190508181036000830152614a6d81614a31565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b6000614ad06035836139c7565b9150614adb82614a74565b604082019050919050565b60006020820190508181036000830152614aff81614ac3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614b3c6013836139c7565b9150614b4782614b06565b602082019050919050565b60006020820190508181036000830152614b6b81614b2f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b6000614bce6036836139c7565b9150614bd982614b72565b604082019050919050565b60006020820190508181036000830152614bfd81614bc1565b9050919050565b6000614c0f82613ad1565b9150614c1a83613ad1565b9250828203905081811115614c3257614c31614073565b5b92915050565b7f45524332303a204e6f742066726f6d20213d2061646472657373283029000000600082015250565b6000614c6e601d836139c7565b9150614c7982614c38565b602082019050919050565b60006020820190508181036000830152614c9d81614c61565b9050919050565b7f45524332303a204e6f7420746f20213d20616464726573732830290000000000600082015250565b6000614cda601b836139c7565b9150614ce582614ca4565b602082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e74600082015250565b6000614d466020836139c7565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614de981613aa5565b92915050565b600060208284031215614e0557614e04613a6e565b5b6000614e1384828501614dda565b91505092915050565b6000819050919050565b6000614e41614e3c614e3784614e1c565b613d8e565b613ad1565b9050919050565b614e5181614e26565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e8c81613a93565b82525050565b6000614e9e8383614e83565b60208301905092915050565b6000602082019050919050565b6000614ec282614e57565b614ecc8185614e62565b9350614ed783614e73565b8060005b83811015614f08578151614eef8882614e92565b9750614efa83614eaa565b925050600181019050614edb565b5085935050505092915050565b600060a082019050614f2a6000830188613b7d565b614f376020830187614e48565b8181036040830152614f498186614eb7565b9050614f586060830185613c27565b614f656080830184613b7d565b969550505050505056fea26469706673582212208500060783f938c4e103a65a222c8c37fb98b0258fb51d521a06e6d49300fbfe64736f6c63430008110033000000000000000000000000d5350b81d9e9f3592eda444359018a2dcd429f8800000000000000000000000075179adfce66d204ebf082ec9e4edc63f61778aa0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806370a08231116101ab578063b187bd26116100f7578063c4ae316811610095578063dd62ed3e1161006f578063dd62ed3e14610b89578063e27a55fe14610bc6578063e96db1ef14610bf1578063f2fde38b14610c1c57610325565b8063c4ae316814610b1e578063c6a3064714610b35578063d929a08314610b5e57610325565b8063b79c1886116100d1578063b79c188614610a74578063be69188314610a9d578063c31c9c0714610ac8578063c42c3f8814610af357610325565b8063b187bd26146109e3578063b38d5ef414610a0e578063b62496f514610a3757610325565b80638ea5220f11610164578063a457c2d71161013e578063a457c2d714610915578063a9059cbb14610952578063aacebbe31461098f578063af8f26e7146109b857610325565b80638ea5220f14610896578063924de9b7146108c157806395d89b41146108ea57610325565b806370a08231146107aa578063715018a6146107e7578063751039fc146107fe57806375f0a874146108155780637d673170146108405780638da5cb5b1461086b57610325565b8063313ce5671161026a578063544d1ec91161022357806368092bd9116101fd57806368092bd9146106f0578063685fbc6b146107195780636f498e21146107445780637070678b1461078157610325565b8063544d1ec9146106735780635df6e68e1461069c57806367b740e9146106c757610325565b8063313ce56714610561578063330124111461058c578063372b44b8146105b757806339509351146105e257806345167f261461061f5780634a62bb651461064857610325565b80631816467f116102d757806322f59835116102b157806322f598351461049357806323b872dd146104d057806326991cc81461050d5780632c81355e1461053857610325565b80631816467f1461041657806318c34be11461043f5780631af032031461046a57610325565b806306fdde031461032a578063095ea7b3146103555780630bd05b69146103925780630e3d57eb146103a9578063151d8039146103c057806318160ddd146103eb57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c45565b60405161034c9190613a4c565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613b07565b610cd7565b6040516103899190613b62565b60405180910390f35b34801561039e57600080fd5b506103a7610cf5565b005b3480156103b557600080fd5b506103be610da9565b005b3480156103cc57600080fd5b506103d5610e96565b6040516103e29190613b62565b60405180910390f35b3480156103f757600080fd5b50610400610ea9565b60405161040d9190613b8c565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613ba7565b610eb3565b005b34801561044b57600080fd5b50610454610f73565b6040516104619190613b8c565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c9190613ba7565b610f79565b005b34801561049f57600080fd5b506104ba60048036038101906104b59190613ba7565b6110fc565b6040516104c79190613b62565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f29190613bd4565b61111c565b6040516105049190613b62565b60405180910390f35b34801561051957600080fd5b50610522611214565b60405161052f9190613c36565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613c51565b61123a565b005b34801561056d57600080fd5b50610576611387565b6040516105839190613c9a565b60405180910390f35b34801561059857600080fd5b506105a1611390565b6040516105ae9190613b8c565b60405180910390f35b3480156105c357600080fd5b506105cc611396565b6040516105d99190613b8c565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613b07565b61139c565b6040516106169190613b62565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190613ce1565b611448565b005b34801561065457600080fd5b5061065d6115af565b60405161066a9190613b62565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613c51565b6115c2565b005b3480156106a857600080fd5b506106b16116e7565b6040516106be9190613b8c565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190613c51565b6116ed565b005b3480156106fc57600080fd5b5061071760048036038101906107129190613ce1565b611812565b005b34801561072557600080fd5b5061072e6118e9565b60405161073b9190613b8c565b60405180910390f35b34801561075057600080fd5b5061076b60048036038101906107669190613ba7565b6118ef565b6040516107789190613b62565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613ce1565b61190f565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613ba7565b6119e6565b6040516107de9190613b8c565b60405180910390f35b3480156107f357600080fd5b506107fc611a2f565b005b34801561080a57600080fd5b50610813611ab7565b005b34801561082157600080fd5b5061082a611b50565b6040516108379190613c36565b60405180910390f35b34801561084c57600080fd5b50610855611b76565b6040516108629190613b8c565b60405180910390f35b34801561087757600080fd5b50610880611b7c565b60405161088d9190613c36565b60405180910390f35b3480156108a257600080fd5b506108ab611ba6565b6040516108b89190613c36565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e39190613d21565b611bcc565b005b3480156108f657600080fd5b506108ff611c65565b60405161090c9190613a4c565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190613b07565b611cf7565b6040516109499190613b62565b60405180910390f35b34801561095e57600080fd5b5061097960048036038101906109749190613b07565b611de2565b6040516109869190613b62565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b19190613ba7565b611e00565b005b3480156109c457600080fd5b506109cd611ec0565b6040516109da9190613b8c565b60405180910390f35b3480156109ef57600080fd5b506109f8611ec6565b604051610a059190613b62565b60405180910390f35b348015610a1a57600080fd5b50610a356004803603810190610a309190613d4e565b611ed9565b005b348015610a4357600080fd5b50610a5e6004803603810190610a599190613ba7565b611fc3565b604051610a6b9190613b62565b60405180910390f35b348015610a8057600080fd5b50610a9b6004803603810190610a969190613d4e565b611fe3565b005b348015610aa957600080fd5b50610ab26120cd565b604051610abf9190613b8c565b60405180910390f35b348015610ad457600080fd5b50610add6120d3565b604051610aea9190613ded565b60405180910390f35b348015610aff57600080fd5b50610b086120f9565b604051610b159190613b8c565b60405180910390f35b348015610b2a57600080fd5b50610b336120ff565b005b348015610b4157600080fd5b50610b5c6004803603810190610b579190613ce1565b6121a7565b005b348015610b6a57600080fd5b50610b7361227e565b604051610b809190613b62565b60405180910390f35b348015610b9557600080fd5b50610bb06004803603810190610bab9190613e08565b612291565b604051610bbd9190613b8c565b60405180910390f35b348015610bd257600080fd5b50610bdb612318565b604051610be89190613b8c565b60405180910390f35b348015610bfd57600080fd5b50610c0661231e565b604051610c139190613b8c565b60405180910390f35b348015610c2857600080fd5b50610c436004803603810190610c3e9190613ba7565b612324565b005b606060008054610c5490613e77565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8090613e77565b8015610ccd5780601f10610ca257610100808354040283529160200191610ccd565b820191906000526020600020905b815481529060010190602001808311610cb057829003601f168201915b5050505050905090565b6000610ceb610ce461241b565b8484612423565b6001905092915050565b610cfd61241b565b73ffffffffffffffffffffffffffffffffffffffff16610d1b611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890613ef4565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b610db161241b565b73ffffffffffffffffffffffffffffffffffffffff16610dcf611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90613ef4565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e4b90613f45565b60006040518083038185875af1925050503d8060008114610e88576040519150601f19603f3d011682016040523d82523d6000602084013e610e8d565b606091505b50508091505050565b600b60019054906101000a900460ff1681565b6000600254905090565b610ebb61241b565b73ffffffffffffffffffffffffffffffffffffffff16610ed9611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613ef4565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b610f8161241b565b73ffffffffffffffffffffffffffffffffffffffff16610f9f611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613ef4565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110359190613c36565b602060405180830381865afa158015611052573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110769190613f6f565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016110b3929190613f9c565b6020604051808303816000875af11580156110d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f69190613fda565b50505050565b60106020528060005260406000206000915054906101000a900460ff1681565b60006111298484846125ec565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061117461241b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb90614053565b60405180910390fd5b6112088561120061241b565b858403612423565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61124261241b565b73ffffffffffffffffffffffffffffffffffffffff16611260611b7c565b73ffffffffffffffffffffffffffffffffffffffff16146112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad90613ef4565b60405180910390fd5b620186a060016112c4610ea9565b6112ce91906140a2565b6112d89190614113565b81101561131a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611311906141b6565b60405180910390fd5b6103e86005611327610ea9565b61133191906140a2565b61133b9190614113565b81111561137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490614248565b60405180910390fd5b8060088190555050565b60006012905090565b60175481565b600e5481565b600061143e6113a961241b565b8484600460006113b761241b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114399190614268565b612423565b6001905092915050565b61145061241b565b73ffffffffffffffffffffffffffffffffffffffff1661146e611b7c565b73ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90613ef4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061430e565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601260009054906101000a900460ff1681565b6115ca61241b565b73ffffffffffffffffffffffffffffffffffffffff166115e8611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613ef4565b60405180910390fd5b611646611387565b600a6116529190614461565b6103e8600161165f610ea9565b61166991906140a2565b6116739190614113565b61167d9190614113565b8110156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b69061451e565b60405180910390fd5b6116c7611387565b600a6116d39190614461565b816116de91906140a2565b600a8190555050565b60165481565b6116f561241b565b73ffffffffffffffffffffffffffffffffffffffff16611713611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613ef4565b60405180910390fd5b611771611387565b600a61177d9190614461565b6103e8600561178a610ea9565b61179491906140a2565b61179e9190614113565b6117a89190614113565b8110156117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906145b0565b60405180910390fd5b6117f2611387565b600a6117fe9190614461565b8161180991906140a2565b60098190555050565b61181a61241b565b73ffffffffffffffffffffffffffffffffffffffff16611838611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613ef4565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b600f6020528060005260406000206000915054906101000a900460ff1681565b61191761241b565b73ffffffffffffffffffffffffffffffffffffffff16611935611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290613ef4565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a3761241b565b73ffffffffffffffffffffffffffffffffffffffff16611a55611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613ef4565b60405180910390fd5b611ab560006131fa565b565b611abf61241b565b73ffffffffffffffffffffffffffffffffffffffff16611add611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90613ef4565b60405180910390fd5b6000601260006101000a81548160ff021916908315150217905550565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bd461241b565b73ffffffffffffffffffffffffffffffffffffffff16611bf2611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f90613ef4565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b606060018054611c7490613e77565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca090613e77565b8015611ced5780601f10611cc257610100808354040283529160200191611ced565b820191906000526020600020905b815481529060010190602001808311611cd057829003601f168201915b5050505050905090565b60008060046000611d0661241b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061461c565b60405180910390fd5b611dd7611dce61241b565b85858403612423565b600191505092915050565b6000611df6611def61241b565b84846125ec565b6001905092915050565b611e0861241b565b73ffffffffffffffffffffffffffffffffffffffff16611e26611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390613ef4565b60405180910390fd5b80600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b601960009054906101000a900460ff1681565b611ee161241b565b73ffffffffffffffffffffffffffffffffffffffff16611eff611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613ef4565b60405180910390fd5b8160178190555080601881905550601854601754611f739190614268565b601681905550605f6016541115611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690614688565b60405180910390fd5b5050565b60116020528060005260406000206000915054906101000a900460ff1681565b611feb61241b565b73ffffffffffffffffffffffffffffffffffffffff16612009611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690613ef4565b60405180910390fd5b816014819055508060158190555060155460145461207d9190614268565b601381905550605f60135411156120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c090614688565b60405180910390fd5b5050565b60155481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b61210761241b565b73ffffffffffffffffffffffffffffffffffffffff16612125611b7c565b73ffffffffffffffffffffffffffffffffffffffff161461217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290613ef4565b60405180910390fd5b601960009054906101000a900460ff1615601960006101000a81548160ff021916908315150217905550565b6121af61241b565b73ffffffffffffffffffffffffffffffffffffffff166121cd611b7c565b73ffffffffffffffffffffffffffffffffffffffff1614612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613ef4565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60135481565b60145481565b61232c61241b565b73ffffffffffffffffffffffffffffffffffffffff1661234a611b7c565b73ffffffffffffffffffffffffffffffffffffffff16146123a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239790613ef4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361240f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612406906146f4565b60405180910390fd5b612418816131fa565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990614760565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f8906147cc565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125df9190613b8c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290614838565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c1906148a4565b60405180910390fd5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274e90614910565b60405180910390fd5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127db9061497c565b60405180910390fd5b600081036127fd576127f8838360006132c0565b6131f5565b612805611b7c565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461288857601960009054906101000a900460ff1615612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e906149e8565b60405180910390fd5b5b601260009054906101000a900460ff1615612d83576128a5611b7c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291357506128e3611b7c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561294c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612986575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299f5750601960019054906101000a900460ff16155b15612d8257600b60009054906101000a900460ff16612a9957601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a595750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f90614a54565b60405180910390fd5b5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b3c5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612be357600a54811115612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d90614ae6565b60405180910390fd5b600954612b92836119e6565b82612b9d9190614268565b1115612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd590614b52565b60405180910390fd5b612d81565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c865750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cd557600a54811115612cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc790614be4565b60405180910390fd5b612d80565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d7f57600954612d32836119e6565b82612d3d9190614268565b1115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614b52565b60405180910390fd5b5b5b5b5b5b6000612d8e306119e6565b905060006008548210159050600b60019054906101000a900460ff168015612db35750805b8015612dcc5750601960019054906101000a900460ff16155b8015612e225750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e785750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ece5750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f12576001601960016101000a81548160ff021916908315150217905550612ef6613542565b6000601960016101000a81548160ff0219169083151502179055505b6000601960019054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fc85750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fd257600090505b600081156131e557601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303557506000601354115b156130cf5761306260646130546013548861372d90919063ffffffff16565b61374390919063ffffffff16565b90506013546015548261307591906140a2565b61307f9190614113565b600e60008282546130909190614268565b92505081905550601354601454826130a891906140a2565b6130b29190614113565b600d60008282546130c39190614268565b925050819055506131c1565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312a57506000601654115b156131c05761315760646131496016548861372d90919063ffffffff16565b61374390919063ffffffff16565b90506016546018548261316a91906140a2565b6131749190614113565b600e60008282546131859190614268565b925050819055506016546017548261319d91906140a2565b6131a79190614113565b600d60008282546131b89190614268565b925050819055505b5b60008111156131d6576131d58730836132c0565b5b80856131e29190614c04565b94505b6131f08787876132c0565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361332f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332690614c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361339e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339590614cf0565b60405180910390fd5b6133a9838383613759565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342790614d5c565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134c59190614268565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135299190613b8c565b60405180910390a361353c84848461375e565b50505050565b600080600e54600d546135559190614268565b90506000613562306119e6565b905060008214806135735750600081145b156135805750505061372b565b601460085461358f91906140a2565b8111156135a85760146008546135a591906140a2565b90505b60004790506135b682613763565b60006135cb82476139a690919063ffffffff16565b905060006135f6856135e8600e548561372d90919063ffffffff16565b61374390919063ffffffff16565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161363e90613f45565b60006040518083038185875af1925050503d806000811461367b576040519150601f19603f3d011682016040523d82523d6000602084013e613680565b606091505b505080965050600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136cc90613f45565b60006040518083038185875af1925050503d8060008114613709576040519150601f19603f3d011682016040523d82523d6000602084013e61370e565b606091505b5050809650506000600d819055506000600e819055505050505050505b565b6000818361373b91906140a2565b905092915050565b600081836137519190614113565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156137805761377f614d7c565b5b6040519080825280602002602001820160405280156137ae5781602001602082028036833780820191505090505b50905030816000815181106137c6576137c5614dab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561386d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138919190614def565b816001815181106138a5576138a4614dab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061390c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612423565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613970959493929190614f15565b600060405180830381600087803b15801561398a57600080fd5b505af115801561399e573d6000803e3d6000fd5b505050505050565b600081836139b49190614c04565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139f65780820151818401526020810190506139db565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a1e826139bc565b613a2881856139c7565b9350613a388185602086016139d8565b613a4181613a02565b840191505092915050565b60006020820190508181036000830152613a668184613a13565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a9e82613a73565b9050919050565b613aae81613a93565b8114613ab957600080fd5b50565b600081359050613acb81613aa5565b92915050565b6000819050919050565b613ae481613ad1565b8114613aef57600080fd5b50565b600081359050613b0181613adb565b92915050565b60008060408385031215613b1e57613b1d613a6e565b5b6000613b2c85828601613abc565b9250506020613b3d85828601613af2565b9150509250929050565b60008115159050919050565b613b5c81613b47565b82525050565b6000602082019050613b776000830184613b53565b92915050565b613b8681613ad1565b82525050565b6000602082019050613ba16000830184613b7d565b92915050565b600060208284031215613bbd57613bbc613a6e565b5b6000613bcb84828501613abc565b91505092915050565b600080600060608486031215613bed57613bec613a6e565b5b6000613bfb86828701613abc565b9350506020613c0c86828701613abc565b9250506040613c1d86828701613af2565b9150509250925092565b613c3081613a93565b82525050565b6000602082019050613c4b6000830184613c27565b92915050565b600060208284031215613c6757613c66613a6e565b5b6000613c7584828501613af2565b91505092915050565b600060ff82169050919050565b613c9481613c7e565b82525050565b6000602082019050613caf6000830184613c8b565b92915050565b613cbe81613b47565b8114613cc957600080fd5b50565b600081359050613cdb81613cb5565b92915050565b60008060408385031215613cf857613cf7613a6e565b5b6000613d0685828601613abc565b9250506020613d1785828601613ccc565b9150509250929050565b600060208284031215613d3757613d36613a6e565b5b6000613d4584828501613ccc565b91505092915050565b60008060408385031215613d6557613d64613a6e565b5b6000613d7385828601613af2565b9250506020613d8485828601613af2565b9150509250929050565b6000819050919050565b6000613db3613dae613da984613a73565b613d8e565b613a73565b9050919050565b6000613dc582613d98565b9050919050565b6000613dd782613dba565b9050919050565b613de781613dcc565b82525050565b6000602082019050613e026000830184613dde565b92915050565b60008060408385031215613e1f57613e1e613a6e565b5b6000613e2d85828601613abc565b9250506020613e3e85828601613abc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e8f57607f821691505b602082108103613ea257613ea1613e48565b5b50919050565b7f496e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b6000613ede600d836139c7565b9150613ee982613ea8565b602082019050919050565b60006020820190508181036000830152613f0d81613ed1565b9050919050565b600081905092915050565b50565b6000613f2f600083613f14565b9150613f3a82613f1f565b600082019050919050565b6000613f5082613f22565b9150819050919050565b600081519050613f6981613adb565b92915050565b600060208284031215613f8557613f84613a6e565b5b6000613f9384828501613f5a565b91505092915050565b6000604082019050613fb16000830185613c27565b613fbe6020830184613b7d565b9392505050565b600081519050613fd481613cb5565b92915050565b600060208284031215613ff057613fef613a6e565b5b6000613ffe84828501613fc5565b91505092915050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e74000000600082015250565b600061403d601d836139c7565b915061404882614007565b602082019050919050565b6000602082019050818103600083015261406c81614030565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140ad82613ad1565b91506140b883613ad1565b92508282026140c681613ad1565b915082820484148315176140dd576140dc614073565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061411e82613ad1565b915061412983613ad1565b925082614139576141386140e4565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006141a06035836139c7565b91506141ab82614144565b604082019050919050565b600060208201905081810360008301526141cf81614193565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006142326034836139c7565b915061423d826141d6565b604082019050919050565b6000602082019050818103600083015261426181614225565b9050919050565b600061427382613ad1565b915061427e83613ad1565b925082820190508082111561429657614295614073565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142f86039836139c7565b91506143038261429c565b604082019050919050565b60006020820190508181036000830152614327816142eb565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156143855780860481111561436157614360614073565b5b60018516156143705780820291505b808102905061437e8561432e565b9450614345565b94509492505050565b60008261439e576001905061445a565b816143ac576000905061445a565b81600181146143c257600281146143cc576143fb565b600191505061445a565b60ff8411156143de576143dd614073565b5b8360020a9150848211156143f5576143f4614073565b5b5061445a565b5060208310610133831016604e8410600b84101617156144305782820a90508381111561442b5761442a614073565b5b61445a565b61443d848484600161433b565b9250905081840481111561445457614453614073565b5b81810290505b9392505050565b600061446c82613ad1565b915061447783613c7e565b92506144a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461438e565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614508602f836139c7565b9150614513826144ac565b604082019050919050565b60006020820190508181036000830152614537816144fb565b9050919050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c60008201527f6574206c6f776572207468616e20302e35250000000000000000000000000000602082015250565b600061459a6032836139c7565b91506145a58261453e565b604082019050919050565b600060208201905081810360008301526145c98161458d565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c756500600082015250565b6000614606601f836139c7565b9150614611826145d0565b602082019050919050565b60006020820190508181036000830152614635816145f9565b9050919050565b7f4d757374206b6565702074617820617420393525206f72206c65737300000000600082015250565b6000614672601c836139c7565b915061467d8261463c565b602082019050919050565b600060208201905081810360008301526146a181614665565b9050919050565b7f4e6577206f776e6572206973205a45524f000000000000000000000000000000600082015250565b60006146de6011836139c7565b91506146e9826146a8565b602082019050919050565b6000602082019050818103600083015261470d816146d1565b9050919050565b7f45524332303a204e6f74206f776e657220213d20616464726573732830290000600082015250565b600061474a601e836139c7565b915061475582614714565b602082019050919050565b600060208201905081810360008301526147798161473d565b9050919050565b7f45524332303a204e6f74207370656e64657220213d2061646472657373283029600082015250565b60006147b66020836139c7565b91506147c182614780565b602082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b7f45524332303a20496e76616c69642066726f6d20616464726573730000000000600082015250565b6000614822601b836139c7565b915061482d826147ec565b602082019050919050565b6000602082019050818103600083015261485181614815565b9050919050565b7f45524332303a20496e76616c696420746f206164647265737300000000000000600082015250565b600061488e6019836139c7565b915061489982614858565b602082019050919050565b600060208201905081810360008301526148bd81614881565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c69737400000000000000600082015250565b60006148fa6019836139c7565b9150614905826148c4565b602082019050919050565b60006020820190508181036000830152614929816148ed565b9050919050565b7f45524332303a20746f20697320626c61636b206c697374000000000000000000600082015250565b60006149666017836139c7565b915061497182614930565b602082019050919050565b6000602082019050818103600083015261499581614959565b9050919050565b7f436f6e7472616374206973207061757365642100000000000000000000000000600082015250565b60006149d26013836139c7565b91506149dd8261499c565b602082019050919050565b60006020820190508181036000830152614a01816149c5565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614a3e6016836139c7565b9150614a4982614a08565b602082019050919050565b60006020820190508181036000830152614a6d81614a31565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b6000614ad06035836139c7565b9150614adb82614a74565b604082019050919050565b60006020820190508181036000830152614aff81614ac3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614b3c6013836139c7565b9150614b4782614b06565b602082019050919050565b60006020820190508181036000830152614b6b81614b2f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b6000614bce6036836139c7565b9150614bd982614b72565b604082019050919050565b60006020820190508181036000830152614bfd81614bc1565b9050919050565b6000614c0f82613ad1565b9150614c1a83613ad1565b9250828203905081811115614c3257614c31614073565b5b92915050565b7f45524332303a204e6f742066726f6d20213d2061646472657373283029000000600082015250565b6000614c6e601d836139c7565b9150614c7982614c38565b602082019050919050565b60006020820190508181036000830152614c9d81614c61565b9050919050565b7f45524332303a204e6f7420746f20213d20616464726573732830290000000000600082015250565b6000614cda601b836139c7565b9150614ce582614ca4565b602082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e74600082015250565b6000614d466020836139c7565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614de981613aa5565b92915050565b600060208284031215614e0557614e04613a6e565b5b6000614e1384828501614dda565b91505092915050565b6000819050919050565b6000614e41614e3c614e3784614e1c565b613d8e565b613ad1565b9050919050565b614e5181614e26565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e8c81613a93565b82525050565b6000614e9e8383614e83565b60208301905092915050565b6000602082019050919050565b6000614ec282614e57565b614ecc8185614e62565b9350614ed783614e73565b8060005b83811015614f08578151614eef8882614e92565b9750614efa83614eaa565b925050600181019050614edb565b5085935050505092915050565b600060a082019050614f2a6000830188613b7d565b614f376020830187614e48565b8181036040830152614f498186614eb7565b9050614f586060830185613c27565b614f656080830184613b7d565b969550505050505056fea26469706673582212208500060783f938c4e103a65a222c8c37fb98b0258fb51d521a06e6d49300fbfe64736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d5350b81d9e9f3592eda444359018a2dcd429f8800000000000000000000000075179adfce66d204ebf082ec9e4edc63f61778aa0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _devWallet (address): 0xD5350b81d9e9F3592eDa444359018A2Dcd429f88
Arg [1] : _marketingWallet (address): 0x75179ADfCe66D204Ebf082ec9e4Edc63F61778AA
Arg [2] : _swapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000d5350b81d9e9f3592eda444359018a2dcd429f88
Arg [1] : 00000000000000000000000075179adfce66d204ebf082ec9e4edc63f61778aa
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

14122:10485:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9807:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10379:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17113:116;;;;;;;;;;;;;:::i;:::-;;24199:161;;;;;;;;;;;;;:::i;:::-;;14458:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10128:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16774:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14569:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24368:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14725:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11059:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14252:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17752:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10027:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15029:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14614:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11633:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19422:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14848:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18400:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14996:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18112:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18684:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14328:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14655:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17237:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10244:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1117:103;;;;;;;;;;;;;:::i;:::-;;17537:90;;;;;;;;;;;;;:::i;:::-;;14499:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14288:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;834:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14536:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17637:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9915:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11852:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11464:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16887:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15066:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15097:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18812:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14782:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19110:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14962:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14209:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14373:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17024:81;;;;;;;;;;;;;:::i;:::-;;17399:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14417:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10900:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14890:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14924:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;929:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9807:100;9861:13;9894:5;9887:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9807:100;:::o;10379:169::-;10462:4;10479:39;10488:12;:10;:12::i;:::-;10502:7;10511:6;10479:8;:39::i;:::-;10536:4;10529:11;;10379:169;;;;:::o;17113:116::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17187:4:::1;17170:14;;:21;;;;;;;;;;;;;;;;;;17217:4;17202:12;;:19;;;;;;;;;;;;;;;;;;17113:116::o:0;24199:161::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24258:12:::1;24302:10;24294:24;;24326:21;24294:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24281:71;;;;;24247:113;24199:161::o:0;14458:32::-;;;;;;;;;;;;;:::o;10128:108::-;10189:7;10216:12;;10209:19;;10128:108;:::o;16774:105::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;16861:10:::1;16849:9;;:22;;;;;;;;;;;;;;;;;;16774:105:::0;:::o;14569:38::-;;;;:::o;24368:234::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24454:12:::1;24476;24454:35;;24500:15;24518:5;:15;;;24542:4;24518:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24500:48;;24559:5;:14;;;24574:10;24586:7;24559:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24443:159;;24368:234:::0;:::o;14725:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;11059:397::-;11156:4;11173:27;11183:4;11189:2;11193:6;11173:9;:27::i;:::-;11211:16;11230:11;:17;11242:4;11230:17;;;;;;;;;;;;;;;:31;11248:12;:10;:12::i;:::-;11230:31;;;;;;;;;;;;;;;;11211:50;;11292:6;11280:8;:18;;11272:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11368:47;11377:4;11383:12;:10;:12::i;:::-;11408:6;11397:8;:17;11368:8;:47::i;:::-;11444:4;11437:11;;;11059:397;;;;;:::o;14252:23::-;;;;;;;;;;;;;:::o;17752:352::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17882:6:::1;17877:1;17861:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17860:28;;;;:::i;:::-;17850:6;:38;;17842:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;17997:4;17992:1;17976:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17975:26;;;;:::i;:::-;17965:6;:36;;17957:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;18090:6;18069:18;:27;;;;17752:352:::0;:::o;10027:93::-;10085:5;10110:2;10103:9;;10027:93;:::o;15029:30::-;;;;:::o;14614:32::-;;;;:::o;11633:211::-;11719:4;11736:78;11745:12;:10;:12::i;:::-;11759:7;11805:8;11768:11;:25;11780:12;:10;:12::i;:::-;11768:25;;;;;;;;;;;;;;;:34;11794:7;11768:34;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;11736:8;:78::i;:::-;11832:4;11825:11;;11633:211;;;;:::o;19422:247::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19541:8:::1;;;;;;;;;;;19533:16;;:4;:16;;::::0;19525:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19656:5;19622:25;:31;19648:4;19622:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19422:247:::0;;:::o;14848:33::-;;;;;;;;;;;;;:::o;18400:276::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18544:10:::1;:8;:10::i;:::-;18538:2;:16;;;;:::i;:::-;18529:4;18524:1;18508:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18507:26;;;;:::i;:::-;18506:49;;;;:::i;:::-;18496:6;:59;;18488:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;18657:10;:8;:10::i;:::-;18651:2;:16;;;;:::i;:::-;18641:6;:27;;;;:::i;:::-;18618:20;:50;;;;18400:276:::0;:::o;14996:26::-;;;;:::o;18112:280::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18254:10:::1;:8;:10::i;:::-;18248:2;:16;;;;:::i;:::-;18239:4;18234:1;18218:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18217:26;;;;:::i;:::-;18216:49;;;;:::i;:::-;18206:6;:59;;18198:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;18373:10;:8;:10::i;:::-;18367:2;:16;;;;:::i;:::-;18357:6;:27;;;;:::i;:::-;18331:23;:53;;;;18112:280:::0;:::o;18684:120::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18790:6:::1;18772:9;:15;18782:4;18772:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;18684:120:::0;;:::o;14328:38::-;;;;:::o;14655:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;17237:154::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17378:5:::1;17340:29;:35;17370:4;17340:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;17237:154:::0;;:::o;10244:127::-;10318:7;10345:9;:18;10355:7;10345:18;;;;;;;;;;;;;;;;10338:25;;10244:127;;;:::o;1117:103::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1182:30:::1;1209:1;1182:18;:30::i;:::-;1117:103::o:0;17537:90::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17614:5:::1;17597:14;;:22;;;;;;;;;;;;;;;;;;17537:90::o:0;14499:30::-;;;;;;;;;;;;;:::o;14288:33::-;;;;:::o;834:87::-;880:7;907:6;;;;;;;;;;;900:13;;834:87;:::o;14536:24::-;;;;;;;;;;;;;:::o;17637:107::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17729:7:::1;17714:12;;:22;;;;;;;;;;;;;;;;;;17637:107:::0;:::o;9915:104::-;9971:13;10004:7;9997:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9915:104;:::o;11852:360::-;11938:4;11955:16;11974:11;:25;11986:12;:10;:12::i;:::-;11974:25;;;;;;;;;;;;;;;:34;12000:7;11974:34;;;;;;;;;;;;;;;;11955:53;;12039:8;12027;:20;;12019:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12119:52;12128:12;:10;:12::i;:::-;12142:7;12162:8;12151;:19;12119:8;:52::i;:::-;12200:4;12193:11;;;11852:360;;;;:::o;11464:161::-;11543:4;11560:35;11570:12;:10;:12::i;:::-;11584:2;11588:6;11560:9;:35::i;:::-;11613:4;11606:11;;11464:161;;;;:::o;16887:129::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;16992:16:::1;16974:15;;:34;;;;;;;;;;;;;;;;;;16887:129:::0;:::o;15066:24::-;;;;:::o;15097:20::-;;;;;;;;;;;;;:::o;18812:290::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18929:12:::1;18911:15;:30;;;;18964:9;18952;:21;;;;19016:9;;18998:15;;:27;;;;:::i;:::-;18984:11;:41;;;;19059:2;19044:11;;:17;;19036:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18812:290:::0;;:::o;14782:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19110:300::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19232:12:::1;19213:16;:31;;;;19268:9;19255:10;:22;;;;19322:10;;19303:16;;:29;;;;:::i;:::-;19288:12;:44;;;;19367:2;19351:12;;:18;;19343:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;19110:300:::0;;:::o;14962:25::-;;;;:::o;14209:36::-;;;;;;;;;;;;;:::o;14373:35::-;;;;:::o;17024:81::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17089:8:::1;;;;;;;;;;;17088:9;17077:8;;:20;;;;;;;;;;;;;;;;;;17024:81::o:0;17399:130::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17516:5:::1;17488:16;:25;17505:7;17488:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;17399:130:::0;;:::o;14417:34::-;;;;;;;;;;;;;:::o;10900:151::-;10989:7;11016:11;:18;11028:5;11016:18;;;;;;;;;;;;;;;:27;11035:7;11016:27;;;;;;;;;;;;;;;;11009:34;;10900:151;;;;:::o;14890:27::-;;;;:::o;14924:31::-;;;;:::o;929:180::-;776:12;:10;:12::i;:::-;765:23;;:7;:5;:7::i;:::-;:23;;;757:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1038:1:::1;1018:22;;:8;:22;;::::0;1010:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1073:28;1092:8;1073:18;:28::i;:::-;929:180:::0;:::o;271:98::-;324:7;351:10;344:17;;271:98;:::o;10556:336::-;10675:1;10658:19;;:5;:19;;;10650:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10750:1;10731:21;;:7;:21;;;10723:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10830:6;10800:11;:18;10812:5;10800:18;;;;;;;;;;;;;;;:27;10819:7;10800:27;;;;;;;;;;;;;;;:36;;;;10868:7;10852:32;;10861:5;10852:32;;;10877:6;10852:32;;;;;;:::i;:::-;;;;;;;;10556:336;;;:::o;20569:3018::-;20717:1;20701:18;;:4;:18;;;20693:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;20784:1;20770:16;;:2;:16;;;20762:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20836:9;:15;20846:4;20836:15;;;;;;;;;;;;;;;;;;;;;;;;;20835:16;20827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20901:9;:13;20911:2;20901:13;;;;;;;;;;;;;;;;;;;;;;;;;20900:14;20892:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;20969:1;20959:6;:11;20955:93;;20987:28;21003:4;21009:2;21013:1;20987:15;:28::i;:::-;21030:7;;20955:93;21077:7;:5;:7::i;:::-;21064:20;;:9;:20;;;21060:93;;21109:8;;;;;;;;;;;21108:9;21100:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;21060:93;21169:14;;;;;;;;;;;21165:1085;;;21212:7;:5;:7::i;:::-;21204:15;;:4;:15;;;;:32;;;;;21229:7;:5;:7::i;:::-;21223:13;;:2;:13;;;;21204:32;:52;;;;;21254:1;21240:16;;:2;:16;;;;21204:52;:77;;;;;21274:6;21260:21;;:2;:21;;;;21204:77;:91;;;;;21286:9;;;;;;;;;;;21285:10;21204:91;21200:1039;;;21321:14;;;;;;;;;;;21316:145;;21368:16;:22;21385:4;21368:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;21394:16;:20;21411:2;21394:20;;;;;;;;;;;;;;;;;;;;;;;;;21368:46;21360:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;21316:145;21485:25;:31;21511:4;21485:31;;;;;;;;;;;;;;;;;;;;;;;;;:69;;;;;21521:29;:33;21551:2;21521:33;;;;;;;;;;;;;;;;;;;;;;;;;21520:34;21485:69;21481:743;;;21597:20;;21587:6;:30;;21579:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21732:23;;21715:13;21725:2;21715:9;:13::i;:::-;21706:6;:22;;;;:::i;:::-;:49;;21698:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;21481:743;;;21826:25;:29;21852:2;21826:29;;;;;;;;;;;;;;;;;;;;;;;;;:69;;;;;21860:29;:35;21890:4;21860:35;;;;;;;;;;;;;;;;;;;;;;;;;21859:36;21826:69;21822:402;;;21938:20;;21928:6;:30;;21920:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;21822:402;;;22065:29;:33;22095:2;22065:33;;;;;;;;;;;;;;;;;;;;;;;;;22060:164;;22157:23;;22140:13;22150:2;22140:9;:13::i;:::-;22131:6;:22;;;;:::i;:::-;:49;;22123:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22060:164;21822:402;21481:743;21200:1039;21165:1085;22262:20;22285:24;22303:4;22285:9;:24::i;:::-;22262:47;;22320:12;22351:18;;22335:12;:34;;22320:49;;22384:12;;;;;;;;;;;:23;;;;;22400:7;22384:23;:37;;;;;22412:9;;;;;;;;;;;22411:10;22384:37;:86;;;;;22439:25;:31;22465:4;22439:31;;;;;;;;;;;;;;;;;;;;;;;;;22438:32;22384:86;:113;;;;;22475:16;:22;22492:4;22475:22;;;;;;;;;;;;;;;;;;;;;;;;;22474:23;22384:113;:138;;;;;22502:16;:20;22519:2;22502:20;;;;;;;;;;;;;;;;;;;;;;;;;22501:21;22384:138;22380:244;;;22551:4;22539:9;;:16;;;;;;;;;;;;;;;;;;22570:10;:8;:10::i;:::-;22607:5;22595:9;;:17;;;;;;;;;;;;;;;;;;22380:244;22636:9;22649;;;;;;;;;;;22648:10;22636:22;;22673:16;:22;22690:4;22673:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;22699:16;:20;22716:2;22699:20;;;;;;;;;;;;;;;;;;;;;;;;;22673:46;22669:77;;;22741:5;22734:12;;22669:77;22759:12;22790:4;22786:748;;;22815:25;:29;22841:2;22815:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;22863:1;22848:12;;:16;22815:49;22811:595;;;22892:33;22921:3;22892:24;22903:12;;22892:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;22885:40;;22987:12;;22973:10;;22966:4;:17;;;;:::i;:::-;22965:34;;;;:::i;:::-;22944:17;;:55;;;;;;;:::i;:::-;;;;;;;;23073:12;;23053:16;;23046:4;:23;;;;:::i;:::-;23045:40;;;;:::i;:::-;23018:23;;:67;;;;;;;:::i;:::-;;;;;;;;22811:595;;;23124:25;:31;23150:4;23124:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;23173:1;23159:11;;:15;23124:50;23120:286;;;23202:32;23230:3;23202:23;23213:11;;23202:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;23195:39;;23295:11;;23282:9;;23275:4;:16;;;;:::i;:::-;23274:32;;;;:::i;:::-;23253:17;;:53;;;;;;;:::i;:::-;;;;;;;;23379:11;;23360:15;;23353:4;:22;;;;:::i;:::-;23352:38;;;;:::i;:::-;23325:23;;:65;;;;;;;:::i;:::-;;;;;;;;23120:286;22811:595;23431:1;23424:4;:8;23420:73;;;23451:42;23467:4;23481;23488;23451:15;:42::i;:::-;23420:73;23518:4;23508:14;;;;;:::i;:::-;;;22786:748;23546:33;23562:4;23568:2;23572:6;23546:15;:33::i;:::-;20682:2905;;;;20569:3018;;;;:::o;1228:191::-;1302:16;1321:6;;;;;;;;;;;1302:25;;1347:8;1338:6;;:17;;;;;;;;;;;;;;;;;;1402:8;1371:40;;1392:8;1371:40;;;;;;;;;;;;1291:128;1228:191;:::o;13356:607::-;13469:1;13453:18;;:4;:18;;;13445:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13538:1;13524:16;;:2;:16;;;13516:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;13583:38;13604:4;13610:2;13614:6;13583:20;:38::i;:::-;13632:19;13654:9;:15;13664:4;13654:15;;;;;;;;;;;;;;;;13632:37;;13703:6;13688:11;:21;;13680:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;13814:6;13800:11;:20;13782:9;:15;13792:4;13782:15;;;;;;;;;;;;;;;:38;;;;13859:6;13842:9;:13;13852:2;13842:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;13896:2;13881:26;;13890:4;13881:26;;;13900:6;13881:26;;;;;;:::i;:::-;;;;;;;;13918:37;13938:4;13944:2;13948:6;13918:19;:37::i;:::-;13434:529;13356:607;;;:::o;19677:884::-;19716:12;19739:25;19793:17;;19767:23;;:43;;;;:::i;:::-;19739:71;;19821:20;19844:24;19862:4;19844:9;:24::i;:::-;19821:47;;19906:1;19885:17;:22;:43;;;;19927:1;19911:12;:17;19885:43;19881:69;;;19943:7;;;;;19881:69;20002:2;19981:18;;:23;;;;:::i;:::-;19966:12;:38;19962:95;;;20055:2;20034:18;;:23;;;;:::i;:::-;20019:38;;19962:95;20070:22;20095:21;20070:46;;20127:30;20144:12;20127:16;:30::i;:::-;20170:18;20191:41;20217:14;20191:21;:25;;:41;;;;:::i;:::-;20170:62;;20243:17;20263:56;20301:17;20263:33;20278:17;;20263:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;20243:76;;20354:9;;;;;;;;;;;20346:23;;20377:9;20346:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20332:59;;;;;20424:15;;;;;;;;;;;20416:29;;20454:21;20416:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20402:79;;;;;20520:1;20494:23;:27;;;;20552:1;20532:17;:21;;;;19705:856;;;;;;19677:884;:::o;1450:98::-;1508:7;1539:1;1535;:5;;;;:::i;:::-;1528:12;;1450:98;;;;:::o;1834:::-;1892:7;1923:1;1919;:5;;;;:::i;:::-;1912:12;;1834:98;;;;:::o;13223:125::-;;;;:::o;13971:144::-;;;;:::o;23632:559::-;23753:21;23791:1;23777:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23753:40;;23822:4;23804;23809:1;23804:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23848:10;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23838:4;23843:1;23838:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;23878:52;23895:4;23910:10;;;;;;;;;;;23923:6;23878:8;:52::i;:::-;23969:10;;;;;;;;;;;:61;;;24045:6;24066:1;24110:4;24137;24157:15;23969:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23682:509;23632:559;:::o;2479:98::-;2537:7;2568:1;2564;:5;;;;:::i;:::-;2557:12;;2479:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:118::-;4845:24;4863:5;4845:24;:::i;:::-;4840:3;4833:37;4758:118;;:::o;4882:222::-;4975:4;5013:2;5002:9;4998:18;4990:26;;5026:71;5094:1;5083:9;5079:17;5070:6;5026:71;:::i;:::-;4882:222;;;;:::o;5110:329::-;5169:6;5218:2;5206:9;5197:7;5193:23;5189:32;5186:119;;;5224:79;;:::i;:::-;5186:119;5344:1;5369:53;5414:7;5405:6;5394:9;5390:22;5369:53;:::i;:::-;5359:63;;5315:117;5110:329;;;;:::o;5445:86::-;5480:7;5520:4;5513:5;5509:16;5498:27;;5445:86;;;:::o;5537:112::-;5620:22;5636:5;5620:22;:::i;:::-;5615:3;5608:35;5537:112;;:::o;5655:214::-;5744:4;5782:2;5771:9;5767:18;5759:26;;5795:67;5859:1;5848:9;5844:17;5835:6;5795:67;:::i;:::-;5655:214;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:468::-;6201:6;6209;6258:2;6246:9;6237:7;6233:23;6229:32;6226:119;;;6264:79;;:::i;:::-;6226:119;6384:1;6409:53;6454:7;6445:6;6434:9;6430:22;6409:53;:::i;:::-;6399:63;;6355:117;6511:2;6537:50;6579:7;6570:6;6559:9;6555:22;6537:50;:::i;:::-;6527:60;;6482:115;6136:468;;;;;:::o;6610:323::-;6666:6;6715:2;6703:9;6694:7;6690:23;6686:32;6683:119;;;6721:79;;:::i;:::-;6683:119;6841:1;6866:50;6908:7;6899:6;6888:9;6884:22;6866:50;:::i;:::-;6856:60;;6812:114;6610:323;;;;:::o;6939:474::-;7007:6;7015;7064:2;7052:9;7043:7;7039:23;7035:32;7032:119;;;7070:79;;:::i;:::-;7032:119;7190:1;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7161:117;7317:2;7343:53;7388:7;7379:6;7368:9;7364:22;7343:53;:::i;:::-;7333:63;;7288:118;6939:474;;;;;:::o;7419:60::-;7447:3;7468:5;7461:12;;7419:60;;;:::o;7485:142::-;7535:9;7568:53;7586:34;7595:24;7613:5;7595:24;:::i;:::-;7586:34;:::i;:::-;7568:53;:::i;:::-;7555:66;;7485:142;;;:::o;7633:126::-;7683:9;7716:37;7747:5;7716:37;:::i;:::-;7703:50;;7633:126;;;:::o;7765:152::-;7841:9;7874:37;7905:5;7874:37;:::i;:::-;7861:50;;7765:152;;;:::o;7923:183::-;8036:63;8093:5;8036:63;:::i;:::-;8031:3;8024:76;7923:183;;:::o;8112:274::-;8231:4;8269:2;8258:9;8254:18;8246:26;;8282:97;8376:1;8365:9;8361:17;8352:6;8282:97;:::i;:::-;8112:274;;;;:::o;8392:474::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:180::-;8920:77;8917:1;8910:88;9017:4;9014:1;9007:15;9041:4;9038:1;9031:15;9058:320;9102:6;9139:1;9133:4;9129:12;9119:22;;9186:1;9180:4;9176:12;9207:18;9197:81;;9263:4;9255:6;9251:17;9241:27;;9197:81;9325:2;9317:6;9314:14;9294:18;9291:38;9288:84;;9344:18;;:::i;:::-;9288:84;9109:269;9058:320;;;:::o;9384:163::-;9524:15;9520:1;9512:6;9508:14;9501:39;9384:163;:::o;9553:366::-;9695:3;9716:67;9780:2;9775:3;9716:67;:::i;:::-;9709:74;;9792:93;9881:3;9792:93;:::i;:::-;9910:2;9905:3;9901:12;9894:19;;9553:366;;;:::o;9925:419::-;10091:4;10129:2;10118:9;10114:18;10106:26;;10178:9;10172:4;10168:20;10164:1;10153:9;10149:17;10142:47;10206:131;10332:4;10206:131;:::i;:::-;10198:139;;9925:419;;;:::o;10350:147::-;10451:11;10488:3;10473:18;;10350:147;;;;:::o;10503:114::-;;:::o;10623:398::-;10782:3;10803:83;10884:1;10879:3;10803:83;:::i;:::-;10796:90;;10895:93;10984:3;10895:93;:::i;:::-;11013:1;11008:3;11004:11;10997:18;;10623:398;;;:::o;11027:379::-;11211:3;11233:147;11376:3;11233:147;:::i;:::-;11226:154;;11397:3;11390:10;;11027:379;;;:::o;11412:143::-;11469:5;11500:6;11494:13;11485:22;;11516:33;11543:5;11516:33;:::i;:::-;11412:143;;;;:::o;11561:351::-;11631:6;11680:2;11668:9;11659:7;11655:23;11651:32;11648:119;;;11686:79;;:::i;:::-;11648:119;11806:1;11831:64;11887:7;11878:6;11867:9;11863:22;11831:64;:::i;:::-;11821:74;;11777:128;11561:351;;;;:::o;11918:332::-;12039:4;12077:2;12066:9;12062:18;12054:26;;12090:71;12158:1;12147:9;12143:17;12134:6;12090:71;:::i;:::-;12171:72;12239:2;12228:9;12224:18;12215:6;12171:72;:::i;:::-;11918:332;;;;;:::o;12256:137::-;12310:5;12341:6;12335:13;12326:22;;12357:30;12381:5;12357:30;:::i;:::-;12256:137;;;;:::o;12399:345::-;12466:6;12515:2;12503:9;12494:7;12490:23;12486:32;12483:119;;;12521:79;;:::i;:::-;12483:119;12641:1;12666:61;12719:7;12710:6;12699:9;12695:22;12666:61;:::i;:::-;12656:71;;12612:125;12399:345;;;;:::o;12750:179::-;12890:31;12886:1;12878:6;12874:14;12867:55;12750:179;:::o;12935:366::-;13077:3;13098:67;13162:2;13157:3;13098:67;:::i;:::-;13091:74;;13174:93;13263:3;13174:93;:::i;:::-;13292:2;13287:3;13283:12;13276:19;;12935:366;;;:::o;13307:419::-;13473:4;13511:2;13500:9;13496:18;13488:26;;13560:9;13554:4;13550:20;13546:1;13535:9;13531:17;13524:47;13588:131;13714:4;13588:131;:::i;:::-;13580:139;;13307:419;;;:::o;13732:180::-;13780:77;13777:1;13770:88;13877:4;13874:1;13867:15;13901:4;13898:1;13891:15;13918:410;13958:7;13981:20;13999:1;13981:20;:::i;:::-;13976:25;;14015:20;14033:1;14015:20;:::i;:::-;14010:25;;14070:1;14067;14063:9;14092:30;14110:11;14092:30;:::i;:::-;14081:41;;14271:1;14262:7;14258:15;14255:1;14252:22;14232:1;14225:9;14205:83;14182:139;;14301:18;;:::i;:::-;14182:139;13966:362;13918:410;;;;:::o;14334:180::-;14382:77;14379:1;14372:88;14479:4;14476:1;14469:15;14503:4;14500:1;14493:15;14520:185;14560:1;14577:20;14595:1;14577:20;:::i;:::-;14572:25;;14611:20;14629:1;14611:20;:::i;:::-;14606:25;;14650:1;14640:35;;14655:18;;:::i;:::-;14640:35;14697:1;14694;14690:9;14685:14;;14520:185;;;;:::o;14711:240::-;14851:34;14847:1;14839:6;14835:14;14828:58;14920:23;14915:2;14907:6;14903:15;14896:48;14711:240;:::o;14957:366::-;15099:3;15120:67;15184:2;15179:3;15120:67;:::i;:::-;15113:74;;15196:93;15285:3;15196:93;:::i;:::-;15314:2;15309:3;15305:12;15298:19;;14957:366;;;:::o;15329:419::-;15495:4;15533:2;15522:9;15518:18;15510:26;;15582:9;15576:4;15572:20;15568:1;15557:9;15553:17;15546:47;15610:131;15736:4;15610:131;:::i;:::-;15602:139;;15329:419;;;:::o;15754:239::-;15894:34;15890:1;15882:6;15878:14;15871:58;15963:22;15958:2;15950:6;15946:15;15939:47;15754:239;:::o;15999:366::-;16141:3;16162:67;16226:2;16221:3;16162:67;:::i;:::-;16155:74;;16238:93;16327:3;16238:93;:::i;:::-;16356:2;16351:3;16347:12;16340:19;;15999:366;;;:::o;16371:419::-;16537:4;16575:2;16564:9;16560:18;16552:26;;16624:9;16618:4;16614:20;16610:1;16599:9;16595:17;16588:47;16652:131;16778:4;16652:131;:::i;:::-;16644:139;;16371:419;;;:::o;16796:191::-;16836:3;16855:20;16873:1;16855:20;:::i;:::-;16850:25;;16889:20;16907:1;16889:20;:::i;:::-;16884:25;;16932:1;16929;16925:9;16918:16;;16953:3;16950:1;16947:10;16944:36;;;16960:18;;:::i;:::-;16944:36;16796:191;;;;:::o;16993:244::-;17133:34;17129:1;17121:6;17117:14;17110:58;17202:27;17197:2;17189:6;17185:15;17178:52;16993:244;:::o;17243:366::-;17385:3;17406:67;17470:2;17465:3;17406:67;:::i;:::-;17399:74;;17482:93;17571:3;17482:93;:::i;:::-;17600:2;17595:3;17591:12;17584:19;;17243:366;;;:::o;17615:419::-;17781:4;17819:2;17808:9;17804:18;17796:26;;17868:9;17862:4;17858:20;17854:1;17843:9;17839:17;17832:47;17896:131;18022:4;17896:131;:::i;:::-;17888:139;;17615:419;;;:::o;18040:102::-;18082:8;18129:5;18126:1;18122:13;18101:34;;18040:102;;;:::o;18148:848::-;18209:5;18216:4;18240:6;18231:15;;18264:5;18255:14;;18278:712;18299:1;18289:8;18286:15;18278:712;;;18394:4;18389:3;18385:14;18379:4;18376:24;18373:50;;;18403:18;;:::i;:::-;18373:50;18453:1;18443:8;18439:16;18436:451;;;18868:4;18861:5;18857:16;18848:25;;18436:451;18918:4;18912;18908:15;18900:23;;18948:32;18971:8;18948:32;:::i;:::-;18936:44;;18278:712;;;18148:848;;;;;;;:::o;19002:1073::-;19056:5;19247:8;19237:40;;19268:1;19259:10;;19270:5;;19237:40;19296:4;19286:36;;19313:1;19304:10;;19315:5;;19286:36;19382:4;19430:1;19425:27;;;;19466:1;19461:191;;;;19375:277;;19425:27;19443:1;19434:10;;19445:5;;;19461:191;19506:3;19496:8;19493:17;19490:43;;;19513:18;;:::i;:::-;19490:43;19562:8;19559:1;19555:16;19546:25;;19597:3;19590:5;19587:14;19584:40;;;19604:18;;:::i;:::-;19584:40;19637:5;;;19375:277;;19761:2;19751:8;19748:16;19742:3;19736:4;19733:13;19729:36;19711:2;19701:8;19698:16;19693:2;19687:4;19684:12;19680:35;19664:111;19661:246;;;19817:8;19811:4;19807:19;19798:28;;19852:3;19845:5;19842:14;19839:40;;;19859:18;;:::i;:::-;19839:40;19892:5;;19661:246;19932:42;19970:3;19960:8;19954:4;19951:1;19932:42;:::i;:::-;19917:57;;;;20006:4;20001:3;19997:14;19990:5;19987:25;19984:51;;;20015:18;;:::i;:::-;19984:51;20064:4;20057:5;20053:16;20044:25;;19002:1073;;;;;;:::o;20081:281::-;20139:5;20163:23;20181:4;20163:23;:::i;:::-;20155:31;;20207:25;20223:8;20207:25;:::i;:::-;20195:37;;20251:104;20288:66;20278:8;20272:4;20251:104;:::i;:::-;20242:113;;20081:281;;;;:::o;20368:234::-;20508:34;20504:1;20496:6;20492:14;20485:58;20577:17;20572:2;20564:6;20560:15;20553:42;20368:234;:::o;20608:366::-;20750:3;20771:67;20835:2;20830:3;20771:67;:::i;:::-;20764:74;;20847:93;20936:3;20847:93;:::i;:::-;20965:2;20960:3;20956:12;20949:19;;20608:366;;;:::o;20980:419::-;21146:4;21184:2;21173:9;21169:18;21161:26;;21233:9;21227:4;21223:20;21219:1;21208:9;21204:17;21197:47;21261:131;21387:4;21261:131;:::i;:::-;21253:139;;20980:419;;;:::o;21405:237::-;21545:34;21541:1;21533:6;21529:14;21522:58;21614:20;21609:2;21601:6;21597:15;21590:45;21405:237;:::o;21648:366::-;21790:3;21811:67;21875:2;21870:3;21811:67;:::i;:::-;21804:74;;21887:93;21976:3;21887:93;:::i;:::-;22005:2;22000:3;21996:12;21989:19;;21648:366;;;:::o;22020:419::-;22186:4;22224:2;22213:9;22209:18;22201:26;;22273:9;22267:4;22263:20;22259:1;22248:9;22244:17;22237:47;22301:131;22427:4;22301:131;:::i;:::-;22293:139;;22020:419;;;:::o;22445:181::-;22585:33;22581:1;22573:6;22569:14;22562:57;22445:181;:::o;22632:366::-;22774:3;22795:67;22859:2;22854:3;22795:67;:::i;:::-;22788:74;;22871:93;22960:3;22871:93;:::i;:::-;22989:2;22984:3;22980:12;22973:19;;22632:366;;;:::o;23004:419::-;23170:4;23208:2;23197:9;23193:18;23185:26;;23257:9;23251:4;23247:20;23243:1;23232:9;23228:17;23221:47;23285:131;23411:4;23285:131;:::i;:::-;23277:139;;23004:419;;;:::o;23429:178::-;23569:30;23565:1;23557:6;23553:14;23546:54;23429:178;:::o;23613:366::-;23755:3;23776:67;23840:2;23835:3;23776:67;:::i;:::-;23769:74;;23852:93;23941:3;23852:93;:::i;:::-;23970:2;23965:3;23961:12;23954:19;;23613:366;;;:::o;23985:419::-;24151:4;24189:2;24178:9;24174:18;24166:26;;24238:9;24232:4;24228:20;24224:1;24213:9;24209:17;24202:47;24266:131;24392:4;24266:131;:::i;:::-;24258:139;;23985:419;;;:::o;24410:167::-;24550:19;24546:1;24538:6;24534:14;24527:43;24410:167;:::o;24583:366::-;24725:3;24746:67;24810:2;24805:3;24746:67;:::i;:::-;24739:74;;24822:93;24911:3;24822:93;:::i;:::-;24940:2;24935:3;24931:12;24924:19;;24583:366;;;:::o;24955:419::-;25121:4;25159:2;25148:9;25144:18;25136:26;;25208:9;25202:4;25198:20;25194:1;25183:9;25179:17;25172:47;25236:131;25362:4;25236:131;:::i;:::-;25228:139;;24955:419;;;:::o;25380:180::-;25520:32;25516:1;25508:6;25504:14;25497:56;25380:180;:::o;25566:366::-;25708:3;25729:67;25793:2;25788:3;25729:67;:::i;:::-;25722:74;;25805:93;25894:3;25805:93;:::i;:::-;25923:2;25918:3;25914:12;25907:19;;25566:366;;;:::o;25938:419::-;26104:4;26142:2;26131:9;26127:18;26119:26;;26191:9;26185:4;26181:20;26177:1;26166:9;26162:17;26155:47;26219:131;26345:4;26219:131;:::i;:::-;26211:139;;25938:419;;;:::o;26363:182::-;26503:34;26499:1;26491:6;26487:14;26480:58;26363:182;:::o;26551:366::-;26693:3;26714:67;26778:2;26773:3;26714:67;:::i;:::-;26707:74;;26790:93;26879:3;26790:93;:::i;:::-;26908:2;26903:3;26899:12;26892:19;;26551:366;;;:::o;26923:419::-;27089:4;27127:2;27116:9;27112:18;27104:26;;27176:9;27170:4;27166:20;27162:1;27151:9;27147:17;27140:47;27204:131;27330:4;27204:131;:::i;:::-;27196:139;;26923:419;;;:::o;27348:177::-;27488:29;27484:1;27476:6;27472:14;27465:53;27348:177;:::o;27531:366::-;27673:3;27694:67;27758:2;27753:3;27694:67;:::i;:::-;27687:74;;27770:93;27859:3;27770:93;:::i;:::-;27888:2;27883:3;27879:12;27872:19;;27531:366;;;:::o;27903:419::-;28069:4;28107:2;28096:9;28092:18;28084:26;;28156:9;28150:4;28146:20;28142:1;28131:9;28127:17;28120:47;28184:131;28310:4;28184:131;:::i;:::-;28176:139;;27903:419;;;:::o;28328:175::-;28468:27;28464:1;28456:6;28452:14;28445:51;28328:175;:::o;28509:366::-;28651:3;28672:67;28736:2;28731:3;28672:67;:::i;:::-;28665:74;;28748:93;28837:3;28748:93;:::i;:::-;28866:2;28861:3;28857:12;28850:19;;28509:366;;;:::o;28881:419::-;29047:4;29085:2;29074:9;29070:18;29062:26;;29134:9;29128:4;29124:20;29120:1;29109:9;29105:17;29098:47;29162:131;29288:4;29162:131;:::i;:::-;29154:139;;28881:419;;;:::o;29306:175::-;29446:27;29442:1;29434:6;29430:14;29423:51;29306:175;:::o;29487:366::-;29629:3;29650:67;29714:2;29709:3;29650:67;:::i;:::-;29643:74;;29726:93;29815:3;29726:93;:::i;:::-;29844:2;29839:3;29835:12;29828:19;;29487:366;;;:::o;29859:419::-;30025:4;30063:2;30052:9;30048:18;30040:26;;30112:9;30106:4;30102:20;30098:1;30087:9;30083:17;30076:47;30140:131;30266:4;30140:131;:::i;:::-;30132:139;;29859:419;;;:::o;30284:173::-;30424:25;30420:1;30412:6;30408:14;30401:49;30284:173;:::o;30463:366::-;30605:3;30626:67;30690:2;30685:3;30626:67;:::i;:::-;30619:74;;30702:93;30791:3;30702:93;:::i;:::-;30820:2;30815:3;30811:12;30804:19;;30463:366;;;:::o;30835:419::-;31001:4;31039:2;31028:9;31024:18;31016:26;;31088:9;31082:4;31078:20;31074:1;31063:9;31059:17;31052:47;31116:131;31242:4;31116:131;:::i;:::-;31108:139;;30835:419;;;:::o;31260:169::-;31400:21;31396:1;31388:6;31384:14;31377:45;31260:169;:::o;31435:366::-;31577:3;31598:67;31662:2;31657:3;31598:67;:::i;:::-;31591:74;;31674:93;31763:3;31674:93;:::i;:::-;31792:2;31787:3;31783:12;31776:19;;31435:366;;;:::o;31807:419::-;31973:4;32011:2;32000:9;31996:18;31988:26;;32060:9;32054:4;32050:20;32046:1;32035:9;32031:17;32024:47;32088:131;32214:4;32088:131;:::i;:::-;32080:139;;31807:419;;;:::o;32232:172::-;32372:24;32368:1;32360:6;32356:14;32349:48;32232:172;:::o;32410:366::-;32552:3;32573:67;32637:2;32632:3;32573:67;:::i;:::-;32566:74;;32649:93;32738:3;32649:93;:::i;:::-;32767:2;32762:3;32758:12;32751:19;;32410:366;;;:::o;32782:419::-;32948:4;32986:2;32975:9;32971:18;32963:26;;33035:9;33029:4;33025:20;33021:1;33010:9;33006:17;32999:47;33063:131;33189:4;33063:131;:::i;:::-;33055:139;;32782:419;;;:::o;33207:240::-;33347:34;33343:1;33335:6;33331:14;33324:58;33416:23;33411:2;33403:6;33399:15;33392:48;33207:240;:::o;33453:366::-;33595:3;33616:67;33680:2;33675:3;33616:67;:::i;:::-;33609:74;;33692:93;33781:3;33692:93;:::i;:::-;33810:2;33805:3;33801:12;33794:19;;33453:366;;;:::o;33825:419::-;33991:4;34029:2;34018:9;34014:18;34006:26;;34078:9;34072:4;34068:20;34064:1;34053:9;34049:17;34042:47;34106:131;34232:4;34106:131;:::i;:::-;34098:139;;33825:419;;;:::o;34250:169::-;34390:21;34386:1;34378:6;34374:14;34367:45;34250:169;:::o;34425:366::-;34567:3;34588:67;34652:2;34647:3;34588:67;:::i;:::-;34581:74;;34664:93;34753:3;34664:93;:::i;:::-;34782:2;34777:3;34773:12;34766:19;;34425:366;;;:::o;34797:419::-;34963:4;35001:2;34990:9;34986:18;34978:26;;35050:9;35044:4;35040:20;35036:1;35025:9;35021:17;35014:47;35078:131;35204:4;35078:131;:::i;:::-;35070:139;;34797:419;;;:::o;35222:241::-;35362:34;35358:1;35350:6;35346:14;35339:58;35431:24;35426:2;35418:6;35414:15;35407:49;35222:241;:::o;35469:366::-;35611:3;35632:67;35696:2;35691:3;35632:67;:::i;:::-;35625:74;;35708:93;35797:3;35708:93;:::i;:::-;35826:2;35821:3;35817:12;35810:19;;35469:366;;;:::o;35841:419::-;36007:4;36045:2;36034:9;36030:18;36022:26;;36094:9;36088:4;36084:20;36080:1;36069:9;36065:17;36058:47;36122:131;36248:4;36122:131;:::i;:::-;36114:139;;35841:419;;;:::o;36266:194::-;36306:4;36326:20;36344:1;36326:20;:::i;:::-;36321:25;;36360:20;36378:1;36360:20;:::i;:::-;36355:25;;36404:1;36401;36397:9;36389:17;;36428:1;36422:4;36419:11;36416:37;;;36433:18;;:::i;:::-;36416:37;36266:194;;;;:::o;36466:179::-;36606:31;36602:1;36594:6;36590:14;36583:55;36466:179;:::o;36651:366::-;36793:3;36814:67;36878:2;36873:3;36814:67;:::i;:::-;36807:74;;36890:93;36979:3;36890:93;:::i;:::-;37008:2;37003:3;36999:12;36992:19;;36651:366;;;:::o;37023:419::-;37189:4;37227:2;37216:9;37212:18;37204:26;;37276:9;37270:4;37266:20;37262:1;37251:9;37247:17;37240:47;37304:131;37430:4;37304:131;:::i;:::-;37296:139;;37023:419;;;:::o;37448:177::-;37588:29;37584:1;37576:6;37572:14;37565:53;37448:177;:::o;37631:366::-;37773:3;37794:67;37858:2;37853:3;37794:67;:::i;:::-;37787:74;;37870:93;37959:3;37870:93;:::i;:::-;37988:2;37983:3;37979:12;37972:19;;37631:366;;;:::o;38003:419::-;38169:4;38207:2;38196:9;38192:18;38184:26;;38256:9;38250:4;38246:20;38242:1;38231:9;38227:17;38220:47;38284:131;38410:4;38284:131;:::i;:::-;38276:139;;38003:419;;;:::o;38428:182::-;38568:34;38564:1;38556:6;38552:14;38545:58;38428:182;:::o;38616:366::-;38758:3;38779:67;38843:2;38838:3;38779:67;:::i;:::-;38772:74;;38855:93;38944:3;38855:93;:::i;:::-;38973:2;38968:3;38964:12;38957:19;;38616:366;;;:::o;38988:419::-;39154:4;39192:2;39181:9;39177:18;39169:26;;39241:9;39235:4;39231:20;39227:1;39216:9;39212:17;39205:47;39269:131;39395:4;39269:131;:::i;:::-;39261:139;;38988:419;;;:::o;39413:180::-;39461:77;39458:1;39451:88;39558:4;39555:1;39548:15;39582:4;39579:1;39572:15;39599:180;39647:77;39644:1;39637:88;39744:4;39741:1;39734:15;39768:4;39765:1;39758:15;39785:143;39842:5;39873:6;39867:13;39858:22;;39889:33;39916:5;39889:33;:::i;:::-;39785:143;;;;:::o;39934:351::-;40004:6;40053:2;40041:9;40032:7;40028:23;40024:32;40021:119;;;40059:79;;:::i;:::-;40021:119;40179:1;40204:64;40260:7;40251:6;40240:9;40236:22;40204:64;:::i;:::-;40194:74;;40150:128;39934:351;;;;:::o;40291:85::-;40336:7;40365:5;40354:16;;40291:85;;;:::o;40382:158::-;40440:9;40473:61;40491:42;40500:32;40526:5;40500:32;:::i;:::-;40491:42;:::i;:::-;40473:61;:::i;:::-;40460:74;;40382:158;;;:::o;40546:147::-;40641:45;40680:5;40641:45;:::i;:::-;40636:3;40629:58;40546:147;;:::o;40699:114::-;40766:6;40800:5;40794:12;40784:22;;40699:114;;;:::o;40819:184::-;40918:11;40952:6;40947:3;40940:19;40992:4;40987:3;40983:14;40968:29;;40819:184;;;;:::o;41009:132::-;41076:4;41099:3;41091:11;;41129:4;41124:3;41120:14;41112:22;;41009:132;;;:::o;41147:108::-;41224:24;41242:5;41224:24;:::i;:::-;41219:3;41212:37;41147:108;;:::o;41261:179::-;41330:10;41351:46;41393:3;41385:6;41351:46;:::i;:::-;41429:4;41424:3;41420:14;41406:28;;41261:179;;;;:::o;41446:113::-;41516:4;41548;41543:3;41539:14;41531:22;;41446:113;;;:::o;41595:732::-;41714:3;41743:54;41791:5;41743:54;:::i;:::-;41813:86;41892:6;41887:3;41813:86;:::i;:::-;41806:93;;41923:56;41973:5;41923:56;:::i;:::-;42002:7;42033:1;42018:284;42043:6;42040:1;42037:13;42018:284;;;42119:6;42113:13;42146:63;42205:3;42190:13;42146:63;:::i;:::-;42139:70;;42232:60;42285:6;42232:60;:::i;:::-;42222:70;;42078:224;42065:1;42062;42058:9;42053:14;;42018:284;;;42022:14;42318:3;42311:10;;41719:608;;;41595:732;;;;:::o;42333:831::-;42596:4;42634:3;42623:9;42619:19;42611:27;;42648:71;42716:1;42705:9;42701:17;42692:6;42648:71;:::i;:::-;42729:80;42805:2;42794:9;42790:18;42781:6;42729:80;:::i;:::-;42856:9;42850:4;42846:20;42841:2;42830:9;42826:18;42819:48;42884:108;42987:4;42978:6;42884:108;:::i;:::-;42876:116;;43002:72;43070:2;43059:9;43055:18;43046:6;43002:72;:::i;:::-;43084:73;43152:3;43141:9;43137:19;43128:6;43084:73;:::i;:::-;42333:831;;;;;;;;:::o

Swarm Source

ipfs://8500060783f938c4e103a65a222c8c37fb98b0258fb51d521a06e6d49300fbfe

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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