ETH Price: $3,464.82 (+1.47%)
Gas: 24 Gwei

Contract

0xE44aa0354341F02D51C14FE2248B005B2E3372d4
 

Overview

ETH Balance

0.000000148462985449 ETH

Eth Value

Less Than $0.01 (@ $3,464.82/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve201451132024-06-22 5:18:5925 days ago1719033539IN
0xE44aa035...B2E3372d4
0 ETH0.000058332
Approve199999512024-06-01 22:26:5945 days ago1717280819IN
0xE44aa035...B2E3372d4
0 ETH0.000328897.06627923
Approve199465832024-05-25 11:26:2353 days ago1716636383IN
0xE44aa035...B2E3372d4
0 ETH0.000175423.792453
Approve198383442024-05-10 8:08:4768 days ago1715328527IN
0xE44aa035...B2E3372d4
0 ETH0.000241995.19931317
Transfer198178972024-05-07 11:29:3571 days ago1715081375IN
0xE44aa035...B2E3372d4
0 ETH0.001078838
Approve197022042024-04-21 7:10:5987 days ago1713683459IN
0xE44aa035...B2E3372d4
0 ETH0.000368987.92768451
Approve192527242024-02-18 5:49:59150 days ago1708235399IN
0xE44aa035...B2E3372d4
0 ETH0.0007378515.85274642
Approve189995782024-01-13 17:52:35185 days ago1705168355IN
0xE44aa035...B2E3372d4
0 ETH0.000800617.20106482
Approve189415202024-01-05 13:59:23194 days ago1704463163IN
0xE44aa035...B2E3372d4
0 ETH0.0010215321.9478137
Approve185125522023-11-06 11:09:59254 days ago1699268999IN
0xE44aa035...B2E3372d4
0 ETH0.0011674725.08319524
Approve183048292023-10-08 9:19:47283 days ago1696756787IN
0xE44aa035...B2E3372d4
0 ETH0.000310846.67846199
Approve183041602023-10-08 7:05:11283 days ago1696748711IN
0xE44aa035...B2E3372d4
0 ETH0.000142565.86188148
Approve182947002023-10-06 23:20:59284 days ago1696634459IN
0xE44aa035...B2E3372d4
0 ETH0.000150216.17677674
Approve182539082023-10-01 6:30:11290 days ago1696141811IN
0xE44aa035...B2E3372d4
0 ETH0.000318286.83843469
Approve182494532023-09-30 15:36:11290 days ago1696088171IN
0xE44aa035...B2E3372d4
0 ETH0.0005628112.076445
Approve176990362023-07-15 13:19:35368 days ago1689427175IN
0xE44aa035...B2E3372d4
0 ETH0.0006452813.84604479
Approve171602772023-04-30 17:13:11443 days ago1682874791IN
0xE44aa035...B2E3372d4
0 ETH0.0014399454.53527069
Approve171602762023-04-30 17:12:59443 days ago1682874779IN
0xE44aa035...B2E3372d4
0 ETH0.0024762553.47821784
Transfer170645992023-04-17 6:01:59457 days ago1681711319IN
0xE44aa035...B2E3372d4
0 ETH0.0029827428.21091512
Transfer170633572023-04-17 1:47:23457 days ago1681696043IN
0xE44aa035...B2E3372d4
0 ETH0.0030519525.92333512
Approve166913182023-02-23 13:13:11510 days ago1677157991IN
0xE44aa035...B2E3372d4
0 ETH0.0015163732.57928353
Approve166904372023-02-23 10:15:11510 days ago1677147311IN
0xE44aa035...B2E3372d4
0 ETH0.0006499326.72432723
Approve166162182023-02-13 0:20:47520 days ago1676247647IN
0xE44aa035...B2E3372d4
0 ETH0.0011120523.8925968
Transfer166142932023-02-12 17:52:23520 days ago1676224343IN
0xE44aa035...B2E3372d4
0 ETH0.0015390317.36005594
Approve166142392023-02-12 17:41:35520 days ago1676223695IN
0xE44aa035...B2E3372d4
0 ETH0.0008423418.0977865
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
198383502024-05-10 8:09:5968 days ago1715328599
0xE44aa035...B2E3372d4
0.00569094 ETH
198383502024-05-10 8:09:5968 days ago1715328599
0xE44aa035...B2E3372d4
0.00569094 ETH
198383502024-05-10 8:09:5968 days ago1715328599
0xE44aa035...B2E3372d4
0.00000014 ETH
198383502024-05-10 8:09:5968 days ago1715328599
0xE44aa035...B2E3372d4
0.00094849 ETH
198383502024-05-10 8:09:5968 days ago1715328599
0xE44aa035...B2E3372d4
0.01233019 ETH
189996512024-01-13 18:07:11185 days ago1705169231
0xE44aa035...B2E3372d4
0.00577828 ETH
189996512024-01-13 18:07:11185 days ago1705169231
0xE44aa035...B2E3372d4
0.00577828 ETH
189996512024-01-13 18:07:11185 days ago1705169231
0xE44aa035...B2E3372d4
0.00000017 ETH
189996512024-01-13 18:07:11185 days ago1705169231
0xE44aa035...B2E3372d4
0.00096304 ETH
189996512024-01-13 18:07:11185 days ago1705169231
0xE44aa035...B2E3372d4
0.01251938 ETH
189415232024-01-05 13:59:59194 days ago1704463199
0xE44aa035...B2E3372d4
0.00592387 ETH
189415232024-01-05 13:59:59194 days ago1704463199
0xE44aa035...B2E3372d4
0.00592387 ETH
189415232024-01-05 13:59:59194 days ago1704463199
0xE44aa035...B2E3372d4
0.00000022 ETH
189415232024-01-05 13:59:59194 days ago1704463199
0xE44aa035...B2E3372d4
0.00098731 ETH
189415232024-01-05 13:59:59194 days ago1704463199
0xE44aa035...B2E3372d4
0.01283476 ETH
185125572023-11-06 11:10:59254 days ago1699269059
0xE44aa035...B2E3372d4
0.00617029 ETH
185125572023-11-06 11:10:59254 days ago1699269059
0xE44aa035...B2E3372d4
0.00617029 ETH
185125572023-11-06 11:10:59254 days ago1699269059
0xE44aa035...B2E3372d4
0.0000003 ETH
185125572023-11-06 11:10:59254 days ago1699269059
0xE44aa035...B2E3372d4
0.00102838 ETH
185125572023-11-06 11:10:59254 days ago1699269059
0xE44aa035...B2E3372d4
0.01336871 ETH
183048322023-10-08 9:20:23283 days ago1696756823
0xE44aa035...B2E3372d4
0.00626813 ETH
183048322023-10-08 9:20:23283 days ago1696756823
0xE44aa035...B2E3372d4
0.00626813 ETH
183048322023-10-08 9:20:23283 days ago1696756823
0xE44aa035...B2E3372d4
0.00000024 ETH
183048322023-10-08 9:20:23283 days ago1696756823
0xE44aa035...B2E3372d4
0.00104468 ETH
183048322023-10-08 9:20:23283 days ago1696756823
0xE44aa035...B2E3372d4
0.01358066 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DejitaruKaida

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 Protections {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
}

contract DejitaruKaida 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;
   
    uint256 constant private startingSupply = 500_000_000_000;
    string constant private _name = "Dejitaru Kaida";
    string constant private _symbol = "Kaida";
    uint8 constant private _decimals = 9;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

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

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

    Ratios public _ratios = Ratios({
        liquidity: 100,
        marketing: 300,
        development: 300,
        totalSwap: 1000
    });

    uint256 constant public maxBuyTaxes = 1500;
    uint256 constant public maxSellTaxes = 1500;
    uint256 constant public maxTransferTaxes = 1500;
    uint256 constant public maxRoundtripTax = 2000;
    uint256 constant masterTaxDivisor = 10000;

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable development;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xb06dD9734396EfF71E6B8dBBc18E2a2d50C4D19B),
        development: payable(0xB92B369ef7aee93c166584c35c927bcB0249d5D0)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxTxAmount = (_tTotal * 5) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 1) / 100;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Protections protections;
    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;

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

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

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

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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 {
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

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

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { if (_tTotal == 0) { revert(); } 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());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

    function setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        protections = Protections(initializer);
    }

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

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

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

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

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

    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 {
        protections.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        protections.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.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

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

    function setWallets(address payable marketing, address payable development) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal * 5 / 1000), "Max Transaction amt must be above 0.5% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 100), "Max Wallet amt must be above 1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getMaxTX() external view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() external view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    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 _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(protections)
            && to != address(protections);
    }

    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) {
                revert("Trading not yet enabled!");
            }
            if (buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    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;
            }
        }

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - developmentBalance;
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
    }

    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(protections) == address(0)){
                protections = Protections(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(protections) == address(0)){
            protections = Protections(address(this));
        }
        try protections.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
        launchStamp = block.timestamp;
    }

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

    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 protections.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, buy, sell, amount) : 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, bool buy, bool sell, uint256 amount) 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(protections) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { 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":"marketing","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":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"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":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","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":"maxRoundtripTax","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":"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":"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":"initializer","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":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","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":"marketing","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":"marketing","type":"address"},{"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":[],"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"}]

60006002556101f4608081905260a081905260c0526008805465ffffffffffff19166501f401f401f4179055606460e05261012c610100819052610120526103e8610140819052600980546001600160401b0319166703e8012c012c00641781556101a060405273b06dd9734396eff71e6b8dbbc18e2a2d50c4d19b61016081905273b92b369ef7aee93c166584c35c927bcb0249d5d0610180819052600c80546001600160a01b03199081169093179055600d8054909216179055600e805461ff0019169055600a6012819055620000d99190620007af565b620000ea9064746a528800620007c7565b620000f7906005620007c7565b620001039190620007e1565b6013556064620001166009600a620007af565b620001279064746a528800620007c7565b62000134906001620007c7565b620001409190620007e1565b6014556015805461ffff19169055601780546001600160a01b031916331790556200016e6009600a620007af565b6200017f9064746a528800620007c7565b601780546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001d36009600a620007af565b620001e49064746a528800620007c7565b60405190815260200160405180910390a3466038036200022c57600a8054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000327565b466061036200026357600a8054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000327565b4660011480620002735750466004145b806200027f5750466003145b15620002b357600a8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000327565b4661a86a03620002eb57600a8054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000327565b4660fa036200032257600a8054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000327565b600080fd5b600a60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000804565b6001600160a01b031663c9c65396600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000429919062000804565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000476573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049c919062000804565b600b80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601754600a54620004f692918216916101009091041660001962000599565b600a546200051790309061010090046001600160a01b031660001962000599565b601780546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054821683179055955490941683526004909152902080549092161790556200082f565b6001600160a01b038316620005eb5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006395760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005e2565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f1578160001904821115620006d557620006d56200069a565b80851615620006e357918102915b93841c9390800290620006b5565b509250929050565b6000826200070a57506001620007a9565b816200071957506000620007a9565b81600181146200073257600281146200073d576200075d565b6001915050620007a9565b60ff8411156200075157620007516200069a565b50506001821b620007a9565b5060208310610133831016604e8410600b841016171562000782575081810a620007a9565b6200078e8383620006b0565b8060001904821115620007a557620007a56200069a565b0290505b92915050565b6000620007c060ff841683620006f9565b9392505050565b8082028115828204841417620007a957620007a96200069a565b600082620007ff57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200081757600080fd5b81516001600160a01b0381168114620007c057600080fd5b61441b806200083f6000396000f3fe6080604052600436106103905760003560e01c80634fbee193116101dc578063a9059cbb11610102578063d3f6a157116100a0578063f94aa1b41161006f578063f94aa1b414610b24578063fb78680d14610b6b578063fdb78c0e14610b8b578063feadde9c14610baa57600080fd5b8063d3f6a15714610a89578063dd62ed3e14610aa9578063eafb5a3c14610aef578063ee5d9c2d14610b0f57600080fd5b8063b3d514fb116100dc578063b3d514fb14610617578063b7df8b36146109e4578063bfc2fc35146109fe578063cf84770614610a1e57600080fd5b8063a9059cbb146109a4578063aa22b172146109c4578063b1b08f711461061757600080fd5b806370a082311161017a578063893d20e811610149578063893d20e8146109165780638a63bd9b146109345780638a8c523c1461094957806395d89b411461095e57600080fd5b806370a0823114610896578063715018a6146108cc57806378648edf146108e157806380c581d1146108f657600080fd5b80635a6f0918116101b65780635a6f0918146108125780635c24b074146108285780635cce86cd146108485780636ebd00781461088157600080fd5b80634fbee1931461079a57806350a8e016146107d3578063590ffdce146107f257600080fd5b806328577751116102c157806336fddb041161025f5780634ada218b1161022e5780634ada218b146107205780634bbb93eb1461073a5780634e718e481461075a5780634fb2e45d1461077a57600080fd5b806336fddb04146106aa5780633f3cf56c146106ca578063452ed4f1146106ea57806346ea7ac81461070a57600080fd5b80632e8fa8211161029b5780632e8fa8211461062d578063313ce5671461064357806332cde6641461066a57806333251a0b1461068a57600080fd5b806328577751146105ec5780632b112e49146106025780632b28fc7a1461061757600080fd5b8063095ea7b31161032e57806318160ddd1161030857806318160ddd1461057757806323b872dd1461058c57806326003957146105ac5780632610eaca146105cc57600080fd5b8063095ea7b3146105095780630dcbcf1c146105295780630fa604e41461056257600080fd5b8063069d955f1161036a578063069d955f1461041557806306fdde031461046b5780630758d924146104ba57806307dd79e0146104df57600080fd5b806303fd2a451461039c5780630445b667146103cf578063044df726146103f357600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b261dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103db57600080fd5b506103e5600f5481565b6040519081526020016103c6565b3480156103ff57600080fd5b5061041361040e366004613cfb565b610bca565b005b34801561042157600080fd5b506008546104469061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103c6565b34801561047757600080fd5b5060408051808201909152600e81527f44656a6974617275204b6169646100000000000000000000000000000000000060208201525b6040516103c69190613d34565b3480156104c657600080fd5b50600a546103b29061010090046001600160a01b031681565b3480156104eb57600080fd5b50600a546104f99060ff1681565b60405190151581526020016103c6565b34801561051557600080fd5b506104f9610524366004613d97565b610ca7565b34801561053557600080fd5b506104f9610544366004613dc3565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561056e57600080fd5b506103e5610cbe565b34801561058357600080fd5b506103e5610cde565b34801561059857600080fd5b506104f96105a7366004613de0565b610d22565b3480156105b857600080fd5b506104136105c7366004613e21565b610d9a565b3480156105d857600080fd5b506104136105e7366004613f32565b610eec565b3480156105f857600080fd5b506103e560125481565b34801561060e57600080fd5b506103e56110a7565b34801561062357600080fd5b506103e56105dc81565b34801561063957600080fd5b506103e560105481565b34801561064f57600080fd5b50610658611126565b60405160ff90911681526020016103c6565b34801561067657600080fd5b5061041361068536600461400b565b611155565b34801561069657600080fd5b506104136106a5366004613dc3565b611342565b3480156106b657600080fd5b506104136106c536600461404e565b611412565b3480156106d657600080fd5b506104136106e5366004613e21565b61148b565b3480156106f657600080fd5b50600b546103b2906001600160a01b031681565b34801561071657600080fd5b506103e56107d081565b34801561072c57600080fd5b506015546104f99060ff1681565b34801561074657600080fd5b506103e561075536600461406c565b6115e9565b34801561076657600080fd5b5061041361077536600461406c565b61161d565b34801561078657600080fd5b50610413610795366004613dc3565b6116c1565b3480156107a657600080fd5b506104f96107b5366004613dc3565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107df57600080fd5b506015546104f990610100900460ff1681565b3480156107fe57600080fd5b5061041361080d36600461404e565b6118fe565b34801561081e57600080fd5b506103e560165481565b34801561083457600080fd5b50610413610843366004613dc3565b611977565b34801561085457600080fd5b506104f9610863366004613dc3565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561088d57600080fd5b506103e5611a6d565b3480156108a257600080fd5b506103e56108b1366004613dc3565b6001600160a01b031660009081526020819052604090205490565b3480156108d857600080fd5b50610413611a88565b3480156108ed57600080fd5b50610413611b53565b34801561090257600080fd5b5061041361091136600461404e565b611bb0565b34801561092257600080fd5b506017546001600160a01b03166103b2565b34801561094057600080fd5b506104f9611d58565b34801561095557600080fd5b50610413611dce565b34801561096a57600080fd5b5060408051808201909152600581527f4b6169646100000000000000000000000000000000000000000000000000000060208201526104ad565b3480156109b057600080fd5b506104f96109bf366004613d97565b61202a565b3480156109d057600080fd5b506104136109df36600461400b565b612041565b3480156109f057600080fd5b506011546104f99060ff1681565b348015610a0a57600080fd5b50610413610a19366004613cfb565b6121f3565b348015610a2a57600080fd5b50600954610a5b9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103c6565b348015610a9557600080fd5b50610413610aa4366004614085565b6122a0565b348015610ab557600080fd5b506103e5610ac4366004614085565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610afb57600080fd5b50610413610b0a366004613dc3565b612334565b348015610b1b57600080fd5b50610413612768565b348015610b3057600080fd5b50600c54600d54610b4b916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103c6565b348015610b7757600080fd5b50610413610b863660046140b3565b61284a565b348015610b9757600080fd5b50600e546104f990610100900460ff1681565b348015610bb657600080fd5b50610413610bc536600461404e565b612b64565b6017546001600160a01b03163314610c1d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6015546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b505050505050565b6000610cb4338484612bdd565b5060015b92915050565b6000610ccc6009600a6141f8565b601454610cd99190614207565b905090565b6000610cec6009600a6141f8565b610cfb9064746a528800614242565b600003610d0757600080fd5b610d136009600a6141f8565b610cd99064746a528800614242565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610d87576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610d81908490614259565b90915550505b610d92848484612cea565b949350505050565b6017546001600160a01b03163314610de85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6064610df66009600a6141f8565b610e059064746a528800614242565b610e0f9190614207565b8183610e1d6009600a6141f8565b610e2c9064746a528800614242565b610e369190614242565b610e409190614207565b1015610eb45760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c14565b8082610ec26009600a6141f8565b610ed19064746a528800614242565b610edb9190614242565b610ee59190614207565b6014555050565b6017546001600160a01b03163314610f3a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b8051825114610f8b5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c14565b60005b82518161ffff1610156110a257610fa76009600a6141f8565b828261ffff1681518110610fbd57610fbd61426c565b6020026020010151610fcf9190614242565b33600090815260208190526040902054101561102d5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c14565b61108f33848361ffff16815181106110475761104761426c565b60200260200101516009600a61105d91906141f8565b858561ffff16815181106110735761107361426c565b60200260200101516110859190614242565b600080600161317b565b508061109a8161429b565b915050610f8e565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461110191906142bc565b61110d6009600a6141f8565b61111c9064746a528800614242565b610cd99190614259565b60006111346009600a6141f8565b6111439064746a528800614242565b60000361114f57600080fd5b50600990565b6017546001600160a01b031633146111a35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600a5460ff16156111f65760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c14565b6105dc8361ffff161115801561121257506105dc8261ffff1611155b801561122457506105dc8161ffff1611155b6112705760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c14565b6107d061127d83856142cf565b61ffff1611156112cf5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c14565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6017546001600160a01b031633146113905760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6015546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b5050505050565b6017546001600160a01b031633146114605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6017546001600160a01b031633146114d95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6103e86114e86009600a6141f8565b6114f79064746a528800614242565b611502906005614242565b61150c9190614207565b818361151a6009600a6141f8565b6115299064746a528800614242565b6115339190614242565b61153d9190614207565b10156115b15760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c14565b80826115bf6009600a6141f8565b6115ce9064746a528800614242565b6115d89190614242565b6115e29190614207565b6013555050565b600b546001600160a01b031660009081526020819052604081205461271090611613908490614242565b610cb89190614207565b6017546001600160a01b0316331461166b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b60968111156116bc5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c14565b601255565b6017546001600160a01b0316331461170f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6001600160a01b03811661178b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016118295760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c14565b601754611840906001600160a01b031660006118fe565b61184b8160016118fe565b6017546001600160a01b031660009081526020819052604090205415611894576017546001600160a01b031660008181526020819052604090205461189291908390611085565b505b601780546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6017546001600160a01b0316331461194c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6017546001600160a01b031633146119c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b60155460ff16156119d557600080fd5b306001600160a01b03821603611a2d5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c14565b601580546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611a7b6009600a6141f8565b601354610cd99190614207565b6017546001600160a01b03163314611ad65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b601754611aed906001600160a01b031660006118fe565b601780547fffffffffffffffffffffffff000000000000000000000000000000000000000081169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6017546001600160a01b03163314611ba15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600a805460ff19166001179055565b6017546001600160a01b03163314611bfe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b80611c75576001600160a01b03828116600081815260016020526040808220805460ff1916905560155490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c71565b60025415611cdc576203f48060025442611c8f9190614259565b11611cdc5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c14565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560155491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c71565b5050565b6017546000906001600160a01b03163314611da95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600a54611dc890309061010090046001600160a01b0316600019612bdd565b50600190565b6017546001600160a01b03163314611e1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b60155460ff1615611e6f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c14565b601554610100900460ff16611ec65760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c14565b6015546201000090046001600160a01b0316611f0c57601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601554600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611f9757600080fd5b505af1925050508015611fa8575060015b506015805460ff19166001179055600b546001600160a01b031660009081526020819052604090205461271090611fe090600a614242565b611fea9190614207565b600f55600b546001600160a01b03166000908152602081905260409020546127109061201790601e614242565b6120219190614207565b60105542601655565b6000612037338484612cea565b5060019392505050565b6017546001600160a01b0316331461208f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6009805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169288169290921792909217161790558061210783856142cf565b61211191906142cf565b600980547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff9384160217905560085460009161216291620100008104821691166142cf565b60095461ffff918216925066010000000000009004168110156121ed5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610c14565b50505050565b6017546001600160a01b031633146122415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600e805461ff001916610100841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6017546001600160a01b031633146122ee5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600c80546001600160a01b039384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600d8054929093169116179055565b6017546001600160a01b031633146123825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b601554610100900460ff16156123da5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c14565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561241f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244391906142f1565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b491906142f1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253b91906142f1565b90506001600160a01b0381166126e457816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ad91906142f1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261e91906142f1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a791906142f1565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612718565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600a80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03858116820292909217928390556110a292309291900416600019612bdd565b6017546001600160a01b031633146127b65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b601554610100900460ff161561280e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c14565b6017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612847573d6000803e3d6000fd5b50565b6017546001600160a01b031633146128985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b82846128a66009600a6141f8565b6128b59064746a528800614242565b6128bf9190614242565b6128c99190614207565b600f5580826128da6009600a6141f8565b6128e99064746a528800614242565b6128f39190614242565b6128fd9190614207565b6010819055600f5411156129795760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c14565b600b546001600160a01b0316600090815260208190526040902054612710906129a3906096614242565b6129ad9190614207565b6010541115612a245760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610c14565b620f4240612a346009600a6141f8565b612a439064746a528800614242565b612a4d9190614207565b6010541015612ac45760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c14565b620f4240612ad46009600a6141f8565b612ae39064746a528800614242565b612aed9190614207565b600f5410156121ed5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c14565b6017546001600160a01b03163314612bb25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612c335760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c14565b6001600160a01b038216612c895760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c14565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612d685760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c14565b6001600160a01b038316612de45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c14565b60008211612e5a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c14565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612e885760019250612eb6565b6001600160a01b03861660009081526001602052604090205460ff1615612eb25760019150612eb6565b5060015b612ec08787613462565b156130cb5760155460ff16612f175760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c14565b8280612f205750815b15612fe4576001600160a01b03871660009081526007602052604090205460ff16158015612f6757506001600160a01b03861660009081526007602052604090205460ff16155b15612fe457601354851115612fe45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c14565b600a546001600160a01b038781166101009092041614801590613005575081155b156130cb576001600160a01b03861660009081526007602052604090205460ff166130cb576014548561304d886001600160a01b031660009081526020819052604090205490565b61305791906142bc565b11156130cb5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c14565b811561316257600e5460ff1661316257600e54610100900460ff16156131625730600090815260208190526040902054600f5481106131605760105460115460ff161561314a57601254600b546001600160a01b03166000908152602081905260409020546127109161313d91614242565b6131479190614207565b90505b808210613155578091505b61315e82613579565b505b505b61317087878786868661317b565b979650505050505050565b60006131878787613462565b1561323a576015546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613223575060408051601f3d908101601f191682019092526132209181019061430e565b60015b61322c57600080fd5b90508061323857600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061327c57506001600160a01b03871660009081526006602052604090205460ff165b15613285575060005b6001600160a01b038816600090815260208190526040812080548892906132ad908490614259565b9091555060009050816132c057866132cc565b6132cc8987878a613a68565b9050806000808a6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461330291906142bc565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161334e91815260200190565b60405180910390a3601554610100900460ff166134535761336f8989613b7d565b601554610100900460ff1615801561338c575061338c8989613462565b80156133b157506001600160a01b03891660009081526005602052604090205460ff16155b80156133d657506001600160a01b03881660009081526005602052604090205460ff16155b80156133e0575083155b156134535760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610c14565b50600198975050505050505050565b6017546000906001600160a01b0384811691161480159061349157506017546001600160a01b03838116911614155b80156134a857506017546001600160a01b03163214155b80156134cd57506001600160a01b03821660009081526004602052604090205460ff16155b80156134f257506001600160a01b03831660009081526004602052604090205460ff16155b801561350957506001600160a01b03821661dead14155b801561351d57506001600160a01b03821615155b801561353257506001600160a01b0383163014155b801561355257506015546001600160a01b03848116620100009092041614155b801561357257506015546001600160a01b03838116620100009092041614155b9392505050565b600e805460ff191660011790556040805160808101825260095461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526000036135da5750613a5b565b306000908152600360209081526040808320600a5461010090046001600160a01b031684529091529020546000191461363d57306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff168561365e9190614242565b6136689190614207565b6136729190614207565b905060006136808285614259565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106136ba576136ba61426c565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906142f1565b816001815181106137645761376461426c565b6001600160a01b039283166020918202929092010152600a546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac947906137ca90859060009086903090429060040161432b565b600060405180830381600087803b1580156137e457600080fd5b505af19250505080156137f5575060015b6138025750505050613a5b565b476000836138108684614242565b61381a9190614207565b9050841561391657600a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156138ca575060408051601f3d908101601f191682019092526138c79181019061439c565b60015b6138d957505050505050613a5b565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6139208183614259565b915085600001518660600181815161393891906143ca565b61ffff9081169091526060880151604089015160009350839291821691613960911686614242565b61396a9190614207565b905060006139788286614259565b60208a015190915061ffff16156139e657600c546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146139db576040519150601f19603f3d011682016040523d82523d6000602084013e6139e0565b606091505b50909350505b604089015161ffff1615613a5157600d546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613a46576040519150601f19603f3d011682016040523d82523d6000602084013e613a4b565b606091505b50909350505b5050505050505050505b50600e805460ff19169055565b6000808415613a7e575060085461ffff16613aa8565b8315613a97575060085462010000900461ffff16613aa8565b50600854640100000000900461ffff165b80600003613ab95782915050610d92565b6015546201000090046001600160a01b031630148015613ae357504660011480613ae35750466038145b15613aed57506111945b6000612710613afc8386614242565b613b069190614207565b90508015613b73573060009081526020819052604081208054839290613b2d9084906142bc565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6131708185614259565b601554610100900460ff1615613bfb5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c14565b613c058282613462565b158015613c1f5750600b546001600160a01b038281169116145b15611d54576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556015805461ff001916610100179081905562010000900416613cad57601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600e805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612294565b801515811461284757600080fd5b60008060408385031215613d0e57600080fd5b8235613d1981613ced565b91506020830135613d2981613ced565b809150509250929050565b600060208083528351808285015260005b81811015613d6157858101830151858201604001528201613d45565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461284757600080fd5b60008060408385031215613daa57600080fd5b8235613db581613d82565b946020939093013593505050565b600060208284031215613dd557600080fd5b813561357281613d82565b600080600060608486031215613df557600080fd5b8335613e0081613d82565b92506020840135613e1081613d82565b929592945050506040919091013590565b60008060408385031215613e3457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e9b57613e9b613e43565b604052919050565b600067ffffffffffffffff821115613ebd57613ebd613e43565b5060051b60200190565b600082601f830112613ed857600080fd5b81356020613eed613ee883613ea3565b613e72565b82815260059290921b84018101918181019086841115613f0c57600080fd5b8286015b84811015613f275780358352918301918301613f10565b509695505050505050565b60008060408385031215613f4557600080fd5b823567ffffffffffffffff80821115613f5d57600080fd5b818501915085601f830112613f7157600080fd5b81356020613f81613ee883613ea3565b82815260059290921b84018101918181019089841115613fa057600080fd5b948201945b83861015613fc7578535613fb881613d82565b82529482019490820190613fa5565b96505086013592505080821115613fdd57600080fd5b50613fea85828601613ec7565b9150509250929050565b803561ffff8116811461400657600080fd5b919050565b60008060006060848603121561402057600080fd5b61402984613ff4565b925061403760208501613ff4565b915061404560408501613ff4565b90509250925092565b6000806040838503121561406157600080fd5b8235613d1981613d82565b60006020828403121561407e57600080fd5b5035919050565b6000806040838503121561409857600080fd5b82356140a381613d82565b91506020830135613d2981613d82565b600080600080608085870312156140c957600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b8085111561414f578160001904821115614135576141356140e5565b8085161561414257918102915b93841c9390800290614119565b509250929050565b60008261416657506001610cb8565b8161417357506000610cb8565b81600181146141895760028114614193576141af565b6001915050610cb8565b60ff8411156141a4576141a46140e5565b50506001821b610cb8565b5060208310610133831016604e8410600b84101617156141d2575081810a610cb8565b6141dc8383614114565b80600019048211156141f0576141f06140e5565b029392505050565b600061357260ff841683614157565b60008261423d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610cb857610cb86140e5565b81810381811115610cb857610cb86140e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff8083168181036142b2576142b26140e5565b6001019392505050565b80820180821115610cb857610cb86140e5565b61ffff8181168382160190808211156142ea576142ea6140e5565b5092915050565b60006020828403121561430357600080fd5b815161357281613d82565b60006020828403121561432057600080fd5b815161357281613ced565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561437b5784516001600160a01b031683529383019391830191600101614356565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143b157600080fd5b8351925060208401519150604084015190509250925092565b61ffff8281168282160390808211156142ea576142ea6140e556fea264697066735822122055d50e172ba9fc15e321fd6cfc459cfb74ddab5dae8b66be209dbf40655e5c6764736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80634fbee193116101dc578063a9059cbb11610102578063d3f6a157116100a0578063f94aa1b41161006f578063f94aa1b414610b24578063fb78680d14610b6b578063fdb78c0e14610b8b578063feadde9c14610baa57600080fd5b8063d3f6a15714610a89578063dd62ed3e14610aa9578063eafb5a3c14610aef578063ee5d9c2d14610b0f57600080fd5b8063b3d514fb116100dc578063b3d514fb14610617578063b7df8b36146109e4578063bfc2fc35146109fe578063cf84770614610a1e57600080fd5b8063a9059cbb146109a4578063aa22b172146109c4578063b1b08f711461061757600080fd5b806370a082311161017a578063893d20e811610149578063893d20e8146109165780638a63bd9b146109345780638a8c523c1461094957806395d89b411461095e57600080fd5b806370a0823114610896578063715018a6146108cc57806378648edf146108e157806380c581d1146108f657600080fd5b80635a6f0918116101b65780635a6f0918146108125780635c24b074146108285780635cce86cd146108485780636ebd00781461088157600080fd5b80634fbee1931461079a57806350a8e016146107d3578063590ffdce146107f257600080fd5b806328577751116102c157806336fddb041161025f5780634ada218b1161022e5780634ada218b146107205780634bbb93eb1461073a5780634e718e481461075a5780634fb2e45d1461077a57600080fd5b806336fddb04146106aa5780633f3cf56c146106ca578063452ed4f1146106ea57806346ea7ac81461070a57600080fd5b80632e8fa8211161029b5780632e8fa8211461062d578063313ce5671461064357806332cde6641461066a57806333251a0b1461068a57600080fd5b806328577751146105ec5780632b112e49146106025780632b28fc7a1461061757600080fd5b8063095ea7b31161032e57806318160ddd1161030857806318160ddd1461057757806323b872dd1461058c57806326003957146105ac5780632610eaca146105cc57600080fd5b8063095ea7b3146105095780630dcbcf1c146105295780630fa604e41461056257600080fd5b8063069d955f1161036a578063069d955f1461041557806306fdde031461046b5780630758d924146104ba57806307dd79e0146104df57600080fd5b806303fd2a451461039c5780630445b667146103cf578063044df726146103f357600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b261dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103db57600080fd5b506103e5600f5481565b6040519081526020016103c6565b3480156103ff57600080fd5b5061041361040e366004613cfb565b610bca565b005b34801561042157600080fd5b506008546104469061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103c6565b34801561047757600080fd5b5060408051808201909152600e81527f44656a6974617275204b6169646100000000000000000000000000000000000060208201525b6040516103c69190613d34565b3480156104c657600080fd5b50600a546103b29061010090046001600160a01b031681565b3480156104eb57600080fd5b50600a546104f99060ff1681565b60405190151581526020016103c6565b34801561051557600080fd5b506104f9610524366004613d97565b610ca7565b34801561053557600080fd5b506104f9610544366004613dc3565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561056e57600080fd5b506103e5610cbe565b34801561058357600080fd5b506103e5610cde565b34801561059857600080fd5b506104f96105a7366004613de0565b610d22565b3480156105b857600080fd5b506104136105c7366004613e21565b610d9a565b3480156105d857600080fd5b506104136105e7366004613f32565b610eec565b3480156105f857600080fd5b506103e560125481565b34801561060e57600080fd5b506103e56110a7565b34801561062357600080fd5b506103e56105dc81565b34801561063957600080fd5b506103e560105481565b34801561064f57600080fd5b50610658611126565b60405160ff90911681526020016103c6565b34801561067657600080fd5b5061041361068536600461400b565b611155565b34801561069657600080fd5b506104136106a5366004613dc3565b611342565b3480156106b657600080fd5b506104136106c536600461404e565b611412565b3480156106d657600080fd5b506104136106e5366004613e21565b61148b565b3480156106f657600080fd5b50600b546103b2906001600160a01b031681565b34801561071657600080fd5b506103e56107d081565b34801561072c57600080fd5b506015546104f99060ff1681565b34801561074657600080fd5b506103e561075536600461406c565b6115e9565b34801561076657600080fd5b5061041361077536600461406c565b61161d565b34801561078657600080fd5b50610413610795366004613dc3565b6116c1565b3480156107a657600080fd5b506104f96107b5366004613dc3565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107df57600080fd5b506015546104f990610100900460ff1681565b3480156107fe57600080fd5b5061041361080d36600461404e565b6118fe565b34801561081e57600080fd5b506103e560165481565b34801561083457600080fd5b50610413610843366004613dc3565b611977565b34801561085457600080fd5b506104f9610863366004613dc3565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561088d57600080fd5b506103e5611a6d565b3480156108a257600080fd5b506103e56108b1366004613dc3565b6001600160a01b031660009081526020819052604090205490565b3480156108d857600080fd5b50610413611a88565b3480156108ed57600080fd5b50610413611b53565b34801561090257600080fd5b5061041361091136600461404e565b611bb0565b34801561092257600080fd5b506017546001600160a01b03166103b2565b34801561094057600080fd5b506104f9611d58565b34801561095557600080fd5b50610413611dce565b34801561096a57600080fd5b5060408051808201909152600581527f4b6169646100000000000000000000000000000000000000000000000000000060208201526104ad565b3480156109b057600080fd5b506104f96109bf366004613d97565b61202a565b3480156109d057600080fd5b506104136109df36600461400b565b612041565b3480156109f057600080fd5b506011546104f99060ff1681565b348015610a0a57600080fd5b50610413610a19366004613cfb565b6121f3565b348015610a2a57600080fd5b50600954610a5b9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103c6565b348015610a9557600080fd5b50610413610aa4366004614085565b6122a0565b348015610ab557600080fd5b506103e5610ac4366004614085565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610afb57600080fd5b50610413610b0a366004613dc3565b612334565b348015610b1b57600080fd5b50610413612768565b348015610b3057600080fd5b50600c54600d54610b4b916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103c6565b348015610b7757600080fd5b50610413610b863660046140b3565b61284a565b348015610b9757600080fd5b50600e546104f990610100900460ff1681565b348015610bb657600080fd5b50610413610bc536600461404e565b612b64565b6017546001600160a01b03163314610c1d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6015546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b505050505050565b6000610cb4338484612bdd565b5060015b92915050565b6000610ccc6009600a6141f8565b601454610cd99190614207565b905090565b6000610cec6009600a6141f8565b610cfb9064746a528800614242565b600003610d0757600080fd5b610d136009600a6141f8565b610cd99064746a528800614242565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610d87576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610d81908490614259565b90915550505b610d92848484612cea565b949350505050565b6017546001600160a01b03163314610de85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6064610df66009600a6141f8565b610e059064746a528800614242565b610e0f9190614207565b8183610e1d6009600a6141f8565b610e2c9064746a528800614242565b610e369190614242565b610e409190614207565b1015610eb45760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c14565b8082610ec26009600a6141f8565b610ed19064746a528800614242565b610edb9190614242565b610ee59190614207565b6014555050565b6017546001600160a01b03163314610f3a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b8051825114610f8b5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c14565b60005b82518161ffff1610156110a257610fa76009600a6141f8565b828261ffff1681518110610fbd57610fbd61426c565b6020026020010151610fcf9190614242565b33600090815260208190526040902054101561102d5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c14565b61108f33848361ffff16815181106110475761104761426c565b60200260200101516009600a61105d91906141f8565b858561ffff16815181106110735761107361426c565b60200260200101516110859190614242565b600080600161317b565b508061109a8161429b565b915050610f8e565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461110191906142bc565b61110d6009600a6141f8565b61111c9064746a528800614242565b610cd99190614259565b60006111346009600a6141f8565b6111439064746a528800614242565b60000361114f57600080fd5b50600990565b6017546001600160a01b031633146111a35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600a5460ff16156111f65760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c14565b6105dc8361ffff161115801561121257506105dc8261ffff1611155b801561122457506105dc8161ffff1611155b6112705760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c14565b6107d061127d83856142cf565b61ffff1611156112cf5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c14565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6017546001600160a01b031633146113905760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6015546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b5050505050565b6017546001600160a01b031633146114605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6017546001600160a01b031633146114d95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6103e86114e86009600a6141f8565b6114f79064746a528800614242565b611502906005614242565b61150c9190614207565b818361151a6009600a6141f8565b6115299064746a528800614242565b6115339190614242565b61153d9190614207565b10156115b15760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c14565b80826115bf6009600a6141f8565b6115ce9064746a528800614242565b6115d89190614242565b6115e29190614207565b6013555050565b600b546001600160a01b031660009081526020819052604081205461271090611613908490614242565b610cb89190614207565b6017546001600160a01b0316331461166b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b60968111156116bc5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c14565b601255565b6017546001600160a01b0316331461170f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6001600160a01b03811661178b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016118295760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c14565b601754611840906001600160a01b031660006118fe565b61184b8160016118fe565b6017546001600160a01b031660009081526020819052604090205415611894576017546001600160a01b031660008181526020819052604090205461189291908390611085565b505b601780546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6017546001600160a01b0316331461194c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6017546001600160a01b031633146119c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b60155460ff16156119d557600080fd5b306001600160a01b03821603611a2d5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c14565b601580546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611a7b6009600a6141f8565b601354610cd99190614207565b6017546001600160a01b03163314611ad65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b601754611aed906001600160a01b031660006118fe565b601780547fffffffffffffffffffffffff000000000000000000000000000000000000000081169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6017546001600160a01b03163314611ba15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600a805460ff19166001179055565b6017546001600160a01b03163314611bfe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b80611c75576001600160a01b03828116600081815260016020526040808220805460ff1916905560155490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c71565b60025415611cdc576203f48060025442611c8f9190614259565b11611cdc5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c14565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560155491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c71565b5050565b6017546000906001600160a01b03163314611da95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600a54611dc890309061010090046001600160a01b0316600019612bdd565b50600190565b6017546001600160a01b03163314611e1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b60155460ff1615611e6f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c14565b601554610100900460ff16611ec65760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c14565b6015546201000090046001600160a01b0316611f0c57601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601554600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611f9757600080fd5b505af1925050508015611fa8575060015b506015805460ff19166001179055600b546001600160a01b031660009081526020819052604090205461271090611fe090600a614242565b611fea9190614207565b600f55600b546001600160a01b03166000908152602081905260409020546127109061201790601e614242565b6120219190614207565b60105542601655565b6000612037338484612cea565b5060019392505050565b6017546001600160a01b0316331461208f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6009805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169288169290921792909217161790558061210783856142cf565b61211191906142cf565b600980547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff9384160217905560085460009161216291620100008104821691166142cf565b60095461ffff918216925066010000000000009004168110156121ed5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610c14565b50505050565b6017546001600160a01b031633146122415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600e805461ff001916610100841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6017546001600160a01b031633146122ee5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b600c80546001600160a01b039384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600d8054929093169116179055565b6017546001600160a01b031633146123825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b601554610100900460ff16156123da5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c14565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561241f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244391906142f1565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b491906142f1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253b91906142f1565b90506001600160a01b0381166126e457816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ad91906142f1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261e91906142f1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a791906142f1565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612718565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600a80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03858116820292909217928390556110a292309291900416600019612bdd565b6017546001600160a01b031633146127b65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b601554610100900460ff161561280e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c14565b6017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612847573d6000803e3d6000fd5b50565b6017546001600160a01b031633146128985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b82846128a66009600a6141f8565b6128b59064746a528800614242565b6128bf9190614242565b6128c99190614207565b600f5580826128da6009600a6141f8565b6128e99064746a528800614242565b6128f39190614242565b6128fd9190614207565b6010819055600f5411156129795760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c14565b600b546001600160a01b0316600090815260208190526040902054612710906129a3906096614242565b6129ad9190614207565b6010541115612a245760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610c14565b620f4240612a346009600a6141f8565b612a439064746a528800614242565b612a4d9190614207565b6010541015612ac45760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c14565b620f4240612ad46009600a6141f8565b612ae39064746a528800614242565b612aed9190614207565b600f5410156121ed5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c14565b6017546001600160a01b03163314612bb25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c14565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612c335760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c14565b6001600160a01b038216612c895760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c14565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612d685760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c14565b6001600160a01b038316612de45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c14565b60008211612e5a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c14565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612e885760019250612eb6565b6001600160a01b03861660009081526001602052604090205460ff1615612eb25760019150612eb6565b5060015b612ec08787613462565b156130cb5760155460ff16612f175760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c14565b8280612f205750815b15612fe4576001600160a01b03871660009081526007602052604090205460ff16158015612f6757506001600160a01b03861660009081526007602052604090205460ff16155b15612fe457601354851115612fe45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c14565b600a546001600160a01b038781166101009092041614801590613005575081155b156130cb576001600160a01b03861660009081526007602052604090205460ff166130cb576014548561304d886001600160a01b031660009081526020819052604090205490565b61305791906142bc565b11156130cb5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c14565b811561316257600e5460ff1661316257600e54610100900460ff16156131625730600090815260208190526040902054600f5481106131605760105460115460ff161561314a57601254600b546001600160a01b03166000908152602081905260409020546127109161313d91614242565b6131479190614207565b90505b808210613155578091505b61315e82613579565b505b505b61317087878786868661317b565b979650505050505050565b60006131878787613462565b1561323a576015546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613223575060408051601f3d908101601f191682019092526132209181019061430e565b60015b61322c57600080fd5b90508061323857600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061327c57506001600160a01b03871660009081526006602052604090205460ff165b15613285575060005b6001600160a01b038816600090815260208190526040812080548892906132ad908490614259565b9091555060009050816132c057866132cc565b6132cc8987878a613a68565b9050806000808a6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461330291906142bc565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161334e91815260200190565b60405180910390a3601554610100900460ff166134535761336f8989613b7d565b601554610100900460ff1615801561338c575061338c8989613462565b80156133b157506001600160a01b03891660009081526005602052604090205460ff16155b80156133d657506001600160a01b03881660009081526005602052604090205460ff16155b80156133e0575083155b156134535760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610c14565b50600198975050505050505050565b6017546000906001600160a01b0384811691161480159061349157506017546001600160a01b03838116911614155b80156134a857506017546001600160a01b03163214155b80156134cd57506001600160a01b03821660009081526004602052604090205460ff16155b80156134f257506001600160a01b03831660009081526004602052604090205460ff16155b801561350957506001600160a01b03821661dead14155b801561351d57506001600160a01b03821615155b801561353257506001600160a01b0383163014155b801561355257506015546001600160a01b03848116620100009092041614155b801561357257506015546001600160a01b03838116620100009092041614155b9392505050565b600e805460ff191660011790556040805160808101825260095461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526000036135da5750613a5b565b306000908152600360209081526040808320600a5461010090046001600160a01b031684529091529020546000191461363d57306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff168561365e9190614242565b6136689190614207565b6136729190614207565b905060006136808285614259565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106136ba576136ba61426c565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906142f1565b816001815181106137645761376461426c565b6001600160a01b039283166020918202929092010152600a546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac947906137ca90859060009086903090429060040161432b565b600060405180830381600087803b1580156137e457600080fd5b505af19250505080156137f5575060015b6138025750505050613a5b565b476000836138108684614242565b61381a9190614207565b9050841561391657600a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156138ca575060408051601f3d908101601f191682019092526138c79181019061439c565b60015b6138d957505050505050613a5b565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6139208183614259565b915085600001518660600181815161393891906143ca565b61ffff9081169091526060880151604089015160009350839291821691613960911686614242565b61396a9190614207565b905060006139788286614259565b60208a015190915061ffff16156139e657600c546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146139db576040519150601f19603f3d011682016040523d82523d6000602084013e6139e0565b606091505b50909350505b604089015161ffff1615613a5157600d546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114613a46576040519150601f19603f3d011682016040523d82523d6000602084013e613a4b565b606091505b50909350505b5050505050505050505b50600e805460ff19169055565b6000808415613a7e575060085461ffff16613aa8565b8315613a97575060085462010000900461ffff16613aa8565b50600854640100000000900461ffff165b80600003613ab95782915050610d92565b6015546201000090046001600160a01b031630148015613ae357504660011480613ae35750466038145b15613aed57506111945b6000612710613afc8386614242565b613b069190614207565b90508015613b73573060009081526020819052604081208054839290613b2d9084906142bc565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6131708185614259565b601554610100900460ff1615613bfb5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c14565b613c058282613462565b158015613c1f5750600b546001600160a01b038281169116145b15611d54576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556015805461ff001916610100179081905562010000900416613cad57601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600e805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612294565b801515811461284757600080fd5b60008060408385031215613d0e57600080fd5b8235613d1981613ced565b91506020830135613d2981613ced565b809150509250929050565b600060208083528351808285015260005b81811015613d6157858101830151858201604001528201613d45565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461284757600080fd5b60008060408385031215613daa57600080fd5b8235613db581613d82565b946020939093013593505050565b600060208284031215613dd557600080fd5b813561357281613d82565b600080600060608486031215613df557600080fd5b8335613e0081613d82565b92506020840135613e1081613d82565b929592945050506040919091013590565b60008060408385031215613e3457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e9b57613e9b613e43565b604052919050565b600067ffffffffffffffff821115613ebd57613ebd613e43565b5060051b60200190565b600082601f830112613ed857600080fd5b81356020613eed613ee883613ea3565b613e72565b82815260059290921b84018101918181019086841115613f0c57600080fd5b8286015b84811015613f275780358352918301918301613f10565b509695505050505050565b60008060408385031215613f4557600080fd5b823567ffffffffffffffff80821115613f5d57600080fd5b818501915085601f830112613f7157600080fd5b81356020613f81613ee883613ea3565b82815260059290921b84018101918181019089841115613fa057600080fd5b948201945b83861015613fc7578535613fb881613d82565b82529482019490820190613fa5565b96505086013592505080821115613fdd57600080fd5b50613fea85828601613ec7565b9150509250929050565b803561ffff8116811461400657600080fd5b919050565b60008060006060848603121561402057600080fd5b61402984613ff4565b925061403760208501613ff4565b915061404560408501613ff4565b90509250925092565b6000806040838503121561406157600080fd5b8235613d1981613d82565b60006020828403121561407e57600080fd5b5035919050565b6000806040838503121561409857600080fd5b82356140a381613d82565b91506020830135613d2981613d82565b600080600080608085870312156140c957600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b8085111561414f578160001904821115614135576141356140e5565b8085161561414257918102915b93841c9390800290614119565b509250929050565b60008261416657506001610cb8565b8161417357506000610cb8565b81600181146141895760028114614193576141af565b6001915050610cb8565b60ff8411156141a4576141a46140e5565b50506001821b610cb8565b5060208310610133831016604e8410600b84101617156141d2575081810a610cb8565b6141dc8383614114565b80600019048211156141f0576141f06140e5565b029392505050565b600061357260ff841683614157565b60008261423d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610cb857610cb86140e5565b81810381811115610cb857610cb86140e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff8083168181036142b2576142b26140e5565b6001019392505050565b80820180821115610cb857610cb86140e5565b61ffff8181168382160190808211156142ea576142ea6140e5565b5092915050565b60006020828403121561430357600080fd5b815161357281613d82565b60006020828403121561432057600080fd5b815161357281613ced565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561437b5784516001600160a01b031683529383019391830191600101614356565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143b157600080fd5b8351925060208401519150604084015190509250925092565b61ffff8281168282160390808211156142ea576142ea6140e556fea264697066735822122055d50e172ba9fc15e321fd6cfc459cfb74ddab5dae8b66be209dbf40655e5c6764736f6c63430008110033

Deployed Bytecode Sourcemap

3951:22513:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5602:73;;;;;;;;;;;;5633:42;5602:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5602:73:0;;;;;;;;6068:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6068:28:0;245:177:1;14583:153:0;;;;;;;;;;-1:-1:-1;14583:153:0;;;;;:::i;:::-;;:::i;:::-;;4983:109;;;;;;;;;;-1:-1:-1;4983:109: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;4983:109:0;931:365:1;10501:80:0;;;;;;;;;;-1:-1:-1;10573:5:0;;;;;;;;;;;;;;;;;10501:80;;;;;;;:::i;5541:26::-;;;;;;;;;;-1:-1:-1;5541:26:0;;;;;;;-1:-1:-1;;;;;5541:26:0;;;5508;;;;;;;;;;-1:-1:-1;5508:26:0;;;;;;;;;;;2326:14:1;;2319:22;2301:41;;2289:2;2274:18;5508:26:0;2161:187:1;11109:161:0;;;;;;;;;;-1:-1:-1;11109:161:0;;;;;:::i;:::-;;:::i;13722:140::-;;;;;;;;;;-1:-1:-1;13722:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;13820:34:0;13796:4;13820:34;;;:25;:34;;;;;;;;;13722:140;16828:114;;;;;;;;;;;;;:::i;10172:115::-;;;;;;;;;;;;;:::i;11779:306::-;;;;;;;;;;-1:-1:-1;11779:306:0;;;;;:::i;:::-;;:::i;16440:264::-;;;;;;;;;;-1:-1:-1;16440:264:0;;;;;:::i;:::-;;:::i;24139:447::-;;;;;;;;;;-1:-1:-1;24139:447:0;;;;;:::i;:::-;;:::i;6176:33::-;;;;;;;;;;;;;;;;14316:141;;;;;;;;;;;;;:::i;5252:42::-;;;;;;;;;;;;5290:4;5252:42;;6103:25;;;;;;;;;;;;;;;;10293:112;;;;;;;;;;;;;:::i;:::-;;;6573:4:1;6561:17;;;6543:36;;6531:2;6516:18;10293:112:0;6401:184:1;14934:544:0;;;;;;;;;;-1:-1:-1;14934:544:0;;;;;:::i;:::-;;:::i;14465:110::-;;;;;;;;;;-1:-1:-1;14465:110:0;;;;;:::i;:::-;;:::i;13870:140::-;;;;;;;;;;-1:-1:-1;13870:140:0;;;;;:::i;:::-;;:::i;16159:273::-;;;;;;;;;;-1:-1:-1;16159:273:0;;;;;:::i;:::-;;:::i;5574:21::-;;;;;;;;;;-1:-1:-1;5574:21:0;;;;-1:-1:-1;;;;;5574:21:0;;;5405:46;;;;;;;;;;;;5447:4;5405:46;;6341:34;;;;;;;;;;-1:-1:-1;6341:34:0;;;;;;;;16950:189;;;;;;;;;;-1:-1:-1;16950:189:0;;;;;:::i;:::-;;:::i;17854:217::-;;;;;;;;;;-1:-1:-1;17854:217:0;;;;;:::i;:::-;;:::i;8930:654::-;;;;;;;;;;-1:-1:-1;8930:654:0;;;;;:::i;:::-;;:::i;13587:127::-;;;;;;;;;;-1:-1:-1;13587:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13678:28:0;13654:4;13678:28;;;:19;:28;;;;;;;;;13587:127;6382:36;;;;;;;;;;-1:-1:-1;6382:36:0;;;;;;;;;;;14018:134;;;;;;;;;;-1:-1:-1;14018:134:0;;;;;:::i;:::-;;:::i;6455:26::-;;;;;;;;;;;;;;;;13217:222;;;;;;;;;;-1:-1:-1;13217:222:0;;;;;:::i;:::-;;:::i;13447:132::-;;;;;;;;;;-1:-1:-1;13447:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;13541:30:0;13517:4;13541:30;;;:21;:30;;;;;;;;;13447:132;16712:108;;;;;;;;;;;;;:::i;10811:117::-;;;;;;;;;;-1:-1:-1;10811:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;10904:16:0;10877:7;10904:16;;;;;;;;;;;;10811:117;9592:225;;;;;;;;;;;;;:::i;14744:182::-;;;;;;;;;;;;;:::i;12714:495::-;;;;;;;;;;-1:-1:-1;12714:495:0;;;;;:::i;:::-;;:::i;10587:79::-;;;;;;;;;;-1:-1:-1;10657:6:0;;-1:-1:-1;;;;;10657:6:0;10587:79;;11596:175;;;;;;;;;;;;;:::i;23348:593::-;;;;;;;;;;;;;:::i;10411:84::-;;;;;;;;;;-1:-1:-1;10485:7:0;;;;;;;;;;;;;;;;;10411:84;;10936:165;;;;;;;;;;-1:-1:-1;10936:165:0;;;;;:::i;:::-;;:::i;15486:444::-;;;;;;;;;;-1:-1:-1;15486:444:0;;;;;:::i;:::-;;:::i;6135:34::-;;;;;;;;;;-1:-1:-1;6135:34:0;;;;;;;;18079:263;;;;;;;;;;-1:-1:-1;18079:263:0;;;;;:::i;:::-;;:::i;5101:142::-;;;;;;;;;;-1:-1:-1;5101:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7892:6:1;7925:15;;;7907:34;;7977:15;;;7972:2;7957:18;;7950:43;8029:15;;;8009:18;;;8002:43;;;;8081:15;;;8076:2;8061:18;;8054:43;7869:3;7854:19;5101:142:0;7659:444:1;15938:213:0;;;;;;;;;;-1:-1:-1;15938:213:0;;;;;:::i;:::-;;:::i;10672:133::-;;;;;;;;;;-1:-1:-1;10672:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10774:19:0;;;10756:7;10774:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10672:133;12093:613;;;;;;;;;;-1:-1:-1;12093:613:0;;;;;:::i;:::-;;:::i;23949:182::-;;;;;;;;;;;;;:::i;5792:199::-;;;;;;;;;;-1:-1:-1;5792:199:0;;;;;;-1:-1:-1;;;;;5792:199:0;;;;;;;;;;;-1:-1:-1;;;;;9195:15:1;;;9177:34;;9247:15;;;;9242:2;9227:18;;9220:43;9089:18;5792:199:0;8910:359:1;17147:699:0;;;;;;;;;;-1:-1:-1;17147:699:0;;;;;:::i;:::-;;:::i;6022:39::-;;;;;;;;;;-1:-1:-1;6022:39:0;;;;;;;;;;;14160:148;;;;;;;;;;-1:-1:-1;14160:148:0;;;;;:::i;:::-;;:::i;14583:153::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;;;;;;;;;14678:11:::1;::::0;:50:::1;::::0;;;;10197:14:1;;10190:22;14678:50:0::1;::::0;::::1;10172:41:1::0;10256:14;;10249:22;10229:18;;;10222:50;14678:11:0;;;::::1;-1:-1:-1::0;;;;;14678:11:0::1;::::0;:26:::1;::::0;10145:18:1;;14678:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14583:153:::0;;:::o;11109:161::-;11186:4;11203:37;11212:10;11224:7;11233:6;11203:8;:37::i;:::-;-1:-1:-1;11258:4:0;11109:161;;;;;:::o;16828:114::-;16875:7;16920:13;4655:1;16920:2;:13;:::i;:::-;16902:14;;:32;;;;:::i;:::-;16895:39;;16828:114;:::o;10172:115::-;10227:7;4715:13;4655:1;4715:2;:13;:::i;:::-;4698:30;;4495:15;4698:30;:::i;:::-;10253:1;10242:12;10238:31;;10258:8;;;10238:31;4715:13;4655:1;4715:2;:13;:::i;:::-;4698:30;;4495:15;4698:30;:::i;11779:306::-;-1:-1:-1;;;;;11900:19:0;;11879:4;11900:19;;;:11;:19;;;;;;;;11920:10;11900:31;;;;;;;;-1:-1:-1;;11900:52:0;11896:126;;-1:-1:-1;;;;;11969:19:0;;;;;;:11;:19;;;;;;;;11989:10;11969:31;;;;;;;:41;;12004:6;;11969:19;:41;;12004:6;;11969:41;:::i;:::-;;;;-1:-1:-1;;11896:126:0;12041:36;12051:6;12059:9;12070:6;12041:9;:36::i;:::-;12034:43;11779:306;-1:-1:-1;;;;11779:306:0:o;16440:264::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;16582:3:::1;4715:13;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;16572:13;;;;:::i;:::-;16560:7:::0;16549;4715:13:::1;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;16539:17;;;;:::i;:::-;16538:29;;;;:::i;:::-;:48;;16530:109;;;::::0;-1:-1:-1;;;16530:109:0;;12762:2:1;16530:109:0::1;::::0;::::1;12744:21:1::0;12801:2;12781:18;;;12774:30;12840:34;12820:18;;;12813:62;12911:18;12891;;;12884:46;12947:19;;16530:109:0::1;12560:412:1::0;16530:109:0::1;16689:7:::0;16678;4715:13:::1;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;16668:17;;;;:::i;:::-;16667:29;;;;:::i;:::-;16650:14;:46:::0;-1:-1:-1;;16440:264:0:o;24139:447::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;24274:7:::1;:14;24255:8;:15;:33;24247:67;;;::::0;-1:-1:-1;;;24247:67:0;;13179:2:1;24247:67:0::1;::::0;::::1;13161:21:1::0;13218:2;13198:18;;;13191:30;13257:23;13237:18;;;13230:51;13298:18;;24247:67:0::1;12977:345:1::0;24247:67:0::1;24330:8;24325:254;24348:8;:15;24344:1;:19;;;24325:254;;;24429:13;4655:1;24429:2;:13;:::i;:::-;24418:7;24426:1;24418:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24403:10;10877:7:::0;10904:16;;;;;;;;;;;24393:49:::1;;24385:80;;;::::0;-1:-1:-1;;;24385:80:0;;13718:2:1;24385:80:0::1;::::0;::::1;13700:21:1::0;13757:2;13737:18;;;13730:30;13796:20;13776:18;;;13769:48;13834:18;;24385:80:0::1;13516:342:1::0;24385:80:0::1;24480:87;24497:10;24509:8;24518:1;24509:11;;;;;;;;;;:::i;:::-;;;;;;;4655:1;24533:2;:13;;;;:::i;:::-;24522:7;24530:1;24522:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24548:5;24555::::0;24562:4:::1;24480:16;:87::i;:::-;-1:-1:-1::0;24365:3:0;::::1;::::0;::::1;:::i;:::-;;;;24325:254;;;;24139:447:::0;;:::o;14316:141::-;14369:7;10904:16;;;;;;5633:42;10904:16;;;;14408:39;;10904:16;14408:39;:::i;:::-;4715:13;4655:1;4715:2;:13;:::i;:::-;4698:30;;4495:15;4698:30;:::i;:::-;14397:51;;;;:::i;10293:112::-;10345:5;4715:13;4655:1;4715:2;:13;:::i;:::-;4698:30;;4495:15;4698:30;:::i;:::-;10369:1;10358:12;10354:31;;10374:8;;;10354:31;-1:-1:-1;4655:1:0;;10293:112::o;14934:544::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;15042:14:::1;::::0;::::1;;15041:15;15033:45;;;::::0;-1:-1:-1;;;15033:45:0;;14397:2:1;15033:45:0::1;::::0;::::1;14379:21:1::0;14436:2;14416:18;;;14409:30;14475:19;14455:18;;;14448:47;14512:18;;15033:45:0::1;14195:341:1::0;15033:45:0::1;5290:4;15097:6;:21;;;;:65;;;;;5340:4;15139:7;:23;;;;15097:65;:117;;;;;5394:4;15183:11;:31;;;;15097:117;15089:170;;;::::0;-1:-1:-1;;;15089:170:0;;14743:2:1;15089:170:0::1;::::0;::::1;14725:21:1::0;14782:2;14762:18;;;14755:30;14821:25;14801:18;;;14794:53;14864:18;;15089:170:0::1;14541:347:1::0;15089:170:0::1;5447:4;15278:16;15287:7:::0;15278:6;:16:::1;:::i;:::-;:35;;;;15270:80;;;::::0;-1:-1:-1;;;15270:80:0;;15268:2:1;15270:80:0::1;::::0;::::1;15250:21:1::0;;;15287:18;;;15280:30;15346:34;15326:18;;;15319:62;15398:18;;15270:80:0::1;15066:356:1::0;15270:80:0::1;15361:9;:25:::0;;::::1;::::0;;::::1;15397:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;15435:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;14934:544::o;14465:110::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;14534:11:::1;::::0;:33:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;14534:33:0::1;::::0;::::1;160:74:1::0;14534:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;14534:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14465:110:::0;:::o;13870:140::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;-1:-1:-1;;;;;13962:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;13962:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13870:140::o;16159:273::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;16304:4:::1;4715:13;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;16290:11;::::0;16300:1:::1;16290:11;:::i;:::-;:18;;;;:::i;:::-;16278:7:::0;16267;4715:13:::1;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;16257:17;;;;:::i;:::-;16256:29;;;;:::i;:::-;:53;;16248:121;;;::::0;-1:-1:-1;;;16248:121:0;;15629:2:1;16248:121:0::1;::::0;::::1;15611:21:1::0;15668:2;15648:18;;;15641:30;15707:34;15687:18;;;15680:62;15778:25;15758:18;;;15751:53;15821:19;;16248:121:0::1;15427:419:1::0;16248:121:0::1;16417:7:::0;16406;4715:13:::1;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;16396:17;;;;:::i;:::-;16395:29;;;;:::i;:::-;16380:12;:44:::0;-1:-1:-1;;16159:273:0:o;16950:189::-;17079:6;;-1:-1:-1;;;;;17079:6:0;17041:7;10904:16;;;;;;;;;;;5494:5;;17069:41;;17089:21;;17069:41;:::i;:::-;17068:62;;;;:::i;17854:217::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;17984:3:::1;17958:22;:29;;17950:64;;;::::0;-1:-1:-1;;;17950:64:0;;16053:2:1;17950:64:0::1;::::0;::::1;16035:21:1::0;16092:2;16072:18;;;16065:30;16131:24;16111:18;;;16104:52;16173:18;;17950:64:0::1;15851:346:1::0;17950:64:0::1;18025:13;:38:::0;17854:217::o;8930:654::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;-1:-1:-1;;;;;9009:22:0;::::1;9001:96;;;::::0;-1:-1:-1;;;9001:96:0;;16404:2:1;9001:96:0::1;::::0;::::1;16386:21:1::0;16443:2;16423:18;;;16416:30;16482:34;16462:18;;;16455:62;16553:31;16533:18;;;16526:59;16602:19;;9001:96:0::1;16202:425:1::0;9001:96:0::1;9116:16:::0;-1:-1:-1;;;;;9116:16:0;::::1;::::0;9108:90:::1;;;::::0;-1:-1:-1;;;9108:90:0;;16404:2:1;9108:90:0::1;::::0;::::1;16386:21:1::0;16443:2;16423:18;;;16416:30;16482:34;16462:18;;;16455:62;16553:31;16533:18;;;16526:59;16602:19;;9108:90:0::1;16202:425:1::0;9108:90:0::1;9229:6;::::0;9209:34:::1;::::0;-1:-1:-1;;;;;9229:6:0::1;;9209:19;:34::i;:::-;9254:35;9274:8;9284:4;9254:19;:35::i;:::-;9324:6;::::0;-1:-1:-1;;;;;9324:6:0::1;9334:1;10904:16:::0;;;;;;;;;;;9314:21;9310:127:::1;;9369:6;::::0;-1:-1:-1;;;;;9369:6:0::1;10877:7:::0;10904:16;;;;;;;;;;;9352:73:::1;::::0;9369:6;9377:8;;9387:17:::1;10811:117:::0;9352:73:::1;;9310:127;9476:6;::::0;;-1:-1:-1;;;;;9493:17:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;9526:40:::1;::::0;9476:6;::::1;::::0;9493:17;9476:6;;9526:40:::1;::::0;9457:16:::1;::::0;9526:40:::1;8990:594;8930:654:::0;:::o;14018:134::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;-1:-1:-1;;;;;14106:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14106:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14018:134::o;13217:222::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;13301:14:::1;::::0;::::1;;13300:15;13292:24;;;::::0;::::1;;13358:4;-1:-1:-1::0;;;;;13335:28:0;::::1;::::0;13327:55:::1;;;::::0;-1:-1:-1;;;13327:55:0;;16834:2:1;13327:55:0::1;::::0;::::1;16816:21:1::0;16873:2;16853:18;;;16846:30;16912:16;16892:18;;;16885:44;16946:18;;13327:55:0::1;16632:338:1::0;13327:55:0::1;13393:11;:38:::0;;-1:-1:-1;;;;;13393:38:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;13217:222::o;16712:108::-;16755:7;16798:13;4655:1;16798:2;:13;:::i;:::-;16782:12;;:30;;;;:::i;9592:225::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;9671:6:::1;::::0;9651:34:::1;::::0;-1:-1:-1;;;;;9671:6:0::1;;9651:19;:34::i;:::-;9715:6;::::0;;9732:19;;::::1;::::0;;;9767:42:::1;::::0;-1:-1:-1;;;;;9715:6:0;;::::1;::::0;9696:16:::1;::::0;9715:6;;9767:42:::1;::::0;9696:16;;9767:42:::1;9640:177;9592:225::o:0;14744:182::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;14897:14:::1;:21:::0;;-1:-1:-1;;14897:21:0::1;14914:4;14897:21;::::0;;14744:182::o;12714:495::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;12796:7:::1;12791:411;;-1:-1:-1::0;;;;;12820:13:0;;::::1;12836:5;12820:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12820:21:0::1;::::0;;12856:11:::1;::::0;:34;;;;;::::1;::::0;::::1;17143:74:1::0;;;;17233:18;;;17226:50;;;;12856:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17116:18:1;;12856:34:0::1;16975:307:1::0;12791:411:0::1;12927:17;::::0;:22;12923:135:::1;;13016:6;12996:17;;12978:15;:35;;;;:::i;:::-;:44;12970:72;;;::::0;-1:-1:-1;;;12970:72:0;;17489:2:1;12970:72:0::1;::::0;::::1;17471:21:1::0;17528:2;17508:18;;;17501:30;17567:17;17547:18;;;17540:45;17602:18;;12970:72:0::1;17287:339:1::0;12970:72:0::1;-1:-1:-1::0;;;;;13072:13:0;;::::1;;::::0;;;13088:4:::1;13072:13;::::0;;;;;;;;:20;;-1:-1:-1;;13072:20:0::1;::::0;::::1;::::0;;13127:15:::1;13107:17;:35:::0;13157:11:::1;::::0;:33;;;;;::::1;::::0;::::1;17143:74:1::0;;;;17233:18;;;17226:50;13157:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17116:18:1;;13157:33:0::1;16975:307:1::0;12791:411:0::1;12714:495:::0;;:::o;11596:175::-;8784:6;;11662:4;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;11711:9:::1;::::0;11679:62:::1;::::0;11696:4:::1;::::0;11711:9:::1;::::0;::::1;-1:-1:-1::0;;;;;11711:9:0::1;-1:-1:-1::0;;11679:8:0::1;:62::i;:::-;-1:-1:-1::0;11759:4:0::1;11596:175:::0;:::o;23348:593::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;23410:14:::1;::::0;::::1;;23409:15;23401:52;;;::::0;-1:-1:-1;;;23401:52:0;;17833:2:1;23401:52:0::1;::::0;::::1;17815:21:1::0;17872:2;17852:18;;;17845:30;17911:26;17891:18;;;17884:54;17955:18;;23401:52:0::1;17631:348:1::0;23401:52:0::1;23472:16;::::0;::::1;::::0;::::1;;;23464:53;;;::::0;-1:-1:-1;;;23464:53:0;;18186:2:1;23464:53:0::1;::::0;::::1;18168:21:1::0;18225:2;18205:18;;;18198:30;18264:26;18244:18;;;18237:54;18308:18;;23464:53:0::1;17984:348:1::0;23464:53:0::1;23540:11;::::0;;;::::1;-1:-1:-1::0;;;;;23540:11:0::1;23528:106;;23582:11;:40:::0;;;::::1;23616:4;23582:40:::0;::::1;;::::0;;23528:106:::1;23648:11;::::0;23670:6:::1;::::0;23648:87:::1;::::0;;;;-1:-1:-1;;;;;23670:6:0;;::::1;23648:87;::::0;::::1;18560:74:1::0;18682:10;23685:12:0::1;18670:23:1::0;18650:18;;;18643:51;18742:18;23707:15:0::1;18730:31:1::0;18710:18;;;18703:59;4655:1:0::1;18778:18:1::0;;;18771:45;23648:11:0;;;::::1;;::::0;:21:::1;::::0;18532:19:1;;23648:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;23757:14:0::1;:21:::0;;-1:-1:-1;;23757:21:0::1;23774:4;23757:21;::::0;;23816:6:::1;::::0;-1:-1:-1;;;;;23816:6:0::1;-1:-1:-1::0;10904:16:0;;;;;;;;;;;23832:5:::1;::::0;23806:22:::1;::::0;23826:2:::1;23806:22;:::i;:::-;23805:32;;;;:::i;:::-;23789:13;:48:::0;23872:6:::1;::::0;-1:-1:-1;;;;;23872:6:0::1;10877:7:::0;10904:16;;;;;;;;;;;23888:5:::1;::::0;23862:22:::1;::::0;23882:2:::1;23862:22;:::i;:::-;23861:32;;;;:::i;:::-;23848:10;:45:::0;23918:15:::1;23904:11;:29:::0;23348:593::o;10936:165::-;11014:4;11031:40;11041:10;11053:9;11064:6;11031:9;:40::i;:::-;-1:-1:-1;11089:4:0;;10936:165;-1:-1:-1;;;10936:165:0:o;15486:444::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;15591:7:::1;:29:::0;;::::1;15671:33:::0;;::::1;::::0;::::1;::::0;15631:29;;::::1;::::0;::::1;::::0;;;;15591;;::::1;15631::::0;;;;;;;::::1;15671:33;;::::0;;15693:11;15735:21:::1;15651:9:::0;15611;15735:21:::1;:::i;:::-;:35;;;;:::i;:::-;15715:7;:55:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;15816:9:::1;:17:::0;-1:-1:-1;;15797:36:0::1;::::0;15816:17;;::::1;::::0;::::1;::::0;15797:16:::1;:36;:::i;:::-;15852:7;:17:::0;15781:52:::1;::::0;;::::1;::::0;-1:-1:-1;15852:17:0;;::::1;;:26:::0;-1:-1:-1;15852:26:0::1;15844:78;;;::::0;-1:-1:-1;;;15844:78:0;;19029:2:1;15844:78:0::1;::::0;::::1;19011:21:1::0;19068:2;19048:18;;;19041:30;19107:34;19087:18;;;19080:62;19178:9;19158:18;;;19151:37;19205:19;;15844:78:0::1;18827:403:1::0;15844:78:0::1;15580:350;15486:444:::0;;;:::o;18079:263::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;18188:19:::1;:33:::0;;-1:-1:-1;;18188:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;18232:22:::1;:47:::0;;-1:-1:-1;;18232:47:0::1;::::0;::::1;;;::::0;;18295:39:::1;::::0;2301:41:1;;;18295:39:0::1;::::0;2289:2:1;2274:18;18295:39:0::1;;;;;;;;18079:263:::0;;:::o;15938:213::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;16044:11:::1;:42:::0;;-1:-1:-1;;;;;16044:42:0;;::::1;::::0;;;::::1;;::::0;;;16097:23;:46;;;;;::::1;::::0;::::1;;::::0;;15938:213::o;12093:613::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;12173:16:::1;::::0;::::1;::::0;::::1;;;12172:17;12164:60;;;::::0;-1:-1:-1;;;12164:60:0;;19437:2:1;12164:60:0::1;::::0;::::1;19419:21:1::0;19476:2;19456:18;;;19449:30;19515:32;19495:18;;;19488:60;19565:18;;12164:60:0::1;19235:354:1::0;12164:60:0::1;12235:20;12268:9;12235:43;;12289:16;12319:10;-1:-1:-1::0;;;;;12319:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12308:40:0::1;;12357:4;12364:10;-1:-1:-1::0;;;;;12364:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12308:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9195:15:1;;;12308:74:0::1;::::0;::::1;9177:34:1::0;9247:15;;9227:18;;;9220:43;9089:18;;12308:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12289:93:::0;-1:-1:-1;;;;;;12397:22:0;::::1;12393:200;;12456:10;-1:-1:-1::0;;;;;12456:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12445:43:0::1;;12497:4;12504:10;-1:-1:-1::0;;;;;12504:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12445:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9195:15:1;;;12445:77:0::1;::::0;::::1;9177:34:1::0;9247:15;;9227:18;;;9220:43;9089:18;;12445:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12436:6;:86:::0;;;::::1;-1:-1:-1::0;;;;;12436:86:0;;;::::1;::::0;;;::::1;::::0;;12393:200:::1;;;12564:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;12564:17:0;::::1;;::::0;;12393:200:::1;12603:9;:22:::0;;;::::1;;-1:-1:-1::0;;;;;12603:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;12636:62:::1;::::0;12653:4:::1;::::0;12668:9;;::::1;;-1:-1:-1::0;;12636:8:0::1;:62::i;23949:182::-:0;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;24016:16:::1;::::0;::::1;::::0;::::1;;;24015:17;24007:58;;;::::0;-1:-1:-1;;;24007:58:0;;20384:2:1;24007:58:0::1;::::0;::::1;20366:21:1::0;20423:2;20403:18;;;20396:30;20462;20442:18;;;20435:58;20510:18;;24007:58:0::1;20182:352:1::0;24007:58:0::1;24084:6;::::0;24076:47:::1;::::0;-1:-1:-1;;;;;24084:6:0;;::::1;::::0;24101:21:::1;24076:47:::0;::::1;;;::::0;24084:6:::1;24076:47:::0;24084:6;24076:47;24101:21;24084:6;24076:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23949:182::o:0;17147:699::-;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;17347:16;17327;4715:13:::1;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;17317:26;;;;:::i;:::-;17316:47;;;;:::i;:::-;17300:13;:63:::0;17415:13;17398;4715::::1;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;17388:23;;;;:::i;:::-;17387:41;;;;:::i;:::-;17374:10;:54:::0;;;17447:13:::1;::::0;:27:::1;;17439:73;;;::::0;-1:-1:-1;;;17439:73:0;;20741:2:1;17439:73:0::1;::::0;::::1;20723:21:1::0;20780:2;20760:18;;;20753:30;20819:34;20799:18;;;20792:62;20890:3;20870:18;;;20863:31;20911:19;;17439:73:0::1;20539:397:1::0;17439:73:0::1;17556:6;::::0;-1:-1:-1;;;;;17556:6:0::1;10877:7:::0;10904:16;;;;;;;;;;;5494:5:::1;::::0;17546:23:::1;::::0;17566:3:::1;17546:23;:::i;:::-;17545:44;;;;:::i;:::-;17531:10;;:58;;17523:106;;;::::0;-1:-1:-1;;;17523:106:0;;21143:2:1;17523:106:0::1;::::0;::::1;21125:21:1::0;21182:2;21162:18;;;21155:30;21221:34;21201:18;;;21194:62;21292:5;21272:18;;;21265:33;21315:19;;17523:106:0::1;20941:399:1::0;17523:106:0::1;17672:9;4715:13;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;17662:19;;;;:::i;:::-;17648:10;;:33;;17640:92;;;::::0;-1:-1:-1;;;17640:92:0;;21547:2:1;17640:92:0::1;::::0;::::1;21529:21:1::0;21586:2;21566:18;;;21559:30;21625:34;21605:18;;;21598:62;21696:16;21676:18;;;21669:44;21730:19;;17640:92:0::1;21345:410:1::0;17640:92:0::1;17778:9;4715:13;4655:1;4715:2;:13;:::i;:::-;4698:30;::::0;4495:15:::1;4698:30;:::i;:::-;17768:19;;;;:::i;:::-;17751:13;;:36;;17743:95;;;::::0;-1:-1:-1;;;17743:95:0;;21547:2:1;17743:95:0::1;::::0;::::1;21529:21:1::0;21586:2;21566:18;;;21559:30;21625:34;21605:18;;;21598:62;21696:16;21676:18;;;21669:44;21730:19;;17743:95:0::1;21345:410:1::0;14160:148:0;8784:6;;-1:-1:-1;;;;;8784:6:0;8794:10;8784:20;8776:50;;;;-1:-1:-1;;;8776:50:0;;9866:2:1;8776:50:0;;;9848:21:1;9905:2;9885:18;;;9878:30;-1:-1:-1;;;9924:18:1;;;9917:47;9981:18;;8776:50:0;9664:341:1;8776:50:0;-1:-1:-1;;;;;14256:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14256:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14160:148::o;11278:310::-;-1:-1:-1;;;;;11373:20:0;;11365:52;;;;-1:-1:-1;;;11365:52:0;;21962:2:1;11365:52:0;;;21944:21:1;22001:2;21981:18;;;21974:30;22040:21;22020:18;;;22013:49;22079:18;;11365:52:0;21760:343:1;11365:52:0;-1:-1:-1;;;;;11436:21:0;;11428:53;;;;-1:-1:-1;;;11428:53:0;;21962:2:1;11428:53:0;;;21944:21:1;22001:2;21981:18;;;21974:30;22040:21;22020:18;;;22013:49;22079:18;;11428:53:0;21760:343:1;11428:53:0;-1:-1:-1;;;;;11494:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11547:33;;391:25:1;;;11547:33:0;;364:18:1;11547:33:0;;;;;;;11278:310;;;:::o;18804:1946::-;18883:4;-1:-1:-1;;;;;18908:18:0;;18900:68;;;;-1:-1:-1;;;18900:68:0;;22310:2:1;18900:68:0;;;22292:21:1;22349:2;22329:18;;;22322:30;22388:34;22368:18;;;22361:62;22459:7;22439:18;;;22432:35;22484:19;;18900:68:0;22108:401:1;18900:68:0;-1:-1:-1;;;;;18987:16:0;;18979:64;;;;-1:-1:-1;;;18979:64:0;;22716:2:1;18979:64:0;;;22698:21:1;22755:2;22735:18;;;22728:30;22794:34;22774:18;;;22767:62;22865:5;22845:18;;;22838:33;22888:19;;18979:64:0;22514:399:1;18979:64:0;19071:1;19062:6;:10;19054:64;;;;-1:-1:-1;;;19054:64:0;;23120:2:1;19054:64:0;;;23102:21:1;23159:2;23139:18;;;23132:30;23198:34;23178:18;;;23171:62;23269:11;23249:18;;;23242:39;23298:19;;19054:64:0;22918:405:1;19054:64:0;-1:-1:-1;;;;;19217:13:0;;19129:8;19217:13;;;:7;:13;;;;;;19129:8;;;;19217:13;;19213:162;;;19253:4;19247:10;;19213:162;;;-1:-1:-1;;;;;19279:11:0;;;;;;:7;:11;;;;;;;;19275:100;;;19314:4;19307:11;;19275:100;;;-1:-1:-1;19359:4:0;19275:100;19389:20;19400:4;19406:2;19389:10;:20::i;:::-;19385:644;;;19430:14;;;;19426:89;;19465:34;;-1:-1:-1;;;19465:34:0;;23530:2:1;19465:34:0;;;23512:21:1;23569:2;23549:18;;;23542:30;23608:26;23588:18;;;23581:54;23652:18;;19465:34:0;23328:348:1;19426:89:0;19533:3;:11;;;;19540:4;19533:11;19529:232;;;-1:-1:-1;;;;;19569:27:0;;;;;;:21;:27;;;;;;;;19568:28;:58;;;;-1:-1:-1;;;;;;19601:25:0;;;;;;:21;:25;;;;;;;;19600:26;19568:58;19564:182;;;19669:12;;19659:6;:22;;19651:75;;;;-1:-1:-1;;;19651:75:0;;23883:2:1;19651:75:0;;;23865:21:1;23922:2;23902:18;;;23895:30;23961:34;23941:18;;;23934:62;24032:10;24012:18;;;24005:38;24060:19;;19651:75:0;23681:404:1;19651:75:0;19793:9;;-1:-1:-1;;;;;19779:24:0;;;19793:9;;;;;19779:24;;;;:33;;;19808:4;19807:5;19779:33;19775:243;;;-1:-1:-1;;;;;19838:25:0;;;;;;:21;:25;;;;;;;;19833:170;;19922:14;;19912:6;19896:13;19906:2;-1:-1:-1;;;;;10904:16:0;10877:7;10904:16;;;;;;;;;;;;10811:117;19896:13;:22;;;;:::i;:::-;:40;;19888:95;;;;-1:-1:-1;;;19888:95:0;;24292:2:1;19888:95:0;;;24274:21:1;24331:2;24311:18;;;24304:30;24370:34;24350:18;;;24343:62;24441:12;24421:18;;;24414:40;24471:19;;19888:95:0;24090:406:1;19888:95:0;20045:4;20041:632;;;20071:6;;;;20066:596;;20102:19;;;;;;;20098:549;;;20195:4;20146:28;10904:16;;;;;;;;;;;20252:13;;20228:37;;20224:404;;20312:10;;20353:22;;;;20349:97;;;20410:13;;20400:6;;-1:-1:-1;;;;;20400:6:0;10877:7;10904:16;;;;;;;;;;;5494:5;;20390:33;;;:::i;:::-;20389:54;;;;:::i;:::-;20379:64;;20349:97;20500:7;20476:20;:31;20472:72;;20534:7;20511:30;;20472:72;20570:34;20583:20;20570:12;:34::i;:::-;20267:361;20224:404;20123:524;20098:549;20690:52;20707:4;20713:2;20717:6;20725:3;20730:4;20736:5;20690:16;:52::i;:::-;20683:59;18804:1946;-1:-1:-1;;;;;;;18804:1946:0:o;24594:1055::-;24713:4;24734:20;24745:4;24751:2;24734:10;:20::i;:::-;24730:228;;;24789:11;;:39;;;;;-1:-1:-1;;;;;24782:15:1;;;24789:39:0;;;24764:34:1;24834:15;;;24814:18;;;24807:43;24866:18;;;24859:34;;;24758:12:0;;24789:11;;;;;:21;;24676:18:1;;24789:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;24789:39:0;;;;;;;;-1:-1:-1;;24789:39:0;;;;;;;;;;;;:::i;:::-;;;24785:122;;24896:8;;;24785:122;24879:5;-1:-1:-1;24925:7:0;24921:26;;24936:8;;;24921:26;24756:202;24730:228;-1:-1:-1;;;;;25002:25:0;;24968:12;25002:25;;;:19;:25;;;;;;24983:4;;25002:25;;;:52;;-1:-1:-1;;;;;;25031:23:0;;;;;;:19;:23;;;;;;;;25002:52;24998:99;;;-1:-1:-1;25080:5:0;24998:99;-1:-1:-1;;;;;25107:13:0;;:7;:13;;;;;;;;;;:23;;25124:6;;25107:7;:23;;25124:6;;25107:23;:::i;:::-;;;;-1:-1:-1;25141:22:0;;-1:-1:-1;25167:7:0;25166:55;;25215:6;25166:55;;;25178:34;25188:4;25194:3;25199:4;25205:6;25178:9;:34::i;:::-;25141:80;;25247:14;25232:7;:11;25240:2;-1:-1:-1;;;;;25232:11:0;-1:-1:-1;;;;;25232:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;25292:2;-1:-1:-1;;;;;25277:34:0;25286:4;-1:-1:-1;;;;;25277:34:0;;25296:14;25277:34;;;;391:25:1;;379:2;364:18;;245:177;25277:34:0;;;;;;;;25327:16;;;;;;;25322:298;;25360:28;25379:4;25385:2;25360:18;:28::i;:::-;25408:16;;;;;;;25407:17;:41;;;;;25428:20;25439:4;25445:2;25428:10;:20::i;:::-;25407:77;;;;-1:-1:-1;;;;;;25453:31:0;;;;;;:25;:31;;;;;;;;25452:32;25407:77;:111;;;;-1:-1:-1;;;;;;25489:29:0;;;;;;:25;:29;;;;;;;;25488:30;25407:111;:121;;;;;25523:5;25522:6;25407:121;25403:206;;;25549:44;;-1:-1:-1;;;25549:44:0;;25356:2:1;25549:44:0;;;25338:21:1;25395:2;25375:18;;;25368:30;25434:34;25414:18;;;25407:62;25505:4;25485:18;;;25478:32;25527:19;;25549:44:0;25154:398:1;25403:206:0;-1:-1:-1;25637:4:0;;24594:1055;-1:-1:-1;;;;;;;;24594:1055:0:o;18350:446::-;18451:6;;18419:4;;-1:-1:-1;;;;;18443:14:0;;;18451:6;;18443:14;;;;:43;;-1:-1:-1;18480:6:0;;-1:-1:-1;;;;;18474:12:0;;;18480:6;;18474:12;;18443:43;:79;;;;-1:-1:-1;18516:6:0;;-1:-1:-1;;;;;18516:6:0;18503:9;:19;;18443:79;:118;;;;-1:-1:-1;;;;;;18540:21:0;;;;;;:17;:21;;;;;;;;18539:22;18443:118;:159;;;;-1:-1:-1;;;;;;18579:23:0;;;;;;:17;:23;;;;;;;;18578:24;18443:159;:186;;;;-1:-1:-1;;;;;;18619:10:0;;5633:42;18619:10;;18443:186;:219;;;;-1:-1:-1;;;;;;18646:16:0;;;;18443:219;:257;;;;-1:-1:-1;;;;;;18679:21:0;;18695:4;18679:21;;18443:257;:302;;;;-1:-1:-1;18733:11:0;;-1:-1:-1;;;;;18717:28:0;;;18733:11;;;;;18717:28;;18443:302;:345;;;;-1:-1:-1;18776:11:0;;-1:-1:-1;;;;;18762:26:0;;;18776:11;;;;;18762:26;;18443:345;18436:352;18350:446;-1:-1:-1;;;18350:446:0:o;20758:2011::-;6650:6;:13;;-1:-1:-1;;6650:13:0;6659:4;6650:13;;;20841:30:::1;::::0;;::::1;::::0;::::1;::::0;;20864:7:::1;20841:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;6650:6;20886:21;20882:60:::1;;20924:7;;;20882:60;20978:4;20958:26;::::0;;;:11:::1;:26;::::0;;;;;;;20993:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;20993:9:0::1;20958:46:::0;;;;;;;;-1:-1:-1;;20958:67:0::1;20954:166;;21062:4;21042:26;::::0;;;:11:::1;:26;::::0;;;;;;;21077:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;21077:9:0::1;21042:46:::0;;;;;;;-1:-1:-1;;21042:66:0;;20954:166:::1;21132:17;21217:1;21197:6;:16;;;21153:60;;21177:6;:16;;;21154:39;;:20;:39;;;;:::i;:::-;21153:60;;;;:::i;:::-;21152:66;;;;:::i;:::-;21132:86:::0;-1:-1:-1;21229:15:0::1;21247:32;21132:86:::0;21247:20;:32:::1;:::i;:::-;21324:16;::::0;;21338:1:::1;21324:16:::0;;;;;::::1;::::0;;21229:50;;-1:-1:-1;21300:21:0::1;::::0;21324:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21324:16:0::1;21300:40;;21369:4;21351;21356:1;21351:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;21351:23:0::1;;;-1:-1:-1::0;;;;;21351:23:0::1;;;::::0;::::1;21395:9;;;;;;;;;-1:-1:-1::0;;;;;21395:9:0::1;-1:-1:-1::0;;;;;21395:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21385:4;21390:1;21385:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21385:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;21428:9:::1;::::0;:186:::1;::::0;;;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;21503:7;;21525:1:::1;::::0;21541:4;;21568::::1;::::0;21588:15:::1;::::0;21428:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21424:233;;21639:7;;;;;;21424:233;21690:21;21669:18;21776:7:::0;21750:22:::1;21763:9:::0;21690:21;21750:22:::1;:::i;:::-;21749:34;;;;:::i;:::-;21722:61:::0;-1:-1:-1;21800:13:0;;21796:400:::1;;21834:9;::::0;:222:::1;::::0;;;;21911:4:::1;21834:222;::::0;::::1;26952:34:1::0;27002:18;;;26995:34;;;21963:1:0::1;27045:18:1::0;;;27038:34;;;27088:18;;;27081:34;5633:42:0::1;27131:19:1::0;;;27124:44;22026:15:0::1;27184:19:1::0;;;27177:35;21834:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;21834:9:0::1;::::0;:25:::1;::::0;21867:16;;26863:19:1;;21834:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;21834:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;21834:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;21830:355;;22163:7;;;;;;;;21830:355;-1:-1:-1::0;;22081:40:0::1;::::0;;27708:25:1;;;27764:2;27749:18;;27742:34;;;22081:40:0::1;::::0;-1:-1:-1;27681:18:1;22081:40:0::1;;;;;;;21830:355;22208:30;22222:16:::0;22208:30;::::1;:::i;:::-;;;22269:6;:16;;;22249:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;22384:16:::1;::::0;::::1;::::0;22362:18:::1;::::0;::::1;::::0;22296:12:::1;::::0;-1:-1:-1;22296:12:0;;22348:52;;::::1;::::0;22349:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;22348:52;;;;:::i;:::-;22319:81:::0;-1:-1:-1;22411:24:0::1;22438:31;22319:81:::0;22438:10;:31:::1;:::i;:::-;22484:16;::::0;::::1;::::0;22411:58;;-1:-1:-1;22484:20:0::1;;::::0;22480:133:::1;;22534:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;22534:21:0;;::::1;::::0;22591:5:::1;::::0;22568:16;;22534:67:::1;::::0;;;22568:16;22534:21;22591:5;22534:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22521:80:0;;-1:-1:-1;;22480:133:0::1;22627:18;::::0;::::1;::::0;:22:::1;;::::0;22623:139:::1;;22679:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;22679:23:0;;::::1;::::0;22740:5:::1;::::0;22715:18;;22679:71:::1;::::0;;;22715:18;22679:23;22740:5;22679:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22666:84:0;;-1:-1:-1;;22623:139:0::1;20830:1939;;;;;;;;;6674:1;-1:-1:-1::0;6686:6:0;:14;;-1:-1:-1;;6686:14:0;;;20758:2011::o;25657:804::-;25745:7;25765:18;25798:3;25794:205;;;-1:-1:-1;25831:9:0;:16;;;25794:205;;;25869:4;25865:134;;;-1:-1:-1;25903:9:0;:17;;;;;;25865:134;;;-1:-1:-1;25966:9:0;:21;;;;;;25865:134;26013:10;26027:1;26013:15;26009:39;;26039:6;26032:13;;;;;26009:39;26070:11;;;;;-1:-1:-1;;;;;26070:11:0;26094:4;26062:37;:110;;;;;26117:13;26134:1;26117:18;:54;;;;26152:13;26169:2;26152:19;26117:54;26058:138;;;-1:-1:-1;26189:4:0;26058:138;26206:17;5494:5;26226:19;26235:10;26226:6;:19;:::i;:::-;:38;;;;:::i;:::-;26206:58;-1:-1:-1;26279:13:0;;26275:141;;26325:4;26309:7;:22;;;;;;;;;;:35;;26335:9;;26309:7;:35;;26335:9;;26309:35;:::i;:::-;;;;-1:-1:-1;;26364:40:0;;391:25:1;;;26387:4:0;;-1:-1:-1;;;;;26364:40:0;;;;;379:2:1;364:18;26364:40:0;;;;;;;26275:141;26435:18;26444:9;26435:6;:18;:::i;22777:563::-;22860:16;;;;;;;22859:17;22851:65;;;;-1:-1:-1;;;22851:65:0;;28375:2:1;22851:65:0;;;28357:21:1;28414:2;28394:18;;;28387:30;28453:34;28433:18;;;28426:62;28524:5;28504:18;;;28497:33;28547:19;;22851:65:0;28173:399:1;22851:65:0;22932:20;22943:4;22949:2;22932:10;:20::i;:::-;22931:21;:37;;;;-1:-1:-1;22962:6:0;;-1:-1:-1;;;;;22956:12:0;;;22962:6;;22956:12;22931:37;22927:406;;;-1:-1:-1;;;;;22985:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;22985:30:0;;;23011:4;22985:30;;;;;;23030:19;:25;;;;;:32;;;;;;;;;;23077:16;:23;;-1:-1:-1;;23077:23:0;22985:30;23077:23;;;;;23127:11;;;;23115:114;;23173:11;:40;;;;23207:4;23173:40;;;;;23115:114;23243:19;:26;;-1:-1:-1;;23243:26:0;;;;;23289:32;;-1:-1:-1;2301:41:1;;23289:32:0;;2289:2:1;2274:18;23289:32:0;2161: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:607::-;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;1899:2;-1:-1:-1;;1824:2:1;1816:6;1812:15;1808:88;1797:9;1793:104;1789:113;1781:121;;;;1301:607;;;;:::o;2353:154::-;-1:-1:-1;;;;;2432:5:1;2428:54;2421:5;2418:65;2408:93;;2497:1;2494;2487:12;2512:315;2580:6;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2696:9;2683:23;2715:31;2740:5;2715:31;:::i;:::-;2765:5;2817:2;2802:18;;;;2789:32;;-1:-1:-1;;;2512:315:1:o;2832:247::-;2891:6;2944:2;2932:9;2923:7;2919:23;2915:32;2912:52;;;2960:1;2957;2950:12;2912:52;2999:9;2986:23;3018:31;3043:5;3018:31;:::i;3084:456::-;3161:6;3169;3177;3230:2;3218:9;3209:7;3205:23;3201:32;3198:52;;;3246:1;3243;3236:12;3198:52;3285:9;3272:23;3304:31;3329:5;3304:31;:::i;:::-;3354:5;-1:-1:-1;3411:2:1;3396:18;;3383:32;3424:33;3383:32;3424:33;:::i;:::-;3084:456;;3476:7;;-1:-1:-1;;;3530:2:1;3515:18;;;;3502:32;;3084:456::o;3545:248::-;3613:6;3621;3674:2;3662:9;3653:7;3649:23;3645:32;3642:52;;;3690:1;3687;3680:12;3642:52;-1:-1:-1;;3713:23:1;;;3783:2;3768:18;;;3755:32;;-1:-1:-1;3545:248:1:o;3798:184::-;3850:77;3847:1;3840:88;3947:4;3944:1;3937:15;3971:4;3968:1;3961:15;3987:334;4058:2;4052:9;4114:2;4104:13;;-1:-1:-1;;4100:86:1;4088:99;;4217:18;4202:34;;4238:22;;;4199:62;4196:88;;;4264:18;;:::i;:::-;4300:2;4293:22;3987:334;;-1:-1:-1;3987:334:1:o;4326:183::-;4386:4;4419:18;4411:6;4408:30;4405:56;;;4441:18;;:::i;:::-;-1:-1:-1;4486:1:1;4482:14;4498:4;4478:25;;4326:183::o;4514:662::-;4568:5;4621:3;4614:4;4606:6;4602:17;4598:27;4588:55;;4639:1;4636;4629:12;4588:55;4675:6;4662:20;4701:4;4725:60;4741:43;4781:2;4741:43;:::i;:::-;4725:60;:::i;:::-;4819:15;;;4905:1;4901:10;;;;4889:23;;4885:32;;;4850:12;;;;4929:15;;;4926:35;;;4957:1;4954;4947:12;4926:35;4993:2;4985:6;4981:15;5005:142;5021:6;5016:3;5013:15;5005:142;;;5087:17;;5075:30;;5125:12;;;;5038;;5005:142;;;-1:-1:-1;5165:5:1;4514:662;-1:-1:-1;;;;;;4514:662:1:o;5181:1215::-;5299:6;5307;5360:2;5348:9;5339:7;5335:23;5331:32;5328:52;;;5376:1;5373;5366:12;5328:52;5416:9;5403:23;5445:18;5486:2;5478:6;5475:14;5472:34;;;5502:1;5499;5492:12;5472:34;5540:6;5529:9;5525:22;5515:32;;5585:7;5578:4;5574:2;5570:13;5566:27;5556:55;;5607:1;5604;5597:12;5556:55;5643:2;5630:16;5665:4;5689:60;5705:43;5745:2;5705:43;:::i;5689:60::-;5783:15;;;5865:1;5861:10;;;;5853:19;;5849:28;;;5814:12;;;;5889:19;;;5886:39;;;5921:1;5918;5911:12;5886:39;5945:11;;;;5965:217;5981:6;5976:3;5973:15;5965:217;;;6061:3;6048:17;6078:31;6103:5;6078:31;:::i;:::-;6122:18;;5998:12;;;;6160;;;;5965:217;;;6201:5;-1:-1:-1;;6244:18:1;;6231:32;;-1:-1:-1;;6275:16:1;;;6272:36;;;6304:1;6301;6294:12;6272:36;;6327:63;6382:7;6371:8;6360:9;6356:24;6327:63;:::i;:::-;6317:73;;;5181:1215;;;;;:::o;6590:159::-;6657:20;;6717:6;6706:18;;6696:29;;6686:57;;6739:1;6736;6729:12;6686:57;6590:159;;;:::o;6754:328::-;6828:6;6836;6844;6897:2;6885:9;6876:7;6872:23;6868:32;6865:52;;;6913:1;6910;6903:12;6865:52;6936:28;6954:9;6936:28;:::i;:::-;6926:38;;6983:37;7016:2;7005:9;7001:18;6983:37;:::i;:::-;6973:47;;7039:37;7072:2;7061:9;7057:18;7039:37;:::i;:::-;7029:47;;6754:328;;;;;:::o;7087:382::-;7152:6;7160;7213:2;7201:9;7192:7;7188:23;7184:32;7181:52;;;7229:1;7226;7219:12;7181:52;7268:9;7255:23;7287:31;7312:5;7287:31;:::i;7474:180::-;7533:6;7586:2;7574:9;7565:7;7561:23;7557:32;7554:52;;;7602:1;7599;7592:12;7554:52;-1:-1:-1;7625:23:1;;7474:180;-1:-1:-1;7474:180:1:o;8108:404::-;8192:6;8200;8253:2;8241:9;8232:7;8228:23;8224:32;8221:52;;;8269:1;8266;8259:12;8221:52;8308:9;8295:23;8327:31;8352:5;8327:31;:::i;:::-;8377:5;-1:-1:-1;8434:2:1;8419:18;;8406:32;8447:33;8406:32;8447:33;:::i;9274:385::-;9360:6;9368;9376;9384;9437:3;9425:9;9416:7;9412:23;9408:33;9405:53;;;9454:1;9451;9444:12;9405:53;-1:-1:-1;;9477:23:1;;;9547:2;9532:18;;9519:32;;-1:-1:-1;9598:2:1;9583:18;;9570:32;;9649:2;9634:18;9621:32;;-1:-1:-1;9274:385:1;-1:-1:-1;9274:385:1:o;10283:184::-;10335:77;10332:1;10325:88;10432:4;10429:1;10422:15;10456:4;10453:1;10446:15;10472:482;10561:1;10604:5;10561:1;10618:330;10639:7;10629:8;10626:21;10618:330;;;10758:4;-1:-1:-1;;10686:77:1;10680:4;10677:87;10674:113;;;10767:18;;:::i;:::-;10817:7;10807:8;10803:22;10800:55;;;10837:16;;;;10800:55;10916:22;;;;10876:15;;;;10618:330;;;10622:3;10472:482;;;;;:::o;10959:866::-;11008:5;11038:8;11028:80;;-1:-1:-1;11079:1:1;11093:5;;11028:80;11127:4;11117:76;;-1:-1:-1;11164:1:1;11178:5;;11117:76;11209:4;11227:1;11222:59;;;;11295:1;11290:130;;;;11202:218;;11222:59;11252:1;11243:10;;11266:5;;;11290:130;11327:3;11317:8;11314:17;11311:43;;;11334:18;;:::i;:::-;-1:-1:-1;;11390:1:1;11376:16;;11405:5;;11202:218;;11504:2;11494:8;11491:16;11485:3;11479:4;11476:13;11472:36;11466:2;11456:8;11453:16;11448:2;11442:4;11439:12;11435:35;11432:77;11429:159;;;-1:-1:-1;11541:19:1;;;11573:5;;11429:159;11620:34;11645:8;11639:4;11620:34;:::i;:::-;11750:6;-1:-1:-1;;11678:79:1;11669:7;11666:92;11663:118;;;11761:18;;:::i;:::-;11799:20;;10959:866;-1:-1:-1;;;10959:866:1:o;11830:140::-;11888:5;11917:47;11958:4;11948:8;11944:19;11938:4;11917:47;:::i;11975:274::-;12015:1;12041;12031:189;;12076:77;12073:1;12066:88;12177:4;12174:1;12167:15;12205:4;12202:1;12195:15;12031:189;-1:-1:-1;12234:9:1;;11975:274::o;12254:168::-;12327:9;;;12358;;12375:15;;;12369:22;;12355:37;12345:71;;12396:18;;:::i;12427:128::-;12494:9;;;12515:11;;;12512:37;;;12529:18;;:::i;13327:184::-;13379:77;13376:1;13369:88;13476:4;13473:1;13466:15;13500:4;13497:1;13490:15;13863:197;13901:3;13929:6;13970:2;13963:5;13959:14;13997:2;13988:7;13985:15;13982:41;;14003:18;;:::i;:::-;14052:1;14039:15;;13863:197;-1:-1:-1;;;13863:197:1:o;14065:125::-;14130:9;;;14151:10;;;14148:36;;;14164:18;;:::i;14893:168::-;14960:6;14986:10;;;14998;;;14982:27;;15021:11;;;15018:37;;;15035:18;;:::i;:::-;15018:37;14893:168;;;;:::o;19594:251::-;19664:6;19717:2;19705:9;19696:7;19692:23;19688:32;19685:52;;;19733:1;19730;19723:12;19685:52;19765:9;19759:16;19784:31;19809:5;19784:31;:::i;24904:245::-;24971:6;25024:2;25012:9;25003:7;24999:23;24995:32;24992:52;;;25040:1;25037;25030:12;24992:52;25072:9;25066:16;25091:28;25113:5;25091:28;:::i;25557:1026::-;25819:4;25867:3;25856:9;25852:19;25898:6;25887:9;25880:25;25924:2;25962:6;25957:2;25946:9;25942:18;25935:34;26005:3;26000:2;25989:9;25985:18;25978:31;26029:6;26064;26058:13;26095:6;26087;26080:22;26133:3;26122:9;26118:19;26111:26;;26172:2;26164:6;26160:15;26146:29;;26193:1;26203:218;26217:6;26214:1;26211:13;26203:218;;;26282:13;;-1:-1:-1;;;;;26278:62:1;26266:75;;26396:15;;;;26361:12;;;;26239:1;26232:9;26203:218;;;-1:-1:-1;;;;;;;26477:55:1;;;;26472:2;26457:18;;26450:83;-1:-1:-1;;;26564:3:1;26549:19;26542:35;26438:3;25557:1026;-1:-1:-1;;;25557:1026:1:o;27223:306::-;27311:6;27319;27327;27380:2;27368:9;27359:7;27355:23;27351:32;27348:52;;;27396:1;27393;27386:12;27348:52;27425:9;27419:16;27409:26;;27475:2;27464:9;27460:18;27454:25;27444:35;;27519:2;27508:9;27504:18;27498:25;27488:35;;27223:306;;;;;:::o;27787:171::-;27855:6;27894:10;;;27882;;;27878:27;;27917:12;;;27914:38;;;27932:18;;:::i

Swarm Source

ipfs://55d50e172ba9fc15e321fd6cfc459cfb74ddab5dae8b66be209dbf40655e5c67

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.