ETH Price: $3,045.04 (+1.17%)
Gas: 3 Gwei

Contract

0x43690099a37976be3B385E134b8eCA9Bd3FDbBe0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve201801532024-06-27 2:51:3511 days ago1719456695IN
0x43690099...Bd3FDbBe0
0 ETH0.000343447.41708709
Transfer201801412024-06-27 2:48:5911 days ago1719456539IN
0x43690099...Bd3FDbBe0
0 ETH0.000865588.74780059
Approve152611052022-08-02 5:04:55706 days ago1659416695IN
0x43690099...Bd3FDbBe0
0 ETH0.000230998.77625095
Approve152611052022-08-02 5:04:55706 days ago1659416695IN
0x43690099...Bd3FDbBe0
0 ETH0.000213448.77625095
Approve146570072022-04-26 0:40:20804 days ago1650933620IN
0x43690099...Bd3FDbBe0
0 ETH0.0009857240.52991293
Approve142400042022-02-20 1:35:18869 days ago1645320918IN
0x43690099...Bd3FDbBe0
0 ETH0.00321448122.1262251
Approve142400012022-02-20 1:35:06869 days ago1645320906IN
0x43690099...Bd3FDbBe0
0 ETH0.00372195153.03452502
Approve141049522022-01-30 4:18:23890 days ago1643516303IN
0x43690099...Bd3FDbBe0
0 ETH0.002415699.32180252
Approve140986772022-01-29 5:04:36891 days ago1643432676IN
0x43690099...Bd3FDbBe0
0 ETH0.0042666991.55012776
Approve140782362022-01-26 1:10:44894 days ago1643159444IN
0x43690099...Bd3FDbBe0
0 ETH0.00605427129.90620807
Approve140649382022-01-23 23:46:26896 days ago1642981586IN
0x43690099...Bd3FDbBe0
0 ETH0.0088762190.45601243
Approve140635142022-01-23 18:22:38896 days ago1642962158IN
0x43690099...Bd3FDbBe0
0 ETH0.00522366112.08370167
Approve140634992022-01-23 18:18:45896 days ago1642961925IN
0x43690099...Bd3FDbBe0
0 ETH0.0043265492.83424627
Approve140634852022-01-23 18:15:35896 days ago1642961735IN
0x43690099...Bd3FDbBe0
0 ETH0.00490101105.16061719
Approve140593072022-01-23 2:56:41897 days ago1642906601IN
0x43690099...Bd3FDbBe0
0 ETH0.00505018108.36146429
Approve140589512022-01-23 1:31:45897 days ago1642901505IN
0x43690099...Bd3FDbBe0
0 ETH0.00612329131.38700037
Approve140589082022-01-23 1:22:23897 days ago1642900943IN
0x43690099...Bd3FDbBe0
0 ETH0.00575617123.50988686
Approve140568382022-01-22 17:48:12897 days ago1642873692IN
0x43690099...Bd3FDbBe0
0 ETH0.00657137141.00154373
Approve140566912022-01-22 17:16:41897 days ago1642871801IN
0x43690099...Bd3FDbBe0
0 ETH0.00702337150.7
Approve140562402022-01-22 15:34:54897 days ago1642865694IN
0x43690099...Bd3FDbBe0
0 ETH0.00855319183.5251971
Approve140559592022-01-22 14:31:45897 days ago1642861905IN
0x43690099...Bd3FDbBe0
0 ETH0.00657019140.97611492
Approve140548632022-01-22 10:30:44898 days ago1642847444IN
0x43690099...Bd3FDbBe0
0 ETH0.01224984262.84390896
Approve140543252022-01-22 8:31:08898 days ago1642840268IN
0x43690099...Bd3FDbBe0
0 ETH0.0067447144.72073519
Approve140540902022-01-22 7:32:43898 days ago1642836763IN
0x43690099...Bd3FDbBe0
0 ETH0.0130126279.21053351
Approve140540502022-01-22 7:20:26898 days ago1642836026IN
0x43690099...Bd3FDbBe0
0 ETH0.00535589114.92112065
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
145522132022-04-09 15:05:32820 days ago1649516732
0x43690099...Bd3FDbBe0
0.00512121 ETH
145522132022-04-09 15:05:32820 days ago1649516732
0x43690099...Bd3FDbBe0
0.00012804 ETH
145522132022-04-09 15:05:32820 days ago1649516732
0x43690099...Bd3FDbBe0
0.00026279 ETH
145522132022-04-09 15:05:32820 days ago1649516732
0x43690099...Bd3FDbBe0
0.00052559 ETH
145522132022-04-09 15:05:32820 days ago1649516732
0x43690099...Bd3FDbBe0
0.00578156 ETH
141968312022-02-13 8:49:41876 days ago1644742181
0x43690099...Bd3FDbBe0
0.04163334 ETH
141968312022-02-13 8:49:41876 days ago1644742181
0x43690099...Bd3FDbBe0
0.0010441 ETH
141968312022-02-13 8:49:41876 days ago1644742181
0x43690099...Bd3FDbBe0
0.00213627 ETH
141968312022-02-13 8:49:41876 days ago1644742181
0x43690099...Bd3FDbBe0
0.00427255 ETH
141968312022-02-13 8:49:41876 days ago1644742181
0x43690099...Bd3FDbBe0
0.04699807 ETH
141059942022-01-30 8:11:17890 days ago1643530277
0x43690099...Bd3FDbBe0
0.05390799 ETH
141059942022-01-30 8:11:17890 days ago1643530277
0x43690099...Bd3FDbBe0
0.00135264 ETH
141059942022-01-30 8:11:17890 days ago1643530277
0x43690099...Bd3FDbBe0
0.00276607 ETH
141059942022-01-30 8:11:17890 days ago1643530277
0x43690099...Bd3FDbBe0
0.00553214 ETH
141059942022-01-30 8:11:17890 days ago1643530277
0x43690099...Bd3FDbBe0
0.06085355 ETH
140669312022-01-24 7:19:45896 days ago1643008785
0x43690099...Bd3FDbBe0
0.07495231 ETH
140669312022-01-24 7:19:45896 days ago1643008785
0x43690099...Bd3FDbBe0
0.00188215 ETH
140669312022-01-24 7:19:45896 days ago1643008785
0x43690099...Bd3FDbBe0
0.00384579 ETH
140669312022-01-24 7:19:45896 days ago1643008785
0x43690099...Bd3FDbBe0
0.00769159 ETH
140669312022-01-24 7:19:45896 days ago1643008785
0x43690099...Bd3FDbBe0
0.08460755 ETH
140634972022-01-23 18:18:27896 days ago1642961907
0x43690099...Bd3FDbBe0
0.05183294 ETH
140634972022-01-23 18:18:27896 days ago1642961907
0x43690099...Bd3FDbBe0
0.00129899 ETH
140634972022-01-23 18:18:27896 days ago1642961907
0x43690099...Bd3FDbBe0
0.00265968 ETH
140634972022-01-23 18:18:27896 days ago1642961907
0x43690099...Bd3FDbBe0
0.00531936 ETH
140634972022-01-23 18:18:27896 days ago1642961907
0x43690099...Bd3FDbBe0
0.05851298 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RexInu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-18
*/

