ETH Price: $3,059.27 (+1.82%)
Gas: 3 Gwei

Contract

0xf4A509313437dfC64E2EFeD14e2b607B1AED30c5
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve202115392024-07-01 12:02:118 days ago1719835331IN
0xf4A50931...B1AED30c5
0 ETH0.000335527.19956357
Transfer201677512024-06-25 9:18:1114 days ago1719307091IN
0xf4A50931...B1AED30c5
0 ETH0.00038644.73617892
Transfer201671662024-06-25 7:20:3514 days ago1719300035IN
0xf4A50931...B1AED30c5
0 ETH0.000386954.74296503
Transfer201671542024-06-25 7:18:1114 days ago1719299891IN
0xf4A50931...B1AED30c5
0 ETH0.000360014.41276924
Transfer201671502024-06-25 7:17:2314 days ago1719299843IN
0xf4A50931...B1AED30c5
0 ETH0.000447024.5304153
Transfer201671442024-06-25 7:16:1114 days ago1719299771IN
0xf4A50931...B1AED30c5
0 ETH0.000467564.73800214
Approve200148342024-06-04 0:20:2335 days ago1717460423IN
0xf4A50931...B1AED30c5
0 ETH0.000281066.07154939
Approve196197742024-04-09 18:08:5991 days ago1712686139IN
0xf4A50931...B1AED30c5
0 ETH0.0012835427.57710568
Approve196033252024-04-07 10:49:1193 days ago1712486951IN
0xf4A50931...B1AED30c5
0 ETH0.0005362411.5063114
Transfer195592722024-04-01 6:41:2399 days ago1711953683IN
0xf4A50931...B1AED30c5
0 ETH0.0018261619.44613358
Approve195592502024-04-01 6:36:5999 days ago1711953419IN
0xf4A50931...B1AED30c5
0 ETH0.0013453628.86793479
Transfer195590672024-04-01 5:59:1199 days ago1711951151IN
0xf4A50931...B1AED30c5
0 ETH0.0023082530.05181837
Transfer194945592024-03-23 3:15:11108 days ago1711163711IN
0xf4A50931...B1AED30c5
0 ETH0.0012493315.32007392
Approve194935062024-03-22 23:42:59108 days ago1711150979IN
0xf4A50931...B1AED30c5
0 ETH0.0008656618.59893285
Approve194851572024-03-21 19:38:23109 days ago1711049903IN
0xf4A50931...B1AED30c5
0 ETH0.0017320337.212943
Approve194747442024-03-20 8:31:47111 days ago1710923507IN
0xf4A50931...B1AED30c5
0 ETH0.0017387837.35797426
Transfer194747242024-03-20 8:27:47111 days ago1710923267IN
0xf4A50931...B1AED30c5
0 ETH0.0031038933.05639137
Approve194746182024-03-20 8:06:35111 days ago1710921995IN
0xf4A50931...B1AED30c5
0 ETH0.0015538233.38394833
Approve194714462024-03-19 21:23:59111 days ago1710883439IN
0xf4A50931...B1AED30c5
0 ETH0.001693936.39367007
Approve194624802024-03-18 15:10:47113 days ago1710774647IN
0xf4A50931...B1AED30c5
0 ETH0.0024144951.8755643
Approve194575622024-03-17 22:34:59113 days ago1710714899IN
0xf4A50931...B1AED30c5
0 ETH0.0016526135.50643448
Approve194566082024-03-17 19:21:11114 days ago1710703271IN
0xf4A50931...B1AED30c5
0 ETH0.0015267132.80161364
Approve194447182024-03-16 3:12:35115 days ago1710558755IN
0xf4A50931...B1AED30c5
0 ETH0.0016827936.15486044
Set Swap Setting...194416972024-03-15 17:00:47116 days ago1710522047IN
0xf4A50931...B1AED30c5
0 ETH0.0022948655.64260533
Approve194416272024-03-15 16:46:47116 days ago1710521207IN
0xf4A50931...B1AED30c5
0 ETH0.0020706644.48836463
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
202115412024-07-01 12:02:358 days ago1719835355
0xf4A50931...B1AED30c5
0.00669819 ETH
202115412024-07-01 12:02:358 days ago1719835355
0xf4A50931...B1AED30c5
0.00000087 ETH
202115412024-07-01 12:02:358 days ago1719835355
0xf4A50931...B1AED30c5
0.00047838 ETH
202115412024-07-01 12:02:358 days ago1719835355
0xf4A50931...B1AED30c5
0.0071757 ETH
201491932024-06-22 19:00:5917 days ago1719082859
0xf4A50931...B1AED30c5
0.00856085 ETH
201491932024-06-22 19:00:5917 days ago1719082859
0xf4A50931...B1AED30c5
0.00000149 ETH
201491932024-06-22 19:00:5917 days ago1719082859
0xf4A50931...B1AED30c5
0.00061138 ETH
201491932024-06-22 19:00:5917 days ago1719082859
0xf4A50931...B1AED30c5
0.00917073 ETH
199583462024-05-27 2:53:1143 days ago1716778391
0xf4A50931...B1AED30c5
0.01196674 ETH
199583462024-05-27 2:53:1143 days ago1716778391
0xf4A50931...B1AED30c5
0.00000294 ETH
199583462024-05-27 2:53:1143 days ago1716778391
0xf4A50931...B1AED30c5
0.00085455 ETH
199583462024-05-27 2:53:1143 days ago1716778391
0xf4A50931...B1AED30c5
0.01281835 ETH
199467572024-05-25 12:01:2345 days ago1716638483
0xf4A50931...B1AED30c5
0.01144567 ETH
199467572024-05-25 12:01:2345 days ago1716638483
0xf4A50931...B1AED30c5
0.0000027 ETH
199467572024-05-25 12:01:2345 days ago1716638483
0xf4A50931...B1AED30c5
0.00081735 ETH
199467572024-05-25 12:01:2345 days ago1716638483
0xf4A50931...B1AED30c5
0.01226032 ETH
197901612024-05-03 14:23:5967 days ago1714746239
0xf4A50931...B1AED30c5
0.01607663 ETH
197901612024-05-03 14:23:5967 days ago1714746239
0xf4A50931...B1AED30c5
0.00000514 ETH
197901612024-05-03 14:23:5967 days ago1714746239
0xf4A50931...B1AED30c5
0.00114796 ETH
197901612024-05-03 14:23:5967 days ago1714746239
0xf4A50931...B1AED30c5
0.01721945 ETH
195600542024-04-01 9:21:2399 days ago1711963283
0xf4A50931...B1AED30c5
0.02174701 ETH
195600542024-04-01 9:21:2399 days ago1711963283
0xf4A50931...B1AED30c5
0.00000885 ETH
195600542024-04-01 9:21:2399 days ago1711963283
0xf4A50931...B1AED30c5
0.00155272 ETH
195600542024-04-01 9:21:2399 days ago1711963283
0xf4A50931...B1AED30c5
0.02329087 ETH
194919352024-03-22 18:25:35109 days ago1711131935
0xf4A50931...B1AED30c5
0.02856864 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FETECH

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-12
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    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);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface Initializer {
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
}

