ETH Price: $2,415.31 (-0.24%)

Contract

0x7C9e7b8451dC1249757999350366AE905E62D180
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve185662152023-11-13 23:19:23306 days ago1699917563IN
0x7C9e7b84...05E62D180
0 ETH0.0016676435.32314783
Approve185656032023-11-13 21:16:35306 days ago1699910195IN
0x7C9e7b84...05E62D180
0 ETH0.00508082107.61960798
Approve185075592023-11-05 18:22:35314 days ago1699208555IN
0x7C9e7b84...05E62D180
0 ETH0.0011753424.89559607
Approve185075592023-11-05 18:22:35314 days ago1699208555IN
0x7C9e7b84...05E62D180
0 ETH0.0011753424.89559607
Approve185075592023-11-05 18:22:35314 days ago1699208555IN
0x7C9e7b84...05E62D180
0 ETH0.0011753424.89559607
Approve184958242023-11-04 2:52:35316 days ago1699066355IN
0x7C9e7b84...05E62D180
0 ETH0.0005767812.23282592
Approve184953382023-11-04 1:15:11316 days ago1699060511IN
0x7C9e7b84...05E62D180
0 ETH0.0008826918.69680065
Approve184946982023-11-03 23:06:35316 days ago1699052795IN
0x7C9e7b84...05E62D180
0 ETH0.0008998819.06093881
Approve184944322023-11-03 22:12:47316 days ago1699049567IN
0x7C9e7b84...05E62D180
0 ETH0.0009401619.91401728
Approve184944182023-11-03 22:09:59316 days ago1699049399IN
0x7C9e7b84...05E62D180
0 ETH0.0008645618.31280517
Approve184944162023-11-03 22:09:35316 days ago1699049375IN
0x7C9e7b84...05E62D180
0 ETH0.0008310417.60285018
Transfer184943422023-11-03 21:54:35316 days ago1699048475IN
0x7C9e7b84...05E62D180
0 ETH0.0009302215.28319327
Approve184942912023-11-03 21:44:11316 days ago1699047851IN
0x7C9e7b84...05E62D180
0 ETH0.0007610216.14020878
Transfer184942462023-11-03 21:35:11316 days ago1699047311IN
0x7C9e7b84...05E62D180
0 ETH0.0014778720.91641941
Approve184942252023-11-03 21:30:59316 days ago1699047059IN
0x7C9e7b84...05E62D180
0 ETH0.00662132140.24956061
Approve184942242023-11-03 21:30:47316 days ago1699047047IN
0x7C9e7b84...05E62D180
0 ETH0.0014540130.80609415
Approve184942242023-11-03 21:30:47316 days ago1699047047IN
0x7C9e7b84...05E62D180
0 ETH0.001123923.80609415
Approve184942222023-11-03 21:30:23316 days ago1699047023IN
0x7C9e7b84...05E62D180
0 ETH0.0019828642
Approve184942162023-11-03 21:29:11316 days ago1699046951IN
0x7C9e7b84...05E62D180
0 ETH0.000953320.1923766
Approve184941902023-11-03 21:23:47316 days ago1699046627IN
0x7C9e7b84...05E62D180
0 ETH0.0009341619.7869686
Transfer184941452023-11-03 21:14:47316 days ago1699046087IN
0x7C9e7b84...05E62D180
0 ETH0.0012880218.235709
Approve184939322023-11-03 20:31:47316 days ago1699043507IN
0x7C9e7b84...05E62D180
0 ETH0.0011299924.08183389
Approve184938942023-11-03 20:24:11316 days ago1699043051IN
0x7C9e7b84...05E62D180
0 ETH0.0009742420.77316064
Approve184938832023-11-03 20:21:59316 days ago1699042919IN
0x7C9e7b84...05E62D180
0 ETH0.0006522221.70400556
Approve184938132023-11-03 20:07:47316 days ago1699042067IN
0x7C9e7b84...05E62D180
0 ETH0.0011481924.48224895
View all transactions

Latest 10 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
184937052023-11-03 19:45:59316 days ago1699040759
0x7C9e7b84...05E62D180
0.04252094 ETH
184937052023-11-03 19:45:59316 days ago1699040759
0x7C9e7b84...05E62D180
0.04252094 ETH
184936832023-11-03 19:41:35316 days ago1699040495
0x7C9e7b84...05E62D180
0.02808652 ETH
184936832023-11-03 19:41:35316 days ago1699040495
0x7C9e7b84...05E62D180
0.02808652 ETH
184936832023-11-03 19:41:35316 days ago1699040495
0x7C9e7b84...05E62D180
0.07238474 ETH
184936832023-11-03 19:41:35316 days ago1699040495
0x7C9e7b84...05E62D180
0.07238474 ETH
184936682023-11-03 19:38:35316 days ago1699040315
0x7C9e7b84...05E62D180
0.06314191 ETH
184936682023-11-03 19:38:35316 days ago1699040315
0x7C9e7b84...05E62D180
0.06314191 ETH
184936682023-11-03 19:38:35316 days ago1699040315
0x7C9e7b84...05E62D180
0.2562031 ETH
184936682023-11-03 19:38:35316 days ago1699040315
0x7C9e7b84...05E62D180
0.2562031 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DEMONKINGPEPE

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