// SPDX-License-Identifier: Unlicensed

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

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

}  

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract RexInu is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _rOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;
    mapping (address => uint) private cooldown;
    uint256 private constant _tTotal = 1e10 * 10**9;
    
    uint256 private _buyProjectFee = 4;
    uint256 private _previousBuyProjectFee = _buyProjectFee;
    uint256 private _buyLiquidityFee = 5;
    uint256 private _previousBuyLiquidityFee = _buyLiquidityFee;
    uint256 private _buyRewardFee = 1;
    uint256 private _previousBuyRewardFee = _buyRewardFee;
    
    uint256 private _sellProjectFee = 14;
    uint256 private _previousSellProjectFee = _sellProjectFee;
    uint256 private _sellLiquidityFee = 10;
    uint256 private _previousSellLiquidityFee = _sellLiquidityFee;
    uint256 private _sellRewardFee = 4;
    uint256 private _previousSellRewardFee = _sellRewardFee;

    uint256 private tokensForReward;
    uint256 private tokensForProject;
    uint256 private tokensForLiquidity;

    address payable private _rewardWallet;
    address payable private _projectWallet;
    address payable private _liquidityWallet;
    
    string private constant _name = "Rex Inu";
    string private constant _symbol = "REX";
    uint8 private constant _decimals = 9;
    
    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private swapping;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private cooldownEnabled = false;
    uint256 private tradingActiveBlock = 0; // 0 means trading is not active
    uint256 private blocksToBlacklist = 10;
    uint256 private _maxBuyAmount = _tTotal;
    uint256 private _maxSellAmount = _tTotal;
    uint256 private _maxWalletAmount = _tTotal;
    uint256 private swapTokensAtAmount = 0;
    
    event MaxBuyAmountUpdated(uint _maxBuyAmount);
    event MaxSellAmountUpdated(uint _maxSellAmount);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor () {
        _projectWallet = payable(0x95111BDB47E39Bc9AbBDB582a00aC789F33b089b);
        _liquidityWallet = payable(address(0xdead));
        _rewardWallet = payable(0x5BBe7aE322254Cc0e818212d6102829284A7916C);
        _rOwned[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_projectWallet] = true;
        _isExcludedFromFee[_liquidityWallet] = true;
        _isExcludedFromFee[_rewardWallet] = true;
        emit Transfer(address(0x433cAEaB78ba8B9F5ab6736A436A81C47A679244), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        cooldownEnabled = onoff;
    }

    function setSwapEnabled(bool onoff) external onlyOwner(){
        swapEnabled = onoff;
    }

    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 = false;
        bool shouldSwap = false;
        if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
            require(!bots[from] && !bots[to]);

            takeFee = true;
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to] && cooldownEnabled) {
                require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxBuyAmount.");
                require(balanceOf(to) + amount <= _maxWalletAmount, "Exceeds maximum wallet token amount.");
                require(cooldown[to] < block.timestamp);
                cooldown[to] = block.timestamp + (30 seconds);
            }
            
            if (to == uniswapV2Pair && from != address(uniswapV2Router) && !_isExcludedFromFee[from] && cooldownEnabled) {
                require(amount <= _maxSellAmount, "Transfer amount exceeds the maxSellAmount.");
                shouldSwap = true;
            }
        }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = (contractTokenBalance > swapTokensAtAmount) && shouldSwap;

        if (canSwap && swapEnabled && !swapping && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        _tokenTransfer(from,to,amount,takeFee, shouldSwap);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForReward + tokensForProject;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForReward = ethBalance.mul(tokensForReward).div(totalTokensToSwap);
        uint256 ethForProject = ethBalance.mul(tokensForProject).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForReward - ethForProject;
        
        
        tokensForLiquidity = 0;
        tokensForReward = 0;
        tokensForProject = 0;
        
        (success,) = address(_rewardWallet).call{value: ethForReward}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(_projectWallet).call{value: address(this).balance}("");
    }

    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);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _liquidityWallet,
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        _projectWallet.transfer(amount);
    }
    
    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        swapEnabled = true;
        cooldownEnabled = true;
        _maxBuyAmount = 5e7 * 10**9;
        _maxSellAmount = 5e7 * 10**9;
        _maxWalletAmount = 1e8 * 10**9;
        swapTokensAtAmount = 5e6 * 10**9;
        tradingOpen = true;
        tradingActiveBlock = block.number;
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
    }
    
    function setBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function setMaxBuyAmount(uint256 maxBuy) public onlyOwner {
        _maxBuyAmount = maxBuy;
    }

    function setMaxSellAmount(uint256 maxSell) public onlyOwner {
        _maxSellAmount = maxSell;
    }
    
    function setMaxWalletAmount(uint256 maxToken) public onlyOwner {
        _maxWalletAmount = maxToken;
    }
    
    function setSwapTokensAtAmount(uint256 newAmount) public onlyOwner {
        require(newAmount >= 1e3 * 10**9, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= 5e6 * 10**9, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
    }

    function setProjectWallet(address projectWallet) public onlyOwner() {
        require(projectWallet != address(0), "projectWallet address cannot be 0");
        _isExcludedFromFee[_projectWallet] = false;
        _projectWallet = payable(projectWallet);
        _isExcludedFromFee[_projectWallet] = true;
    }

    function setRewardWallet(address rewardWallet) public onlyOwner() {
        require(rewardWallet != address(0), "rewardWallet address cannot be 0");
        _isExcludedFromFee[_rewardWallet] = false;
        _rewardWallet = payable(rewardWallet);
        _isExcludedFromFee[_rewardWallet] = true;
    }

    function setLiquidityWallet(address liquidityWallet) public onlyOwner() {
        require(liquidityWallet != address(0), "liquidityWallet address cannot be 0");
        _isExcludedFromFee[_liquidityWallet] = false;
        _liquidityWallet = payable(liquidityWallet);
        _isExcludedFromFee[_liquidityWallet] = true;
    }

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

    function setBuyFee(uint256 buyProjectFee, uint256 buyLiquidityFee, uint256 buyRewardFee) external onlyOwner {
        require(buyProjectFee + buyLiquidityFee + buyRewardFee <= 30, "Must keep buy taxes below 30%");
        _buyProjectFee = buyProjectFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyRewardFee = buyRewardFee;
    }

    function setSellFee(uint256 sellProjectFee, uint256 sellLiquidityFee, uint256 sellRewardFee) external onlyOwner {
        require(sellProjectFee + sellLiquidityFee + sellRewardFee <= 60, "Must keep sell taxes below 60%");
        _sellProjectFee = sellProjectFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellRewardFee = sellRewardFee;
    }

    function setBlocksToBlacklist(uint256 blocks) public onlyOwner {
        blocksToBlacklist = blocks;
    }

    function removeAllFee() private {
        if(_buyProjectFee == 0 && _buyLiquidityFee == 0 && _buyRewardFee == 0 && _sellProjectFee == 0 && _sellLiquidityFee == 0 && _sellRewardFee == 0) return;
        
        _previousBuyProjectFee = _buyProjectFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        _previousBuyRewardFee = _buyRewardFee;
        _previousSellProjectFee = _sellProjectFee;
        _previousSellLiquidityFee = _sellLiquidityFee;
        _previousSellRewardFee = _sellRewardFee;
        
        _buyProjectFee = 0;
        _buyLiquidityFee = 0;
        _buyRewardFee = 0;
        _sellProjectFee = 0;
        _sellLiquidityFee = 0;
        _sellRewardFee = 0;
    }
    
    function restoreAllFee() private {
        _buyProjectFee = _previousBuyProjectFee;
        _buyLiquidityFee = _previousBuyLiquidityFee;
        _buyRewardFee = _previousBuyRewardFee;
        _sellProjectFee = _previousSellProjectFee;
        _sellLiquidityFee = _previousSellLiquidityFee;
        _sellRewardFee = _previousSellRewardFee;
    }
    
    function delBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, bool isSell) private {
        if(!takeFee) {
            removeAllFee();
        } else {
            amount = _takeFees(sender, amount, isSell);
        }

        _transferStandard(sender, recipient, amount);
        
        if(!takeFee) {
            restoreAllFee();
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(tAmount);
        _rOwned[recipient] = _rOwned[recipient].add(tAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _takeFees(address sender, uint256 amount, bool isSell) private returns (uint256) {
        uint256 _totalFees;
        uint256 pjctFee;
        uint256 liqFee;
        uint256 rwrdFee;
        if(tradingActiveBlock + blocksToBlacklist >= block.number){
            _totalFees = 99;
            liqFee = 92;
        } else {
            _totalFees = _getTotalFees(isSell);
            if (isSell) {
                pjctFee = _sellProjectFee;
                liqFee = _sellLiquidityFee;
                rwrdFee = _sellRewardFee;
            } else {
                pjctFee = _buyProjectFee;
                liqFee = _buyLiquidityFee;
                rwrdFee = _buyRewardFee;
            }
        }

        uint256 fees = amount.mul(_totalFees).div(100);
        tokensForReward += fees * rwrdFee / _totalFees;
        tokensForProject += fees * pjctFee / _totalFees;
        tokensForLiquidity += fees * liqFee / _totalFees;
            
        if(fees > 0) {
            _transferStandard(sender, address(this), fees);
        }
            
        return amount -= fees;
    }

    receive() external payable {}
    
    function manualswap() public onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualsend() public onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function withdrawStuckETH() external onlyOwner {
        require(!tradingOpen, "Can only withdraw if trading hasn't started");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function _getTotalFees(bool isSell) private view returns(uint256) {
        if (isSell) {
            return _sellProjectFee + _sellLiquidityFee + _sellRewardFee;
        }
        return _buyProjectFee + _buyLiquidityFee + _buyRewardFee;
    }
}

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":"_maxBuyAmount","type":"uint256"}],"name":"MaxBuyAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellAmount","type":"uint256"}],"name":"MaxSellAmountUpdated","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","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":[],"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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setBlocksToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyProjectFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyRewardFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"projectWallet","type":"address"}],"name":"setProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardWallet","type":"address"}],"name":"setRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellProjectFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellRewardFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260046007819055600881905560056009819055600a9081556001600b819055600c55600e600d8190558055600f81905560108190556011829055601291909155601a805462ffffff60b01b191690556000601b819055601c91909155678ac7230489e80000601d819055601e819055601f556020553480156200008657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601780546001600160a01b03199081167395111bdb47e39bc9abbdb582a00ac789f33b089b1790915560188054821661dead17905560168054909116735bbe7ae322254cc0e818212d6102829284a7916c179055678ac7230489e8000060026000620001313390565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600460006200016b6200025d60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526004909352818320805485166001908117909155601754821684528284208054861682179055601854821684528284208054861682179055601654909116835291208054909216179055620001ee3390565b6001600160a01b031673433caeab78ba8b9f5ab6736a436a81c47a6792446001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef678ac7230489e800006040516200024f91815260200190565b60405180910390a36200026c565b6000546001600160a01b031690565b6128fb806200027c6000396000f3fe6080604052600436106101dc5760003560e01c8063715018a611610102578063c9567bf911610095578063e99c9d0911610064578063e99c9d09146105a1578063ea2f0b37146105c1578063f34eb0b8146105e1578063f5648a4f1461060157600080fd5b8063c9567bf914610506578063dd62ed3e1461051b578063e01af92c14610561578063e6f7ef4d1461058157600080fd5b8063a9059cbb116100d1578063a9059cbb14610491578063afa4f3b2146104b1578063b515566a146104d1578063c3c8cd80146104f157600080fd5b8063715018a6146104085780638a7804471461041d5780638da5cb5b1461043d57806395d89b411461046557600080fd5b806327a14fc21161017a5780635932ead1116101495780635932ead11461037d5780635958621e1461039d5780636fc3eaec146103bd57806370a08231146103d257600080fd5b806327a14fc214610301578063296f0a0c14610321578063313ce56714610341578063437823ec1461035d57600080fd5b80631d865c30116101b65780631d865c301461027f57806323b872dd146102a157806325519cf2146102c1578063273123b7146102e157600080fd5b806306fdde03146101e8578063095ea7b31461022a57806318160ddd1461025a57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5060408051808201909152600781526652657820496e7560c81b60208201525b60405161022191906126cd565b60405180910390f35b34801561023657600080fd5b5061024a6102453660046124f8565b610616565b6040519015158152602001610221565b34801561026657600080fd5b50678ac7230489e800005b604051908152602001610221565b34801561028b57600080fd5b5061029f61029a36600461263a565b61062d565b005b3480156102ad57600080fd5b5061024a6102bc3660046124b8565b6106d3565b3480156102cd57600080fd5b5061029f6102dc36600461263a565b61073c565b3480156102ed57600080fd5b5061029f6102fc366004612448565b6107d9565b34801561030d57600080fd5b5061029f61031c366004612622565b610824565b34801561032d57600080fd5b5061029f61033c366004612448565b610853565b34801561034d57600080fd5b5060405160098152602001610221565b34801561036957600080fd5b5061029f610378366004612448565b61092f565b34801561038957600080fd5b5061029f6103983660046125ea565b61097d565b3480156103a957600080fd5b5061029f6103b8366004612448565b6109c5565b3480156103c957600080fd5b5061029f610a95565b3480156103de57600080fd5b506102716103ed366004612448565b6001600160a01b031660009081526002602052604090205490565b34801561041457600080fd5b5061029f610acc565b34801561042957600080fd5b5061029f610438366004612448565b610b40565b34801561044957600080fd5b506000546040516001600160a01b039091168152602001610221565b34801561047157600080fd5b506040805180820190915260038152620a48ab60eb1b6020820152610214565b34801561049d57600080fd5b5061024a6104ac3660046124f8565b610c1a565b3480156104bd57600080fd5b5061029f6104cc366004612622565b610c27565b3480156104dd57600080fd5b5061029f6104ec366004612523565b610d3d565b3480156104fd57600080fd5b5061029f610de1565b34801561051257600080fd5b5061029f610e24565b34801561052757600080fd5b50610271610536366004612480565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561056d57600080fd5b5061029f61057c3660046125ea565b6111f7565b34801561058d57600080fd5b5061029f61059c366004612622565b61123f565b3480156105ad57600080fd5b5061029f6105bc366004612622565b61126e565b3480156105cd57600080fd5b5061029f6105dc366004612448565b61129d565b3480156105ed57600080fd5b5061029f6105fc366004612622565b6112e8565b34801561060d57600080fd5b5061029f611317565b60006106233384846113fc565b5060015b92915050565b6000546001600160a01b031633146106605760405162461bcd60e51b815260040161065790612720565b60405180910390fd5b603c8161066d84866127c5565b61067791906127c5565b11156106c55760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772036302500006044820152606401610657565b600d92909255600f55601155565b60006106e0848484611521565b610732843361072d8560405180606001604052806028815260200161289e602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611aba565b6113fc565b5060019392505050565b6000546001600160a01b031633146107665760405162461bcd60e51b815260040161065790612720565b601e8161077384866127c5565b61077d91906127c5565b11156107cb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203330250000006044820152606401610657565b600792909255600955600b55565b6000546001600160a01b031633146108035760405162461bcd60e51b815260040161065790612720565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461084e5760405162461bcd60e51b815260040161065790612720565b601f55565b6000546001600160a01b0316331461087d5760405162461bcd60e51b815260040161065790612720565b6001600160a01b0381166108df5760405162461bcd60e51b815260206004820152602360248201527f6c697175696469747957616c6c657420616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610657565b601880546001600160a01b03908116600090815260046020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b031633146109595760405162461bcd60e51b815260040161065790612720565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146109a75760405162461bcd60e51b815260040161065790612720565b601a8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b031633146109ef5760405162461bcd60e51b815260040161065790612720565b6001600160a01b038116610a455760405162461bcd60e51b815260206004820181905260248201527f72657761726457616c6c657420616464726573732063616e6e6f7420626520306044820152606401610657565b601680546001600160a01b03908116600090815260046020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314610abf5760405162461bcd60e51b815260040161065790612720565b47610ac981611af4565b50565b6000546001600160a01b03163314610af65760405162461bcd60e51b815260040161065790612720565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b815260040161065790612720565b6001600160a01b038116610bca5760405162461bcd60e51b815260206004820152602160248201527f70726f6a65637457616c6c657420616464726573732063616e6e6f74206265206044820152600360fc1b6064820152608401610657565b601780546001600160a01b03908116600090815260046020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000610623338484611521565b6000546001600160a01b03163314610c515760405162461bcd60e51b815260040161065790612720565b64e8d4a51000811015610cc45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610657565b6611c37937e08000811115610d385760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610657565b602055565b6000546001600160a01b03163314610d675760405162461bcd60e51b815260040161065790612720565b60005b8151811015610ddd57600160056000848481518110610d9957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dd581612833565b915050610d6a565b5050565b6000546001600160a01b03163314610e0b5760405162461bcd60e51b815260040161065790612720565b30600090815260026020526040902054610ac981611b2e565b6000546001600160a01b03163314610e4e5760405162461bcd60e51b815260040161065790612720565b601a54600160a01b900460ff1615610ea85760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610657565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610ee43082678ac7230489e800006113fc565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1d57600080fd5b505afa158015610f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f559190612464565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9d57600080fd5b505afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190612464565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561101d57600080fd5b505af1158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190612464565b601a80546001600160a01b039283166001600160a01b03199091161790556019541663f305d719473061109d816001600160a01b031660009081526002602052604090205490565b6000806110b26000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016110d496959493929190612692565b6060604051808303818588803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111269190612665565b5050601a805466b1a2bc2ec50000601d819055601e5567016345785d8a0000601f556611c37937e0800060205564ffff0000ff60a01b19811664010100000160a01b1790915543601b5560195460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b390604401602060405180830381600087803b1580156111bf57600080fd5b505af11580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddd9190612606565b6000546001600160a01b031633146112215760405162461bcd60e51b815260040161065790612720565b601a8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031633146112695760405162461bcd60e51b815260040161065790612720565b601c55565b6000546001600160a01b031633146112985760405162461bcd60e51b815260040161065790612720565b601e55565b6000546001600160a01b031633146112c75760405162461bcd60e51b815260040161065790612720565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146113125760405162461bcd60e51b815260040161065790612720565b601d55565b6000546001600160a01b031633146113415760405162461bcd60e51b815260040161065790612720565b601a54600160a01b900460ff16156113af5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610657565b604051600090339047908381818185875af1925050503d80600081146113f1576040519150601f19603f3d011682016040523d82523d6000602084013e6113f6565b606091505b50505050565b6001600160a01b03831661145e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610657565b6001600160a01b0382166114bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610657565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115855760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610657565b6001600160a01b0382166115e75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610657565b600081116116495760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610657565b60008061165e6000546001600160a01b031690565b6001600160a01b0316856001600160a01b03161415801561168d57506000546001600160a01b03858116911614155b80156116a157506001600160a01b03841615155b80156116b857506001600160a01b03841661dead14155b80156116ce5750601a54600160a81b900460ff16155b15611993576001600160a01b03851660009081526005602052604090205460ff1615801561171557506001600160a01b03841660009081526005602052604090205460ff16155b61171e57600080fd5b601a54600192506001600160a01b03868116911614801561174d57506019546001600160a01b03858116911614155b801561177257506001600160a01b03841660009081526004602052604090205460ff16155b80156117875750601a54600160c01b900460ff165b156118c057601d548311156117f05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610657565b601f5483611813866001600160a01b031660009081526002602052604090205490565b61181d91906127c5565b11156118775760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610657565b6001600160a01b038416600090815260066020526040902054421161189b57600080fd5b6118a642601e6127c5565b6001600160a01b0385166000908152600660205260409020555b601a546001600160a01b0385811691161480156118eb57506019546001600160a01b03868116911614155b801561191057506001600160a01b03851660009081526004602052604090205460ff16155b80156119255750601a54600160c01b900460ff165b1561199357601e5483111561198f5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610657565b5060015b6001600160a01b03851660009081526004602052604090205460ff16806119d257506001600160a01b03841660009081526004602052604090205460ff165b156119dc57600091505b3060009081526002602052604081205490506000602054821180156119fe5750825b9050808015611a165750601a54600160b81b900460ff165b8015611a2c5750601a54600160a81b900460ff16155b8015611a5157506001600160a01b03871660009081526004602052604090205460ff16155b8015611a7657506001600160a01b03861660009081526004602052604090205460ff16155b15611aa457601a805460ff60a81b1916600160a81b179055611a96611cd3565b601a805460ff60a81b191690555b611ab18787878787611f13565b50505050505050565b60008184841115611ade5760405162461bcd60e51b815260040161065791906126cd565b506000611aeb848661281c565b95945050505050565b6017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610ddd573d6000803e3d6000fd5b601a805460ff60b01b1916600160b01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611b8457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611bd857600080fd5b505afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190612464565b81600181518110611c3157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601954611c5791309116846113fc565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c90908590600090869030904290600401612755565b600060405180830381600087803b158015611caa57600080fd5b505af1158015611cbe573d6000803e3d6000fd5b5050601a805460ff60b01b1916905550505050565b3060009081526002602052604081205490506000601454601354601554611cfa91906127c5565b611d0491906127c5565b90506000821580611d13575081155b15611d1d57505050565b602054611d2b90600a6127fd565b831115611d4357602054611d4090600a6127fd565b92505b600060028360155486611d5691906127fd565b611d6091906127dd565b611d6a91906127dd565b90506000611d788583611f73565b905047611d8482611b2e565b6000611d904783611f73565b90506000611db387611dad60135485611fbc90919063ffffffff16565b9061203b565b90506000611dd088611dad60145486611fbc90919063ffffffff16565b9050600081611ddf848661281c565b611de9919061281c565b60006015819055601381905560148190556016546040519293506001600160a01b031691859181818185875af1925050503d8060008114611e46576040519150601f19603f3d011682016040523d82523d6000602084013e611e4b565b606091505b50909850508615801590611e5f5750600081115b15611eb257611e6e878261207d565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6017546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611eff576040519150601f19603f3d011682016040523d82523d6000602084013e611f04565b606091505b50505050505050505050505050565b81611f2557611f20612127565b611f33565b611f308584836121af565b92505b611f3e8585856122cd565b81611f6c57611f6c600854600755600a54600955600c54600b55600e54600d55601054600f55601254601155565b5050505050565b6000611fb583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aba565b9392505050565b600082611fcb57506000610627565b6000611fd783856127fd565b905082611fe485836127dd565b14611fb55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610657565b6000611fb583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612373565b6019546120959030906001600160a01b0316846113fc565b60195460185460405163f305d71960e01b81526001600160a01b039283169263f305d7199285926120d59230928992600092839216904290600401612692565b6060604051808303818588803b1580156120ee57600080fd5b505af1158015612102573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f6c9190612665565b6007541580156121375750600954155b80156121435750600b54155b801561214f5750600d54155b801561215b5750600f54155b80156121675750601154155b1561216e57565b6007805460085560098054600a55600b8054600c55600d8054600e55600f805460105560118054601255600095869055938590559184905583905582905555565b600080600080600043601c54601b546121c891906127c5565b106121da5760639350605c915061220f565b6121e3866123a1565b935085156121ff57600d549250600f549150601154905061220f565b60075492506009549150600b5490505b60006122206064611dad8a88611fbc565b90508461222d83836127fd565b61223791906127dd565b6013600082825461224891906127c5565b9091555085905061225985836127fd565b61226391906127dd565b6014600082825461227491906127c5565b9091555085905061228584836127fd565b61228f91906127dd565b601560008282546122a091906127c5565b909155505080156122b6576122b68930836122cd565b6122c0818961281c565b9998505050505050505050565b6001600160a01b0383166000908152600260205260409020546122f09082611f73565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461231f90826123d9565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115149085815260200190565b600081836123945760405162461bcd60e51b815260040161065791906126cd565b506000611aeb84866127dd565b600081156123c657601154600f54600d546123bc91906127c5565b61062791906127c5565b600b546009546007546123bc91906127c5565b6000806123e683856127c5565b905083811015611fb55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610657565b80356124438161287a565b919050565b600060208284031215612459578081fd5b8135611fb58161287a565b600060208284031215612475578081fd5b8151611fb58161287a565b60008060408385031215612492578081fd5b823561249d8161287a565b915060208301356124ad8161287a565b809150509250929050565b6000806000606084860312156124cc578081fd5b83356124d78161287a565b925060208401356124e78161287a565b929592945050506040919091013590565b6000806040838503121561250a578182fd5b82356125158161287a565b946020939093013593505050565b60006020808385031215612535578182fd5b823567ffffffffffffffff8082111561254c578384fd5b818501915085601f83011261255f578384fd5b81358181111561257157612571612864565b8060051b604051601f19603f8301168101818110858211171561259657612596612864565b604052828152858101935084860182860187018a10156125b4578788fd5b8795505b838610156125dd576125c981612438565b8552600195909501949386019386016125b8565b5098975050505050505050565b6000602082840312156125fb578081fd5b8135611fb58161288f565b600060208284031215612617578081fd5b8151611fb58161288f565b600060208284031215612633578081fd5b5035919050565b60008060006060848603121561264e578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612679578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000602080835283518082850152825b818110156126f9578581018301518582016040015282016126dd565b8181111561270a5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156127a45784516001600160a01b03168352938301939183019160010161277f565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156127d8576127d861284e565b500190565b6000826127f857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156128175761281761284e565b500290565b60008282101561282e5761282e61284e565b500390565b60006000198214156128475761284761284e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ac957600080fd5b8015158114610ac957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122043002962b51ac958dcef0e4b70ab16cc6b8a0b76bf2916fd6c5c5de1cfa6ad8064736f6c63430008040033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c8063715018a611610102578063c9567bf911610095578063e99c9d0911610064578063e99c9d09146105a1578063ea2f0b37146105c1578063f34eb0b8146105e1578063f5648a4f1461060157600080fd5b8063c9567bf914610506578063dd62ed3e1461051b578063e01af92c14610561578063e6f7ef4d1461058157600080fd5b8063a9059cbb116100d1578063a9059cbb14610491578063afa4f3b2146104b1578063b515566a146104d1578063c3c8cd80146104f157600080fd5b8063715018a6146104085780638a7804471461041d5780638da5cb5b1461043d57806395d89b411461046557600080fd5b806327a14fc21161017a5780635932ead1116101495780635932ead11461037d5780635958621e1461039d5780636fc3eaec146103bd57806370a08231146103d257600080fd5b806327a14fc214610301578063296f0a0c14610321578063313ce56714610341578063437823ec1461035d57600080fd5b80631d865c30116101b65780631d865c301461027f57806323b872dd146102a157806325519cf2146102c1578063273123b7146102e157600080fd5b806306fdde03146101e8578063095ea7b31461022a57806318160ddd1461025a57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5060408051808201909152600781526652657820496e7560c81b60208201525b60405161022191906126cd565b60405180910390f35b34801561023657600080fd5b5061024a6102453660046124f8565b610616565b6040519015158152602001610221565b34801561026657600080fd5b50678ac7230489e800005b604051908152602001610221565b34801561028b57600080fd5b5061029f61029a36600461263a565b61062d565b005b3480156102ad57600080fd5b5061024a6102bc3660046124b8565b6106d3565b3480156102cd57600080fd5b5061029f6102dc36600461263a565b61073c565b3480156102ed57600080fd5b5061029f6102fc366004612448565b6107d9565b34801561030d57600080fd5b5061029f61031c366004612622565b610824565b34801561032d57600080fd5b5061029f61033c366004612448565b610853565b34801561034d57600080fd5b5060405160098152602001610221565b34801561036957600080fd5b5061029f610378366004612448565b61092f565b34801561038957600080fd5b5061029f6103983660046125ea565b61097d565b3480156103a957600080fd5b5061029f6103b8366004612448565b6109c5565b3480156103c957600080fd5b5061029f610a95565b3480156103de57600080fd5b506102716103ed366004612448565b6001600160a01b031660009081526002602052604090205490565b34801561041457600080fd5b5061029f610acc565b34801561042957600080fd5b5061029f610438366004612448565b610b40565b34801561044957600080fd5b506000546040516001600160a01b039091168152602001610221565b34801561047157600080fd5b506040805180820190915260038152620a48ab60eb1b6020820152610214565b34801561049d57600080fd5b5061024a6104ac3660046124f8565b610c1a565b3480156104bd57600080fd5b5061029f6104cc366004612622565b610c27565b3480156104dd57600080fd5b5061029f6104ec366004612523565b610d3d565b3480156104fd57600080fd5b5061029f610de1565b34801561051257600080fd5b5061029f610e24565b34801561052757600080fd5b50610271610536366004612480565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561056d57600080fd5b5061029f61057c3660046125ea565b6111f7565b34801561058d57600080fd5b5061029f61059c366004612622565b61123f565b3480156105ad57600080fd5b5061029f6105bc366004612622565b61126e565b3480156105cd57600080fd5b5061029f6105dc366004612448565b61129d565b3480156105ed57600080fd5b5061029f6105fc366004612622565b6112e8565b34801561060d57600080fd5b5061029f611317565b60006106233384846113fc565b5060015b92915050565b6000546001600160a01b031633146106605760405162461bcd60e51b815260040161065790612720565b60405180910390fd5b603c8161066d84866127c5565b61067791906127c5565b11156106c55760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772036302500006044820152606401610657565b600d92909255600f55601155565b60006106e0848484611521565b610732843361072d8560405180606001604052806028815260200161289e602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611aba565b6113fc565b5060019392505050565b6000546001600160a01b031633146107665760405162461bcd60e51b815260040161065790612720565b601e8161077384866127c5565b61077d91906127c5565b11156107cb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203330250000006044820152606401610657565b600792909255600955600b55565b6000546001600160a01b031633146108035760405162461bcd60e51b815260040161065790612720565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461084e5760405162461bcd60e51b815260040161065790612720565b601f55565b6000546001600160a01b0316331461087d5760405162461bcd60e51b815260040161065790612720565b6001600160a01b0381166108df5760405162461bcd60e51b815260206004820152602360248201527f6c697175696469747957616c6c657420616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610657565b601880546001600160a01b03908116600090815260046020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b031633146109595760405162461bcd60e51b815260040161065790612720565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146109a75760405162461bcd60e51b815260040161065790612720565b601a8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b031633146109ef5760405162461bcd60e51b815260040161065790612720565b6001600160a01b038116610a455760405162461bcd60e51b815260206004820181905260248201527f72657761726457616c6c657420616464726573732063616e6e6f7420626520306044820152606401610657565b601680546001600160a01b03908116600090815260046020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314610abf5760405162461bcd60e51b815260040161065790612720565b47610ac981611af4565b50565b6000546001600160a01b03163314610af65760405162461bcd60e51b815260040161065790612720565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b815260040161065790612720565b6001600160a01b038116610bca5760405162461bcd60e51b815260206004820152602160248201527f70726f6a65637457616c6c657420616464726573732063616e6e6f74206265206044820152600360fc1b6064820152608401610657565b601780546001600160a01b03908116600090815260046020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000610623338484611521565b6000546001600160a01b03163314610c515760405162461bcd60e51b815260040161065790612720565b64e8d4a51000811015610cc45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610657565b6611c37937e08000811115610d385760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610657565b602055565b6000546001600160a01b03163314610d675760405162461bcd60e51b815260040161065790612720565b60005b8151811015610ddd57600160056000848481518110610d9957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dd581612833565b915050610d6a565b5050565b6000546001600160a01b03163314610e0b5760405162461bcd60e51b815260040161065790612720565b30600090815260026020526040902054610ac981611b2e565b6000546001600160a01b03163314610e4e5760405162461bcd60e51b815260040161065790612720565b601a54600160a01b900460ff1615610ea85760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610657565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610ee43082678ac7230489e800006113fc565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1d57600080fd5b505afa158015610f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f559190612464565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9d57600080fd5b505afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190612464565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561101d57600080fd5b505af1158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190612464565b601a80546001600160a01b039283166001600160a01b03199091161790556019541663f305d719473061109d816001600160a01b031660009081526002602052604090205490565b6000806110b26000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016110d496959493929190612692565b6060604051808303818588803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111269190612665565b5050601a805466b1a2bc2ec50000601d819055601e5567016345785d8a0000601f556611c37937e0800060205564ffff0000ff60a01b19811664010100000160a01b1790915543601b5560195460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b390604401602060405180830381600087803b1580156111bf57600080fd5b505af11580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddd9190612606565b6000546001600160a01b031633146112215760405162461bcd60e51b815260040161065790612720565b601a8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031633146112695760405162461bcd60e51b815260040161065790612720565b601c55565b6000546001600160a01b031633146112985760405162461bcd60e51b815260040161065790612720565b601e55565b6000546001600160a01b031633146112c75760405162461bcd60e51b815260040161065790612720565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146113125760405162461bcd60e51b815260040161065790612720565b601d55565b6000546001600160a01b031633146113415760405162461bcd60e51b815260040161065790612720565b601a54600160a01b900460ff16156113af5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610657565b604051600090339047908381818185875af1925050503d80600081146113f1576040519150601f19603f3d011682016040523d82523d6000602084013e6113f6565b606091505b50505050565b6001600160a01b03831661145e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610657565b6001600160a01b0382166114bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610657565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115855760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610657565b6001600160a01b0382166115e75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610657565b600081116116495760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610657565b60008061165e6000546001600160a01b031690565b6001600160a01b0316856001600160a01b03161415801561168d57506000546001600160a01b03858116911614155b80156116a157506001600160a01b03841615155b80156116b857506001600160a01b03841661dead14155b80156116ce5750601a54600160a81b900460ff16155b15611993576001600160a01b03851660009081526005602052604090205460ff1615801561171557506001600160a01b03841660009081526005602052604090205460ff16155b61171e57600080fd5b601a54600192506001600160a01b03868116911614801561174d57506019546001600160a01b03858116911614155b801561177257506001600160a01b03841660009081526004602052604090205460ff16155b80156117875750601a54600160c01b900460ff165b156118c057601d548311156117f05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610657565b601f5483611813866001600160a01b031660009081526002602052604090205490565b61181d91906127c5565b11156118775760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610657565b6001600160a01b038416600090815260066020526040902054421161189b57600080fd5b6118a642601e6127c5565b6001600160a01b0385166000908152600660205260409020555b601a546001600160a01b0385811691161480156118eb57506019546001600160a01b03868116911614155b801561191057506001600160a01b03851660009081526004602052604090205460ff16155b80156119255750601a54600160c01b900460ff165b1561199357601e5483111561198f5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610657565b5060015b6001600160a01b03851660009081526004602052604090205460ff16806119d257506001600160a01b03841660009081526004602052604090205460ff165b156119dc57600091505b3060009081526002602052604081205490506000602054821180156119fe5750825b9050808015611a165750601a54600160b81b900460ff165b8015611a2c5750601a54600160a81b900460ff16155b8015611a5157506001600160a01b03871660009081526004602052604090205460ff16155b8015611a7657506001600160a01b03861660009081526004602052604090205460ff16155b15611aa457601a805460ff60a81b1916600160a81b179055611a96611cd3565b601a805460ff60a81b191690555b611ab18787878787611f13565b50505050505050565b60008184841115611ade5760405162461bcd60e51b815260040161065791906126cd565b506000611aeb848661281c565b95945050505050565b6017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610ddd573d6000803e3d6000fd5b601a805460ff60b01b1916600160b01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611b8457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611bd857600080fd5b505afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190612464565b81600181518110611c3157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601954611c5791309116846113fc565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c90908590600090869030904290600401612755565b600060405180830381600087803b158015611caa57600080fd5b505af1158015611cbe573d6000803e3d6000fd5b5050601a805460ff60b01b1916905550505050565b3060009081526002602052604081205490506000601454601354601554611cfa91906127c5565b611d0491906127c5565b90506000821580611d13575081155b15611d1d57505050565b602054611d2b90600a6127fd565b831115611d4357602054611d4090600a6127fd565b92505b600060028360155486611d5691906127fd565b611d6091906127dd565b611d6a91906127dd565b90506000611d788583611f73565b905047611d8482611b2e565b6000611d904783611f73565b90506000611db387611dad60135485611fbc90919063ffffffff16565b9061203b565b90506000611dd088611dad60145486611fbc90919063ffffffff16565b9050600081611ddf848661281c565b611de9919061281c565b60006015819055601381905560148190556016546040519293506001600160a01b031691859181818185875af1925050503d8060008114611e46576040519150601f19603f3d011682016040523d82523d6000602084013e611e4b565b606091505b50909850508615801590611e5f5750600081115b15611eb257611e6e878261207d565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6017546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611eff576040519150601f19603f3d011682016040523d82523d6000602084013e611f04565b606091505b50505050505050505050505050565b81611f2557611f20612127565b611f33565b611f308584836121af565b92505b611f3e8585856122cd565b81611f6c57611f6c600854600755600a54600955600c54600b55600e54600d55601054600f55601254601155565b5050505050565b6000611fb583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aba565b9392505050565b600082611fcb57506000610627565b6000611fd783856127fd565b905082611fe485836127dd565b14611fb55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610657565b6000611fb583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612373565b6019546120959030906001600160a01b0316846113fc565b60195460185460405163f305d71960e01b81526001600160a01b039283169263f305d7199285926120d59230928992600092839216904290600401612692565b6060604051808303818588803b1580156120ee57600080fd5b505af1158015612102573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f6c9190612665565b6007541580156121375750600954155b80156121435750600b54155b801561214f5750600d54155b801561215b5750600f54155b80156121675750601154155b1561216e57565b6007805460085560098054600a55600b8054600c55600d8054600e55600f805460105560118054601255600095869055938590559184905583905582905555565b600080600080600043601c54601b546121c891906127c5565b106121da5760639350605c915061220f565b6121e3866123a1565b935085156121ff57600d549250600f549150601154905061220f565b60075492506009549150600b5490505b60006122206064611dad8a88611fbc565b90508461222d83836127fd565b61223791906127dd565b6013600082825461224891906127c5565b9091555085905061225985836127fd565b61226391906127dd565b6014600082825461227491906127c5565b9091555085905061228584836127fd565b61228f91906127dd565b601560008282546122a091906127c5565b909155505080156122b6576122b68930836122cd565b6122c0818961281c565b9998505050505050505050565b6001600160a01b0383166000908152600260205260409020546122f09082611f73565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461231f90826123d9565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115149085815260200190565b600081836123945760405162461bcd60e51b815260040161065791906126cd565b506000611aeb84866127dd565b600081156123c657601154600f54600d546123bc91906127c5565b61062791906127c5565b600b546009546007546123bc91906127c5565b6000806123e683856127c5565b905083811015611fb55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610657565b80356124438161287a565b919050565b600060208284031215612459578081fd5b8135611fb58161287a565b600060208284031215612475578081fd5b8151611fb58161287a565b60008060408385031215612492578081fd5b823561249d8161287a565b915060208301356124ad8161287a565b809150509250929050565b6000806000606084860312156124cc578081fd5b83356124d78161287a565b925060208401356124e78161287a565b929592945050506040919091013590565b6000806040838503121561250a578182fd5b82356125158161287a565b946020939093013593505050565b60006020808385031215612535578182fd5b823567ffffffffffffffff8082111561254c578384fd5b818501915085601f83011261255f578384fd5b81358181111561257157612571612864565b8060051b604051601f19603f8301168101818110858211171561259657612596612864565b604052828152858101935084860182860187018a10156125b4578788fd5b8795505b838610156125dd576125c981612438565b8552600195909501949386019386016125b8565b5098975050505050505050565b6000602082840312156125fb578081fd5b8135611fb58161288f565b600060208284031215612617578081fd5b8151611fb58161288f565b600060208284031215612633578081fd5b5035919050565b60008060006060848603121561264e578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612679578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000602080835283518082850152825b818110156126f9578581018301518582016040015282016126dd565b8181111561270a5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156127a45784516001600160a01b03168352938301939183019160010161277f565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156127d8576127d861284e565b500190565b6000826127f857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156128175761281761284e565b500290565b60008282101561282e5761282e61284e565b500390565b60006000198214156128475761284761284e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ac957600080fd5b8015158114610ac957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122043002962b51ac958dcef0e4b70ab16cc6b8a0b76bf2916fd6c5c5de1cfa6ad8064736f6c63430008040033