contract FETECH is IERC20 {
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "FE TECH";
    string constant private _symbol = "FETS";
    uint8 constant private _decimals = 18;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 development;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({
        buyFee: 300,
        sellFee: 300,
        transferFee: 0
    });

    Ratios public _ratios = Ratios({
        liquidity: 100,
        development: 500,
        totalSwap: 600
    });

    uint256 constant public maxBuyTaxes = 1000;
    uint256 constant public maxSellTaxes = 1000;
    uint256 constant public maxTransferTaxes = 1000;
    uint256 constant masterTaxDivisor = 10000;

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable public developmentWallet = payable(0xE916ce2131697de979C31929637d8d69Ea3ca160);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Initializer initializer;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;
        originalDeployer = msg.sender;

        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (balanceOf(_owner) > 0) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        require(tradingEnabled, "Cannot renounce until trading has been enabled.");
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

    address public originalDeployer;
    address public operator;

    // Function to set an operator to allow someone other the deployer to create things such as launchpads.
    // Only callable by original deployer.
    function setOperator(address newOperator) public {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        address oldOperator = operator;
        if (oldOperator != address(0)) {
            _liquidityHolders[oldOperator] = false;
            setExcludedFromFees(oldOperator, false);
        }
        operator = newOperator;
        _liquidityHolders[newOperator] = true;
        setExcludedFromFees(newOperator, true);
    }

    function renounceOriginalDeployer() external {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        setOperator(address(0));
        originalDeployer = address(0);
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    
    receive() external payable {}
    function totalSupply() external pure override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

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

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

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
            initializer.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.");
            }
            require(!lpPairs[pair], "Pair already added to list.");
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            initializer.setLpPair(pair, true);
        }
    }

    function setInitializer(address init) public onlyOwner {
        require(!tradingEnabled);
        require(init != address(this), "Can't be self.");
        initializer = Initializer(init);
        try initializer.getConfig() returns (address router, address constructorLP) {
            dexRouter = IRouter02(router); lpPair = constructorLP; lpPairs[lpPair] = true; 
            _approve(_owner, address(dexRouter), type(uint256).max);
            _approve(address(this), address(dexRouter), type(uint256).max);
        } catch { revert(); }
    }

    function isExcludedFromLimits(address account) external view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

    function setExcludedFromProtection(address account, bool enabled) external onlyOwner {
        _isExcludedFromProtection[account] = enabled;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

    function removeSniper(address account) external onlyOwner {
        initializer.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        initializer.setProtections(_antiSnipe, _antiBlock);
    }

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 liquidity, uint16 development) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.development = development;
        _ratios.totalSwap = liquidity + development;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable development) external onlyOwner {
        require(development != address(0), "Cannot be zero address.");
        developmentWallet = payable(development);
    }

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion);
        require(router != address(this) 
                && presale != address(this) 
                && lpPair != router 
                && lpPair != presale, "Just don't.");
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
        }
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this)
            && from != address(initializer)
            && to != address(initializer);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled
                   && !presaleAddresses[to]
                   && !presaleAddresses[from]
                ) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / ratios.totalSwap) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            try dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            ) {
                emit AutoLiquify(liquidityBalance, toLiquify);
            } catch {
                return;
            }
        }

        bool success;
        (success,) = developmentWallet.call{value: address(this).balance, gas: 55000}("");
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            if (address(initializer) == address(0)){
                initializer = Initializer(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(initializer) == address(0)){
            initializer = Initializer(address(this));
        }
        try initializer.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        try initializer.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        allowedPresaleExclusion = false;
        launchStamp = block.timestamp;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function sweepExternalTokens(address token) external onlyOwner {
        if (_hasLiqBeenAdded) {
            require(token != address(this), "Cannot sweep native tokens.");
        }
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (_hasLimits(from, to)) { bool checked;
            try initializer.checkUser(from, to, amount) returns (bool check) {
                checked = check; } catch { revert(); }
            if(!checked) { revert(); }
        }
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, amount, buy, sell) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(address from, uint256 amount, bool buy, bool sell) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(initializer) == address(this)
            && block.chainid != 97) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"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":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOriginalDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"init","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"development","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060028190556009805460ff1916600117905561012c608081905260a05260c052600a805465ffffffffffff1990811663012c012c178255610140604052606460e0526101f46101005261025861012052600b805465025801f400649216919091179055600e8054600161ff0160a01b03191673e916ce2131697de979c31929637d8d69ea3ca16017905560128181556013805461ffff19169055601580546001600160a01b031990811633908117909255601680549091169091179055620000c991620002e5565b620000d990633b9aca00620002fd565b601580546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200012d6012600a620002e5565b6200013d90633b9aca00620002fd565b60405190815260200160405180910390a3601580546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559554909416835260049091529020805490921617905562000317565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002275781600019048211156200020b576200020b620001d0565b808516156200021957918102915b93841c9390800290620001eb565b509250929050565b6000826200024057506001620002df565b816200024f57506000620002df565b8160018114620002685760028114620002735762000293565b6001915050620002df565b60ff841115620002875762000287620001d0565b50506001821b620002df565b5060208310610133831016604e8410600b8410161715620002b8575081810a620002df565b620002c48383620001e6565b8060001904821115620002db57620002db620001d0565b0290505b92915050565b6000620002f660ff8416836200022f565b9392505050565b8082028115828204841417620002df57620002df620001d0565b61421480620003276000396000f3fe60806040526004361061039b5760003560e01c8063590ffdce116101dc578063b1b08f7111610102578063cf847706116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610afb578063fb78680d14610b10578063fdb78c0e14610b30578063feadde9c14610b5157600080fd5b8063cf84770614610a44578063dd62ed3e14610a75578063eafb5a3c14610abb578063eb50e70e14610adb57600080fd5b8063b7df8b36116100dc578063b7df8b36146109ca578063bcd96a25146109e4578063bfc2fc3514610a04578063c04a541414610a2457600080fd5b8063b1b08f71146105f7578063b3ab15fb146109aa578063b3d514fb146105f757600080fd5b806380c581d11161017a5780638a8c523c116101495780638a8c523c1461092857806395d89b411461093d578063a9059cbb1461096a578063ab558e4d1461098a57600080fd5b806380c581d1146108b557806381cf58a9146108d5578063893d20e8146108f55780638a63bd9b1461091357600080fd5b80635cce86cd116101b65780635cce86cd1461081c57806370a0823114610855578063715018a61461088b57806378648edf146108a057600080fd5b8063590ffdce146107c65780635a6f0918146107e65780635c24b074146107fc57600080fd5b80632b28fc7a116102c1578063452ed4f11161025f5780634fb2e45d1161022e5780634fb2e45d1461072e5780634fbee1931461074e57806350a8e01614610787578063570ca735146107a657600080fd5b8063452ed4f1146106b45780634ada218b146106d45780634bbb93eb146106ee5780634e718e481461070e57600080fd5b806332cde6641161029b57806332cde6641461063f57806333251a0b1461065f57806336fddb041461067f57806339a059021461069f57600080fd5b80632b28fc7a146105f75780632e8fa8211461060d578063313ce5671461062357600080fd5b8063095ea7b31161033957806323b872dd1161030857806323b872dd1461058c5780632610eaca146105ac57806328577751146105cc5780632b112e49146105e257600080fd5b8063095ea7b3146104fe5780630dcbcf1c1461051e57806313b4a7f41461055757806318160ddd1461057757600080fd5b8063069d955f11610375578063069d955f1461042057806306fdde03146104765780630758d924146104af57806307dd79e0146104d457600080fd5b806303fd2a45146103a75780630445b667146103da578063044df726146103fe57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103f0600f5481565b6040519081526020016103d1565b34801561040a57600080fd5b5061041e610419366004613ad6565b610b71565b005b34801561042c57600080fd5b50600a546104519061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103d1565b34801561048257600080fd5b5060408051808201909152600781526608c8a40a88a86960cb1b60208201525b6040516103d19190613b0f565b3480156104bb57600080fd5b50600c546103bd9061010090046001600160a01b031681565b3480156104e057600080fd5b50600c546104ee9060ff1681565b60405190151581526020016103d1565b34801561050a57600080fd5b506104ee610519366004613b72565b610c2f565b34801561052a57600080fd5b506104ee610539366004613b9e565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561056357600080fd5b5061041e610572366004613bbb565b610c46565b34801561058357600080fd5b506103f0610e04565b34801561059857600080fd5b506104ee6105a7366004613be9565b610e25565b3480156105b857600080fd5b5061041e6105c7366004613d00565b610e9d565b3480156105d857600080fd5b506103f060125481565b3480156105ee57600080fd5b506103f0611052565b34801561060357600080fd5b506103f06103e881565b34801561061957600080fd5b506103f060105481565b34801561062f57600080fd5b50604051601281526020016103d1565b34801561064b57600080fd5b5061041e61065a366004613dd9565b6110d0565b34801561066b57600080fd5b5061041e61067a366004613b9e565b611224565b34801561068b57600080fd5b5061041e61069a366004613e1c565b6112d5565b3480156106ab57600080fd5b5061041e611348565b3480156106c057600080fd5b50600d546103bd906001600160a01b031681565b3480156106e057600080fd5b506013546104ee9060ff1681565b3480156106fa57600080fd5b506103f0610709366004613e3a565b6113cf565b34801561071a57600080fd5b5061041e610729366004613e3a565b611403565b34801561073a57600080fd5b5061041e610749366004613b9e565b6114a1565b34801561075a57600080fd5b506104ee610769366004613b9e565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561079357600080fd5b506013546104ee90610100900460ff1681565b3480156107b257600080fd5b506017546103bd906001600160a01b031681565b3480156107d257600080fd5b5061041e6107e1366004613e1c565b6116a3565b3480156107f257600080fd5b506103f060145481565b34801561080857600080fd5b5061041e610817366004613b9e565b611716565b34801561082857600080fd5b506104ee610837366004613b9e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561086157600080fd5b506103f0610870366004613b9e565b6001600160a01b031660009081526020819052604090205490565b34801561089757600080fd5b5061041e6118f4565b3480156108ac57600080fd5b5061041e611a19565b3480156108c157600080fd5b5061041e6108d0366004613e1c565b611a70565b3480156108e157600080fd5b506016546103bd906001600160a01b031681565b34801561090157600080fd5b506015546001600160a01b03166103bd565b34801561091f57600080fd5b506104ee611c5a565b34801561093457600080fd5b5061041e611cca565b34801561094957600080fd5b506040805180820190915260048152634645545360e01b60208201526104a2565b34801561097657600080fd5b506104ee610985366004613b72565b611f20565b34801561099657600080fd5b5061041e6109a5366004613b9e565b611f37565b3480156109b657600080fd5b5061041e6109c5366004613b9e565b6120d1565b3480156109d657600080fd5b506011546104ee9060ff1681565b3480156109f057600080fd5b5061041e6109ff366004613e53565b6121be565b348015610a1057600080fd5b5061041e610a1f366004613ad6565b6122d8565b348015610a3057600080fd5b50600e546103bd906001600160a01b031681565b348015610a5057600080fd5b50600b546104519061ffff808216916201000081048216916401000000009091041683565b348015610a8157600080fd5b506103f0610a90366004613bbb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610ac757600080fd5b5061041e610ad6366004613b9e565b612383565b348015610ae757600080fd5b5061041e610af6366004613b9e565b612784565b348015610b0757600080fd5b5061041e612844565b348015610b1c57600080fd5b5061041e610b2b366004613e86565b61291d565b348015610b3c57600080fd5b50600e546104ee90600160a81b900460ff1681565b348015610b5d57600080fd5b5061041e610b6c366004613e1c565b612bdf565b6015546001600160a01b03163314610bbe5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf83398151915260448201526064015b60405180910390fd5b60135460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050505050565b6000610c3c338484612c52565b5060015b92915050565b6015546001600160a01b03163314610c8e5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b60095460ff16610c9d57600080fd5b6001600160a01b0382163014801590610cbf57506001600160a01b0381163014155b8015610cd95750600d546001600160a01b03838116911614155b8015610cf35750600d546001600160a01b03828116911614155b610d2d5760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610bb5565b806001600160a01b0316826001600160a01b031603610d8f576001600160a01b03811660009081526004602090815260408083208054600160ff19918216811790925560089093529220805490911682179055610d8b9082906116a3565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526008909252808320805486168317905592825291902080549092168117909155610df99083906116a3565b610d8b8160016116a3565b6000610e126012600a613fb2565b610e2090633b9aca00613fc1565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610e8a576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610e84908490613fd8565b90915550505b610e95848484612d4b565b949350505050565b6015546001600160a01b03163314610ee55760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b8051825114610f365760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610bb5565b60005b82518161ffff16101561104d57610f526012600a613fb2565b828261ffff1681518110610f6857610f68613feb565b6020026020010151610f7a9190613fc1565b336000908152602081905260409020541015610fd85760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610bb5565b61103a33848361ffff1681518110610ff257610ff2613feb565b60200260200101516012600a6110089190613fb2565b858561ffff168151811061101e5761101e613feb565b60200260200101516110309190613fc1565b60008060016130df565b508061104581614001565b915050610f39565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf83546110ac9190614022565b6110b86012600a613fb2565b6110c690633b9aca00613fc1565b610e209190613fd8565b6015546001600160a01b031633146111185760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600c5460ff161561116b5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610bb5565b6103e88361ffff161115801561118757506103e88261ffff1611155b801561119957506103e88161ffff1611155b6111e55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610bb5565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6015546001600160a01b0316331461126c5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6013546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156112ba57600080fd5b505af11580156112ce573d6000803e3d6000fd5b5050505050565b6015546001600160a01b0316331461131d5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6016546001600160a01b031633146113b35760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610bb5565b6113bd60006120d1565b601680546001600160a01b0319169055565b600d546001600160a01b0316600090815260208190526040812054612710906113f9908490613fc1565b610c409190614035565b6015546001600160a01b0316331461144b5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b609681111561149c5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610bb5565b601255565b6015546001600160a01b031633146114e95760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b0381166115655760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610bb5565b61deac196001600160a01b038216016115e65760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610bb5565b6015546115fd906001600160a01b031660006116a3565b6116088160016116a3565b6015546001600160a01b031660009081526020819052604090205415611651576015546001600160a01b031660008181526020819052604090205461164f91908390611030565b505b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6015546001600160a01b031633146116eb5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6015546001600160a01b0316331461175e5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b60135460ff161561176e57600080fd5b306001600160a01b038216036117c65760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610bb5565b6013805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af192505050801561184c575060408051601f3d908101601f1916820190925261184991810190614057565b60015b61185557600080fd5b600c805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600d80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff1916909117905560155492546118d29383169291900416600019612c52565b600c5461104d90309061010090046001600160a01b0316600019612c52565b50565b6015546001600160a01b0316331461193c5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b60135460ff166119b45760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610bb5565b6015546119cb906001600160a01b031660006116a3565b601580546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6015546001600160a01b03163314611a615760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600c805460ff19166001179055565b6015546001600160a01b03163314611ab85760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b80611b2b576001600160a01b03828116600081815260016020526040808220805460ff1916905560135490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610c1357600080fd5b60025415611b92576203f48060025442611b459190613fd8565b11611b925760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610bb5565b6001600160a01b03821660009081526001602052604090205460ff1615611bfb5760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610bb5565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560135491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610bf9565b6015546000906001600160a01b03163314611ca55760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600c54611cc490309061010090046001600160a01b0316600019612c52565b50600190565b6015546001600160a01b03163314611d125760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b60135460ff1615611d655760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bb5565b601354610100900460ff16611dbc5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610bb5565b6013546201000090046001600160a01b0316611dec576013805462010000600160b01b0319163062010000021790555b601354600d54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611e5e57600080fd5b505af1925050508015611e6f575060015b50601354600d546001600160a01b03908116600090815260208190526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af1925050508015611ef2575060408051601f3d908101601f19168201909252611eef91810190614086565b60015b15611f0157600f919091556010555b6013805460ff1990811660011790915560098054909116905542601455565b6000611f2d338484612d4b565b5060019392505050565b6015546001600160a01b03163314611f7f5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b601354610100900460ff1615611fe757306001600160a01b03821603611fe75760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610bb5565b6015546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa15801561203e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206291906140aa565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156120ad573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d91906140c3565b6016546001600160a01b0316331461213c5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610bb5565b6017546001600160a01b03168015612179576001600160a01b0381166000908152600460205260408120805460ff191690556121799082906116a3565b601780546001600160a01b0319166001600160a01b0384169081179091556000908152600460205260409020805460ff19166001908117909155610d8b9083906116a3565b6015546001600160a01b031633146122065760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600b805461ffff838116620100000263ffffffff199092169085161717905561222f81836140e0565b600b805465ffff00000000191664010000000061ffff93841602179055600a5460009161226591620100008104821691166140e0565b600b5461ffff918216925064010000000090041681101561104d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610bb5565b6015546001600160a01b031633146123205760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600e805460ff60a81b1916600160a81b841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6015546001600160a01b031633146123cb5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b601354610100900460ff16156124235760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610bb5565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c9190614102565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fd9190614102565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256c9190614102565b600d546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661270257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fb9190614102565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266c9190614102565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156126b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126dd9190614102565b600d80546001600160a01b0319166001600160a01b039290921691909117905561271e565b600d80546001600160a01b0319166001600160a01b0383161790555b600c805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600d5482166000908152600160208190526040909120805460ff19169091179055915461104d923092910416600019612c52565b6015546001600160a01b031633146127cc5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b0381166128225760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610bb5565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6015546001600160a01b0316331461288c5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b601354610100900460ff16156128e45760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610bb5565b6015546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156118f1573d6000803e3d6000fd5b6015546001600160a01b031633146129655760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b82846129736012600a613fb2565b61298190633b9aca00613fc1565b61298b9190613fc1565b6129959190614035565b600f5580826129a66012600a613fb2565b6129b490633b9aca00613fc1565b6129be9190613fc1565b6129c89190614035565b6010819055600f541115612a285760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610bb5565b600d546001600160a01b031660009081526020819052604090205461271090612a52906096613fc1565b612a5c9190614035565b6010541115612ab95760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610bb5565b620f4240612ac96012600a613fb2565b612ad790633b9aca00613fc1565b612ae19190614035565b6010541015612b495760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610bb5565b620f4240612b596012600a613fb2565b612b6790633b9aca00613fc1565b612b719190614035565b600f541015612bd95760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610bb5565b50505050565b6015546001600160a01b03163314612c275760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612c9e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610bb5565b6001600160a01b038216612cea5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610bb5565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612db15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bb5565b6001600160a01b038316612e135760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bb5565b60008211612e755760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bb5565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612ea35760019250612ed1565b6001600160a01b03861660009081526001602052604090205460ff1615612ecd5760019150612ed1565b5060015b612edb8787613392565b15612fdc5760135460ff16612fdc5780612f375760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bb5565b6001600160a01b03871660009081526005602052604090205460ff16158015612f7957506001600160a01b03861660009081526005602052604090205460ff16155b15612fdc5760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610bb5565b81156130c657600e54600160a01b900460ff166130c657600e54600160a81b900460ff16801561302557506001600160a01b03861660009081526008602052604090205460ff16155b801561304a57506001600160a01b03871660009081526008602052604090205460ff16155b156130c65730600090815260208190526040902054600f5481106130c45760105460115460ff16156130ae57601254600d546001600160a01b0316600090815260208190526040902054612710916130a191613fc1565b6130ab9190614035565b90505b8082106130b9578091505b6130c2826134a9565b505b505b6130d48787878686866130df565b979650505050505050565b60006130eb8787613392565b156131855760135460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561316e575060408051601f3d908101601f1916820190925261316b918101906140c3565b60015b61317757600080fd5b90508061318357600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff16806131c757506001600160a01b03871660009081526006602052604090205460ff165b156131d0575060005b6001600160a01b038816600090815260208190526040812080548892906131f8908490613fd8565b90915550600090508161320b5786613217565b61321789888888613878565b9050806000808a6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461324d9190614022565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161329991815260200190565b60405180910390a3601354610100900460ff16613383576132ba8989613984565b601354610100900460ff161580156132d757506132d78989613392565b80156132fc57506001600160a01b03891660009081526005602052604090205460ff16155b801561332157506001600160a01b03881660009081526005602052604090205460ff16155b801561332b575083155b156133835760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610bb5565b50600198975050505050505050565b6015546000906001600160a01b038481169116148015906133c157506015546001600160a01b03838116911614155b80156133d857506015546001600160a01b03163214155b80156133fd57506001600160a01b03821660009081526004602052604090205460ff16155b801561342257506001600160a01b03831660009081526004602052604090205460ff16155b801561343957506001600160a01b03821661dead14155b801561344d57506001600160a01b03821615155b801561346257506001600160a01b0383163014155b801561348257506013546001600160a01b03848116620100009092041614155b80156134a257506013546001600160a01b03838116620100009092041614155b9392505050565b600e805460ff60a01b1916600160a01b17905560408051606081018252600b5461ffff80821683526201000082048116602084015264010000000090910416918101829052906000036134fc5750613868565b306000908152600360209081526040808320600c5461010090046001600160a01b031684529091529020546000191461355f57306000908152600360209081526040808320600c5461010090046001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856135809190613fc1565b61358a9190614035565b6135949190614035565b905060006135a28285613fd8565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106135dc576135dc613feb565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561364f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136739190614102565b8160018151811061368657613686613feb565b6001600160a01b039283166020918202929092010152600c5460405163791ac94760e01b81526101009091049091169063791ac947906136d390859060009086903090429060040161411f565b600060405180830381600087803b1580156136ed57600080fd5b505af19250505080156136fe575060015b61370b5750505050613868565b476000836137198684613fc1565b6137239190614035565b9050841561380657600c5460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156137ba575060408051601f3d908101601f191682019092526137b791810190614190565b60015b6137c957505050505050613868565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b600e546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613858576040519150601f19603f3d011682016040523d82523d6000602084013e61385d565b606091505b505050505050505050505b50600e805460ff60a01b19169055565b600080831561388e5750600a5461ffff166138b8565b82156138a75750600a5462010000900461ffff166138b8565b50600a54640100000000900461ffff165b806000036138c95784915050610e95565b6013546201000090046001600160a01b0316301480156138ea575046606114155b156138f457506111945b60006127106139038388613fc1565b61390d9190614035565b9050801561397a573060009081526020819052604081208054839290613934908490614022565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6130d48187613fd8565b601354610100900460ff16156139e85760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610bb5565b6139f28282613392565b158015613a0c5750600d546001600160a01b038281169116145b15610d8b576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556013805461ff001916610100179081905562010000900416613a84576013805462010000600160b01b0319163062010000021790555b600e805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612377565b80151581146118f157600080fd5b60008060408385031215613ae957600080fd5b8235613af481613ac8565b91506020830135613b0481613ac8565b809150509250929050565b600060208083528351808285015260005b81811015613b3c57858101830151858201604001528201613b20565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118f157600080fd5b60008060408385031215613b8557600080fd5b8235613b9081613b5d565b946020939093013593505050565b600060208284031215613bb057600080fd5b81356134a281613b5d565b60008060408385031215613bce57600080fd5b8235613bd981613b5d565b91506020830135613b0481613b5d565b600080600060608486031215613bfe57600080fd5b8335613c0981613b5d565b92506020840135613c1981613b5d565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c6957613c69613c2a565b604052919050565b600067ffffffffffffffff821115613c8b57613c8b613c2a565b5060051b60200190565b600082601f830112613ca657600080fd5b81356020613cbb613cb683613c71565b613c40565b82815260059290921b84018101918181019086841115613cda57600080fd5b8286015b84811015613cf55780358352918301918301613cde565b509695505050505050565b60008060408385031215613d1357600080fd5b823567ffffffffffffffff80821115613d2b57600080fd5b818501915085601f830112613d3f57600080fd5b81356020613d4f613cb683613c71565b82815260059290921b84018101918181019089841115613d6e57600080fd5b948201945b83861015613d95578535613d8681613b5d565b82529482019490820190613d73565b96505086013592505080821115613dab57600080fd5b50613db885828601613c95565b9150509250929050565b803561ffff81168114613dd457600080fd5b919050565b600080600060608486031215613dee57600080fd5b613df784613dc2565b9250613e0560208501613dc2565b9150613e1360408501613dc2565b90509250925092565b60008060408385031215613e2f57600080fd5b8235613af481613b5d565b600060208284031215613e4c57600080fd5b5035919050565b60008060408385031215613e6657600080fd5b613e6f83613dc2565b9150613e7d60208401613dc2565b90509250929050565b60008060008060808587031215613e9c57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613f09578160001904821115613eef57613eef613eb8565b80851615613efc57918102915b93841c9390800290613ed3565b509250929050565b600082613f2057506001610c40565b81613f2d57506000610c40565b8160018114613f435760028114613f4d57613f69565b6001915050610c40565b60ff841115613f5e57613f5e613eb8565b50506001821b610c40565b5060208310610133831016604e8410600b8410161715613f8c575081810a610c40565b613f968383613ece565b8060001904821115613faa57613faa613eb8565b029392505050565b60006134a260ff841683613f11565b8082028115828204841417610c4057610c40613eb8565b81810381811115610c4057610c40613eb8565b634e487b7160e01b600052603260045260246000fd5b600061ffff80831681810361401857614018613eb8565b6001019392505050565b80820180821115610c4057610c40613eb8565b60008261405257634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561406a57600080fd5b825161407581613b5d565b6020840151909250613b0481613b5d565b6000806040838503121561409957600080fd5b505080516020909101519092909150565b6000602082840312156140bc57600080fd5b5051919050565b6000602082840312156140d557600080fd5b81516134a281613ac8565b61ffff8181168382160190808211156140fb576140fb613eb8565b5092915050565b60006020828403121561411457600080fd5b81516134a281613b5d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561416f5784516001600160a01b03168352938301939183019160010161414a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156141a557600080fd5b835192506020840151915060408401519050925092509256fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212208eec2678c29de9833ef25811465c39974ffb45895e7ba1c3b8556d5639e7294c64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c8063590ffdce116101dc578063b1b08f7111610102578063cf847706116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610afb578063fb78680d14610b10578063fdb78c0e14610b30578063feadde9c14610b5157600080fd5b8063cf84770614610a44578063dd62ed3e14610a75578063eafb5a3c14610abb578063eb50e70e14610adb57600080fd5b8063b7df8b36116100dc578063b7df8b36146109ca578063bcd96a25146109e4578063bfc2fc3514610a04578063c04a541414610a2457600080fd5b8063b1b08f71146105f7578063b3ab15fb146109aa578063b3d514fb146105f757600080fd5b806380c581d11161017a5780638a8c523c116101495780638a8c523c1461092857806395d89b411461093d578063a9059cbb1461096a578063ab558e4d1461098a57600080fd5b806380c581d1146108b557806381cf58a9146108d5578063893d20e8146108f55780638a63bd9b1461091357600080fd5b80635cce86cd116101b65780635cce86cd1461081c57806370a0823114610855578063715018a61461088b57806378648edf146108a057600080fd5b8063590ffdce146107c65780635a6f0918146107e65780635c24b074146107fc57600080fd5b80632b28fc7a116102c1578063452ed4f11161025f5780634fb2e45d1161022e5780634fb2e45d1461072e5780634fbee1931461074e57806350a8e01614610787578063570ca735146107a657600080fd5b8063452ed4f1146106b45780634ada218b146106d45780634bbb93eb146106ee5780634e718e481461070e57600080fd5b806332cde6641161029b57806332cde6641461063f57806333251a0b1461065f57806336fddb041461067f57806339a059021461069f57600080fd5b80632b28fc7a146105f75780632e8fa8211461060d578063313ce5671461062357600080fd5b8063095ea7b31161033957806323b872dd1161030857806323b872dd1461058c5780632610eaca146105ac57806328577751146105cc5780632b112e49146105e257600080fd5b8063095ea7b3146104fe5780630dcbcf1c1461051e57806313b4a7f41461055757806318160ddd1461057757600080fd5b8063069d955f11610375578063069d955f1461042057806306fdde03146104765780630758d924146104af57806307dd79e0146104d457600080fd5b806303fd2a45146103a75780630445b667146103da578063044df726146103fe57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103f0600f5481565b6040519081526020016103d1565b34801561040a57600080fd5b5061041e610419366004613ad6565b610b71565b005b34801561042c57600080fd5b50600a546104519061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103d1565b34801561048257600080fd5b5060408051808201909152600781526608c8a40a88a86960cb1b60208201525b6040516103d19190613b0f565b3480156104bb57600080fd5b50600c546103bd9061010090046001600160a01b031681565b3480156104e057600080fd5b50600c546104ee9060ff1681565b60405190151581526020016103d1565b34801561050a57600080fd5b506104ee610519366004613b72565b610c2f565b34801561052a57600080fd5b506104ee610539366004613b9e565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561056357600080fd5b5061041e610572366004613bbb565b610c46565b34801561058357600080fd5b506103f0610e04565b34801561059857600080fd5b506104ee6105a7366004613be9565b610e25565b3480156105b857600080fd5b5061041e6105c7366004613d00565b610e9d565b3480156105d857600080fd5b506103f060125481565b3480156105ee57600080fd5b506103f0611052565b34801561060357600080fd5b506103f06103e881565b34801561061957600080fd5b506103f060105481565b34801561062f57600080fd5b50604051601281526020016103d1565b34801561064b57600080fd5b5061041e61065a366004613dd9565b6110d0565b34801561066b57600080fd5b5061041e61067a366004613b9e565b611224565b34801561068b57600080fd5b5061041e61069a366004613e1c565b6112d5565b3480156106ab57600080fd5b5061041e611348565b3480156106c057600080fd5b50600d546103bd906001600160a01b031681565b3480156106e057600080fd5b506013546104ee9060ff1681565b3480156106fa57600080fd5b506103f0610709366004613e3a565b6113cf565b34801561071a57600080fd5b5061041e610729366004613e3a565b611403565b34801561073a57600080fd5b5061041e610749366004613b9e565b6114a1565b34801561075a57600080fd5b506104ee610769366004613b9e565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561079357600080fd5b506013546104ee90610100900460ff1681565b3480156107b257600080fd5b506017546103bd906001600160a01b031681565b3480156107d257600080fd5b5061041e6107e1366004613e1c565b6116a3565b3480156107f257600080fd5b506103f060145481565b34801561080857600080fd5b5061041e610817366004613b9e565b611716565b34801561082857600080fd5b506104ee610837366004613b9e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561086157600080fd5b506103f0610870366004613b9e565b6001600160a01b031660009081526020819052604090205490565b34801561089757600080fd5b5061041e6118f4565b3480156108ac57600080fd5b5061041e611a19565b3480156108c157600080fd5b5061041e6108d0366004613e1c565b611a70565b3480156108e157600080fd5b506016546103bd906001600160a01b031681565b34801561090157600080fd5b506015546001600160a01b03166103bd565b34801561091f57600080fd5b506104ee611c5a565b34801561093457600080fd5b5061041e611cca565b34801561094957600080fd5b506040805180820190915260048152634645545360e01b60208201526104a2565b34801561097657600080fd5b506104ee610985366004613b72565b611f20565b34801561099657600080fd5b5061041e6109a5366004613b9e565b611f37565b3480156109b657600080fd5b5061041e6109c5366004613b9e565b6120d1565b3480156109d657600080fd5b506011546104ee9060ff1681565b3480156109f057600080fd5b5061041e6109ff366004613e53565b6121be565b348015610a1057600080fd5b5061041e610a1f366004613ad6565b6122d8565b348015610a3057600080fd5b50600e546103bd906001600160a01b031681565b348015610a5057600080fd5b50600b546104519061ffff808216916201000081048216916401000000009091041683565b348015610a8157600080fd5b506103f0610a90366004613bbb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610ac757600080fd5b5061041e610ad6366004613b9e565b612383565b348015610ae757600080fd5b5061041e610af6366004613b9e565b612784565b348015610b0757600080fd5b5061041e612844565b348015610b1c57600080fd5b5061041e610b2b366004613e86565b61291d565b348015610b3c57600080fd5b50600e546104ee90600160a81b900460ff1681565b348015610b5d57600080fd5b5061041e610b6c366004613e1c565b612bdf565b6015546001600160a01b03163314610bbe5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf83398151915260448201526064015b60405180910390fd5b60135460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050505050565b6000610c3c338484612c52565b5060015b92915050565b6015546001600160a01b03163314610c8e5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b60095460ff16610c9d57600080fd5b6001600160a01b0382163014801590610cbf57506001600160a01b0381163014155b8015610cd95750600d546001600160a01b03838116911614155b8015610cf35750600d546001600160a01b03828116911614155b610d2d5760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610bb5565b806001600160a01b0316826001600160a01b031603610d8f576001600160a01b03811660009081526004602090815260408083208054600160ff19918216811790925560089093529220805490911682179055610d8b9082906116a3565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526008909252808320805486168317905592825291902080549092168117909155610df99083906116a3565b610d8b8160016116a3565b6000610e126012600a613fb2565b610e2090633b9aca00613fc1565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610e8a576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610e84908490613fd8565b90915550505b610e95848484612d4b565b949350505050565b6015546001600160a01b03163314610ee55760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b8051825114610f365760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610bb5565b60005b82518161ffff16101561104d57610f526012600a613fb2565b828261ffff1681518110610f6857610f68613feb565b6020026020010151610f7a9190613fc1565b336000908152602081905260409020541015610fd85760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610bb5565b61103a33848361ffff1681518110610ff257610ff2613feb565b60200260200101516012600a6110089190613fb2565b858561ffff168151811061101e5761101e613feb565b60200260200101516110309190613fc1565b60008060016130df565b508061104581614001565b915050610f39565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf83546110ac9190614022565b6110b86012600a613fb2565b6110c690633b9aca00613fc1565b610e209190613fd8565b6015546001600160a01b031633146111185760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600c5460ff161561116b5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610bb5565b6103e88361ffff161115801561118757506103e88261ffff1611155b801561119957506103e88161ffff1611155b6111e55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610bb5565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6015546001600160a01b0316331461126c5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6013546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156112ba57600080fd5b505af11580156112ce573d6000803e3d6000fd5b5050505050565b6015546001600160a01b0316331461131d5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6016546001600160a01b031633146113b35760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610bb5565b6113bd60006120d1565b601680546001600160a01b0319169055565b600d546001600160a01b0316600090815260208190526040812054612710906113f9908490613fc1565b610c409190614035565b6015546001600160a01b0316331461144b5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b609681111561149c5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610bb5565b601255565b6015546001600160a01b031633146114e95760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b0381166115655760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610bb5565b61deac196001600160a01b038216016115e65760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610bb5565b6015546115fd906001600160a01b031660006116a3565b6116088160016116a3565b6015546001600160a01b031660009081526020819052604090205415611651576015546001600160a01b031660008181526020819052604090205461164f91908390611030565b505b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6015546001600160a01b031633146116eb5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6015546001600160a01b0316331461175e5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b60135460ff161561176e57600080fd5b306001600160a01b038216036117c65760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610bb5565b6013805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af192505050801561184c575060408051601f3d908101601f1916820190925261184991810190614057565b60015b61185557600080fd5b600c805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600d80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff1916909117905560155492546118d29383169291900416600019612c52565b600c5461104d90309061010090046001600160a01b0316600019612c52565b50565b6015546001600160a01b0316331461193c5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b60135460ff166119b45760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610bb5565b6015546119cb906001600160a01b031660006116a3565b601580546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6015546001600160a01b03163314611a615760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600c805460ff19166001179055565b6015546001600160a01b03163314611ab85760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b80611b2b576001600160a01b03828116600081815260016020526040808220805460ff1916905560135490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610c1357600080fd5b60025415611b92576203f48060025442611b459190613fd8565b11611b925760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610bb5565b6001600160a01b03821660009081526001602052604090205460ff1615611bfb5760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610bb5565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560135491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610bf9565b6015546000906001600160a01b03163314611ca55760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600c54611cc490309061010090046001600160a01b0316600019612c52565b50600190565b6015546001600160a01b03163314611d125760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b60135460ff1615611d655760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bb5565b601354610100900460ff16611dbc5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610bb5565b6013546201000090046001600160a01b0316611dec576013805462010000600160b01b0319163062010000021790555b601354600d54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611e5e57600080fd5b505af1925050508015611e6f575060015b50601354600d546001600160a01b03908116600090815260208190526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af1925050508015611ef2575060408051601f3d908101601f19168201909252611eef91810190614086565b60015b15611f0157600f919091556010555b6013805460ff1990811660011790915560098054909116905542601455565b6000611f2d338484612d4b565b5060019392505050565b6015546001600160a01b03163314611f7f5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b601354610100900460ff1615611fe757306001600160a01b03821603611fe75760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610bb5565b6015546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa15801561203e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206291906140aa565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156120ad573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d91906140c3565b6016546001600160a01b0316331461213c5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610bb5565b6017546001600160a01b03168015612179576001600160a01b0381166000908152600460205260408120805460ff191690556121799082906116a3565b601780546001600160a01b0319166001600160a01b0384169081179091556000908152600460205260409020805460ff19166001908117909155610d8b9083906116a3565b6015546001600160a01b031633146122065760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600b805461ffff838116620100000263ffffffff199092169085161717905561222f81836140e0565b600b805465ffff00000000191664010000000061ffff93841602179055600a5460009161226591620100008104821691166140e0565b600b5461ffff918216925064010000000090041681101561104d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610bb5565b6015546001600160a01b031633146123205760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b600e805460ff60a81b1916600160a81b841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6015546001600160a01b031633146123cb5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b601354610100900460ff16156124235760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610bb5565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c9190614102565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fd9190614102565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256c9190614102565b600d546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661270257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fb9190614102565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266c9190614102565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156126b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126dd9190614102565b600d80546001600160a01b0319166001600160a01b039290921691909117905561271e565b600d80546001600160a01b0319166001600160a01b0383161790555b600c805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600d5482166000908152600160208190526040909120805460ff19169091179055915461104d923092910416600019612c52565b6015546001600160a01b031633146127cc5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b0381166128225760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610bb5565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6015546001600160a01b0316331461288c5760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b601354610100900460ff16156128e45760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610bb5565b6015546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156118f1573d6000803e3d6000fd5b6015546001600160a01b031633146129655760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b82846129736012600a613fb2565b61298190633b9aca00613fc1565b61298b9190613fc1565b6129959190614035565b600f5580826129a66012600a613fb2565b6129b490633b9aca00613fc1565b6129be9190613fc1565b6129c89190614035565b6010819055600f541115612a285760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610bb5565b600d546001600160a01b031660009081526020819052604090205461271090612a52906096613fc1565b612a5c9190614035565b6010541115612ab95760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610bb5565b620f4240612ac96012600a613fb2565b612ad790633b9aca00613fc1565b612ae19190614035565b6010541015612b495760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610bb5565b620f4240612b596012600a613fb2565b612b6790633b9aca00613fc1565b612b719190614035565b600f541015612bd95760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610bb5565b50505050565b6015546001600160a01b03163314612c275760405162461bcd60e51b815260206004820152601160248201526000805160206141bf8339815191526044820152606401610bb5565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612c9e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610bb5565b6001600160a01b038216612cea5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610bb5565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612db15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bb5565b6001600160a01b038316612e135760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bb5565b60008211612e755760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bb5565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612ea35760019250612ed1565b6001600160a01b03861660009081526001602052604090205460ff1615612ecd5760019150612ed1565b5060015b612edb8787613392565b15612fdc5760135460ff16612fdc5780612f375760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bb5565b6001600160a01b03871660009081526005602052604090205460ff16158015612f7957506001600160a01b03861660009081526005602052604090205460ff16155b15612fdc5760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610bb5565b81156130c657600e54600160a01b900460ff166130c657600e54600160a81b900460ff16801561302557506001600160a01b03861660009081526008602052604090205460ff16155b801561304a57506001600160a01b03871660009081526008602052604090205460ff16155b156130c65730600090815260208190526040902054600f5481106130c45760105460115460ff16156130ae57601254600d546001600160a01b0316600090815260208190526040902054612710916130a191613fc1565b6130ab9190614035565b90505b8082106130b9578091505b6130c2826134a9565b505b505b6130d48787878686866130df565b979650505050505050565b60006130eb8787613392565b156131855760135460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561316e575060408051601f3d908101601f1916820190925261316b918101906140c3565b60015b61317757600080fd5b90508061318357600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff16806131c757506001600160a01b03871660009081526006602052604090205460ff165b156131d0575060005b6001600160a01b038816600090815260208190526040812080548892906131f8908490613fd8565b90915550600090508161320b5786613217565b61321789888888613878565b9050806000808a6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461324d9190614022565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161329991815260200190565b60405180910390a3601354610100900460ff16613383576132ba8989613984565b601354610100900460ff161580156132d757506132d78989613392565b80156132fc57506001600160a01b03891660009081526005602052604090205460ff16155b801561332157506001600160a01b03881660009081526005602052604090205460ff16155b801561332b575083155b156133835760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610bb5565b50600198975050505050505050565b6015546000906001600160a01b038481169116148015906133c157506015546001600160a01b03838116911614155b80156133d857506015546001600160a01b03163214155b80156133fd57506001600160a01b03821660009081526004602052604090205460ff16155b801561342257506001600160a01b03831660009081526004602052604090205460ff16155b801561343957506001600160a01b03821661dead14155b801561344d57506001600160a01b03821615155b801561346257506001600160a01b0383163014155b801561348257506013546001600160a01b03848116620100009092041614155b80156134a257506013546001600160a01b03838116620100009092041614155b9392505050565b600e805460ff60a01b1916600160a01b17905560408051606081018252600b5461ffff80821683526201000082048116602084015264010000000090910416918101829052906000036134fc5750613868565b306000908152600360209081526040808320600c5461010090046001600160a01b031684529091529020546000191461355f57306000908152600360209081526040808320600c5461010090046001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856135809190613fc1565b61358a9190614035565b6135949190614035565b905060006135a28285613fd8565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106135dc576135dc613feb565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561364f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136739190614102565b8160018151811061368657613686613feb565b6001600160a01b039283166020918202929092010152600c5460405163791ac94760e01b81526101009091049091169063791ac947906136d390859060009086903090429060040161411f565b600060405180830381600087803b1580156136ed57600080fd5b505af19250505080156136fe575060015b61370b5750505050613868565b476000836137198684613fc1565b6137239190614035565b9050841561380657600c5460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156137ba575060408051601f3d908101601f191682019092526137b791810190614190565b60015b6137c957505050505050613868565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b600e546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613858576040519150601f19603f3d011682016040523d82523d6000602084013e61385d565b606091505b505050505050505050505b50600e805460ff60a01b19169055565b600080831561388e5750600a5461ffff166138b8565b82156138a75750600a5462010000900461ffff166138b8565b50600a54640100000000900461ffff165b806000036138c95784915050610e95565b6013546201000090046001600160a01b0316301480156138ea575046606114155b156138f457506111945b60006127106139038388613fc1565b61390d9190614035565b9050801561397a573060009081526020819052604081208054839290613934908490614022565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6130d48187613fd8565b601354610100900460ff16156139e85760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610bb5565b6139f28282613392565b158015613a0c5750600d546001600160a01b038281169116145b15610d8b576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556013805461ff001916610100179081905562010000900416613a84576013805462010000600160b01b0319163062010000021790555b600e805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612377565b80151581146118f157600080fd5b60008060408385031215613ae957600080fd5b8235613af481613ac8565b91506020830135613b0481613ac8565b809150509250929050565b600060208083528351808285015260005b81811015613b3c57858101830151858201604001528201613b20565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118f157600080fd5b60008060408385031215613b8557600080fd5b8235613b9081613b5d565b946020939093013593505050565b600060208284031215613bb057600080fd5b81356134a281613b5d565b60008060408385031215613bce57600080fd5b8235613bd981613b5d565b91506020830135613b0481613b5d565b600080600060608486031215613bfe57600080fd5b8335613c0981613b5d565b92506020840135613c1981613b5d565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c6957613c69613c2a565b604052919050565b600067ffffffffffffffff821115613c8b57613c8b613c2a565b5060051b60200190565b600082601f830112613ca657600080fd5b81356020613cbb613cb683613c71565b613c40565b82815260059290921b84018101918181019086841115613cda57600080fd5b8286015b84811015613cf55780358352918301918301613cde565b509695505050505050565b60008060408385031215613d1357600080fd5b823567ffffffffffffffff80821115613d2b57600080fd5b818501915085601f830112613d3f57600080fd5b81356020613d4f613cb683613c71565b82815260059290921b84018101918181019089841115613d6e57600080fd5b948201945b83861015613d95578535613d8681613b5d565b82529482019490820190613d73565b96505086013592505080821115613dab57600080fd5b50613db885828601613c95565b9150509250929050565b803561ffff81168114613dd457600080fd5b919050565b600080600060608486031215613dee57600080fd5b613df784613dc2565b9250613e0560208501613dc2565b9150613e1360408501613dc2565b90509250925092565b60008060408385031215613e2f57600080fd5b8235613af481613b5d565b600060208284031215613e4c57600080fd5b5035919050565b60008060408385031215613e6657600080fd5b613e6f83613dc2565b9150613e7d60208401613dc2565b90509250929050565b60008060008060808587031215613e9c57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613f09578160001904821115613eef57613eef613eb8565b80851615613efc57918102915b93841c9390800290613ed3565b509250929050565b600082613f2057506001610c40565b81613f2d57506000610c40565b8160018114613f435760028114613f4d57613f69565b6001915050610c40565b60ff841115613f5e57613f5e613eb8565b50506001821b610c40565b5060208310610133831016604e8410600b8410161715613f8c575081810a610c40565b613f968383613ece565b8060001904821115613faa57613faa613eb8565b029392505050565b60006134a260ff841683613f11565b8082028115828204841417610c4057610c40613eb8565b81810381811115610c4057610c40613eb8565b634e487b7160e01b600052603260045260246000fd5b600061ffff80831681810361401857614018613eb8565b6001019392505050565b80820180821115610c4057610c40613eb8565b60008261405257634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561406a57600080fd5b825161407581613b5d565b6020840151909250613b0481613b5d565b6000806040838503121561409957600080fd5b505080516020909101519092909150565b6000602082840312156140bc57600080fd5b5051919050565b6000602082840312156140d557600080fd5b81516134a281613ac8565b61ffff8181168382160190808211156140fb576140fb613eb8565b5092915050565b60006020828403121561411457600080fd5b81516134a281613b5d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561416f5784516001600160a01b03168352938301939183019160010161414a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156141a557600080fd5b835192506020840151915060408401519050925092509256fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212208eec2678c29de9833ef25811465c39974ffb45895e7ba1c3b8556d5639e7294c64736f6c63430008130033