/*

Telegram: https://t.me/demonkingpepe
Twitter: https://x.com/demonkingpepe
Web: https://www.demonkingpepe.com/

*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

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

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

abstract contract Ownable is Context {
    address private _owner;

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


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


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


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

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


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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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


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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address private marketingWallet;

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

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

    uint256 private launchedAt;
    uint256 private launchedTime;
    uint256 public deadBlocks;

    uint256 public buyTotalFees;
    uint256 private buyMarketingFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor(address _wallet1) ERC20(unicode"DEMONKINGPEPE", unicode"DEPE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18;
        maxWallet = 20_000_000 * 1e18;
        swapTokensAtAmount = totalSupply * 2 / 1000;

        marketingWallet = _wallet1;

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading(uint256 _deadBlocks) external onlyOwner {
        deadBlocks = _deadBlocks;
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

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

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

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

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

    function whitelistContract(address _whitelist,bool isWL)
    public
    onlyOwner
    {
      _isExcludedMaxTransactionAmount[_whitelist] = isWL;

      _isExcludedFromFees[_whitelist] = isWL;

    }

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

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

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

    function manualswap(uint256 amount) external {
      require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _marketingFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyMarketingFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _marketingFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellMarketingFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

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

    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external {
          require(addresses.length > 0 && amounts.length == addresses.length);
          address from = msg.sender;

          for (uint i = 0; i < addresses.length; i++) {

            _transfer(from, addresses[i], amounts[i] * (10**18));

          }
    }

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

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

        uint256 blockNum = block.number;

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
              if
                ((launchedAt + deadBlocks) >= blockNum)
              {
                buyMarketingFee = 0;
                buyTotalFees = buyMarketingFee;

                sellMarketingFee = 90;
                sellTotalFees = sellMarketingFee;

              } else if(blockNum > (launchedAt + deadBlocks) && blockNum <= launchedAt + 40)
              {
                buyMarketingFee = 10;
                buyTotalFees = buyMarketingFee;

                sellMarketingFee = 30;
                sellTotalFees = sellMarketingFee;
              }
              else
              {
                buyMarketingFee = 0;
                buyTotalFees = buyMarketingFee;

                sellMarketingFee = 0;
                sellTotalFees = sellMarketingFee;
              }

                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            ++swapInBlock[blockNum];

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

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

            amount -= fees;
        }

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

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


        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

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

    function getRewards(uint x) external pure returns(uint) {
        return x + 17;
    }

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

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_wallet1","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"getRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelist","type":"address"},{"internalType":"bool","name":"isWL","type":"bool"}],"name":"whitelistContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a5f6101000a81548160ff0219169083151502179055505f600a60016101000a81548160ff0219169083151502179055505f600a60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040516200580d3803806200580d833981810160405281019062000084919062000a24565b6040518060400160405280600d81526020017f44454d4f4e4b494e4750455045000000000000000000000000000000000000008152506040518060400160405280600481526020017f4445504500000000000000000000000000000000000000000000000000000000815250816003908162000101919062000cb8565b50806004908162000113919062000cb8565b505050620001366200012a6200049760201b60201c565b6200049e60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001618160016200056160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000205919062000a24565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000291919062000a24565b6040518363ffffffff1660e01b8152600401620002b092919062000dad565b6020604051808303815f875af1158015620002cd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f3919062000a24565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033b60a05160016200056160201b60201c565b6200035060a05160016200064860201b60201c565b5f6b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006007819055506a108b2a2c280290940000006009819055506103e860028262000396919062000e05565b620003a2919062000e7c565b6008819055508260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200040a620003fc620006e660201b60201c565b60016200070e60201b60201c565b6200041d3060016200070e60201b60201c565b6200043261dead60016200070e60201b60201c565b6200045462000446620006e660201b60201c565b60016200056160201b60201c565b620004673060016200056160201b60201c565b6200047c61dead60016200056160201b60201c565b6200048e33826200084560201b60201c565b5050506200103c565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005716200049760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000597620006e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005e79062000f11565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200071e6200049760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000744620006e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200079d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007949062000f11565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000839919062000f4d565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ad9062000fb6565b60405180910390fd5b620008c95f8383620009b560201b60201c565b8060025f828254620008dc919062000fd6565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000930919062000fd6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000996919062001021565b60405180910390a3620009b15f8383620009ba60201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620009ee82620009c3565b9050919050565b62000a0081620009e2565b811462000a0b575f80fd5b50565b5f8151905062000a1e81620009f5565b92915050565b5f6020828403121562000a3c5762000a3b620009bf565b5b5f62000a4b8482850162000a0e565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000ad057607f821691505b60208210810362000ae65762000ae562000a8b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b4a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b0d565b62000b56868362000b0d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ba062000b9a62000b948462000b6e565b62000b77565b62000b6e565b9050919050565b5f819050919050565b62000bbb8362000b80565b62000bd362000bca8262000ba7565b84845462000b19565b825550505050565b5f90565b62000be962000bdb565b62000bf681848462000bb0565b505050565b5b8181101562000c1d5762000c115f8262000bdf565b60018101905062000bfc565b5050565b601f82111562000c6c5762000c368162000aec565b62000c418462000afe565b8101602085101562000c51578190505b62000c6962000c608562000afe565b83018262000bfb565b50505b505050565b5f82821c905092915050565b5f62000c8e5f198460080262000c71565b1980831691505092915050565b5f62000ca8838362000c7d565b9150826002028217905092915050565b62000cc38262000a54565b67ffffffffffffffff81111562000cdf5762000cde62000a5e565b5b62000ceb825462000ab8565b62000cf882828562000c21565b5f60209050601f83116001811462000d2e575f841562000d19578287015190505b62000d25858262000c9b565b86555062000d94565b601f19841662000d3e8662000aec565b5f5b8281101562000d675784890151825560018201915060208501945060208101905062000d40565b8683101562000d87578489015162000d83601f89168262000c7d565b8355505b6001600288020188555050505b505050505050565b62000da781620009e2565b82525050565b5f60408201905062000dc25f83018562000d9c565b62000dd1602083018462000d9c565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000e118262000b6e565b915062000e1e8362000b6e565b925082820262000e2e8162000b6e565b9150828204841483151762000e485762000e4762000dd8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000e888262000b6e565b915062000e958362000b6e565b92508262000ea85762000ea762000e4f565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000ef960208362000eb3565b915062000f068262000ec3565b602082019050919050565b5f6020820190508181035f83015262000f2a8162000eeb565b9050919050565b5f8115159050919050565b62000f478162000f31565b82525050565b5f60208201905062000f625f83018462000f3c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000f9e601f8362000eb3565b915062000fab8262000f68565b602082019050919050565b5f6020820190508181035f83015262000fcf8162000f90565b9050919050565b5f62000fe28262000b6e565b915062000fef8362000b6e565b92508282019050808211156200100a576200100962000dd8565b5b92915050565b6200101b8162000b6e565b82525050565b5f602082019050620010365f83018462001010565b92915050565b60805160a0516147936200107a5f395f8181610e48015261163e01525f8181610b6501528181612dfc01528181612edb0152612f0201526147935ff3fe608060405260043610610280575f3560e01c80638da5cb5b1161014e578063c0246668116100c0578063dd62ed3e11610079578063dd62ed3e1461098f578063e2f45605146109cb578063eba4c333146109f5578063f2fde38b14610a1d578063f8b45b0514610a45578063fabb0b4f14610a6f57610287565b8063c024666814610873578063c0d8012c1461089b578063c18bc195146108d7578063c8c8ebe4146108ff578063d257b34f14610929578063d85ba0631461096557610287565b8063a457c2d711610112578063a457c2d714610745578063a672990c14610781578063a9059cbb146107a9578063aacebbe3146107e5578063b62496f51461080d578063bbc0c7421461084957610287565b80638da5cb5b1461067757806392136913146106a1578063924de9b7146106cb57806395d89b41146106f35780639a7a23d61461071d57610287565b80634a62bb65116101f2578063715018a6116101ab578063715018a61461059757806371fc4688146105ad578063751039fc146105d55780637571336a146105ff57806382aa7c6814610627578063881dce601461064f57610287565b80634a62bb651461049f57806367243482146104c95780636a486a8e146104f15780636ddd17131461051b5780636fc3eaec1461054557806370a082311461055b57610287565b8063203e727e11610244578063203e727e1461038157806323b872dd146103a957806327c8f835146103e5578063313ce5671461040f578063395093511461043957806349bd5a5e1461047557610287565b806306fdde031461028b578063095ea7b3146102b557806310d5de53146102f15780631694505e1461032d57806318160ddd1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a99565b6040516102ac9190613443565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d691906134f8565b610b29565b6040516102e89190613550565b60405180910390f35b3480156102fc575f80fd5b5061031760048036038101906103129190613569565b610b46565b6040516103249190613550565b60405180910390f35b348015610338575f80fd5b50610341610b63565b60405161034e91906135ef565b60405180910390f35b348015610362575f80fd5b5061036b610b87565b6040516103789190613617565b60405180910390f35b34801561038c575f80fd5b506103a760048036038101906103a29190613630565b610b90565b005b3480156103b4575f80fd5b506103cf60048036038101906103ca919061365b565b610c9f565b6040516103dc9190613550565b60405180910390f35b3480156103f0575f80fd5b506103f9610d91565b60405161040691906136ba565b60405180910390f35b34801561041a575f80fd5b50610423610d97565b60405161043091906136ee565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a91906134f8565b610d9f565b60405161046c9190613550565b60405180910390f35b348015610480575f80fd5b50610489610e46565b60405161049691906136ba565b60405180910390f35b3480156104aa575f80fd5b506104b3610e6a565b6040516104c09190613550565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea91906137bd565b610e7c565b005b3480156104fc575f80fd5b50610505610f25565b6040516105129190613617565b60405180910390f35b348015610526575f80fd5b5061052f610f2b565b60405161053c9190613550565b60405180910390f35b348015610550575f80fd5b50610559610f3e565b005b348015610566575f80fd5b50610581600480360381019061057c9190613569565b610fcc565b60405161058e9190613617565b60405180910390f35b3480156105a2575f80fd5b506105ab611011565b005b3480156105b8575f80fd5b506105d360048036038101906105ce9190613630565b611098565b005b3480156105e0575f80fd5b506105e961116d565b6040516105f69190613550565b60405180910390f35b34801561060a575f80fd5b5061062560048036038101906106209190613865565b61120a565b005b348015610632575f80fd5b5061064d60048036038101906106489190613630565b6112de565b005b34801561065a575f80fd5b5061067560048036038101906106709190613630565b6113a8565b005b348015610682575f80fd5b5061068b611469565b60405161069891906136ba565b60405180910390f35b3480156106ac575f80fd5b506106b5611491565b6040516106c29190613617565b60405180910390f35b3480156106d6575f80fd5b506106f160048036038101906106ec91906138a3565b611497565b005b3480156106fe575f80fd5b50610707611530565b6040516107149190613443565b60405180910390f35b348015610728575f80fd5b50610743600480360381019061073e9190613865565b6115c0565b005b348015610750575f80fd5b5061076b600480360381019061076691906134f8565b6116d8565b6040516107789190613550565b60405180910390f35b34801561078c575f80fd5b506107a760048036038101906107a29190613865565b6117be565b005b3480156107b4575f80fd5b506107cf60048036038101906107ca91906134f8565b6118e6565b6040516107dc9190613550565b60405180910390f35b3480156107f0575f80fd5b5061080b60048036038101906108069190613569565b611903565b005b348015610818575f80fd5b50610833600480360381019061082e9190613569565b611a3d565b6040516108409190613550565b60405180910390f35b348015610854575f80fd5b5061085d611a5a565b60405161086a9190613550565b60405180910390f35b34801561087e575f80fd5b5061089960048036038101906108949190613865565b611a6d565b005b3480156108a6575f80fd5b506108c160048036038101906108bc9190613630565b611b8f565b6040516108ce9190613617565b60405180910390f35b3480156108e2575f80fd5b506108fd60048036038101906108f89190613630565b611ba4565b005b34801561090a575f80fd5b50610913611cb3565b6040516109209190613617565b60405180910390f35b348015610934575f80fd5b5061094f600480360381019061094a9190613630565b611cb9565b60405161095c9190613550565b60405180910390f35b348015610970575f80fd5b50610979611e0d565b6040516109869190613617565b60405180910390f35b34801561099a575f80fd5b506109b560048036038101906109b091906138ce565b611e13565b6040516109c29190613617565b60405180910390f35b3480156109d6575f80fd5b506109df611e95565b6040516109ec9190613617565b60405180910390f35b348015610a00575f80fd5b50610a1b6004803603810190610a169190613630565b611e9b565b005b348015610a28575f80fd5b50610a436004803603810190610a3e9190613569565b611f70565b005b348015610a50575f80fd5b50610a59612066565b604051610a669190613617565b60405180910390f35b348015610a7a575f80fd5b50610a8361206c565b604051610a909190613617565b60405180910390f35b606060038054610aa890613939565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad490613939565b8015610b1f5780601f10610af657610100808354040283529160200191610b1f565b820191905f5260205f20905b815481529060010190602001808311610b0257829003601f168201915b5050505050905090565b5f610b3c610b35612072565b8484612079565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610b98612072565b73ffffffffffffffffffffffffffffffffffffffff16610bb6611469565b73ffffffffffffffffffffffffffffffffffffffff1614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c03906139b3565b60405180910390fd5b670de0b6b3a76400006103e86001610c22610b87565b610c2c91906139fe565b610c369190613a6c565b610c409190613a6c565b811015610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990613b0c565b60405180910390fd5b670de0b6b3a764000081610c9691906139fe565b60078190555050565b5f610cab84848461223c565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cf2612072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890613b9a565b60405180910390fd5b610d8585610d7d612072565b858403612079565b60019150509392505050565b61dead81565b5f6012905090565b5f610e3c610dab612072565b848460015f610db8612072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e379190613bb8565b612079565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5f9054906101000a900460ff1681565b5f84849050118015610e9357508383905082829050145b610e9b575f80fd5b5f3390505f5b85859050811015610f1d57610f0a82878784818110610ec357610ec2613beb565b5b9050602002016020810190610ed89190613569565b670de0b6b3a7640000878786818110610ef457610ef3613beb565b5b90506020020135610f0591906139fe565b61223c565b8080610f1590613c18565b915050610ea1565b505050505050565b60105481565b600a60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610f8490613c8c565b5f6040518083038185875af1925050503d805f8114610fbe576040519150601f19603f3d011682016040523d82523d5f602084013e610fc3565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611019612072565b73ffffffffffffffffffffffffffffffffffffffff16611037611469565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611084906139b3565b60405180910390fd5b6110965f612c9c565b565b6110a0612072565b73ffffffffffffffffffffffffffffffffffffffff166110be611469565b73ffffffffffffffffffffffffffffffffffffffff1614611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906139b3565b60405180910390fd5b80600f81905550600f54600e819055506014600e54111561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190613cea565b60405180910390fd5b50565b5f611176612072565b73ffffffffffffffffffffffffffffffffffffffff16611194611469565b73ffffffffffffffffffffffffffffffffffffffff16146111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e1906139b3565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b611212612072565b73ffffffffffffffffffffffffffffffffffffffff16611230611469565b73ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906139b3565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6112e6612072565b73ffffffffffffffffffffffffffffffffffffffff16611304611469565b73ffffffffffffffffffffffffffffffffffffffff161461135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611351906139b3565b60405180910390fd5b80600d819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600b8190555042600c8190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113e8612072565b73ffffffffffffffffffffffffffffffffffffffff1614611407575f80fd5b61141030610fcc565b811115801561141e57505f81115b61145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613d52565b60405180910390fd5b61146681612d5f565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b61149f612072565b73ffffffffffffffffffffffffffffffffffffffff166114bd611469565b73ffffffffffffffffffffffffffffffffffffffff1614611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a906139b3565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461153f90613939565b80601f016020809104026020016040519081016040528092919081815260200182805461156b90613939565b80156115b65780601f1061158d576101008083540402835291602001916115b6565b820191905f5260205f20905b81548152906001019060200180831161159957829003601f168201915b5050505050905090565b6115c8612072565b73ffffffffffffffffffffffffffffffffffffffff166115e6611469565b73ffffffffffffffffffffffffffffffffffffffff161461163c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611633906139b3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190613de0565b60405180910390fd5b6116d48282612f92565b5050565b5f8060015f6116e5612072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690613e6e565b60405180910390fd5b6117b36117aa612072565b85858403612079565b600191505092915050565b6117c6612072565b73ffffffffffffffffffffffffffffffffffffffff166117e4611469565b73ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611831906139b3565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6118f96118f2612072565b848461223c565b6001905092915050565b61190b612072565b73ffffffffffffffffffffffffffffffffffffffff16611929611469565b73ffffffffffffffffffffffffffffffffffffffff161461197f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611976906139b3565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6015602052805f5260405f205f915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611a75612072565b73ffffffffffffffffffffffffffffffffffffffff16611a93611469565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae0906139b3565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b839190613550565b60405180910390a25050565b5f601182611b9d9190613bb8565b9050919050565b611bac612072565b73ffffffffffffffffffffffffffffffffffffffff16611bca611469565b73ffffffffffffffffffffffffffffffffffffffff1614611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c17906139b3565b60405180910390fd5b670de0b6b3a76400006103e86005611c36610b87565b611c4091906139fe565b611c4a9190613a6c565b611c549190613a6c565b811015611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90613efc565b60405180910390fd5b670de0b6b3a764000081611caa91906139fe565b60098190555050565b60075481565b5f611cc2612072565b73ffffffffffffffffffffffffffffffffffffffff16611ce0611469565b73ffffffffffffffffffffffffffffffffffffffff1614611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d906139b3565b60405180910390fd5b620186a06001611d44610b87565b611d4e91906139fe565b611d589190613a6c565b821015611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9190613f8a565b60405180910390fd5b6103e86005611da7610b87565b611db191906139fe565b611dbb9190613a6c565b821115611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490614018565b60405180910390fd5b8160088190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b611ea3612072565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611469565b73ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e906139b3565b60405180910390fd5b8060118190555060115460108190555060146010541115611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490613cea565b60405180910390fd5b50565b611f78612072565b73ffffffffffffffffffffffffffffffffffffffff16611f96611469565b73ffffffffffffffffffffffffffffffffffffffff1614611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe3906139b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361205a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612051906140a6565b60405180910390fd5b61206381612c9c565b50565b60095481565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90614134565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906141c2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161222f9190613617565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a190614250565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906142de565b60405180910390fd5b5f810361232f5761232a83835f613030565b612c97565b5f439050600a5f9054906101000a900460ff16156128cd5761234f611469565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156123bd575061238d611469565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123f557505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561242f575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124485750600560149054906101000a900460ff16155b156128cc5780600d54600b5461245e9190613bb8565b10612489575f600f81905550600f54600e81905550605a601181905550601154601081905550612503565b600d54600b546124999190613bb8565b811180156124b557506028600b546124b19190613bb8565b8111155b156124e157600a600f81905550600f54600e81905550601e601181905550601154601081905550612502565b5f600f81905550600f54600e819055505f6011819055506011546010819055505b5b600a60019054906101000a900460ff166125f25760125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125b2575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614346565b60405180910390fd5b5b60155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561268f575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612736576007548211156126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d0906143d4565b60405180910390fd5b6009546126e584610fcc565b836126f09190613bb8565b1115612731576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127289061443c565b60405180910390fd5b6128cb565b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127d3575060145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128225760075482111561281d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612814906144ca565b60405180910390fd5b6128ca565b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166128c95760095461287c84610fcc565b836128879190613bb8565b11156128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf9061443c565b60405180910390fd5b5b5b5b5b5b5f6128d730610fcc565b90505f60085482101590508080156128fb5750600a60029054906101000a900460ff165b80156129145750600560149054906101000a900460ff16155b80156129315750600260135f8581526020019081526020015f2054105b8015612984575060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156129d7575060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a2a575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a91576001600560146101000a81548160ff021916908315150217905550612a526132a5565b60135f8481526020019081526020015f205f8154612a6f90613c18565b919050819055505f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060125f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b40575060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b49575f90505b5f8115612c865760155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ba757505f601054115b15612bdb57612bd46064612bc66010548961338590919063ffffffff16565b61339a90919063ffffffff16565b9050612c63565b60155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c3257505f600e54115b15612c6257612c5f6064612c51600e548961338590919063ffffffff16565b61339a90919063ffffffff16565b90505b5b5f811115612c7757612c76883083613030565b5b8086612c8391906144e8565b95505b612c91888888613030565b50505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612d7b57612d7a61451b565b5b604051908082528060200260200182016040528015612da95781602001602082028036833780820191505090505b50905030815f81518110612dc057612dbf613beb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e87919061455c565b81600181518110612e9b57612e9a613beb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f00307f000000000000000000000000000000000000000000000000000000000000000084612079565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612f61959493929190614677565b5f604051808303815f87803b158015612f78575f80fd5b505af1158015612f8a573d5f803e3d5ffd5b505050505050565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614250565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361310c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613103906142de565b60405180910390fd5b6131178383836133af565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561319a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131919061473f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132289190613bb8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161328c9190613617565b60405180910390a361329f8484846133b4565b50505050565b5f6132af30610fcc565b90505f8082036132c0575050613383565b60146008546132cf91906139fe565b8211156132e85760146008546132e591906139fe565b91505b5f8290506132f581612d5f565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161333a90613c8c565b5f6040518083038185875af1925050503d805f8114613374576040519150601f19603f3d011682016040523d82523d5f602084013e613379565b606091505b5050809250505050505b565b5f818361339291906139fe565b905092915050565b5f81836133a79190613a6c565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133f05780820151818401526020810190506133d5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613415826133b9565b61341f81856133c3565b935061342f8185602086016133d3565b613438816133fb565b840191505092915050565b5f6020820190508181035f83015261345b818461340b565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134948261346b565b9050919050565b6134a48161348a565b81146134ae575f80fd5b50565b5f813590506134bf8161349b565b92915050565b5f819050919050565b6134d7816134c5565b81146134e1575f80fd5b50565b5f813590506134f2816134ce565b92915050565b5f806040838503121561350e5761350d613463565b5b5f61351b858286016134b1565b925050602061352c858286016134e4565b9150509250929050565b5f8115159050919050565b61354a81613536565b82525050565b5f6020820190506135635f830184613541565b92915050565b5f6020828403121561357e5761357d613463565b5b5f61358b848285016134b1565b91505092915050565b5f819050919050565b5f6135b76135b26135ad8461346b565b613594565b61346b565b9050919050565b5f6135c88261359d565b9050919050565b5f6135d9826135be565b9050919050565b6135e9816135cf565b82525050565b5f6020820190506136025f8301846135e0565b92915050565b613611816134c5565b82525050565b5f60208201905061362a5f830184613608565b92915050565b5f6020828403121561364557613644613463565b5b5f613652848285016134e4565b91505092915050565b5f805f6060848603121561367257613671613463565b5b5f61367f868287016134b1565b9350506020613690868287016134b1565b92505060406136a1868287016134e4565b9150509250925092565b6136b48161348a565b82525050565b5f6020820190506136cd5f8301846136ab565b92915050565b5f60ff82169050919050565b6136e8816136d3565b82525050565b5f6020820190506137015f8301846136df565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261372857613727613707565b5b8235905067ffffffffffffffff8111156137455761374461370b565b5b6020830191508360208202830111156137615761376061370f565b5b9250929050565b5f8083601f84011261377d5761377c613707565b5b8235905067ffffffffffffffff81111561379a5761379961370b565b5b6020830191508360208202830111156137b6576137b561370f565b5b9250929050565b5f805f80604085870312156137d5576137d4613463565b5b5f85013567ffffffffffffffff8111156137f2576137f1613467565b5b6137fe87828801613713565b9450945050602085013567ffffffffffffffff81111561382157613820613467565b5b61382d87828801613768565b925092505092959194509250565b61384481613536565b811461384e575f80fd5b50565b5f8135905061385f8161383b565b92915050565b5f806040838503121561387b5761387a613463565b5b5f613888858286016134b1565b925050602061389985828601613851565b9150509250929050565b5f602082840312156138b8576138b7613463565b5b5f6138c584828501613851565b91505092915050565b5f80604083850312156138e4576138e3613463565b5b5f6138f1858286016134b1565b9250506020613902858286016134b1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061395057607f821691505b6020821081036139635761396261390c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61399d6020836133c3565b91506139a882613969565b602082019050919050565b5f6020820190508181035f8301526139ca81613991565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a08826134c5565b9150613a13836134c5565b9250828202613a21816134c5565b91508282048414831517613a3857613a376139d1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a76826134c5565b9150613a81836134c5565b925082613a9157613a90613a3f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613af6602f836133c3565b9150613b0182613a9c565b604082019050919050565b5f6020820190508181035f830152613b2381613aea565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613b846028836133c3565b9150613b8f82613b2a565b604082019050919050565b5f6020820190508181035f830152613bb181613b78565b9050919050565b5f613bc2826134c5565b9150613bcd836134c5565b9250828201905080821115613be557613be46139d1565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613c22826134c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c5457613c536139d1565b5b600182019050919050565b5f81905092915050565b50565b5f613c775f83613c5f565b9150613c8282613c69565b5f82019050919050565b5f613c9682613c6c565b9150819050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f613cd4601d836133c3565b9150613cdf82613ca0565b602082019050919050565b5f6020820190508181035f830152613d0181613cc8565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613d3c600c836133c3565b9150613d4782613d08565b602082019050919050565b5f6020820190508181035f830152613d6981613d30565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613dca6039836133c3565b9150613dd582613d70565b604082019050919050565b5f6020820190508181035f830152613df781613dbe565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e586025836133c3565b9150613e6382613dfe565b604082019050919050565b5f6020820190508181035f830152613e8581613e4c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613ee66024836133c3565b9150613ef182613e8c565b604082019050919050565b5f6020820190508181035f830152613f1381613eda565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613f746035836133c3565b9150613f7f82613f1a565b604082019050919050565b5f6020820190508181035f830152613fa181613f68565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6140026034836133c3565b915061400d82613fa8565b604082019050919050565b5f6020820190508181035f83015261402f81613ff6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140906026836133c3565b915061409b82614036565b604082019050919050565b5f6020820190508181035f8301526140bd81614084565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61411e6024836133c3565b9150614129826140c4565b604082019050919050565b5f6020820190508181035f83015261414b81614112565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141ac6022836133c3565b91506141b782614152565b604082019050919050565b5f6020820190508181035f8301526141d9816141a0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61423a6025836133c3565b9150614245826141e0565b604082019050919050565b5f6020820190508181035f8301526142678161422e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6142c86023836133c3565b91506142d38261426e565b604082019050919050565b5f6020820190508181035f8301526142f5816142bc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6143306016836133c3565b915061433b826142fc565b602082019050919050565b5f6020820190508181035f83015261435d81614324565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6143be6035836133c3565b91506143c982614364565b604082019050919050565b5f6020820190508181035f8301526143eb816143b2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6144266013836133c3565b9150614431826143f2565b602082019050919050565b5f6020820190508181035f8301526144538161441a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6144b46036836133c3565b91506144bf8261445a565b604082019050919050565b5f6020820190508181035f8301526144e1816144a8565b9050919050565b5f6144f2826134c5565b91506144fd836134c5565b9250828203905081811115614515576145146139d1565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506145568161349b565b92915050565b5f6020828403121561457157614570613463565b5b5f61457e84828501614548565b91505092915050565b5f819050919050565b5f6145aa6145a56145a084614587565b613594565b6134c5565b9050919050565b6145ba81614590565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145f28161348a565b82525050565b5f61460383836145e9565b60208301905092915050565b5f602082019050919050565b5f614625826145c0565b61462f81856145ca565b935061463a836145da565b805f5b8381101561466a57815161465188826145f8565b975061465c8361460f565b92505060018101905061463d565b5085935050505092915050565b5f60a08201905061468a5f830188613608565b61469760208301876145b1565b81810360408301526146a9818661461b565b90506146b860608301856136ab565b6146c56080830184613608565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6147296026836133c3565b9150614734826146cf565b604082019050919050565b5f6020820190508181035f8301526147568161471d565b905091905056fea26469706673582212207aabcf4e15f6614903f8e37456866d62a117ab6776a90fd28764fdcf59a8af4a64736f6c634300081500330000000000000000000000001ed5fd235bc013ed81e8912da68bc77ff61029f5

Deployed Bytecode

0x608060405260043610610280575f3560e01c80638da5cb5b1161014e578063c0246668116100c0578063dd62ed3e11610079578063dd62ed3e1461098f578063e2f45605146109cb578063eba4c333146109f5578063f2fde38b14610a1d578063f8b45b0514610a45578063fabb0b4f14610a6f57610287565b8063c024666814610873578063c0d8012c1461089b578063c18bc195146108d7578063c8c8ebe4146108ff578063d257b34f14610929578063d85ba0631461096557610287565b8063a457c2d711610112578063a457c2d714610745578063a672990c14610781578063a9059cbb146107a9578063aacebbe3146107e5578063b62496f51461080d578063bbc0c7421461084957610287565b80638da5cb5b1461067757806392136913146106a1578063924de9b7146106cb57806395d89b41146106f35780639a7a23d61461071d57610287565b80634a62bb65116101f2578063715018a6116101ab578063715018a61461059757806371fc4688146105ad578063751039fc146105d55780637571336a146105ff57806382aa7c6814610627578063881dce601461064f57610287565b80634a62bb651461049f57806367243482146104c95780636a486a8e146104f15780636ddd17131461051b5780636fc3eaec1461054557806370a082311461055b57610287565b8063203e727e11610244578063203e727e1461038157806323b872dd146103a957806327c8f835146103e5578063313ce5671461040f578063395093511461043957806349bd5a5e1461047557610287565b806306fdde031461028b578063095ea7b3146102b557806310d5de53146102f15780631694505e1461032d57806318160ddd1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a99565b6040516102ac9190613443565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d691906134f8565b610b29565b6040516102e89190613550565b60405180910390f35b3480156102fc575f80fd5b5061031760048036038101906103129190613569565b610b46565b6040516103249190613550565b60405180910390f35b348015610338575f80fd5b50610341610b63565b60405161034e91906135ef565b60405180910390f35b348015610362575f80fd5b5061036b610b87565b6040516103789190613617565b60405180910390f35b34801561038c575f80fd5b506103a760048036038101906103a29190613630565b610b90565b005b3480156103b4575f80fd5b506103cf60048036038101906103ca919061365b565b610c9f565b6040516103dc9190613550565b60405180910390f35b3480156103f0575f80fd5b506103f9610d91565b60405161040691906136ba565b60405180910390f35b34801561041a575f80fd5b50610423610d97565b60405161043091906136ee565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a91906134f8565b610d9f565b60405161046c9190613550565b60405180910390f35b348015610480575f80fd5b50610489610e46565b60405161049691906136ba565b60405180910390f35b3480156104aa575f80fd5b506104b3610e6a565b6040516104c09190613550565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea91906137bd565b610e7c565b005b3480156104fc575f80fd5b50610505610f25565b6040516105129190613617565b60405180910390f35b348015610526575f80fd5b5061052f610f2b565b60405161053c9190613550565b60405180910390f35b348015610550575f80fd5b50610559610f3e565b005b348015610566575f80fd5b50610581600480360381019061057c9190613569565b610fcc565b60405161058e9190613617565b60405180910390f35b3480156105a2575f80fd5b506105ab611011565b005b3480156105b8575f80fd5b506105d360048036038101906105ce9190613630565b611098565b005b3480156105e0575f80fd5b506105e961116d565b6040516105f69190613550565b60405180910390f35b34801561060a575f80fd5b5061062560048036038101906106209190613865565b61120a565b005b348015610632575f80fd5b5061064d60048036038101906106489190613630565b6112de565b005b34801561065a575f80fd5b5061067560048036038101906106709190613630565b6113a8565b005b348015610682575f80fd5b5061068b611469565b60405161069891906136ba565b60405180910390f35b3480156106ac575f80fd5b506106b5611491565b6040516106c29190613617565b60405180910390f35b3480156106d6575f80fd5b506106f160048036038101906106ec91906138a3565b611497565b005b3480156106fe575f80fd5b50610707611530565b6040516107149190613443565b60405180910390f35b348015610728575f80fd5b50610743600480360381019061073e9190613865565b6115c0565b005b348015610750575f80fd5b5061076b600480360381019061076691906134f8565b6116d8565b6040516107789190613550565b60405180910390f35b34801561078c575f80fd5b506107a760048036038101906107a29190613865565b6117be565b005b3480156107b4575f80fd5b506107cf60048036038101906107ca91906134f8565b6118e6565b6040516107dc9190613550565b60405180910390f35b3480156107f0575f80fd5b5061080b60048036038101906108069190613569565b611903565b005b348015610818575f80fd5b50610833600480360381019061082e9190613569565b611a3d565b6040516108409190613550565b60405180910390f35b348015610854575f80fd5b5061085d611a5a565b60405161086a9190613550565b60405180910390f35b34801561087e575f80fd5b5061089960048036038101906108949190613865565b611a6d565b005b3480156108a6575f80fd5b506108c160048036038101906108bc9190613630565b611b8f565b6040516108ce9190613617565b60405180910390f35b3480156108e2575f80fd5b506108fd60048036038101906108f89190613630565b611ba4565b005b34801561090a575f80fd5b50610913611cb3565b6040516109209190613617565b60405180910390f35b348015610934575f80fd5b5061094f600480360381019061094a9190613630565b611cb9565b60405161095c9190613550565b60405180910390f35b348015610970575f80fd5b50610979611e0d565b6040516109869190613617565b60405180910390f35b34801561099a575f80fd5b506109b560048036038101906109b091906138ce565b611e13565b6040516109c29190613617565b60405180910390f35b3480156109d6575f80fd5b506109df611e95565b6040516109ec9190613617565b60405180910390f35b348015610a00575f80fd5b50610a1b6004803603810190610a169190613630565b611e9b565b005b348015610a28575f80fd5b50610a436004803603810190610a3e9190613569565b611f70565b005b348015610a50575f80fd5b50610a59612066565b604051610a669190613617565b60405180910390f35b348015610a7a575f80fd5b50610a8361206c565b604051610a909190613617565b60405180910390f35b606060038054610aa890613939565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad490613939565b8015610b1f5780601f10610af657610100808354040283529160200191610b1f565b820191905f5260205f20905b815481529060010190602001808311610b0257829003601f168201915b5050505050905090565b5f610b3c610b35612072565b8484612079565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610b98612072565b73ffffffffffffffffffffffffffffffffffffffff16610bb6611469565b73ffffffffffffffffffffffffffffffffffffffff1614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c03906139b3565b60405180910390fd5b670de0b6b3a76400006103e86001610c22610b87565b610c2c91906139fe565b610c369190613a6c565b610c409190613a6c565b811015610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990613b0c565b60405180910390fd5b670de0b6b3a764000081610c9691906139fe565b60078190555050565b5f610cab84848461223c565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cf2612072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890613b9a565b60405180910390fd5b610d8585610d7d612072565b858403612079565b60019150509392505050565b61dead81565b5f6012905090565b5f610e3c610dab612072565b848460015f610db8612072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e379190613bb8565b612079565b6001905092915050565b7f000000000000000000000000011c46db77ce241c048cd8b1b2192d0b2643756e81565b600a5f9054906101000a900460ff1681565b5f84849050118015610e9357508383905082829050145b610e9b575f80fd5b5f3390505f5b85859050811015610f1d57610f0a82878784818110610ec357610ec2613beb565b5b9050602002016020810190610ed89190613569565b670de0b6b3a7640000878786818110610ef457610ef3613beb565b5b90506020020135610f0591906139fe565b61223c565b8080610f1590613c18565b915050610ea1565b505050505050565b60105481565b600a60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610f8490613c8c565b5f6040518083038185875af1925050503d805f8114610fbe576040519150601f19603f3d011682016040523d82523d5f602084013e610fc3565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611019612072565b73ffffffffffffffffffffffffffffffffffffffff16611037611469565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611084906139b3565b60405180910390fd5b6110965f612c9c565b565b6110a0612072565b73ffffffffffffffffffffffffffffffffffffffff166110be611469565b73ffffffffffffffffffffffffffffffffffffffff1614611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906139b3565b60405180910390fd5b80600f81905550600f54600e819055506014600e54111561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190613cea565b60405180910390fd5b50565b5f611176612072565b73ffffffffffffffffffffffffffffffffffffffff16611194611469565b73ffffffffffffffffffffffffffffffffffffffff16146111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e1906139b3565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b611212612072565b73ffffffffffffffffffffffffffffffffffffffff16611230611469565b73ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906139b3565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6112e6612072565b73ffffffffffffffffffffffffffffffffffffffff16611304611469565b73ffffffffffffffffffffffffffffffffffffffff161461135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611351906139b3565b60405180910390fd5b80600d819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600b8190555042600c8190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113e8612072565b73ffffffffffffffffffffffffffffffffffffffff1614611407575f80fd5b61141030610fcc565b811115801561141e57505f81115b61145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613d52565b60405180910390fd5b61146681612d5f565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b61149f612072565b73ffffffffffffffffffffffffffffffffffffffff166114bd611469565b73ffffffffffffffffffffffffffffffffffffffff1614611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a906139b3565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461153f90613939565b80601f016020809104026020016040519081016040528092919081815260200182805461156b90613939565b80156115b65780601f1061158d576101008083540402835291602001916115b6565b820191905f5260205f20905b81548152906001019060200180831161159957829003601f168201915b5050505050905090565b6115c8612072565b73ffffffffffffffffffffffffffffffffffffffff166115e6611469565b73ffffffffffffffffffffffffffffffffffffffff161461163c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611633906139b3565b60405180910390fd5b7f000000000000000000000000011c46db77ce241c048cd8b1b2192d0b2643756e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190613de0565b60405180910390fd5b6116d48282612f92565b5050565b5f8060015f6116e5612072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690613e6e565b60405180910390fd5b6117b36117aa612072565b85858403612079565b600191505092915050565b6117c6612072565b73ffffffffffffffffffffffffffffffffffffffff166117e4611469565b73ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611831906139b3565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6118f96118f2612072565b848461223c565b6001905092915050565b61190b612072565b73ffffffffffffffffffffffffffffffffffffffff16611929611469565b73ffffffffffffffffffffffffffffffffffffffff161461197f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611976906139b3565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6015602052805f5260405f205f915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611a75612072565b73ffffffffffffffffffffffffffffffffffffffff16611a93611469565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae0906139b3565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b839190613550565b60405180910390a25050565b5f601182611b9d9190613bb8565b9050919050565b611bac612072565b73ffffffffffffffffffffffffffffffffffffffff16611bca611469565b73ffffffffffffffffffffffffffffffffffffffff1614611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c17906139b3565b60405180910390fd5b670de0b6b3a76400006103e86005611c36610b87565b611c4091906139fe565b611c4a9190613a6c565b611c549190613a6c565b811015611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90613efc565b60405180910390fd5b670de0b6b3a764000081611caa91906139fe565b60098190555050565b60075481565b5f611cc2612072565b73ffffffffffffffffffffffffffffffffffffffff16611ce0611469565b73ffffffffffffffffffffffffffffffffffffffff1614611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d906139b3565b60405180910390fd5b620186a06001611d44610b87565b611d4e91906139fe565b611d589190613a6c565b821015611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9190613f8a565b60405180910390fd5b6103e86005611da7610b87565b611db191906139fe565b611dbb9190613a6c565b821115611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490614018565b60405180910390fd5b8160088190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b611ea3612072565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611469565b73ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e906139b3565b60405180910390fd5b8060118190555060115460108190555060146010541115611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490613cea565b60405180910390fd5b50565b611f78612072565b73ffffffffffffffffffffffffffffffffffffffff16611f96611469565b73ffffffffffffffffffffffffffffffffffffffff1614611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe3906139b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361205a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612051906140a6565b60405180910390fd5b61206381612c9c565b50565b60095481565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90614134565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906141c2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161222f9190613617565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a190614250565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906142de565b60405180910390fd5b5f810361232f5761232a83835f613030565b612c97565b5f439050600a5f9054906101000a900460ff16156128cd5761234f611469565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156123bd575061238d611469565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123f557505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561242f575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124485750600560149054906101000a900460ff16155b156128cc5780600d54600b5461245e9190613bb8565b10612489575f600f81905550600f54600e81905550605a601181905550601154601081905550612503565b600d54600b546124999190613bb8565b811180156124b557506028600b546124b19190613bb8565b8111155b156124e157600a600f81905550600f54600e81905550601e601181905550601154601081905550612502565b5f600f81905550600f54600e819055505f6011819055506011546010819055505b5b600a60019054906101000a900460ff166125f25760125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125b2575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614346565b60405180910390fd5b5b60155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561268f575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612736576007548211156126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d0906143d4565b60405180910390fd5b6009546126e584610fcc565b836126f09190613bb8565b1115612731576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127289061443c565b60405180910390fd5b6128cb565b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127d3575060145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128225760075482111561281d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612814906144ca565b60405180910390fd5b6128ca565b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166128c95760095461287c84610fcc565b836128879190613bb8565b11156128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf9061443c565b60405180910390fd5b5b5b5b5b5b5f6128d730610fcc565b90505f60085482101590508080156128fb5750600a60029054906101000a900460ff165b80156129145750600560149054906101000a900460ff16155b80156129315750600260135f8581526020019081526020015f2054105b8015612984575060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156129d7575060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a2a575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a91576001600560146101000a81548160ff021916908315150217905550612a526132a5565b60135f8481526020019081526020015f205f8154612a6f90613c18565b919050819055505f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060125f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b40575060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b49575f90505b5f8115612c865760155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ba757505f601054115b15612bdb57612bd46064612bc66010548961338590919063ffffffff16565b61339a90919063ffffffff16565b9050612c63565b60155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c3257505f600e54115b15612c6257612c5f6064612c51600e548961338590919063ffffffff16565b61339a90919063ffffffff16565b90505b5b5f811115612c7757612c76883083613030565b5b8086612c8391906144e8565b95505b612c91888888613030565b50505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612d7b57612d7a61451b565b5b604051908082528060200260200182016040528015612da95781602001602082028036833780820191505090505b50905030815f81518110612dc057612dbf613beb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e87919061455c565b81600181518110612e9b57612e9a613beb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f00307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612079565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612f61959493929190614677565b5f604051808303815f87803b158015612f78575f80fd5b505af1158015612f8a573d5f803e3d5ffd5b505050505050565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614250565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361310c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613103906142de565b60405180910390fd5b6131178383836133af565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561319a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131919061473f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132289190613bb8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161328c9190613617565b60405180910390a361329f8484846133b4565b50505050565b5f6132af30610fcc565b90505f8082036132c0575050613383565b60146008546132cf91906139fe565b8211156132e85760146008546132e591906139fe565b91505b5f8290506132f581612d5f565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161333a90613c8c565b5f6040518083038185875af1925050503d805f8114613374576040519150601f19603f3d011682016040523d82523d5f602084013e613379565b606091505b5050809250505050505b565b5f818361339291906139fe565b905092915050565b5f81836133a79190613a6c565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133f05780820151818401526020810190506133d5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613415826133b9565b61341f81856133c3565b935061342f8185602086016133d3565b613438816133fb565b840191505092915050565b5f6020820190508181035f83015261345b818461340b565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134948261346b565b9050919050565b6134a48161348a565b81146134ae575f80fd5b50565b5f813590506134bf8161349b565b92915050565b5f819050919050565b6134d7816134c5565b81146134e1575f80fd5b50565b5f813590506134f2816134ce565b92915050565b5f806040838503121561350e5761350d613463565b5b5f61351b858286016134b1565b925050602061352c858286016134e4565b9150509250929050565b5f8115159050919050565b61354a81613536565b82525050565b5f6020820190506135635f830184613541565b92915050565b5f6020828403121561357e5761357d613463565b5b5f61358b848285016134b1565b91505092915050565b5f819050919050565b5f6135b76135b26135ad8461346b565b613594565b61346b565b9050919050565b5f6135c88261359d565b9050919050565b5f6135d9826135be565b9050919050565b6135e9816135cf565b82525050565b5f6020820190506136025f8301846135e0565b92915050565b613611816134c5565b82525050565b5f60208201905061362a5f830184613608565b92915050565b5f6020828403121561364557613644613463565b5b5f613652848285016134e4565b91505092915050565b5f805f6060848603121561367257613671613463565b5b5f61367f868287016134b1565b9350506020613690868287016134b1565b92505060406136a1868287016134e4565b9150509250925092565b6136b48161348a565b82525050565b5f6020820190506136cd5f8301846136ab565b92915050565b5f60ff82169050919050565b6136e8816136d3565b82525050565b5f6020820190506137015f8301846136df565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261372857613727613707565b5b8235905067ffffffffffffffff8111156137455761374461370b565b5b6020830191508360208202830111156137615761376061370f565b5b9250929050565b5f8083601f84011261377d5761377c613707565b5b8235905067ffffffffffffffff81111561379a5761379961370b565b5b6020830191508360208202830111156137b6576137b561370f565b5b9250929050565b5f805f80604085870312156137d5576137d4613463565b5b5f85013567ffffffffffffffff8111156137f2576137f1613467565b5b6137fe87828801613713565b9450945050602085013567ffffffffffffffff81111561382157613820613467565b5b61382d87828801613768565b925092505092959194509250565b61384481613536565b811461384e575f80fd5b50565b5f8135905061385f8161383b565b92915050565b5f806040838503121561387b5761387a613463565b5b5f613888858286016134b1565b925050602061389985828601613851565b9150509250929050565b5f602082840312156138b8576138b7613463565b5b5f6138c584828501613851565b91505092915050565b5f80604083850312156138e4576138e3613463565b5b5f6138f1858286016134b1565b9250506020613902858286016134b1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061395057607f821691505b6020821081036139635761396261390c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61399d6020836133c3565b91506139a882613969565b602082019050919050565b5f6020820190508181035f8301526139ca81613991565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a08826134c5565b9150613a13836134c5565b9250828202613a21816134c5565b91508282048414831517613a3857613a376139d1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a76826134c5565b9150613a81836134c5565b925082613a9157613a90613a3f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613af6602f836133c3565b9150613b0182613a9c565b604082019050919050565b5f6020820190508181035f830152613b2381613aea565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613b846028836133c3565b9150613b8f82613b2a565b604082019050919050565b5f6020820190508181035f830152613bb181613b78565b9050919050565b5f613bc2826134c5565b9150613bcd836134c5565b9250828201905080821115613be557613be46139d1565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613c22826134c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c5457613c536139d1565b5b600182019050919050565b5f81905092915050565b50565b5f613c775f83613c5f565b9150613c8282613c69565b5f82019050919050565b5f613c9682613c6c565b9150819050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f613cd4601d836133c3565b9150613cdf82613ca0565b602082019050919050565b5f6020820190508181035f830152613d0181613cc8565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613d3c600c836133c3565b9150613d4782613d08565b602082019050919050565b5f6020820190508181035f830152613d6981613d30565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613dca6039836133c3565b9150613dd582613d70565b604082019050919050565b5f6020820190508181035f830152613df781613dbe565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e586025836133c3565b9150613e6382613dfe565b604082019050919050565b5f6020820190508181035f830152613e8581613e4c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613ee66024836133c3565b9150613ef182613e8c565b604082019050919050565b5f6020820190508181035f830152613f1381613eda565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613f746035836133c3565b9150613f7f82613f1a565b604082019050919050565b5f6020820190508181035f830152613fa181613f68565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6140026034836133c3565b915061400d82613fa8565b604082019050919050565b5f6020820190508181035f83015261402f81613ff6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140906026836133c3565b915061409b82614036565b604082019050919050565b5f6020820190508181035f8301526140bd81614084565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61411e6024836133c3565b9150614129826140c4565b604082019050919050565b5f6020820190508181035f83015261414b81614112565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141ac6022836133c3565b91506141b782614152565b604082019050919050565b5f6020820190508181035f8301526141d9816141a0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61423a6025836133c3565b9150614245826141e0565b604082019050919050565b5f6020820190508181035f8301526142678161422e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6142c86023836133c3565b91506142d38261426e565b604082019050919050565b5f6020820190508181035f8301526142f5816142bc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6143306016836133c3565b915061433b826142fc565b602082019050919050565b5f6020820190508181035f83015261435d81614324565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6143be6035836133c3565b91506143c982614364565b604082019050919050565b5f6020820190508181035f8301526143eb816143b2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6144266013836133c3565b9150614431826143f2565b602082019050919050565b5f6020820190508181035f8301526144538161441a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6144b46036836133c3565b91506144bf8261445a565b604082019050919050565b5f6020820190508181035f8301526144e1816144a8565b9050919050565b5f6144f2826134c5565b91506144fd836134c5565b9250828203905081811115614515576145146139d1565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506145568161349b565b92915050565b5f6020828403121561457157614570613463565b5b5f61457e84828501614548565b91505092915050565b5f819050919050565b5f6145aa6145a56145a084614587565b613594565b6134c5565b9050919050565b6145ba81614590565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145f28161348a565b82525050565b5f61460383836145e9565b60208301905092915050565b5f602082019050919050565b5f614625826145c0565b61462f81856145ca565b935061463a836145da565b805f5b8381101561466a57815161465188826145f8565b975061465c8361460f565b92505060018101905061463d565b5085935050505092915050565b5f60a08201905061468a5f830188613608565b61469760208301876145b1565b81810360408301526146a9818661461b565b90506146b860608301856136ab565b6146c56080830184613608565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6147296026836133c3565b9150614734826146cf565b604082019050919050565b5f6020820190508181035f8301526147568161471d565b905091905056fea26469706673582212207aabcf4e15f6614903f8e37456866d62a117ab6776a90fd28764fdcf59a8af4a64736f6c63430008150033

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

0000000000000000000000001ed5fd235bc013ed81e8912da68bc77ff61029f5

-----Decoded View---------------
Arg [0] : _wallet1 (address): 0x1ed5Fd235Bc013ED81E8912dA68bc77FF61029F5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001ed5fd235bc013ed81e8912da68bc77ff61029f5


Deployed Bytecode Sourcemap

15168:12693:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2865:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3779:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16085:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15251:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3186:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18854:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3956:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15354:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3085:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4456:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15309:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15601:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21846:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15897:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15681:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20406:174;;;;;;;;;;;;;:::i;:::-;;3302:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;983:103;;;;;;;;;;;;;:::i;:::-;;21100:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18220:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19616:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17969:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20177:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;758:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15932:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19879:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2973:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20592:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4679:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19401:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3437:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21607:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16157:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15641:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19987:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27171:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19137:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15486:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18349:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15823:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3620:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15528:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21351:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1096:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15568:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15789:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2865:100;2919:13;2952:5;2945:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2865:100;:::o;3779:169::-;3862:4;3879:39;3888:12;:10;:12::i;:::-;3902:7;3911:6;3879:8;:39::i;:::-;3936:4;3929:11;;3779:169;;;;:::o;16085:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15251:51::-;;;:::o;3186:108::-;3247:7;3274:12;;3267:19;;3186:108;:::o;18854:275::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18991:4:::1;18983;18978:1;18962:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18961:26;;;;:::i;:::-;18960:35;;;;:::i;:::-;18950:6;:45;;18928:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;19114:6;19104;:17;;;;:::i;:::-;19081:20;:40;;;;18854:275:::0;:::o;3956:492::-;4096:4;4113:36;4123:6;4131:9;4142:6;4113:9;:36::i;:::-;4162:24;4189:11;:19;4201:6;4189:19;;;;;;;;;;;;;;;:33;4209:12;:10;:12::i;:::-;4189:33;;;;;;;;;;;;;;;;4162:60;;4261:6;4241:16;:26;;4233:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4348:57;4357:6;4365:12;:10;:12::i;:::-;4398:6;4379:16;:25;4348:8;:57::i;:::-;4436:4;4429:11;;;3956:492;;;;;:::o;15354:53::-;15400:6;15354:53;:::o;3085:93::-;3143:5;3168:2;3161:9;;3085:93;:::o;4456:215::-;4544:4;4561:80;4570:12;:10;:12::i;:::-;4584:7;4630:10;4593:11;:25;4605:12;:10;:12::i;:::-;4593:25;;;;;;;;;;;;;;;:34;4619:7;4593:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4561:8;:80::i;:::-;4659:4;4652:11;;4456:215;;;;:::o;15309:38::-;;;:::o;15601:33::-;;;;;;;;;;;;;:::o;21846:353::-;21970:1;21951:9;;:16;;:20;:58;;;;;21993:9;;:16;;21975:7;;:14;;:34;21951:58;21943:67;;;;;;22023:12;22038:10;22023:25;;22068:6;22063:129;22084:9;;:16;;22080:1;:20;22063:129;;;22124:52;22134:4;22140:9;;22150:1;22140:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22168:6;22154:7;;22162:1;22154:10;;;;;;;:::i;:::-;;;;;;;;:21;;;;:::i;:::-;22124:9;:52::i;:::-;22102:3;;;;;:::i;:::-;;;;22063:129;;;;21930:269;21846:353;;;;:::o;15897:28::-;;;;:::o;15681:31::-;;;;;;;;;;;;;:::o;20406:174::-;20448:12;20493:15;;;;;;;;;;;20485:29;;20536:21;20485:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20471:101;;;;;20437:143;20406:174::o;3302:127::-;3376:7;3403:9;:18;3413:7;3403:18;;;;;;;;;;;;;;;;3396:25;;3302:127;;;:::o;983:103::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1048:30:::1;1075:1;1048:18;:30::i;:::-;983:103::o:0;21100:243::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21210:13:::1;21192:15;:31;;;;21249:15;;21234:12;:30;;;;21299:2;21283:12;;:18;;21275:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21100:243:::0;:::o;18220:121::-;18272:4;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18306:5:::1;18289:14;;:22;;;;;;;;;;;;;;;;;;18329:4;18322:11;;18220:121:::0;:::o;19616:167::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19771:4:::1;19729:31;:39;19761:6;19729:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19616:167:::0;;:::o;17969:243::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18056:11:::1;18043:10;:24;;;;18094:4;18078:13;;:20;;;;;;;;;;;;;;;;;;18123:4;18109:11;;:18;;;;;;;;;;;;;;;;;;18151:12;18138:10;:25;;;;18189:15;18174:12;:30;;;;17969:243:::0;:::o;20177:221::-;20255:15;;;;;;;;;;;20239:31;;:12;:10;:12::i;:::-;:31;;;20231:40;;;;;;20300:24;20318:4;20300:9;:24::i;:::-;20290:6;:34;;:48;;;;;20337:1;20328:6;:10;20290:48;20282:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20366:24;20383:6;20366:16;:24::i;:::-;20177:221;:::o;758:87::-;804:7;831:6;;;;;;;;;;;824:13;;758:87;:::o;15932:31::-;;;;:::o;19879:100::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19964:7:::1;19950:11;;:21;;;;;;;;;;;;;;;;;;19879:100:::0;:::o;2973:104::-;3029:13;3062:7;3055:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2973:104;:::o;20592:304::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20736:13:::1;20728:21;;:4;:21;;::::0;20706:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20847:41;20876:4;20882:5;20847:28;:41::i;:::-;20592:304:::0;;:::o;4679:413::-;4772:4;4789:24;4816:11;:25;4828:12;:10;:12::i;:::-;4816:25;;;;;;;;;;;;;;;:34;4842:7;4816:34;;;;;;;;;;;;;;;;4789:61;;4889:15;4869:16;:35;;4861:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4982:67;4991:12;:10;:12::i;:::-;5005:7;5033:15;5014:16;:34;4982:8;:67::i;:::-;5080:4;5073:11;;;4679:413;;;;:::o;19401:207::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19545:4:::1;19499:31;:43;19531:10;19499:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;19594:4;19560:19;:31;19580:10;19560:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;19401:207:::0;;:::o;3437:175::-;3523:4;3540:42;3550:12;:10;:12::i;:::-;3564:9;3575:6;3540:9;:42::i;:::-;3600:4;3593:11;;3437:175;;;;:::o;21607:231::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21767:15:::1;;;;;;;;;;;21724:59;;21747:18;21724:59;;;;;;;;;;;;21812:18;21794:15;;:36;;;;;;;;;;;;;;;;;;21607:231:::0;:::o;16157:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15641:33::-;;;;;;;;;;;;;:::o;19987:182::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20103:8:::1;20072:19;:28;20092:7;20072:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20143:7;20127:34;;;20152:8;20127:34;;;;;;:::i;:::-;;;;;;;;19987:182:::0;;:::o;27171:88::-;27221:4;27249:2;27245:1;:6;;;;:::i;:::-;27238:13;;27171:88;;;:::o;19137:256::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19277:4:::1;19269;19264:1;19248:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19247:26;;;;:::i;:::-;19246:35;;;;:::i;:::-;19236:6;:45;;19214:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;19378:6;19368;:17;;;;:::i;:::-;19356:9;:29;;;;19137:256:::0;:::o;15486:35::-;;;;:::o;18349:497::-;18457:4;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18536:6:::1;18531:1;18515:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18514:28;;;;:::i;:::-;18501:9;:41;;18479:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;18691:4;18686:1;18670:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18669:26;;;;:::i;:::-;18656:9;:39;;18634:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;18807:9;18786:18;:30;;;;18834:4;18827:11;;18349:497:::0;;;:::o;15823:27::-;;;;:::o;3620:151::-;3709:7;3736:11;:18;3748:5;3736:18;;;;;;;;;;;;;;;:27;3755:7;3736:27;;;;;;;;;;;;;;;;3729:34;;3620:151;;;;:::o;15528:33::-;;;;:::o;21351:248::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21463:13:::1;21444:16;:32;;;;21503:16;;21487:13;:32;;;;21555:2;21538:13;;:19;;21530:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21351:248:::0;:::o;1096:201::-;906:12;:10;:12::i;:::-;895:23;;:7;:5;:7::i;:::-;:23;;;887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1205:1:::1;1185:22;;:8;:22;;::::0;1177:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1261:28;1280:8;1261:18;:28::i;:::-;1096:201:::0;:::o;15568:24::-;;;;:::o;15789:25::-;;;;:::o;300:98::-;353:7;380:10;373:17;;300:98;:::o;6847:380::-;7000:1;6983:19;;:5;:19;;;6975:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7081:1;7062:21;;:7;:21;;;7054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7165:6;7135:11;:18;7147:5;7135:18;;;;;;;;;;;;;;;:27;7154:7;7135:27;;;;;;;;;;;;;;;:36;;;;7203:7;7187:32;;7196:5;7187:32;;;7212:6;7187:32;;;;;;:::i;:::-;;;;;;;;6847:380;;;:::o;22207:4408::-;22355:1;22339:18;;:4;:18;;;22331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22432:1;22418:16;;:2;:16;;;22410:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22501:1;22491:6;:11;22487:93;;22519:28;22535:4;22541:2;22545:1;22519:15;:28::i;:::-;22562:7;;22487:93;22592:16;22611:12;22592:31;;22640:14;;;;;;;;;;;22636:2512;;;22701:7;:5;:7::i;:::-;22693:15;;:4;:15;;;;:49;;;;;22735:7;:5;:7::i;:::-;22729:13;;:2;:13;;;;22693:49;:86;;;;;22777:1;22763:16;;:2;:16;;;;22693:86;:128;;;;;22814:6;22800:21;;:2;:21;;;;22693:128;:158;;;;;22843:8;;;;;;;;;;;22842:9;22693:158;22671:2466;;;22934:8;22919:10;;22906;;:23;;;;:::i;:::-;22905:37;22884:800;;22996:1;22978:15;:19;;;;23031:15;;23016:12;:30;;;;23086:2;23067:16;:21;;;;23123:16;;23107:13;:32;;;;22884:800;;;23193:10;;23180;;:23;;;;:::i;:::-;23168:8;:36;:67;;;;;23233:2;23220:10;;:15;;;;:::i;:::-;23208:8;:27;;23168:67;23165:519;;;23289:2;23271:15;:20;;;;23325:15;;23310:12;:30;;;;23380:2;23361:16;:21;;;;23417:16;;23401:13;:32;;;;23165:519;;;23524:1;23506:15;:19;;;;23559:15;;23544:12;:30;;;;23614:1;23595:16;:20;;;;23650:16;;23634:13;:32;;;;23165:519;22884:800;23709:13;;;;;;;;;;;23704:223;;23781:19;:25;23801:4;23781:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23810:19;:23;23830:2;23810:23;;;;;;;;;;;;;;;;;;;;;;;;;23781:52;23747:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23704:223;24001:25;:31;24027:4;24001:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24058:31;:35;24090:2;24058:35;;;;;;;;;;;;;;;;;;;;;;;;;24057:36;24001:92;23975:1147;;;24180:20;;24170:6;:30;;24136:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24388:9;;24371:13;24381:2;24371:9;:13::i;:::-;24362:6;:22;;;;:::i;:::-;:35;;24328:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23975:1147;;;24566:25;:29;24592:2;24566:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24621:31;:37;24653:4;24621:37;;;;;;;;;;;;;;;;;;;;;;;;;24620:38;24566:92;24540:582;;;24745:20;;24735:6;:30;;24701:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;24540:582;;;24902:31;:35;24934:2;24902:35;;;;;;;;;;;;;;;;;;;;;;;;;24897:225;;25022:9;;25005:13;25015:2;25005:9;:13::i;:::-;24996:6;:22;;;;:::i;:::-;:35;;24962:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24897:225;24540:582;23975:1147;22671:2466;22636:2512;25160:28;25191:24;25209:4;25191:9;:24::i;:::-;25160:55;;25228:12;25267:18;;25243:20;:42;;25228:57;;25316:7;:35;;;;;25340:11;;;;;;;;;;;25316:35;:61;;;;;25369:8;;;;;;;;;;;25368:9;25316:61;:105;;;;;25419:1;25395:11;:21;25407:8;25395:21;;;;;;;;;;;;:25;25316:105;:154;;;;;25439:25;:31;25465:4;25439:31;;;;;;;;;;;;;;;;;;;;;;;;;25438:32;25316:154;:197;;;;;25488:19;:25;25508:4;25488:25;;;;;;;;;;;;;;;;;;;;;;;;;25487:26;25316:197;:238;;;;;25531:19;:23;25551:2;25531:23;;;;;;;;;;;;;;;;;;;;;;;;;25530:24;25316:238;25298:410;;;25592:4;25581:8;;:15;;;;;;;;;;;;;;;;;;25613:10;:8;:10::i;:::-;25642:11;:21;25654:8;25642:21;;;;;;;;;;;;25640:23;;;;;:::i;:::-;;;;;;;;25691:5;25680:8;;:16;;;;;;;;;;;;;;;;;;25298:410;25720:12;25736:8;;;;;;;;;;;25735:9;25720:24;;25846:19;:25;25866:4;25846:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25875:19;:23;25895:2;25875:23;;;;;;;;;;;;;;;;;;;;;;;;;25846:52;25842:100;;;25925:5;25915:15;;25842:100;25954:12;26059:7;26055:507;;;26111:25;:29;26137:2;26111:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26160:1;26144:13;;:17;26111:50;26107:306;;;26189:34;26219:3;26189:25;26200:13;;26189:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26182:41;;26107:306;;;26285:25;:31;26311:4;26285:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26335:1;26320:12;;:16;26285:51;26281:132;;;26364:33;26393:3;26364:24;26375:12;;26364:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26357:40;;26281:132;26107:306;26440:1;26433:4;:8;26429:91;;;26462:42;26478:4;26492;26499;26462:15;:42::i;:::-;26429:91;26546:4;26536:14;;;;;:::i;:::-;;;26055:507;26574:33;26590:4;26596:2;26600:6;26574:15;:33::i;:::-;22320:4295;;;;;22207:4408;;;;:::o;1305:191::-;1379:16;1398:6;;;;;;;;;;;1379:25;;1424:8;1415:6;;:17;;;;;;;;;;;;;;;;;;1479:8;1448:40;;1469:8;1448:40;;;;;;;;;;;;1368:128;1305:191;:::o;27267:589::-;27393:21;27431:1;27417:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27393:40;;27462:4;27444;27449:1;27444:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27488:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27478:4;27483:1;27478:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27523:62;27540:4;27555:15;27573:11;27523:8;:62::i;:::-;27624:15;:66;;;27705:11;27731:1;27775:4;27802;27822:15;27624:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27322:534;27267:589;:::o;20904:188::-;21021:5;20987:25;:31;21013:4;20987:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21078:5;21044:40;;21072:4;21044:40;;;;;;;;;;;;20904:188;;:::o;5100:733::-;5258:1;5240:20;;:6;:20;;;5232:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5342:1;5321:23;;:9;:23;;;5313:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5397:47;5418:6;5426:9;5437:6;5397:20;:47::i;:::-;5457:21;5481:9;:17;5491:6;5481:17;;;;;;;;;;;;;;;;5457:41;;5534:6;5517:13;:23;;5509:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5655:6;5639:13;:22;5619:9;:17;5629:6;5619:17;;;;;;;;;;;;;;;:42;;;;5707:6;5683:9;:20;5693:9;5683:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5748:9;5731:35;;5740:6;5731:35;;;5759:6;5731:35;;;;;;:::i;:::-;;;;;;;;5779:46;5799:6;5807:9;5818:6;5779:19;:46::i;:::-;5221:612;5100:733;;;:::o;26623:540::-;26662:23;26688:24;26706:4;26688:9;:24::i;:::-;26662:50;;26723:12;26771:1;26752:15;:20;26748:59;;26789:7;;;;26748:59;26862:2;26841:18;;:23;;;;:::i;:::-;26823:15;:41;26819:115;;;26920:2;26899:18;;:23;;;;:::i;:::-;26881:41;;26819:115;26948:26;26977:15;26948:44;;27005:36;27022:18;27005:16;:36::i;:::-;27076:15;;;;;;;;;;;27068:29;;27119:21;27068:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27054:101;;;;;26651:512;;;26623:540;:::o;8853:98::-;8911:7;8942:1;8938;:5;;;;:::i;:::-;8931:12;;8853:98;;;;:::o;8959:::-;9017:7;9048:1;9044;:5;;;;:::i;:::-;9037:12;;8959:98;;;;:::o;7235:125::-;;;;:::o;7368:124::-;;;;:::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;1553:117;1662:1;1659;1652: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:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:117::-;6962:1;6959;6952:12;6976:117;7085:1;7082;7075:12;7099:117;7208:1;7205;7198:12;7239:568;7312:8;7322:6;7372:3;7365:4;7357:6;7353:17;7349:27;7339:122;;7380:79;;:::i;:::-;7339:122;7493:6;7480:20;7470:30;;7523:18;7515:6;7512:30;7509:117;;;7545:79;;:::i;:::-;7509:117;7659:4;7651:6;7647:17;7635:29;;7713:3;7705:4;7697:6;7693:17;7683:8;7679:32;7676:41;7673:128;;;7720:79;;:::i;:::-;7673:128;7239:568;;;;;:::o;7830:::-;7903:8;7913:6;7963:3;7956:4;7948:6;7944:17;7940:27;7930:122;;7971:79;;:::i;:::-;7930:122;8084:6;8071:20;8061:30;;8114:18;8106:6;8103:30;8100:117;;;8136:79;;:::i;:::-;8100:117;8250:4;8242:6;8238:17;8226:29;;8304:3;8296:4;8288:6;8284:17;8274:8;8270:32;8267:41;8264:128;;;8311:79;;:::i;:::-;8264:128;7830:568;;;;;:::o;8404:934::-;8526:6;8534;8542;8550;8599:2;8587:9;8578:7;8574:23;8570:32;8567:119;;;8605:79;;:::i;:::-;8567:119;8753:1;8742:9;8738:17;8725:31;8783:18;8775:6;8772:30;8769:117;;;8805:79;;:::i;:::-;8769:117;8918:80;8990:7;8981:6;8970:9;8966:22;8918:80;:::i;:::-;8900:98;;;;8696:312;9075:2;9064:9;9060:18;9047:32;9106:18;9098:6;9095:30;9092:117;;;9128:79;;:::i;:::-;9092:117;9241:80;9313:7;9304:6;9293:9;9289:22;9241:80;:::i;:::-;9223:98;;;;9018:313;8404:934;;;;;;;:::o;9344:116::-;9414:21;9429:5;9414:21;:::i;:::-;9407:5;9404:32;9394:60;;9450:1;9447;9440:12;9394:60;9344:116;:::o;9466:133::-;9509:5;9547:6;9534:20;9525:29;;9563:30;9587:5;9563:30;:::i;:::-;9466:133;;;;:::o;9605:468::-;9670:6;9678;9727:2;9715:9;9706:7;9702:23;9698:32;9695:119;;;9733:79;;:::i;:::-;9695:119;9853:1;9878:53;9923:7;9914:6;9903:9;9899:22;9878:53;:::i;:::-;9868:63;;9824:117;9980:2;10006:50;10048:7;10039:6;10028:9;10024:22;10006:50;:::i;:::-;9996:60;;9951:115;9605:468;;;;;:::o;10079:323::-;10135:6;10184:2;10172:9;10163:7;10159:23;10155:32;10152:119;;;10190:79;;:::i;:::-;10152:119;10310:1;10335:50;10377:7;10368:6;10357:9;10353:22;10335:50;:::i;:::-;10325:60;;10281:114;10079:323;;;;:::o;10408:474::-;10476:6;10484;10533:2;10521:9;10512:7;10508:23;10504:32;10501:119;;;10539:79;;:::i;:::-;10501:119;10659:1;10684:53;10729:7;10720:6;10709:9;10705:22;10684:53;:::i;:::-;10674:63;;10630:117;10786:2;10812:53;10857:7;10848:6;10837:9;10833:22;10812:53;:::i;:::-;10802:63;;10757:118;10408:474;;;;;:::o;10888:180::-;10936:77;10933:1;10926:88;11033:4;11030:1;11023:15;11057:4;11054:1;11047:15;11074:320;11118:6;11155:1;11149:4;11145:12;11135:22;;11202:1;11196:4;11192:12;11223:18;11213:81;;11279:4;11271:6;11267:17;11257:27;;11213:81;11341:2;11333:6;11330:14;11310:18;11307:38;11304:84;;11360:18;;:::i;:::-;11304:84;11125:269;11074:320;;;:::o;11400:182::-;11540:34;11536:1;11528:6;11524:14;11517:58;11400:182;:::o;11588:366::-;11730:3;11751:67;11815:2;11810:3;11751:67;:::i;:::-;11744:74;;11827:93;11916:3;11827:93;:::i;:::-;11945:2;11940:3;11936:12;11929:19;;11588:366;;;:::o;11960:419::-;12126:4;12164:2;12153:9;12149:18;12141:26;;12213:9;12207:4;12203:20;12199:1;12188:9;12184:17;12177:47;12241:131;12367:4;12241:131;:::i;:::-;12233:139;;11960:419;;;:::o;12385:180::-;12433:77;12430:1;12423:88;12530:4;12527:1;12520:15;12554:4;12551:1;12544:15;12571:410;12611:7;12634:20;12652:1;12634:20;:::i;:::-;12629:25;;12668:20;12686:1;12668:20;:::i;:::-;12663:25;;12723:1;12720;12716:9;12745:30;12763:11;12745:30;:::i;:::-;12734:41;;12924:1;12915:7;12911:15;12908:1;12905:22;12885:1;12878:9;12858:83;12835:139;;12954:18;;:::i;:::-;12835:139;12619:362;12571:410;;;;:::o;12987:180::-;13035:77;13032:1;13025:88;13132:4;13129:1;13122:15;13156:4;13153:1;13146:15;13173:185;13213:1;13230:20;13248:1;13230:20;:::i;:::-;13225:25;;13264:20;13282:1;13264:20;:::i;:::-;13259:25;;13303:1;13293:35;;13308:18;;:::i;:::-;13293:35;13350:1;13347;13343:9;13338:14;;13173:185;;;;:::o;13364:234::-;13504:34;13500:1;13492:6;13488:14;13481:58;13573:17;13568:2;13560:6;13556:15;13549:42;13364:234;:::o;13604:366::-;13746:3;13767:67;13831:2;13826:3;13767:67;:::i;:::-;13760:74;;13843:93;13932:3;13843:93;:::i;:::-;13961:2;13956:3;13952:12;13945:19;;13604:366;;;:::o;13976:419::-;14142:4;14180:2;14169:9;14165:18;14157:26;;14229:9;14223:4;14219:20;14215:1;14204:9;14200:17;14193:47;14257:131;14383:4;14257:131;:::i;:::-;14249:139;;13976:419;;;:::o;14401:227::-;14541:34;14537:1;14529:6;14525:14;14518:58;14610:10;14605:2;14597:6;14593:15;14586:35;14401:227;:::o;14634:366::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:419::-;15172:4;15210:2;15199:9;15195:18;15187:26;;15259:9;15253:4;15249:20;15245:1;15234:9;15230:17;15223:47;15287:131;15413:4;15287:131;:::i;:::-;15279:139;;15006:419;;;:::o;15431:191::-;15471:3;15490:20;15508:1;15490:20;:::i;:::-;15485:25;;15524:20;15542:1;15524:20;:::i;:::-;15519:25;;15567:1;15564;15560:9;15553:16;;15588:3;15585:1;15582:10;15579:36;;;15595:18;;:::i;:::-;15579:36;15431:191;;;;:::o;15628:180::-;15676:77;15673:1;15666:88;15773:4;15770:1;15763:15;15797:4;15794:1;15787:15;15814:233;15853:3;15876:24;15894:5;15876:24;:::i;:::-;15867:33;;15922:66;15915:5;15912:77;15909:103;;15992:18;;:::i;:::-;15909:103;16039:1;16032:5;16028:13;16021:20;;15814:233;;;:::o;16053:147::-;16154:11;16191:3;16176:18;;16053:147;;;;:::o;16206:114::-;;:::o;16326:398::-;16485:3;16506:83;16587:1;16582:3;16506:83;:::i;:::-;16499:90;;16598:93;16687:3;16598:93;:::i;:::-;16716:1;16711:3;16707:11;16700:18;;16326:398;;;:::o;16730:379::-;16914:3;16936:147;17079:3;16936:147;:::i;:::-;16929:154;;17100:3;17093:10;;16730:379;;;:::o;17115:179::-;17255:31;17251:1;17243:6;17239:14;17232:55;17115:179;:::o;17300:366::-;17442:3;17463:67;17527:2;17522:3;17463:67;:::i;:::-;17456:74;;17539:93;17628:3;17539:93;:::i;:::-;17657:2;17652:3;17648:12;17641:19;;17300:366;;;:::o;17672:419::-;17838:4;17876:2;17865:9;17861:18;17853:26;;17925:9;17919:4;17915:20;17911:1;17900:9;17896:17;17889:47;17953:131;18079:4;17953:131;:::i;:::-;17945:139;;17672:419;;;:::o;18097:162::-;18237:14;18233:1;18225:6;18221:14;18214:38;18097:162;:::o;18265:366::-;18407:3;18428:67;18492:2;18487:3;18428:67;:::i;:::-;18421:74;;18504:93;18593:3;18504:93;:::i;:::-;18622:2;18617:3;18613:12;18606:19;;18265:366;;;:::o;18637:419::-;18803:4;18841:2;18830:9;18826:18;18818:26;;18890:9;18884:4;18880:20;18876:1;18865:9;18861:17;18854:47;18918:131;19044:4;18918:131;:::i;:::-;18910:139;;18637:419;;;:::o;19062:244::-;19202:34;19198:1;19190:6;19186:14;19179:58;19271:27;19266:2;19258:6;19254:15;19247:52;19062:244;:::o;19312:366::-;19454:3;19475:67;19539:2;19534:3;19475:67;:::i;:::-;19468:74;;19551:93;19640:3;19551:93;:::i;:::-;19669:2;19664:3;19660:12;19653:19;;19312:366;;;:::o;19684:419::-;19850:4;19888:2;19877:9;19873:18;19865:26;;19937:9;19931:4;19927:20;19923:1;19912:9;19908:17;19901:47;19965:131;20091:4;19965:131;:::i;:::-;19957:139;;19684:419;;;:::o;20109:224::-;20249:34;20245:1;20237:6;20233:14;20226:58;20318:7;20313:2;20305:6;20301:15;20294:32;20109:224;:::o;20339:366::-;20481:3;20502:67;20566:2;20561:3;20502:67;:::i;:::-;20495:74;;20578:93;20667:3;20578:93;:::i;:::-;20696:2;20691:3;20687:12;20680:19;;20339:366;;;:::o;20711:419::-;20877:4;20915:2;20904:9;20900:18;20892:26;;20964:9;20958:4;20954:20;20950:1;20939:9;20935:17;20928:47;20992:131;21118:4;20992:131;:::i;:::-;20984:139;;20711:419;;;:::o;21136:223::-;21276:34;21272:1;21264:6;21260:14;21253:58;21345:6;21340:2;21332:6;21328:15;21321:31;21136:223;:::o;21365:366::-;21507:3;21528:67;21592:2;21587:3;21528:67;:::i;:::-;21521:74;;21604:93;21693:3;21604:93;:::i;:::-;21722:2;21717:3;21713:12;21706:19;;21365:366;;;:::o;21737:419::-;21903:4;21941:2;21930:9;21926:18;21918:26;;21990:9;21984:4;21980:20;21976:1;21965:9;21961:17;21954:47;22018:131;22144:4;22018:131;:::i;:::-;22010:139;;21737:419;;;:::o;22162:240::-;22302:34;22298:1;22290:6;22286:14;22279:58;22371:23;22366:2;22358:6;22354:15;22347:48;22162:240;:::o;22408:366::-;22550:3;22571:67;22635:2;22630:3;22571:67;:::i;:::-;22564:74;;22647:93;22736:3;22647:93;:::i;:::-;22765:2;22760:3;22756:12;22749:19;;22408:366;;;:::o;22780:419::-;22946:4;22984:2;22973:9;22969:18;22961:26;;23033:9;23027:4;23023:20;23019:1;23008:9;23004:17;22997:47;23061:131;23187:4;23061:131;:::i;:::-;23053:139;;22780:419;;;:::o;23205:239::-;23345:34;23341:1;23333:6;23329:14;23322:58;23414:22;23409:2;23401:6;23397:15;23390:47;23205:239;:::o;23450:366::-;23592:3;23613:67;23677:2;23672:3;23613:67;:::i;:::-;23606:74;;23689:93;23778:3;23689:93;:::i;:::-;23807:2;23802:3;23798:12;23791:19;;23450:366;;;:::o;23822:419::-;23988:4;24026:2;24015:9;24011:18;24003:26;;24075:9;24069:4;24065:20;24061:1;24050:9;24046:17;24039:47;24103:131;24229:4;24103:131;:::i;:::-;24095:139;;23822:419;;;:::o;24247:225::-;24387:34;24383:1;24375:6;24371:14;24364:58;24456:8;24451:2;24443:6;24439:15;24432:33;24247:225;:::o;24478:366::-;24620:3;24641:67;24705:2;24700:3;24641:67;:::i;:::-;24634:74;;24717:93;24806:3;24717:93;:::i;:::-;24835:2;24830:3;24826:12;24819:19;;24478:366;;;:::o;24850:419::-;25016:4;25054:2;25043:9;25039:18;25031:26;;25103:9;25097:4;25093:20;25089:1;25078:9;25074:17;25067:47;25131:131;25257:4;25131:131;:::i;:::-;25123:139;;24850:419;;;:::o;25275:223::-;25415:34;25411:1;25403:6;25399:14;25392:58;25484:6;25479:2;25471:6;25467:15;25460:31;25275:223;:::o;25504:366::-;25646:3;25667:67;25731:2;25726:3;25667:67;:::i;:::-;25660:74;;25743:93;25832:3;25743:93;:::i;:::-;25861:2;25856:3;25852:12;25845:19;;25504:366;;;:::o;25876:419::-;26042:4;26080:2;26069:9;26065:18;26057:26;;26129:9;26123:4;26119:20;26115:1;26104:9;26100:17;26093:47;26157:131;26283:4;26157:131;:::i;:::-;26149:139;;25876:419;;;:::o;26301:221::-;26441:34;26437:1;26429:6;26425:14;26418:58;26510:4;26505:2;26497:6;26493:15;26486:29;26301:221;:::o;26528:366::-;26670:3;26691:67;26755:2;26750:3;26691:67;:::i;:::-;26684:74;;26767:93;26856:3;26767:93;:::i;:::-;26885:2;26880:3;26876:12;26869:19;;26528:366;;;:::o;26900:419::-;27066:4;27104:2;27093:9;27089:18;27081:26;;27153:9;27147:4;27143:20;27139:1;27128:9;27124:17;27117:47;27181:131;27307:4;27181:131;:::i;:::-;27173:139;;26900:419;;;:::o;27325:224::-;27465:34;27461:1;27453:6;27449:14;27442:58;27534:7;27529:2;27521:6;27517:15;27510:32;27325:224;:::o;27555:366::-;27697:3;27718:67;27782:2;27777:3;27718:67;:::i;:::-;27711:74;;27794:93;27883:3;27794:93;:::i;:::-;27912:2;27907:3;27903:12;27896:19;;27555:366;;;:::o;27927:419::-;28093:4;28131:2;28120:9;28116:18;28108:26;;28180:9;28174:4;28170:20;28166:1;28155:9;28151:17;28144:47;28208:131;28334:4;28208:131;:::i;:::-;28200:139;;27927:419;;;:::o;28352:222::-;28492:34;28488:1;28480:6;28476:14;28469:58;28561:5;28556:2;28548:6;28544:15;28537:30;28352:222;:::o;28580:366::-;28722:3;28743:67;28807:2;28802:3;28743:67;:::i;:::-;28736:74;;28819:93;28908:3;28819:93;:::i;:::-;28937:2;28932:3;28928:12;28921:19;;28580:366;;;:::o;28952:419::-;29118:4;29156:2;29145:9;29141:18;29133:26;;29205:9;29199:4;29195:20;29191:1;29180:9;29176:17;29169:47;29233:131;29359:4;29233:131;:::i;:::-;29225:139;;28952:419;;;:::o;29377:172::-;29517:24;29513:1;29505:6;29501:14;29494:48;29377:172;:::o;29555:366::-;29697:3;29718:67;29782:2;29777:3;29718:67;:::i;:::-;29711:74;;29794:93;29883:3;29794:93;:::i;:::-;29912:2;29907:3;29903:12;29896:19;;29555:366;;;:::o;29927:419::-;30093:4;30131:2;30120:9;30116:18;30108:26;;30180:9;30174:4;30170:20;30166:1;30155:9;30151:17;30144:47;30208:131;30334:4;30208:131;:::i;:::-;30200:139;;29927:419;;;:::o;30352:240::-;30492:34;30488:1;30480:6;30476:14;30469:58;30561:23;30556:2;30548:6;30544:15;30537:48;30352:240;:::o;30598:366::-;30740:3;30761:67;30825:2;30820:3;30761:67;:::i;:::-;30754:74;;30837:93;30926:3;30837:93;:::i;:::-;30955:2;30950:3;30946:12;30939:19;;30598:366;;;:::o;30970:419::-;31136:4;31174:2;31163:9;31159:18;31151:26;;31223:9;31217:4;31213:20;31209:1;31198:9;31194:17;31187:47;31251:131;31377:4;31251:131;:::i;:::-;31243:139;;30970:419;;;:::o;31395:169::-;31535:21;31531:1;31523:6;31519:14;31512:45;31395:169;:::o;31570:366::-;31712:3;31733:67;31797:2;31792:3;31733:67;:::i;:::-;31726:74;;31809:93;31898:3;31809:93;:::i;:::-;31927:2;31922:3;31918:12;31911:19;;31570:366;;;:::o;31942:419::-;32108:4;32146:2;32135:9;32131:18;32123:26;;32195:9;32189:4;32185:20;32181:1;32170:9;32166:17;32159:47;32223:131;32349:4;32223:131;:::i;:::-;32215:139;;31942:419;;;:::o;32367:241::-;32507:34;32503:1;32495:6;32491:14;32484:58;32576:24;32571:2;32563:6;32559:15;32552:49;32367:241;:::o;32614:366::-;32756:3;32777:67;32841:2;32836:3;32777:67;:::i;:::-;32770:74;;32853:93;32942:3;32853:93;:::i;:::-;32971:2;32966:3;32962:12;32955:19;;32614:366;;;:::o;32986:419::-;33152:4;33190:2;33179:9;33175:18;33167:26;;33239:9;33233:4;33229:20;33225:1;33214:9;33210:17;33203:47;33267:131;33393:4;33267:131;:::i;:::-;33259:139;;32986:419;;;:::o;33411:194::-;33451:4;33471:20;33489:1;33471:20;:::i;:::-;33466:25;;33505:20;33523:1;33505:20;:::i;:::-;33500:25;;33549:1;33546;33542:9;33534:17;;33573:1;33567:4;33564:11;33561:37;;;33578:18;;:::i;:::-;33561:37;33411:194;;;;:::o;33611:180::-;33659:77;33656:1;33649:88;33756:4;33753:1;33746:15;33780:4;33777:1;33770:15;33797:143;33854:5;33885:6;33879:13;33870:22;;33901:33;33928:5;33901:33;:::i;:::-;33797:143;;;;:::o;33946:351::-;34016:6;34065:2;34053:9;34044:7;34040:23;34036:32;34033:119;;;34071:79;;:::i;:::-;34033:119;34191:1;34216:64;34272:7;34263:6;34252:9;34248:22;34216:64;:::i;:::-;34206:74;;34162:128;33946:351;;;;:::o;34303:85::-;34348:7;34377:5;34366:16;;34303:85;;;:::o;34394:158::-;34452:9;34485:61;34503:42;34512:32;34538:5;34512:32;:::i;:::-;34503:42;:::i;:::-;34485:61;:::i;:::-;34472:74;;34394:158;;;:::o;34558:147::-;34653:45;34692:5;34653:45;:::i;:::-;34648:3;34641:58;34558:147;;:::o;34711:114::-;34778:6;34812:5;34806:12;34796:22;;34711:114;;;:::o;34831:184::-;34930:11;34964:6;34959:3;34952:19;35004:4;34999:3;34995:14;34980:29;;34831:184;;;;:::o;35021:132::-;35088:4;35111:3;35103:11;;35141:4;35136:3;35132:14;35124:22;;35021:132;;;:::o;35159:108::-;35236:24;35254:5;35236:24;:::i;:::-;35231:3;35224:37;35159:108;;:::o;35273:179::-;35342:10;35363:46;35405:3;35397:6;35363:46;:::i;:::-;35441:4;35436:3;35432:14;35418:28;;35273:179;;;;:::o;35458:113::-;35528:4;35560;35555:3;35551:14;35543:22;;35458:113;;;:::o;35607:732::-;35726:3;35755:54;35803:5;35755:54;:::i;:::-;35825:86;35904:6;35899:3;35825:86;:::i;:::-;35818:93;;35935:56;35985:5;35935:56;:::i;:::-;36014:7;36045:1;36030:284;36055:6;36052:1;36049:13;36030:284;;;36131:6;36125:13;36158:63;36217:3;36202:13;36158:63;:::i;:::-;36151:70;;36244:60;36297:6;36244:60;:::i;:::-;36234:70;;36090:224;36077:1;36074;36070:9;36065:14;;36030:284;;;36034:14;36330:3;36323:10;;35731:608;;;35607:732;;;;:::o;36345:831::-;36608:4;36646:3;36635:9;36631:19;36623:27;;36660:71;36728:1;36717:9;36713:17;36704:6;36660:71;:::i;:::-;36741:80;36817:2;36806:9;36802:18;36793:6;36741:80;:::i;:::-;36868:9;36862:4;36858:20;36853:2;36842:9;36838:18;36831:48;36896:108;36999:4;36990:6;36896:108;:::i;:::-;36888:116;;37014:72;37082:2;37071:9;37067:18;37058:6;37014:72;:::i;:::-;37096:73;37164:3;37153:9;37149:19;37140:6;37096:73;:::i;:::-;36345:831;;;;;;;;:::o;37182:225::-;37322:34;37318:1;37310:6;37306:14;37299:58;37391:8;37386:2;37378:6;37374:15;37367:33;37182:225;:::o;37413:366::-;37555:3;37576:67;37640:2;37635:3;37576:67;:::i;:::-;37569:74;;37652:93;37741:3;37652:93;:::i;:::-;37770:2;37765:3;37761:12;37754:19;;37413:366;;;:::o;37785:419::-;37951:4;37989:2;37978:9;37974:18;37966:26;;38038:9;38032:4;38028:20;38024:1;38013:9;38009:17;38002:47;38066:131;38192:4;38066:131;:::i;:::-;38058:139;;37785:419;;;:::o

Swarm Source

ipfs://7aabcf4e15f6614903f8e37456866d62a117ab6776a90fd28764fdcf59a8af4a

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.