Deployed Bytecode Sourcemap

3519:17223:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6540:83;;;;;;;;;;-1:-1:-1;6610:5:0;;;;;;;;;;;;-1:-1:-1;;;6610:5:0;;;;6540:83;;;;;;;:::i;:::-;;;;;;;;7371:161;;;;;;;;;;-1:-1:-1;7371:161:0;;;;;:::i;:::-;;:::i;:::-;;;6833:14:1;;6826:22;6808:41;;6796:2;6781:18;7371:161:0;6763:92:1;6817:95:0;;;;;;;;;;-1:-1:-1;3918:12:0;6817:95;;;15478:25:1;;;15466:2;15451:18;6817:95:0;15433:76:1;16401:360:0;;;;;;;;;;-1:-1:-1;16401:360:0;;;;;:::i;:::-;;:::i;:::-;;7540:313;;;;;;;;;;-1:-1:-1;7540:313:0;;;;;:::i;:::-;;:::i;16047:346::-;;;;;;;;;;-1:-1:-1;16047:346:0;;;;;:::i;:::-;;:::i;17970:88::-;;;;;;;;;;-1:-1:-1;17970:88:0;;;;;:::i;:::-;;:::i;14383:109::-;;;;;;;;;;-1:-1:-1;14383:109:0;;;;;:::i;:::-;;:::i;15467:331::-;;;;;;;;;;-1:-1:-1;15467:331:0;;;;;:::i;:::-;;:::i;6726:83::-;;;;;;;;;;-1:-1:-1;6726:83:0;;4977:1;16968:36:1;;16956:2;16941:18;6726:83:0;16923:87:1;15806:111:0;;;;;;;;;;-1:-1:-1;15806:111:0;;;;;:::i;:::-;;:::i;7861:103::-;;;;;;;;;;-1:-1:-1;7861:103:0;;;;;:::i;:::-;;:::i;15152:307::-;;;;;;;;;;-1:-1:-1;15152:307:0;;;;;:::i;:::-;;:::i;20082:153::-;;;;;;;;;;;;;:::i;6920:117::-;;;;;;;;;;-1:-1:-1;6920:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;7013:16:0;6986:7;7013:16;;;:7;:16;;;;;;;6920:117;2598:148;;;;;;;;;;;;;:::i;14829:315::-;;;;;;;;;;-1:-1:-1;14829:315:0;;;;;:::i;:::-;;:::i;2384:79::-;;;;;;;;;;-1:-1:-1;2422:7:0;2449:6;2384:79;;-1:-1:-1;;;;;2449:6:0;;;4786:51:1;;4774:2;4759:18;2384:79:0;4741:102:1;6631:87:0;;;;;;;;;;-1:-1:-1;6703:7:0;;;;;;;;;;;;-1:-1:-1;;;6703:7:0;;;;6631:87;;7045:167;;;;;;;;;;-1:-1:-1;7045:167:0;;;;;:::i;:::-;;:::i;14504:317::-;;;;;;;;;;-1:-1:-1;14504:317:0;;;;;:::i;:::-;;:::i;13989:164::-;;;;;;;;;;-1:-1:-1;13989:164:0;;;;;:::i;:::-;;:::i;19916:154::-;;;;;;;;;;;;;:::i;13001:976::-;;;;;;;;;;;;;:::i;7220:143::-;;;;;;;;;;-1:-1:-1;7220:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;7328:18:0;;;7301:7;7328:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7220:143;7972:94;;;;;;;;;;-1:-1:-1;7972:94:0;;;;;:::i;:::-;;:::i;16769:108::-;;;;;;;;;;-1:-1:-1;16769:108:0;;;;;:::i;:::-;;:::i;14268:103::-;;;;;;;;;;-1:-1:-1;14268:103:0;;;;;:::i;:::-;;:::i;15929:110::-;;;;;;;;;;-1:-1:-1;15929:110:0;;;;;:::i;:::-;;:::i;14161:99::-;;;;;;;;;;-1:-1:-1;14161:99:0;;;;;:::i;:::-;;:::i;20243:239::-;;;;;;;;;;;;;:::i;7371:161::-;7446:4;7463:39;182:10;7486:7;7495:6;7463:8;:39::i;:::-;-1:-1:-1;7520:4:0;7371:161;;;;;:::o;16401:360::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;;;;;;;;;16585:2:::1;16568:13:::0;16532:33:::1;16549:16:::0;16532:14;:33:::1;:::i;:::-;:49;;;;:::i;:::-;:55;;16524:98;;;::::0;-1:-1:-1;;;16524:98:0;;12014:2:1;16524:98:0::1;::::0;::::1;11996:21:1::0;12053:2;12033:18;;;12026:30;12092:32;12072:18;;;12065:60;12142:18;;16524:98:0::1;11986:180:1::0;16524:98:0::1;16633:15;:32:::0;;;;16676:17:::1;:36:::0;16723:14:::1;:30:::0;16401:360::o;7540:313::-;7638:4;7655:36;7665:6;7673:9;7684:6;7655:9;:36::i;:::-;7702:121;7711:6;182:10;7733:89;7771:6;7733:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7733:19:0;;;;;;:11;:19;;;;;;;;182:10;7733:33;;;;;;;;;;:37;:89::i;:::-;7702:8;:121::i;:::-;-1:-1:-1;7841:4:0;7540:313;;;;;:::o;16047:346::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;16224:2:::1;16208:12:::0;16174:31:::1;16190:15:::0;16174:13;:31:::1;:::i;:::-;:46;;;;:::i;:::-;:52;;16166:94;;;::::0;-1:-1:-1;;;16166:94:0;;11295:2:1;16166:94:0::1;::::0;::::1;11277:21:1::0;11334:2;11314:18;;;11307:30;11373:31;11353:18;;;11346:59;11422:18;;16166:94:0::1;11267:179:1::0;16166:94:0::1;16271:14;:30:::0;;;;16312:16:::1;:34:::0;16357:13:::1;:28:::0;16047:346::o;17970:88::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18030:12:0::1;18045:5;18030:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;18030:20:0::1;::::0;;17970:88::o;14383:109::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;14457:16:::1;:27:::0;14383:109::o;15467:331::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15558:29:0;::::1;15550:77;;;::::0;-1:-1:-1;;;15550:77:0;;12783:2:1;15550:77:0::1;::::0;::::1;12765:21:1::0;12822:2;12802:18;;;12795:30;12861:34;12841:18;;;12834:62;-1:-1:-1;;;12912:18:1;;;12905:33;12955:19;;15550:77:0::1;12755:225:1::0;15550:77:0::1;15657:16;::::0;;-1:-1:-1;;;;;15657:16:0;;::::1;15677:5;15638:36:::0;;;:18:::1;:36;::::0;;;;;:44;;-1:-1:-1;;15638:44:0;;::::1;::::0;;;15693:43;;-1:-1:-1;;;;;;15693:43:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;15747:36;;;;;:43;;;;::::1;-1:-1:-1::0;15747:43:0::1;::::0;;15467:331::o;15806:111::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15875:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;15875:34:0::1;15905:4;15875:34;::::0;;15806:111::o;7861:103::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;7933:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;7933:23:0::1;-1:-1:-1::0;;;;7933:23:0;;::::1;::::0;;;::::1;::::0;;7861:103::o;15152:307::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15237:26:0;::::1;15229:71;;;::::0;-1:-1:-1;;;15229:71:0;;14350:2:1;15229:71:0::1;::::0;::::1;14332:21:1::0;;;14369:18;;;14362:30;14428:34;14408:18;;;14401:62;14480:18;;15229:71:0::1;14322:182:1::0;15229:71:0::1;15330:13;::::0;;-1:-1:-1;;;;;15330:13:0;;::::1;15347:5;15311:33:::0;;;:18:::1;:33;::::0;;;;;:41;;-1:-1:-1;;15311:41:0;;::::1;::::0;;;15363:37;;-1:-1:-1;;;;;;15363:37:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;15411:33;;;;;:40;;;;::::1;-1:-1:-1::0;15411:40:0::1;::::0;;15152:307::o;20082:153::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;20163:21:::1;20195:32;20163:21:::0;20195:12:::1;:32::i;:::-;2581:1;20082:153::o:0;2598:148::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;2705:1:::1;2689:6:::0;;2668:40:::1;::::0;-1:-1:-1;;;;;2689:6:0;;::::1;::::0;2668:40:::1;::::0;2705:1;;2668:40:::1;2736:1;2719:19:::0;;-1:-1:-1;;;;;;2719:19:0::1;::::0;;2598:148::o;14829:315::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14916:27:0;::::1;14908:73;;;::::0;-1:-1:-1;;;14908:73:0;;8833:2:1;14908:73:0::1;::::0;::::1;8815:21:1::0;8872:2;8852:18;;;8845:30;8911:34;8891:18;;;8884:62;-1:-1:-1;;;8962:18:1;;;8955:31;9003:19;;14908:73:0::1;8805:223:1::0;14908:73:0::1;15011:14;::::0;;-1:-1:-1;;;;;15011:14:0;;::::1;15029:5;14992:34:::0;;;:18:::1;:34;::::0;;;;;:42;;-1:-1:-1;;14992:42:0;;::::1;::::0;;;15045:39;;-1:-1:-1;;;;;;15045:39:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;15095:34;;;;;:41;;;;::::1;-1:-1:-1::0;15095:41:0::1;::::0;;14829:315::o;7045:167::-;7123:4;7140:42;182:10;7164:9;7175:6;7140:9;:42::i;14504:317::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;14603:11:::1;14590:9;:24;;14582:90;;;::::0;-1:-1:-1;;;14582:90:0;;9235:2:1;14582:90:0::1;::::0;::::1;9217:21:1::0;9274:2;9254:18;;;9247:30;9313:34;9293:18;;;9286:62;-1:-1:-1;;;9364:18:1;;;9357:51;9425:19;;14582:90:0::1;9207:243:1::0;14582:90:0::1;14704:11;14691:9;:24;;14683:89;;;::::0;-1:-1:-1;;;14683:89:0;;9657:2:1;14683:89:0::1;::::0;::::1;9639:21:1::0;9696:2;9676:18;;;9669:30;9735:34;9715:18;;;9708:62;-1:-1:-1;;;9786:18:1;;;9779:50;9846:19;;14683:89:0::1;9629:242:1::0;14683:89:0::1;14783:18;:30:::0;14504:317::o;13989:164::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;14063:6:::1;14058:88;14079:5;:12;14075:1;:16;14058:88;;;14130:4;14113;:14;14118:5;14124:1;14118:8;;;;;;-1:-1:-1::0;;;14118:8:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;14113:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;14113:14:0;:21;;-1:-1:-1;;14113:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14093:3;::::1;::::0;::::1;:::i;:::-;;;;14058:88;;;;13989:164:::0;:::o;19916:154::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;20012:4:::1;19968:23;7013:16:::0;;;:7;:16;;;;;;20029:33:::1;7013:16:::0;20029::::1;:33::i;13001:976::-:0;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;13065:11:::1;::::0;-1:-1:-1;;;13065:11:0;::::1;;;13064:12;13056:47;;;::::0;-1:-1:-1;;;13056:47:0;;13998:2:1;13056:47:0::1;::::0;::::1;13980:21:1::0;14037:2;14017:18;;;14010:30;14076:25;14056:18;;;14049:53;14119:18;;13056:47:0::1;13970:173:1::0;13056:47:0::1;13225:15;:34:::0;;-1:-1:-1;;;;;;13225:34:0::1;13171:42;13225:34:::0;;::::1;::::0;;;13270:58:::1;13287:4;13171:42:::0;3918:12:::1;13270:8;:58::i;:::-;13373:16;-1:-1:-1::0;;;;;13373:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13355:56:0::1;;13420:4;13427:16;-1:-1:-1::0;;;;;13427:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13355:96;::::0;-1:-1:-1;;;;;;13355:96:0::1;::::0;;;;;;-1:-1:-1;;;;;5078:15:1;;;13355:96:0::1;::::0;::::1;5060:34:1::0;5130:15;;5110:18;;;5103:43;4995:18;;13355:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13339:13;:112:::0;;-1:-1:-1;;;;;13339:112:0;;::::1;-1:-1:-1::0;;;;;;13339:112:0;;::::1;;::::0;;13462:15:::1;::::0;::::1;:31;13501:21;13532:4;13538:24;13532:4:::0;-1:-1:-1;;;;;7013:16:0;6986:7;7013:16;;;:7;:16;;;;;;;6920:117;13538:24:::1;13563:1;13565::::0;13567:7:::1;2422::::0;2449:6;-1:-1:-1;;;;;2449:6:0;;2384:79;13567:7:::1;13575:15;13462:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;13602:11:0::1;:18:::0;;13680:11:::1;13664:13;:27:::0;;;13702:14:::1;:28:::0;13760:11:::1;13741:16;:30:::0;13803:11:::1;13782:18;:32:::0;-1:-1:-1;;;;13825:18:0;;-1:-1:-1;;;13825:18:0;;;;13875:12:::1;13854:18;:33:::0;13936:15:::1;::::0;13898:71:::1;::::0;-1:-1:-1;;;13898:71:0;;-1:-1:-1;;;;;13936:15:0;;::::1;-1:-1:-1::0;13898:71:0;::::1;5331:51:1::0;-1:-1:-1;;5398:18:1;;;5391:34;13905:13:0;;;-1:-1:-1;13898:29:0::1;::::0;5304:18:1;;13898:71:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7972:94::-:0;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;8039:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;8039:19:0::1;-1:-1:-1::0;;;;8039:19:0;;::::1;::::0;;;::::1;::::0;;7972:94::o;16769:108::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;16843:17:::1;:26:::0;16769:108::o;14268:103::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;14339:14:::1;:24:::0;14268:103::o;15929:110::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15996:27:0::1;16026:5;15996:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;15996:35:0::1;::::0;;15929:110::o;14161:99::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;14230:13:::1;:22:::0;14161:99::o;20243:239::-;2511:6;;-1:-1:-1;;;;;2511:6:0;182:10;2511:22;2503:67;;;;-1:-1:-1;;;2503:67:0;;;;;;;:::i;:::-;20310:11:::1;::::0;-1:-1:-1;;;20310:11:0;::::1;;;20309:12;20301:68;;;::::0;-1:-1:-1;;;20301:68:0;;15122:2:1;20301:68:0::1;::::0;::::1;15104:21:1::0;15161:2;15141:18;;;15134:30;15200:34;15180:18;;;15173:62;-1:-1:-1;;;15251:18:1;;;15244:41;15302:19;;20301:68:0::1;15094:233:1::0;20301:68:0::1;20416:58;::::0;20380:12:::1;::::0;20424:10:::1;::::0;20448:21:::1;::::0;20380:12;20416:58;20380:12;20416:58;20448:21;20424:10;20416:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;20243:239:0:o;8074:335::-;-1:-1:-1;;;;;8167:19:0;;8159:68;;;;-1:-1:-1;;;8159:68:0;;13593:2:1;8159:68:0;;;13575:21:1;13632:2;13612:18;;;13605:30;13671:34;13651:18;;;13644:62;-1:-1:-1;;;13722:18:1;;;13715:34;13766:19;;8159:68:0;13565:226:1;8159:68:0;-1:-1:-1;;;;;8246:21:0;;8238:68;;;;-1:-1:-1;;;8238:68:0;;8074:2:1;8238:68:0;;;8056:21:1;8113:2;8093:18;;;8086:30;8152:34;8132:18;;;8125:62;-1:-1:-1;;;8203:18:1;;;8196:32;8245:19;;8238:68:0;8046:224:1;8238:68:0;-1:-1:-1;;;;;8317:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8369:32;;15478:25:1;;;8369:32:0;;15451:18:1;8369:32:0;;;;;;;;8074:335;;;:::o;8417:1850::-;-1:-1:-1;;;;;8505:18:0;;8497:68;;;;-1:-1:-1;;;8497:68:0;;13187:2:1;8497:68:0;;;13169:21:1;13226:2;13206:18;;;13199:30;13265:34;13245:18;;;13238:62;-1:-1:-1;;;13316:18:1;;;13309:35;13361:19;;8497:68:0;13159:227:1;8497:68:0;-1:-1:-1;;;;;8584:16:0;;8576:64;;;;-1:-1:-1;;;8576:64:0;;7670:2:1;8576:64:0;;;7652:21:1;7709:2;7689:18;;;7682:30;7748:34;7728:18;;;7721:62;-1:-1:-1;;;7799:18:1;;;7792:33;7842:19;;8576:64:0;7642:225:1;8576:64:0;8668:1;8659:6;:10;8651:64;;;;-1:-1:-1;;;8651:64:0;;12373:2:1;8651:64:0;;;12355:21:1;12412:2;12392:18;;;12385:30;12451:34;12431:18;;;12424:62;-1:-1:-1;;;12502:18:1;;;12495:39;12551:19;;8651:64:0;12345:231:1;8651:64:0;8726:12;8757:15;8803:7;2422;2449:6;-1:-1:-1;;;;;2449:6:0;;2384:79;8803:7;-1:-1:-1;;;;;8795:15:0;:4;-1:-1:-1;;;;;8795:15:0;;;:32;;;;-1:-1:-1;2422:7:0;2449:6;-1:-1:-1;;;;;8814:13:0;;;2449:6;;8814:13;;8795:32;:52;;;;-1:-1:-1;;;;;;8831:16:0;;;;8795:52;:77;;;;-1:-1:-1;;;;;;8851:21:0;;8865:6;8851:21;;8795:77;:90;;;;-1:-1:-1;8877:8:0;;-1:-1:-1;;;8877:8:0;;;;8876:9;8795:90;8791:939;;;-1:-1:-1;;;;;8911:10:0;;;;;;:4;:10;;;;;;;;8910:11;:24;;;;-1:-1:-1;;;;;;8926:8:0;;;;;;:4;:8;;;;;;;;8925:9;8910:24;8902:33;;;;;;8993:13;;8962:4;;-1:-1:-1;;;;;;8985:21:0;;;8993:13;;8985:21;:55;;;;-1:-1:-1;9024:15:0;;-1:-1:-1;;;;;9010:30:0;;;9024:15;;9010:30;;8985:55;:82;;;;-1:-1:-1;;;;;;9045:22:0;;;;;;:18;:22;;;;;;;;9044:23;8985:82;:101;;;;-1:-1:-1;9071:15:0;;-1:-1:-1;;;9071:15:0;;;;8985:101;8981:451;;;9125:13;;9115:6;:23;;9107:77;;;;-1:-1:-1;;;9107:77:0;;10483:2:1;9107:77:0;;;10465:21:1;10522:2;10502:18;;;10495:30;10561:34;10541:18;;;10534:62;-1:-1:-1;;;10612:18:1;;;10605:39;10661:19;;9107:77:0;10455:231:1;9107:77:0;9237:16;;9227:6;9211:13;9221:2;-1:-1:-1;;;;;7013:16:0;6986:7;7013:16;;;:7;:16;;;;;;;6920:117;9211:13;:22;;;;:::i;:::-;:42;;9203:91;;;;-1:-1:-1;;;9203:91:0;;10078:2:1;9203:91:0;;;10060:21:1;10117:2;10097:18;;;10090:30;10156:34;10136:18;;;10129:62;-1:-1:-1;;;10207:18:1;;;10200:34;10251:19;;9203:91:0;10050:226:1;9203:91:0;-1:-1:-1;;;;;9321:12:0;;;;;;:8;:12;;;;;;9336:15;-1:-1:-1;9313:39:0;;;;;;9386:30;:15;9405:10;9386:30;:::i;:::-;-1:-1:-1;;;;;9371:12:0;;;;;;:8;:12;;;;;:45;8981:451;9470:13;;-1:-1:-1;;;;;9464:19:0;;;9470:13;;9464:19;:55;;;;-1:-1:-1;9503:15:0;;-1:-1:-1;;;;;9487:32:0;;;9503:15;;9487:32;;9464:55;:84;;;;-1:-1:-1;;;;;;9524:24:0;;;;;;:18;:24;;;;;;;;9523:25;9464:84;:103;;;;-1:-1:-1;9552:15:0;;-1:-1:-1;;;9552:15:0;;;;9464:103;9460:259;;;9606:14;;9596:6;:24;;9588:79;;;;-1:-1:-1;;;9588:79:0;;14711:2:1;9588:79:0;;;14693:21:1;14750:2;14730:18;;;14723:30;14789:34;14769:18;;;14762:62;-1:-1:-1;;;14840:18:1;;;14833:40;14890:19;;9588:79:0;14683:232:1;9588:79:0;-1:-1:-1;9699:4:0;9460:259;-1:-1:-1;;;;;9745:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;9773:22:0;;;;;;:18;:22;;;;;;;;9745:50;9742:97;;;9822:5;9812:15;;9742:97;9900:4;9851:28;7013:16;;;:7;:16;;;;;;9851:55;;9917:12;9956:18;;9933:20;:41;9932:57;;;;;9979:10;9932:57;9917:72;;10006:7;:22;;;;-1:-1:-1;10017:11:0;;-1:-1:-1;;;10017:11:0;;;;10006:22;:35;;;;-1:-1:-1;10033:8:0;;-1:-1:-1;;;10033:8:0;;;;10032:9;10006:35;:64;;;;-1:-1:-1;;;;;;10046:24:0;;;;;;:18;:24;;;;;;;;10045:25;10006:64;:91;;;;-1:-1:-1;;;;;;10075:22:0;;;;;;:18;:22;;;;;;;;10074:23;10006:91;10002:195;;;10114:8;:15;;-1:-1:-1;;;;10114:15:0;-1:-1:-1;;;10114:15:0;;;10144:10;:8;:10::i;:::-;10169:8;:16;;-1:-1:-1;;;;10169:16:0;;;10002:195;10209:50;10224:4;10229:2;10232:6;10239:7;10248:10;10209:14;:50::i;:::-;8417:1850;;;;;;;:::o;1239:190::-;1325:7;1361:12;1353:6;;;;1345:29;;;;-1:-1:-1;;;1345:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1385:9:0;1397:5;1401:1;1397;:5;:::i;:::-;1385:17;1239:190;-1:-1:-1;;;;;1239:190:0:o;12893:96::-;12950:14;;:31;;-1:-1:-1;;;;;12950:14:0;;;;:31;;;;;12974:6;;12950:14;:31;:14;:31;12974:6;12950:14;:31;;;;;;;;;;;;;;;;;;;11963:483;5839:6;:13;;-1:-1:-1;;;;5839:13:0;-1:-1:-1;;;5839:13:0;;;12065:16:::1;::::0;;12079:1:::1;12065:16:::0;;;;;::::1;::::0;;-1:-1:-1;;12065:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;12065:16:0::1;12041:40;;12110:4;12092;12097:1;12092:7;;;;;;-1:-1:-1::0;;;12092:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;12092:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;12136:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;12136:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;12092:7;;12136:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12126:4;12131:1;12126:7;;;;;;-1:-1:-1::0;;;12126:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;12126:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;12201:15:::1;::::0;12169:62:::1;::::0;12186:4:::1;::::0;12201:15:::1;12219:11:::0;12169:8:::1;:62::i;:::-;12242:15;::::0;:196:::1;::::0;-1:-1:-1;;;12242:196:0;;-1:-1:-1;;;;;12242:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;12323:11;;12242:15:::1;::::0;12365:4;;12392::::1;::::0;12412:15:::1;::::0;12242:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5875:6:0;:14;;-1:-1:-1;;;;5875:14:0;;;-1:-1:-1;;;;11963:483:0:o;10275:1680::-;10358:4;10314:23;7013:16;;;:7;:16;;;;;;10314:50;;10375:25;10442:16;;10424:15;;10403:18;;:36;;;;:::i;:::-;:55;;;;:::i;:::-;10375:83;-1:-1:-1;10469:12:0;10505:20;;;:46;;-1:-1:-1;10529:22:0;;10505:46;10502:60;;;10554:7;;;10275:1680::o;10502:60::-;10595:18;;:23;;10616:2;10595:23;:::i;:::-;10577:15;:41;10574:114;;;10653:18;;:23;;10674:2;10653:23;:::i;:::-;10635:41;;10574:114;10757:23;10842:1;10822:17;10801:18;;10783:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;10757:86;-1:-1:-1;10854:26:0;10883:36;:15;10757:86;10883:19;:36::i;:::-;10854:65;-1:-1:-1;10968:21:0;11002:36;10854:65;11002:16;:36::i;:::-;11060:18;11081:44;:21;11107:17;11081:25;:44::i;:::-;11060:65;;11146:20;11169:54;11205:17;11169:31;11184:15;;11169:10;:14;;:31;;;;:::i;:::-;:35;;:54::i;:::-;11146:77;;11234:21;11258:55;11295:17;11258:32;11273:16;;11258:10;:14;;:32;;;;:::i;:55::-;11234:79;-1:-1:-1;11344:23:0;11234:79;11370:25;11383:12;11370:10;:25;:::i;:::-;:41;;;;:::i;:::-;11463:1;11442:18;:22;;;11475:15;:19;;;11505:16;:20;;;11567:13;;11559:52;;11344:67;;-1:-1:-1;;;;;;11567:13:0;;11594:12;;11559:52;11463:1;11559:52;11594:12;11567:13;11559:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11546:65:0;;-1:-1:-1;;11635:19:0;;;;;:42;;;11676:1;11658:15;:19;11635:42;11632:210;;;11693:46;11706:15;11723;11693:12;:46::i;:::-;11811:18;;11759:71;;;16704:25:1;;;16760:2;16745:18;;16738:34;;;16788:18;;;16781:34;;;;11759:71:0;;;;;;16692:2:1;11759:71:0;;;11632:210;11893:14;;11885:62;;-1:-1:-1;;;;;11893:14:0;;;;11921:21;;11885:62;;;;11921:21;11893:14;11885:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;10275:1680:0:o;18074:389::-;18199:7;18195:129;;18223:14;:12;:14::i;:::-;18195:129;;;18279:33;18289:6;18297;18305;18279:9;:33::i;:::-;18270:42;;18195:129;18336:44;18354:6;18362:9;18373:6;18336:17;:44::i;:::-;18405:7;18401:55;;18429:15;17668:22;;17651:14;:39;17720:24;;17701:16;:43;17771:21;;17755:13;:37;17821:23;;17803:15;:41;17875:25;;17855:17;:45;17928:22;;17911:14;:39;17607:351;18429:15;18074:389;;;;;:::o;1095:136::-;1153:7;1180:43;1184:1;1187;1180:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1173:50;1095:136;-1:-1:-1;;;1095:136:0:o;1437:246::-;1495:7;1519:6;1515:47;;-1:-1:-1;1549:1:0;1542:8;;1515:47;1572:9;1584:5;1588:1;1584;:5;:::i;:::-;1572:17;-1:-1:-1;1617:1:0;1608:5;1612:1;1572:17;1608:5;:::i;:::-;:10;1600:56;;;;-1:-1:-1;;;1600:56:0;;10893:2:1;1600:56:0;;;10875:21:1;10932:2;10912:18;;;10905:30;10971:34;10951:18;;;10944:62;-1:-1:-1;;;11022:18:1;;;11015:31;11063:19;;1600:56:0;10865:223:1;1691:132:0;1749:7;1776:39;1780:1;1783;1776:39;;;;;;;;;;;;;;;;;:3;:39::i;12454:423::-;12567:15;;12535:62;;12552:4;;-1:-1:-1;;;;;12567:15:0;12585:11;12535:8;:62::i;:::-;12608:15;;12812:16;;12608:261;;-1:-1:-1;;;12608:261:0;;-1:-1:-1;;;;;12608:15:0;;;;:31;;12647:9;;12608:261;;12680:4;;12700:11;;12608:15;;;;12812:16;;12843:15;;12608:261;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16885:710::-;16931:14;;:19;:44;;;;-1:-1:-1;16954:16:0;;:21;16931:44;:66;;;;-1:-1:-1;16979:13:0;;:18;16931:66;:90;;;;-1:-1:-1;17001:15:0;;:20;16931:90;:116;;;;-1:-1:-1;17025:17:0;;:22;16931:116;:139;;;;-1:-1:-1;17051:14:0;;:19;16931:139;16928:151;;;16885:710::o;16928:151::-;17124:14;;;17099:22;:39;17176:16;;;17149:24;:43;17227:13;;;17203:21;:37;17277:15;;;17251:23;:41;17331:17;;;17303:25;:45;17384:14;;;17359:22;:39;-1:-1:-1;17419:18:0;;;;17448:20;;;;17479:17;;;;17507:19;;;17537:21;;;17569:18;16885:710::o;18746:1121::-;18827:7;18847:18;18876:15;18902:14;18927:15;18998:12;18977:17;;18956:18;;:38;;;;:::i;:::-;:54;18953:518;;19039:2;19026:15;;19065:2;19056:11;;18953:518;;;19113:21;19127:6;19113:13;:21::i;:::-;19100:34;;19153:6;19149:311;;;19190:15;;19180:25;;19233:17;;19224:26;;19279:14;;19269:24;;19149:311;;;19344:14;;19334:24;;19386:16;;19377:25;;19431:13;;19421:23;;19149:311;19483:12;19498:31;19525:3;19498:22;:6;19509:10;19498;:22::i;:31::-;19483:46;-1:-1:-1;19576:10:0;19559:14;19566:7;19483:46;19559:14;:::i;:::-;:27;;;;:::i;:::-;19540:15;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;19634:10:0;;-1:-1:-1;19617:14:0;19624:7;19617:4;:14;:::i;:::-;:27;;;;:::i;:::-;19597:16;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;19693:10:0;;-1:-1:-1;19677:13:0;19684:6;19677:4;:13;:::i;:::-;:26;;;;:::i;:::-;19655:18;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;19731:8:0;;19728:86;;19756:46;19774:6;19790:4;19797;19756:17;:46::i;:::-;19845:14;19855:4;19845:14;;:::i;:::-;;18746:1121;-1:-1:-1;;;;;;;;;18746:1121:0:o;18471:267::-;-1:-1:-1;;;;;18587:15:0;;;;;;:7;:15;;;;;;:28;;18607:7;18587:19;:28::i;:::-;-1:-1:-1;;;;;18569:15:0;;;;;;;:7;:15;;;;;;:46;;;;18647:18;;;;;;;:31;;18670:7;18647:22;:31::i;:::-;-1:-1:-1;;;;;18626:18:0;;;;;;;:7;:18;;;;;;;:52;;;;18694:36;;;;;;;;;;18722:7;15478:25:1;;15466:2;15451:18;;15433:76;1831:189:0;1917:7;1952:12;1945:5;1937:28;;;;-1:-1:-1;;;1937:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1976:9:0;1988:5;1992:1;1988;:5;:::i;20490:249::-;20547:7;20571:6;20567:98;;;20639:14;;20619:17;;20601:15;;:35;;;;:::i;:::-;:52;;;;:::i;20567:98::-;20718:13;;20699:16;;20682:14;;:33;;;;:::i;908:179::-;966:7;;998:5;1002:1;998;:5;:::i;:::-;986:17;;1027:1;1022;:6;;1014:46;;;;-1:-1:-1;;;1014:46:0;;8477:2:1;1014:46:0;;;8459:21:1;8516:2;8496:18;;;8489:30;8555:29;8535:18;;;8528:57;8602:18;;1014:46:0;8449:177:1;14:134;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:257::-;212:6;265:2;253:9;244:7;240:23;236:32;233:2;;;286:6;278;271:22;233:2;330:9;317:23;349:31;374:5;349:31;:::i;415:261::-;485:6;538:2;526:9;517:7;513:23;509:32;506:2;;;559:6;551;544:22;506:2;596:9;590:16;615:31;640:5;615:31;:::i;681:398::-;749:6;757;810:2;798:9;789:7;785:23;781:32;778:2;;;831:6;823;816:22;778:2;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;768:311;;;;;:::o;1084:466::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:2;;;1251:6;1243;1236:22;1198:2;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;-1:-1:-1;1421:2:1;1406:18;;1393:32;1434:33;1393:32;1434:33;:::i;:::-;1188:362;;1486:7;;-1:-1:-1;;;1540:2:1;1525:18;;;;1512:32;;1188:362::o;1555:325::-;1623:6;1631;1684:2;1672:9;1663:7;1659:23;1655:32;1652:2;;;1705:6;1697;1690:22;1652:2;1749:9;1736:23;1768:31;1793:5;1768:31;:::i;:::-;1818:5;1870:2;1855:18;;;;1842:32;;-1:-1:-1;;;1642:238:1:o;1885:1177::-;1969:6;2000:2;2043;2031:9;2022:7;2018:23;2014:32;2011:2;;;2064:6;2056;2049:22;2011:2;2109:9;2096:23;2138:18;2179:2;2171:6;2168:14;2165:2;;;2200:6;2192;2185:22;2165:2;2243:6;2232:9;2228:22;2218:32;;2288:7;2281:4;2277:2;2273:13;2269:27;2259:2;;2315:6;2307;2300:22;2259:2;2356;2343:16;2378:2;2374;2371:10;2368:2;;;2384:18;;:::i;:::-;2430:2;2427:1;2423:10;2462:2;2456:9;2525:2;2521:7;2516:2;2512;2508:11;2504:25;2496:6;2492:38;2580:6;2568:10;2565:22;2560:2;2548:10;2545:18;2542:46;2539:2;;;2591:18;;:::i;:::-;2627:2;2620:22;2677:18;;;2711:15;;;;-1:-1:-1;2746:11:1;;;2776;;;2772:20;;2769:33;-1:-1:-1;2766:2:1;;;2820:6;2812;2805:22;2766:2;2847:6;2838:15;;2862:169;2876:2;2873:1;2870:9;2862:169;;;2933:23;2952:3;2933:23;:::i;:::-;2921:36;;2894:1;2887:9;;;;;2977:12;;;;3009;;2862:169;;;-1:-1:-1;3050:6:1;1980:1082;-1:-1:-1;;;;;;;;1980:1082:1:o;3067:251::-;3123:6;3176:2;3164:9;3155:7;3151:23;3147:32;3144:2;;;3197:6;3189;3182:22;3144:2;3241:9;3228:23;3260:28;3282:5;3260:28;:::i;3323:255::-;3390:6;3443:2;3431:9;3422:7;3418:23;3414:32;3411:2;;;3464:6;3456;3449:22;3411:2;3501:9;3495:16;3520:28;3542:5;3520:28;:::i;3583:190::-;3642:6;3695:2;3683:9;3674:7;3670:23;3666:32;3663:2;;;3716:6;3708;3701:22;3663:2;-1:-1:-1;3744:23:1;;3653:120;-1:-1:-1;3653:120:1:o;3778:326::-;3855:6;3863;3871;3924:2;3912:9;3903:7;3899:23;3895:32;3892:2;;;3945:6;3937;3930:22;3892:2;-1:-1:-1;;3973:23:1;;;4043:2;4028:18;;4015:32;;-1:-1:-1;4094:2:1;4079:18;;;4066:32;;3882:222;-1:-1:-1;3882:222:1:o;4109:316::-;4197:6;4205;4213;4266:2;4254:9;4245:7;4241:23;4237:32;4234:2;;;4287:6;4279;4272:22;4234:2;4321:9;4315:16;4305:26;;4371:2;4360:9;4356:18;4350:25;4340:35;;4415:2;4404:9;4400:18;4394:25;4384:35;;4224:201;;;;;:::o;5436:615::-;-1:-1:-1;;;;;5803:15:1;;;5785:34;;5850:2;5835:18;;5828:34;;;;5893:2;5878:18;;5871:34;;;;5936:2;5921:18;;5914:34;;;;5985:15;;;5979:3;5964:19;;5957:44;5765:3;6017:19;;6010:35;;;;5734:3;5719:19;;5701:350::o;6860:603::-;6972:4;7001:2;7030;7019:9;7012:21;7062:6;7056:13;7105:6;7100:2;7089:9;7085:18;7078:34;7130:4;7143:140;7157:6;7154:1;7151:13;7143:140;;;7252:14;;;7248:23;;7242:30;7218:17;;;7237:2;7214:26;7207:66;7172:10;;7143:140;;;7301:6;7298:1;7295:13;7292:2;;;7371:4;7366:2;7357:6;7346:9;7342:22;7338:31;7331:45;7292:2;-1:-1:-1;7447:2:1;7426:15;-1:-1:-1;;7422:29:1;7407:45;;;;7454:2;7403:54;;6981:482;-1:-1:-1;;;6981:482:1:o;11451:356::-;11653:2;11635:21;;;11672:18;;;11665:30;11731:34;11726:2;11711:18;;11704:62;11798:2;11783:18;;11625:182::o;15514:983::-;15776:4;15824:3;15813:9;15809:19;15855:6;15844:9;15837:25;15881:2;15919:6;15914:2;15903:9;15899:18;15892:34;15962:3;15957:2;15946:9;15942:18;15935:31;15986:6;16021;16015:13;16052:6;16044;16037:22;16090:3;16079:9;16075:19;16068:26;;16129:2;16121:6;16117:15;16103:29;;16150:4;16163:195;16177:6;16174:1;16171:13;16163:195;;;16242:13;;-1:-1:-1;;;;;16238:39:1;16226:52;;16333:15;;;;16298:12;;;;16274:1;16192:9;16163:195;;;-1:-1:-1;;;;;;;16414:32:1;;;;16409:2;16394:18;;16387:60;-1:-1:-1;;;16478:3:1;16463:19;16456:35;16375:3;15785:712;-1:-1:-1;;;15785:712:1:o;17015:128::-;17055:3;17086:1;17082:6;17079:1;17076:13;17073:2;;;17092:18;;:::i;:::-;-1:-1:-1;17128:9:1;;17063:80::o;17148:217::-;17188:1;17214;17204:2;;-1:-1:-1;;;17239:31:1;;17293:4;17290:1;17283:15;17321:4;17246:1;17311:15;17204:2;-1:-1:-1;17350:9:1;;17194:171::o;17370:168::-;17410:7;17476:1;17472;17468:6;17464:14;17461:1;17458:21;17453:1;17446:9;17439:17;17435:45;17432:2;;;17483:18;;:::i;:::-;-1:-1:-1;17523:9:1;;17422:116::o;17543:125::-;17583:4;17611:1;17608;17605:8;17602:2;;;17616:18;;:::i;:::-;-1:-1:-1;17653:9:1;;17592:76::o;17673:135::-;17712:3;-1:-1:-1;;17733:17:1;;17730:2;;;17753:18;;:::i;:::-;-1:-1:-1;17800:1:1;17789:13;;17720:88::o;17813:127::-;17874:10;17869:3;17865:20;17862:1;17855:31;17905:4;17902:1;17895:15;17929:4;17926:1;17919:15;17945:127;18006:10;18001:3;17997:20;17994:1;17987:31;18037:4;18034:1;18027:15;18061:4;18058:1;18051:15;18077:131;-1:-1:-1;;;;;18152:31:1;;18142:42;;18132:2;;18198:1;18195;18188:12;18213:118;18299:5;18292:13;18285:21;18278:5;18275:32;18265:2;;18321:1;18318;18311:12

Swarm Source

ipfs://43002962b51ac958dcef0e4b70ab16cc6b8a0b76bf2916fd6c5c5de1cfa6ad80

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.