Deployed Bytecode Sourcemap

4090:22229:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5724:73;;;;;;;;;;;;5755:42;5724:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5724:73:0;;;;;;;;5975:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;5975:28:0;245:177:1;14788:153:0;;;;;;;;;;-1:-1:-1;14788:153:0;;;;;:::i;:::-;;:::i;:::-;;5186:107;;;;;;;;;;-1:-1:-1;5186:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;5186:107:0;931:365:1;10235:80:0;;;;;;;;;;-1:-1:-1;10307:5:0;;;;;;;;;;;;-1:-1:-1;;;10307:5:0;;;;10235:80;;;;;;;:::i;5663:26::-;;;;;;;;;;-1:-1:-1;5663:26:0;;;;;;;-1:-1:-1;;;;;5663:26:0;;;5630;;;;;;;;;;-1:-1:-1;5630:26:0;;;;;;;;;;;2267:14:1;;2260:22;2242:41;;2230:2;2215:18;5630:26:0;2102:187:1;10843:161:0;;;;;;;;;;-1:-1:-1;10843:161:0;;;;;:::i;:::-;;:::i;14217:140::-;;;;;;;;;;-1:-1:-1;14217:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14315:34:0;14291:4;14315:34;;;:25;:34;;;;;;;;;14217:140;17589:809;;;;;;;;;;-1:-1:-1;17589:809:0;;;;;:::i;:::-;;:::i;9970:83::-;;;;;;;;;;;;;:::i;11513:306::-;;;;;;;;;;-1:-1:-1;11513:306:0;;;;;:::i;:::-;;:::i;24031:447::-;;;;;;;;;;-1:-1:-1;24031:447:0;;;;;:::i;:::-;;:::i;6083:33::-;;;;;;;;;;;;;;;;14521:141;;;;;;;;;;;;;:::i;5427:42::-;;;;;;;;;;;;5465:4;5427:42;;6010:25;;;;;;;;;;;;;;;;10059:80;;;;;;;;;;-1:-1:-1;10059:80:0;;4884:2;6508:36:1;;6496:2;6481:18;10059:80:0;6366:184:1;15139:453:0;;;;;;;;;;-1:-1:-1;15139:453:0;;;;;:::i;:::-;;:::i;14670:110::-;;;;;;;;;;-1:-1:-1;14670:110:0;;;;;:::i;:::-;;:::i;13792:140::-;;;;;;;;;;-1:-1:-1;13792:140:0;;;;;:::i;:::-;;:::i;9353:221::-;;;;;;;;;;;;;:::i;5696:21::-;;;;;;;;;;-1:-1:-1;5696:21:0;;;;-1:-1:-1;;;;;5696:21:0;;;6123:34;;;;;;;;;;-1:-1:-1;6123:34:0;;;;;;;;16189:189;;;;;;;;;;-1:-1:-1;16189:189:0;;;;;:::i;:::-;;:::i;17093:217::-;;;;;;;;;;-1:-1:-1;17093:217:0;;;;;:::i;:::-;;:::i;7660:654::-;;;;;;;;;;-1:-1:-1;7660:654:0;;;;;:::i;:::-;;:::i;13940:127::-;;;;;;;;;;-1:-1:-1;13940:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14031:28:0;14007:4;14031:28;;;:19;:28;;;;;;;;;13940:127;6164:36;;;;;;;;;;-1:-1:-1;6164:36:0;;;;;;;;;;;8678:23;;;;;;;;;;-1:-1:-1;8678:23:0;;;;-1:-1:-1;;;;;8678:23:0;;;14075:134;;;;;;;;;;-1:-1:-1;14075:134:0;;;;;:::i;:::-;;:::i;6237:26::-;;;;;;;;;;;;;;;;13087:557;;;;;;;;;;-1:-1:-1;13087:557:0;;;;;:::i;:::-;;:::i;13652:132::-;;;;;;;;;;-1:-1:-1;13652:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;13746:30:0;13722:4;13746:30;;;:21;:30;;;;;;;;;13652:132;10545:117;;;;;;;;;;-1:-1:-1;10545:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;10638:16:0;10611:7;10638:16;;;;;;;;;;;;10545:117;8322:310;;;;;;;;;;;;;:::i;14949:182::-;;;;;;;;;;;;;:::i;12515:564::-;;;;;;;;;;-1:-1:-1;12515:564:0;;;;;:::i;:::-;;:::i;8640:31::-;;;;;;;;;;-1:-1:-1;8640:31:0;;;;-1:-1:-1;;;;;8640:31:0;;;10321:79;;;;;;;;;;-1:-1:-1;10391:6:0;;-1:-1:-1;;;;;10391:6:0;10321:79;;11330:175;;;;;;;;;;;;;:::i;22792:737::-;;;;;;;;;;;;;:::i;10145:84::-;;;;;;;;;;-1:-1:-1;10219:7:0;;;;;;;;;;;;-1:-1:-1;;;10219:7:0;;;;10145:84;;10670:165;;;;;;;;;;-1:-1:-1;10670:165:0;;;;;:::i;:::-;;:::i;23727:296::-;;;;;;;;;;-1:-1:-1;23727:296:0;;;;;:::i;:::-;;:::i;8863:482::-;;;;;;;;;;-1:-1:-1;8863:482:0;;;;;:::i;:::-;;:::i;6042:34::-;;;;;;;;;;-1:-1:-1;6042:34:0;;;;;;;;15600:374;;;;;;;;;;-1:-1:-1;15600:374:0;;;;;:::i;:::-;;:::i;17318:263::-;;;;;;;;;;-1:-1:-1;17318:263:0;;;;;:::i;:::-;;:::i;5804:94::-;;;;;;;;;;-1:-1:-1;5804:94:0;;;;-1:-1:-1;;;;;5804:94:0;;;5302:116;;;;;;;;;;-1:-1:-1;5302:116:0;;;;;;;;;;;;;;;;;;;;;;10406:133;;;;;;;;;;-1:-1:-1;10406:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10508:19:0;;;10490:7;10508:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10406:133;11827:680;;;;;;;;;;-1:-1:-1;11827:680:0;;;;;:::i;:::-;;:::i;15982:199::-;;;;;;;;;;-1:-1:-1;15982:199:0;;;;;:::i;:::-;;:::i;23537:182::-;;;;;;;;;;;;;:::i;16386:699::-;;;;;;;;;;-1:-1:-1;16386:699:0;;;;;:::i;:::-;;:::i;5929:39::-;;;;;;;;;;-1:-1:-1;5929:39:0;;;;-1:-1:-1;;;5929:39:0;;;;;;14365:148;;;;;;;;;;-1:-1:-1;14365:148:0;;;;;:::i;:::-;;:::i;14788:153::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;;;;;;;;;14883:11:::1;::::0;:50:::1;::::0;-1:-1:-1;;;14883:50:0;;9315:14:1;;9308:22;14883:50:0::1;::::0;::::1;9290:41:1::0;9374:14;;9367:22;9347:18;;;9340:50;14883:11:0;;;::::1;-1:-1:-1::0;;;;;14883:11:0::1;::::0;:26:::1;::::0;9263:18:1;;14883:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14788:153:::0;;:::o;10843:161::-;10920:4;10937:37;10946:10;10958:7;10967:6;10937:8;:37::i;:::-;-1:-1:-1;10992:4:0;10843:161;;;;;:::o;17589:809::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;17693:23:::1;::::0;::::1;;17685:32;;;::::0;::::1;;-1:-1:-1::0;;;;;17736:23:0;::::1;17754:4;17736:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;17781:24:0;::::1;17800:4;17781:24;;17736:69;:107;;;;-1:-1:-1::0;17827:6:0::1;::::0;-1:-1:-1;;;;;17827:16:0;;::::1;:6:::0;::::1;:16;;17736:107;:146;;;;-1:-1:-1::0;17865:6:0::1;::::0;-1:-1:-1;;;;;17865:17:0;;::::1;:6:::0;::::1;:17;;17736:146;17728:170;;;::::0;-1:-1:-1;;;17728:170:0;;9603:2:1;17728:170:0::1;::::0;::::1;9585:21:1::0;9642:2;9622:18;;;9615:30;-1:-1:-1;;;9661:18:1;;;9654:41;9712:18;;17728:170:0::1;9401:335:1::0;17728:170:0::1;17923:7;-1:-1:-1::0;;;;;17913:17:0::1;:6;-1:-1:-1::0;;;;;17913:17:0::1;::::0;17909:482:::1;;-1:-1:-1::0;;;;;17947:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;17976:4:::1;-1:-1:-1::0;;17947:33:0;;::::1;::::0;::::1;::::0;;;17995:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;18042:34:::1;::::0;17947:26;;18042:19:::1;:34::i;:::-;17589:809:::0;;:::o;17909:482::-:1;-1:-1:-1::0;;;;;18109:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;18137:4:::1;-1:-1:-1::0;;18109:32:0;;::::1;::::0;::::1;::::0;;;18156:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;18204:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;18250:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;18297:33:::1;::::0;18109:25;;18297:19:::1;:33::i;:::-;18345:34;18365:7;18374:4;18345:19;:34::i;9970:83::-:0;10025:7;4945:13;4884:2;4945;:13;:::i;:::-;4928:30;;4734:13;4928:30;:::i;:::-;10036:14;;9970:83;:::o;11513:306::-;-1:-1:-1;;;;;11634:19:0;;11613:4;11634:19;;;:11;:19;;;;;;;;11654:10;11634:31;;;;;;;;-1:-1:-1;;11634:52:0;11630:126;;-1:-1:-1;;;;;11703:19:0;;;;;;:11;:19;;;;;;;;11723:10;11703:31;;;;;;;:41;;11738:6;;11703:19;:41;;11738:6;;11703:41;:::i;:::-;;;;-1:-1:-1;;11630:126:0;11775:36;11785:6;11793:9;11804:6;11775:9;:36::i;:::-;11768:43;11513:306;-1:-1:-1;;;;11513:306:0:o;24031:447::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;24166:7:::1;:14;24147:8;:15;:33;24139:67;;;::::0;-1:-1:-1;;;24139:67:0;;11764:2:1;24139:67:0::1;::::0;::::1;11746:21:1::0;11803:2;11783:18;;;11776:30;11842:23;11822:18;;;11815:51;11883:18;;24139:67:0::1;11562:345:1::0;24139:67:0::1;24222:8;24217:254;24240:8;:15;24236:1;:19;;;24217:254;;;24321:13;4884:2;24321;:13;:::i;:::-;24310:7;24318:1;24310:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24295:10;10611:7:::0;10638:16;;;;;;;;;;;24285:49:::1;;24277:80;;;::::0;-1:-1:-1;;;24277:80:0;;12246:2:1;24277:80:0::1;::::0;::::1;12228:21:1::0;12285:2;12265:18;;;12258:30;12324:20;12304:18;;;12297:48;12362:18;;24277:80:0::1;12044:342:1::0;24277:80:0::1;24372:87;24389:10;24401:8;24410:1;24401:11;;;;;;;;;;:::i;:::-;;;;;;;4884:2;24425;:13;;;;:::i;:::-;24414:7;24422:1;24414:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24440:5;24447::::0;24454:4:::1;24372:16;:87::i;:::-;-1:-1:-1::0;24257:3:0;::::1;::::0;::::1;:::i;:::-;;;;24217:254;;;;24031:447:::0;;:::o;14521:141::-;14574:7;10638:16;;;;;;5755:42;10638:16;;;;14613:39;;10638:16;14613:39;:::i;:::-;4945:13;4884:2;4945;:13;:::i;:::-;4928:30;;4734:13;4928:30;:::i;:::-;14602:51;;;;:::i;15139:453::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;15247:14:::1;::::0;::::1;;15246:15;15238:45;;;::::0;-1:-1:-1;;;15238:45:0;;12925:2:1;15238:45:0::1;::::0;::::1;12907:21:1::0;12964:2;12944:18;;;12937:30;13003:19;12983:18;;;12976:47;13040:18;;15238:45:0::1;12723:341:1::0;15238:45:0::1;5465:4;15302:6;:21;;;;:65;;;;;5515:4;15344:7;:23;;;;15302:65;:117;;;;;5569:4;15388:11;:31;;;;15302:117;15294:170;;;::::0;-1:-1:-1;;;15294:170:0;;13271:2:1;15294:170:0::1;::::0;::::1;13253:21:1::0;13310:2;13290:18;;;13283:30;13349:25;13329:18;;;13322:53;13392:18;;15294:170:0::1;13069:347:1::0;15294:170:0::1;15475:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;15511:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;15549:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;15139:453::o;14670:110::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;14739:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;14739:33:0;;-1:-1:-1;;;;;178:55:1;;;14739:33:0::1;::::0;::::1;160:74:1::0;14739:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;14739:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14670:110:::0;:::o;13792:140::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;-1:-1:-1;;;;;13884:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;13884:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13792:140::o;9353:221::-;9431:16;;-1:-1:-1;;;;;9431:16:0;9417:10;:30;9409:83;;;;-1:-1:-1;;;9409:83:0;;13623:2:1;9409:83:0;;;13605:21:1;13662:2;13642:18;;;13635:30;13701:34;13681:18;;;13674:62;-1:-1:-1;;;13752:18:1;;;13745:38;13800:19;;9409:83:0;13421:404:1;9409:83:0;9503:23;9523:1;9503:11;:23::i;:::-;9537:16;:29;;-1:-1:-1;;;;;;9537:29:0;;;9353:221::o;16189:189::-;16318:6;;-1:-1:-1;;;;;16318:6:0;16280:7;10638:16;;;;;;;;;;;5616:5;;16308:41;;16328:21;;16308:41;:::i;:::-;16307:62;;;;:::i;17093:217::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;17223:3:::1;17197:22;:29;;17189:64;;;::::0;-1:-1:-1;;;17189:64:0;;14254:2:1;17189:64:0::1;::::0;::::1;14236:21:1::0;14293:2;14273:18;;;14266:30;14332:24;14312:18;;;14305:52;14374:18;;17189:64:0::1;14052:346:1::0;17189:64:0::1;17264:13;:38:::0;17093:217::o;7660:654::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;-1:-1:-1;;;;;7739:22:0;::::1;7731:96;;;::::0;-1:-1:-1;;;7731:96:0;;14605:2:1;7731:96:0::1;::::0;::::1;14587:21:1::0;14644:2;14624:18;;;14617:30;14683:34;14663:18;;;14656:62;14754:31;14734:18;;;14727:59;14803:19;;7731:96:0::1;14403:425:1::0;7731:96:0::1;-1:-1:-1::0;;;;;;;7846:16:0;::::1;::::0;7838:90:::1;;;::::0;-1:-1:-1;;;7838:90:0;;14605:2:1;7838:90:0::1;::::0;::::1;14587:21:1::0;14644:2;14624:18;;;14617:30;14683:34;14663:18;;;14656:62;14754:31;14734:18;;;14727:59;14803:19;;7838:90:0::1;14403:425:1::0;7838:90:0::1;7959:6;::::0;7939:34:::1;::::0;-1:-1:-1;;;;;7959:6:0::1;;7939:19;:34::i;:::-;7984:35;8004:8;8014:4;7984:19;:35::i;:::-;8054:6;::::0;-1:-1:-1;;;;;8054:6:0::1;8064:1;10638:16:::0;;;;;;;;;;;8044:21;8040:127:::1;;8099:6;::::0;-1:-1:-1;;;;;8099:6:0::1;10611:7:::0;10638:16;;;;;;;;;;;8082:73:::1;::::0;8099:6;8107:8;;8117:17:::1;10545:117:::0;8082:73:::1;;8040:127;8206:6;::::0;;-1:-1:-1;;;;;8223:17:0;;::::1;-1:-1:-1::0;;;;;;8223:17:0;::::1;::::0;::::1;::::0;;;8256:40:::1;::::0;8206:6;::::1;::::0;8223:17;8206:6;;8256:40:::1;::::0;8187:16:::1;::::0;8256:40:::1;7720:594;7660:654:::0;:::o;14075:134::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;-1:-1:-1;;;;;14163:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14163:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14075:134::o;13087:557::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;13162:14:::1;::::0;::::1;;13161:15;13153:24;;;::::0;::::1;;13212:4;-1:-1:-1::0;;;;;13196:21:0;::::1;::::0;13188:48:::1;;;::::0;-1:-1:-1;;;13188:48:0;;15035:2:1;13188:48:0::1;::::0;::::1;15017:21:1::0;15074:2;15054:18;;;15047:30;15113:16;15093:18;;;15086:44;15147:18;;13188:48:0::1;14833:338:1::0;13188:48:0::1;13247:11;:31:::0;;-1:-1:-1;;;;;;13247:31:0::1;::::0;-1:-1:-1;;;;;13247:31:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13293:23:::1;::::0;;-1:-1:-1;;;13293:23:0;;;;:11;;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13293:11:0;:23:::1;;;;;;;;;;-1:-1:-1::0;13293:23:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;13293:23:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;13289:348;;13626:8;::::0;::::1;13289:348;13380:9;:29:::0;;-1:-1:-1;;13380:29:0::1;;-1:-1:-1::0;;;;;13380:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13411:6:::1;:22:::0;;-1:-1:-1;;;;;;13411:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13435:15:0;;;-1:-1:-1;13435:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;13435:22:0::1;::::0;;::::1;::::0;;13482:6:::1;::::0;13498:9;;13473:55:::1;::::0;13482:6;::::1;::::0;13498:9;;::::1;;-1:-1:-1::0;;13473:8:0::1;:55::i;:::-;13575:9;::::0;13543:62:::1;::::0;13560:4:::1;::::0;13575:9:::1;::::0;::::1;-1:-1:-1::0;;;;;13575:9:0::1;-1:-1:-1::0;;13543:8:0::1;:62::i;13289:348::-;13087:557:::0;:::o;8322:310::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;8389:14:::1;::::0;::::1;;8381:74;;;::::0;-1:-1:-1;;;8381:74:0;;15768:2:1;8381:74:0::1;::::0;::::1;15750:21:1::0;15807:2;15787:18;;;15780:30;15846:34;15826:18;;;15819:62;15917:17;15897:18;;;15890:45;15952:19;;8381:74:0::1;15566:411:1::0;8381:74:0::1;8486:6;::::0;8466:34:::1;::::0;-1:-1:-1;;;;;8486:6:0::1;;8466:19;:34::i;:::-;8530:6;::::0;;-1:-1:-1;;;;;;8547:19:0;::::1;::::0;;;8582:42:::1;::::0;-1:-1:-1;;;;;8530:6:0;;::::1;::::0;8511:16:::1;::::0;8530:6;;8582:42:::1;::::0;8511:16;;8582:42:::1;8370:262;8322:310::o:0;14949:182::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;15102:14:::1;:21:::0;;-1:-1:-1;;15102:21:0::1;15119:4;15102:21;::::0;;14949:182::o;12515:564::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;12597:7:::1;12592:480;;-1:-1:-1::0;;;;;12621:13:0;;::::1;12637:5;12621:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12621:21:0::1;::::0;;12657:11:::1;::::0;:34;;-1:-1:-1;;;12657:34:0;;::::1;::::0;::::1;16150:74:1::0;;;;16240:18;;;16233:50;;;;12657:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;16123:18:1;;12657:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;12592:480;12728:17;::::0;:22;12724:135:::1;;12817:6;12797:17;;12779:15;:35;;;;:::i;:::-;:44;12771:72;;;::::0;-1:-1:-1;;;12771:72:0;;16496:2:1;12771:72:0::1;::::0;::::1;16478:21:1::0;16535:2;16515:18;;;16508:30;16574:17;16554:18;;;16547:45;16609:18;;12771:72:0::1;16294:339:1::0;12771:72:0::1;-1:-1:-1::0;;;;;12882:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;12881:14;12873:54;;;::::0;-1:-1:-1;;;12873:54:0;;16840:2:1;12873:54:0::1;::::0;::::1;16822:21:1::0;16879:2;16859:18;;;16852:30;16918:29;16898:18;;;16891:57;16965:18;;12873:54:0::1;16638:351:1::0;12873:54:0::1;-1:-1:-1::0;;;;;12942:13:0;;::::1;;::::0;;;12958:4:::1;12942:13;::::0;;;;;;;;:20;;-1:-1:-1;;12942:20:0::1;::::0;::::1;::::0;;12997:15:::1;12977:17;:35:::0;13027:11:::1;::::0;:33;;-1:-1:-1;;;13027:33:0;;::::1;::::0;::::1;16150:74:1::0;;;;16240:18;;;16233:50;13027:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;16123:18:1;;13027:33:0::1;15982:307:1::0;11330:175:0;7514:6;;11396:4;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;11445:9:::1;::::0;11413:62:::1;::::0;11430:4:::1;::::0;11445:9:::1;::::0;::::1;-1:-1:-1::0;;;;;11445:9:0::1;-1:-1:-1::0;;11413:8:0::1;:62::i;:::-;-1:-1:-1::0;11493:4:0::1;11330:175:::0;:::o;22792:737::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;22854:14:::1;::::0;::::1;;22853:15;22845:52;;;::::0;-1:-1:-1;;;22845:52:0;;17196:2:1;22845:52:0::1;::::0;::::1;17178:21:1::0;17235:2;17215:18;;;17208:30;17274:26;17254:18;;;17247:54;17318:18;;22845:52:0::1;16994:348:1::0;22845:52:0::1;22916:16;::::0;::::1;::::0;::::1;;;22908:53;;;::::0;-1:-1:-1;;;22908:53:0;;17549:2:1;22908:53:0::1;::::0;::::1;17531:21:1::0;17588:2;17568:18;;;17561:30;17627:26;17607:18;;;17600:54;17671:18;;22908:53:0::1;17347:348:1::0;22908:53:0::1;22984:11;::::0;;;::::1;-1:-1:-1::0;;;;;22984:11:0::1;22972:106;;23026:11;:40:::0;;-1:-1:-1;;;;;;23026:40:0::1;23060:4;23026:40:::0;::::1;;::::0;;22972:106:::1;23092:11;::::0;23114:6:::1;::::0;23092:87:::1;::::0;-1:-1:-1;;;23092:87:0;;-1:-1:-1;;;;;23114:6:0;;::::1;23092:87;::::0;::::1;17923:74:1::0;18045:10;23129:12:0::1;18033:23:1::0;18013:18;;;18006:51;18105:18;23151:15:0::1;18093:31:1::0;18073:18;;;18066:59;4884:2:0::1;18141:18:1::0;;;18134:45;23092:11:0;;;::::1;;::::0;:21:::1;::::0;17895:19:1;;23092:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;23205:11:0::1;::::0;23236:6:::1;::::0;-1:-1:-1;;;;;23236:6:0;;::::1;10611:7:::0;10638:16;;;;;;;;;;;;;23205:39;;-1:-1:-1;;;23205:39:0;;::::1;::::0;::::1;391:25:1::0;;;;23205:11:0;;;::::1;;::::0;:20:::1;::::0;364:18:1;;23205:39:0::1;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;23205:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;23205:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;23201:207:::0;::::1;;23316:13;:29:::0;;;;23360:10:::1;:27:::0;23201:207:::1;23418:14;:21:::0;;-1:-1:-1;;23418:21:0;;::::1;23435:4;23418:21;::::0;;;23450:23:::1;:31:::0;;;;::::1;::::0;;23506:15:::1;23492:11;:29:::0;22792:737::o;10670:165::-;10748:4;10765:40;10775:10;10787:9;10798:6;10765:9;:40::i;:::-;-1:-1:-1;10823:4:0;;10670:165;-1:-1:-1;;;10670:165:0:o;23727:296::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;23805:16:::1;::::0;::::1;::::0;::::1;;;23801:111;;;23863:4;-1:-1:-1::0;;;;;23846:22:0;::::1;::::0;23838:62:::1;;;::::0;-1:-1:-1;;;23838:62:0;;18642:2:1;23838:62:0::1;::::0;::::1;18624:21:1::0;18681:2;18661:18;;;18654:30;18720:29;18700:18;;;18693:57;18767:18;;23838:62:0::1;18440:351:1::0;23838:62:0::1;23976:6;::::0;23984:30:::1;::::0;-1:-1:-1;;;23984:30:0;;24008:4:::1;23984:30;::::0;::::1;160:74:1::0;23944:5:0;;-1:-1:-1;;;;;23961:14:0;;::::1;::::0;::::1;::::0;23976:6;;;::::1;::::0;23961:14;;23984:15:::1;::::0;133:18:1;;23984:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23961:54;::::0;-1:-1:-1;;;;;;23961:54:0::1;::::0;;;;;;-1:-1:-1;;;;;19177:55:1;;;23961:54:0::1;::::0;::::1;19159:74:1::0;19249:18;;;19242:34;19132:18;;23961:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8863:482::-:0;8945:16;;-1:-1:-1;;;;;8945:16:0;8931:10;:30;8923:83;;;;-1:-1:-1;;;8923:83:0;;13623:2:1;8923:83:0;;;13605:21:1;13662:2;13642:18;;;13635:30;13701:34;13681:18;;;13674:62;-1:-1:-1;;;13752:18:1;;;13745:38;13800:19;;8923:83:0;13421:404:1;8923:83:0;9039:8;;-1:-1:-1;;;;;9039:8:0;9062:25;;9058:150;;-1:-1:-1;;;;;9104:30:0;;9137:5;9104:30;;;:17;:30;;;;;:38;;-1:-1:-1;;9104:38:0;;;9157:39;;9122:11;;9157:19;:39::i;:::-;9218:8;:22;;-1:-1:-1;;;;;;9218:22:0;-1:-1:-1;;;;;9218:22:0;;;;;;;;-1:-1:-1;9251:30:0;;;:17;:30;;;;;:37;;-1:-1:-1;;9251:37:0;-1:-1:-1;9251:37:0;;;;;;9299:38;;9218:22;;9299:19;:38::i;15600:374::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;15687:7:::1;:29:::0;;::::1;15727:33:::0;;::::1;::::0;::::1;-1:-1:-1::0;;15727:33:0;;;15687:29;;::::1;15727:33:::0;::::1;::::0;;15791:23:::1;15749:11:::0;15707:9;15791:23:::1;:::i;:::-;15771:7;:43:::0;;-1:-1:-1;;15771:43:0::1;::::0;::::1;::::0;;::::1;;;::::0;;15860:9:::1;:17:::0;-1:-1:-1;;15841:36:0::1;::::0;15860:17;;::::1;::::0;::::1;::::0;15841:16:::1;:36;:::i;:::-;15896:7;:17:::0;15825:52:::1;::::0;;::::1;::::0;-1:-1:-1;15896:17:0;;::::1;;:26:::0;-1:-1:-1;15896:26:0::1;15888:78;;;::::0;-1:-1:-1;;;15888:78:0;;19912:2:1;15888:78:0::1;::::0;::::1;19894:21:1::0;19951:2;19931:18;;;19924:30;19990:34;19970:18;;;19963:62;-1:-1:-1;;;20041:18:1;;;20034:37;20088:19;;15888:78:0::1;19710:403:1::0;17318:263:0;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;17427:19:::1;:33:::0;;-1:-1:-1;;;;17427:33:0::1;-1:-1:-1::0;;;17427:33:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;17471:22:::1;:47:::0;;-1:-1:-1;;17471:47:0::1;::::0;::::1;;;::::0;;17534:39:::1;::::0;2242:41:1;;;17534:39:0::1;::::0;2230:2:1;2215:18;17534:39:0::1;;;;;;;;17318:263:::0;;:::o;11827:680::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;11907:16:::1;::::0;::::1;::::0;::::1;;;11906:17;11898:60;;;::::0;-1:-1:-1;;;11898:60:0;;20320:2:1;11898:60:0::1;::::0;::::1;20302:21:1::0;20359:2;20339:18;;;20332:30;20398:32;20378:18;;;20371:60;20448:18;;11898:60:0::1;20118:354:1::0;11898:60:0::1;11969:20;12002:9;11969:43;;12023:16;12053:10;-1:-1:-1::0;;;;;12053:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12042:40:0::1;;12091:4;12098:10;-1:-1:-1::0;;;;;12098:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12042:74;::::0;-1:-1:-1;;;;;;12042:74:0::1;::::0;;;;;;-1:-1:-1;;;;;20986:15:1;;;12042:74:0::1;::::0;::::1;20968:34:1::0;21038:15;;21018:18;;;21011:43;20880:18;;12042:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12135:6;::::0;-1:-1:-1;;;;;12135:6:0;;::::1;12145:5;12127:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;12127:23:0::1;::::0;;12023:93;;-1:-1:-1;12165:22:0;::::1;12161:200;;12224:10;-1:-1:-1::0;;;;;12224:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12213:43:0::1;;12265:4;12272:10;-1:-1:-1::0;;;;;12272:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12213:77;::::0;-1:-1:-1;;;;;;12213:77:0::1;::::0;;;;;;-1:-1:-1;;;;;20986:15:1;;;12213:77:0::1;::::0;::::1;20968:34:1::0;21038:15;;21018:18;;;21011:43;20880:18;;12213:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12204:6;:86:::0;;-1:-1:-1;;;;;;12204:86:0::1;-1:-1:-1::0;;;;;12204:86:0;;;::::1;::::0;;;::::1;::::0;;12161:200:::1;;;12332:6;:17:::0;;-1:-1:-1;;;;;;12332:17:0::1;-1:-1:-1::0;;;;;12332:17:0;::::1;;::::0;;12161:200:::1;12371:9;:22:::0;;-1:-1:-1;;12371:22:0::1;;-1:-1:-1::0;;;;;12371:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12412:6:::1;::::0;;::::1;-1:-1:-1::0;12404:15:0;;;-1:-1:-1;12404:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;12404:22:0::1;::::0;;::::1;::::0;;12469:9;;12437:62:::1;::::0;12454:4:::1;::::0;12469:9;::::1;;-1:-1:-1::0;;12437:8:0::1;:62::i;15982:199::-:0;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;-1:-1:-1;;;;;16069:25:0;::::1;16061:61;;;::::0;-1:-1:-1;;;16061:61:0;;21267:2:1;16061:61:0::1;::::0;::::1;21249:21:1::0;21306:2;21286:18;;;21279:30;21345:25;21325:18;;;21318:53;21388:18;;16061:61:0::1;21065:347:1::0;16061:61:0::1;16133:17;:40:::0;;-1:-1:-1;;;;;;16133:40:0::1;-1:-1:-1::0;;;;;16133:40:0;;;::::1;::::0;;;::::1;::::0;;15982:199::o;23537:182::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;23604:16:::1;::::0;::::1;::::0;::::1;;;23603:17;23595:58;;;::::0;-1:-1:-1;;;23595:58:0;;21619:2:1;23595:58:0::1;::::0;::::1;21601:21:1::0;21658:2;21638:18;;;21631:30;21697;21677:18;;;21670:58;21745:18;;23595:58:0::1;21417:352:1::0;23595:58:0::1;23672:6;::::0;23664:47:::1;::::0;-1:-1:-1;;;;;23672:6:0;;::::1;::::0;23689:21:::1;23664:47:::0;::::1;;;::::0;23672:6:::1;23664:47:::0;23672:6;23664:47;23689:21;23672:6;23664:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;16386:699:::0;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;16586:16;16566;4945:13:::1;4884:2;4945;:13;:::i;:::-;4928:30;::::0;4734:13:::1;4928:30;:::i;:::-;16556:26;;;;:::i;:::-;16555:47;;;;:::i;:::-;16539:13;:63:::0;16654:13;16637;4945::::1;4884:2;4945;:13;:::i;:::-;4928:30;::::0;4734:13:::1;4928:30;:::i;:::-;16627:23;;;;:::i;:::-;16626:41;;;;:::i;:::-;16613:10;:54:::0;;;16686:13:::1;::::0;:27:::1;;16678:73;;;::::0;-1:-1:-1;;;16678:73:0;;21976:2:1;16678:73:0::1;::::0;::::1;21958:21:1::0;22015:2;21995:18;;;21988:30;22054:34;22034:18;;;22027:62;-1:-1:-1;;;22105:18:1;;;22098:31;22146:19;;16678:73:0::1;21774:397:1::0;16678:73:0::1;16795:6;::::0;-1:-1:-1;;;;;16795:6:0::1;10611:7:::0;10638:16;;;;;;;;;;;5616:5:::1;::::0;16785:23:::1;::::0;16805:3:::1;16785:23;:::i;:::-;16784:44;;;;:::i;:::-;16770:10;;:58;;16762:106;;;::::0;-1:-1:-1;;;16762:106:0;;22378:2:1;16762:106:0::1;::::0;::::1;22360:21:1::0;22417:2;22397:18;;;22390:30;22456:34;22436:18;;;22429:62;-1:-1:-1;;;22507:18:1;;;22500:33;22550:19;;16762:106:0::1;22176:399:1::0;16762:106:0::1;16911:9;4945:13;4884:2;4945;:13;:::i;:::-;4928:30;::::0;4734:13:::1;4928:30;:::i;:::-;16901:19;;;;:::i;:::-;16887:10;;:33;;16879:92;;;::::0;-1:-1:-1;;;16879:92:0;;22782:2:1;16879:92:0::1;::::0;::::1;22764:21:1::0;22821:2;22801:18;;;22794:30;22860:34;22840:18;;;22833:62;-1:-1:-1;;;22911:18:1;;;22904:44;22965:19;;16879:92:0::1;22580:410:1::0;16879:92:0::1;17017:9;4945:13;4884:2;4945;:13;:::i;:::-;4928:30;::::0;4734:13:::1;4928:30;:::i;:::-;17007:19;;;;:::i;:::-;16990:13;;:36;;16982:95;;;::::0;-1:-1:-1;;;16982:95:0;;22782:2:1;16982:95:0::1;::::0;::::1;22764:21:1::0;22821:2;22801:18;;;22794:30;22860:34;22840:18;;;22833:62;-1:-1:-1;;;22911:18:1;;;22904:44;22965:19;;16982:95:0::1;22580:410:1::0;16982:95:0::1;16386:699:::0;;;;:::o;14365:148::-;7514:6;;-1:-1:-1;;;;;7514:6:0;7524:10;7514:20;7506:50;;;;-1:-1:-1;;;7506:50:0;;8984:2:1;7506:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;7506:50:0;8782:341:1;7506:50:0;-1:-1:-1;;;;;14461:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14461:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14365:148::o;11012:310::-;-1:-1:-1;;;;;11107:20:0;;11099:52;;;;-1:-1:-1;;;11099:52:0;;23197:2:1;11099:52:0;;;23179:21:1;23236:2;23216:18;;;23209:30;-1:-1:-1;;;23255:18:1;;;23248:49;23314:18;;11099:52:0;22995:343:1;11099:52:0;-1:-1:-1;;;;;11170:21:0;;11162:53;;;;-1:-1:-1;;;11162:53:0;;23197:2:1;11162:53:0;;;23179:21:1;23236:2;23216:18;;;23209:30;-1:-1:-1;;;23255:18:1;;;23248:49;23314:18;;11162:53:0;22995:343:1;11162:53:0;-1:-1:-1;;;;;11228:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11281:33;;391:25:1;;;11281:33:0;;364:18:1;11281:33:0;;;;;;;11012:310;;;:::o;18860:1783::-;18939:4;-1:-1:-1;;;;;18964:18:0;;18956:68;;;;-1:-1:-1;;;18956:68:0;;23545:2:1;18956:68:0;;;23527:21:1;23584:2;23564:18;;;23557:30;23623:34;23603:18;;;23596:62;-1:-1:-1;;;23674:18:1;;;23667:35;23719:19;;18956:68:0;23343:401:1;18956:68:0;-1:-1:-1;;;;;19043:16:0;;19035:64;;;;-1:-1:-1;;;19035:64:0;;23951:2:1;19035:64:0;;;23933:21:1;23990:2;23970:18;;;23963:30;24029:34;24009:18;;;24002:62;-1:-1:-1;;;24080:18:1;;;24073:33;24123:19;;19035:64:0;23749:399:1;19035:64:0;19127:1;19118:6;:10;19110:64;;;;-1:-1:-1;;;19110:64:0;;24355:2:1;19110:64:0;;;24337:21:1;24394:2;24374:18;;;24367:30;24433:34;24413:18;;;24406:62;-1:-1:-1;;;24484:18:1;;;24477:39;24533:19;;19110:64:0;24153:405:1;19110:64:0;-1:-1:-1;;;;;19273:13:0;;19185:8;19273:13;;;:7;:13;;;;;;19185:8;;;;19273:13;;19269:162;;;19309:4;19303:10;;19269:162;;;-1:-1:-1;;;;;19335:11:0;;;;;;:7;:11;;;;;;;;19331:100;;;19370:4;19363:11;;19331:100;;;-1:-1:-1;19415:4:0;19331:100;19445:20;19456:4;19462:2;19445:10;:20::i;:::-;19441:371;;;19486:14;;;;19482:319;;19526:5;19521:265;;19556:34;;-1:-1:-1;;;19556:34:0;;24765:2:1;19556:34:0;;;24747:21:1;24804:2;24784:18;;;24777:30;24843:26;24823:18;;;24816:54;24887:18;;19556:34:0;24563:348:1;19521:265:0;-1:-1:-1;;;;;19621:31:0;;;;;;:25;:31;;;;;;;;19620:32;:66;;;;-1:-1:-1;;;;;;19657:29:0;;;;;;:25;:29;;;;;;;;19656:30;19620:66;19616:170;;;19711:55;;-1:-1:-1;;;19711:55:0;;25118:2:1;19711:55:0;;;25100:21:1;25157:2;25137:18;;;25130:30;25196:34;25176:18;;;25169:62;-1:-1:-1;;;25247:18:1;;;25240:43;25300:19;;19711:55:0;24916:409:1;19616:170:0;19828:4;19824:742;;;19854:6;;-1:-1:-1;;;19854:6:0;;;;19849:706;;19885:19;;-1:-1:-1;;;19885:19:0;;;;:64;;;;-1:-1:-1;;;;;;19929:20:0;;;;;;:16;:20;;;;;;;;19928:21;19885:64;:111;;;;-1:-1:-1;;;;;;19974:22:0;;;;;;:16;:22;;;;;;;;19973:23;19885:111;19881:659;;;20088:4;20039:28;10638:16;;;;;;;;;;;20145:13;;20121:37;;20117:404;;20205:10;;20246:22;;;;20242:97;;;20303:13;;20293:6;;-1:-1:-1;;;;;20293:6:0;10611:7;10638:16;;;;;;;;;;;5616:5;;20283:33;;;:::i;:::-;20282:54;;;;:::i;:::-;20272:64;;20242:97;20393:7;20369:20;:31;20365:72;;20427:7;20404:30;;20365:72;20463:34;20476:20;20463:12;:34::i;:::-;20160:361;20117:404;20016:524;19881:659;20583:52;20600:4;20606:2;20610:6;20618:3;20623:4;20629:5;20583:16;:52::i;:::-;20576:59;18860:1783;-1:-1:-1;;;;;;;18860:1783:0:o;24486:1055::-;24605:4;24626:20;24637:4;24643:2;24626:10;:20::i;:::-;24622:228;;;24681:11;;:39;;-1:-1:-1;;;24681:39:0;;-1:-1:-1;;;;;25611:15:1;;;24681:39:0;;;25593:34:1;25663:15;;;25643:18;;;25636:43;25695:18;;;25688:34;;;24650:12:0;;24681:11;;;;;:21;;25505:18:1;;24681:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;24681:39:0;;;;;;;;-1:-1:-1;;24681:39:0;;;;;;;;;;;;:::i;:::-;;;24677:122;;24788:8;;;24677:122;24771:5;-1:-1:-1;24817:7:0;24813:26;;24828:8;;;24813:26;24648:202;24622:228;-1:-1:-1;;;;;24894:25:0;;24860:12;24894:25;;;:19;:25;;;;;;24875:4;;24894:25;;;:52;;-1:-1:-1;;;;;;24923:23:0;;;;;;:19;:23;;;;;;;;24894:52;24890:99;;;-1:-1:-1;24972:5:0;24890:99;-1:-1:-1;;;;;24999:13:0;;:7;:13;;;;;;;;;;:23;;25016:6;;24999:7;:23;;25016:6;;24999:23;:::i;:::-;;;;-1:-1:-1;25033:22:0;;-1:-1:-1;25059:7:0;25058:55;;25107:6;25058:55;;;25070:34;25080:4;25086:6;25094:3;25099:4;25070:9;:34::i;:::-;25033:80;;25139:14;25124:7;:11;25132:2;-1:-1:-1;;;;;25124:11:0;-1:-1:-1;;;;;25124:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;25184:2;-1:-1:-1;;;;;25169:34:0;25178:4;-1:-1:-1;;;;;25169:34:0;;25188:14;25169:34;;;;391:25:1;;379:2;364:18;;245:177;25169:34:0;;;;;;;;25219:16;;;;;;;25214:298;;25252:28;25271:4;25277:2;25252:18;:28::i;:::-;25300:16;;;;;;;25299:17;:41;;;;;25320:20;25331:4;25337:2;25320:10;:20::i;:::-;25299:77;;;;-1:-1:-1;;;;;;25345:31:0;;;;;;:25;:31;;;;;;;;25344:32;25299:77;:111;;;;-1:-1:-1;;;;;;25381:29:0;;;;;;:25;:29;;;;;;;;25380:30;25299:111;:121;;;;;25415:5;25414:6;25299:121;25295:206;;;25441:44;;-1:-1:-1;;;25441:44:0;;25935:2:1;25441:44:0;;;25917:21:1;25974:2;25954:18;;;25947:30;26013:34;25993:18;;;25986:62;-1:-1:-1;;;26064:18:1;;;26057:32;26106:19;;25441:44:0;25733:398:1;25295:206:0;-1:-1:-1;25529:4:0;;24486:1055;-1:-1:-1;;;;;;;;24486:1055:0:o;18406:446::-;18507:6;;18475:4;;-1:-1:-1;;;;;18499:14:0;;;18507:6;;18499:14;;;;:43;;-1:-1:-1;18536:6:0;;-1:-1:-1;;;;;18530:12:0;;;18536:6;;18530:12;;18499:43;:79;;;;-1:-1:-1;18572:6:0;;-1:-1:-1;;;;;18572:6:0;18559:9;:19;;18499:79;:118;;;;-1:-1:-1;;;;;;18596:21:0;;;;;;:17;:21;;;;;;;;18595:22;18499:118;:159;;;;-1:-1:-1;;;;;;18635:23:0;;;;;;:17;:23;;;;;;;;18634:24;18499:159;:186;;;;-1:-1:-1;;;;;;18675:10:0;;5755:42;18675:10;;18499:186;:219;;;;-1:-1:-1;;;;;;18702:16:0;;;;18499:219;:257;;;;-1:-1:-1;;;;;;18735:21:0;;18751:4;18735:21;;18499:257;:302;;;;-1:-1:-1;18789:11:0;;-1:-1:-1;;;;;18773:28:0;;;18789:11;;;;;18773:28;;18499:302;:345;;;;-1:-1:-1;18832:11:0;;-1:-1:-1;;;;;18818:26:0;;;18832:11;;;;;18818:26;;18499:345;18492:352;18406:446;-1:-1:-1;;;18406:446:0:o;20651:1562::-;6428:6;:13;;-1:-1:-1;;;;6428:13:0;-1:-1:-1;;;6428:13:0;;;20734:30:::1;::::0;;::::1;::::0;::::1;::::0;;20757:7:::1;20734:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;6428:13;20779:21;20775:60:::1;;20817:7;;;20775:60;20871:4;20851:26;::::0;;;:11:::1;:26;::::0;;;;;;;20886:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;20886:9:0::1;20851:46:::0;;;;;;;;-1:-1:-1;;20851:67:0::1;20847:166;;20955:4;20935:26;::::0;;;:11:::1;:26;::::0;;;;;;;20970:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;20970:9:0::1;20935:46:::0;;;;;;;-1:-1:-1;;20935:66:0;;20847:166:::1;21025:17;21110:1;21090:6;:16;;;21046:60;;21070:6;:16;;;21047:39;;:20;:39;;;;:::i;:::-;21046:60;;;;:::i;:::-;21045:66;;;;:::i;:::-;21025:86:::0;-1:-1:-1;21122:15:0::1;21140:32;21025:86:::0;21140:20;:32:::1;:::i;:::-;21217:16;::::0;;21231:1:::1;21217:16:::0;;;;;::::1;::::0;;21122:50;;-1:-1:-1;21193:21:0::1;::::0;21217:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21217:16:0::1;21193:40;;21262:4;21244;21249:1;21244:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;21244:23:0::1;;;-1:-1:-1::0;;;;;21244:23:0::1;;;::::0;::::1;21288:9;;;;;;;;;-1:-1:-1::0;;;;;21288:9:0::1;-1:-1:-1::0;;;;;21288:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21278:4;21283:1;21278:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21278:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;21321:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;21321:186:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;21396:7;;21418:1:::1;::::0;21434:4;;21461::::1;::::0;21481:15:::1;::::0;21321:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21317:233;;21532:7;;;;;;21317:233;21583:21;21562:18;21669:7:::0;21643:22:::1;21656:9:::0;21583:21;21643:22:::1;:::i;:::-;21642:34;;;;:::i;:::-;21615:61:::0;-1:-1:-1;21693:13:0;;21689:400:::1;;21727:9;::::0;:222:::1;::::0;-1:-1:-1;;;21727:222:0;;21804:4:::1;21727:222;::::0;::::1;27531:34:1::0;27581:18;;;27574:34;;;21856:1:0::1;27624:18:1::0;;;27617:34;;;27667:18;;;27660:34;5755:42:0::1;27710:19:1::0;;;27703:44;21919:15:0::1;27763:19:1::0;;;27756:35;21727:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;21727:9:0::1;::::0;:25:::1;::::0;21760:16;;27442:19:1;;21727:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;21727:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;21727:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;21723:355;;22056:7;;;;;;;;21723:355;-1:-1:-1::0;;21974:40:0::1;::::0;;28287:25:1;;;28343:2;28328:18;;28321:34;;;21974:40:0::1;::::0;-1:-1:-1;28260:18:1;21974:40:0::1;;;;;;;21723:355;22137:17;::::0;:68:::1;::::0;22101:12:::1;::::0;-1:-1:-1;;;;;22137:17:0::1;::::0;22195:5:::1;::::0;22167:21:::1;::::0;22101:12;22137:68;22101:12;22137:68;22167:21;22137:17;22195:5;22137:68:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;6452:1:0::1;-1:-1:-1::0;6464:6:0;:14;;-1:-1:-1;;;;6464:14:0;;;20651:1562::o;25549:767::-;25637:7;25657:18;25690:3;25686:205;;;-1:-1:-1;25723:9:0;:16;;;25686:205;;;25761:4;25757:134;;;-1:-1:-1;25795:9:0;:17;;;;;;25757:134;;;-1:-1:-1;25858:9:0;:21;;;;;;25757:134;25905:10;25919:1;25905:15;25901:39;;25931:6;25924:13;;;;;25901:39;25962:11;;;;;-1:-1:-1;;;;;25962:11:0;25986:4;25954:37;:73;;;;;26008:13;26025:2;26008:19;;25954:73;25950:101;;;-1:-1:-1;26044:4:0;25950:101;26061:17;5616:5;26081:19;26090:10;26081:6;:19;:::i;:::-;:38;;;;:::i;:::-;26061:58;-1:-1:-1;26134:13:0;;26130:141;;26180:4;26164:7;:22;;;;;;;;;;:35;;26190:9;;26164:7;:35;;26190:9;;26164:35;:::i;:::-;;;;-1:-1:-1;;26219:40:0;;391:25:1;;;26242:4:0;;-1:-1:-1;;;;;26219:40:0;;;;;379:2:1;364:18;26219:40:0;;;;;;;26130:141;26290:18;26299:9;26290:6;:18;:::i;22221:563::-;22304:16;;;;;;;22303:17;22295:65;;;;-1:-1:-1;;;22295:65:0;;28778:2:1;22295:65:0;;;28760:21:1;28817:2;28797:18;;;28790:30;28856:34;28836:18;;;28829:62;-1:-1:-1;;;28907:18:1;;;28900:33;28950:19;;22295:65:0;28576:399:1;22295:65:0;22376:20;22387:4;22393:2;22376:10;:20::i;:::-;22375:21;:37;;;;-1:-1:-1;22406:6:0;;-1:-1:-1;;;;;22400:12:0;;;22406:6;;22400:12;22375:37;22371:406;;;-1:-1:-1;;;;;22429:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;22429:30:0;;;22455:4;22429:30;;;;;;22474:19;:25;;;;;:32;;;;;;;;;;22521:16;:23;;-1:-1:-1;;22521:23:0;22429:30;22521:23;;;;;22571:11;;;;22559:114;;22617:11;:40;;-1:-1:-1;;;;;;22617:40:0;22651:4;22617:40;;;;;22559:114;22687:19;:26;;-1:-1:-1;;;;22687:26:0;-1:-1:-1;;;22687:26:0;;;22733:32;;-1:-1:-1;2242:41:1;;22733:32:0;;2230:2:1;2215:18;22733:32:0;2102:187:1;427:118;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:548::-;1413:4;1442:2;1471;1460:9;1453:21;1503:6;1497:13;1546:6;1541:2;1530:9;1526:18;1519:34;1571:1;1581:140;1595:6;1592:1;1589:13;1581:140;;;1690:14;;;1686:23;;1680:30;1656:17;;;1675:2;1652:26;1645:66;1610:10;;1581:140;;;1585:3;1770:1;1765:2;1756:6;1745:9;1741:22;1737:31;1730:42;1840:2;1833;1829:7;1824:2;1816:6;1812:15;1808:29;1797:9;1793:45;1789:54;1781:62;;;;1301:548;;;;:::o;2294:154::-;-1:-1:-1;;;;;2373:5:1;2369:54;2362:5;2359:65;2349:93;;2438:1;2435;2428:12;2453:315;2521:6;2529;2582:2;2570:9;2561:7;2557:23;2553:32;2550:52;;;2598:1;2595;2588:12;2550:52;2637:9;2624:23;2656:31;2681:5;2656:31;:::i;:::-;2706:5;2758:2;2743:18;;;;2730:32;;-1:-1:-1;;;2453:315:1:o;2773:247::-;2832:6;2885:2;2873:9;2864:7;2860:23;2856:32;2853:52;;;2901:1;2898;2891:12;2853:52;2940:9;2927:23;2959:31;2984:5;2959:31;:::i;3025:388::-;3093:6;3101;3154:2;3142:9;3133:7;3129:23;3125:32;3122:52;;;3170:1;3167;3160:12;3122:52;3209:9;3196:23;3228:31;3253:5;3228:31;:::i;:::-;3278:5;-1:-1:-1;3335:2:1;3320:18;;3307:32;3348:33;3307:32;3348:33;:::i;3418:456::-;3495:6;3503;3511;3564:2;3552:9;3543:7;3539:23;3535:32;3532:52;;;3580:1;3577;3570:12;3532:52;3619:9;3606:23;3638:31;3663:5;3638:31;:::i;:::-;3688:5;-1:-1:-1;3745:2:1;3730:18;;3717:32;3758:33;3717:32;3758:33;:::i;:::-;3418:456;;3810:7;;-1:-1:-1;;;3864:2:1;3849:18;;;;3836:32;;3418:456::o;3879:127::-;3940:10;3935:3;3931:20;3928:1;3921:31;3971:4;3968:1;3961:15;3995:4;3992:1;3985:15;4011:275;4082:2;4076:9;4147:2;4128:13;;-1:-1:-1;;4124:27:1;4112:40;;4182:18;4167:34;;4203:22;;;4164:62;4161:88;;;4229:18;;:::i;:::-;4265:2;4258:22;4011:275;;-1:-1:-1;4011:275:1:o;4291:183::-;4351:4;4384:18;4376:6;4373:30;4370:56;;;4406:18;;:::i;:::-;-1:-1:-1;4451:1:1;4447:14;4463:4;4443:25;;4291:183::o;4479:662::-;4533:5;4586:3;4579:4;4571:6;4567:17;4563:27;4553:55;;4604:1;4601;4594:12;4553:55;4640:6;4627:20;4666:4;4690:60;4706:43;4746:2;4706:43;:::i;:::-;4690:60;:::i;:::-;4784:15;;;4870:1;4866:10;;;;4854:23;;4850:32;;;4815:12;;;;4894:15;;;4891:35;;;4922:1;4919;4912:12;4891:35;4958:2;4950:6;4946:15;4970:142;4986:6;4981:3;4978:15;4970:142;;;5052:17;;5040:30;;5090:12;;;;5003;;4970:142;;;-1:-1:-1;5130:5:1;4479:662;-1:-1:-1;;;;;;4479:662:1:o;5146:1215::-;5264:6;5272;5325:2;5313:9;5304:7;5300:23;5296:32;5293:52;;;5341:1;5338;5331:12;5293:52;5381:9;5368:23;5410:18;5451:2;5443:6;5440:14;5437:34;;;5467:1;5464;5457:12;5437:34;5505:6;5494:9;5490:22;5480:32;;5550:7;5543:4;5539:2;5535:13;5531:27;5521:55;;5572:1;5569;5562:12;5521:55;5608:2;5595:16;5630:4;5654:60;5670:43;5710:2;5670:43;:::i;5654:60::-;5748:15;;;5830:1;5826:10;;;;5818:19;;5814:28;;;5779:12;;;;5854:19;;;5851:39;;;5886:1;5883;5876:12;5851:39;5910:11;;;;5930:217;5946:6;5941:3;5938:15;5930:217;;;6026:3;6013:17;6043:31;6068:5;6043:31;:::i;:::-;6087:18;;5963:12;;;;6125;;;;5930:217;;;6166:5;-1:-1:-1;;6209:18:1;;6196:32;;-1:-1:-1;;6240:16:1;;;6237:36;;;6269:1;6266;6259:12;6237:36;;6292:63;6347:7;6336:8;6325:9;6321:24;6292:63;:::i;:::-;6282:73;;;5146:1215;;;;;:::o;6555:159::-;6622:20;;6682:6;6671:18;;6661:29;;6651:57;;6704:1;6701;6694:12;6651:57;6555:159;;;:::o;6719:328::-;6793:6;6801;6809;6862:2;6850:9;6841:7;6837:23;6833:32;6830:52;;;6878:1;6875;6868:12;6830:52;6901:28;6919:9;6901:28;:::i;:::-;6891:38;;6948:37;6981:2;6970:9;6966:18;6948:37;:::i;:::-;6938:47;;7004:37;7037:2;7026:9;7022:18;7004:37;:::i;:::-;6994:47;;6719:328;;;;;:::o;7052:382::-;7117:6;7125;7178:2;7166:9;7157:7;7153:23;7149:32;7146:52;;;7194:1;7191;7184:12;7146:52;7233:9;7220:23;7252:31;7277:5;7252:31;:::i;7439:180::-;7498:6;7551:2;7539:9;7530:7;7526:23;7522:32;7519:52;;;7567:1;7564;7557:12;7519:52;-1:-1:-1;7590:23:1;;7439:180;-1:-1:-1;7439:180:1:o;7624:256::-;7690:6;7698;7751:2;7739:9;7730:7;7726:23;7722:32;7719:52;;;7767:1;7764;7757:12;7719:52;7790:28;7808:9;7790:28;:::i;:::-;7780:38;;7837:37;7870:2;7859:9;7855:18;7837:37;:::i;:::-;7827:47;;7624:256;;;;;:::o;8392:385::-;8478:6;8486;8494;8502;8555:3;8543:9;8534:7;8530:23;8526:33;8523:53;;;8572:1;8569;8562:12;8523:53;-1:-1:-1;;8595:23:1;;;8665:2;8650:18;;8637:32;;-1:-1:-1;8716:2:1;8701:18;;8688:32;;8767:2;8752:18;8739:32;;-1:-1:-1;8392:385:1;-1:-1:-1;8392:385:1:o;9741:127::-;9802:10;9797:3;9793:20;9790:1;9783:31;9833:4;9830:1;9823:15;9857:4;9854:1;9847:15;9873:422;9962:1;10005:5;9962:1;10019:270;10040:7;10030:8;10027:21;10019:270;;;10099:4;10095:1;10091:6;10087:17;10081:4;10078:27;10075:53;;;10108:18;;:::i;:::-;10158:7;10148:8;10144:22;10141:55;;;10178:16;;;;10141:55;10257:22;;;;10217:15;;;;10019:270;;;10023:3;9873:422;;;;;:::o;10300:806::-;10349:5;10379:8;10369:80;;-1:-1:-1;10420:1:1;10434:5;;10369:80;10468:4;10458:76;;-1:-1:-1;10505:1:1;10519:5;;10458:76;10550:4;10568:1;10563:59;;;;10636:1;10631:130;;;;10543:218;;10563:59;10593:1;10584:10;;10607:5;;;10631:130;10668:3;10658:8;10655:17;10652:43;;;10675:18;;:::i;:::-;-1:-1:-1;;10731:1:1;10717:16;;10746:5;;10543:218;;10845:2;10835:8;10832:16;10826:3;10820:4;10817:13;10813:36;10807:2;10797:8;10794:16;10789:2;10783:4;10780:12;10776:35;10773:77;10770:159;;;-1:-1:-1;10882:19:1;;;10914:5;;10770:159;10961:34;10986:8;10980:4;10961:34;:::i;:::-;11031:6;11027:1;11023:6;11019:19;11010:7;11007:32;11004:58;;;11042:18;;:::i;:::-;11080:20;;10300:806;-1:-1:-1;;;10300:806:1:o;11111:140::-;11169:5;11198:47;11239:4;11229:8;11225:19;11219:4;11198:47;:::i;11256:168::-;11329:9;;;11360;;11377:15;;;11371:22;;11357:37;11347:71;;11398:18;;:::i;11429:128::-;11496:9;;;11517:11;;;11514:37;;;11531:18;;:::i;11912:127::-;11973:10;11968:3;11964:20;11961:1;11954:31;12004:4;12001:1;11994:15;12028:4;12025:1;12018:15;12391:197;12429:3;12457:6;12498:2;12491:5;12487:14;12525:2;12516:7;12513:15;12510:41;;12531:18;;:::i;:::-;12580:1;12567:15;;12391:197;-1:-1:-1;;;12391:197:1:o;12593:125::-;12658:9;;;12679:10;;;12676:36;;;12692:18;;:::i;13830:217::-;13870:1;13896;13886:132;;13940:10;13935:3;13931:20;13928:1;13921:31;13975:4;13972:1;13965:15;14003:4;14000:1;13993:15;13886:132;-1:-1:-1;14032:9:1;;13830:217::o;15176:385::-;15255:6;15263;15316:2;15304:9;15295:7;15291:23;15287:32;15284:52;;;15332:1;15329;15322:12;15284:52;15364:9;15358:16;15383:31;15408:5;15383:31;:::i;:::-;15483:2;15468:18;;15462:25;15433:5;;-1:-1:-1;15496:33:1;15462:25;15496:33;:::i;18190:245::-;18269:6;18277;18330:2;18318:9;18309:7;18305:23;18301:32;18298:52;;;18346:1;18343;18336:12;18298:52;-1:-1:-1;;18369:16:1;;18425:2;18410:18;;;18404:25;18369:16;;18404:25;;-1:-1:-1;18190:245:1:o;18796:184::-;18866:6;18919:2;18907:9;18898:7;18894:23;18890:32;18887:52;;;18935:1;18932;18925:12;18887:52;-1:-1:-1;18958:16:1;;18796:184;-1:-1:-1;18796:184:1:o;19287:245::-;19354:6;19407:2;19395:9;19386:7;19382:23;19378:32;19375:52;;;19423:1;19420;19413:12;19375:52;19455:9;19449:16;19474:28;19496:5;19474:28;:::i;19537:168::-;19604:6;19630:10;;;19642;;;19626:27;;19665:11;;;19662:37;;;19679:18;;:::i;:::-;19662:37;19537:168;;;;:::o;20477:251::-;20547:6;20600:2;20588:9;20579:7;20575:23;20571:32;20568:52;;;20616:1;20613;20606:12;20568:52;20648:9;20642:16;20667:31;20692:5;20667:31;:::i;26136:1026::-;26398:4;26446:3;26435:9;26431:19;26477:6;26466:9;26459:25;26503:2;26541:6;26536:2;26525:9;26521:18;26514:34;26584:3;26579:2;26568:9;26564:18;26557:31;26608:6;26643;26637:13;26674:6;26666;26659:22;26712:3;26701:9;26697:19;26690:26;;26751:2;26743:6;26739:15;26725:29;;26772:1;26782:218;26796:6;26793:1;26790:13;26782:218;;;26861:13;;-1:-1:-1;;;;;26857:62:1;26845:75;;26975:15;;;;26940:12;;;;26818:1;26811:9;26782:218;;;-1:-1:-1;;;;;;;27056:55:1;;;;27051:2;27036:18;;27029:83;-1:-1:-1;;;27143:3:1;27128:19;27121:35;27017:3;26136:1026;-1:-1:-1;;;26136:1026:1:o;27802:306::-;27890:6;27898;27906;27959:2;27947:9;27938:7;27934:23;27930:32;27927:52;;;27975:1;27972;27965:12;27927:52;28004:9;27998:16;27988:26;;28054:2;28043:9;28039:18;28033:25;28023:35;;28098:2;28087:9;28083:18;28077:25;28067:35;;27802:306;;;;;:::o

Swarm Source

ipfs://8eec2678c29de9833ef25811465c39974ffb45895e7ba1c3b8556d5639e7294c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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