ETH Price: $3,309.66 (-1.72%)
Gas: 1 Gwei

Contract

0x0BbD9b0dBFd70529c81c71BC550EC6B6CEb98E61
 

Overview

ETH Balance

0.005372524558161692 ETH

Eth Value

$17.78 (@ $3,309.66/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve175996202023-07-01 13:52:35394 days ago1688219555IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0009155219.66084903
Approve175353842023-06-22 13:13:59403 days ago1687439639IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0011254924.13883183
Approve175154102023-06-19 17:55:59406 days ago1687197359IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0007643516.39335347
Approve171455502023-04-28 15:35:23458 days ago1682696123IN
0x0BbD9b0d...6CEb98E61
0 ETH0.001050843.27486381
Approve171455402023-04-28 15:33:23458 days ago1682696003IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0017525837.6365271
Approve171444322023-04-28 11:49:47458 days ago1682682587IN
0x0BbD9b0d...6CEb98E61
0 ETH0.001924641.27740486
Approve170949842023-04-21 13:12:23465 days ago1682082743IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0023324250.02402764
Approve170949462023-04-21 13:04:47465 days ago1682082287IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0019896242.72702442
Transfer166720782023-02-20 20:17:23525 days ago1676924243IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0036511234.14311915
Approve166193252023-02-13 10:45:23532 days ago1676285123IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0008858119.02275826
Approve166134882023-02-12 15:10:35533 days ago1676214635IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0009720520.84799815
Approve165861822023-02-08 19:39:35537 days ago1675885175IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0018062438.73907883
Approve164415452023-01-19 14:47:47557 days ago1674139667IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0007976517.12945484
Approve164161882023-01-16 1:51:59561 days ago1673833919IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0006994515.0014939
Approve163966272023-01-13 8:17:47563 days ago1673597867IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0007699316.51299206
Approve163563482023-01-07 17:18:23569 days ago1673111903IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0008421418.06173862
Approve163052672022-12-31 14:13:23576 days ago1672496003IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0006177713.24958395
Approve162633812022-12-25 17:54:23582 days ago1671990863IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0005522311.84393544
Transfer162529422022-12-24 6:56:23583 days ago1671864983IN
0x0BbD9b0d...6CEb98E61
0 ETH0.001226512.03246906
Transfer162523202022-12-24 4:51:11584 days ago1671857471IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0010330411.85067685
Transfer162522982022-12-24 4:46:47584 days ago1671857207IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0013287412.1849741
Transfer162495742022-12-23 19:39:59584 days ago1671824399IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0015621915.32751171
Transfer162495572022-12-23 19:36:35584 days ago1671824195IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0012712814.5836733
Transfer162495342022-12-23 19:31:59584 days ago1671823919IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0015651315.01010233
Transfer162488222022-12-23 17:09:35584 days ago1671815375IN
0x0BbD9b0d...6CEb98E61
0 ETH0.0022737322.30615616
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
162342292022-12-21 16:20:11586 days ago1671639611
0x0BbD9b0d...6CEb98E61
0.00824946 ETH
162342292022-12-21 16:20:11586 days ago1671639611
0x0BbD9b0d...6CEb98E61
0.00824946 ETH
162329712022-12-21 12:07:23586 days ago1671624443
0x0BbD9b0d...6CEb98E61
0.00000701 ETH
162329712022-12-21 12:07:23586 days ago1671624443
0x0BbD9b0d...6CEb98E61
0.01285358 ETH
162329712022-12-21 12:07:23586 days ago1671624443
0x0BbD9b0d...6CEb98E61
0.01285358 ETH
162273872022-12-20 17:25:47587 days ago1671557147
0x0BbD9b0d...6CEb98E61
0.00043894 ETH
162273872022-12-20 17:25:47587 days ago1671557147
0x0BbD9b0d...6CEb98E61
0.04881887 ETH
162273872022-12-20 17:25:47587 days ago1671557147
0x0BbD9b0d...6CEb98E61
0.04881887 ETH
162034772022-12-17 9:19:35590 days ago1671268775
0x0BbD9b0d...6CEb98E61
0.00002594 ETH
162034772022-12-17 9:19:35590 days ago1671268775
0x0BbD9b0d...6CEb98E61
0.01550538 ETH
162034772022-12-17 9:19:35590 days ago1671268775
0x0BbD9b0d...6CEb98E61
0.01550538 ETH
162021172022-12-17 4:45:59591 days ago1671252359
0x0BbD9b0d...6CEb98E61
0.01124969 ETH
162021172022-12-17 4:45:59591 days ago1671252359
0x0BbD9b0d...6CEb98E61
0.01124969 ETH
161942842022-12-16 2:30:35592 days ago1671157835
0x0BbD9b0d...6CEb98E61
0.00000393 ETH
161942842022-12-16 2:30:35592 days ago1671157835
0x0BbD9b0d...6CEb98E61
0.01403425 ETH
161942842022-12-16 2:30:35592 days ago1671157835
0x0BbD9b0d...6CEb98E61
0.01403425 ETH
161686272022-12-12 12:28:35595 days ago1670848115
0x0BbD9b0d...6CEb98E61
0.00010659 ETH
161686272022-12-12 12:28:35595 days ago1670848115
0x0BbD9b0d...6CEb98E61
0.03078006 ETH
161686272022-12-12 12:28:35595 days ago1670848115
0x0BbD9b0d...6CEb98E61
0.03078006 ETH
161337492022-12-07 15:33:47600 days ago1670427227
0x0BbD9b0d...6CEb98E61
0.00002851 ETH
161337492022-12-07 15:33:47600 days ago1670427227
0x0BbD9b0d...6CEb98E61
0.02209199 ETH
161337492022-12-07 15:33:47600 days ago1670427227
0x0BbD9b0d...6CEb98E61
0.02209199 ETH
161252922022-12-06 10:55:47601 days ago1670324147
0x0BbD9b0d...6CEb98E61
0.0001154 ETH
161252922022-12-06 10:55:47601 days ago1670324147
0x0BbD9b0d...6CEb98E61
0.03039243 ETH
161252922022-12-06 10:55:47601 days ago1670324147
0x0BbD9b0d...6CEb98E61
0.03039243 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BoltInu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-05
*/

/*

Bolt Inu !! 
Dev Announcements - https://t.me/BoltInuAnnouncements
TG Community - https://t.me/BoltInuGlobal

*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

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

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);
}

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
    
    function renounceOwnership() public virtual onlyOwner() {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

abstract contract IERC20Extented is IERC20 {
    function decimals() external view virtual returns (uint8);
    function name() external view virtual returns (string memory);
    function symbol() external view virtual returns (string memory);
}

contract BoltInu is Context, IERC20, IERC20Extented, Ownable {
    using SafeMath for uint256;
    string private constant _name = "Bolt Inu";
    string private constant _symbol = "BOLT";
    uint8 private constant _decimals = 18;
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant _tTotal = 100000000000 * 10**18; // 100 Billion
    uint256 private _firstBlock;
    uint256 private _botBlocks;
    uint256 public _maxWalletAmount;
    uint256 private _maxSell;
    uint256 private _maxBuy;
    uint256 public numTokensToSwap = 200000000 * 10**18; // 0.2%

    // buy fees
    uint256 public _buyLiquidityFee = 0; // divided by 1000
    uint256 private _previousBuyLiquidityFee = _buyLiquidityFee;
    uint256 public _buyEcosystemFee = 0; // divided by 1000
    uint256 private _previousBuyEcosystemFee = _buyEcosystemFee;
    uint256 public _buyMarketingFee = 0; // divided by 1000
    uint256 private _previousBuyMarketingFee = _buyMarketingFee;
    uint256 public _buyTeamFee = 0; // divided by 1000
    uint256 private _previousBuyTeamFee = _buyTeamFee;

    // sell fees
    uint256 public _sellLiquidityFee = 0; // divided by 1000
    uint256 private _previousSellLiquidityFee = _sellLiquidityFee;
    uint256 public _sellEcosystemFee = 0; // divided by 1000
    uint256 private _previousSellEcosystemFee = _sellEcosystemFee;
    uint256 public _sellMarketingFee = 0; // divided by 1000
    uint256 private _previousSellMarketingFee = _sellMarketingFee;
    uint256 public _sellTeamFee = 0; // divided by 1000
    uint256 private _previousSellTeamFee = _sellTeamFee;
    uint256 public transferFeeIncreaseFactor = 100; // divided by 100

    struct FeeBreakdown {
        uint256 tLiquidity;
        uint256 tMarketing;
        uint256 tTeam;
        uint256 tEcosystem;
        uint256 tAmount;
    }

    mapping(address => bool) private bots;
    address payable private _marketingAddress = payable(0x000000000000000000000000000000000000dEaD);
    address payable private _teamAddress = payable(0x000000000000000000000000000000000000dEaD);
    address payable private _ecosystemAddress = payable(0x000000000000000000000000000000000000dEaD);
    address payable private _lpRecipient;
    IUniswapV2Router02 private uniswapV2Router;
    address public uniswapV2Pair;
    uint256 private _maxTxAmount;

    bool public tradingOpen = false;
    bool private inSwap = false;
    bool public canPause = true;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    event BuyFeesUpdated(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _buyTeamFee, uint256 _buyEcosystemFee);
    event SellFeesUpdated(uint256 _sellMarketingFee, uint256 _sellLiquidityFee, uint256 _sellTeamFee, uint256 _sellEcosystemFee);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router),type(uint256).max);

        _maxTxAmount = _tTotal; // start off transaction limit at 100% of total supply
        _maxWalletAmount = _tTotal; // 100%
        _maxBuy = _tTotal; // 100%
        _maxSell = _tTotal; // 100%

        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _lpRecipient = payable(owner());
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() override external pure returns (string memory) {
        return _name;
    }

    function symbol() override external pure returns (string memory) {
        return _symbol;
    }

    function decimals() override external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

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

    function isBot(address account) public view returns (bool) {
        return bots[account];
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,"ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function removeAllFee() private {
        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        _previousBuyTeamFee = _buyTeamFee;
        _previousBuyEcosystemFee = _buyEcosystemFee;
        
        _buyMarketingFee = 0;
        _buyLiquidityFee = 0;
        _buyTeamFee = 0;
        _buyEcosystemFee = 0;

        _previousSellMarketingFee = _sellMarketingFee;
        _previousSellLiquidityFee = _sellLiquidityFee;
        _previousSellTeamFee = _sellTeamFee;
        _previousSellEcosystemFee = _sellEcosystemFee;
        
        _sellMarketingFee = 0;
        _sellLiquidityFee = 0;
        _sellTeamFee = 0;
        _sellEcosystemFee = 0;
    }
    
    function restoreAllFee() private {
        _buyMarketingFee = _previousBuyMarketingFee;
        _buyLiquidityFee = _previousBuyLiquidityFee;
        _buyTeamFee = _previousBuyTeamFee;
        _buyEcosystemFee = _previousBuyEcosystemFee;

        _sellMarketingFee = _previousSellMarketingFee;
        _sellLiquidityFee = _previousSellLiquidityFee;
        _sellTeamFee = _previousSellTeamFee;
        _sellEcosystemFee = _previousSellEcosystemFee;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        bool takeFee = true;

        if (from != owner() && to != owner() && from != address(this) && to != address(this)) {
            require(tradingOpen, "Trading is not active");
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {//buys

                if (block.timestamp <= _firstBlock.add(_botBlocks)) {
                    bots[to] = true;
                }
                require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");
                require(amount <= _maxBuy, "Amount exceeds maximum buy limit");
            }
            
            if (!inSwap && from != uniswapV2Pair && to == uniswapV2Pair) { //sells
                require(!bots[from] && !bots[to]);
                require(amount <= _maxSell, "Amount exceeds maximum sell limit");
                
                uint256 contractTokenBalance = balanceOf(address(this));

                if (contractTokenBalance >= numTokensToSwap) {
                    if (contractTokenBalance > 0) {
                        if (_sellMarketingFee.add(_sellTeamFee).add(_sellEcosystemFee).add(_sellLiquidityFee) > 0) {
                            uint256 autoLPamount = _sellLiquidityFee.mul(contractTokenBalance).div(_sellMarketingFee.add(_sellTeamFee).add(_sellEcosystemFee).add(_sellLiquidityFee));
                            uint256 minusLP = 0;
                            if (contractTokenBalance >= autoLPamount) {
                                minusLP = contractTokenBalance.sub(autoLPamount);
                            }
                            swapAndLiquify(autoLPamount, minusLP);
                        }
                    }
                    uint256 contractETHBalance = address(this).balance;
                    if (contractETHBalance > 0) {
                        sendETHToFee(address(this).balance);
                    }
                }
                    
            }

            if(from != uniswapV2Pair && to != uniswapV2Pair) { //transfers
                
                require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");

            }
        }

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        
        _tokenTransfer(from, to, amount, takeFee);
    }   

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
              address(this),
              tokenAmount,
              0, // slippage is unavoidable
              0, // slippage is unavoidable
              _lpRecipient,
              block.timestamp
          );
    }
  
    function swapAndLiquify(uint256 lpAmount, uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = lpAmount.div(2);
        uint256 otherHalf = lpAmount.sub(half);

        // capture the contract's current BNB balance.
        // this is so that we can capture exactly the amount of BNB that the
        // swap creates, and not make the liquidity event include any BNB that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for BNB
        swapTokensForEth(contractTokenBalance.add(half)); // <- this breaks the BNB -> HATE swap when swap+liquify is triggered

        // how much BNB did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to pancakeswap
        if (otherHalf > 0) {
            addLiquidity(otherHalf, newBalance.mul(half).div(contractTokenBalance.add(half)));
        }
    }

    function sendETHToFee(uint256 amount) private {
        uint256 totalFees = _sellMarketingFee.add(_sellEcosystemFee).add(_sellTeamFee);
        if (totalFees != 0) {
            uint256 marketingPortion = amount.mul(_sellMarketingFee).div(totalFees);
            uint256 teamPortion = amount.mul(_sellTeamFee).div(totalFees);
            uint256 ecoPortion = amount.sub(marketingPortion).sub(teamPortion);
            if (marketingPortion > 0) {
                _marketingAddress.transfer(marketingPortion);
            }
            if (teamPortion > 0) {
                _teamAddress.transfer(teamPortion);
            }
            if (ecoPortion > 0) {
                _ecosystemAddress.transfer(ecoPortion);
            }
        }
    }

    function openTrading(uint256 botBlocks) external onlyOwner() {
        _firstBlock = block.timestamp;
        _botBlocks = botBlocks;
        tradingOpen = true;
    }

    function enableToken() external onlyOwner() {
        tradingOpen = true;
    }

    function disableToken() external onlyOwner() {
        require(canPause, "this contract cannot be paused");
        tradingOpen = false;
    }

    function disablePauseAbility() onlyOwner() external {
        canPause = false;
    }

    function manualswap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance > 0) {
            swapTokensForEth(contractBalance);
        }
    }

    function manualsend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            payable(address(owner())).transfer(contractETHBalance);
        }
    }

    function manualSendToken(address token) external onlyOwner() {
        uint256 amount = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(owner(), amount);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee) { 
                removeAllFee();
        }
        _transferStandard(sender, recipient, amount);
        restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 amount) private {
        FeeBreakdown memory fees;
        if (sender == uniswapV2Pair && recipient != address(uniswapV2Router)) {//buys
            fees.tMarketing = amount.mul(_buyMarketingFee).div(1000);
            fees.tLiquidity = amount.mul(_buyLiquidityFee).div(1000);
            fees.tTeam = amount.mul(_buyTeamFee).div(1000);
            fees.tEcosystem = amount.mul(_buyEcosystemFee).div(1000);
        }
        if (sender != uniswapV2Pair && recipient == uniswapV2Pair) {//sells
            fees.tMarketing = amount.mul(_sellMarketingFee).div(1000);
            fees.tLiquidity = amount.mul(_sellLiquidityFee).div(1000);
            fees.tTeam = amount.mul(_sellTeamFee).div(1000);
            fees.tEcosystem = amount.mul(_sellEcosystemFee).div(1000);
        }
        if (sender != uniswapV2Pair && recipient != uniswapV2Pair) {//transfer
            fees.tMarketing = (amount.mul(_sellMarketingFee).div(1000)).mul(transferFeeIncreaseFactor).div(100);
            fees.tLiquidity = (amount.mul(_sellLiquidityFee).div(1000)).mul(transferFeeIncreaseFactor).div(100);
            fees.tTeam = (amount.mul(_sellTeamFee).div(1000)).mul(transferFeeIncreaseFactor).div(100);
            fees.tEcosystem = (amount.mul(_sellEcosystemFee).div(1000)).mul(transferFeeIncreaseFactor).div(100);
        }
        
        fees.tAmount = amount.sub(fees.tMarketing).sub(fees.tLiquidity).sub(fees.tTeam).sub(fees.tEcosystem);
        
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(fees.tAmount);
        _balances[address(this)] = _balances[address(this)].add(fees.tMarketing.add(fees.tLiquidity).add(fees.tTeam).add(fees.tEcosystem));
        
        emit Transfer(sender, recipient, fees.tAmount);
    }
    
    receive() external payable {}

    function excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = false;
    }
    
    function removeBot(address account) external onlyOwner() {
        bots[account] = false;
    }

    function addBot(address account) external onlyOwner() {
        bots[account] = true;
    }
    
    function setTransferTransactionMultiplier(uint256 _multiplier) external onlyOwner() {
        transferFeeIncreaseFactor = _multiplier;
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        require(maxWalletAmount >= _tTotal.div(1000), "Amount must be greater than 0.1% of supply");
        require(maxWalletAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxWalletAmount = maxWalletAmount;
    }

    function setBuyTaxes(uint256 marketingFee, uint256 liquidityFee, uint256 teamFee, uint256 ecosystemFee) external onlyOwner() {
        uint256 totalFee = marketingFee.add(liquidityFee).add(teamFee).add(ecosystemFee);
        require(totalFee <= 100, "Sum of buy fees must be less than or equal to 10%");

        _buyMarketingFee = marketingFee;
        _buyLiquidityFee = liquidityFee;
        _buyTeamFee = teamFee;
        _buyEcosystemFee = ecosystemFee;
        
        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        _previousBuyTeamFee = _buyTeamFee;
        _previousBuyEcosystemFee = _buyEcosystemFee;
        
        emit BuyFeesUpdated(marketingFee, liquidityFee, teamFee, ecosystemFee);
    }

    function setSellTaxes(uint256 marketingFee, uint256 liquidityFee, uint256 teamFee, uint256 ecosystemFee) external onlyOwner() {
        uint256 totalFee = marketingFee.add(liquidityFee).add(teamFee).add(ecosystemFee);
        require(totalFee <= 120, "Sum of buy fees must be less than or equal to 12%");

        _sellMarketingFee = marketingFee;
        _sellLiquidityFee = liquidityFee;
        _sellTeamFee = teamFee;
        _sellEcosystemFee = ecosystemFee;
        
        _previousSellMarketingFee = _sellMarketingFee;
        _previousSellLiquidityFee = _sellLiquidityFee;
        _previousSellTeamFee = _sellTeamFee;
        _previousSellEcosystemFee = _sellEcosystemFee;
        
        emit SellFeesUpdated(marketingFee, liquidityFee, teamFee, ecosystemFee);
    }
    
    function updateMaxSell(uint256 maxSell) external onlyOwner() {
        require(maxSell >= _tTotal.div(1000) , "cant make the limit lower than 0.1% of the supply");
        _maxSell = maxSell;
    }
    
    function updateMaxBuy(uint256 maxBuy) external onlyOwner() {
        require(maxBuy >= _tTotal.div(1000) , "cant make the limit lower than 0.1% of the supply");
        _maxBuy = maxBuy;
    }

    function updateEcosystemAddress(address payable ecosystemAddress) external onlyOwner() {
        _ecosystemAddress = ecosystemAddress;
    }
    
    function updateMarketingAddress(address payable marketingAddress) external onlyOwner() {
        _marketingAddress = marketingAddress;
    }
    
    function updateTeamAddress(address payable teamAddress) external onlyOwner() {
        _teamAddress = teamAddress;
    } 

    function updateLpRecipient(address payable lpRecipient) external onlyOwner() {
        _lpRecipient = lpRecipient;
    }

    function updateNumTokensToSwap(uint256 numTokens) external onlyOwner() {
        numTokensToSwap = numTokens;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyTeamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyEcosystemFee","type":"uint256"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellTeamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellEcosystemFee","type":"uint256"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyEcosystemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellEcosystemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disablePauseAbility","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"manualSendToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"teamFee","type":"uint256"},{"internalType":"uint256","name":"ecosystemFee","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"teamFee","type":"uint256"},{"internalType":"uint256","name":"ecosystemFee","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"setTransferTransactionMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFeeIncreaseFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"ecosystemAddress","type":"address"}],"name":"updateEcosystemAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"lpRecipient","type":"address"}],"name":"updateLpRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"updateMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"updateMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"updateNumTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"teamAddress","type":"address"}],"name":"updateTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526aa56fa5b99019a5c8000000600a556000600b819055600c819055600d819055600e819055600f8190556010819055601181905560128190556013819055601481905560158190556016819055601781905560188190556019819055601a556064601b55601d80546001600160a01b031990811661dead908117909255601e8054821683179055601f805490911690911790556024805462ffffff191662010000179055348015620000b557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350602180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556200013a30826c01431e0fae6d7217caa000000062000411565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200017457600080fd5b505afa15801562000189573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001af91906200053d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f857600080fd5b505afa1580156200020d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023391906200053d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200027c57600080fd5b505af115801562000291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b791906200053d565b602280546001600160a01b0319166001600160a01b0392831690811790915560215460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b390604401602060405180830381600087803b1580156200031a57600080fd5b505af11580156200032f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035591906200056d565b506c01431e0fae6d7217caa0000000602381905560078190556009819055600881905533600081815260026020908152604080832085905582546001600160a01b03908116845260048352818420805460ff199081166001908117909255855485546001600160a01b0319169316929092178455308552828520805490921617905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200058f565b6001600160a01b038316620004795760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000470565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000602082840312156200054f578081fd5b81516001600160a01b038116811462000566578182fd5b9392505050565b6000602082840312156200057f578081fd5b8151801515811462000566578182fd5b6129df806200059f6000396000f3fe6080604052600436106102b25760003560e01c806372b2aecc11610175578063cab03471116100dc578063e315a6da11610095578063f2fde38b1161006f578063f2fde38b14610861578063f480fec214610881578063ffb54a99146108a1578063ffecf516146108bb57600080fd5b8063e315a6da14610801578063e4bf1bed14610821578063ea2f0b371461084157600080fd5b8063cab034711461072f578063cdb3858f14610745578063d163364914610765578063db0045ec14610785578063dc44b6a0146107a5578063dd62ed3e146107bb57600080fd5b8063a850673d1161012e578063a850673d14610698578063a9059cbb146106b8578063c3c8cd80146106d8578063c469b6dd146106ed578063c5d2418914610703578063c86079521461071957600080fd5b806372b2aecc146105ec57806388790a68146106025780638da5cb5b146106185780638e360253146106365780639164f9db1461064b57806395d89b411461066b57600080fd5b8063323be1c5116102195780635fecd926116101d25780635fecd926146105415780636aabff3f146105615780636c0a24eb146105765780636fc3eaec1461058c57806370a08231146105a1578063715018a6146105d757600080fd5b8063323be1c51461045b5780633bbac5791461047b5780633e0f966d146104b4578063437823ec146104c957806349bd5a5e146104e9578063588813041461052157600080fd5b806323b872dd1161026b57806323b872dd146103b3578063248dd232146103d357806327a14fc2146103e95780632843631d14610409578063294093951461041f578063313ce5671461043f57600080fd5b806301a6c43b146102be57806306fdde03146102e7578063095ea7b31461032157806314eb76ac1461035157806318160ddd146103735780632369bf831461039357600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d4600a5481565b6040519081526020015b60405180910390f35b3480156102f357600080fd5b50604080518082019091526008815267426f6c7420496e7560c01b60208201525b6040516102de9190612738565b34801561032d57600080fd5b5061034161033c36600461265f565b6108db565b60405190151581526020016102de565b34801561035d57600080fd5b5061037161036c3660046125af565b6108f2565b005b34801561037f57600080fd5b506c01431e0fae6d7217caa00000006102d4565b34801561039f57600080fd5b506103716103ae3660046125af565b610947565b3480156103bf57600080fd5b506103416103ce36600461261f565b610993565b3480156103df57600080fd5b506102d460155481565b3480156103f557600080fd5b506103716104043660046126aa565b6109fc565b34801561041557600080fd5b506102d4600d5481565b34801561042b57600080fd5b5061037161043a3660046125af565b610b1c565b34801561044b57600080fd5b50604051601281526020016102de565b34801561046757600080fd5b506024546103419062010000900460ff1681565b34801561048757600080fd5b506103416104963660046125af565b6001600160a01b03166000908152601c602052604090205460ff1690565b3480156104c057600080fd5b50610371610c68565b3480156104d557600080fd5b506103716104e43660046125af565b610cf6565b3480156104f557600080fd5b50602254610509906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b34801561052d57600080fd5b5061037161053c3660046126aa565b610d44565b34801561054d57600080fd5b5061037161055c3660046125af565b610dab565b34801561056d57600080fd5b50610371610df6565b34801561058257600080fd5b506102d460075481565b34801561059857600080fd5b50610371610e2e565b3480156105ad57600080fd5b506102d46105bc3660046125af565b6001600160a01b031660009081526002602052604090205490565b3480156105e357600080fd5b50610371610e9d565b3480156105f857600080fd5b506102d4601b5481565b34801561060e57600080fd5b506102d460135481565b34801561062457600080fd5b506000546001600160a01b0316610509565b34801561064257600080fd5b50610371610f11565b34801561065757600080fd5b506103716106663660046126aa565b610f4a565b34801561067757600080fd5b506040805180820190915260048152631093d31560e21b6020820152610314565b3480156106a457600080fd5b506103716106b33660046126aa565b610fb1565b3480156106c457600080fd5b506103416106d336600461265f565b610fe0565b3480156106e457600080fd5b50610371610fed565b3480156106f957600080fd5b506102d460115481565b34801561070f57600080fd5b506102d4600f5481565b34801561072557600080fd5b506102d460175481565b34801561073b57600080fd5b506102d460195481565b34801561075157600080fd5b506103716107603660046125af565b611036565b34801561077157600080fd5b506103716107803660046126aa565b611082565b34801561079157600080fd5b506103716107a03660046125af565b6110c2565b3480156107b157600080fd5b506102d4600b5481565b3480156107c757600080fd5b506102d46107d63660046125e7565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561080d57600080fd5b5061037161081c3660046126aa565b61110e565b34801561082d57600080fd5b5061037161083c366004612707565b61113d565b34801561084d57600080fd5b5061037161085c3660046125af565b611264565b34801561086d57600080fd5b5061037161087c3660046125af565b6112af565b34801561088d57600080fd5b5061037161089c366004612707565b611347565b3480156108ad57600080fd5b506024546103419060ff1681565b3480156108c757600080fd5b506103716108d63660046125af565b61145d565b60006108e83384846114ab565b5060015b92915050565b6000546001600160a01b031633146109255760405162461bcd60e51b815260040161091c906127f2565b60405180910390fd5b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109715760405162461bcd60e51b815260040161091c906127f2565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b60006109a08484846115cf565b6109f284336109ed85604051806060016040528060288152602001612982602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611b2a565b6114ab565b5060019392505050565b6000546001600160a01b03163314610a265760405162461bcd60e51b815260040161091c906127f2565b610a3f6c01431e0fae6d7217caa00000006103e8611b64565b811015610aa15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e3125604482015269206f6620737570706c7960b01b606482015260840161091c565b6c01431e0fae6d7217caa0000000811115610b175760405162461bcd60e51b815260206004820152603060248201527f416d6f756e74206d757374206265206c657373207468616e206f72206571756160448201526f6c20746f20746f74616c537570706c7960801b606482015260840161091c565b600755565b6000546001600160a01b03163314610b465760405162461bcd60e51b815260040161091c906127f2565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610b8857600080fd5b505afa158015610b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc091906126c2565b9050816001600160a01b031663a9059cbb610be36000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610c2b57600080fd5b505af1158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c63919061268a565b505050565b6000546001600160a01b03163314610c925760405162461bcd60e51b815260040161091c906127f2565b60245462010000900460ff16610cea5760405162461bcd60e51b815260206004820152601e60248201527f7468697320636f6e74726163742063616e6e6f74206265207061757365640000604482015260640161091c565b6024805460ff19169055565b6000546001600160a01b03163314610d205760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610d6e5760405162461bcd60e51b815260040161091c906127f2565b610d876c01431e0fae6d7217caa00000006103e8611b64565b811015610da65760405162461bcd60e51b815260040161091c90612827565b600955565b6000546001600160a01b03163314610dd55760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03166000908152601c60205260409020805460ff19169055565b6000546001600160a01b03163314610e205760405162461bcd60e51b815260040161091c906127f2565b6024805462ff000019169055565b6000546001600160a01b03163314610e585760405162461bcd60e51b815260040161091c906127f2565b478015610e9a57600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610e98573d6000803e3d6000fd5b505b50565b6000546001600160a01b03163314610ec75760405162461bcd60e51b815260040161091c906127f2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f3b5760405162461bcd60e51b815260040161091c906127f2565b6024805460ff19166001179055565b6000546001600160a01b03163314610f745760405162461bcd60e51b815260040161091c906127f2565b610f8d6c01431e0fae6d7217caa00000006103e8611b64565b811015610fac5760405162461bcd60e51b815260040161091c90612827565b600855565b6000546001600160a01b03163314610fdb5760405162461bcd60e51b815260040161091c906127f2565b601b55565b60006108e83384846115cf565b6000546001600160a01b031633146110175760405162461bcd60e51b815260040161091c906127f2565b306000908152600260205260409020548015610e9a57610e9a81611bad565b6000546001600160a01b031633146110605760405162461bcd60e51b815260040161091c906127f2565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110ac5760405162461bcd60e51b815260040161091c906127f2565b426005556006556024805460ff19166001179055565b6000546001600160a01b031633146110ec5760405162461bcd60e51b815260040161091c906127f2565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111385760405162461bcd60e51b815260040161091c906127f2565b600a55565b6000546001600160a01b031633146111675760405162461bcd60e51b815260040161091c906127f2565b600061117f8261117985818989611d4c565b90611d4c565b905060648111156111ec5760405162461bcd60e51b815260206004820152603160248201527f53756d206f66206275792066656573206d757374206265206c657373207468616044820152706e206f7220657175616c20746f2031302560781b606482015260840161091c565b600f859055600b8490556011839055600d8290556010859055600c8490556012839055600e8290556040805186815260208101869052908101849052606081018390527f892b2caa2d791bf7b8d9a49c4db7a4513ff1ae2e0e068ed217f9d5ab4c1a28f0906080015b60405180910390a15050505050565b6000546001600160a01b0316331461128e5760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146112d95760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03811661133e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161091c565b610e9a81611dab565b6000546001600160a01b031633146113715760405162461bcd60e51b815260040161091c906127f2565b60006113838261117985818989611d4c565b905060788111156113f05760405162461bcd60e51b815260206004820152603160248201527f53756d206f66206275792066656573206d757374206265206c657373207468616044820152706e206f7220657175616c20746f2031322560781b606482015260840161091c565b601785905560138490556019839055601582905560188590556014849055601a83905560168290556040805186815260208101869052908101849052606081018390527f439932620c72dddea29980c098bca1a482729646d1216b226d723c6d278a30d190608001611255565b6000546001600160a01b031633146114875760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b6001600160a01b03831661150d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161091c565b6001600160a01b03821661156e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161091c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161091c565b6001600160a01b0382166116955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161091c565b600081116116f75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161091c565b600161170b6000546001600160a01b031690565b6001600160a01b0316846001600160a01b03161415801561173a57506000546001600160a01b03848116911614155b801561174f57506001600160a01b0384163014155b801561176457506001600160a01b0383163014155b15611ad05760245460ff166117b35760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b604482015260640161091c565b6022546001600160a01b0385811691161480156117de57506021546001600160a01b03848116911614155b156118b2576006546005546117f291611d4c565b421161181c576001600160a01b0383166000908152601c60205260409020805460ff191660011790555b60075461184283611179866001600160a01b031660009081526002602052604090205490565b11156118605760405162461bcd60e51b815260040161091c9061278b565b6009548211156118b25760405162461bcd60e51b815260206004820181905260248201527f416d6f756e742065786365656473206d6178696d756d20627579206c696d6974604482015260640161091c565b602454610100900460ff161580156118d857506022546001600160a01b03858116911614155b80156118f157506022546001600160a01b038481169116145b15611a5b576001600160a01b0384166000908152601c602052604090205460ff1615801561193857506001600160a01b0383166000908152601c602052604090205460ff16155b61194157600080fd5b60085482111561199d5760405162461bcd60e51b815260206004820152602160248201527f416d6f756e742065786365656473206d6178696d756d2073656c6c206c696d696044820152601d60fa1b606482015260840161091c565b30600090815260026020526040902054600a548110611a59578015611a475760006119e1601354611179601554611179601954601754611d4c90919063ffffffff16565b1115611a47576000611a22611a0f601354611179601554611179601954601754611d4c90919063ffffffff16565b601354611a1c9085611dfb565b90611b64565b90506000818310611a3a57611a378383611e7a565b90505b611a448282611ebc565b50505b478015611a5757611a5747611f2f565b505b505b6022546001600160a01b03858116911614801590611a8757506022546001600160a01b03848116911614155b15611ad057600754611ab283611179866001600160a01b031660009081526002602052604090205490565b1115611ad05760405162461bcd60e51b815260040161091c9061278b565b6001600160a01b03841660009081526004602052604090205460ff1680611b0f57506001600160a01b03831660009081526004602052604090205460ff165b15611b18575060005b611b2484848484612075565b50505050565b60008184841115611b4e5760405162461bcd60e51b815260040161091c9190612738565b506000611b5b848661293f565b95945050505050565b6000611ba683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612113565b9392505050565b6024805461ff0019166101001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611bff57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611c5357600080fd5b505afa158015611c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8b91906125cb565b81600181518110611cac57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602154611cd291309116846114ab565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d0b908590600090869030904290600401612878565b600060405180830381600087803b158015611d2557600080fd5b505af1158015611d39573d6000803e3d6000fd5b50506024805461ff001916905550505050565b600080611d5983856128e8565b905083811015611ba65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161091c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082611e0a575060006108ec565b6000611e168385612920565b905082611e238583612900565b14611ba65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161091c565b6000611ba683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b2a565b6024805461ff0019166101001790556000611ed8836002611b64565b90506000611ee68483611e7a565b905047611efb611ef68585611d4c565b611bad565b6000611f074783611e7a565b90508215611d3957611d3983611f2a611f208888611d4c565b611a1c8589611dfb565b612141565b6000611f4e601954611179601554601754611d4c90919063ffffffff16565b90508015610e98576000611f7182611a1c60175486611dfb90919063ffffffff16565b90506000611f8e83611a1c60195487611dfb90919063ffffffff16565b90506000611fa682611fa08786611e7a565b90611e7a565b90508215611fea57601d546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611fe8573d6000803e3d6000fd5b505b811561202c57601e546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561202a573d6000803e3d6000fd5b505b801561206e57601f546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561206c573d6000803e3d6000fd5b505b5050505050565b806120d3576120d3600f8054601055600b8054600c5560118054601255600d8054600e5560009384905591839055829055819055601780546018556013805460145560198054601a5560158054601655928490559083905582905555565b6120de8484846121fd565b611b24601054600f55600c54600b55601254601155600e54600d55601854601755601454601355601a54601955601654601555565b600081836121345760405162461bcd60e51b815260040161091c9190612738565b506000611b5b8486612900565b6021546121599030906001600160a01b0316846114ab565b60215460205460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156121c457600080fd5b505af11580156121d8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061206e91906126da565b61222f6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6022546001600160a01b03858116911614801561225a57506021546001600160a01b03848116911614155b156122ce5761227a6103e8611a1c600f5485611dfb90919063ffffffff16565b6020820152600b54612295906103e890611a1c908590611dfb565b81526011546122ad906103e890611a1c908590611dfb565b6040820152600d546122c8906103e890611a1c908590611dfb565b60608201525b6022546001600160a01b038581169116148015906122f957506022546001600160a01b038481169116145b1561236d576123196103e8611a1c60175485611dfb90919063ffffffff16565b6020820152601354612334906103e890611a1c908590611dfb565b815260195461234c906103e890611a1c908590611dfb565b6040820152601554612367906103e890611a1c908590611dfb565b60608201525b6022546001600160a01b0385811691161480159061239957506022546001600160a01b03848116911614155b15612453576123ca6064611a1c601b546123c46103e8611a1c60175489611dfb90919063ffffffff16565b90611dfb565b8160200181815250506123f96064611a1c601b546123c46103e8611a1c60135489611dfb90919063ffffffff16565b8152601b5460195461241e91606491611a1c91906123c4906103e89084908990611dfb565b81604001818152505061244d6064611a1c601b546123c46103e8611a1c60155489611dfb90919063ffffffff16565b60608201525b6124828160600151611fa08360400151611fa08560000151611fa0876020015189611e7a90919063ffffffff16565b60808201526001600160a01b0384166000908152600260205260409020546124aa9083611e7a565b6001600160a01b03808616600090815260026020526040808220939093556080840151918616815291909120546124e091611d4c565b60026000856001600160a01b03166001600160a01b031681526020019081526020016000208190555061254d6125378260600151611179846040015161117986600001518760200151611d4c90919063ffffffff16565b3060009081526002602052604090205490611d4c565b3060009081526002602090815260409182902092909255608083015190519081526001600160a01b0385811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6000602082840312156125c0578081fd5b8135611ba68161296c565b6000602082840312156125dc578081fd5b8151611ba68161296c565b600080604083850312156125f9578081fd5b82356126048161296c565b915060208301356126148161296c565b809150509250929050565b600080600060608486031215612633578081fd5b833561263e8161296c565b9250602084013561264e8161296c565b929592945050506040919091013590565b60008060408385031215612671578182fd5b823561267c8161296c565b946020939093013593505050565b60006020828403121561269b578081fd5b81518015158114611ba6578182fd5b6000602082840312156126bb578081fd5b5035919050565b6000602082840312156126d3578081fd5b5051919050565b6000806000606084860312156126ee578283fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561271c578081fd5b5050823594602084013594506040840135936060013592509050565b6000602080835283518082850152825b8181101561276457858101830151858201604001528201612748565b818111156127755783604083870101525b50601f01601f1916929092016040019392505050565b60208082526041908201527f77616c6c65742062616c616e6365206166746572207472616e73666572206d7560408201527f7374206265206c657373207468616e206d61782077616c6c657420616d6f756e6060820152601d60fa1b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f63616e74206d616b6520746865206c696d6974206c6f776572207468616e20306040820152702e3125206f662074686520737570706c7960781b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156128c75784516001600160a01b0316835293830193918301916001016128a2565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156128fb576128fb612956565b500190565b60008261291b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561293a5761293a612956565b500290565b60008282101561295157612951612956565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610e9a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220eb61fb348261ea181f656a2ba8574c58b93b3da4da8f7137b0c7a00b35aa978764736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806372b2aecc11610175578063cab03471116100dc578063e315a6da11610095578063f2fde38b1161006f578063f2fde38b14610861578063f480fec214610881578063ffb54a99146108a1578063ffecf516146108bb57600080fd5b8063e315a6da14610801578063e4bf1bed14610821578063ea2f0b371461084157600080fd5b8063cab034711461072f578063cdb3858f14610745578063d163364914610765578063db0045ec14610785578063dc44b6a0146107a5578063dd62ed3e146107bb57600080fd5b8063a850673d1161012e578063a850673d14610698578063a9059cbb146106b8578063c3c8cd80146106d8578063c469b6dd146106ed578063c5d2418914610703578063c86079521461071957600080fd5b806372b2aecc146105ec57806388790a68146106025780638da5cb5b146106185780638e360253146106365780639164f9db1461064b57806395d89b411461066b57600080fd5b8063323be1c5116102195780635fecd926116101d25780635fecd926146105415780636aabff3f146105615780636c0a24eb146105765780636fc3eaec1461058c57806370a08231146105a1578063715018a6146105d757600080fd5b8063323be1c51461045b5780633bbac5791461047b5780633e0f966d146104b4578063437823ec146104c957806349bd5a5e146104e9578063588813041461052157600080fd5b806323b872dd1161026b57806323b872dd146103b3578063248dd232146103d357806327a14fc2146103e95780632843631d14610409578063294093951461041f578063313ce5671461043f57600080fd5b806301a6c43b146102be57806306fdde03146102e7578063095ea7b31461032157806314eb76ac1461035157806318160ddd146103735780632369bf831461039357600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d4600a5481565b6040519081526020015b60405180910390f35b3480156102f357600080fd5b50604080518082019091526008815267426f6c7420496e7560c01b60208201525b6040516102de9190612738565b34801561032d57600080fd5b5061034161033c36600461265f565b6108db565b60405190151581526020016102de565b34801561035d57600080fd5b5061037161036c3660046125af565b6108f2565b005b34801561037f57600080fd5b506c01431e0fae6d7217caa00000006102d4565b34801561039f57600080fd5b506103716103ae3660046125af565b610947565b3480156103bf57600080fd5b506103416103ce36600461261f565b610993565b3480156103df57600080fd5b506102d460155481565b3480156103f557600080fd5b506103716104043660046126aa565b6109fc565b34801561041557600080fd5b506102d4600d5481565b34801561042b57600080fd5b5061037161043a3660046125af565b610b1c565b34801561044b57600080fd5b50604051601281526020016102de565b34801561046757600080fd5b506024546103419062010000900460ff1681565b34801561048757600080fd5b506103416104963660046125af565b6001600160a01b03166000908152601c602052604090205460ff1690565b3480156104c057600080fd5b50610371610c68565b3480156104d557600080fd5b506103716104e43660046125af565b610cf6565b3480156104f557600080fd5b50602254610509906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b34801561052d57600080fd5b5061037161053c3660046126aa565b610d44565b34801561054d57600080fd5b5061037161055c3660046125af565b610dab565b34801561056d57600080fd5b50610371610df6565b34801561058257600080fd5b506102d460075481565b34801561059857600080fd5b50610371610e2e565b3480156105ad57600080fd5b506102d46105bc3660046125af565b6001600160a01b031660009081526002602052604090205490565b3480156105e357600080fd5b50610371610e9d565b3480156105f857600080fd5b506102d4601b5481565b34801561060e57600080fd5b506102d460135481565b34801561062457600080fd5b506000546001600160a01b0316610509565b34801561064257600080fd5b50610371610f11565b34801561065757600080fd5b506103716106663660046126aa565b610f4a565b34801561067757600080fd5b506040805180820190915260048152631093d31560e21b6020820152610314565b3480156106a457600080fd5b506103716106b33660046126aa565b610fb1565b3480156106c457600080fd5b506103416106d336600461265f565b610fe0565b3480156106e457600080fd5b50610371610fed565b3480156106f957600080fd5b506102d460115481565b34801561070f57600080fd5b506102d4600f5481565b34801561072557600080fd5b506102d460175481565b34801561073b57600080fd5b506102d460195481565b34801561075157600080fd5b506103716107603660046125af565b611036565b34801561077157600080fd5b506103716107803660046126aa565b611082565b34801561079157600080fd5b506103716107a03660046125af565b6110c2565b3480156107b157600080fd5b506102d4600b5481565b3480156107c757600080fd5b506102d46107d63660046125e7565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561080d57600080fd5b5061037161081c3660046126aa565b61110e565b34801561082d57600080fd5b5061037161083c366004612707565b61113d565b34801561084d57600080fd5b5061037161085c3660046125af565b611264565b34801561086d57600080fd5b5061037161087c3660046125af565b6112af565b34801561088d57600080fd5b5061037161089c366004612707565b611347565b3480156108ad57600080fd5b506024546103419060ff1681565b3480156108c757600080fd5b506103716108d63660046125af565b61145d565b60006108e83384846114ab565b5060015b92915050565b6000546001600160a01b031633146109255760405162461bcd60e51b815260040161091c906127f2565b60405180910390fd5b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109715760405162461bcd60e51b815260040161091c906127f2565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b60006109a08484846115cf565b6109f284336109ed85604051806060016040528060288152602001612982602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611b2a565b6114ab565b5060019392505050565b6000546001600160a01b03163314610a265760405162461bcd60e51b815260040161091c906127f2565b610a3f6c01431e0fae6d7217caa00000006103e8611b64565b811015610aa15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e3125604482015269206f6620737570706c7960b01b606482015260840161091c565b6c01431e0fae6d7217caa0000000811115610b175760405162461bcd60e51b815260206004820152603060248201527f416d6f756e74206d757374206265206c657373207468616e206f72206571756160448201526f6c20746f20746f74616c537570706c7960801b606482015260840161091c565b600755565b6000546001600160a01b03163314610b465760405162461bcd60e51b815260040161091c906127f2565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610b8857600080fd5b505afa158015610b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc091906126c2565b9050816001600160a01b031663a9059cbb610be36000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610c2b57600080fd5b505af1158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c63919061268a565b505050565b6000546001600160a01b03163314610c925760405162461bcd60e51b815260040161091c906127f2565b60245462010000900460ff16610cea5760405162461bcd60e51b815260206004820152601e60248201527f7468697320636f6e74726163742063616e6e6f74206265207061757365640000604482015260640161091c565b6024805460ff19169055565b6000546001600160a01b03163314610d205760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610d6e5760405162461bcd60e51b815260040161091c906127f2565b610d876c01431e0fae6d7217caa00000006103e8611b64565b811015610da65760405162461bcd60e51b815260040161091c90612827565b600955565b6000546001600160a01b03163314610dd55760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03166000908152601c60205260409020805460ff19169055565b6000546001600160a01b03163314610e205760405162461bcd60e51b815260040161091c906127f2565b6024805462ff000019169055565b6000546001600160a01b03163314610e585760405162461bcd60e51b815260040161091c906127f2565b478015610e9a57600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610e98573d6000803e3d6000fd5b505b50565b6000546001600160a01b03163314610ec75760405162461bcd60e51b815260040161091c906127f2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f3b5760405162461bcd60e51b815260040161091c906127f2565b6024805460ff19166001179055565b6000546001600160a01b03163314610f745760405162461bcd60e51b815260040161091c906127f2565b610f8d6c01431e0fae6d7217caa00000006103e8611b64565b811015610fac5760405162461bcd60e51b815260040161091c90612827565b600855565b6000546001600160a01b03163314610fdb5760405162461bcd60e51b815260040161091c906127f2565b601b55565b60006108e83384846115cf565b6000546001600160a01b031633146110175760405162461bcd60e51b815260040161091c906127f2565b306000908152600260205260409020548015610e9a57610e9a81611bad565b6000546001600160a01b031633146110605760405162461bcd60e51b815260040161091c906127f2565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110ac5760405162461bcd60e51b815260040161091c906127f2565b426005556006556024805460ff19166001179055565b6000546001600160a01b031633146110ec5760405162461bcd60e51b815260040161091c906127f2565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111385760405162461bcd60e51b815260040161091c906127f2565b600a55565b6000546001600160a01b031633146111675760405162461bcd60e51b815260040161091c906127f2565b600061117f8261117985818989611d4c565b90611d4c565b905060648111156111ec5760405162461bcd60e51b815260206004820152603160248201527f53756d206f66206275792066656573206d757374206265206c657373207468616044820152706e206f7220657175616c20746f2031302560781b606482015260840161091c565b600f859055600b8490556011839055600d8290556010859055600c8490556012839055600e8290556040805186815260208101869052908101849052606081018390527f892b2caa2d791bf7b8d9a49c4db7a4513ff1ae2e0e068ed217f9d5ab4c1a28f0906080015b60405180910390a15050505050565b6000546001600160a01b0316331461128e5760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146112d95760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03811661133e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161091c565b610e9a81611dab565b6000546001600160a01b031633146113715760405162461bcd60e51b815260040161091c906127f2565b60006113838261117985818989611d4c565b905060788111156113f05760405162461bcd60e51b815260206004820152603160248201527f53756d206f66206275792066656573206d757374206265206c657373207468616044820152706e206f7220657175616c20746f2031322560781b606482015260840161091c565b601785905560138490556019839055601582905560188590556014849055601a83905560168290556040805186815260208101869052908101849052606081018390527f439932620c72dddea29980c098bca1a482729646d1216b226d723c6d278a30d190608001611255565b6000546001600160a01b031633146114875760405162461bcd60e51b815260040161091c906127f2565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b6001600160a01b03831661150d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161091c565b6001600160a01b03821661156e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161091c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161091c565b6001600160a01b0382166116955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161091c565b600081116116f75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161091c565b600161170b6000546001600160a01b031690565b6001600160a01b0316846001600160a01b03161415801561173a57506000546001600160a01b03848116911614155b801561174f57506001600160a01b0384163014155b801561176457506001600160a01b0383163014155b15611ad05760245460ff166117b35760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b604482015260640161091c565b6022546001600160a01b0385811691161480156117de57506021546001600160a01b03848116911614155b156118b2576006546005546117f291611d4c565b421161181c576001600160a01b0383166000908152601c60205260409020805460ff191660011790555b60075461184283611179866001600160a01b031660009081526002602052604090205490565b11156118605760405162461bcd60e51b815260040161091c9061278b565b6009548211156118b25760405162461bcd60e51b815260206004820181905260248201527f416d6f756e742065786365656473206d6178696d756d20627579206c696d6974604482015260640161091c565b602454610100900460ff161580156118d857506022546001600160a01b03858116911614155b80156118f157506022546001600160a01b038481169116145b15611a5b576001600160a01b0384166000908152601c602052604090205460ff1615801561193857506001600160a01b0383166000908152601c602052604090205460ff16155b61194157600080fd5b60085482111561199d5760405162461bcd60e51b815260206004820152602160248201527f416d6f756e742065786365656473206d6178696d756d2073656c6c206c696d696044820152601d60fa1b606482015260840161091c565b30600090815260026020526040902054600a548110611a59578015611a475760006119e1601354611179601554611179601954601754611d4c90919063ffffffff16565b1115611a47576000611a22611a0f601354611179601554611179601954601754611d4c90919063ffffffff16565b601354611a1c9085611dfb565b90611b64565b90506000818310611a3a57611a378383611e7a565b90505b611a448282611ebc565b50505b478015611a5757611a5747611f2f565b505b505b6022546001600160a01b03858116911614801590611a8757506022546001600160a01b03848116911614155b15611ad057600754611ab283611179866001600160a01b031660009081526002602052604090205490565b1115611ad05760405162461bcd60e51b815260040161091c9061278b565b6001600160a01b03841660009081526004602052604090205460ff1680611b0f57506001600160a01b03831660009081526004602052604090205460ff165b15611b18575060005b611b2484848484612075565b50505050565b60008184841115611b4e5760405162461bcd60e51b815260040161091c9190612738565b506000611b5b848661293f565b95945050505050565b6000611ba683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612113565b9392505050565b6024805461ff0019166101001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611bff57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611c5357600080fd5b505afa158015611c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8b91906125cb565b81600181518110611cac57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602154611cd291309116846114ab565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d0b908590600090869030904290600401612878565b600060405180830381600087803b158015611d2557600080fd5b505af1158015611d39573d6000803e3d6000fd5b50506024805461ff001916905550505050565b600080611d5983856128e8565b905083811015611ba65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161091c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082611e0a575060006108ec565b6000611e168385612920565b905082611e238583612900565b14611ba65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161091c565b6000611ba683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b2a565b6024805461ff0019166101001790556000611ed8836002611b64565b90506000611ee68483611e7a565b905047611efb611ef68585611d4c565b611bad565b6000611f074783611e7a565b90508215611d3957611d3983611f2a611f208888611d4c565b611a1c8589611dfb565b612141565b6000611f4e601954611179601554601754611d4c90919063ffffffff16565b90508015610e98576000611f7182611a1c60175486611dfb90919063ffffffff16565b90506000611f8e83611a1c60195487611dfb90919063ffffffff16565b90506000611fa682611fa08786611e7a565b90611e7a565b90508215611fea57601d546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611fe8573d6000803e3d6000fd5b505b811561202c57601e546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561202a573d6000803e3d6000fd5b505b801561206e57601f546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561206c573d6000803e3d6000fd5b505b5050505050565b806120d3576120d3600f8054601055600b8054600c5560118054601255600d8054600e5560009384905591839055829055819055601780546018556013805460145560198054601a5560158054601655928490559083905582905555565b6120de8484846121fd565b611b24601054600f55600c54600b55601254601155600e54600d55601854601755601454601355601a54601955601654601555565b600081836121345760405162461bcd60e51b815260040161091c9190612738565b506000611b5b8486612900565b6021546121599030906001600160a01b0316846114ab565b60215460205460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156121c457600080fd5b505af11580156121d8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061206e91906126da565b61222f6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6022546001600160a01b03858116911614801561225a57506021546001600160a01b03848116911614155b156122ce5761227a6103e8611a1c600f5485611dfb90919063ffffffff16565b6020820152600b54612295906103e890611a1c908590611dfb565b81526011546122ad906103e890611a1c908590611dfb565b6040820152600d546122c8906103e890611a1c908590611dfb565b60608201525b6022546001600160a01b038581169116148015906122f957506022546001600160a01b038481169116145b1561236d576123196103e8611a1c60175485611dfb90919063ffffffff16565b6020820152601354612334906103e890611a1c908590611dfb565b815260195461234c906103e890611a1c908590611dfb565b6040820152601554612367906103e890611a1c908590611dfb565b60608201525b6022546001600160a01b0385811691161480159061239957506022546001600160a01b03848116911614155b15612453576123ca6064611a1c601b546123c46103e8611a1c60175489611dfb90919063ffffffff16565b90611dfb565b8160200181815250506123f96064611a1c601b546123c46103e8611a1c60135489611dfb90919063ffffffff16565b8152601b5460195461241e91606491611a1c91906123c4906103e89084908990611dfb565b81604001818152505061244d6064611a1c601b546123c46103e8611a1c60155489611dfb90919063ffffffff16565b60608201525b6124828160600151611fa08360400151611fa08560000151611fa0876020015189611e7a90919063ffffffff16565b60808201526001600160a01b0384166000908152600260205260409020546124aa9083611e7a565b6001600160a01b03808616600090815260026020526040808220939093556080840151918616815291909120546124e091611d4c565b60026000856001600160a01b03166001600160a01b031681526020019081526020016000208190555061254d6125378260600151611179846040015161117986600001518760200151611d4c90919063ffffffff16565b3060009081526002602052604090205490611d4c565b3060009081526002602090815260409182902092909255608083015190519081526001600160a01b0385811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6000602082840312156125c0578081fd5b8135611ba68161296c565b6000602082840312156125dc578081fd5b8151611ba68161296c565b600080604083850312156125f9578081fd5b82356126048161296c565b915060208301356126148161296c565b809150509250929050565b600080600060608486031215612633578081fd5b833561263e8161296c565b9250602084013561264e8161296c565b929592945050506040919091013590565b60008060408385031215612671578182fd5b823561267c8161296c565b946020939093013593505050565b60006020828403121561269b578081fd5b81518015158114611ba6578182fd5b6000602082840312156126bb578081fd5b5035919050565b6000602082840312156126d3578081fd5b5051919050565b6000806000606084860312156126ee578283fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561271c578081fd5b5050823594602084013594506040840135936060013592509050565b6000602080835283518082850152825b8181101561276457858101830151858201604001528201612748565b818111156127755783604083870101525b50601f01601f1916929092016040019392505050565b60208082526041908201527f77616c6c65742062616c616e6365206166746572207472616e73666572206d7560408201527f7374206265206c657373207468616e206d61782077616c6c657420616d6f756e6060820152601d60fa1b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f63616e74206d616b6520746865206c696d6974206c6f776572207468616e20306040820152702e3125206f662074686520737570706c7960781b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156128c75784516001600160a01b0316835293830193918301916001016128a2565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156128fb576128fb612956565b500190565b60008261291b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561293a5761293a612956565b500290565b60008282101561295157612951612956565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610e9a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220eb61fb348261ea181f656a2ba8574c58b93b3da4da8f7137b0c7a00b35aa978764736f6c63430008040033

Deployed Bytecode Sourcemap

7852:19436:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8523:51;;;;;;;;;;;;;;;;;;;13068:25:1;;;13056:2;13041:18;8523:51:0;;;;;;;;11810:94;;;;;;;;;;-1:-1:-1;11891:5:0;;;;;;;;;;;;-1:-1:-1;;;11891:5:0;;;;11810:94;;;;;;;:::i;12792:163::-;;;;;;;;;;-1:-1:-1;12792:163:0;;;;;:::i;:::-;;:::i;:::-;;;4705:14:1;;4698:22;4680:41;;4668:2;4653:18;12792:163:0;4635:92:1;26907:122:0;;;;;;;;;;-1:-1:-1;26907:122:0;;;;;:::i;:::-;;:::i;:::-;;12120:97;;;;;;;;;;-1:-1:-1;8314:21:0;12120:97;;26753:142;;;;;;;;;;-1:-1:-1;26753:142:0;;;;;:::i;:::-;;:::i;12963:312::-;;;;;;;;;;-1:-1:-1;12963:312:0;;;;;:::i;:::-;;:::i;9251:36::-;;;;;;;;;;;;;;;;24257:327;;;;;;;;;;-1:-1:-1;24257:327:0;;;;;:::i;:::-;;:::i;8735:35::-;;;;;;;;;;;;;;;;21269:185;;;;;;;;;;-1:-1:-1;21269:185:0;;;;;:::i;:::-;;:::i;12018:94::-;;;;;;;;;;-1:-1:-1;12018:94:0;;8084:2;14630:36:1;;14618:2;14603:18;12018:94:0;14585:87:1;10453:27:0;;;;;;;;;;-1:-1:-1;10453:27:0;;;;;;;;;;;12352:98;;;;;;;;;;-1:-1:-1;12352:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;12429:13:0;12405:4;12429:13;;;:4;:13;;;;;;;;;12352:98;20567:145;;;;;;;;;;;;;:::i;23650:113::-;;;;;;;;;;-1:-1:-1;23650:113:0;;;;;:::i;:::-;;:::i;10309:28::-;;;;;;;;;;-1:-1:-1;10309:28:0;;;;-1:-1:-1;;;;;10309:28:0;;;;;;-1:-1:-1;;;;;3597:32:1;;;3579:51;;3567:2;3552:18;10309:28:0;3534:102:1;26396:195:0;;;;;;;;;;-1:-1:-1;26396:195:0;;;;;:::i;:::-;;:::i;23897:97::-;;;;;;;;;;-1:-1:-1;23897:97:0;;;;;:::i;:::-;;:::i;20720:87::-;;;;;;;;;;;;;:::i;8424:31::-;;;;;;;;;;;;;;;;21030:231;;;;;;;;;;;;;:::i;12225:119::-;;;;;;;;;;-1:-1:-1;12225:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;12318:18:0;12291:7;12318:18;;;:9;:18;;;;;;;12225:119;3423:150;;;;;;;;;;;;;:::i;9626:46::-;;;;;;;;;;;;;;;;9121:36;;;;;;;;;;;;;;;;2498:79;;;;;;;;;;-1:-1:-1;2536:7:0;2563:6;-1:-1:-1;;;;;2563:6:0;2498:79;;20478:81;;;;;;;;;;;;;:::i;26184:200::-;;;;;;;;;;-1:-1:-1;26184:200:0;;;;;:::i;:::-;;:::i;11912:98::-;;;;;;;;;;-1:-1:-1;11995:7:0;;;;;;;;;;;;-1:-1:-1;;;11995:7:0;;;;11912:98;;24107:142;;;;;;;;;;-1:-1:-1;24107:142:0;;;;;:::i;:::-;;:::i;12462:169::-;;;;;;;;;;-1:-1:-1;12462:169:0;;;;;:::i;:::-;;:::i;20815:207::-;;;;;;;;;;;;;:::i;8989:30::-;;;;;;;;;;;;;;;;8862:35;;;;;;;;;;;;;;;;9381:36;;;;;;;;;;;;;;;;9511:31;;;;;;;;;;;;;;;;27038:122;;;;;;;;;;-1:-1:-1;27038:122:0;;;;;:::i;:::-;;:::i;20299:171::-;;;;;;;;;;-1:-1:-1;20299:171:0;;;;;:::i;:::-;;:::i;26599:142::-;;;;;;;;;;-1:-1:-1;26599:142:0;;;;;:::i;:::-;;:::i;8608:35::-;;;;;;;;;;;;;;;;12639:145;;;;;;;;;;-1:-1:-1;12639:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;12749:18:0;;;12722:7;12749:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12639:145;27168:117;;;;;;;;;;-1:-1:-1;27168:117:0;;;;;:::i;:::-;;:::i;24592:779::-;;;;;;;;;;-1:-1:-1;24592:779:0;;;;;:::i;:::-;;:::i;23771:114::-;;;;;;;;;;-1:-1:-1;23771:114:0;;;;;:::i;:::-;;:::i;2859:201::-;;;;;;;;;;-1:-1:-1;2859:201:0;;;;;:::i;:::-;;:::i;25379:793::-;;;;;;;;;;-1:-1:-1;25379:793:0;;;;;:::i;:::-;;:::i;10381:31::-;;;;;;;;;;-1:-1:-1;10381:31:0;;;;;;;;24002:93;;;;;;;;;;-1:-1:-1;24002:93:0;;;;;:::i;:::-;;:::i;12792:163::-;12869:4;12886:39;299:10;12909:7;12918:6;12886:8;:39::i;:::-;-1:-1:-1;12943:4:0;12792:163;;;;;:::o;26907:122::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;;;;;;;;;26995:12:::1;:26:::0;;-1:-1:-1;;;;;;26995:26:0::1;-1:-1:-1::0;;;;;26995:26:0;;;::::1;::::0;;;::::1;::::0;;26907:122::o;26753:142::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;26851:17:::1;:36:::0;;-1:-1:-1;;;;;;26851:36:0::1;-1:-1:-1::0;;;;;26851:36:0;;;::::1;::::0;;;::::1;::::0;;26753:142::o;12963:312::-;13063:4;13080:36;13090:6;13098:9;13109:6;13080:9;:36::i;:::-;13127:118;13136:6;299:10;13156:88;13194:6;13156:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13156:19:0;;;;;;:11;:19;;;;;;;;299:10;13156:33;;;;;;;;;;:37;:88::i;:::-;13127:8;:118::i;:::-;-1:-1:-1;13263:4:0;12963:312;;;;;:::o;24257:327::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;24369:17:::1;8314:21;24381:4;24369:11;:17::i;:::-;24350:15;:36;;24342:91;;;::::0;-1:-1:-1;;;24342:91:0;;8641:2:1;24342:91:0::1;::::0;::::1;8623:21:1::0;8680:2;8660:18;;;8653:30;8719:34;8699:18;;;8692:62;-1:-1:-1;;;8770:18:1;;;8763:40;8820:19;;24342:91:0::1;8613:232:1::0;24342:91:0::1;8314:21;24452:15;:26;;24444:87;;;::::0;-1:-1:-1;;;24444:87:0;;11535:2:1;24444:87:0::1;::::0;::::1;11517:21:1::0;11574:2;11554:18;;;11547:30;11613:34;11593:18;;;11586:62;-1:-1:-1;;;11664:18:1;;;11657:46;11720:19;;24444:87:0::1;11507:238:1::0;24444:87:0::1;24542:16;:34:::0;24257:327::o;21269:185::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;21358:38:::1;::::0;-1:-1:-1;;;21358:38:0;;21390:4:::1;21358:38;::::0;::::1;3579:51:1::0;21341:14:0::1;::::0;-1:-1:-1;;;;;21358:23:0;::::1;::::0;::::1;::::0;3552:18:1;;21358:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21341:55;;21414:5;-1:-1:-1::0;;;;;21407:22:0::1;;21430:7;2536::::0;2563:6;-1:-1:-1;;;;;2563:6:0;;2498:79;21430:7:::1;21407:39;::::0;-1:-1:-1;;;;;;21407:39:0::1;::::0;;;;;;-1:-1:-1;;;;;3833:32:1;;;21407:39:0::1;::::0;::::1;3815:51:1::0;3882:18;;;3875:34;;;3788:18;;21407:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2695:1;21269:185:::0;:::o;20567:145::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;20631:8:::1;::::0;;;::::1;;;20623:51;;;::::0;-1:-1:-1;;;20623:51:0;;5542:2:1;20623:51:0::1;::::0;::::1;5524:21:1::0;5581:2;5561:18;;;5554:30;5620:32;5600:18;;;5593:60;5670:18;;20623:51:0::1;5514:180:1::0;20623:51:0::1;20685:11;:19:::0;;-1:-1:-1;;20685:19:0::1;::::0;;20567:145::o;23650:113::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23721:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;23721:34:0::1;23751:4;23721:34;::::0;;23650:113::o;26396:195::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;26484:17:::1;8314:21;26496:4;26484:11;:17::i;:::-;26474:6;:27;;26466:90;;;;-1:-1:-1::0;;;26466:90:0::1;;;;;;;:::i;:::-;26567:7;:16:::0;26396:195::o;23897:97::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23965:13:0::1;23981:5;23965:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;23965:21:0::1;::::0;;23897:97::o;20720:87::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;20783:8:::1;:16:::0;;-1:-1:-1;;20783:16:0::1;::::0;;20720:87::o;21030:231::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;21113:21:::1;21149:22:::0;;21145:109:::1;;2536:7:::0;2563:6;;21188:54:::1;::::0;-1:-1:-1;;;;;2563:6:0;;;;21188:54;::::1;;;::::0;21223:18;;21188:54;2536:7;21188:54;21223:18;2563:6;21188:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21145:109;2695:1;21030:231::o:0;3423:150::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;3532:1:::1;3516:6:::0;;3495:40:::1;::::0;-1:-1:-1;;;;;3516:6:0;;::::1;::::0;3495:40:::1;::::0;3532:1;;3495:40:::1;3563:1;3546:19:::0;;-1:-1:-1;;;;;;3546:19:0::1;::::0;;3423:150::o;20478:81::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;20533:11:::1;:18:::0;;-1:-1:-1;;20533:18:0::1;20547:4;20533:18;::::0;;20478:81::o;26184:200::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;26275:17:::1;8314:21;26287:4;26275:11;:17::i;:::-;26264:7;:28;;26256:91;;;;-1:-1:-1::0;;;26256:91:0::1;;;;;;;:::i;:::-;26358:8;:18:::0;26184:200::o;24107:142::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;24202:25:::1;:39:::0;24107:142::o;12462:169::-;12542:4;12559:42;299:10;12583:9;12594:6;12559:9;:42::i;20815:207::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;20913:4:::1;20869:23;12318:18:::0;;;:9;:18;;;;;;20934:19;;20930:85:::1;;20970:33;20987:15;20970:16;:33::i;27038:122::-:0;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;27126:12:::1;:26:::0;;-1:-1:-1;;;;;;27126:26:0::1;-1:-1:-1::0;;;;;27126:26:0;;;::::1;::::0;;;::::1;::::0;;27038:122::o;20299:171::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;20385:15:::1;20371:11;:29:::0;20411:10:::1;:22:::0;20444:11:::1;:18:::0;;-1:-1:-1;;20444:18:0::1;20458:4;20444:18;::::0;;20299:171::o;26599:142::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;26697:17:::1;:36:::0;;-1:-1:-1;;;;;;26697:36:0::1;-1:-1:-1::0;;;;;26697:36:0;;;::::1;::::0;;;::::1;::::0;;26599:142::o;27168:117::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;27250:15:::1;:27:::0;27168:117::o;24592:779::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;24728:16:::1;24747:61;24795:12:::0;24747:43:::1;24782:7:::0;24747:43;:12;24764;24747:16:::1;:30::i;:::-;:34:::0;::::1;:43::i;:61::-;24728:80;;24839:3;24827:8;:15;;24819:77;;;::::0;-1:-1:-1;;;24819:77:0;;11117:2:1;24819:77:0::1;::::0;::::1;11099:21:1::0;11156:2;11136:18;;;11129:30;11195:34;11175:18;;;11168:62;-1:-1:-1;;;11246:18:1;;;11239:47;11303:19;;24819:77:0::1;11089:239:1::0;24819:77:0::1;24909:16;:31:::0;;;24951:16:::1;:31:::0;;;24993:11:::1;:21:::0;;;25025:16:::1;:31:::0;;;25077:24:::1;:43:::0;;;25131:24:::1;:43:::0;;;25185:19:::1;:33:::0;;;25229:24:::1;:43:::0;;;25298:65:::1;::::0;;14323:25:1;;;14379:2;14364:18;;14357:34;;;14407:18;;;14400:34;;;14465:2;14450:18;;14443:34;;;25298:65:0::1;::::0;14310:3:1;14295:19;25298:65:0::1;;;;;;;;2695:1;24592:779:::0;;;;:::o;23771:114::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23842:27:0::1;23872:5;23842:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;23842:35:0::1;::::0;;23771:114::o;2859:201::-;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2948:22:0;::::1;2940:73;;;::::0;-1:-1:-1;;;2940:73:0;;7073:2:1;2940:73:0::1;::::0;::::1;7055:21:1::0;7112:2;7092:18;;;7085:30;7151:34;7131:18;;;7124:62;-1:-1:-1;;;7202:18:1;;;7195:36;7248:19;;2940:73:0::1;7045:228:1::0;2940:73:0::1;3024:28;3043:8;3024:18;:28::i;25379:793::-:0;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;25516:16:::1;25535:61;25583:12:::0;25535:43:::1;25570:7:::0;25535:43;:12;25552;25535:16:::1;:30::i;:61::-;25516:80;;25627:3;25615:8;:15;;25607:77;;;::::0;-1:-1:-1;;;25607:77:0;;5901:2:1;25607:77:0::1;::::0;::::1;5883:21:1::0;5940:2;5920:18;;;5913:30;5979:34;5959:18;;;5952:62;-1:-1:-1;;;6030:18:1;;;6023:47;6087:19;;25607:77:0::1;5873:239:1::0;25607:77:0::1;25697:17;:32:::0;;;25740:17:::1;:32:::0;;;25783:12:::1;:22:::0;;;25816:17:::1;:32:::0;;;25869:25:::1;:45:::0;;;25925:25:::1;:45:::0;;;25981:20:::1;:35:::0;;;26027:25:::1;:45:::0;;;26098:66:::1;::::0;;14323:25:1;;;14379:2;14364:18;;14357:34;;;14407:18;;;14400:34;;;14465:2;14450:18;;14443:34;;;26098:66:0::1;::::0;14310:3:1;14295:19;26098:66:0::1;14277:206:1::0;24002:93:0;2625:6;;-1:-1:-1;;;;;2625:6:0;299:10;2625:22;2617:67;;;;-1:-1:-1;;;2617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24067:13:0::1;;::::0;;;:4:::1;:13;::::0;;;;:20;;-1:-1:-1;;24067:20:0::1;24083:4;24067:20;::::0;;24002:93::o;14490:335::-;-1:-1:-1;;;;;14583:19:0;;14575:68;;;;-1:-1:-1;;;14575:68:0;;12719:2:1;14575:68:0;;;12701:21:1;12758:2;12738:18;;;12731:30;12797:34;12777:18;;;12770:62;-1:-1:-1;;;12848:18:1;;;12841:34;12892:19;;14575:68:0;12691:226:1;14575:68:0;-1:-1:-1;;;;;14662:21:0;;14654:68;;;;-1:-1:-1;;;14654:68:0;;7480:2:1;14654:68:0;;;7462:21:1;7519:2;7499:18;;;7492:30;7558:34;7538:18;;;7531:62;-1:-1:-1;;;7609:18:1;;;7602:32;7651:19;;14654:68:0;7452:224:1;14654:68:0;-1:-1:-1;;;;;14733:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14785:32;;13068:25:1;;;14785:32:0;;13041:18:1;14785:32:0;;;;;;;14490:335;;;:::o;14838:2751::-;-1:-1:-1;;;;;14926:18:0;;14918:68;;;;-1:-1:-1;;;14918:68:0;;12313:2:1;14918:68:0;;;12295:21:1;12352:2;12332:18;;;12325:30;12391:34;12371:18;;;12364:62;-1:-1:-1;;;12442:18:1;;;12435:35;12487:19;;14918:68:0;12285:227:1;14918:68:0;-1:-1:-1;;;;;15005:16:0;;14997:64;;;;-1:-1:-1;;;14997:64:0;;6319:2:1;14997:64:0;;;6301:21:1;6358:2;6338:18;;;6331:30;6397:34;6377:18;;;6370:62;-1:-1:-1;;;6448:18:1;;;6441:33;6491:19;;14997:64:0;6291:225:1;14997:64:0;15089:1;15080:6;:10;15072:64;;;;-1:-1:-1;;;15072:64:0;;10289:2:1;15072:64:0;;;10271:21:1;10328:2;10308:18;;;10301:30;10367:34;10347:18;;;10340:62;-1:-1:-1;;;10418:18:1;;;10411:39;10467:19;;15072:64:0;10261:231:1;15072:64:0;15164:4;15193:7;2536;2563:6;-1:-1:-1;;;;;2563:6:0;;2498:79;15193:7;-1:-1:-1;;;;;15185:15:0;:4;-1:-1:-1;;;;;15185:15:0;;;:32;;;;-1:-1:-1;2536:7:0;2563:6;-1:-1:-1;;;;;15204:13:0;;;2563:6;;15204:13;;15185:32;:57;;;;-1:-1:-1;;;;;;15221:21:0;;15237:4;15221:21;;15185:57;:80;;;;-1:-1:-1;;;;;;15246:19:0;;15260:4;15246:19;;15185:80;15181:2229;;;15290:11;;;;15282:45;;;;-1:-1:-1;;;15282:45:0;;6723:2:1;15282:45:0;;;6705:21:1;6762:2;6742:18;;;6735:30;-1:-1:-1;;;6781:18:1;;;6774:51;6842:18;;15282:45:0;6695:171:1;15282:45:0;15354:13;;-1:-1:-1;;;;;15346:21:0;;;15354:13;;15346:21;:55;;;;-1:-1:-1;15385:15:0;;-1:-1:-1;;;;;15371:30:0;;;15385:15;;15371:30;;15346:55;15342:436;;;15469:10;;15453:11;;:27;;:15;:27::i;:::-;15434:15;:46;15430:110;;-1:-1:-1;;;;;15505:8:0;;;;;;:4;:8;;;;;:15;;-1:-1:-1;;15505:15:0;15516:4;15505:15;;;15430:110;15595:16;;15566:25;15584:6;15566:13;15576:2;-1:-1:-1;;;;;12318:18:0;12291:7;12318:18;;;:9;:18;;;;;;;12225:119;15566:25;:45;;15558:123;;;;-1:-1:-1;;;15558:123:0;;;;;;;:::i;:::-;15718:7;;15708:6;:17;;15700:62;;;;-1:-1:-1;;;15700:62:0;;11952:2:1;15700:62:0;;;11934:21:1;;;11971:18;;;11964:30;12030:34;12010:18;;;12003:62;12082:18;;15700:62:0;11924:182:1;15700:62:0;15811:6;;;;;;;15810:7;:32;;;;-1:-1:-1;15829:13:0;;-1:-1:-1;;;;;15821:21:0;;;15829:13;;15821:21;;15810:32;:55;;;;-1:-1:-1;15852:13:0;;-1:-1:-1;;;;;15846:19:0;;;15852:13;;15846:19;15810:55;15806:1338;;;-1:-1:-1;;;;;15903:10:0;;;;;;:4;:10;;;;;;;;15902:11;:24;;;;-1:-1:-1;;;;;;15918:8:0;;;;;;:4;:8;;;;;;;;15917:9;15902:24;15894:33;;;;;;15964:8;;15954:6;:18;;15946:64;;;;-1:-1:-1;;;15946:64:0;;8239:2:1;15946:64:0;;;8221:21:1;8278:2;8258:18;;;8251:30;8317:34;8297:18;;;8290:62;-1:-1:-1;;;8368:18:1;;;8361:31;8409:19;;15946:64:0;8211:223:1;15946:64:0;16096:4;16047:28;12318:18;;;:9;:18;;;;;;16151:15;;16127:39;;16123:984;;16195:24;;16191:688;;16336:1;16252:81;16315:17;;16252:58;16292:17;;16252:35;16274:12;;16252:17;;:21;;:35;;;;:::i;:81::-;:85;16248:608;;;16370:20;16393:130;16441:81;16504:17;;16441:58;16481:17;;16441:35;16463:12;;16441:17;;:21;;:35;;;;:::i;:81::-;16393:17;;:43;;16415:20;16393:21;:43::i;:::-;:47;;:130::i;:::-;16370:153;;16554:15;16632:12;16608:20;:36;16604:157;;16691:38;:20;16716:12;16691:24;:38::i;:::-;16681:48;;16604:157;16791:37;16806:12;16820:7;16791:14;:37::i;:::-;16248:608;;;16930:21;16978:22;;16974:114;;17029:35;17042:21;17029:12;:35::i;:::-;16123:984;;15806:1338;;17171:13;;-1:-1:-1;;;;;17163:21:0;;;17171:13;;17163:21;;;;:44;;-1:-1:-1;17194:13:0;;-1:-1:-1;;;;;17188:19:0;;;17194:13;;17188:19;;17163:44;17160:239;;;17295:16;;17266:25;17284:6;17266:13;17276:2;-1:-1:-1;;;;;12318:18:0;12291:7;12318:18;;;:9;:18;;;;;;;12225:119;17266:25;:45;;17258:123;;;;-1:-1:-1;;;17258:123:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17426:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;17454:22:0;;;;;;:18;:22;;;;;;;;17426:50;17422:98;;;-1:-1:-1;17503:5:0;17422:98;17540:41;17555:4;17561:2;17565:6;17573:7;17540:14;:41::i;:::-;14838:2751;;;;:::o;1356:190::-;1442:7;1478:12;1470:6;;;;1462:29;;;;-1:-1:-1;;;1462:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1502:9:0;1514:5;1518:1;1514;:5;:::i;:::-;1502:17;1356:190;-1:-1:-1;;;;;1356:190:0:o;1808:132::-;1866:7;1893:39;1897:1;1900;1893:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1886:46;1808:132;-1:-1:-1;;;1808:132:0:o;17600:407::-;10833:6;:13;;-1:-1:-1;;10833:13:0;;;;;17702:16:::1;::::0;;17716:1:::1;17702:16:::0;;;;;::::1;::::0;;-1:-1:-1;;17702:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;17702:16:0::1;17678:40;;17747:4;17729;17734:1;17729:7;;;;;;-1:-1:-1::0;;;17729:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;17729:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;17773:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;17773:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;17729:7;;17773:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17763:4;17768:1;17763:7;;;;;;-1:-1:-1::0;;;17763:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;17763:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;17838:15:::1;::::0;17806:62:::1;::::0;17823:4:::1;::::0;17838:15:::1;17856:11:::0;17806:8:::1;:62::i;:::-;17879:15;::::0;:120:::1;::::0;-1:-1:-1;;;17879:120:0;;-1:-1:-1;;;;;17879:15:0;;::::1;::::0;:66:::1;::::0;:120:::1;::::0;17946:11;;17879:15:::1;::::0;17962:4;;17976::::1;::::0;17983:15:::1;::::0;17879:120:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10869:6:0;:14;;-1:-1:-1;;10869:14:0;;;-1:-1:-1;;;;17600:407:0:o;1025:179::-;1083:7;;1115:5;1119:1;1115;:5;:::i;:::-;1103:17;;1144:1;1139;:6;;1131:46;;;;-1:-1:-1;;;1131:46:0;;7883:2:1;1131:46:0;;;7865:21:1;7922:2;7902:18;;;7895:30;7961:29;7941:18;;;7934:57;8008:18;;1131:46:0;7855:177:1;3220:191:0;3294:16;3313:6;;-1:-1:-1;;;;;3330:17:0;;;-1:-1:-1;;;;;;3330:17:0;;;;;;3363:40;;3313:6;;;;;;;3363:40;;3294:16;3363:40;3220:191;;:::o;1554:246::-;1612:7;1636:6;1632:47;;-1:-1:-1;1666:1:0;1659:8;;1632:47;1689:9;1701:5;1705:1;1701;:5;:::i;:::-;1689:17;-1:-1:-1;1734:1:0;1725:5;1729:1;1689:17;1725:5;:::i;:::-;:10;1717:56;;;;-1:-1:-1;;;1717:56:0;;9526:2:1;1717:56:0;;;9508:21:1;9565:2;9545:18;;;9538:30;9604:34;9584:18;;;9577:62;-1:-1:-1;;;9655:18:1;;;9648:31;9696:19;;1717:56:0;9498:223:1;1212:136:0;1270:7;1297:43;1301:1;1304;1297:43;;;;;;;;;;;;;;;;;:3;:43::i;18494:1031::-;10833:6;:13;;-1:-1:-1;;10833:13:0;;;;;;18663:15:::1;:8:::0;18676:1:::1;18663:12;:15::i;:::-;18648:30:::0;-1:-1:-1;18689:17:0::1;18709:18;:8:::0;18648:30;18709:12:::1;:18::i;:::-;18689:38:::0;-1:-1:-1;19030:21:0::1;19096:48;19113:30;:20:::0;19138:4;19113:24:::1;:30::i;:::-;19096:16;:48::i;:::-;19275:18;19296:41;:21;19322:14:::0;19296:25:::1;:41::i;:::-;19275:62:::0;-1:-1:-1;19395:13:0;;19391:127:::1;;19425:81;19438:9:::0;19449:56:::1;19474:30;:20:::0;19499:4;19474:24:::1;:30::i;:::-;19449:20;:10:::0;19464:4;19449:14:::1;:20::i;:56::-;19425:12;:81::i;19533:758::-:0;19590:17;19610:58;19655:12;;19610:40;19632:17;;19610;;:21;;:40;;;;:::i;:58::-;19590:78;-1:-1:-1;19683:14:0;;19679:605;;19714:24;19741:44;19775:9;19741:29;19752:17;;19741:6;:10;;:29;;;;:::i;:44::-;19714:71;;19800:19;19822:39;19851:9;19822:24;19833:12;;19822:6;:10;;:24;;;;:::i;:39::-;19800:61;-1:-1:-1;19876:18:0;19897:45;19800:61;19897:28;:6;19908:16;19897:10;:28::i;:::-;:32;;:45::i;:::-;19876:66;-1:-1:-1;19961:20:0;;19957:105;;20002:17;;:44;;-1:-1:-1;;;;;20002:17:0;;;;:44;;;;;20029:16;;20002:17;:44;:17;:44;20029:16;20002:17;:44;;;;;;;;;;;;;;;;;;;;;19957:105;20080:15;;20076:90;;20116:12;;:34;;-1:-1:-1;;;;;20116:12:0;;;;:34;;;;;20138:11;;20116:12;:34;:12;:34;20138:11;20116:12;:34;;;;;;;;;;;;;;;;;;;;;20076:90;20184:14;;20180:93;;20219:17;;:38;;-1:-1:-1;;;;;20219:17:0;;;;:38;;;;;20246:10;;20219:17;:38;:17;:38;20246:10;20219:17;:38;;;;;;;;;;;;;;;;;;;;;20180:93;19679:605;;;19533:758;;:::o;21462:256::-;21575:7;21570:60;;21604:14;13353:16;;;13326:24;:43;13407:16;;;13380:24;:43;13456:11;;;13434:19;:33;13505:16;;;13478:24;:43;-1:-1:-1;13542:20:0;;;;13573;;;;13604:15;;;13630:20;;;13691:17;;;13663:25;:45;13747:17;;;13719:25;:45;13798:12;;;13775:20;:35;13849:17;;;13821:25;:45;13887:21;;;;13919;;;;13951:16;;;13978:21;13283:724;21604:14;21640:44;21658:6;21666:9;21677:6;21640:17;:44::i;:::-;21695:15;14082:24;;14063:16;:43;14136:24;;14117:16;:43;14185:19;;14171:11;:33;14234:24;;14215:16;:43;14291:25;;14271:17;:45;14347:25;;14327:17;:45;14398:20;;14383:12;:35;14449:25;;14429:17;:45;14019:463;1948:189;2034:7;2069:12;2062:5;2054:28;;;;-1:-1:-1;;;2054:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2093:9:0;2105:5;2109:1;2105;:5;:::i;18019:465::-;18132:15;;18100:62;;18117:4;;-1:-1:-1;;;;;18132:15:0;18150:11;18100:8;:62::i;:::-;18205:15;;18419:12;;18205:271;;-1:-1:-1;;;18205:271:0;;18279:4;18205:271;;;4269:34:1;4319:18;;;4312:34;;;18205:15:0;4362:18:1;;;4355:34;;;4405:18;;;4398:34;-1:-1:-1;;;;;18419:12:0;;;4448:19:1;;;4441:44;18448:15:0;4501:19:1;;;4494:35;18205:15:0;;;:31;;18244:9;;4203:19:1;;18205:271:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21726:1875::-;21823:24;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21823:24:0;21872:13;;-1:-1:-1;;;;;21862:23:0;;;21872:13;;21862:23;:64;;;;-1:-1:-1;21910:15:0;;-1:-1:-1;;;;;21889:37:0;;;21910:15;;21889:37;;21862:64;21858:362;;;21967:38;22000:4;21967:28;21978:16;;21967:6;:10;;:28;;;;:::i;:38::-;21949:15;;;:56;22049:16;;22038:38;;22071:4;;22038:28;;:6;;:10;:28::i;:38::-;22020:56;;22115:11;;22104:33;;22132:4;;22104:23;;:6;;:10;:23::i;:33::-;22091:10;;;:46;22181:16;;22170:38;;22203:4;;22170:28;;:6;;:10;:28::i;:38::-;22152:15;;;:56;21858:362;22244:13;;-1:-1:-1;;;;;22234:23:0;;;22244:13;;22234:23;;;;:53;;-1:-1:-1;22274:13:0;;-1:-1:-1;;;;;22261:26:0;;;22274:13;;22261:26;22234:53;22230:356;;;22329:39;22363:4;22329:29;22340:17;;22329:6;:10;;:29;;;;:::i;:39::-;22311:15;;;:57;22412:17;;22401:39;;22435:4;;22401:29;;:6;;:10;:29::i;:39::-;22383:57;;22479:12;;22468:34;;22497:4;;22468:24;;:6;;:10;:24::i;:34::-;22455:10;;;:47;22546:17;;22535:39;;22569:4;;22535:29;;:6;;:10;:29::i;:39::-;22517:15;;;:57;22230:356;22610:13;;-1:-1:-1;;;;;22600:23:0;;;22610:13;;22600:23;;;;:53;;-1:-1:-1;22640:13:0;;-1:-1:-1;;;;;22627:26:0;;;22640:13;;22627:26;;22600:53;22596:527;;;22698:81;22775:3;22698:72;22744:25;;22699:39;22733:4;22699:29;22710:17;;22699:6;:10;;:29;;;;:::i;:39::-;22698:45;;:72::i;:81::-;22680:4;:15;;:99;;;;;22812:81;22889:3;22812:72;22858:25;;22813:39;22847:4;22813:29;22824:17;;22813:6;:10;;:29;;;;:::i;22812:81::-;22794:99;;22962:25;;22933:12;;22921:76;;22993:3;;22921:67;;22962:25;22922:34;;22951:4;;22921:67;;22922:6;;:10;:24::i;22921:76::-;22908:4;:10;;:89;;;;;23030:81;23107:3;23030:72;23076:25;;23031:39;23065:4;23031:29;23042:17;;23031:6;:10;;:29;;;;:::i;23030:81::-;23012:15;;;:99;22596:527;23158:85;23227:4;:15;;;23158:64;23211:4;:10;;;23158:48;23190:4;:15;;;23158:27;23169:4;:15;;;23158:6;:10;;:27;;;;:::i;:85::-;23143:12;;;:100;-1:-1:-1;;;;;23284:17:0;;;;;;:9;:17;;;;;;:29;;23306:6;23284:21;:29::i;:::-;-1:-1:-1;;;;;23264:17:0;;;;;;;:9;:17;;;;;;:49;;;;23372:12;;;;23347:20;;;;;;;;;;:38;;:24;:38::i;:::-;23324:9;:20;23334:9;-1:-1:-1;;;;;23324:20:0;-1:-1:-1;;;;;23324:20:0;;;;;;;;;;;;:61;;;;23423:103;23452:73;23509:4;:15;;;23452:52;23493:4;:10;;;23452:36;23472:4;:15;;;23452:4;:15;;;:19;;:36;;;;:::i;:73::-;23441:4;23423:24;;;;:9;:24;;;;;;;:28;:103::i;:::-;23414:4;23396:24;;;;:9;:24;;;;;;;;;:130;;;;23580:12;;;;23552:41;;13068:25:1;;;-1:-1:-1;;;;;23552:41:0;;;;;;;;;;13041:18:1;23552:41:0;;;;;;;21726:1875;;;;:::o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;812:398::-;880:6;888;941:2;929:9;920:7;916:23;912:32;909:2;;;962:6;954;947:22;909:2;1006:9;993:23;1025:31;1050:5;1025:31;:::i;:::-;1075:5;-1:-1:-1;1132:2:1;1117:18;;1104:32;1145:33;1104:32;1145:33;:::i;:::-;1197:7;1187:17;;;899:311;;;;;:::o;1215:466::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:2;;;1382:6;1374;1367:22;1329:2;1426:9;1413:23;1445:31;1470:5;1445:31;:::i;:::-;1495:5;-1:-1:-1;1552:2:1;1537:18;;1524:32;1565:33;1524:32;1565:33;:::i;:::-;1319:362;;1617:7;;-1:-1:-1;;;1671:2:1;1656:18;;;;1643:32;;1319:362::o;1686:325::-;1754:6;1762;1815:2;1803:9;1794:7;1790:23;1786:32;1783:2;;;1836:6;1828;1821:22;1783:2;1880:9;1867:23;1899:31;1924:5;1899:31;:::i;:::-;1949:5;2001:2;1986:18;;;;1973:32;;-1:-1:-1;;;1773:238:1:o;2016:297::-;2083:6;2136:2;2124:9;2115:7;2111:23;2107:32;2104:2;;;2157:6;2149;2142:22;2104:2;2194:9;2188:16;2247:5;2240:13;2233:21;2226:5;2223:32;2213:2;;2274:6;2266;2259:22;2318:190;2377:6;2430:2;2418:9;2409:7;2405:23;2401:32;2398:2;;;2451:6;2443;2436:22;2398:2;-1:-1:-1;2479:23:1;;2388:120;-1:-1:-1;2388:120:1:o;2513:194::-;2583:6;2636:2;2624:9;2615:7;2611:23;2607:32;2604:2;;;2657:6;2649;2642:22;2604:2;-1:-1:-1;2685:16:1;;2594:113;-1:-1:-1;2594:113:1:o;2712:316::-;2800:6;2808;2816;2869:2;2857:9;2848:7;2844:23;2840:32;2837:2;;;2890:6;2882;2875:22;2837:2;2924:9;2918:16;2908:26;;2974:2;2963:9;2959:18;2953:25;2943:35;;3018:2;3007:9;3003:18;2997:25;2987:35;;2827:201;;;;;:::o;3033:395::-;3119:6;3127;3135;3143;3196:3;3184:9;3175:7;3171:23;3167:33;3164:2;;;3218:6;3210;3203:22;3164:2;-1:-1:-1;;3246:23:1;;;3316:2;3301:18;;3288:32;;-1:-1:-1;3367:2:1;3352:18;;3339:32;;3418:2;3403:18;3390:32;;-1:-1:-1;3154:274:1;-1:-1:-1;3154:274:1:o;4732:603::-;4844:4;4873:2;4902;4891:9;4884:21;4934:6;4928:13;4977:6;4972:2;4961:9;4957:18;4950:34;5002:4;5015:140;5029:6;5026:1;5023:13;5015:140;;;5124:14;;;5120:23;;5114:30;5090:17;;;5109:2;5086:26;5079:66;5044:10;;5015:140;;;5173:6;5170:1;5167:13;5164:2;;;5243:4;5238:2;5229:6;5218:9;5214:22;5210:31;5203:45;5164:2;-1:-1:-1;5319:2:1;5298:15;-1:-1:-1;;5294:29:1;5279:45;;;;5326:2;5275:54;;4853:482;-1:-1:-1;;;4853:482:1:o;8850:469::-;9052:2;9034:21;;;9091:2;9071:18;;;9064:30;9130:34;9125:2;9110:18;;9103:62;9201:34;9196:2;9181:18;;9174:62;-1:-1:-1;;;9267:3:1;9252:19;;9245:32;9309:3;9294:19;;9024:295::o;9726:356::-;9928:2;9910:21;;;9947:18;;;9940:30;10006:34;10001:2;9986:18;;9979:62;10073:2;10058:18;;9900:182::o;10497:413::-;10699:2;10681:21;;;10738:2;10718:18;;;10711:30;10777:34;10772:2;10757:18;;10750:62;-1:-1:-1;;;10843:2:1;10828:18;;10821:47;10900:3;10885:19;;10671:239::o;13104:983::-;13366:4;13414:3;13403:9;13399:19;13445:6;13434:9;13427:25;13471:2;13509:6;13504:2;13493:9;13489:18;13482:34;13552:3;13547:2;13536:9;13532:18;13525:31;13576:6;13611;13605:13;13642:6;13634;13627:22;13680:3;13669:9;13665:19;13658:26;;13719:2;13711:6;13707:15;13693:29;;13740:4;13753:195;13767:6;13764:1;13761:13;13753:195;;;13832:13;;-1:-1:-1;;;;;13828:39:1;13816:52;;13923:15;;;;13888:12;;;;13864:1;13782:9;13753:195;;;-1:-1:-1;;;;;;;14004:32:1;;;;13999:2;13984:18;;13977:60;-1:-1:-1;;;14068:3:1;14053:19;14046:35;13965:3;13375:712;-1:-1:-1;;;13375:712:1:o;14677:128::-;14717:3;14748:1;14744:6;14741:1;14738:13;14735:2;;;14754:18;;:::i;:::-;-1:-1:-1;14790:9:1;;14725:80::o;14810:217::-;14850:1;14876;14866:2;;-1:-1:-1;;;14901:31:1;;14955:4;14952:1;14945:15;14983:4;14908:1;14973:15;14866:2;-1:-1:-1;15012:9:1;;14856:171::o;15032:168::-;15072:7;15138:1;15134;15130:6;15126:14;15123:1;15120:21;15115:1;15108:9;15101:17;15097:45;15094:2;;;15145:18;;:::i;:::-;-1:-1:-1;15185:9:1;;15084:116::o;15205:125::-;15245:4;15273:1;15270;15267:8;15264:2;;;15278:18;;:::i;:::-;-1:-1:-1;15315:9:1;;15254:76::o;15335:127::-;15396:10;15391:3;15387:20;15384:1;15377:31;15427:4;15424:1;15417:15;15451:4;15448:1;15441:15;15467:131;-1:-1:-1;;;;;15542:31:1;;15532:42;;15522:2;;15588:1;15585;15578:12

Swarm Source

ipfs://eb61fb348261ea181f656a2ba8574c58b93b3da4da8f7137b0c7a00b35aa9787

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.