ETH Price: $2,944.70 (-2.92%)
 

Overview

ETH Balance

0.00001647850527433 ETH

Eth Value

$0.05 (@ $2,944.70/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve241216262025-12-29 23:37:237 hrs ago1767051443IN
0xf1A850A3...0Ea7319Df
0 ETH0.00000430.09303559
Approve241212022025-12-29 22:12:118 hrs ago1767046331IN
0xf1A850A3...0Ea7319Df
0 ETH0.000013040.28016578
Approve241206262025-12-29 20:15:4710 hrs ago1767039347IN
0xf1A850A3...0Ea7319Df
0 ETH0.000007160.15386069
Approve241204472025-12-29 19:39:5911 hrs ago1767037199IN
0xf1A850A3...0Ea7319Df
0 ETH0.00000790.16977149
Approve241200212025-12-29 18:14:3512 hrs ago1767032075IN
0xf1A850A3...0Ea7319Df
0 ETH0.000003220.06927846
Approve241200142025-12-29 18:13:1112 hrs ago1767031991IN
0xf1A850A3...0Ea7319Df
0 ETH0.000026150.56458685
Approve241200032025-12-29 18:10:5912 hrs ago1767031859IN
0xf1A850A3...0Ea7319Df
0 ETH0.000016430.35298164
Approve241199552025-12-29 18:01:1112 hrs ago1767031271IN
0xf1A850A3...0Ea7319Df
0 ETH0.000007450.16007016
Approve241197772025-12-29 17:25:1113 hrs ago1767029111IN
0xf1A850A3...0Ea7319Df
0 ETH0.000008220.17644669
Approve241195862025-12-29 16:46:5913 hrs ago1767026819IN
0xf1A850A3...0Ea7319Df
0 ETH0.000007980.17241692
Approve241195492025-12-29 16:39:3514 hrs ago1767026375IN
0xf1A850A3...0Ea7319Df
0 ETH0.000003730.14156771
Approve241195422025-12-29 16:38:1114 hrs ago1767026291IN
0xf1A850A3...0Ea7319Df
0 ETH0.000006610.14294888
Approve241190062025-12-29 14:49:3515 hrs ago1767019775IN
0xf1A850A3...0Ea7319Df
0 ETH0.000006780.14573734
Approve241189892025-12-29 14:46:1116 hrs ago1767019571IN
0xf1A850A3...0Ea7319Df
0 ETH0.000007410.15897939
Approve241186952025-12-29 13:46:4716 hrs ago1767016007IN
0xf1A850A3...0Ea7319Df
0 ETH0.000235295.04825732
Transfer241186192025-12-29 13:31:3517 hrs ago1767015095IN
0xf1A850A3...0Ea7319Df
0 ETH0.000038390.54259926
Approve241182612025-12-29 12:19:4718 hrs ago1767010787IN
0xf1A850A3...0Ea7319Df
0 ETH0.000056821.21881948
Approve241181842025-12-29 12:04:2318 hrs ago1767009863IN
0xf1A850A3...0Ea7319Df
0 ETH0.000095982.07168102
Approve241181572025-12-29 11:58:5918 hrs ago1767009539IN
0xf1A850A3...0Ea7319Df
0 ETH0.000060181.29088265
Approve241181092025-12-29 11:49:2318 hrs ago1767008963IN
0xf1A850A3...0Ea7319Df
0 ETH0.000012170.26125349
Approve241180852025-12-29 11:44:3519 hrs ago1767008675IN
0xf1A850A3...0Ea7319Df
0 ETH0.000006320.13597725
Approve241179882025-12-29 11:25:1119 hrs ago1767007511IN
0xf1A850A3...0Ea7319Df
0 ETH0.000026740.57356243
Approve241170122025-12-29 8:09:2322 hrs ago1766995763IN
0xf1A850A3...0Ea7319Df
0 ETH0.000025530.5510625
Approve241169812025-12-29 8:03:1122 hrs ago1766995391IN
0xf1A850A3...0Ea7319Df
0 ETH0.000002180.04681811
Approve241162962025-12-29 5:45:2325 hrs ago1766987123IN
0xf1A850A3...0Ea7319Df
0 ETH0.000005480.11777699
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Add Liquidity ET...241216302025-12-29 23:38:117 hrs ago1767051491
0xf1A850A3...0Ea7319Df
0.00186548 ETH
Transfer241216302025-12-29 23:38:117 hrs ago1767051491
0xf1A850A3...0Ea7319Df
0.00186548 ETH
Swap Exact ETH F...241216302025-12-29 23:38:117 hrs ago1767051491
0xf1A850A3...0Ea7319Df
0.00620452 ETH
Transfer241216302025-12-29 23:38:117 hrs ago1767051491
0xf1A850A3...0Ea7319Df
0.00620452 ETH
Add Liquidity ET...241210442025-12-29 21:40:119 hrs ago1767044411
0xf1A850A3...0Ea7319Df
0.00229873 ETH
Transfer241210442025-12-29 21:40:119 hrs ago1767044411
0xf1A850A3...0Ea7319Df
0.00229873 ETH
Swap Exact ETH F...241210442025-12-29 21:40:119 hrs ago1767044411
0xf1A850A3...0Ea7319Df
0.00764359 ETH
Transfer241210442025-12-29 21:40:119 hrs ago1767044411
0xf1A850A3...0Ea7319Df
0.00764359 ETH
Add Liquidity ET...241209882025-12-29 21:28:599 hrs ago1767043739
0xf1A850A3...0Ea7319Df
0.00172065 ETH
Transfer241209882025-12-29 21:28:599 hrs ago1767043739
0xf1A850A3...0Ea7319Df
0.00172065 ETH
Swap Exact ETH F...241209882025-12-29 21:28:599 hrs ago1767043739
0xf1A850A3...0Ea7319Df
0.00572329 ETH
Transfer241209882025-12-29 21:28:599 hrs ago1767043739
0xf1A850A3...0Ea7319Df
0.00572329 ETH
Add Liquidity ET...241200752025-12-29 18:25:2312 hrs ago1767032723
0xf1A850A3...0Ea7319Df
0.00224767 ETH
Transfer241200752025-12-29 18:25:2312 hrs ago1767032723
0xf1A850A3...0Ea7319Df
0.00224767 ETH
Swap Exact ETH F...241200752025-12-29 18:25:2312 hrs ago1767032723
0xf1A850A3...0Ea7319Df
0.00747397 ETH
Transfer241200752025-12-29 18:25:2312 hrs ago1767032723
0xf1A850A3...0Ea7319Df
0.00747397 ETH
Swap Exact ETH F...241200742025-12-29 18:25:1112 hrs ago1767032711
0xf1A850A3...0Ea7319Df
0.00254432 ETH
Transfer241200742025-12-29 18:25:1112 hrs ago1767032711
0xf1A850A3...0Ea7319Df
0.00254432 ETH
Swap Exact ETH F...241200712025-12-29 18:24:3512 hrs ago1767032675
0xf1A850A3...0Ea7319Df
0.00254432 ETH
Transfer241200712025-12-29 18:24:3512 hrs ago1767032675
0xf1A850A3...0Ea7319Df
0.00254432 ETH
Swap Exact ETH F...241200712025-12-29 18:24:3512 hrs ago1767032675
0xf1A850A3...0Ea7319Df
0.00747397 ETH
Transfer241200712025-12-29 18:24:3512 hrs ago1767032675
0xf1A850A3...0Ea7319Df
0.00747397 ETH
Add Liquidity ET...241199582025-12-29 18:01:4712 hrs ago1767031307
0xf1A850A3...0Ea7319Df
0.00345491 ETH
Transfer241199582025-12-29 18:01:4712 hrs ago1767031307
0xf1A850A3...0Ea7319Df
0.00345491 ETH
Swap Exact ETH F...241199582025-12-29 18:01:4712 hrs ago1767031307
0xf1A850A3...0Ea7319Df
0.01148153 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtherBall

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2025-12-25
*/

/*
EtherBall ❄️⚪️
A snowball-powered token on Ethereum.

3% buy / 3% sell tax.

Every sell fuels the system:
• Buyback & burn
• Auto-liquidity added
• LP tokens burned forever

Volume compounds the ball.

https://t.me/EtherBall_ERC
https://x.com/EtherBall_ERC

*/


// SPDX-License-Identifier: UNLICENSE
pragma solidity 0.8.30;

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;
    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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    
    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 EtherBall is Context, IERC20, Ownable {
    using SafeMath for uint256;
    
    // ERC20 mappings
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    // Fee exemptions and protections
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMaxTx;
    mapping (address => bool) private bots;
    mapping (address => bool) private _blockedAddresses;
    
    address payable private _taxWallet;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    
    // Tax configuration - FIXED 3/3
    uint256 public buyTax = 3;   // 3% fixed
    uint256 public sellTax = 3;  // 3% fixed
    
    // Tax splits (in basis points - 10000 = 100%)
    uint256 public buybackBps = 5000;   // 50% 
    uint256 public burnBps = 2000;      // 20% 
    uint256 public lpBps = 3000;        // 30%  LP 
    
    // Token configuration
    uint8 private constant _decimals = 9;
    uint256 private constant _tTotal = 420690000000 * 10**_decimals;
    string private constant _name = unicode"EtherBall";
    string private constant _symbol = unicode"ETHERBALL";
    
    // Trading limits
    uint256 public _maxTxAmount = 8400000000 * 10**_decimals;
    uint256 public _maxWalletSize = 8400000000 * 10**_decimals;
    uint256 public _taxSwapThreshold = 1051725000 * 10**_decimals;
    uint256 public _maxTaxSwap = 1051725000 * 10**_decimals;
    
    // Uniswap
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    // State variables
    bool private tradingOpen = false;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private _initialDistributionDone = false;
    
    // Anti-dump protection
    uint256 private sellCount = 0;
    uint256 private lastSellBlock = 0;
    
    // Events
    event MaxTxAmountUpdated(uint _maxTxAmount);
    event TaxUpdated(uint256 buyTax, uint256 sellTax);
    event SplitsUpdated(uint256 buybackBps, uint256 burnBps, uint256 lpBps);
    event BuybackExecuted(uint256 ethAmount, uint256 tokensBurned);
    event TradingEnabled();
    event InitialDistributionDone(uint256 contractTokens, uint256 ownerTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () payable {
        _taxWallet = payable(_msgSender());
        
        // Tokens Owner
        _balances[_msgSender()] = _tTotal;
        
        // Exclude Fees
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;
        
        // Exclude TX
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[_taxWallet] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    // ========== DISTRIBUTION ==========
    function initialDistribution() external onlyOwner {
        require(!_initialDistributionDone, "Distribution already done");
        
        uint256 ownerAmount = _tTotal.mul(15).div(100);
        uint256 contractAmount = _tTotal.sub(ownerAmount);
        
        // Transfer tokens  owner to contract
        _balances[_msgSender()] = _balances[_msgSender()].sub(contractAmount);
        _balances[address(this)] = _balances[address(this)].add(contractAmount);
        
        emit Transfer(_msgSender(), address(this), contractAmount);
        _initialDistributionDone = true;
        
        emit InitialDistributionDone(contractAmount, ownerAmount);
    }

    // ========== ERC20 Functions ==========
    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 _balances[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 _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    // ========== Core Transfer Logic ==========
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from zero address");
        require(to != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be > 0");
        require(!_blockedAddresses[from], "Sender address is blocked");
        require(!_blockedAddresses[to], "Recipient address is blocked");
        
        // Check trading status
        if (from != owner() && to != owner() && from != address(this) && to != address(this)) {
            require(tradingOpen, "Trading not open yet");
        }
        
        uint256 taxAmount = 0;
        
        // Check for bots
        if (from != owner() && to != owner()) {
            require(!bots[from] && !bots[to], "Bot detected");
            
            // Apply max transaction limit (exclude owner and contract)
            if (!_isExcludedFromMaxTx[from] && !_isExcludedFromMaxTx[to]) {
                require(amount <= _maxTxAmount, "Exceeds max transaction amount");
            }
            
            // BUY - 3% tax
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds max wallet size");
                taxAmount = amount.mul(buyTax).div(100);
            }
            
            // SELL - 3% tax
            if (to == uniswapV2Pair && from != address(this) && !_isExcludedFromFee[from]) {
                taxAmount = amount.mul(sellTax).div(100);
            }
            
            // Swap trigger on sells (anti-dump: max 3 per block)
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance >= _taxSwapThreshold) {
                if (block.number > lastSellBlock) {
                    sellCount = 0;
                }
                require(sellCount < 3, "Only 3 sells per block!");
                
                uint256 tokensToProcess = min(amount, min(contractTokenBalance, _maxTaxSwap));
                if (tokensToProcess > 0) {
                    processTaxes(tokensToProcess);
                }
                
                sellCount++;
                lastSellBlock = block.number;
            }
        }
        
        // Apply tax
        if (taxAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            emit Transfer(from, address(this), taxAmount);
        }
        
        // Transfer net amount
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(transferAmount);
        emit Transfer(from, to, transferAmount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return a < b ? a : b;
    }

    // ========== Tax Processing: Buyback + Burn + LP Burn ==========
    function processTaxes(uint256 tokenAmount) private lockTheSwap {
        require(tokenAmount > 0, "No tokens to process");
        
        uint256 contractBal = balanceOf(address(this));
        require(contractBal >= tokenAmount, "Insufficient contract balance");
        
        // Verify splits sum to 10000 (100%)
        require(buybackBps.add(burnBps).add(lpBps) == 10000, "Invalid tax splits");
        
        // 1) Direct burn (30%)
        uint256 tokensToBurn = tokenAmount.mul(burnBps).div(10000);
        if (tokensToBurn > 0) {
            _burnTokens(tokensToBurn);
        }
        
        uint256 remaining = tokenAmount.sub(tokensToBurn);
        if (remaining == 0) return;
        
        // 2) Split remaining between buyback (50%) and LP (20%)
        uint256 totalBuybackAndLP = buybackBps.add(lpBps);
        require(totalBuybackAndLP > 0, "No allocation for buyback/LP");
        
        uint256 tokensForBuyback = remaining.mul(buybackBps).div(totalBuybackAndLP);
        uint256 tokensForLP = remaining.sub(tokensForBuyback);
        
        // 3) Process buyback (swap tokens -> ETH -> tokens -> DEAD)
        if (tokensForBuyback > 0) {
            uint256 ethForBuyback = _swapTokensForEth(tokensForBuyback);
            if (ethForBuyback > 0) {
                _buybackAndBurn(ethForBuyback);
            }
        }
        
        // 4) Process LP (swap half for ETH, add liquidity to DEAD)
        if (tokensForLP > 0) {
            _processLP(tokensForLP);
        }
    }
    
    function _burnTokens(uint256 amount) private {
        require(amount > 0, "Burn amount must be > 0");
        _balances[address(this)] = _balances[address(this)].sub(amount);
        _balances[DEAD] = _balances[DEAD].add(amount);
        emit Transfer(address(this), DEAD, amount);
    }
    
    function _swapTokensForEth(uint256 tokenAmount) private returns (uint256) {
        require(tokenAmount > 0, "Token amount must be > 0");
        
        uint256 initialEthBalance = address(this).balance;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        
        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        ) {
            return address(this).balance.sub(initialEthBalance);
        } catch {
            return 0;
        }
    }
    
    function _buybackAndBurn(uint256 ethAmount) private {
        require(ethAmount > 0, "ETH amount must be > 0");
        require(ethAmount <= address(this).balance, "Insufficient ETH balance");
        
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        
        uint256 initialTokenBalance = balanceOf(DEAD);
        
        try uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0,
            path,
            DEAD,
            block.timestamp
        ) {
            uint256 tokensBurned = balanceOf(DEAD).sub(initialTokenBalance);
            emit BuybackExecuted(ethAmount, tokensBurned);
        } catch {
            // If buyback fails, keep ETH in contract for next attempt
        }
    }
    
    function _processLP(uint256 tokenAmount) private {
        require(tokenAmount > 0, "Token amount must be > 0");
        
        // Swap half for ETH
        uint256 tokensToSwap = tokenAmount.div(2);
        uint256 tokensForLiquidity = tokenAmount.sub(tokensToSwap);
        
        uint256 ethFromSwap = _swapTokensForEth(tokensToSwap);
        
        if (ethFromSwap > 0 && tokensForLiquidity > 0) {
            _approve(address(this), address(uniswapV2Router), tokensForLiquidity);
            
            try uniswapV2Router.addLiquidityETH{value: ethFromSwap}(
                address(this),
                tokensForLiquidity,
                0,
                0,
                DEAD, // LP tokens van a DEAD (quemados)
                block.timestamp
            ) {
                // Liquidity added successfully
            } catch {
                // If LP addition fails, tokens and ETH remain in contract
            }
        }
    }

    // ========== Owner Functions ==========
    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
        emit MaxTxAmountUpdated(_tTotal);
    }
    
    function setMaxTxAmount(uint256 maxTx) external onlyOwner {
        require(maxTx >= _tTotal.div(1000), "Max TX too low"); // Min 0.1%
        _maxTxAmount = maxTx;
    }
    
    function setMaxWalletSize(uint256 maxWallet) external onlyOwner {
        require(maxWallet >= _tTotal.div(1000), "Max wallet too low"); // Min 0.1%
        _maxWalletSize = maxWallet;
    }
    
    function setTax(uint256 _buy, uint256 _sell) external onlyOwner {
        require(_buy <= 10 && _sell <= 10, "Tax too high (max 10%)");
        buyTax = _buy;
        sellTax = _sell;
        emit TaxUpdated(_buy, _sell);
    }
    
    function setSplits(uint256 _buybackBps, uint256 _burnBps, uint256 _lpBps) external onlyOwner {
        require(_buybackBps.add(_burnBps).add(_lpBps) == 10000, "Splits must sum to 10000");
        buybackBps = _buybackBps;
        burnBps = _burnBps;
        lpBps = _lpBps;
        emit SplitsUpdated(_buybackBps, _burnBps, _lpBps);
    }
    
    function setSwapThresholds(uint256 threshold, uint256 maxSwap) external onlyOwner {
        require(threshold <= _tTotal.div(100), "Threshold too high (max 1%)");
        require(maxSwap <= _tTotal.div(100), "Max swap too high (max 1%)");
        _taxSwapThreshold = threshold;
        _maxTaxSwap = maxSwap;
    }
    
    // ========== Bot and Address Management ==========
    function addBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function delBots(address[] memory notbot) public onlyOwner {
        for (uint i = 0; i < notbot.length; i++) {
            bots[notbot[i]] = false;
        }
    }

    function isBot(address a) public view returns (bool) {
        return bots[a];
    }
    
    function blockAddress(address a, bool blocked) external onlyOwner {
        _blockedAddresses[a] = blocked;
    }
    
    function isAddressBlocked(address a) public view returns (bool) {
        return _blockedAddresses[a];
    }
    
    function excludeFromFee(address account, bool excluded) external onlyOwner {
        _isExcludedFromFee[account] = excluded;
    }
    
    function excludeFromMaxTx(address account, bool excluded) external onlyOwner {
        _isExcludedFromMaxTx[account] = excluded;
    }
    
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    
    function isExcludedFromMaxTx(address account) public view returns (bool) {
        return _isExcludedFromMaxTx[account];
    }

    // ========== Trading Enable ==========
    function enableTrading() external onlyOwner {
        require(!tradingOpen, "Trading already open");
        require(_initialDistributionDone, "Initial distribution not done");
        require(balanceOf(address(this)) > 0, "Contract has no tokens for liquidity");
        
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        // 
        _isExcludedFromFee[address(uniswapV2Router)] = true;
        
        // 
        _approve(address(this), address(uniswapV2Router), balanceOf(address(this)));
        
        // 
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        
        // 
        _isExcludedFromFee[uniswapV2Pair] = true;
        _isExcludedFromMaxTx[uniswapV2Pair] = true;
        
        // 
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 ethForLiquidity = address(this).balance;
        
        require(ethForLiquidity > 0, "No ETH for liquidity");
        
        uniswapV2Router.addLiquidityETH{value: ethForLiquidity}(
            address(this),
            contractTokenBalance,
            0,
            0,
            owner(),
            block.timestamp
        );
        
        // 
        _isExcludedFromFee[uniswapV2Pair] = false;
        _isExcludedFromMaxTx[uniswapV2Pair] = false;
        
        // 
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        
        swapEnabled = true;
        tradingOpen = true;
        
        emit TradingEnabled();
    }

    // ========== View Functions ==========
    function getContractInfo() external view returns (
        uint256 contractTokenBalance,
        uint256 contractEthBalance,
        uint256 deadBalance,
        uint256 totalBurned
    ) {
        return (
            balanceOf(address(this)),
            address(this).balance,
            balanceOf(DEAD),
            balanceOf(DEAD)
        );
    }
    
    function getTaxInfo() external view returns (
        uint256 buyTaxPercent,
        uint256 sellTaxPercent,
        uint256 buybackPercent,
        uint256 burnPercent,
        uint256 lpPercent
    ) {
        return (
            buyTax,
            sellTax,
            buybackBps.div(100),
            burnBps.div(100),
            lpBps.div(100)
        );
    }
    
    function getTradingInfo() external view returns (
        bool isTradingOpen,
        bool isSwapEnabled,
        uint256 maxTxAmount,
        uint256 maxWalletSize
    ) {
        return (
            tradingOpen,
            swapEnabled,
            _maxTxAmount,
            _maxWalletSize
        );
    }

    // ========== Manual Functions ==========
    receive() external payable {}

    function manualProcess() external {
        require(_msgSender() == _taxWallet || _msgSender() == owner(), "Not authorized");
        uint256 tokenBalance = balanceOf(address(this));
        if (tokenBalance > 0) {
            processTaxes(min(tokenBalance, _maxTaxSwap));
        }
    }
    
    function manualBuyback(uint256 ethAmount) external {
        require(_msgSender() == _taxWallet, "Not tax wallet");
        require(ethAmount <= address(this).balance, "Insufficient ETH");
        require(ethAmount > 0, "ETH amount must be > 0");
        _buybackAndBurn(ethAmount);
    }
    
    function manualBurn(uint256 tokenAmount) external {
        require(_msgSender() == _taxWallet, "Not tax wallet");
        require(tokenAmount <= balanceOf(address(this)), "Insufficient tokens");
        require(tokenAmount > 0, "Token amount must be > 0");
        _burnTokens(tokenAmount);
    }

    function withdrawStuckETH() external {
        require(_msgSender() == _taxWallet, "Not tax wallet");
        uint256 contractETHBalance = address(this).balance;
        require(contractETHBalance > 0, "No ETH to withdraw");
        payable(_taxWallet).transfer(contractETHBalance);
    }
    
    function withdrawStuckTokens(address tokenAddress) external {
        require(_msgSender() == _taxWallet, "Not tax wallet");
        require(tokenAddress != address(this), "Cannot withdraw own token");
        IERC20 token = IERC20(tokenAddress);
        uint256 balance = token.balanceOf(address(this));
        require(balance > 0, "No tokens to withdraw");
        token.transfer(_taxWallet, balance);
    }
    
    // Emergency function to rescue tokens sent by mistake
    function rescueToken(address tokenAddress, uint256 amount) external {
        require(_msgSender() == _taxWallet, "Not tax wallet");
        require(tokenAddress != address(this), "Cannot rescue own token");
        IERC20(tokenAddress).transfer(_taxWallet, amount);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","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":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"BuybackExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ownerTokens","type":"uint256"}],"name":"InitialDistributionDone","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buybackBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpBps","type":"uint256"}],"name":"SplitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"TaxUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"blockAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackBps","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":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractInfo","outputs":[{"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"internalType":"uint256","name":"contractEthBalance","type":"uint256"},{"internalType":"uint256","name":"deadBalance","type":"uint256"},{"internalType":"uint256","name":"totalBurned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxInfo","outputs":[{"internalType":"uint256","name":"buyTaxPercent","type":"uint256"},{"internalType":"uint256","name":"sellTaxPercent","type":"uint256"},{"internalType":"uint256","name":"buybackPercent","type":"uint256"},{"internalType":"uint256","name":"burnPercent","type":"uint256"},{"internalType":"uint256","name":"lpPercent","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTradingInfo","outputs":[{"internalType":"bool","name":"isTradingOpen","type":"bool"},{"internalType":"bool","name":"isSwapEnabled","type":"bool"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buybackBps","type":"uint256"},{"internalType":"uint256","name":"_burnBps","type":"uint256"},{"internalType":"uint256","name":"_lpBps","type":"uint256"}],"name":"setSplits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"maxSwap","type":"uint256"}],"name":"setSwapThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"}],"name":"setTax","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260036008556003600955611388600a556107d0600b55610bb8600c556009600a61002e9190610366565b61003d906401f4add40061037b565b600d5561004c6009600a610366565b61005b906401f4add40061037b565b600e5561006a6009600a610366565b61007890633eb00cc861037b565b600f556100876009600a610366565b61009590633eb00cc861037b565b6010556012805463ffffffff60a01b191690555f6013819055601481905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b031916331790556101106009600a610366565b61011f906461f313f88061037b565b335f9081526001602081905260408220929092556003906101475f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260039093528183208054851660019081179091556007549091168352908220805490931681179092556004906101b45f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260049093528183208054851660019081179091556007549091168352912080549092161790556102113390565b6001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6102486009600a610366565b610257906461f313f88061037b565b60405190815260200160405180910390a3610392565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156102bc578085048111156102a0576102a061026d565b60018416156102ae57908102905b60019390931c928002610285565b935093915050565b5f826102d257506001610360565b816102de57505f610360565b81600181146102f457600281146102fe5761031a565b6001915050610360565b60ff84111561030f5761030f61026d565b50506001821b610360565b5060208310610133831016604e8410600b841016171561033d575081810a610360565b6103495f198484610281565b805f190482111561035c5761035c61026d565b0290505b92915050565b5f61037460ff8416836102c4565b9392505050565b80820281158282048414176103605761036061026d565b6136448061039f5f395ff3fe6080604052600436106102a8575f3560e01c8063715018a61161016f578063bf474bed116100d8578063dd62ed3e11610092578063ea1644d51161006d578063ea1644d5146108cd578063ec0d4982146108ec578063ec28438a1461090b578063f5648a4f1461092a575f5ffd5b8063dd62ed3e14610833578063df8408fe14610877578063e7dad4f914610896575f5ffd5b8063bf474bed1461078d578063c480512e146107a2578063cb963728146107c1578063cc1776d3146107e0578063d34628cc146107f5578063d4c989d314610814575f5ffd5b80638f9a55c0116101295780638f9a55c0146106e057806395645e34146106f557806395d89b4114610709578063a9059cbb1461073a578063baa9f0fa14610759578063bbfad5b51461076e575f5ffd5b8063715018a61461063f578063751039fc146106535780637cc1f867146106675780637d1db4a51461069b5780638a8c523c146106b05780638da5cb5b146106c4575f5ffd5b806333f3d6281161021157806353deb3d6116101cb57806353deb3d6146105815780635d41f8e414610596578063658c27a9146105ab578063667f6526146105e2578063700cd48e1461060157806370a0823114610620575f5ffd5b806333f3d628146104ac5780633bbac579146104cb57806349bd5a5e146105025780634b2c8998146105215780634f7041a5146105355780635342acb41461054a575f5ffd5b806322a62e1e1161026257806322a62e1e146103a457806323b63585146103e057806323b872dd14610401578063276ef78914610420578063313ce5671461047257806331c2d8471461048d575f5ffd5b806303fd2a45146102b357806306fdde03146102e5578063095ea7b31461031f5780630faee56f1461034e5780631694505e1461037157806318160ddd14610390575f5ffd5b366102af57005b5f5ffd5b3480156102be575f5ffd5b506102c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102f0575f5ffd5b50604080518082019091526009815268115d1a195c90985b1b60ba1b60208201525b6040516102dc9190612fb5565b34801561032a575f5ffd5b5061033e61033936600461300e565b61093e565b60405190151581526020016102dc565b348015610359575f5ffd5b5061036360105481565b6040519081526020016102dc565b34801561037c575f5ffd5b506011546102c8906001600160a01b031681565b34801561039b575f5ffd5b50610363610954565b3480156103af575f5ffd5b506103b8610975565b604080519586526020860194909452928401919091526060830152608082015260a0016102dc565b3480156103eb575f5ffd5b506103ff6103fa366004613038565b6109c3565b005b34801561040c575f5ffd5b5061033e61041b36600461304f565b610a78565b34801561042b575f5ffd5b50610450601254600d54600e5460ff600160a01b8404811693600160b01b9004169293565b60408051941515855292151560208501529183015260608201526080016102dc565b34801561047d575f5ffd5b50604051600981526020016102dc565b348015610498575f5ffd5b506103ff6104a73660046130a1565b610adf565b3480156104b7575f5ffd5b506103ff6104c636600461300e565b610b66565b3480156104d6575f5ffd5b5061033e6104e536600461316c565b6001600160a01b03165f9081526005602052604090205460ff1690565b34801561050d575f5ffd5b506012546102c8906001600160a01b031681565b34801561052c575f5ffd5b506103ff610c6a565b348015610540575f5ffd5b5061036360085481565b348015610555575f5ffd5b5061033e61056436600461316c565b6001600160a01b03165f9081526003602052604090205460ff1690565b34801561058c575f5ffd5b50610363600b5481565b3480156105a1575f5ffd5b50610363600c5481565b3480156105b6575f5ffd5b5061033e6105c536600461316c565b6001600160a01b03165f9081526004602052604090205460ff1690565b3480156105ed575f5ffd5b506103ff6105fc366004613187565b610cf8565b34801561060c575f5ffd5b506103ff61061b3660046131a7565b610dc0565b34801561062b575f5ffd5b5061036361063a36600461316c565b610ea2565b34801561064a575f5ffd5b506103ff610ebc565b34801561065e575f5ffd5b506103ff610f2d565b348015610672575f5ffd5b5061067b610fe1565b6040805194855260208501939093529183015260608201526080016102dc565b3480156106a6575f5ffd5b50610363600d5481565b3480156106bb575f5ffd5b506103ff611013565b3480156106cf575f5ffd5b505f546001600160a01b03166102c8565b3480156106eb575f5ffd5b50610363600e5481565b348015610700575f5ffd5b506103ff611542565b348015610714575f5ffd5b5060408051808201909152600981526811551211549090531360ba1b6020820152610312565b348015610745575f5ffd5b5061033e61075436600461300e565b6116e8565b348015610764575f5ffd5b50610363600a5481565b348015610779575f5ffd5b506103ff610788366004613187565b6116f4565b348015610798575f5ffd5b50610363600f5481565b3480156107ad575f5ffd5b506103ff6107bc366004613038565b6117f7565b3480156107cc575f5ffd5b506103ff6107db36600461316c565b6118be565b3480156107eb575f5ffd5b5061036360095481565b348015610800575f5ffd5b506103ff61080f3660046130a1565b611a76565b34801561081f575f5ffd5b506103ff61082e3660046131dd565b611afa565b34801561083e575f5ffd5b5061036361084d366004613214565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610882575f5ffd5b506103ff6108913660046131dd565b611b4d565b3480156108a1575f5ffd5b5061033e6108b036600461316c565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156108d8575f5ffd5b506103ff6108e7366004613038565b611ba0565b3480156108f7575f5ffd5b506103ff6109063660046131dd565b611c24565b348015610916575f5ffd5b506103ff610925366004613038565b611c77565b348015610935575f5ffd5b506103ff611cf7565b5f61094a338484611da4565b5060015b92915050565b5f6109616009600a613337565b610970906461f313f880613345565b905090565b5f5f5f5f5f6008546009546109966064600a54611eb090919063ffffffff16565b600b546109a4906064611eb0565b600c546109b2906064611eb0565b945094509450945094509091929394565b6007546001600160a01b0316336001600160a01b0316146109ff5760405162461bcd60e51b81526004016109f69061335c565b60405180910390fd5b610a0830610ea2565b811115610a4d5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e7420746f6b656e7360681b60448201526064016109f6565b5f8111610a6c5760405162461bcd60e51b81526004016109f690613384565b610a7581611ef8565b50565b5f610a84848484612000565b610ad58433610ad0856040518060600160405280602881526020016135c7602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190612714565b611da4565b5060019392505050565b5f546001600160a01b03163314610b085760405162461bcd60e51b81526004016109f6906133bb565b5f5b8151811015610b62575f60055f848481518110610b2957610b296133f0565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610b0a565b5050565b6007546001600160a01b0316336001600160a01b031614610b995760405162461bcd60e51b81526004016109f69061335c565b306001600160a01b03831603610bf15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420726573637565206f776e20746f6b656e00000000000000000060448201526064016109f6565b60075460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af1158015610c41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c659190613404565b505050565b6007546001600160a01b0316336001600160a01b03161480610c9557505f546001600160a01b031633145b610cd25760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016109f6565b5f610cdc30610ea2565b90508015610a7557610a75610cf38260105461274c565b612761565b5f546001600160a01b03163314610d215760405162461bcd60e51b81526004016109f6906133bb565b600a8211158015610d335750600a8111155b610d785760405162461bcd60e51b815260206004820152601660248201527554617820746f6f206869676820286d6178203130252960501b60448201526064016109f6565b6008829055600981905560408051838152602081018390527fb841faf0d1b32571f4ef966a2f35e3ae51f3cdda45318c3da5570a5b2ad8560591015b60405180910390a15050565b5f546001600160a01b03163314610de95760405162461bcd60e51b81526004016109f6906133bb565b610dfd81610df7858561299a565b9061299a565b61271014610e4d5760405162461bcd60e51b815260206004820152601860248201527f53706c697473206d7573742073756d20746f203130303030000000000000000060448201526064016109f6565b600a839055600b829055600c81905560408051848152602081018490529081018290527ffdb98b6e295610bf2419ce2012cacd127f8547e833929f29cc19e3d52aa9b62b9060600160405180910390a1505050565b6001600160a01b03165f9081526001602052604090205490565b5f546001600160a01b03163314610ee55760405162461bcd60e51b81526004016109f6906133bb565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610f565760405162461bcd60e51b81526004016109f6906133bb565b610f626009600a613337565b610f71906461f313f880613345565b600d55610f806009600a613337565b610f8f906461f313f880613345565b600e557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610fbf6009600a613337565b610fce906461f313f880613345565b60405190815260200160405180910390a1565b5f5f5f5f610fee30610ea2565b47610ffa61dead610ea2565b61100561dead610ea2565b935093509350935090919293565b5f546001600160a01b0316331461103c5760405162461bcd60e51b81526004016109f6906133bb565b601254600160a01b900460ff161561108d5760405162461bcd60e51b81526020600482015260146024820152732a3930b234b7339030b63932b0b23c9037b832b760611b60448201526064016109f6565b601254600160b81b900460ff166110e65760405162461bcd60e51b815260206004820152601d60248201527f496e697469616c20646973747269627574696f6e206e6f7420646f6e6500000060448201526064016109f6565b5f6110f030610ea2565b116111495760405162461bcd60e51b8152602060048201526024808201527f436f6e747261637420686173206e6f20746f6b656e7320666f72206c697175696044820152636469747960e01b60648201526084016109f6565b601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091555f81905260036020527ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff191660011790556111b6903090610ad082610ea2565b60115f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611206573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122a919061341f565b6001600160a01b031663c9c653963060115f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611289573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ad919061341f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156112f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131b919061341f565b601280546001600160a01b0319166001600160a01b0392831690811782555f908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915281208054909216909217905561137a30610ea2565b905047806113c15760405162461bcd60e51b81526020600482015260146024820152734e6f2045544820666f72206c697175696469747960601b60448201526064016109f6565b6011546001600160a01b031663f305d7198230855f806113e85f546001600160a01b031690565b426040518863ffffffff1660e01b815260040161140a9695949392919061343a565b60606040518083038185885af1158015611426573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061144b9190613475565b5050601280546001600160a01b039081165f908152600360209081526040808320805460ff199081169091558554851684526004928390529281902080549093169092559254601154915163095ea7b360e01b8152918316938201939093525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156114da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fe9190613404565b506012805462ff00ff60a01b19166201000160a01b1790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c7905f90a15050565b5f546001600160a01b0316331461156b5760405162461bcd60e51b81526004016109f6906133bb565b601254600160b81b900460ff16156115c55760405162461bcd60e51b815260206004820152601960248201527f446973747269627574696f6e20616c726561647920646f6e650000000000000060448201526064016109f6565b5f6115f760646115f1600f6115dc6009600a613337565b6115eb906461f313f880613345565b906129f8565b90611eb0565b90505f61161f8261160a6009600a613337565b611619906461f313f880613345565b90612a76565b335f9081526001602052604090205490915061163b9082612a76565b335f9081526001602052604080822092909255308152205461165d908261299a565b305f81815260016020526040902091909155336001600160a01b03165f5160206135ef5f395f51905f528360405161169791815260200190565b60405180910390a36012805460ff60b81b1916600160b81b17905560408051828152602081018490527fd0a76e57a0c59827ca6055dc2b1cfeb94a2344b07b20b2db14ad1961aa9475589101610db4565b5f61094a338484612000565b5f546001600160a01b0316331461171d5760405162461bcd60e51b81526004016109f6906133bb565b61173d606461172e6009600a613337565b6115f1906461f313f880613345565b82111561178c5760405162461bcd60e51b815260206004820152601b60248201527f5468726573686f6c6420746f6f206869676820286d617820312529000000000060448201526064016109f6565b61179d606461172e6009600a613337565b8111156117ec5760405162461bcd60e51b815260206004820152601a60248201527f4d6178207377617020746f6f206869676820286d61782031252900000000000060448201526064016109f6565b600f91909155601055565b6007546001600160a01b0316336001600160a01b03161461182a5760405162461bcd60e51b81526004016109f69061335c565b4781111561186d5760405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b60448201526064016109f6565b5f81116118b55760405162461bcd60e51b8152602060048201526016602482015275045544820616d6f756e74206d757374206265203e20360541b60448201526064016109f6565b610a7581612ab7565b6007546001600160a01b0316336001600160a01b0316146118f15760405162461bcd60e51b81526004016109f69061335c565b306001600160a01b038216036119495760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e0000000000000060448201526064016109f6565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561198f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b391906134a0565b90505f81116119fc5760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b60448201526064016109f6565b60075460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af1158015611a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a709190613404565b50505050565b5f546001600160a01b03163314611a9f5760405162461bcd60e51b81526004016109f6906133bb565b5f5b8151811015610b6257600160055f848481518110611ac157611ac16133f0565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611aa1565b5f546001600160a01b03163314611b235760405162461bcd60e51b81526004016109f6906133bb565b6001600160a01b03919091165f908152600460205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314611b765760405162461bcd60e51b81526004016109f6906133bb565b6001600160a01b03919091165f908152600360205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314611bc95760405162461bcd60e51b81526004016109f6906133bb565b611bdb6103e861172e6009600a613337565b811015611c1f5760405162461bcd60e51b81526020600482015260126024820152714d61782077616c6c657420746f6f206c6f7760701b60448201526064016109f6565b600e55565b5f546001600160a01b03163314611c4d5760405162461bcd60e51b81526004016109f6906133bb565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314611ca05760405162461bcd60e51b81526004016109f6906133bb565b611cb26103e861172e6009600a613337565b811015611cf25760405162461bcd60e51b815260206004820152600e60248201526d4d617820545820746f6f206c6f7760901b60448201526064016109f6565b600d55565b6007546001600160a01b0316336001600160a01b031614611d2a5760405162461bcd60e51b81526004016109f69061335c565b4780611d6d5760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b60448201526064016109f6565b6007546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610b62573d5f5f3e3d5ffd5b6001600160a01b038316611dfa5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f206164647265737360448201526064016109f6565b6001600160a01b038216611e505760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f2061646472657373000060448201526064016109f6565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611ef183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d07565b9392505050565b5f8111611f475760405162461bcd60e51b815260206004820152601760248201527f4275726e20616d6f756e74206d757374206265203e203000000000000000000060448201526064016109f6565b305f90815260016020526040902054611f609082612a76565b305f9081526001602052604081209190915561dead90527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54611fa3908261299a565b61dead5f81905260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d9190915560405130905f5160206135ef5f395f51905f5290611ff59085815260200190565b60405180910390a350565b6001600160a01b0383166120605760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b60648201526084016109f6565b6001600160a01b0382166120b65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f20616464726573730060448201526064016109f6565b5f81116121055760405162461bcd60e51b815260206004820152601b60248201527f5472616e7366657220616d6f756e74206d757374206265203e2030000000000060448201526064016109f6565b6001600160a01b0383165f9081526006602052604090205460ff161561216d5760405162461bcd60e51b815260206004820152601960248201527f53656e646572206164647265737320697320626c6f636b65640000000000000060448201526064016109f6565b6001600160a01b0382165f9081526006602052604090205460ff16156121d55760405162461bcd60e51b815260206004820152601c60248201527f526563697069656e74206164647265737320697320626c6f636b65640000000060448201526064016109f6565b5f546001600160a01b038481169116148015906121ff57505f546001600160a01b03838116911614155b801561221457506001600160a01b0383163014155b801561222957506001600160a01b0382163014155b1561227e57601254600160a01b900460ff1661227e5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016109f6565b5f80546001600160a01b038581169116148015906122a957505f546001600160a01b03848116911614155b15612602576001600160a01b0384165f9081526005602052604090205460ff161580156122ee57506001600160a01b0383165f9081526005602052604090205460ff16155b6123295760405162461bcd60e51b815260206004820152600c60248201526b109bdd0819195d1958dd195960a21b60448201526064016109f6565b6001600160a01b0384165f9081526004602052604090205460ff1615801561236957506001600160a01b0383165f9081526004602052604090205460ff16155b156123c057600d548211156123c05760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e74000060448201526064016109f6565b6012546001600160a01b0385811691161480156123eb57506011546001600160a01b03848116911614155b801561240f57506001600160a01b0383165f9081526003602052604090205460ff16155b1561249657600e548261242185610ea2565b61242b91906134b7565b11156124795760405162461bcd60e51b815260206004820152601760248201527f45786365656473206d61782077616c6c65742073697a6500000000000000000060448201526064016109f6565b61249360646115f1600854856129f890919063ffffffff16565b90505b6012546001600160a01b0384811691161480156124bc57506001600160a01b0384163014155b80156124e057506001600160a01b0384165f9081526003602052604090205460ff16155b15612502576124ff60646115f1600954856129f890919063ffffffff16565b90505b5f61250c30610ea2565b601254909150600160a81b900460ff1615801561253657506012546001600160a01b038581169116145b801561254b5750601254600160b01b900460ff165b80156125595750600f548110155b156126005760145443111561256d575f6013555b6003601354106125bf5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920332073656c6c732070657220626c6f636b2100000000000000000060448201526064016109f6565b5f6125d5846125d08460105461274c565b61274c565b905080156125e6576125e681612761565b60138054905f6125f5836134ca565b909155505043601455505b505b801561266757305f90815260016020526040902054612621908261299a565b305f81815260016020526040908190209290925590516001600160a01b038616905f5160206135ef5f395f51905f529061265e9085815260200190565b60405180910390a35b5f6126728383612a76565b6001600160a01b0386165f908152600160205260409020549091506126979084612a76565b6001600160a01b038087165f9081526001602052604080822093909355908616815220546126c5908261299a565b6001600160a01b038086165f8181526001602052604090819020939093559151908716905f5160206135ef5f395f51905f52906127059085815260200190565b60405180910390a35050505050565b5f81848411156127375760405162461bcd60e51b81526004016109f69190612fb5565b505f61274384866134e2565b95945050505050565b5f81831061275a5781611ef1565b5090919050565b6012805460ff60a81b1916600160a81b179055806127b85760405162461bcd60e51b81526020600482015260146024820152734e6f20746f6b656e7320746f2070726f6365737360601b60448201526064016109f6565b5f6127c230610ea2565b9050818110156128145760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e636500000060448201526064016109f6565b612831600c54610df7600b54600a5461299a90919063ffffffff16565b612710146128765760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964207461782073706c69747360701b60448201526064016109f6565b5f6128926127106115f1600b54866129f890919063ffffffff16565b905080156128a3576128a381611ef8565b5f6128ae8483612a76565b9050805f036128bf5750505061298a565b5f6128d7600c54600a5461299a90919063ffffffff16565b90505f81116129285760405162461bcd60e51b815260206004820152601c60248201527f4e6f20616c6c6f636174696f6e20666f72206275796261636b2f4c500000000060448201526064016109f6565b5f612942826115f1600a54866129f890919063ffffffff16565b90505f61294f8483612a76565b90508115612974575f61296183612d33565b905080156129725761297281612ab7565b505b80156129835761298381612ebd565b5050505050505b506012805460ff60a81b19169055565b5f806129a683856134b7565b905083811015611ef15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109f6565b5f825f03612a0757505f61094e565b5f612a128385613345565b905082612a1f85836134f5565b14611ef15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109f6565b5f611ef183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612714565b5f8111612aff5760405162461bcd60e51b8152602060048201526016602482015275045544820616d6f756e74206d757374206265203e20360541b60448201526064016109f6565b47811115612b4f5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e6365000000000000000060448201526064016109f6565b6040805160028082526060820183525f926020830190803683375050601154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612bb6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bda919061341f565b815f81518110612bec57612bec6133f0565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612c2057612c206133f0565b60200260200101906001600160a01b031690816001600160a01b0316815250505f612c4c61dead610ea2565b60115460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de95908590612c87905f90879061dead904290600401613557565b5f604051808303818588803b158015612c9e575f5ffd5b505af193505050508015612cb0575060015b15610c65575f612cc58261161961dead610ea2565b60408051868152602081018390529192507f8e8412cac6b961b95ef832e2bac486977bbd29eb9725f9eddd97f3380c31f649910160405180910390a150505050565b5f8183612d275760405162461bcd60e51b81526004016109f69190612fb5565b505f61274384866134f5565b5f5f8211612d535760405162461bcd60e51b81526004016109f690613384565b60408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110612d8a57612d8a6133f0565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612de1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e05919061341f565b81600181518110612e1857612e186133f0565b6001600160a01b039283166020918202929092010152601154612e3e9130911686611da4565b60115460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e769087905f9086903090429060040161358b565b5f604051808303815f87803b158015612e8d575f5ffd5b505af1925050508015612e9e575060015b612eab57505f9392505050565b612eb54783612a76565b949350505050565b5f8111612edc5760405162461bcd60e51b81526004016109f690613384565b5f612ee8826002611eb0565b90505f612ef58383612a76565b90505f612f0183612d33565b90505f81118015612f1157505f82115b15611a7057601154612f2e9030906001600160a01b031684611da4565b60115460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612f6c90309087905f90819061dead90429060040161343a565b60606040518083038185885af193505050508015612fa7575060408051601f3d908101601f19168201909252612fa491810190613475565b60015b15611a705750505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610a75575f5ffd5b803561300981612fea565b919050565b5f5f6040838503121561301f575f5ffd5b823561302a81612fea565b946020939093013593505050565b5f60208284031215613048575f5ffd5b5035919050565b5f5f5f60608486031215613061575f5ffd5b833561306c81612fea565b9250602084013561307c81612fea565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156130b1575f5ffd5b813567ffffffffffffffff8111156130c7575f5ffd5b8201601f810184136130d7575f5ffd5b803567ffffffffffffffff8111156130f1576130f161308d565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561311e5761311e61308d565b60405291825260208184018101929081018784111561313b575f5ffd5b6020850194505b838510156131615761315385612ffe565b815260209485019401613142565b509695505050505050565b5f6020828403121561317c575f5ffd5b8135611ef181612fea565b5f5f60408385031215613198575f5ffd5b50508035926020909101359150565b5f5f5f606084860312156131b9575f5ffd5b505081359360208301359350604090920135919050565b8015158114610a75575f5ffd5b5f5f604083850312156131ee575f5ffd5b82356131f981612fea565b91506020830135613209816131d0565b809150509250929050565b5f5f60408385031215613225575f5ffd5b823561323081612fea565b9150602083013561320981612fea565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561328f5780850481111561327357613273613240565b600184161561328157908102905b60019390931c928002613258565b935093915050565b5f826132a55750600161094e565b816132b157505f61094e565b81600181146132c757600281146132d1576132ed565b600191505061094e565b60ff8411156132e2576132e2613240565b50506001821b61094e565b5060208310610133831016604e8410600b8410161715613310575081810a61094e565b61331c5f198484613254565b805f190482111561332f5761332f613240565b029392505050565b5f611ef160ff841683613297565b808202811582820484141761094e5761094e613240565b6020808252600e908201526d139bdd081d185e081dd85b1b195d60921b604082015260600190565b60208082526018908201527f546f6b656e20616d6f756e74206d757374206265203e20300000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613414575f5ffd5b8151611ef1816131d0565b5f6020828403121561342f575f5ffd5b8151611ef181612fea565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f5f5f60608486031215613487575f5ffd5b5050815160208301516040909301519094929350919050565b5f602082840312156134b0575f5ffd5b5051919050565b8082018082111561094e5761094e613240565b5f600182016134db576134db613240565b5060010190565b8181038181111561094e5761094e613240565b5f8261350f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f8151808452602084019350602083015f5b8281101561354d5781516001600160a01b0316865260209586019590910190600101613526565b5093949350505050565b848152608060208201525f61356f6080830186613514565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f6135a960a0830186613514565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122053ebdaad6eeb1d47689b9761004be1ce41b323e15e140223ee5fb835623ef34e64736f6c634300081e0033

Deployed Bytecode

0x6080604052600436106102a8575f3560e01c8063715018a61161016f578063bf474bed116100d8578063dd62ed3e11610092578063ea1644d51161006d578063ea1644d5146108cd578063ec0d4982146108ec578063ec28438a1461090b578063f5648a4f1461092a575f5ffd5b8063dd62ed3e14610833578063df8408fe14610877578063e7dad4f914610896575f5ffd5b8063bf474bed1461078d578063c480512e146107a2578063cb963728146107c1578063cc1776d3146107e0578063d34628cc146107f5578063d4c989d314610814575f5ffd5b80638f9a55c0116101295780638f9a55c0146106e057806395645e34146106f557806395d89b4114610709578063a9059cbb1461073a578063baa9f0fa14610759578063bbfad5b51461076e575f5ffd5b8063715018a61461063f578063751039fc146106535780637cc1f867146106675780637d1db4a51461069b5780638a8c523c146106b05780638da5cb5b146106c4575f5ffd5b806333f3d6281161021157806353deb3d6116101cb57806353deb3d6146105815780635d41f8e414610596578063658c27a9146105ab578063667f6526146105e2578063700cd48e1461060157806370a0823114610620575f5ffd5b806333f3d628146104ac5780633bbac579146104cb57806349bd5a5e146105025780634b2c8998146105215780634f7041a5146105355780635342acb41461054a575f5ffd5b806322a62e1e1161026257806322a62e1e146103a457806323b63585146103e057806323b872dd14610401578063276ef78914610420578063313ce5671461047257806331c2d8471461048d575f5ffd5b806303fd2a45146102b357806306fdde03146102e5578063095ea7b31461031f5780630faee56f1461034e5780631694505e1461037157806318160ddd14610390575f5ffd5b366102af57005b5f5ffd5b3480156102be575f5ffd5b506102c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102f0575f5ffd5b50604080518082019091526009815268115d1a195c90985b1b60ba1b60208201525b6040516102dc9190612fb5565b34801561032a575f5ffd5b5061033e61033936600461300e565b61093e565b60405190151581526020016102dc565b348015610359575f5ffd5b5061036360105481565b6040519081526020016102dc565b34801561037c575f5ffd5b506011546102c8906001600160a01b031681565b34801561039b575f5ffd5b50610363610954565b3480156103af575f5ffd5b506103b8610975565b604080519586526020860194909452928401919091526060830152608082015260a0016102dc565b3480156103eb575f5ffd5b506103ff6103fa366004613038565b6109c3565b005b34801561040c575f5ffd5b5061033e61041b36600461304f565b610a78565b34801561042b575f5ffd5b50610450601254600d54600e5460ff600160a01b8404811693600160b01b9004169293565b60408051941515855292151560208501529183015260608201526080016102dc565b34801561047d575f5ffd5b50604051600981526020016102dc565b348015610498575f5ffd5b506103ff6104a73660046130a1565b610adf565b3480156104b7575f5ffd5b506103ff6104c636600461300e565b610b66565b3480156104d6575f5ffd5b5061033e6104e536600461316c565b6001600160a01b03165f9081526005602052604090205460ff1690565b34801561050d575f5ffd5b506012546102c8906001600160a01b031681565b34801561052c575f5ffd5b506103ff610c6a565b348015610540575f5ffd5b5061036360085481565b348015610555575f5ffd5b5061033e61056436600461316c565b6001600160a01b03165f9081526003602052604090205460ff1690565b34801561058c575f5ffd5b50610363600b5481565b3480156105a1575f5ffd5b50610363600c5481565b3480156105b6575f5ffd5b5061033e6105c536600461316c565b6001600160a01b03165f9081526004602052604090205460ff1690565b3480156105ed575f5ffd5b506103ff6105fc366004613187565b610cf8565b34801561060c575f5ffd5b506103ff61061b3660046131a7565b610dc0565b34801561062b575f5ffd5b5061036361063a36600461316c565b610ea2565b34801561064a575f5ffd5b506103ff610ebc565b34801561065e575f5ffd5b506103ff610f2d565b348015610672575f5ffd5b5061067b610fe1565b6040805194855260208501939093529183015260608201526080016102dc565b3480156106a6575f5ffd5b50610363600d5481565b3480156106bb575f5ffd5b506103ff611013565b3480156106cf575f5ffd5b505f546001600160a01b03166102c8565b3480156106eb575f5ffd5b50610363600e5481565b348015610700575f5ffd5b506103ff611542565b348015610714575f5ffd5b5060408051808201909152600981526811551211549090531360ba1b6020820152610312565b348015610745575f5ffd5b5061033e61075436600461300e565b6116e8565b348015610764575f5ffd5b50610363600a5481565b348015610779575f5ffd5b506103ff610788366004613187565b6116f4565b348015610798575f5ffd5b50610363600f5481565b3480156107ad575f5ffd5b506103ff6107bc366004613038565b6117f7565b3480156107cc575f5ffd5b506103ff6107db36600461316c565b6118be565b3480156107eb575f5ffd5b5061036360095481565b348015610800575f5ffd5b506103ff61080f3660046130a1565b611a76565b34801561081f575f5ffd5b506103ff61082e3660046131dd565b611afa565b34801561083e575f5ffd5b5061036361084d366004613214565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610882575f5ffd5b506103ff6108913660046131dd565b611b4d565b3480156108a1575f5ffd5b5061033e6108b036600461316c565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156108d8575f5ffd5b506103ff6108e7366004613038565b611ba0565b3480156108f7575f5ffd5b506103ff6109063660046131dd565b611c24565b348015610916575f5ffd5b506103ff610925366004613038565b611c77565b348015610935575f5ffd5b506103ff611cf7565b5f61094a338484611da4565b5060015b92915050565b5f6109616009600a613337565b610970906461f313f880613345565b905090565b5f5f5f5f5f6008546009546109966064600a54611eb090919063ffffffff16565b600b546109a4906064611eb0565b600c546109b2906064611eb0565b945094509450945094509091929394565b6007546001600160a01b0316336001600160a01b0316146109ff5760405162461bcd60e51b81526004016109f69061335c565b60405180910390fd5b610a0830610ea2565b811115610a4d5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e7420746f6b656e7360681b60448201526064016109f6565b5f8111610a6c5760405162461bcd60e51b81526004016109f690613384565b610a7581611ef8565b50565b5f610a84848484612000565b610ad58433610ad0856040518060600160405280602881526020016135c7602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190612714565b611da4565b5060019392505050565b5f546001600160a01b03163314610b085760405162461bcd60e51b81526004016109f6906133bb565b5f5b8151811015610b62575f60055f848481518110610b2957610b296133f0565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610b0a565b5050565b6007546001600160a01b0316336001600160a01b031614610b995760405162461bcd60e51b81526004016109f69061335c565b306001600160a01b03831603610bf15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420726573637565206f776e20746f6b656e00000000000000000060448201526064016109f6565b60075460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af1158015610c41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c659190613404565b505050565b6007546001600160a01b0316336001600160a01b03161480610c9557505f546001600160a01b031633145b610cd25760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016109f6565b5f610cdc30610ea2565b90508015610a7557610a75610cf38260105461274c565b612761565b5f546001600160a01b03163314610d215760405162461bcd60e51b81526004016109f6906133bb565b600a8211158015610d335750600a8111155b610d785760405162461bcd60e51b815260206004820152601660248201527554617820746f6f206869676820286d6178203130252960501b60448201526064016109f6565b6008829055600981905560408051838152602081018390527fb841faf0d1b32571f4ef966a2f35e3ae51f3cdda45318c3da5570a5b2ad8560591015b60405180910390a15050565b5f546001600160a01b03163314610de95760405162461bcd60e51b81526004016109f6906133bb565b610dfd81610df7858561299a565b9061299a565b61271014610e4d5760405162461bcd60e51b815260206004820152601860248201527f53706c697473206d7573742073756d20746f203130303030000000000000000060448201526064016109f6565b600a839055600b829055600c81905560408051848152602081018490529081018290527ffdb98b6e295610bf2419ce2012cacd127f8547e833929f29cc19e3d52aa9b62b9060600160405180910390a1505050565b6001600160a01b03165f9081526001602052604090205490565b5f546001600160a01b03163314610ee55760405162461bcd60e51b81526004016109f6906133bb565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610f565760405162461bcd60e51b81526004016109f6906133bb565b610f626009600a613337565b610f71906461f313f880613345565b600d55610f806009600a613337565b610f8f906461f313f880613345565b600e557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610fbf6009600a613337565b610fce906461f313f880613345565b60405190815260200160405180910390a1565b5f5f5f5f610fee30610ea2565b47610ffa61dead610ea2565b61100561dead610ea2565b935093509350935090919293565b5f546001600160a01b0316331461103c5760405162461bcd60e51b81526004016109f6906133bb565b601254600160a01b900460ff161561108d5760405162461bcd60e51b81526020600482015260146024820152732a3930b234b7339030b63932b0b23c9037b832b760611b60448201526064016109f6565b601254600160b81b900460ff166110e65760405162461bcd60e51b815260206004820152601d60248201527f496e697469616c20646973747269627574696f6e206e6f7420646f6e6500000060448201526064016109f6565b5f6110f030610ea2565b116111495760405162461bcd60e51b8152602060048201526024808201527f436f6e747261637420686173206e6f20746f6b656e7320666f72206c697175696044820152636469747960e01b60648201526084016109f6565b601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091555f81905260036020527ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff191660011790556111b6903090610ad082610ea2565b60115f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611206573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122a919061341f565b6001600160a01b031663c9c653963060115f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611289573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ad919061341f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156112f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131b919061341f565b601280546001600160a01b0319166001600160a01b0392831690811782555f908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915281208054909216909217905561137a30610ea2565b905047806113c15760405162461bcd60e51b81526020600482015260146024820152734e6f2045544820666f72206c697175696469747960601b60448201526064016109f6565b6011546001600160a01b031663f305d7198230855f806113e85f546001600160a01b031690565b426040518863ffffffff1660e01b815260040161140a9695949392919061343a565b60606040518083038185885af1158015611426573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061144b9190613475565b5050601280546001600160a01b039081165f908152600360209081526040808320805460ff199081169091558554851684526004928390529281902080549093169092559254601154915163095ea7b360e01b8152918316938201939093525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156114da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fe9190613404565b506012805462ff00ff60a01b19166201000160a01b1790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c7905f90a15050565b5f546001600160a01b0316331461156b5760405162461bcd60e51b81526004016109f6906133bb565b601254600160b81b900460ff16156115c55760405162461bcd60e51b815260206004820152601960248201527f446973747269627574696f6e20616c726561647920646f6e650000000000000060448201526064016109f6565b5f6115f760646115f1600f6115dc6009600a613337565b6115eb906461f313f880613345565b906129f8565b90611eb0565b90505f61161f8261160a6009600a613337565b611619906461f313f880613345565b90612a76565b335f9081526001602052604090205490915061163b9082612a76565b335f9081526001602052604080822092909255308152205461165d908261299a565b305f81815260016020526040902091909155336001600160a01b03165f5160206135ef5f395f51905f528360405161169791815260200190565b60405180910390a36012805460ff60b81b1916600160b81b17905560408051828152602081018490527fd0a76e57a0c59827ca6055dc2b1cfeb94a2344b07b20b2db14ad1961aa9475589101610db4565b5f61094a338484612000565b5f546001600160a01b0316331461171d5760405162461bcd60e51b81526004016109f6906133bb565b61173d606461172e6009600a613337565b6115f1906461f313f880613345565b82111561178c5760405162461bcd60e51b815260206004820152601b60248201527f5468726573686f6c6420746f6f206869676820286d617820312529000000000060448201526064016109f6565b61179d606461172e6009600a613337565b8111156117ec5760405162461bcd60e51b815260206004820152601a60248201527f4d6178207377617020746f6f206869676820286d61782031252900000000000060448201526064016109f6565b600f91909155601055565b6007546001600160a01b0316336001600160a01b03161461182a5760405162461bcd60e51b81526004016109f69061335c565b4781111561186d5760405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b60448201526064016109f6565b5f81116118b55760405162461bcd60e51b8152602060048201526016602482015275045544820616d6f756e74206d757374206265203e20360541b60448201526064016109f6565b610a7581612ab7565b6007546001600160a01b0316336001600160a01b0316146118f15760405162461bcd60e51b81526004016109f69061335c565b306001600160a01b038216036119495760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e0000000000000060448201526064016109f6565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561198f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b391906134a0565b90505f81116119fc5760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b60448201526064016109f6565b60075460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af1158015611a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a709190613404565b50505050565b5f546001600160a01b03163314611a9f5760405162461bcd60e51b81526004016109f6906133bb565b5f5b8151811015610b6257600160055f848481518110611ac157611ac16133f0565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611aa1565b5f546001600160a01b03163314611b235760405162461bcd60e51b81526004016109f6906133bb565b6001600160a01b03919091165f908152600460205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314611b765760405162461bcd60e51b81526004016109f6906133bb565b6001600160a01b03919091165f908152600360205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314611bc95760405162461bcd60e51b81526004016109f6906133bb565b611bdb6103e861172e6009600a613337565b811015611c1f5760405162461bcd60e51b81526020600482015260126024820152714d61782077616c6c657420746f6f206c6f7760701b60448201526064016109f6565b600e55565b5f546001600160a01b03163314611c4d5760405162461bcd60e51b81526004016109f6906133bb565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314611ca05760405162461bcd60e51b81526004016109f6906133bb565b611cb26103e861172e6009600a613337565b811015611cf25760405162461bcd60e51b815260206004820152600e60248201526d4d617820545820746f6f206c6f7760901b60448201526064016109f6565b600d55565b6007546001600160a01b0316336001600160a01b031614611d2a5760405162461bcd60e51b81526004016109f69061335c565b4780611d6d5760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b60448201526064016109f6565b6007546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610b62573d5f5f3e3d5ffd5b6001600160a01b038316611dfa5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f206164647265737360448201526064016109f6565b6001600160a01b038216611e505760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f2061646472657373000060448201526064016109f6565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611ef183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d07565b9392505050565b5f8111611f475760405162461bcd60e51b815260206004820152601760248201527f4275726e20616d6f756e74206d757374206265203e203000000000000000000060448201526064016109f6565b305f90815260016020526040902054611f609082612a76565b305f9081526001602052604081209190915561dead90527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54611fa3908261299a565b61dead5f81905260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d9190915560405130905f5160206135ef5f395f51905f5290611ff59085815260200190565b60405180910390a350565b6001600160a01b0383166120605760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b60648201526084016109f6565b6001600160a01b0382166120b65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f20616464726573730060448201526064016109f6565b5f81116121055760405162461bcd60e51b815260206004820152601b60248201527f5472616e7366657220616d6f756e74206d757374206265203e2030000000000060448201526064016109f6565b6001600160a01b0383165f9081526006602052604090205460ff161561216d5760405162461bcd60e51b815260206004820152601960248201527f53656e646572206164647265737320697320626c6f636b65640000000000000060448201526064016109f6565b6001600160a01b0382165f9081526006602052604090205460ff16156121d55760405162461bcd60e51b815260206004820152601c60248201527f526563697069656e74206164647265737320697320626c6f636b65640000000060448201526064016109f6565b5f546001600160a01b038481169116148015906121ff57505f546001600160a01b03838116911614155b801561221457506001600160a01b0383163014155b801561222957506001600160a01b0382163014155b1561227e57601254600160a01b900460ff1661227e5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016109f6565b5f80546001600160a01b038581169116148015906122a957505f546001600160a01b03848116911614155b15612602576001600160a01b0384165f9081526005602052604090205460ff161580156122ee57506001600160a01b0383165f9081526005602052604090205460ff16155b6123295760405162461bcd60e51b815260206004820152600c60248201526b109bdd0819195d1958dd195960a21b60448201526064016109f6565b6001600160a01b0384165f9081526004602052604090205460ff1615801561236957506001600160a01b0383165f9081526004602052604090205460ff16155b156123c057600d548211156123c05760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e74000060448201526064016109f6565b6012546001600160a01b0385811691161480156123eb57506011546001600160a01b03848116911614155b801561240f57506001600160a01b0383165f9081526003602052604090205460ff16155b1561249657600e548261242185610ea2565b61242b91906134b7565b11156124795760405162461bcd60e51b815260206004820152601760248201527f45786365656473206d61782077616c6c65742073697a6500000000000000000060448201526064016109f6565b61249360646115f1600854856129f890919063ffffffff16565b90505b6012546001600160a01b0384811691161480156124bc57506001600160a01b0384163014155b80156124e057506001600160a01b0384165f9081526003602052604090205460ff16155b15612502576124ff60646115f1600954856129f890919063ffffffff16565b90505b5f61250c30610ea2565b601254909150600160a81b900460ff1615801561253657506012546001600160a01b038581169116145b801561254b5750601254600160b01b900460ff165b80156125595750600f548110155b156126005760145443111561256d575f6013555b6003601354106125bf5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920332073656c6c732070657220626c6f636b2100000000000000000060448201526064016109f6565b5f6125d5846125d08460105461274c565b61274c565b905080156125e6576125e681612761565b60138054905f6125f5836134ca565b909155505043601455505b505b801561266757305f90815260016020526040902054612621908261299a565b305f81815260016020526040908190209290925590516001600160a01b038616905f5160206135ef5f395f51905f529061265e9085815260200190565b60405180910390a35b5f6126728383612a76565b6001600160a01b0386165f908152600160205260409020549091506126979084612a76565b6001600160a01b038087165f9081526001602052604080822093909355908616815220546126c5908261299a565b6001600160a01b038086165f8181526001602052604090819020939093559151908716905f5160206135ef5f395f51905f52906127059085815260200190565b60405180910390a35050505050565b5f81848411156127375760405162461bcd60e51b81526004016109f69190612fb5565b505f61274384866134e2565b95945050505050565b5f81831061275a5781611ef1565b5090919050565b6012805460ff60a81b1916600160a81b179055806127b85760405162461bcd60e51b81526020600482015260146024820152734e6f20746f6b656e7320746f2070726f6365737360601b60448201526064016109f6565b5f6127c230610ea2565b9050818110156128145760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e636500000060448201526064016109f6565b612831600c54610df7600b54600a5461299a90919063ffffffff16565b612710146128765760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964207461782073706c69747360701b60448201526064016109f6565b5f6128926127106115f1600b54866129f890919063ffffffff16565b905080156128a3576128a381611ef8565b5f6128ae8483612a76565b9050805f036128bf5750505061298a565b5f6128d7600c54600a5461299a90919063ffffffff16565b90505f81116129285760405162461bcd60e51b815260206004820152601c60248201527f4e6f20616c6c6f636174696f6e20666f72206275796261636b2f4c500000000060448201526064016109f6565b5f612942826115f1600a54866129f890919063ffffffff16565b90505f61294f8483612a76565b90508115612974575f61296183612d33565b905080156129725761297281612ab7565b505b80156129835761298381612ebd565b5050505050505b506012805460ff60a81b19169055565b5f806129a683856134b7565b905083811015611ef15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109f6565b5f825f03612a0757505f61094e565b5f612a128385613345565b905082612a1f85836134f5565b14611ef15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109f6565b5f611ef183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612714565b5f8111612aff5760405162461bcd60e51b8152602060048201526016602482015275045544820616d6f756e74206d757374206265203e20360541b60448201526064016109f6565b47811115612b4f5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e6365000000000000000060448201526064016109f6565b6040805160028082526060820183525f926020830190803683375050601154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612bb6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bda919061341f565b815f81518110612bec57612bec6133f0565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612c2057612c206133f0565b60200260200101906001600160a01b031690816001600160a01b0316815250505f612c4c61dead610ea2565b60115460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de95908590612c87905f90879061dead904290600401613557565b5f604051808303818588803b158015612c9e575f5ffd5b505af193505050508015612cb0575060015b15610c65575f612cc58261161961dead610ea2565b60408051868152602081018390529192507f8e8412cac6b961b95ef832e2bac486977bbd29eb9725f9eddd97f3380c31f649910160405180910390a150505050565b5f8183612d275760405162461bcd60e51b81526004016109f69190612fb5565b505f61274384866134f5565b5f5f8211612d535760405162461bcd60e51b81526004016109f690613384565b60408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110612d8a57612d8a6133f0565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612de1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e05919061341f565b81600181518110612e1857612e186133f0565b6001600160a01b039283166020918202929092010152601154612e3e9130911686611da4565b60115460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e769087905f9086903090429060040161358b565b5f604051808303815f87803b158015612e8d575f5ffd5b505af1925050508015612e9e575060015b612eab57505f9392505050565b612eb54783612a76565b949350505050565b5f8111612edc5760405162461bcd60e51b81526004016109f690613384565b5f612ee8826002611eb0565b90505f612ef58383612a76565b90505f612f0183612d33565b90505f81118015612f1157505f82115b15611a7057601154612f2e9030906001600160a01b031684611da4565b60115460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612f6c90309087905f90819061dead90429060040161343a565b60606040518083038185885af193505050508015612fa7575060408051601f3d908101601f19168201909252612fa491810190613475565b60015b15611a705750505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610a75575f5ffd5b803561300981612fea565b919050565b5f5f6040838503121561301f575f5ffd5b823561302a81612fea565b946020939093013593505050565b5f60208284031215613048575f5ffd5b5035919050565b5f5f5f60608486031215613061575f5ffd5b833561306c81612fea565b9250602084013561307c81612fea565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156130b1575f5ffd5b813567ffffffffffffffff8111156130c7575f5ffd5b8201601f810184136130d7575f5ffd5b803567ffffffffffffffff8111156130f1576130f161308d565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561311e5761311e61308d565b60405291825260208184018101929081018784111561313b575f5ffd5b6020850194505b838510156131615761315385612ffe565b815260209485019401613142565b509695505050505050565b5f6020828403121561317c575f5ffd5b8135611ef181612fea565b5f5f60408385031215613198575f5ffd5b50508035926020909101359150565b5f5f5f606084860312156131b9575f5ffd5b505081359360208301359350604090920135919050565b8015158114610a75575f5ffd5b5f5f604083850312156131ee575f5ffd5b82356131f981612fea565b91506020830135613209816131d0565b809150509250929050565b5f5f60408385031215613225575f5ffd5b823561323081612fea565b9150602083013561320981612fea565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561328f5780850481111561327357613273613240565b600184161561328157908102905b60019390931c928002613258565b935093915050565b5f826132a55750600161094e565b816132b157505f61094e565b81600181146132c757600281146132d1576132ed565b600191505061094e565b60ff8411156132e2576132e2613240565b50506001821b61094e565b5060208310610133831016604e8410600b8410161715613310575081810a61094e565b61331c5f198484613254565b805f190482111561332f5761332f613240565b029392505050565b5f611ef160ff841683613297565b808202811582820484141761094e5761094e613240565b6020808252600e908201526d139bdd081d185e081dd85b1b195d60921b604082015260600190565b60208082526018908201527f546f6b656e20616d6f756e74206d757374206265203e20300000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613414575f5ffd5b8151611ef1816131d0565b5f6020828403121561342f575f5ffd5b8151611ef181612fea565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f5f5f60608486031215613487575f5ffd5b5050815160208301516040909301519094929350919050565b5f602082840312156134b0575f5ffd5b5051919050565b8082018082111561094e5761094e613240565b5f600182016134db576134db613240565b5060010190565b8181038181111561094e5761094e613240565b5f8261350f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f8151808452602084019350602083015f5b8281101561354d5781516001600160a01b0316865260209586019590910190600101613526565b5093949350505050565b848152608060208201525f61356f6080830186613514565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f6135a960a0830186613514565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122053ebdaad6eeb1d47689b9761004be1ce41b323e15e140223ee5fb835623ef34e64736f6c634300081e0033

Deployed Bytecode Sourcemap

3987:20885:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4547:73;;;;;;;;;;;;4578:42;4547:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;4547:73:0;;;;;;;;7788:83;;;;;;;;;;-1:-1:-1;7858:5:0;;;;;;;;;;;;-1:-1:-1;;;7858:5:0;;;;7788:83;;;;;;;:::i;8621:161::-;;;;;;;;;;-1:-1:-1;8621:161:0;;;;;:::i;:::-;;:::i;:::-;;;1457:14:1;;1450:22;1432:41;;1420:2;1405:18;8621:161:0;1292:187:1;5460:55:0;;;;;;;;;;;;;;;;;;;1630:25:1;;;1618:2;1603:18;5460:55:0;1484:177:1;5544:41:0;;;;;;;;;;-1:-1:-1;5544:41:0;;;;-1:-1:-1;;;;;5544:41:0;;;8065:95;;;;;;;;;;;;;:::i;22071:382::-;;;;;;;;;;;;;:::i;:::-;;;;2159:25:1;;;2215:2;2200:18;;2193:34;;;;2243:18;;;2236:34;;;;2301:2;2286:18;;2279:34;2344:3;2329:19;;2322:35;2146:3;2131:19;22071:382:0;1900:463:1;23489:302:0;;;;;;;;;;-1:-1:-1;23489:302:0;;;;;:::i;:::-;;:::i;:::-;;8790:313;;;;;;;;;;-1:-1:-1;8790:313:0;;;;;:::i;:::-;;:::i;22465:321::-;;;;;;;;;;;;22674:11;;22726:12;;22753:14;;22674:11;-1:-1:-1;;;22674:11:0;;;;;-1:-1:-1;;;22700:11:0;;;22465:321;;;;;;;3356:14:1;;3349:22;3331:41;;3415:14;;3408:22;3403:2;3388:18;;3381:50;3447:18;;;3440:34;3505:2;3490:18;;3483:34;3318:3;3303:19;22465:321:0;3112:411:1;7974:83:0;;;;;;;;;;-1:-1:-1;7974:83:0;;5041:1;3670:36:1;;3658:2;3643:18;7974:83:0;3528:184:1;18858:168:0;;;;;;;;;;-1:-1:-1;18858:168:0;;;;;:::i;:::-;;:::i;24593:276::-;;;;;;;;;;-1:-1:-1;24593:276:0;;;;;:::i;:::-;;:::i;19034:86::-;;;;;;;;;;-1:-1:-1;19034:86:0;;;;;:::i;:::-;-1:-1:-1;;;;;19105:7:0;19081:4;19105:7;;;:4;:7;;;;;;;;;19034:86;5592:28;;;;;;;;;;-1:-1:-1;5592:28:0;;;;-1:-1:-1;;;;;5592:28:0;;;22878:294;;;;;;;;;;;;;:::i;4671:25::-;;;;;;;;;;;;;;;;19673:124;;;;;;;;;;-1:-1:-1;19673:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;19762:27:0;19738:4;19762:27;;;:18;:27;;;;;;;;;19673:124;4870:29;;;;;;;;;;;;;;;;4919:27;;;;;;;;;;;;;;;;19809:128;;;;;;;;;;-1:-1:-1;19809:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;19900:29:0;19876:4;19900:29;;;:20;:29;;;;;;;;;19809:128;17698:232;;;;;;;;;;-1:-1:-1;17698:232:0;;;;;:::i;:::-;;:::i;17942:344::-;;;;;;;;;;-1:-1:-1;17942:344:0;;;;;:::i;:::-;;:::i;8168:119::-;;;;;;;;;;-1:-1:-1;8168:119:0;;;;;:::i;:::-;;:::i;2855:148::-;;;;;;;;;;;;;:::i;17134:162::-;;;;;;;;;;;;;:::i;21694:365::-;;;;;;;;;;;;;:::i;:::-;;;;6286:25:1;;;6342:2;6327:18;;6320:34;;;;6370:18;;;6363:34;6428:2;6413:18;;6406:34;6273:3;6258:19;21694:365:0;6055:391:1;5264:56:0;;;;;;;;;;;;;;;;19990:1651;;;;;;;;;;;;;:::i;2641:79::-;;;;;;;;;;-1:-1:-1;2679:7:0;2706:6;-1:-1:-1;;;;;2706:6:0;2641:79;;5327:58;;;;;;;;;;;;;;;;7057:677;;;;;;;;;;;;;:::i;7879:87::-;;;;;;;;;;-1:-1:-1;7951:7:0;;;;;;;;;;;;-1:-1:-1;;;7951:7:0;;;;7879:87;;8295:167;;;;;;;;;;-1:-1:-1;8295:167:0;;;;;:::i;:::-;;:::i;4821:32::-;;;;;;;;;;;;;;;;18298:319;;;;;;;;;;-1:-1:-1;18298:319:0;;;;;:::i;:::-;;:::i;5392:61::-;;;;;;;;;;;;;;;;23184:293;;;;;;;;;;-1:-1:-1;23184:293:0;;;;;:::i;:::-;;:::i;24104:417::-;;;;;;;;;;-1:-1:-1;24104:417:0;;;;;:::i;:::-;;:::i;4717:26::-;;;;;;;;;;;;;;;;18686:164;;;;;;;;;;-1:-1:-1;18686:164:0;;;;;:::i;:::-;;:::i;19525:136::-;;;;;;;;;;-1:-1:-1;19525:136:0;;;;;:::i;:::-;;:::i;8470:143::-;;;;;;;;;;-1:-1:-1;8470:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8578:18:0;;;8551:7;8578:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8470:143;19381:132;;;;;;;;;;-1:-1:-1;19381:132:0;;;;;:::i;:::-;;:::i;19259:110::-;;;;;;;;;;-1:-1:-1;19259:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;19341:20:0;19317:4;19341:20;;;:17;:20;;;;;;;;;19259:110;17493:193;;;;;;;;;;-1:-1:-1;17493:193:0;;;;;:::i;:::-;;:::i;19132:115::-;;;;;;;;;;-1:-1:-1;19132:115:0;;;;;:::i;:::-;;:::i;17308:173::-;;;;;;;;;;-1:-1:-1;17308:173:0;;;;;:::i;:::-;;:::i;23799:293::-;;;;;;;;;;;;;:::i;8621:161::-;8696:4;8713:39;478:10;8736:7;8745:6;8713:8;:39::i;:::-;-1:-1:-1;8770:4:0;8621:161;;;;;:::o;8065:95::-;8118:7;5099:13;5041:1;5099:2;:13;:::i;:::-;5084:28;;:12;:28;:::i;:::-;8138:14;;8065:95;:::o;22071:382::-;22126:21;22158:22;22191;22224:19;22254:17;22312:6;;22333:7;;22355:19;22370:3;22355:10;;:14;;:19;;;;:::i;:::-;22389:7;;:16;;22401:3;22389:11;:16::i;:::-;22420:5;;:14;;22430:3;22420:9;:14::i;:::-;22290:155;;;;;;;;;;22071:382;;;;;:::o;23489:302::-;23574:10;;-1:-1:-1;;;;;23574:10:0;478;-1:-1:-1;;;;;23558:26:0;;23550:53;;;;-1:-1:-1;;;23550:53:0;;;;;;;:::i;:::-;;;;;;;;;23637:24;23655:4;23637:9;:24::i;:::-;23622:11;:39;;23614:71;;;;-1:-1:-1;;;23614:71:0;;9636:2:1;23614:71:0;;;9618:21:1;9675:2;9655:18;;;9648:30;-1:-1:-1;;;9694:18:1;;;9687:49;9753:18;;23614:71:0;9434:343:1;23614:71:0;23718:1;23704:11;:15;23696:52;;;;-1:-1:-1;;;23696:52:0;;;;;;;:::i;:::-;23759:24;23771:11;23759;:24::i;:::-;23489:302;:::o;8790:313::-;8888:4;8905:36;8915:6;8923:9;8934:6;8905:9;:36::i;:::-;8952:121;8961:6;478:10;8983:89;9021:6;8983:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8983:19:0;;;;;;:11;:19;;;;;;;;478:10;8983:33;;;;;;;;;;:37;:89::i;:::-;8952:8;:121::i;:::-;-1:-1:-1;9091:4:0;8790:313;;;;;:::o;18858:168::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;18933:6:::1;18928:91;18949:6;:13;18945:1;:17;18928:91;;;19002:5;18984:4;:15;18989:6;18996:1;18989:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18984:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;18984:15:0;:23;;-1:-1:-1;;18984:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;18964:3:0::1;18928:91;;;;18858:168:::0;:::o;24593:276::-;24696:10;;-1:-1:-1;;;;;24696:10:0;478;-1:-1:-1;;;;;24680:26:0;;24672:53;;;;-1:-1:-1;;;24672:53:0;;;;;;;:::i;:::-;24768:4;-1:-1:-1;;;;;24744:29:0;;;24736:65;;;;-1:-1:-1;;;24736:65:0;;10830:2:1;24736:65:0;;;10812:21:1;10869:2;10849:18;;;10842:30;10908:25;10888:18;;;10881:53;10951:18;;24736:65:0;10628:347:1;24736:65:0;24842:10;;24812:49;;-1:-1:-1;;;24812:49:0;;-1:-1:-1;;;;;24842:10:0;;;24812:49;;;11162:51:1;11229:18;;;11222:34;;;24812:29:0;;;;;;11135:18:1;;24812:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24593:276;;:::o;22878:294::-;22947:10;;-1:-1:-1;;;;;22947:10:0;478;-1:-1:-1;;;;;22931:26:0;;:53;;;-1:-1:-1;2679:7:0;2706:6;-1:-1:-1;;;;;2706:6:0;478:10;22961:23;22931:53;22923:80;;;;-1:-1:-1;;;22923:80:0;;11719:2:1;22923:80:0;;;11701:21:1;11758:2;11738:18;;;11731:30;-1:-1:-1;;;11777:18:1;;;11770:44;11831:18;;22923:80:0;11517:338:1;22923:80:0;23014:20;23037:24;23055:4;23037:9;:24::i;:::-;23014:47;-1:-1:-1;23076:16:0;;23072:93;;23109:44;23122:30;23126:12;23140:11;;23122:3;:30::i;:::-;23109:12;:44::i;17698:232::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;17789:2:::1;17781:4;:10;;:25;;;;;17804:2;17795:5;:11;;17781:25;17773:60;;;::::0;-1:-1:-1;;;17773:60:0;;12062:2:1;17773:60:0::1;::::0;::::1;12044:21:1::0;12101:2;12081:18;;;12074:30;-1:-1:-1;;;12120:18:1;;;12113:52;12182:18;;17773:60:0::1;11860:346:1::0;17773:60:0::1;17844:6;:13:::0;;;17868:7:::1;:15:::0;;;17899:23:::1;::::0;;12385:25:1;;;12441:2;12426:18;;12419:34;;;17899:23:0::1;::::0;12358:18:1;17899:23:0::1;;;;;;;;17698:232:::0;;:::o;17942:344::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;18054:37:::1;18084:6:::0;18054:25:::1;:11:::0;18070:8;18054:15:::1;:25::i;:::-;:29:::0;::::1;:37::i;:::-;18095:5;18054:46;18046:83;;;::::0;-1:-1:-1;;;18046:83:0;;12666:2:1;18046:83:0::1;::::0;::::1;12648:21:1::0;12705:2;12685:18;;;12678:30;12744:26;12724:18;;;12717:54;12788:18;;18046:83:0::1;12464:348:1::0;18046:83:0::1;18140:10;:24:::0;;;18175:7:::1;:18:::0;;;18204:5:::1;:14:::0;;;18234:44:::1;::::0;;13019:25:1;;;13075:2;13060:18;;13053:34;;;13103:18;;;13096:34;;;18234:44:0::1;::::0;13007:2:1;12992:18;18234:44:0::1;;;;;;;17942:344:::0;;;:::o;8168:119::-;-1:-1:-1;;;;;8261:18:0;8234:7;8261:18;;;:9;:18;;;;;;;8168:119::o;2855:148::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;2962:1:::1;2946:6:::0;;2925:40:::1;::::0;-1:-1:-1;;;;;2946:6:0;;::::1;::::0;2925:40:::1;::::0;2962:1;;2925:40:::1;2993:1;2976:19:::0;;-1:-1:-1;;;;;;2976:19:0::1;::::0;;2855:148::o;17134:162::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;5099:13:::1;5041:1;5099:2;:13;:::i;:::-;5084:28;::::0;:12:::1;:28;:::i;:::-;17188:12;:22:::0;5099:13:::1;5041:1;5099:2;:13;:::i;:::-;5084:28;::::0;:12:::1;:28;:::i;:::-;17221:14;:24:::0;17261:27:::1;5099:13;5041:1;5099:2;:13;:::i;:::-;5084:28;::::0;:12:::1;:28;:::i;:::-;17261:27;::::0;1630:25:1;;;1618:2;1603:18;17261:27:0::1;;;;;;;17134:162::o:0;21694:365::-;21754:28;21793:26;21830:19;21860;21920:24;21938:4;21920:9;:24::i;:::-;21959:21;21995:15;4578:42;21995:9;:15::i;:::-;22025;4578:42;22025:9;:15::i;:::-;21898:153;;;;;;;;21694:365;;;;:::o;19990:1651::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;20054:11:::1;::::0;-1:-1:-1;;;20054:11:0;::::1;;;20053:12;20045:45;;;::::0;-1:-1:-1;;;20045:45:0;;13343:2:1;20045:45:0::1;::::0;::::1;13325:21:1::0;13382:2;13362:18;;;13355:30;-1:-1:-1;;;13401:18:1;;;13394:50;13461:18;;20045:45:0::1;13141:344:1::0;20045:45:0::1;20109:24;::::0;-1:-1:-1;;;20109:24:0;::::1;;;20101:66;;;::::0;-1:-1:-1;;;20101:66:0;;13692:2:1;20101:66:0::1;::::0;::::1;13674:21:1::0;13731:2;13711:18;;;13704:30;13770:31;13750:18;;;13743:59;13819:18;;20101:66:0::1;13490:353:1::0;20101:66:0::1;20213:1;20186:24;20204:4;20186:9;:24::i;:::-;:28;20178:77;;;::::0;-1:-1:-1;;;20178:77:0;;14050:2:1;20178:77:0::1;::::0;::::1;14032:21:1::0;14089:2;14069:18;;;14062:30;14128:34;14108:18;;;14101:62;-1:-1:-1;;;14179:18:1;;;14172:34;14223:19;;20178:77:0::1;13848:400:1::0;20178:77:0::1;20276:15;:80:::0;;-1:-1:-1;;;;;;20276:80:0::1;20313:42;20276:80:::0;;::::1;::::0;;;:15:::1;20390:44:::0;;;:18:::1;:44;::::0;;:51;;-1:-1:-1;;20390:51:0::1;20276:80:::0;20390:51:::1;::::0;;20475:75:::1;::::0;20492:4:::1;::::0;20525:24:::1;20492:4:::0;20525:9:::1;:24::i;20475:75::-;20618:15;;;;;;;;;-1:-1:-1::0;;;;;20618:15:0::1;-1:-1:-1::0;;;;;20618:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20600:69:0::1;;20678:4;20685:15;;;;;;;;;-1:-1:-1::0;;;;;20685:15:0::1;-1:-1:-1::0;;;;;20685:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20600:108;::::0;-1:-1:-1;;;;;;20600:108:0::1;::::0;;;;;;-1:-1:-1;;;;;14701:32:1;;;20600:108:0::1;::::0;::::1;14683:51:1::0;14770:32;;14750:18;;;14743:60;14656:18;;20600:108:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20584:13;:124:::0;;-1:-1:-1;;;;;;20584:124:0::1;-1:-1:-1::0;;;;;20584:124:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;20742:33:0;;;:18:::1;:33;::::0;;;;;;;:40;;-1:-1:-1;;20742:40:0;;::::1;-1:-1:-1::0;20742:40:0;;::::1;::::0;;;20814:13;;;;::::1;20793:35:::0;;:20:::1;:35:::0;;;;;:42;;;;::::1;::::0;;::::1;::::0;;20900:24:::1;20918:4;20900:9;:24::i;:::-;20869:55:::0;-1:-1:-1;20961:21:0::1;21011:19:::0;21003:52:::1;;;::::0;-1:-1:-1;;;21003:52:0;;15016:2:1;21003:52:0::1;::::0;::::1;14998:21:1::0;15055:2;15035:18;;;15028:30;-1:-1:-1;;;15074:18:1;;;15067:50;15134:18;;21003:52:0::1;14814:344:1::0;21003:52:0::1;21076:15;::::0;-1:-1:-1;;;;;21076:15:0::1;:31;21115:15:::0;21154:4:::1;21174:20:::0;21076:15:::1;::::0;21241:7:::1;2679::::0;2706:6;-1:-1:-1;;;;;2706:6:0;;2641:79;21241:7:::1;21263:15;21076:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;21342:13:0::1;::::0;;-1:-1:-1;;;;;21342:13:0;;::::1;21359:5;21323:33:::0;;;:18:::1;:33;::::0;;;;;;;:41;;-1:-1:-1;;21323:41:0;;::::1;::::0;;;21396:13;;;::::1;21375:35:::0;;:20:::1;:35:::0;;;;;;;;:43;;;;::::1;::::0;;;21459:13;;21490:15:::1;::::0;21452:71;;-1:-1:-1;;;21452:71:0;;21490:15;;::::1;21452:71:::0;;::::1;11162:51:1::0;;;;-1:-1:-1;;11229:18:1;;;11222:34;21459:13:0;::::1;::::0;-1:-1:-1;21452:29:0::1;::::0;11135:18:1;;21452:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21544:11:0::1;:18:::0;;-1:-1:-1;;;;21573:18:0;-1:-1:-1;;;21573:18:0;;;21617:16:::1;::::0;::::1;::::0;-1:-1:-1;;21617:16:0::1;20034:1607;;19990:1651::o:0;7057:677::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;7127:24:::1;::::0;-1:-1:-1;;;7127:24:0;::::1;;;7126:25;7118:63;;;::::0;-1:-1:-1;;;7118:63:0;;16713:2:1;7118:63:0::1;::::0;::::1;16695:21:1::0;16752:2;16732:18;;;16725:30;16791:27;16771:18;;;16764:55;16836:18;;7118:63:0::1;16511:349:1::0;7118:63:0::1;7202:19;7224:24;7244:3;7224:15;7236:2;5099:13;5041:1;5099:2;:13;:::i;:::-;5084:28;::::0;:12:::1;:28;:::i;:::-;7224:11:::0;::::1;:15::i;:::-;:19:::0;::::1;:24::i;:::-;7202:46:::0;-1:-1:-1;7259:22:0::1;7284:24;7202:46:::0;5099:13:::1;5041:1;5099:2;:13;:::i;:::-;5084:28;::::0;:12:::1;:28;:::i;:::-;7284:11:::0;::::1;:24::i;:::-;478:10:::0;7402:23:::1;::::0;;;:9:::1;:23;::::0;;;;;7259:49;;-1:-1:-1;7402:43:0::1;::::0;7259:49;7402:27:::1;:43::i;:::-;478:10:::0;7376:23:::1;::::0;;;:9:::1;:23;::::0;;;;;:69;;;;7501:4:::1;7483:24:::0;;;;:44:::1;::::0;7512:14;7483:28:::1;:44::i;:::-;7474:4;7456:24;::::0;;;:9:::1;:24;::::0;;;;:71;;;;478:10;-1:-1:-1;;;;;7553:53:0::1;-1:-1:-1::0;;;;;;;;;;;7591:14:0::1;7553:53;;;;1630:25:1::0;;1618:2;1603:18;;1484:177;7553:53:0::1;;;;;;;;7617:24;:31:::0;;-1:-1:-1;;;;7617:31:0::1;-1:-1:-1::0;;;7617:31:0::1;::::0;;7674:52:::1;::::0;;12385:25:1;;;12441:2;12426:18;;12419:34;;;7674:52:0::1;::::0;12358:18:1;7674:52:0::1;12211:248:1::0;8295:167:0;8373:4;8390:42;478:10;8414:9;8425:6;8390:9;:42::i;18298:319::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;18412:16:::1;18424:3;5099:13;5041:1;5099:2;:13;:::i;:::-;5084:28;::::0;:12:::1;:28;:::i;18412:16::-;18399:9;:29;;18391:69;;;::::0;-1:-1:-1;;;18391:69:0;;17067:2:1;18391:69:0::1;::::0;::::1;17049:21:1::0;17106:2;17086:18;;;17079:30;17145:29;17125:18;;;17118:57;17192:18;;18391:69:0::1;16865:351:1::0;18391:69:0::1;18490:16;18502:3;5099:13;5041:1;5099:2;:13;:::i;18490:16::-;18479:7;:27;;18471:66;;;::::0;-1:-1:-1;;;18471:66:0;;17423:2:1;18471:66:0::1;::::0;::::1;17405:21:1::0;17462:2;17442:18;;;17435:30;17501:28;17481:18;;;17474:56;17547:18;;18471:66:0::1;17221:350:1::0;18471:66:0::1;18548:17;:29:::0;;;;18588:11:::1;:21:::0;18298:319::o;23184:293::-;23270:10;;-1:-1:-1;;;;;23270:10:0;478;-1:-1:-1;;;;;23254:26:0;;23246:53;;;;-1:-1:-1;;;23246:53:0;;;;;;;:::i;:::-;23331:21;23318:9;:34;;23310:63;;;;-1:-1:-1;;;23310:63:0;;17778:2:1;23310:63:0;;;17760:21:1;17817:2;17797:18;;;17790:30;-1:-1:-1;;;17836:18:1;;;17829:46;17892:18;;23310:63:0;17576:340:1;23310:63:0;23404:1;23392:9;:13;23384:48;;;;-1:-1:-1;;;23384:48:0;;18123:2:1;23384:48:0;;;18105:21:1;18162:2;18142:18;;;18135:30;-1:-1:-1;;;18181:18:1;;;18174:52;18243:18;;23384:48:0;17921:346:1;23384:48:0;23443:26;23459:9;23443:15;:26::i;24104:417::-;24199:10;;-1:-1:-1;;;;;24199:10:0;478;-1:-1:-1;;;;;24183:26:0;;24175:53;;;;-1:-1:-1;;;24175:53:0;;;;;;;:::i;:::-;24271:4;-1:-1:-1;;;;;24247:29:0;;;24239:67;;;;-1:-1:-1;;;24239:67:0;;18474:2:1;24239:67:0;;;18456:21:1;18513:2;18493:18;;;18486:30;18552:27;18532:18;;;18525:55;18597:18;;24239:67:0;18272:349:1;24239:67:0;24381:30;;-1:-1:-1;;;24381:30:0;;24405:4;24381:30;;;160:51:1;24339:12:0;;24317;;-1:-1:-1;;;;;24381:15:0;;;;;133:18:1;;24381:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24363:48;;24440:1;24430:7;:11;24422:45;;;;-1:-1:-1;;;24422:45:0;;19063:2:1;24422:45:0;;;19045:21:1;19102:2;19082:18;;;19075:30;-1:-1:-1;;;19121:18:1;;;19114:51;19182:18;;24422:45:0;18861:345:1;24422:45:0;24493:10;;24478:35;;-1:-1:-1;;;24478:35:0;;-1:-1:-1;;;;;24493:10:0;;;24478:35;;;11162:51:1;11229:18;;;11222:34;;;24478:14:0;;;;;;11135:18:1;;24478:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24164:357;;24104:417;:::o;18686:164::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;18760:6:::1;18755:88;18776:5;:12;18772:1;:16;18755:88;;;18827:4;18810;:14;18815:5;18821:1;18815:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18810:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;18810:14:0;:21;;-1:-1:-1;;18810:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;18790:3:0::1;18755:88;;19525:136:::0;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19613:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;19613:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19525:136::o;19381:132::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19467:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;19467:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19381:132::o;17493:193::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;17589:17:::1;17601:4;5099:13;5041:1;5099:2;:13;:::i;17589:17::-;17576:9;:30;;17568:61;;;::::0;-1:-1:-1;;;17568:61:0;;19413:2:1;17568:61:0::1;::::0;::::1;19395:21:1::0;19452:2;19432:18;;;19425:30;-1:-1:-1;;;19471:18:1;;;19464:48;19529:18;;17568:61:0::1;19211:342:1::0;17568:61:0::1;17652:14;:26:::0;17493:193::o;19132:115::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19209:20:0;;;::::1;;::::0;;;:17:::1;:20;::::0;;;;:30;;-1:-1:-1;;19209:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19132:115::o;17308:173::-;2768:6;;-1:-1:-1;;;;;2768:6:0;478:10;2768:22;2760:67;;;;-1:-1:-1;;;2760:67:0;;;;;;;:::i;:::-;17394:17:::1;17406:4;5099:13;5041:1;5099:2;:13;:::i;17394:17::-;17385:5;:26;;17377:53;;;::::0;-1:-1:-1;;;17377:53:0;;19760:2:1;17377:53:0::1;::::0;::::1;19742:21:1::0;19799:2;19779:18;;;19772:30;-1:-1:-1;;;19818:18:1;;;19811:44;19872:18;;17377:53:0::1;19558:338:1::0;17377:53:0::1;17453:12;:20:::0;17308:173::o;23799:293::-;23871:10;;-1:-1:-1;;;;;23871:10:0;478;-1:-1:-1;;;;;23855:26:0;;23847:53;;;;-1:-1:-1;;;23847:53:0;;;;;;;:::i;:::-;23940:21;23980:22;23972:53;;;;-1:-1:-1;;;23972:53:0;;20103:2:1;23972:53:0;;;20085:21:1;20142:2;20122:18;;;20115:30;-1:-1:-1;;;20161:18:1;;;20154:48;20219:18;;23972:53:0;19901:342:1;23972:53:0;24044:10;;24036:48;;-1:-1:-1;;;;;24044:10:0;;;;24036:48;;;;;24065:18;;24044:10;24036:48;24044:10;24036:48;24065:18;24044:10;24036:48;;;;;;;;;;;;;;;;;;;9111:327;-1:-1:-1;;;;;9204:19:0;;9196:64;;;;-1:-1:-1;;;9196:64:0;;20450:2:1;9196:64:0;;;20432:21:1;;;20469:18;;;20462:30;20528:34;20508:18;;;20501:62;20580:18;;9196:64:0;20248:356:1;9196:64:0;-1:-1:-1;;;;;9279:21:0;;9271:64;;;;-1:-1:-1;;;9271:64:0;;20811:2:1;9271:64:0;;;20793:21:1;20850:2;20830:18;;;20823:30;20889:32;20869:18;;;20862:60;20939:18;;9271:64:0;20609:354:1;9271:64:0;-1:-1:-1;;;;;9346:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9398:32;;1630:25:1;;;9398:32:0;;1603:18:1;9398:32:0;;;;;;;9111:327;;;:::o;1987:132::-;2045:7;2072:39;2076:1;2079;2072:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2065:46;1987:132;-1:-1:-1;;;1987:132:0:o;14142:293::-;14215:1;14206:6;:10;14198:46;;;;-1:-1:-1;;;14198:46:0;;21170:2:1;14198:46:0;;;21152:21:1;21209:2;21189:18;;;21182:30;21248:25;21228:18;;;21221:53;21291:18;;14198:46:0;20968:347:1;14198:46:0;14300:4;14282:24;;;;:9;:24;;;;;;:36;;14311:6;14282:28;:36::i;:::-;14273:4;14255:24;;;;:9;:24;;;;;:63;;;;4578:42;14347:15;;;;:27;;14367:6;14347:19;:27::i;:::-;4578:42;14329:15;;;;:9;:15;;;:45;;;;:15;14390:37;14407:4;;-1:-1:-1;;;;;;;;;;;14390:37:0;;;14420:6;1630:25:1;;1618:2;1603:18;;1484:177;14390:37:0;;;;;;;;14142:293;:::o;9496:2889::-;-1:-1:-1;;;;;9584:18:0;;9576:64;;;;-1:-1:-1;;;9576:64:0;;21522:2:1;9576:64:0;;;21504:21:1;21561:2;21541:18;;;21534:30;21600:34;21580:18;;;21573:62;-1:-1:-1;;;21651:18:1;;;21644:31;21692:19;;9576:64:0;21320:397:1;9576:64:0;-1:-1:-1;;;;;9659:16:0;;9651:60;;;;-1:-1:-1;;;9651:60:0;;21924:2:1;9651:60:0;;;21906:21:1;21963:2;21943:18;;;21936:30;22002:33;21982:18;;;21975:61;22053:18;;9651:60:0;21722:355:1;9651:60:0;9739:1;9730:6;:10;9722:50;;;;-1:-1:-1;;;9722:50:0;;22284:2:1;9722:50:0;;;22266:21:1;22323:2;22303:18;;;22296:30;22362:29;22342:18;;;22335:57;22409:18;;9722:50:0;22082:351:1;9722:50:0;-1:-1:-1;;;;;9792:23:0;;;;;;:17;:23;;;;;;;;9791:24;9783:62;;;;-1:-1:-1;;;9783:62:0;;22640:2:1;9783:62:0;;;22622:21:1;22679:2;22659:18;;;22652:30;22718:27;22698:18;;;22691:55;22763:18;;9783:62:0;22438:349:1;9783:62:0;-1:-1:-1;;;;;9865:21:0;;;;;;:17;:21;;;;;;;;9864:22;9856:63;;;;-1:-1:-1;;;9856:63:0;;22994:2:1;9856:63:0;;;22976:21:1;23033:2;23013:18;;;23006:30;23072;23052:18;;;23045:58;23120:18;;9856:63:0;22792:352:1;9856:63:0;2679:7;2706:6;-1:-1:-1;;;;;9977:15:0;;;2706:6;;9977:15;;;;:32;;-1:-1:-1;2679:7:0;2706:6;-1:-1:-1;;;;;9996:13:0;;;2706:6;;9996:13;;9977:32;:57;;;;-1:-1:-1;;;;;;10013:21:0;;10029:4;10013:21;;9977:57;:80;;;;-1:-1:-1;;;;;;10038:19:0;;10052:4;10038:19;;9977:80;9973:157;;;10082:11;;-1:-1:-1;;;10082:11:0;;;;10074:44;;;;-1:-1:-1;;;10074:44:0;;23351:2:1;10074:44:0;;;23333:21:1;23390:2;23370:18;;;23363:30;-1:-1:-1;;;23409:18:1;;;23402:50;23469:18;;10074:44:0;23149:344:1;10074:44:0;10150:17;2706:6;;-1:-1:-1;;;;;10223:15:0;;;2706:6;;10223:15;;;;:32;;-1:-1:-1;2679:7:0;2706:6;-1:-1:-1;;;;;10242:13:0;;;2706:6;;10242:13;;10223:32;10219:1680;;;-1:-1:-1;;;;;10281:10:0;;;;;;:4;:10;;;;;;;;10280:11;:24;;;;-1:-1:-1;;;;;;10296:8:0;;;;;;:4;:8;;;;;;;;10295:9;10280:24;10272:49;;;;-1:-1:-1;;;10272:49:0;;23700:2:1;10272:49:0;;;23682:21:1;23739:2;23719:18;;;23712:30;-1:-1:-1;;;23758:18:1;;;23751:42;23810:18;;10272:49:0;23498:336:1;10272:49:0;-1:-1:-1;;;;;10428:26:0;;;;;;:20;:26;;;;;;;;10427:27;:56;;;;-1:-1:-1;;;;;;10459:24:0;;;;;;:20;:24;;;;;;;;10458:25;10427:56;10423:162;;;10522:12;;10512:6;:22;;10504:65;;;;-1:-1:-1;;;10504:65:0;;24041:2:1;10504:65:0;;;24023:21:1;24080:2;24060:18;;;24053:30;24119:32;24099:18;;;24092:60;24169:18;;10504:65:0;23839:354:1;10504:65:0;10654:13;;-1:-1:-1;;;;;10646:21:0;;;10654:13;;10646:21;:55;;;;-1:-1:-1;10685:15:0;;-1:-1:-1;;;;;10671:30:0;;;10685:15;;10671:30;;10646:55;:82;;;;-1:-1:-1;;;;;;10706:22:0;;;;;;:18;:22;;;;;;;;10705:23;10646:82;10642:257;;;10783:14;;10773:6;10757:13;10767:2;10757:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;10749:76;;;;-1:-1:-1;;;10749:76:0;;24530:2:1;10749:76:0;;;24512:21:1;24569:2;24549:18;;;24542:30;24608:25;24588:18;;;24581:53;24651:18;;10749:76:0;24328:347:1;10749:76:0;10856:27;10879:3;10856:18;10867:6;;10856;:10;;:18;;;;:::i;:27::-;10844:39;;10642:257;10967:13;;-1:-1:-1;;;;;10961:19:0;;;10967:13;;10961:19;:44;;;;-1:-1:-1;;;;;;10984:21:0;;11000:4;10984:21;;10961:44;:73;;;;-1:-1:-1;;;;;;11010:24:0;;;;;;:18;:24;;;;;;;;11009:25;10961:73;10957:154;;;11067:28;11091:3;11067:19;11078:7;;11067:6;:10;;:19;;;;:::i;:28::-;11055:40;;10957:154;11206:28;11237:24;11255:4;11237:9;:24::i;:::-;11281:6;;11206:55;;-1:-1:-1;;;;11281:6:0;;;;11280:7;:30;;;;-1:-1:-1;11297:13:0;;-1:-1:-1;;;;;11291:19:0;;;11297:13;;11291:19;11280:30;:45;;;;-1:-1:-1;11314:11:0;;-1:-1:-1;;;11314:11:0;;;;11280:45;:90;;;;;11353:17;;11329:20;:41;;11280:90;11276:612;;;11410:13;;11395:12;:28;11391:90;;;11460:1;11448:9;:13;11391:90;11519:1;11507:9;;:13;11499:49;;;;-1:-1:-1;;;11499:49:0;;24882:2:1;11499:49:0;;;24864:21:1;24921:2;24901:18;;;24894:30;24960:25;24940:18;;;24933:53;25003:18;;11499:49:0;24680:347:1;11499:49:0;11585:23;11611:51;11615:6;11623:38;11627:20;11649:11;;11623:3;:38::i;:::-;11611:3;:51::i;:::-;11585:77;-1:-1:-1;11685:19:0;;11681:97;;11729:29;11742:15;11729:12;:29::i;:::-;11814:9;:11;;;:9;:11;;;:::i;:::-;;;;-1:-1:-1;;11860:12:0;11844:13;:28;-1:-1:-1;11276:612:0;10257:1642;10219:1680;11945:13;;11941:172;;12020:4;12002:24;;;;:9;:24;;;;;;:39;;12031:9;12002:28;:39::i;:::-;11993:4;11975:24;;;;:9;:24;;;;;;;:66;;;;12061:40;;-1:-1:-1;;;;;12061:40:0;;;-1:-1:-1;;;;;;;;;;;12061:40:0;;;12091:9;1630:25:1;;1618:2;1603:18;;1484:177;12061:40:0;;;;;;;;11941:172;12165:22;12190:21;:6;12201:9;12190:10;:21::i;:::-;-1:-1:-1;;;;;12240:15:0;;;;;;:9;:15;;;;;;12165:46;;-1:-1:-1;12240:27:0;;12260:6;12240:19;:27::i;:::-;-1:-1:-1;;;;;12222:15:0;;;;;;;:9;:15;;;;;;:45;;;;12294:13;;;;;;;:33;;12312:14;12294:17;:33::i;:::-;-1:-1:-1;;;;;12278:13:0;;;;;;;:9;:13;;;;;;;:49;;;;12343:34;;;;;;-1:-1:-1;;;;;;;;;;;12343:34:0;;;12362:14;1630:25:1;;1618:2;1603:18;;1484:177;12343:34:0;;;;;;;;9565:2820;;9496:2889;;;:::o;1535:190::-;1621:7;1657:12;1649:6;;;;1641:29;;;;-1:-1:-1;;;1641:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1681:9:0;1693:5;1697:1;1693;:5;:::i;:::-;1681:17;1535:190;-1:-1:-1;;;;;1535:190:0:o;12393:105::-;12450:7;12481:1;12477;:5;:13;;12489:1;12477:13;;;-1:-1:-1;12485:1:0;;12393:105;-1:-1:-1;12393:105:0:o;12577:1553::-;6354:6;:13;;-1:-1:-1;;;;6354:13:0;-1:-1:-1;;;6354:13:0;;;12659:15;12651:48:::1;;;::::0;-1:-1:-1;;;12651:48:0;;25507:2:1;12651:48:0::1;::::0;::::1;25489:21:1::0;25546:2;25526:18;;;25519:30;-1:-1:-1;;;25565:18:1;;;25558:50;25625:18;;12651:48:0::1;25305:344:1::0;12651:48:0::1;12720:19;12742:24;12760:4;12742:9;:24::i;:::-;12720:46;;12800:11;12785;:26;;12777:68;;;::::0;-1:-1:-1;;;12777:68:0;;25856:2:1;12777:68:0::1;::::0;::::1;25838:21:1::0;25895:2;25875:18;;;25868:30;25934:31;25914:18;;;25907:59;25983:18;;12777:68:0::1;25654:353:1::0;12777:68:0::1;12920:34;12948:5;;12920:23;12935:7;;12920:10;;:14;;:23;;;;:::i;:34::-;12958:5;12920:43;12912:74;;;::::0;-1:-1:-1;;;12912:74:0;;26214:2:1;12912:74:0::1;::::0;::::1;26196:21:1::0;26253:2;26233:18;;;26226:30;-1:-1:-1;;;26272:18:1;;;26265:48;26330:18;;12912:74:0::1;26012:342:1::0;12912:74:0::1;13040:20;13063:35;13092:5;13063:24;13079:7;;13063:11;:15;;:24;;;;:::i;:35::-;13040:58:::0;-1:-1:-1;13113:16:0;;13109:74:::1;;13146:25;13158:12;13146:11;:25::i;:::-;13203:17;13223:29;:11:::0;13239:12;13223:15:::1;:29::i;:::-;13203:49;;13267:9;13280:1;13267:14:::0;13263:27:::1;;13283:7;;;;;13263:27;13376:25;13404:21;13419:5;;13404:10;;:14;;:21;;;;:::i;:::-;13376:49;;13464:1;13444:17;:21;13436:62;;;::::0;-1:-1:-1;;;13436:62:0;;26561:2:1;13436:62:0::1;::::0;::::1;26543:21:1::0;26600:2;26580:18;;;26573:30;26639;26619:18;;;26612:58;26687:18;;13436:62:0::1;26359:352:1::0;13436:62:0::1;13519:24;13546:48;13576:17;13546:25;13560:10;;13546:9;:13;;:25;;;;:::i;:48::-;13519:75:::0;-1:-1:-1;13605:19:0::1;13627:31;:9:::0;13519:75;13627:13:::1;:31::i;:::-;13605:53:::0;-1:-1:-1;13753:20:0;;13749:214:::1;;13790:21;13814:35;13832:16;13814:17;:35::i;:::-;13790:59:::0;-1:-1:-1;13868:17:0;;13864:88:::1;;13906:30;13922:13;13906:15;:30::i;:::-;13775:188;13749:214;14056:15:::0;;14052:71:::1;;14088:23;14099:11;14088:10;:23::i;:::-;12640:1490;;;;;;6378:1;-1:-1:-1::0;6390:6:0;:14;;-1:-1:-1;;;;6390:14:0;;;12577:1553::o;1204:179::-;1262:7;;1294:5;1298:1;1294;:5;:::i;:::-;1282:17;;1323:1;1318;:6;;1310:46;;;;-1:-1:-1;;;1310:46:0;;26918:2:1;1310:46:0;;;26900:21:1;26957:2;26937:18;;;26930:30;26996:29;26976:18;;;26969:57;27043:18;;1310:46:0;26716:351:1;1733:246:0;1791:7;1815:1;1820;1815:6;1811:47;;-1:-1:-1;1845:1:0;1838:8;;1811:47;1868:9;1880:5;1884:1;1880;:5;:::i;:::-;1868:17;-1:-1:-1;1913:1:0;1904:5;1908:1;1868:17;1904:5;:::i;:::-;:10;1896:56;;;;-1:-1:-1;;;1896:56:0;;27496:2:1;1896:56:0;;;27478:21:1;27535:2;27515:18;;;27508:30;27574:34;27554:18;;;27547:62;-1:-1:-1;;;27625:18:1;;;27618:31;27666:19;;1896:56:0;27294:397:1;1391:136:0;1449:7;1476:43;1480:1;1483;1476:43;;;;;;;;;;;;;;;;;:3;:43::i;15236:850::-;15319:1;15307:9;:13;15299:48;;;;-1:-1:-1;;;15299:48:0;;18123:2:1;15299:48:0;;;18105:21:1;18162:2;18142:18;;;18135:30;-1:-1:-1;;;18181:18:1;;;18174:52;18243:18;;15299:48:0;17921:346:1;15299:48:0;15379:21;15366:9;:34;;15358:71;;;;-1:-1:-1;;;15358:71:0;;27898:2:1;15358:71:0;;;27880:21:1;27937:2;27917:18;;;27910:30;27976:26;27956:18;;;27949:54;28020:18;;15358:71:0;27696:348:1;15358:71:0;15474:16;;;15488:1;15474:16;;;;;;;;15450:21;;15474:16;;;;;;;;-1:-1:-1;;15511:15:0;;:22;;;-1:-1:-1;;;15511:22:0;;;;15450:40;;-1:-1:-1;;;;;;15511:15:0;;;;:20;;-1:-1:-1;15511:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15501:4;15506:1;15501:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;15501:32:0;;;-1:-1:-1;;;;;15501:32:0;;;;;15562:4;15544;15549:1;15544:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15544:23:0;;;-1:-1:-1;;;;;15544:23:0;;;;;15588:27;15618:15;4578:42;15618:9;:15::i;:::-;15658;;:179;;-1:-1:-1;;;15658:179:0;;15588:45;;-1:-1:-1;;;;;;15658:15:0;;:66;;15732:9;;15658:179;;:15;;15773:4;;4578:42;;15811:15;;15658:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15654:425;;;15853:20;15876:40;15896:19;15876:15;4578:42;15876:9;:15::i;:40::-;15936;;;12385:25:1;;;12441:2;12426:18;;12419:34;;;15853:63:0;;-1:-1:-1;15936:40:0;;12358:18:1;15936:40:0;;;;;;;15838:150;15288:798;;15236:850;:::o;2127:189::-;2213:7;2248:12;2241:5;2233:28;;;;-1:-1:-1;;;2233:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2272:9:0;2284:5;2288:1;2284;:5;:::i;14447:777::-;14512:7;14554:1;14540:11;:15;14532:52;;;;-1:-1:-1;;;14532:52:0;;;;;;;:::i;:::-;14699:16;;;14713:1;14699:16;;;;;;;;14633:21;;14605:25;;14699:16;14713:1;14699:16;;;;;;;;;;-1:-1:-1;14699:16:0;14675:40;;14744:4;14726;14731:1;14726:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14726:23:0;;;:7;;;;;;;;;;:23;;;;14770:15;;:22;;;-1:-1:-1;;;14770:22:0;;;;:15;;;;;:20;;:22;;;;;14726:7;;14770:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14760:4;14765:1;14760:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14760:32:0;;;:7;;;;;;;;;:32;14845:15;;14813:62;;14830:4;;14845:15;14863:11;14813:8;:62::i;:::-;14900:15;;:196;;-1:-1:-1;;;14900:196:0;;-1:-1:-1;;;;;14900:15:0;;;;:66;;:196;;14981:11;;14900:15;;15023:4;;15050;;15070:15;;14900:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14896:321;;-1:-1:-1;15204:1:0;;14447:777;-1:-1:-1;;;14447:777:0:o;14896:321::-;15119:44;:21;15145:17;15119:25;:44::i;:::-;15112:51;14447:777;-1:-1:-1;;;;14447:777:0:o;16098:982::-;16180:1;16166:11;:15;16158:52;;;;-1:-1:-1;;;16158:52:0;;;;;;;:::i;:::-;16261:20;16284:18;:11;16300:1;16284:15;:18::i;:::-;16261:41;-1:-1:-1;16313:26:0;16342:29;:11;16261:41;16342:15;:29::i;:::-;16313:58;;16392:19;16414:31;16432:12;16414:17;:31::i;:::-;16392:53;;16484:1;16470:11;:15;:41;;;;;16510:1;16489:18;:22;16470:41;16466:607;;;16560:15;;16528:69;;16545:4;;-1:-1:-1;;;;;16560:15:0;16578:18;16528:8;:69::i;:::-;16630:15;;:267;;-1:-1:-1;;;16630:267:0;;-1:-1:-1;;;;;16630:15:0;;;;:31;;16669:11;;16630:267;;16708:4;;16732:18;;16630:15;;;;4578:42;;16867:15;;16630:267;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16630:267:0;;;;;;;;-1:-1:-1;;16630:267:0;;;;;;;;;;;;:::i;:::-;;;16626:436;;;;;;16147:933;;;16098:982;:::o;222:418:1:-;371:2;360:9;353:21;334:4;403:6;397:13;446:6;441:2;430:9;426:18;419:34;505:6;500:2;492:6;488:15;483:2;472:9;468:18;462:50;561:1;556:2;547:6;536:9;532:22;528:31;521:42;631:2;624;620:7;615:2;607:6;603:15;599:29;588:9;584:45;580:54;572:62;;;222:418;;;;:::o;645:131::-;-1:-1:-1;;;;;720:31:1;;710:42;;700:70;;766:1;763;756:12;781:134;849:20;;878:31;849:20;878:31;:::i;:::-;781:134;;;:::o;920:367::-;988:6;996;1049:2;1037:9;1028:7;1024:23;1020:32;1017:52;;;1065:1;1062;1055:12;1017:52;1104:9;1091:23;1123:31;1148:5;1123:31;:::i;:::-;1173:5;1251:2;1236:18;;;;1223:32;;-1:-1:-1;;;920:367:1:o;2368:226::-;2427:6;2480:2;2468:9;2459:7;2455:23;2451:32;2448:52;;;2496:1;2493;2486:12;2448:52;-1:-1:-1;2541:23:1;;2368:226;-1:-1:-1;2368:226:1:o;2599:508::-;2676:6;2684;2692;2745:2;2733:9;2724:7;2720:23;2716:32;2713:52;;;2761:1;2758;2751:12;2713:52;2800:9;2787:23;2819:31;2844:5;2819:31;:::i;:::-;2869:5;-1:-1:-1;2926:2:1;2911:18;;2898:32;2939:33;2898:32;2939:33;:::i;:::-;2599:508;;2991:7;;-1:-1:-1;;;3071:2:1;3056:18;;;;3043:32;;2599:508::o;3717:127::-;3778:10;3773:3;3769:20;3766:1;3759:31;3809:4;3806:1;3799:15;3833:4;3830:1;3823:15;3849:1127;3933:6;3986:2;3974:9;3965:7;3961:23;3957:32;3954:52;;;4002:1;3999;3992:12;3954:52;4042:9;4029:23;4075:18;4067:6;4064:30;4061:50;;;4107:1;4104;4097:12;4061:50;4130:22;;4183:4;4175:13;;4171:27;-1:-1:-1;4161:55:1;;4212:1;4209;4202:12;4161:55;4252:2;4239:16;4278:18;4270:6;4267:30;4264:56;;;4300:18;;:::i;:::-;4346:6;4343:1;4339:14;4382:2;4376:9;4445:2;4441:7;4436:2;4432;4428:11;4424:25;4416:6;4412:38;4516:6;4504:10;4501:22;4480:18;4468:10;4465:34;4462:62;4459:88;;;4527:18;;:::i;:::-;4563:2;4556:22;4613;;;4663:2;4693:11;;;4689:20;;;4613:22;4651:15;;4721:19;;;4718:39;;;4753:1;4750;4743:12;4718:39;4785:2;4781;4777:11;4766:22;;4797:148;4813:6;4808:3;4805:15;4797:148;;;4879:23;4898:3;4879:23;:::i;:::-;4867:36;;4932:2;4830:12;;;;4923;4797:148;;;-1:-1:-1;4964:6:1;3849:1127;-1:-1:-1;;;;;;3849:1127:1:o;4981:247::-;5040:6;5093:2;5081:9;5072:7;5068:23;5064:32;5061:52;;;5109:1;5106;5099:12;5061:52;5148:9;5135:23;5167:31;5192:5;5167:31;:::i;5233:346::-;5301:6;5309;5362:2;5350:9;5341:7;5337:23;5333:32;5330:52;;;5378:1;5375;5368:12;5330:52;-1:-1:-1;;5423:23:1;;;5543:2;5528:18;;;5515:32;;-1:-1:-1;5233:346:1:o;5584:466::-;5661:6;5669;5677;5730:2;5718:9;5709:7;5705:23;5701:32;5698:52;;;5746:1;5743;5736:12;5698:52;-1:-1:-1;;5791:23:1;;;5911:2;5896:18;;5883:32;;-1:-1:-1;6014:2:1;5999:18;;;5986:32;;5584:466;-1:-1:-1;5584:466:1:o;6451:118::-;6537:5;6530:13;6523:21;6516:5;6513:32;6503:60;;6559:1;6556;6549:12;6574:382;6639:6;6647;6700:2;6688:9;6679:7;6675:23;6671:32;6668:52;;;6716:1;6713;6706:12;6668:52;6755:9;6742:23;6774:31;6799:5;6774:31;:::i;:::-;6824:5;-1:-1:-1;6881:2:1;6866:18;;6853:32;6894:30;6853:32;6894:30;:::i;:::-;6943:7;6933:17;;;6574:382;;;;;:::o;6961:388::-;7029:6;7037;7090:2;7078:9;7069:7;7065:23;7061:32;7058:52;;;7106:1;7103;7096:12;7058:52;7145:9;7132:23;7164:31;7189:5;7164:31;:::i;:::-;7214:5;-1:-1:-1;7271:2:1;7256:18;;7243:32;7284:33;7243:32;7284:33;:::i;7354:127::-;7415:10;7410:3;7406:20;7403:1;7396:31;7446:4;7443:1;7436:15;7470:4;7467:1;7460:15;7486:375;7574:1;7592:5;7606:249;7627:1;7617:8;7614:15;7606:249;;;7677:4;7672:3;7668:14;7662:4;7659:24;7656:50;;;7686:18;;:::i;:::-;7736:1;7726:8;7722:16;7719:49;;;7750:16;;;;7719:49;7833:1;7829:16;;;;;7789:15;;7606:249;;;7486:375;;;;;;:::o;7866:902::-;7915:5;7945:8;7935:80;;-1:-1:-1;7986:1:1;8000:5;;7935:80;8034:4;8024:76;;-1:-1:-1;8071:1:1;8085:5;;8024:76;8116:4;8134:1;8129:59;;;;8202:1;8197:174;;;;8109:262;;8129:59;8159:1;8150:10;;8173:5;;;8197:174;8234:3;8224:8;8221:17;8218:43;;;8241:18;;:::i;:::-;-1:-1:-1;;8297:1:1;8283:16;;8356:5;;8109:262;;8455:2;8445:8;8442:16;8436:3;8430:4;8427:13;8423:36;8417:2;8407:8;8404:16;8399:2;8393:4;8390:12;8386:35;8383:77;8380:203;;;-1:-1:-1;8492:19:1;;;8568:5;;8380:203;8615:42;-1:-1:-1;;8640:8:1;8634:4;8615:42;:::i;:::-;8693:6;8689:1;8685:6;8681:19;8672:7;8669:32;8666:58;;;8704:18;;:::i;:::-;8742:20;;7866:902;-1:-1:-1;;;7866:902:1:o;8773:140::-;8831:5;8860:47;8901:4;8891:8;8887:19;8881:4;8860:47;:::i;8918:168::-;8991:9;;;9022;;9039:15;;;9033:22;;9019:37;9009:71;;9060:18;;:::i;9091:338::-;9293:2;9275:21;;;9332:2;9312:18;;;9305:30;-1:-1:-1;;;9366:2:1;9351:18;;9344:44;9420:2;9405:18;;9091:338::o;9782:348::-;9984:2;9966:21;;;10023:2;10003:18;;;9996:30;10062:26;10057:2;10042:18;;10035:54;10121:2;10106:18;;9782:348::o;10135:356::-;10337:2;10319:21;;;10356:18;;;10349:30;10415:34;10410:2;10395:18;;10388:62;10482:2;10467:18;;10135:356::o;10496:127::-;10557:10;10552:3;10548:20;10545:1;10538:31;10588:4;10585:1;10578:15;10612:4;10609:1;10602:15;11267:245;11334:6;11387:2;11375:9;11366:7;11362:23;11358:32;11355:52;;;11403:1;11400;11393:12;11355:52;11435:9;11429:16;11454:28;11476:5;11454:28;:::i;14253:251::-;14323:6;14376:2;14364:9;14355:7;14351:23;14347:32;14344:52;;;14392:1;14389;14382:12;14344:52;14424:9;14418:16;14443:31;14468:5;14443:31;:::i;15163:603::-;-1:-1:-1;;;;;15484:32:1;;;15466:51;;15548:2;15533:18;;15526:34;;;;15591:2;15576:18;;15569:34;;;;15634:2;15619:18;;15612:34;;;;15683:32;;;15677:3;15662:19;;15655:61;15504:3;15732:19;;15725:35;;;;15453:3;15438:19;;15163:603::o;15771:456::-;15859:6;15867;15875;15928:2;15916:9;15907:7;15903:23;15899:32;15896:52;;;15944:1;15941;15934:12;15896:52;-1:-1:-1;;15989:16:1;;16095:2;16080:18;;16074:25;16191:2;16176:18;;;16170:25;15989:16;;16074:25;;-1:-1:-1;16170:25:1;15771:456;-1:-1:-1;15771:456:1:o;18626:230::-;18696:6;18749:2;18737:9;18728:7;18724:23;18720:32;18717:52;;;18765:1;18762;18755:12;18717:52;-1:-1:-1;18810:16:1;;18626:230;-1:-1:-1;18626:230:1:o;24198:125::-;24263:9;;;24284:10;;;24281:36;;;24297:18;;:::i;25032:135::-;25071:3;25092:17;;;25089:43;;25112:18;;:::i;:::-;-1:-1:-1;25159:1:1;25148:13;;25032:135::o;25172:128::-;25239:9;;;25260:11;;;25257:37;;;25274:18;;:::i;27072:217::-;27112:1;27138;27128:132;;27182:10;27177:3;27173:20;27170:1;27163:31;27217:4;27214:1;27207:15;27245:4;27242:1;27235:15;27128:132;-1:-1:-1;27274:9:1;;27072:217::o;28049:446::-;28102:3;28140:5;28134:12;28167:6;28162:3;28155:19;28199:4;28194:3;28190:14;28183:21;;28238:4;28231:5;28227:16;28261:1;28271:199;28285:6;28282:1;28279:13;28271:199;;;28350:13;;-1:-1:-1;;;;;28346:39:1;28334:52;;28415:4;28406:14;;;;28443:17;;;;28382:1;28300:9;28271:199;;;-1:-1:-1;28486:3:1;;28049:446;-1:-1:-1;;;;28049:446:1:o;28500:510::-;28771:6;28760:9;28753:25;28814:3;28809:2;28798:9;28794:18;28787:31;28734:4;28835:57;28887:3;28876:9;28872:19;28864:6;28835:57;:::i;:::-;-1:-1:-1;;;;;28928:32:1;;;;28923:2;28908:18;;28901:60;-1:-1:-1;28992:2:1;28977:18;28970:34;28827:65;28500:510;-1:-1:-1;;28500:510:1:o;29015:582::-;29314:6;29303:9;29296:25;29357:6;29352:2;29341:9;29337:18;29330:34;29400:3;29395:2;29384:9;29380:18;29373:31;29277:4;29421:57;29473:3;29462:9;29458:19;29450:6;29421:57;:::i;:::-;-1:-1:-1;;;;;29514:32:1;;;;29509:2;29494:18;;29487:60;-1:-1:-1;29578:3:1;29563:19;29556:35;29413:65;29015:582;-1:-1:-1;;;29015:582:1:o

Swarm Source

ipfs://53ebdaad6eeb1d47689b9761004be1ce41b323e15e140223ee5fb835623ef34e

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.