S Price: $0.543693 (-8.21%)

Token

FARMER (FARM)

Overview

Max Total Supply

1,000,000 FARM

Holders

8

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 FARM

Value
$0.00
0x35538eccb986e642ce47eb803bab4c5142bbc4c7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
FARMER

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-03-05
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

// OpenZeppelin Contracts v5.0.1

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from, address to, 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);
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 */
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "R1");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism
 */
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert("O1");
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "O2");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "O1");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 */
contract ERC20 is IERC20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

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

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0) && to != address(0), "E1");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "E2");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "E3");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0) && spender != address(0), "E4");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= amount, "E5");
        unchecked {
            _approve(owner, spender, currentAllowance - amount);
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
    }
}

interface IMetropolisRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    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 swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    
    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapExactTokensForWETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapExactWETHForETH(
        uint wethAmount,
        uint amountOutMin,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface IMetropolisFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IMetropolisPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

// SwapProxy interface
interface ISwapProxy {
    function sendETHToFarmer() external;
}

// FARMER Token Contract
contract FARMER is ERC20, ReentrancyGuard, Ownable {
    // Constants
    uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18;
    uint256 private constant TAX_RATE = 5; // 5%
    uint256 private constant LIQUIDITY_TAX = 25; // 2.5%
    uint256 private constant AIRDROP_TAX = 25; // 2.5%
    uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status
    uint256 private constant MIN_TOKENS_FOR_PROCESS = 50 * 10**18;
    uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped
    uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity
    uint256 private constant MAX_SLIPPAGE = 100;
    uint256 private constant MIN_PROCESSING_INTERVAL = 30 minutes; // Minimum interval between auto processing

    // Metropolis DEX addresses
    IMetropolisRouter public metropolisRouter;
    IMetropolisFactory public metropolisFactory;
    address public sonicToken;
    address public liquidityPair;
    address public treasuryWallet;

    // Holder tracking
    mapping(address => bool) public isHolder;
    address[] public holders;

    // Events
    event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount);
    event AirdropDistributed(uint256 amount, uint256 holdersCount);
    event SwapFailed(string reason);
    event ProcessStarted(uint256 tokensForLiquidity, uint256 tokensForAirdrop);
    event SwapSuccessful(uint256 tokensSwapped, uint256 wethReceived);
    event TreasuryWalletUpdated(address oldTreasury, address newTreasury);
    event LiquidityAddFailed(string reason);
    event AirdropFailed(string reason);
    event ApprovalRefreshed(address token, address spender, uint256 amount);
    event WaitingForTreasuryTransfer(uint256 amount);
    event SwapProxySet(address indexed proxyAddress);
    event ManualSwapCompleted(uint256 tokenAmount, uint256 ethReceived);
    event ETHReceived(address indexed sender, uint256 amount);
    event ProcessorRewarded(address indexed processor, uint256 amount);
    event ReadyForProcessing(uint256 pendingAmount, uint256 minGasLimit);
    event LPTokenReceived(address indexed receiver, uint256 amount);
    event RewardAvailableForProcessing(uint256 pendingAmount, uint256 estimatedRewardPercentage);

    uint256 private _pendingLiquidityTokens;
    uint256 private _pendingAirdropTokens;
    bool private _initialized;
    bool private _inSwap;

    address public swapProxy;
    bool public swapProxySet;
    
    uint256 private _lastProcessingTime;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3;
        address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0;
        address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38;
        address _treasuryWallet = 0x95503A306cD81e08c0c43C49FAae71165937d175;

        require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0) && _treasuryWallet != address(0), "F1");

        metropolisRouter = IMetropolisRouter(_metropolisRouter);
        metropolisFactory = IMetropolisFactory(_metropolisFactory);
        sonicToken = _sonicToken;
        treasuryWallet = _treasuryWallet;

        _mint(address(this), TOTAL_SUPPLY);
    }

    function initialize() external onlyOwner {
        require(!_initialized, "F2");
        _initialized = true;

        // Try to get existing pair first
        liquidityPair = metropolisFactory.getPair(address(this), sonicToken);
        
        // If pair doesn't exist, create it
        if (liquidityPair == address(0)) {
            liquidityPair = metropolisFactory.createPair(address(this), sonicToken);
        }
        
        require(liquidityPair != address(0), "F3");

        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "F4");
        IERC20(sonicToken).approve(liquidityPair, type(uint256).max);
        IERC20(address(this)).approve(liquidityPair, type(uint256).max);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        if (
            !_inSwap && 
            from != owner() && 
            to != owner() && 
            from != address(this) && 
            to == liquidityPair
        ) {
            uint256 taxAmount = amount * TAX_RATE / 100;
            
            if (taxAmount > 0) {
                uint256 liquidityTokens = taxAmount * LIQUIDITY_TAX / 100;
                uint256 airdropTokens = taxAmount * AIRDROP_TAX / 100;
                
                uint256 transferAmount = amount - taxAmount;
                
                super._transfer(from, address(this), taxAmount);
                
                super._transfer(from, to, transferAmount);
                
                _pendingLiquidityTokens += liquidityTokens;
                _pendingAirdropTokens += airdropTokens;
                
                
                if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) {
                    emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);
                    
                    emit ReadyForProcessing(_pendingLiquidityTokens + _pendingAirdropTokens, 400000);
                    
                    emit RewardAvailableForProcessing(_pendingLiquidityTokens + _pendingAirdropTokens, 5); // %5 ödül
                }
                
                _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT);
                _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT);
                
                return;
            }
        }
        
        super._transfer(from, to, amount);

        _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT);
        _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT);
    }

    function _updateHolder(address account, bool isHolderStatus) private {
        if (account != liquidityPair && account != address(this)) {
            if (isHolderStatus && !isHolder[account]) {
                isHolder[account] = true;
                holders.push(account);
            } else if (!isHolderStatus && isHolder[account]) {
                isHolder[account] = false;
                
                // Remove from holders array
                for (uint256 i = 0; i < holders.length; i++) {
                    if (holders[i] == account) {
                        holders[i] = holders[holders.length - 1];
                        holders.pop();
                        break;
                    }
                }
            }
        }
    }

    function processLiquidityAndAirdrop() external nonReentrant {
        require(!_inSwap, "AP");
        _inSwap = true;
        
        uint256 tokensForLiquidity = _pendingLiquidityTokens;
        uint256 tokensForAirdrop = _pendingAirdropTokens;
        
        if (tokensForLiquidity == 0 && tokensForAirdrop == 0) {
            _inSwap = false;
            return;
        }
        
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 totalTokensToProcess = tokensForLiquidity + tokensForAirdrop;
        
        if (contractTokenBalance < totalTokensToProcess) {
            emit SwapFailed("Insufficient token balance");
            _inSwap = false;
            return;
        }
        
        address caller = msg.sender;
        
        uint256 maxProcessAmount = 100 * 10**18;
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop;
        
        if (totalTokensToSwap > maxProcessAmount) {
            uint256 ratio = maxProcessAmount * 1e18 / totalTokensToSwap;
            tokensForLiquidity = tokensForLiquidity * ratio / 1e18;
            tokensForAirdrop = tokensForAirdrop * ratio / 1e18;
            totalTokensToSwap = tokensForLiquidity + tokensForAirdrop;
            
            _pendingLiquidityTokens -= tokensForLiquidity;
            _pendingAirdropTokens -= tokensForAirdrop;
        } else {
            _pendingLiquidityTokens = 0;
            _pendingAirdropTokens = 0;
        }
        
        _lastProcessingTime = block.timestamp;
        
        emit ProcessStarted(tokensForLiquidity, tokensForAirdrop);
        
        // Refresh approvals
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        uint256 initialEthBalance = address(this).balance;
        
        uint256 ethReceived = _processSwap(totalTokensToSwap);
        
        if (ethReceived == 0) {
            _inSwap = false;
            return;
        }
        
        uint256 contractEthBalance = address(this).balance;
        if (contractEthBalance <= initialEthBalance) {
            emit SwapFailed("No ETH received from swap");
            _inSwap = false;
            return;
        }
        
        uint256 actualEthReceived = contractEthBalance - initialEthBalance;
        
        uint256 callerReward = 0;
        if (caller != owner() && caller != address(this)) {
            callerReward = actualEthReceived * 5 / 100;
            if (callerReward > 0) {
                (bool success, ) = caller.call{value: callerReward}("");
                if (!success) {
                    callerReward = 0;
                } else {
                    emit ProcessorRewarded(caller, callerReward);
                }
            }
        }
        
        actualEthReceived = actualEthReceived - callerReward;
        
        // Calculate amounts
        uint256 ethForLiquidity = actualEthReceived * tokensForLiquidity / totalTokensToSwap;
        uint256 ethForAirdrop = actualEthReceived - ethForLiquidity;
        
        if (ethForLiquidity > 0) {
            _addLiquidity(ethForLiquidity, tokensForLiquidity);
        }
        
        // Process airdrop with ETH
        if (ethForAirdrop > 0) {
            _processAirdropWithETH(ethForAirdrop);
        }
        
        _inSwap = false;
    }

    function _processLiquidity(uint256 wethAmount, uint256 tokenAmount) private {
    }

    function _addLiquidity(uint256 ethAmount, uint256 tokenAmount) private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance < tokenAmount) {
            emit LiquidityAddFailed("Insufficient token balance for liquidity");
            return;
        }

        uint256 minTokenAmount = tokenAmount * (100 - MAX_SLIPPAGE) / 100;
        uint256 minEthAmount = ethAmount * (100 - MAX_SLIPPAGE) / 100;
        
        _approve(address(this), address(metropolisRouter), tokenAmount);
        
        try metropolisRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            minTokenAmount,
            minEthAmount,
            owner(),
            block.timestamp + 3600
        ) {
            emit LiquidityAdded(tokenAmount, ethAmount);
            
            emit LPTokenReceived(owner(), 0);
        } catch Error(string memory reason) {
            emit LiquidityAddFailed(reason);
        } catch {
            emit LiquidityAddFailed("Unknown liquidity add error");
        }
    }

    function _processSwap(uint256 tokenAmount) private returns (uint256) {
        if (tokenAmount == 0) return 0;
        require(swapProxySet, "Swap proxy not set");
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = metropolisRouter.WETH();
        
        uint256 minAmountOut = 0;
        
        _approve(address(this), address(metropolisRouter), tokenAmount);
        
        uint256 deadline = block.timestamp + 3600;
        
        uint256 initialEthBalance = address(this).balance;
        
        try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            minAmountOut,
            path,
            swapProxy,
            deadline
        ) {
            try ISwapProxy(swapProxy).sendETHToFarmer() {
                uint256 contractEthBalance = address(this).balance;
                uint256 ethReceived = contractEthBalance - initialEthBalance;
                
                if (ethReceived > 0) {
                    emit SwapSuccessful(tokenAmount, ethReceived);
                    return ethReceived;
                } else {
                    emit SwapFailed("No ETH received after proxy transfer");
                    return 0;
                }
            } catch Error(string memory reason) {
                emit SwapFailed(string(abi.encodePacked("Proxy ETH transfer failed: ", reason)));
                return 0;
            } catch {
                emit SwapFailed("Proxy ETH transfer failed: unknown error");
                return 0;
            }
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
            return 0;
        } catch {
            emit SwapFailed("Unknown swap error");
            return 0;
        }
    }

    function _processAirdropWithETH(uint256 amount) private {
        uint256 holdersCount = holders.length;
        if (holdersCount == 0 || amount == 0) return;
        
        uint256 treasuryAmount = amount * 25 / 100;
        uint256 holderAmount = amount - treasuryAmount;
        
        if (treasuryAmount > 0 && treasuryWallet != address(0)) {
            (bool treasurySuccess, ) = treasuryWallet.call{value: treasuryAmount}("");
            if (!treasurySuccess) {
                emit AirdropFailed("Treasury ETH transfer failed");
                holderAmount = amount;
            }
        } else {
            holderAmount = amount;
        }
        
        if (holdersCount > 0 && holderAmount > 0) {
            uint256 amountPerHolder = holderAmount / holdersCount;
            if (amountPerHolder > 0) {
                for (uint256 i = 0; i < holdersCount; i++) {
                    address holder = holders[i];
                    if (holder != address(0) && holder != address(this) && holder != liquidityPair) {
                        (bool success, ) = holder.call{value: amountPerHolder}("");
                        if (!success) {
                            emit AirdropFailed("ETH transfer failed");
                        }
                    }
                }
            }
        }
        
        emit AirdropDistributed(amount, holdersCount);
    }

    // View functions
    function getHolderCount() external view returns (uint256) {
        return holders.length;
    }
    
    function getHolders() external view returns (address[] memory) {
        return holders;
    }
    
    function checkProcessingStatus() external view returns (
        bool readyForProcessing,
        uint256 pendingAmount,
        uint256 timeUntilNextProcessing,
        uint256 recommendedGasLimit
    ) {
        pendingAmount = _pendingLiquidityTokens + _pendingAirdropTokens;
        
        readyForProcessing = pendingAmount >= MIN_TOKENS_FOR_PROCESS;
        
        timeUntilNextProcessing = 0;
        
        recommendedGasLimit = 400000; // 400,000 gas units
    }

    // Initial liquidity function with WSonic
    function addInitialLiquidityWithWSonic(uint256 tokenAmount, uint256 sonicAmount) external onlyOwner {
        require(tokenAmount > 0, "NT");
        require(sonicAmount > 0, "NS");
        
        require(
            IERC20(address(this)).balanceOf(address(this)) >= tokenAmount,
            "IB"
        );
        
        require(
            IERC20(sonicToken).balanceOf(msg.sender) >= sonicAmount,
            "IS"
        );
        
        require(
            IERC20(sonicToken).transferFrom(msg.sender, address(this), sonicAmount),
            "TF"
        );
        
        _approve(address(this), address(metropolisRouter), tokenAmount);
        IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount);
        
        try metropolisRouter.addLiquidity(
            address(this),
            sonicToken,
            tokenAmount,
            sonicAmount,
            0,
            0,
            msg.sender,
            block.timestamp + 600
        ) {
            emit LiquidityAdded(tokenAmount, sonicAmount);
        } catch Error(string memory reason) {
            _approve(address(this), address(metropolisRouter), 0);
            IERC20(sonicToken).approve(address(metropolisRouter), 0);
            
            IERC20(sonicToken).transfer(msg.sender, sonicAmount);
            
            revert(reason);
        } catch {
            _approve(address(this), address(metropolisRouter), 0);
            IERC20(sonicToken).approve(address(metropolisRouter), 0);
            
            IERC20(sonicToken).transfer(msg.sender, sonicAmount);
            
            revert("FL");
        }
        
        uint256 remainingWSonic = IERC20(sonicToken).balanceOf(address(this));
        if (remainingWSonic > 0) {
            IERC20(sonicToken).transfer(msg.sender, remainingWSonic);
        }
    }

    function addInitialLiquidityWithAllTokensAndETH() external payable onlyOwner {
        uint256 tokenAmount = IERC20(address(this)).balanceOf(address(this));
        require(tokenAmount > 0, "NT");
        require(msg.value > 0, "NE");
        
        _approve(address(this), address(metropolisRouter), tokenAmount);
        
        try metropolisRouter.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,
            0,
            msg.sender,
            block.timestamp + 600
        ) {
            emit LiquidityAdded(tokenAmount, msg.value);
        } catch Error(string memory reason) {
            _approve(address(this), address(metropolisRouter), 0);
            
            payable(msg.sender).transfer(address(this).balance);
            
            revert(reason);
        } catch {
            _approve(address(this), address(metropolisRouter), 0);
            
            payable(msg.sender).transfer(address(this).balance);
            
            revert("FL");
        }
    }

    function setRouter(address _router) external onlyOwner {
        require(_router != address(0), "IR");
        metropolisRouter = IMetropolisRouter(_router);
    }

    function rescueTokens(address _token, uint256 _amount) external onlyOwner {
        require(_token != address(this), "CF");
        IERC20(_token).transfer(owner(), _amount);
    }

    // View functions for pending amounts
    function getPendingLiquidityTokens() external view returns (uint256) {
        return _pendingLiquidityTokens;
    }

    function getPendingAirdropTokens() external view returns (uint256) {
        return _pendingAirdropTokens;
    }

    // Manual trigger for processing (anyone can call)
    function triggerProcessing() external {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP");
        require(holders.length > 0, "NH");
        try this.processLiquidityAndAirdrop() {
            // Process successful
        } catch {
            emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);
        }
    }
    
    function processLiquidityAndAirdropAndGetReward() external {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP: Islenecek token yok");
        require(holders.length > 0, "NH: Islem yapilacak holder bulunamadi");
        
        try this.processLiquidityAndAirdrop() {
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
        } catch {
            emit SwapFailed("processLiquidityAndAirdrop basarisiz");
        }
    }

    function refreshAllApprovals() external onlyOwner {
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) {
            emit ApprovalRefreshed(sonicToken, address(metropolisRouter), type(uint256).max);
        } catch {}
        
        if (liquidityPair != address(0)) {
            try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {
                emit ApprovalRefreshed(sonicToken, liquidityPair, type(uint256).max);
            } catch {}
            
            try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {
                emit ApprovalRefreshed(address(this), liquidityPair, type(uint256).max);
            } catch {}
        }
    }

    function manualSwap(uint256 tokenAmount) external onlyOwner nonReentrant {
        require(tokenAmount > 0, "Amount must be greater than 0");
        require(tokenAmount <= balanceOf(address(this)), "Insufficient balance");
        require(swapProxySet, "Swap proxy not set");
        
        uint256 ethReceived = _processSwap(tokenAmount);
        
        require(ethReceived > 0, "Swap failed, no ETH received");
        
        emit ManualSwapCompleted(tokenAmount, ethReceived);
    }

    function setTreasuryWallet(address newTreasuryWallet) external onlyOwner {
        require(newTreasuryWallet != address(0), "ZA");
        
        address oldTreasury = treasuryWallet;
        treasuryWallet = newTreasuryWallet;
        
        emit TreasuryWalletUpdated(oldTreasury, newTreasuryWallet);
    }

    function manualLiquidityAndAirdrop(uint256 tokenAmount) external onlyOwner {
        require(tokenAmount > 0, "NT");
        require(IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB");
        
        // Refresh approvals
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        uint256 initialEthBalance = address(this).balance;
        uint256 ethReceived = _processSwap(tokenAmount);
        
        if (ethReceived == 0) {
            return;
        }
        
        uint256 contractEthBalance = address(this).balance;
        if (contractEthBalance <= initialEthBalance) {
            emit SwapFailed("No ETH received from swap");
            return;
        }
        
        uint256 actualEthReceived = contractEthBalance - initialEthBalance;
        
        // Calculate amounts
        uint256 ethForLiquidity = actualEthReceived * LIQUIDITY_TAX / 100;
        uint256 ethForAirdrop = actualEthReceived * AIRDROP_TAX / 100;
        
        if (ethForLiquidity > 0) {
            _addLiquidity(ethForLiquidity, tokenAmount * LIQUIDITY_TAX / 100);
        }
        // Process airdrop with ETH
        if (ethForAirdrop > 0) {
            _processAirdropWithETH(ethForAirdrop);
        }
    }

    receive() external payable {
        if (msg.value > 0) {
            emit ETHReceived(msg.sender, msg.value);
        }
    }

    function setSwapProxy(address _swapProxy) external onlyOwner {
        require(!swapProxySet, "Proxy already set");
        require(_swapProxy != address(0), "Invalid proxy address");
        swapProxy = _swapProxy;
        swapProxySet = true;
        emit SwapProxySet(_swapProxy);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","type":"event"},{"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":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LPTokenReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"ManualSwapCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"processor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProcessorRewarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pendingAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minGasLimit","type":"uint256"}],"name":"ReadyForProcessing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pendingAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"estimatedRewardPercentage","type":"uint256"}],"name":"RewardAvailableForProcessing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"}],"name":"SwapProxySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldTreasury","type":"address"},{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WaitingForTreasuryTransfer","type":"event"},{"inputs":[],"name":"addInitialLiquidityWithAllTokensAndETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"addInitialLiquidityWithWSonic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkProcessingStatus","outputs":[{"internalType":"bool","name":"readyForProcessing","type":"bool"},{"internalType":"uint256","name":"pendingAmount","type":"uint256"},{"internalType":"uint256","name":"timeUntilNextProcessing","type":"uint256"},{"internalType":"uint256","name":"recommendedGasLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdropAndGetReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapProxy","type":"address"}],"name":"setSwapProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProxySet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000314565b5060046200006f828262000314565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c38162000171565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790559091620001673069d3c21bcecceda1000000620001c3565b5050505062000408565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002005760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b8060026000828254620002149190620003e0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026b57600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b505050505050565b81516001600160401b0381111562000330576200033062000270565b620003488162000341845462000286565b84620002c2565b602080601f831160018114620003805760008415620003675750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b15788860151825594840194600190910190840162000390565b5085821015620003d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200040257634e487b7160e01b600052601160045260246000fd5b92915050565b613daf80620004186000396000f3fe6080604052600436106102295760003560e01c80638129fc1c11610123578063c84a705c116100ab578063e84348151161006f578063e843481514610697578063e8955f57146106ac578063ed9cacfe146106e3578063f2fde38b146106f8578063fd7c9fab1461071857600080fd5b8063c84a705c146105d9578063d4d7b19a146105f9578063d720a2a814610629578063dd62ed3e14610649578063e3a8fa551461068f57600080fd5b8063a8602fea116100f2578063a8602fea14610538578063a9059cbb14610558578063b70143c914610578578063b9276e4b14610598578063c0d78655146105b957600080fd5b80638129fc1c146104d05780638da5cb5b146104e557806395d89b4114610503578063975b87e81461051857600080fd5b80634626402b116101b15780636ec4be90116101755780636ec4be901461044057806370a08231146104665780637136982b146104865780637ac84fc11461049b578063808a5457146104b057600080fd5b80634626402b146103a957806357376198146103c95780635d76b04c146103e95780635fe8e7cc146103fe57806362b6327a1461042057600080fd5b806323b872dd116101f857806323b872dd146103005780632a11ced014610320578063313ce56714610358578063397883d214610374578063461a3a951461038957600080fd5b806306fdde031461027157806308dee2b41461029c578063095ea7b3146102bb57806318160ddd146102eb57600080fd5b3661026c57341561026a5760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b34801561027d57600080fd5b50610286610738565b6040516102939190613845565b60405180910390f35b3480156102a857600080fd5b50600e545b604051908152602001610293565b3480156102c757600080fd5b506102db6102d636600461388d565b6107ca565b6040519015158152602001610293565b3480156102f757600080fd5b506002546102ad565b34801561030c57600080fd5b506102db61031b3660046138b9565b6107e4565b34801561032c57600080fd5b5061034061033b3660046138fa565b610808565b6040516001600160a01b039091168152602001610293565b34801561036457600080fd5b5060405160128152602001610293565b34801561038057600080fd5b5061026a610832565b34801561039557600080fd5b50600954610340906001600160a01b031681565b3480156103b557600080fd5b50600b54610340906001600160a01b031681565b3480156103d557600080fd5b5061026a6103e436600461388d565b610948565b3480156103f557600080fd5b50600f546102ad565b34801561040a57600080fd5b50610413610a14565b6040516102939190613957565b34801561042c57600080fd5b50600754610340906001600160a01b031681565b34801561044c57600080fd5b50601054610340906201000090046001600160a01b031681565b34801561047257600080fd5b506102ad610481366004613971565b610a75565b34801561049257600080fd5b50600d546102ad565b3480156104a757600080fd5b5061026a610a90565b3480156104bc57600080fd5b50600a54610340906001600160a01b031681565b3480156104dc57600080fd5b5061026a610f24565b3480156104f157600080fd5b506006546001600160a01b0316610340565b34801561050f57600080fd5b5061028661129a565b34801561052457600080fd5b5061026a61053336600461398e565b6112a9565b34801561054457600080fd5b5061026a610553366004613971565b6119ec565b34801561056457600080fd5b506102db61057336600461388d565b611a90565b34801561058457600080fd5b5061026a6105933660046138fa565b611a9e565b3480156105a457600080fd5b506010546102db90600160b01b900460ff1681565b3480156105c557600080fd5b5061026a6105d4366004613971565b611c6b565b3480156105e557600080fd5b5061026a6105f4366004613971565b611cd0565b34801561060557600080fd5b506102db610614366004613971565b600c6020526000908152604090205460ff1681565b34801561063557600080fd5b5061026a6106443660046138fa565b611dd9565b34801561065557600080fd5b506102ad6106643660046139b0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61026a611fab565b3480156106a357600080fd5b5061026a6121fa565b3480156106b857600080fd5b506106c16123a6565b6040805194151585526020850193909352918301526060820152608001610293565b3480156106ef57600080fd5b5061026a6123db565b34801561070457600080fd5b5061026a610713366004613971565b612654565b34801561072457600080fd5b50600854610340906001600160a01b031681565b606060038054610747906139e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610773906139e9565b80156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b5050505050905090565b6000336107d88185856126a0565b60019150505b92915050565b6000336107f2858285612752565b6107fd8585856127ba565b506001949350505050565b600d818154811061081857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000600e54118061084557506000600f54115b61087b5760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d546108af5760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610872565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ea57600080fd5b505af19250505080156108fb575060015b610946577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f5460405161093d929190918252602082015260400190565b60405180910390a15b565b610950612a3c565b306001600160a01b0383160361098d5760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610872565b816001600160a01b031663a9059cbb6109ae6006546001600160a01b031690565b836040518363ffffffff1660e01b81526004016109cc929190613a23565b6020604051808303816000875af11580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613a3c565b505050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156107c057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a4e575050505050905090565b6001600160a01b031660009081526020819052604090205490565b600260055403610ac75760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610872565b6002600555601054610100900460ff1615610b095760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610872565b6010805461ff001916610100179055600e54600f5481158015610b2a575080155b15610b415750506010805461ff0019169055610f1d565b6000610b4c30610a75565b90506000610b5a8385613a74565b905080821015610bce57600080516020613d5a833981519152604051610bb1906020808252601a908201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b60405180910390a150506010805461ff001916905550610f1d9050565b3368056bc75e2d631000006000610be58688613a74565b905081811115610c9157600081610c0484670de0b6b3a7640000613a87565b610c0e9190613a9e565b9050670de0b6b3a7640000610c23828a613a87565b610c2d9190613a9e565b9750670de0b6b3a7640000610c428289613a87565b610c4c9190613a9e565b9650610c588789613a74565b915087600e6000828254610c6c9190613ac0565b9250508190555086600f6000828254610c859190613ac0565b90915550610c9c915050565b6000600e819055600f555b4260115560408051888152602081018890527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a1600754610cf39030906001600160a01b03166000196126a0565b476000610cff83612a8a565b905080600003610d235750506010805461ff001916905550610f1d95505050505050565b47828111610d9757600080516020613d5a833981519152604051610d749060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150506010805461ff001916905550610f1d9650505050505050565b6000610da38483613ac0565b90506000610db96006546001600160a01b031690565b6001600160a01b0316886001600160a01b031614158015610de357506001600160a01b0388163014155b15610eb1576064610df5836005613a87565b610dff9190613a9e565b90508015610eb1576000886001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e54576040519150601f19603f3d011682016040523d82523d6000602084013e610e59565b606091505b5050905080610e6b5760009150610eaf565b886001600160a01b03167f9771326b75b19abc364419d27c012617e9fc89f850583037b570e4b74906e30183604051610ea691815260200190565b60405180910390a25b505b610ebb8183613ac0565b9150600086610eca8e85613a87565b610ed49190613a9e565b90506000610ee28285613ac0565b90508115610ef457610ef4828f612efe565b8015610f0357610f03816131ea565b50506010805461ff00191690555050505050505050505050505b6001600555565b610f2c612a3c565b60105460ff1615610f645760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610872565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190613ad3565b600a80546001600160a01b0319166001600160a01b039290921691821790556110a3576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801561105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110829190613ad3565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166110e05760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610872565b6007546110fa9030906001600160a01b03166000196126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926111329291169060001990600401613a23565b6020604051808303816000875af1158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190613a3c565b6111a65760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610872565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926111de9291169060001990600401613a23565b6020604051808303816000875af11580156111fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112219190613a3c565b50600a5460405163095ea7b360e01b8152309163095ea7b391611254916001600160a01b03169060001990600401613a23565b6020604051808303816000875af1158015611273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112979190613a3c565b50565b606060048054610747906139e9565b6112b1612a3c565b600082116112d15760405162461bcd60e51b815260040161087290613af0565b600081116113065760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610872565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190613b0c565b101561139a5760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610872565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156113e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114069190613b0c565b10156114395760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610872565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061146d90339030908690600401613b25565b6020604051808303816000875af115801561148c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b09190613a3c565b6114e15760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610872565b6007546114f99030906001600160a01b0316846126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261152f929116908590600401613a23565b6020604051808303816000875af115801561154e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190613a3c565b506007546009546001600160a01b039182169163e8e33700913091168585600080336115a042610258613a74565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1925050508015611638575060408051601f3d908101601f1916820190925261163591810190613b49565b60015b6118c057611644613b77565b806308c379a0036117875750611658613bce565b806116635750611789565b60075461167c9030906001600160a01b031660006126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116b392911690600090600401613a23565b6020604051808303816000875af11580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190613a3c565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906117299033908690600401613a23565b6020604051808303816000875af1158015611748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176c9190613a3c565b508060405162461bcd60e51b81526004016108729190613845565b505b6007546117a29030906001600160a01b031660006126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926117d992911690600090600401613a23565b6020604051808303816000875af11580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190613a3c565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061184f9033908590600401613a23565b6020604051808303816000875af115801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190613a3c565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610872565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190613b0c565b90508015610a0f5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906119a39033908590600401613a23565b6020604051808303816000875af11580156119c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e69190613a3c565b50505050565b6119f4612a3c565b6001600160a01b038116611a2f5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610872565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b6000336107d88185856127ba565b611aa6612a3c565b600260055403611add5760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610872565b600260055580611b2f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610872565b611b3830610a75565b811115611b7e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610872565b601054600160b01b900460ff16611bcc5760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610872565b6000611bd782612a8a565b905060008111611c295760405162461bcd60e51b815260206004820152601c60248201527f53776170206661696c65642c206e6f20455448207265636569766564000000006044820152606401610872565b60408051838152602081018390527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a150506001600555565b611c73612a3c565b6001600160a01b038116611cae5760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610872565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611cd8612a3c565b601054600160b01b900460ff1615611d265760405162461bcd60e51b8152602060048201526011602482015270141c9bde1e48185b1c9958591e481cd95d607a1b6044820152606401610872565b6001600160a01b038116611d745760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642070726f7879206164647265737360581b6044820152606401610872565b6010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b611de1612a3c565b60008111611e015760405162461bcd60e51b815260040161087290613af0565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e629190613b0c565b1015611e955760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610872565b600754611eaf9030906001600160a01b03166000196126a0565b476000611ebb83612a8a565b905080600003611eca57505050565b47828111611f2957600080516020613d5a833981519152604051611f1b9060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150505050565b6000611f358483613ac0565b905060006064611f46601984613a87565b611f509190613a9e565b905060006064611f61601985613a87565b611f6b9190613a9e565b90508115611f9357611f93826064611f8460198b613a87565b611f8e9190613a9e565b612efe565b8015611fa257611fa2816131ea565b50505050505050565b611fb3612a3c565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120159190613b0c565b9050600081116120375760405162461bcd60e51b815260040161087290613af0565b6000341161206c5760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610872565b6007546120849030906001600160a01b0316836126a0565b6007546001600160a01b031663f305d719343084600080336120a842610258613a74565b6040518863ffffffff1660e01b81526004016120c996959493929190613c58565b60606040518083038185885af193505050508015612104575060408051601f3d908101601f1916820190925261210191810190613b49565b60015b6121bb57612110613b77565b806308c379a0036121745750612124613bce565b8061212f5750612176565b6007546121489030906001600160a01b031660006126a0565b60405133904780156108fc02916000818181858888f1935050505015801561176c573d6000803e3d6000fd5b505b60075461218f9030906001600160a01b031660006126a0565b60405133904780156108fc02916000818181858888f19350505050158015611892573d6000803e3d6000fd5b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b9250015b60405180910390a150565b6000600e54118061220d57506000600f54115b6122595760405162461bcd60e51b815260206004820152601760248201527f4e503a2049736c656e6563656b20746f6b656e20796f6b0000000000000000006044820152606401610872565b600d546122b65760405162461bcd60e51b815260206004820152602560248201527f4e483a2049736c656d20796170696c6163616b20686f6c6465722062756c756e604482015264616d61646960d81b6064820152608401610872565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156122f157600080fd5b505af1925050508015612302575060015b6109465761230e613b77565b806308c379a00361234a5750612322613bce565b8061232d575061234c565b600080516020613d5a833981519152816040516121ef9190613845565b505b600080516020613d5a83398151915260405161093d9060208082526024908201527f70726f636573734c6971756964697479416e6441697264726f7020626173617260408201526334b9b4bd60e11b606082015260800190565b600080600080600f54600e546123bc9190613a74565b6802b5e3af16b1880000811015959094506000935062061a8092509050565b6123e3612a3c565b6007546123fd9030906001600160a01b03166000196126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926124359291169060001990600401613a23565b6020604051808303816000875af1925050508015612470575060408051601f3d908101601f1916820190925261246d91810190613a3c565b60015b156124c657506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926124bd926001600160a01b039182169291169060001990613b25565b60405180910390a15b600a546001600160a01b03161561094657600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261250f9291169060001990600401613a23565b6020604051808303816000875af192505050801561254a575060408051601f3d908101601f1916820190925261254791810190613a3c565b60015b156125a05750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612597926001600160a01b039182169291169060001990613b25565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b3916125d2916001600160a01b03169060001990600401613a23565b6020604051808303816000875af192505050801561260d575060408051601f3d908101601f1916820190925261260a91810190613a3c565b60015b156109465750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca9161093d9130916001600160a01b03169060001990613b25565b61265c612a3c565b6001600160a01b0381166126975760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610872565b611297816134b7565b6001600160a01b038316158015906126c057506001600160a01b03821615155b6126f15760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610872565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054818110156127ad5760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610872565b6119e684848484036126a0565b601054610100900460ff161580156127e057506006546001600160a01b03848116911614155b80156127fa57506006546001600160a01b03838116911614155b801561280f57506001600160a01b0383163014155b80156128285750600a546001600160a01b038381169116145b15612a05576000606461283c600584613a87565b6128469190613a9e565b90508015612a03576000606461285d601984613a87565b6128679190613a9e565b905060006064612878601985613a87565b6128829190613a9e565b905060006128908486613ac0565b905061289d873086613509565b6128a8878783613509565b82600e60008282546128ba9190613a74565b9250508190555081600f60008282546128d39190613a74565b9091555050600f54600e546802b5e3af16b1880000916128f291613a74565b106129d0577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051612935929190918252602082015260400190565b60405180910390a17f166cfdb014c67ae8b32e0df45eca1171fe28cc0198094c266ca20c641e8c82d0600f54600e5461296e9190613a74565b6040805191825262061a8060208301520160405180910390a17f114686b9e702daeb8b2d1103d8bcf05eaad0c13a55be6bb01b97335dacee4221600f54600e546129b89190613a74565b60408051918252600560208301520160405180910390a15b6129ed87678ac7230489e800006129e68a610a75565b101561360e565b611fa286678ac7230489e800006129e689610a75565b505b612a10838383613509565b612a2683678ac7230489e800006129e686610a75565b610a0f82678ac7230489e800006129e685610a75565b33612a4f6006546001600160a01b031690565b6001600160a01b0316146109465760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610872565b600081600003612a9c57506000919050565b601054600160b01b900460ff16612aea5760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610872565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b1f57612b1f613c93565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9c9190613ad3565b81600181518110612baf57612baf613c93565b6001600160a01b039283166020918202929092010152600754600091612bd891309116866126a0565b6000612be642610e10613a74565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac94792612c2f928b9289928b9262010000909104909116908990600401613ca9565b600060405180830381600087803b158015612c4957600080fd5b505af1925050508015612c5a575060015b612d0f57612c66613b77565b806308c379a003612cb75750612c7a613bce565b80612c855750612cb9565b600080516020613d5a83398151915281604051612ca29190613845565b60405180910390a15060009695505050505050565b505b600080516020613d5a833981519152604051612cfb906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b60405180910390a150600095945050505050565b601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d5f57600080fd5b505af1925050508015612d70575060015b612e3557612d7c613b77565b806308c379a003612dd55750612d90613bce565b80612d9b5750612dd7565b600080516020613d5a83398151915281604051602001612dbb9190613ce5565b60408051601f1981840301815290829052612ca291613845565b505b600080516020613d5a833981519152604051612cfb9060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b476000612e428383613ac0565b90508015612e8e5760408051898152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1979650505050505050565b600080516020613d5a833981519152604051612ee89060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a1506000979650505050505050565b6000612f0930610a75565b905081811015612f90577fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051612f839060208082526028908201527f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206c604082015267697175696469747960c01b606082015260800190565b60405180910390a1505050565b60006064612f9e8180613ac0565b612fa89085613a87565b612fb29190613a9e565b905060006064612fc28180613ac0565b612fcc9087613a87565b612fd69190613a9e565b600754909150612ff19030906001600160a01b0316866126a0565b6007546001600160a01b031663f305d71986308786866130196006546001600160a01b031690565b61302542610e10613a74565b6040518863ffffffff1660e01b815260040161304696959493929190613c58565b60606040518083038185885af193505050508015613081575060408051601f3d908101601f1916820190925261307e91810190613b49565b60015b6131575761308d613b77565b806308c379a0036130e957506130a1613bce565b806130ac57506130eb565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516130db9190613845565b60405180910390a1506131e3565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad60405161314a906020808252601b908201527f556e6b6e6f776e206c697175696469747920616464206572726f720000000000604082015260600190565b60405180910390a16131e3565b505060408051868152602081018890527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16006546001600160a01b03166001600160a01b03167fb4a8f0077e5aebb5cf42d9b6adf858fcb4dfd47ce2ecd5ae56708582389d449d60006040516131da91815260200190565b60405180910390a25b5050505050565b600d548015806131f8575081155b15613201575050565b60006064613210846019613a87565b61321a9190613a9e565b905060006132288285613ac0565b90506000821180156132445750600b546001600160a01b031615155b1561331557600b546040516000916001600160a01b03169084908381818185875af1925050503d8060008114613296576040519150601f19603f3d011682016040523d82523d6000602084013e61329b565b606091505b505090508061330f577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051613303906020808252601c908201527f547265617375727920455448207472616e73666572206661696c656400000000604082015260600190565b60405180910390a18491505b50613318565b50825b6000831180156133285750600081115b156134815760006133398483613a9e565b9050801561347f5760005b8481101561347d576000600d828154811061336157613361613c93565b6000918252602090912001546001600160a01b03169050801580159061339057506001600160a01b0381163014155b80156133aa5750600a546001600160a01b03828116911614155b1561346a576000816001600160a01b03168460405160006040518083038185875af1925050503d80600081146133fc576040519150601f19603f3d011682016040523d82523d6000602084013e613401565b606091505b5050905080613468577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161345f90602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b508061347581613d2a565b915050613344565b505b505b60408051858152602081018590527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101611f1b565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061352957506001600160a01b03821615155b61355a5760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610872565b6001600160a01b038316600090815260208190526040902054818110156135a85760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610872565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36119e6565b600a546001600160a01b0383811691161480159061363557506001600160a01b0382163014155b1561381d5780801561366057506001600160a01b0382166000908152600c602052604090205460ff16155b156136cc57506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156136f257506001600160a01b0382166000908152600c602052604090205460ff165b1561381d576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610a0f57826001600160a01b0316600d828154811061373f5761373f613c93565b6000918252602090912001546001600160a01b03160361380b57600d805461376990600190613ac0565b8154811061377957613779613c93565b600091825260209091200154600d80546001600160a01b0390921691839081106137a5576137a5613c93565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806137e4576137e4613d43565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061381581613d2a565b915050613718565b5050565b60005b8381101561383c578181015183820152602001613824565b50506000910152565b6020815260008251806020840152613864816040850160208701613821565b601f01601f19169190910160400192915050565b6001600160a01b038116811461129757600080fd5b600080604083850312156138a057600080fd5b82356138ab81613878565b946020939093013593505050565b6000806000606084860312156138ce57600080fd5b83356138d981613878565b925060208401356138e981613878565b929592945050506040919091013590565b60006020828403121561390c57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561394c5781516001600160a01b031687529582019590820190600101613927565b509495945050505050565b60208152600061396a6020830184613913565b9392505050565b60006020828403121561398357600080fd5b813561396a81613878565b600080604083850312156139a157600080fd5b50508035926020909101359150565b600080604083850312156139c357600080fd5b82356139ce81613878565b915060208301356139de81613878565b809150509250929050565b600181811c908216806139fd57607f821691505b602082108103613a1d57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215613a4e57600080fd5b8151801515811461396a57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156107de576107de613a5e565b80820281158282048414176107de576107de613a5e565b600082613abb57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156107de576107de613a5e565b600060208284031215613ae557600080fd5b815161396a81613878565b602080825260029082015261139560f21b604082015260600190565b600060208284031215613b1e57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600080600060608486031215613b5e57600080fd5b8351925060208401519150604084015190509250925092565b600060033d1115613b905760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715613bc757634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015613bdc5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613c0c57505050505090565b8285019150815181811115613c245750505050505090565b843d8701016020828501011115613c3e5750505050505090565b613c4d60208286010187613b93565b509095945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a060408201526000613cc860a0830186613913565b6001600160a01b0394909416606083015250608001529392505050565b7f50726f787920455448207472616e73666572206661696c65643a200000000000815260008251613d1d81601b850160208701613821565b91909101601b0192915050565b600060018201613d3c57613d3c613a5e565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a26469706673582212208a5947c7c161a9c177e26d82bd176f569fe24c2bc0abf9ee74a4995b400d113664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638129fc1c11610123578063c84a705c116100ab578063e84348151161006f578063e843481514610697578063e8955f57146106ac578063ed9cacfe146106e3578063f2fde38b146106f8578063fd7c9fab1461071857600080fd5b8063c84a705c146105d9578063d4d7b19a146105f9578063d720a2a814610629578063dd62ed3e14610649578063e3a8fa551461068f57600080fd5b8063a8602fea116100f2578063a8602fea14610538578063a9059cbb14610558578063b70143c914610578578063b9276e4b14610598578063c0d78655146105b957600080fd5b80638129fc1c146104d05780638da5cb5b146104e557806395d89b4114610503578063975b87e81461051857600080fd5b80634626402b116101b15780636ec4be90116101755780636ec4be901461044057806370a08231146104665780637136982b146104865780637ac84fc11461049b578063808a5457146104b057600080fd5b80634626402b146103a957806357376198146103c95780635d76b04c146103e95780635fe8e7cc146103fe57806362b6327a1461042057600080fd5b806323b872dd116101f857806323b872dd146103005780632a11ced014610320578063313ce56714610358578063397883d214610374578063461a3a951461038957600080fd5b806306fdde031461027157806308dee2b41461029c578063095ea7b3146102bb57806318160ddd146102eb57600080fd5b3661026c57341561026a5760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b34801561027d57600080fd5b50610286610738565b6040516102939190613845565b60405180910390f35b3480156102a857600080fd5b50600e545b604051908152602001610293565b3480156102c757600080fd5b506102db6102d636600461388d565b6107ca565b6040519015158152602001610293565b3480156102f757600080fd5b506002546102ad565b34801561030c57600080fd5b506102db61031b3660046138b9565b6107e4565b34801561032c57600080fd5b5061034061033b3660046138fa565b610808565b6040516001600160a01b039091168152602001610293565b34801561036457600080fd5b5060405160128152602001610293565b34801561038057600080fd5b5061026a610832565b34801561039557600080fd5b50600954610340906001600160a01b031681565b3480156103b557600080fd5b50600b54610340906001600160a01b031681565b3480156103d557600080fd5b5061026a6103e436600461388d565b610948565b3480156103f557600080fd5b50600f546102ad565b34801561040a57600080fd5b50610413610a14565b6040516102939190613957565b34801561042c57600080fd5b50600754610340906001600160a01b031681565b34801561044c57600080fd5b50601054610340906201000090046001600160a01b031681565b34801561047257600080fd5b506102ad610481366004613971565b610a75565b34801561049257600080fd5b50600d546102ad565b3480156104a757600080fd5b5061026a610a90565b3480156104bc57600080fd5b50600a54610340906001600160a01b031681565b3480156104dc57600080fd5b5061026a610f24565b3480156104f157600080fd5b506006546001600160a01b0316610340565b34801561050f57600080fd5b5061028661129a565b34801561052457600080fd5b5061026a61053336600461398e565b6112a9565b34801561054457600080fd5b5061026a610553366004613971565b6119ec565b34801561056457600080fd5b506102db61057336600461388d565b611a90565b34801561058457600080fd5b5061026a6105933660046138fa565b611a9e565b3480156105a457600080fd5b506010546102db90600160b01b900460ff1681565b3480156105c557600080fd5b5061026a6105d4366004613971565b611c6b565b3480156105e557600080fd5b5061026a6105f4366004613971565b611cd0565b34801561060557600080fd5b506102db610614366004613971565b600c6020526000908152604090205460ff1681565b34801561063557600080fd5b5061026a6106443660046138fa565b611dd9565b34801561065557600080fd5b506102ad6106643660046139b0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61026a611fab565b3480156106a357600080fd5b5061026a6121fa565b3480156106b857600080fd5b506106c16123a6565b6040805194151585526020850193909352918301526060820152608001610293565b3480156106ef57600080fd5b5061026a6123db565b34801561070457600080fd5b5061026a610713366004613971565b612654565b34801561072457600080fd5b50600854610340906001600160a01b031681565b606060038054610747906139e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610773906139e9565b80156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b5050505050905090565b6000336107d88185856126a0565b60019150505b92915050565b6000336107f2858285612752565b6107fd8585856127ba565b506001949350505050565b600d818154811061081857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000600e54118061084557506000600f54115b61087b5760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d546108af5760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610872565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ea57600080fd5b505af19250505080156108fb575060015b610946577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f5460405161093d929190918252602082015260400190565b60405180910390a15b565b610950612a3c565b306001600160a01b0383160361098d5760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610872565b816001600160a01b031663a9059cbb6109ae6006546001600160a01b031690565b836040518363ffffffff1660e01b81526004016109cc929190613a23565b6020604051808303816000875af11580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613a3c565b505050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156107c057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a4e575050505050905090565b6001600160a01b031660009081526020819052604090205490565b600260055403610ac75760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610872565b6002600555601054610100900460ff1615610b095760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610872565b6010805461ff001916610100179055600e54600f5481158015610b2a575080155b15610b415750506010805461ff0019169055610f1d565b6000610b4c30610a75565b90506000610b5a8385613a74565b905080821015610bce57600080516020613d5a833981519152604051610bb1906020808252601a908201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b60405180910390a150506010805461ff001916905550610f1d9050565b3368056bc75e2d631000006000610be58688613a74565b905081811115610c9157600081610c0484670de0b6b3a7640000613a87565b610c0e9190613a9e565b9050670de0b6b3a7640000610c23828a613a87565b610c2d9190613a9e565b9750670de0b6b3a7640000610c428289613a87565b610c4c9190613a9e565b9650610c588789613a74565b915087600e6000828254610c6c9190613ac0565b9250508190555086600f6000828254610c859190613ac0565b90915550610c9c915050565b6000600e819055600f555b4260115560408051888152602081018890527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a1600754610cf39030906001600160a01b03166000196126a0565b476000610cff83612a8a565b905080600003610d235750506010805461ff001916905550610f1d95505050505050565b47828111610d9757600080516020613d5a833981519152604051610d749060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150506010805461ff001916905550610f1d9650505050505050565b6000610da38483613ac0565b90506000610db96006546001600160a01b031690565b6001600160a01b0316886001600160a01b031614158015610de357506001600160a01b0388163014155b15610eb1576064610df5836005613a87565b610dff9190613a9e565b90508015610eb1576000886001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e54576040519150601f19603f3d011682016040523d82523d6000602084013e610e59565b606091505b5050905080610e6b5760009150610eaf565b886001600160a01b03167f9771326b75b19abc364419d27c012617e9fc89f850583037b570e4b74906e30183604051610ea691815260200190565b60405180910390a25b505b610ebb8183613ac0565b9150600086610eca8e85613a87565b610ed49190613a9e565b90506000610ee28285613ac0565b90508115610ef457610ef4828f612efe565b8015610f0357610f03816131ea565b50506010805461ff00191690555050505050505050505050505b6001600555565b610f2c612a3c565b60105460ff1615610f645760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610872565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190613ad3565b600a80546001600160a01b0319166001600160a01b039290921691821790556110a3576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801561105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110829190613ad3565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166110e05760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610872565b6007546110fa9030906001600160a01b03166000196126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926111329291169060001990600401613a23565b6020604051808303816000875af1158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190613a3c565b6111a65760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610872565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926111de9291169060001990600401613a23565b6020604051808303816000875af11580156111fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112219190613a3c565b50600a5460405163095ea7b360e01b8152309163095ea7b391611254916001600160a01b03169060001990600401613a23565b6020604051808303816000875af1158015611273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112979190613a3c565b50565b606060048054610747906139e9565b6112b1612a3c565b600082116112d15760405162461bcd60e51b815260040161087290613af0565b600081116113065760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610872565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190613b0c565b101561139a5760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610872565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156113e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114069190613b0c565b10156114395760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610872565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061146d90339030908690600401613b25565b6020604051808303816000875af115801561148c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b09190613a3c565b6114e15760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610872565b6007546114f99030906001600160a01b0316846126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261152f929116908590600401613a23565b6020604051808303816000875af115801561154e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115729190613a3c565b506007546009546001600160a01b039182169163e8e33700913091168585600080336115a042610258613a74565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1925050508015611638575060408051601f3d908101601f1916820190925261163591810190613b49565b60015b6118c057611644613b77565b806308c379a0036117875750611658613bce565b806116635750611789565b60075461167c9030906001600160a01b031660006126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116b392911690600090600401613a23565b6020604051808303816000875af11580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190613a3c565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906117299033908690600401613a23565b6020604051808303816000875af1158015611748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176c9190613a3c565b508060405162461bcd60e51b81526004016108729190613845565b505b6007546117a29030906001600160a01b031660006126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926117d992911690600090600401613a23565b6020604051808303816000875af11580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190613a3c565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061184f9033908590600401613a23565b6020604051808303816000875af115801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190613a3c565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610872565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190613b0c565b90508015610a0f5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906119a39033908590600401613a23565b6020604051808303816000875af11580156119c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e69190613a3c565b50505050565b6119f4612a3c565b6001600160a01b038116611a2f5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610872565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b6000336107d88185856127ba565b611aa6612a3c565b600260055403611add5760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610872565b600260055580611b2f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610872565b611b3830610a75565b811115611b7e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610872565b601054600160b01b900460ff16611bcc5760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610872565b6000611bd782612a8a565b905060008111611c295760405162461bcd60e51b815260206004820152601c60248201527f53776170206661696c65642c206e6f20455448207265636569766564000000006044820152606401610872565b60408051838152602081018390527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a150506001600555565b611c73612a3c565b6001600160a01b038116611cae5760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610872565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611cd8612a3c565b601054600160b01b900460ff1615611d265760405162461bcd60e51b8152602060048201526011602482015270141c9bde1e48185b1c9958591e481cd95d607a1b6044820152606401610872565b6001600160a01b038116611d745760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642070726f7879206164647265737360581b6044820152606401610872565b6010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b611de1612a3c565b60008111611e015760405162461bcd60e51b815260040161087290613af0565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e629190613b0c565b1015611e955760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610872565b600754611eaf9030906001600160a01b03166000196126a0565b476000611ebb83612a8a565b905080600003611eca57505050565b47828111611f2957600080516020613d5a833981519152604051611f1b9060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150505050565b6000611f358483613ac0565b905060006064611f46601984613a87565b611f509190613a9e565b905060006064611f61601985613a87565b611f6b9190613a9e565b90508115611f9357611f93826064611f8460198b613a87565b611f8e9190613a9e565b612efe565b8015611fa257611fa2816131ea565b50505050505050565b611fb3612a3c565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120159190613b0c565b9050600081116120375760405162461bcd60e51b815260040161087290613af0565b6000341161206c5760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610872565b6007546120849030906001600160a01b0316836126a0565b6007546001600160a01b031663f305d719343084600080336120a842610258613a74565b6040518863ffffffff1660e01b81526004016120c996959493929190613c58565b60606040518083038185885af193505050508015612104575060408051601f3d908101601f1916820190925261210191810190613b49565b60015b6121bb57612110613b77565b806308c379a0036121745750612124613bce565b8061212f5750612176565b6007546121489030906001600160a01b031660006126a0565b60405133904780156108fc02916000818181858888f1935050505015801561176c573d6000803e3d6000fd5b505b60075461218f9030906001600160a01b031660006126a0565b60405133904780156108fc02916000818181858888f19350505050158015611892573d6000803e3d6000fd5b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b9250015b60405180910390a150565b6000600e54118061220d57506000600f54115b6122595760405162461bcd60e51b815260206004820152601760248201527f4e503a2049736c656e6563656b20746f6b656e20796f6b0000000000000000006044820152606401610872565b600d546122b65760405162461bcd60e51b815260206004820152602560248201527f4e483a2049736c656d20796170696c6163616b20686f6c6465722062756c756e604482015264616d61646960d81b6064820152608401610872565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156122f157600080fd5b505af1925050508015612302575060015b6109465761230e613b77565b806308c379a00361234a5750612322613bce565b8061232d575061234c565b600080516020613d5a833981519152816040516121ef9190613845565b505b600080516020613d5a83398151915260405161093d9060208082526024908201527f70726f636573734c6971756964697479416e6441697264726f7020626173617260408201526334b9b4bd60e11b606082015260800190565b600080600080600f54600e546123bc9190613a74565b6802b5e3af16b1880000811015959094506000935062061a8092509050565b6123e3612a3c565b6007546123fd9030906001600160a01b03166000196126a0565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926124359291169060001990600401613a23565b6020604051808303816000875af1925050508015612470575060408051601f3d908101601f1916820190925261246d91810190613a3c565b60015b156124c657506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926124bd926001600160a01b039182169291169060001990613b25565b60405180910390a15b600a546001600160a01b03161561094657600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261250f9291169060001990600401613a23565b6020604051808303816000875af192505050801561254a575060408051601f3d908101601f1916820190925261254791810190613a3c565b60015b156125a05750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612597926001600160a01b039182169291169060001990613b25565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b3916125d2916001600160a01b03169060001990600401613a23565b6020604051808303816000875af192505050801561260d575060408051601f3d908101601f1916820190925261260a91810190613a3c565b60015b156109465750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca9161093d9130916001600160a01b03169060001990613b25565b61265c612a3c565b6001600160a01b0381166126975760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610872565b611297816134b7565b6001600160a01b038316158015906126c057506001600160a01b03821615155b6126f15760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610872565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054818110156127ad5760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610872565b6119e684848484036126a0565b601054610100900460ff161580156127e057506006546001600160a01b03848116911614155b80156127fa57506006546001600160a01b03838116911614155b801561280f57506001600160a01b0383163014155b80156128285750600a546001600160a01b038381169116145b15612a05576000606461283c600584613a87565b6128469190613a9e565b90508015612a03576000606461285d601984613a87565b6128679190613a9e565b905060006064612878601985613a87565b6128829190613a9e565b905060006128908486613ac0565b905061289d873086613509565b6128a8878783613509565b82600e60008282546128ba9190613a74565b9250508190555081600f60008282546128d39190613a74565b9091555050600f54600e546802b5e3af16b1880000916128f291613a74565b106129d0577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051612935929190918252602082015260400190565b60405180910390a17f166cfdb014c67ae8b32e0df45eca1171fe28cc0198094c266ca20c641e8c82d0600f54600e5461296e9190613a74565b6040805191825262061a8060208301520160405180910390a17f114686b9e702daeb8b2d1103d8bcf05eaad0c13a55be6bb01b97335dacee4221600f54600e546129b89190613a74565b60408051918252600560208301520160405180910390a15b6129ed87678ac7230489e800006129e68a610a75565b101561360e565b611fa286678ac7230489e800006129e689610a75565b505b612a10838383613509565b612a2683678ac7230489e800006129e686610a75565b610a0f82678ac7230489e800006129e685610a75565b33612a4f6006546001600160a01b031690565b6001600160a01b0316146109465760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610872565b600081600003612a9c57506000919050565b601054600160b01b900460ff16612aea5760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610872565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b1f57612b1f613c93565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9c9190613ad3565b81600181518110612baf57612baf613c93565b6001600160a01b039283166020918202929092010152600754600091612bd891309116866126a0565b6000612be642610e10613a74565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac94792612c2f928b9289928b9262010000909104909116908990600401613ca9565b600060405180830381600087803b158015612c4957600080fd5b505af1925050508015612c5a575060015b612d0f57612c66613b77565b806308c379a003612cb75750612c7a613bce565b80612c855750612cb9565b600080516020613d5a83398151915281604051612ca29190613845565b60405180910390a15060009695505050505050565b505b600080516020613d5a833981519152604051612cfb906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b60405180910390a150600095945050505050565b601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d5f57600080fd5b505af1925050508015612d70575060015b612e3557612d7c613b77565b806308c379a003612dd55750612d90613bce565b80612d9b5750612dd7565b600080516020613d5a83398151915281604051602001612dbb9190613ce5565b60408051601f1981840301815290829052612ca291613845565b505b600080516020613d5a833981519152604051612cfb9060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b476000612e428383613ac0565b90508015612e8e5760408051898152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1979650505050505050565b600080516020613d5a833981519152604051612ee89060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a1506000979650505050505050565b6000612f0930610a75565b905081811015612f90577fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051612f839060208082526028908201527f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206c604082015267697175696469747960c01b606082015260800190565b60405180910390a1505050565b60006064612f9e8180613ac0565b612fa89085613a87565b612fb29190613a9e565b905060006064612fc28180613ac0565b612fcc9087613a87565b612fd69190613a9e565b600754909150612ff19030906001600160a01b0316866126a0565b6007546001600160a01b031663f305d71986308786866130196006546001600160a01b031690565b61302542610e10613a74565b6040518863ffffffff1660e01b815260040161304696959493929190613c58565b60606040518083038185885af193505050508015613081575060408051601f3d908101601f1916820190925261307e91810190613b49565b60015b6131575761308d613b77565b806308c379a0036130e957506130a1613bce565b806130ac57506130eb565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516130db9190613845565b60405180910390a1506131e3565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad60405161314a906020808252601b908201527f556e6b6e6f776e206c697175696469747920616464206572726f720000000000604082015260600190565b60405180910390a16131e3565b505060408051868152602081018890527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16006546001600160a01b03166001600160a01b03167fb4a8f0077e5aebb5cf42d9b6adf858fcb4dfd47ce2ecd5ae56708582389d449d60006040516131da91815260200190565b60405180910390a25b5050505050565b600d548015806131f8575081155b15613201575050565b60006064613210846019613a87565b61321a9190613a9e565b905060006132288285613ac0565b90506000821180156132445750600b546001600160a01b031615155b1561331557600b546040516000916001600160a01b03169084908381818185875af1925050503d8060008114613296576040519150601f19603f3d011682016040523d82523d6000602084013e61329b565b606091505b505090508061330f577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051613303906020808252601c908201527f547265617375727920455448207472616e73666572206661696c656400000000604082015260600190565b60405180910390a18491505b50613318565b50825b6000831180156133285750600081115b156134815760006133398483613a9e565b9050801561347f5760005b8481101561347d576000600d828154811061336157613361613c93565b6000918252602090912001546001600160a01b03169050801580159061339057506001600160a01b0381163014155b80156133aa5750600a546001600160a01b03828116911614155b1561346a576000816001600160a01b03168460405160006040518083038185875af1925050503d80600081146133fc576040519150601f19603f3d011682016040523d82523d6000602084013e613401565b606091505b5050905080613468577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161345f90602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b508061347581613d2a565b915050613344565b505b505b60408051858152602081018590527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101611f1b565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061352957506001600160a01b03821615155b61355a5760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610872565b6001600160a01b038316600090815260208190526040902054818110156135a85760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610872565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36119e6565b600a546001600160a01b0383811691161480159061363557506001600160a01b0382163014155b1561381d5780801561366057506001600160a01b0382166000908152600c602052604090205460ff16155b156136cc57506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156136f257506001600160a01b0382166000908152600c602052604090205460ff165b1561381d576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610a0f57826001600160a01b0316600d828154811061373f5761373f613c93565b6000918252602090912001546001600160a01b03160361380b57600d805461376990600190613ac0565b8154811061377957613779613c93565b600091825260209091200154600d80546001600160a01b0390921691839081106137a5576137a5613c93565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806137e4576137e4613d43565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061381581613d2a565b915050613718565b5050565b60005b8381101561383c578181015183820152602001613824565b50506000910152565b6020815260008251806020840152613864816040850160208701613821565b601f01601f19169190910160400192915050565b6001600160a01b038116811461129757600080fd5b600080604083850312156138a057600080fd5b82356138ab81613878565b946020939093013593505050565b6000806000606084860312156138ce57600080fd5b83356138d981613878565b925060208401356138e981613878565b929592945050506040919091013590565b60006020828403121561390c57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561394c5781516001600160a01b031687529582019590820190600101613927565b509495945050505050565b60208152600061396a6020830184613913565b9392505050565b60006020828403121561398357600080fd5b813561396a81613878565b600080604083850312156139a157600080fd5b50508035926020909101359150565b600080604083850312156139c357600080fd5b82356139ce81613878565b915060208301356139de81613878565b809150509250929050565b600181811c908216806139fd57607f821691505b602082108103613a1d57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215613a4e57600080fd5b8151801515811461396a57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156107de576107de613a5e565b80820281158282048414176107de576107de613a5e565b600082613abb57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156107de576107de613a5e565b600060208284031215613ae557600080fd5b815161396a81613878565b602080825260029082015261139560f21b604082015260600190565b600060208284031215613b1e57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600080600060608486031215613b5e57600080fd5b8351925060208401519150604084015190509250925092565b600060033d1115613b905760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715613bc757634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015613bdc5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613c0c57505050505090565b8285019150815181811115613c245750505050505090565b843d8701016020828501011115613c3e5750505050505090565b613c4d60208286010187613b93565b509095945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a060408201526000613cc860a0830186613913565b6001600160a01b0394909416606083015250608001529392505050565b7f50726f787920455448207472616e73666572206661696c65643a200000000000815260008251613d1d81601b850160208701613821565b91909101601b0192915050565b600060018201613d3c57613d3c613a5e565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a26469706673582212208a5947c7c161a9c177e26d82bd176f569fe24c2bc0abf9ee74a4995b400d113664736f6c63430008110033

Deployed Bytecode Sourcemap

8971:23579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32156:9;:13;32152:85;;32191:34;;32215:9;160:25:1;;32203:10:0;;32191:34;;148:2:1;133:18;32191:34:0;;;;;;;32152:85;8971:23579;;;;;2801:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27970:118;;;;;;;;;;-1:-1:-1;28057:23:0;;27970:118;;;160:25:1;;;148:2;133:18;27970:118:0;14:177:1;3668:190:0;;;;;;;;;;-1:-1:-1;3668:190:0;;;;;:::i;:::-;;:::i;:::-;;;1473:14:1;;1466:22;1448:41;;1436:2;1421:18;3668:190:0;1308:187:1;3095:99:0;;;;;;;;;;-1:-1:-1;3174:12:0;;3095:99;;3866:250;;;;;;;;;;-1:-1:-1;3866:250:0;;;;;:::i;:::-;;:::i;10083:24::-;;;;;;;;;;-1:-1:-1;10083:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2310:32:1;;;2292:51;;2280:2;2265:18;10083:24:0;2146:203:1;3003:84:0;;;;;;;;;;-1:-1:-1;3003:84:0;;3077:2;2496:36:1;;2484:2;2469:18;3003:84:0;2354:184:1;28274:368:0;;;;;;;;;;;;;:::i;9907:25::-;;;;;;;;;;-1:-1:-1;9907:25:0;;;;-1:-1:-1;;;;;9907:25:0;;;9974:29;;;;;;;;;;-1:-1:-1;9974:29:0;;;;-1:-1:-1;;;;;9974:29:0;;;27736:183;;;;;;;;;;-1:-1:-1;27736:183:0;;;;;:::i;:::-;;:::i;28096:114::-;;;;;;;;;;-1:-1:-1;28181:21:0;;28096:114;;23926:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9809:41::-;;;;;;;;;;-1:-1:-1;9809:41:0;;;;-1:-1:-1;;;;;9809:41:0;;;11419:24;;;;;;;;;;-1:-1:-1;11419:24:0;;;;;;;-1:-1:-1;;;;;11419:24:0;;;3202:118;;;;;;;;;;-1:-1:-1;3202:118:0;;;;;:::i;:::-;;:::i;23816:98::-;;;;;;;;;;-1:-1:-1;23892:7:0;:14;23816:98;;15864:3415;;;;;;;;;;;;;:::i;9939:28::-;;;;;;;;;;-1:-1:-1;9939:28:0;;;;-1:-1:-1;;;;;9939:28:0;;;12341:836;;;;;;;;;;;;;:::i;1789:87::-;;;;;;;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;1862:6:0;1789:87;;2900:95;;;;;;;;;;;;;:::i;24579:1890::-;;;;;;;;;;-1:-1:-1;24579:1890:0;;;;;:::i;:::-;;:::i;30491:319::-;;;;;;;;;;-1:-1:-1;30491:319:0;;;;;:::i;:::-;;:::i;3328:182::-;;;;;;;;;;-1:-1:-1;3328:182:0;;;;;:::i;:::-;;:::i;29981:502::-;;;;;;;;;;-1:-1:-1;29981:502:0;;;;;:::i;:::-;;:::i;11450:24::-;;;;;;;;;;-1:-1:-1;11450:24:0;;;;-1:-1:-1;;;11450:24:0;;;;;;27562:166;;;;;;;;;;-1:-1:-1;27562:166:0;;;;;:::i;:::-;;:::i;32252:295::-;;;;;;;;;;-1:-1:-1;32252:295:0;;;;;:::i;:::-;;:::i;10036:40::-;;;;;;;;;;-1:-1:-1;10036:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30818:1288;;;;;;;;;;-1:-1:-1;30818:1288:0;;;;;:::i;:::-;;:::i;3518:142::-;;;;;;;;;;-1:-1:-1;3518:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;3625:18:0;;;3598:7;3625:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3518:142;26477:1077;;;:::i;28654:493::-;;;;;;;;;;;;;:::i;24034:490::-;;;;;;;;;;;;;:::i;:::-;;;;4656:14:1;;4649:22;4631:41;;4703:2;4688:18;;4681:34;;;;4731:18;;;4724:34;4789:2;4774:18;;4767:34;4618:3;4603:19;24034:490:0;4406:401:1;29155:818:0;;;;;;;;;;;;;:::i;1992:165::-;;;;;;;;;;-1:-1:-1;1992:165:0;;;;;:::i;:::-;;:::i;9857:43::-;;;;;;;;;;-1:-1:-1;9857:43:0;;;;-1:-1:-1;;;;;9857:43:0;;;2801:91;2846:13;2879:5;2872:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2801:91;:::o;3668:190::-;3742:4;3775:10;3796:32;3775:10;3812:7;3821:6;3796:8;:32::i;:::-;3846:4;3839:11;;;3668:190;;;;;:::o;3866:250::-;3954:4;3989:10;4010:38;4026:4;3989:10;4041:6;4010:15;:38::i;:::-;4059:27;4069:4;4075:2;4079:6;4059:9;:27::i;:::-;-1:-1:-1;4104:4:0;;3866:250;-1:-1:-1;;;;3866:250:0:o;10083:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10083:24:0;;-1:-1:-1;10083:24:0;:::o;28274:368::-;28357:1;28331:23;;:27;:56;;;;28386:1;28362:21;;:25;28331:56;28323:71;;;;-1:-1:-1;;;28323:71:0;;5633:2:1;28323:71:0;;;5615:21:1;5672:1;5652:18;;;5645:29;-1:-1:-1;;;5690:18:1;;;5683:32;5732:18;;28323:71:0;;;;;;;;;28413:7;:14;28405:33;;;;-1:-1:-1;;;28405:33:0;;5963:2:1;28405:33:0;;;5945:21:1;6002:1;5982:18;;;5975:29;-1:-1:-1;;;6020:18:1;;;6013:32;6062:18;;28405:33:0;5761:325:1;28405:33:0;28453:4;-1:-1:-1;;;;;28453:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28449:186;;28561:62;28576:23;;28601:21;;28561:62;;;;;;6265:25:1;;;6321:2;6306:18;;6299:34;6253:2;6238:18;;6091:248;28561:62:0;;;;;;;;28449:186;28274:368::o;27736:183::-;1748:13;:11;:13::i;:::-;27847:4:::1;-1:-1:-1::0;;;;;27829:23:0;::::1;::::0;27821:38:::1;;;::::0;-1:-1:-1;;;27821:38:0;;6546:2:1;27821:38:0::1;::::0;::::1;6528:21:1::0;6585:1;6565:18;;;6558:29;-1:-1:-1;;;6603:18:1;;;6596:32;6645:18;;27821:38:0::1;6344:325:1::0;27821:38:0::1;27877:6;-1:-1:-1::0;;;;;27870:23:0::1;;27894:7;1862:6:::0;;-1:-1:-1;;;;;1862:6:0;;1789:87;27894:7:::1;27903;27870:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27736:183:::0;;:::o;23926:96::-;23971:16;24007:7;24000:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24000:14:0;;;;;;;;;;;;;;;;;;;;;;23926:96;:::o;3202:118::-;-1:-1:-1;;;;;3294:18:0;3267:7;3294:18;;;;;;;;;;;;3202:118::o;15864:3415::-;1042:1;1188:7;;:19;1180:34;;;;-1:-1:-1;;;1180:34:0;;7437:2:1;1180:34:0;;;7419:21:1;7476:1;7456:18;;;7449:29;-1:-1:-1;;;7494:18:1;;;7487:32;7536:18;;1180:34:0;7235:325:1;1180:34:0;1042:1;1225:7;:18;15944:7:::1;::::0;::::1;::::0;::::1;;;15943:8;15935:23;;;::::0;-1:-1:-1;;;15935:23:0;;7767:2:1;15935:23:0::1;::::0;::::1;7749:21:1::0;7806:1;7786:18;;;7779:29;-1:-1:-1;;;7824:18:1;;;7817:32;7866:18;;15935:23:0::1;7565:325:1::0;15935:23:0::1;15969:7;:14:::0;;-1:-1:-1;;15969:14:0::1;;;::::0;;16033:23:::1;::::0;16094:21:::1;::::0;16140:23;;:48;::::1;;;-1:-1:-1::0;16167:21:0;;16140:48:::1;16136:117;;;-1:-1:-1::0;;16205:7:0::1;:15:::0;;-1:-1:-1;;16205:15:0::1;::::0;;16235:7:::1;;16136:117;16273:28;16304:24;16322:4;16304:9;:24::i;:::-;16273:55:::0;-1:-1:-1;16339:28:0::1;16370:37;16391:16:::0;16370:18;:37:::1;:::i;:::-;16339:68;;16455:20;16432;:43;16428:172;;;-1:-1:-1::0;;;;;;;;;;;16497:40:0::1;;;;8359:2:1::0;8341:21;;;8398:2;8378:18;;;8371:30;8437:28;8432:2;8417:18;;8410:56;8498:2;8483:18;;8157:350;16497:40:0::1;;;;;;;;-1:-1:-1::0;;16552:7:0::1;:15:::0;;-1:-1:-1;;16552:15:0::1;::::0;;-1:-1:-1;16582:7:0::1;::::0;-1:-1:-1;16582:7:0::1;16428:172;16637:10;16695:12;16620:14;16746:37;16767:16:::0;16746:18;:37:::1;:::i;:::-;16718:65;;16828:16;16808:17;:36;16804:564;;;16861:13;16903:17:::0;16877:23:::1;:16:::0;16896:4:::1;16877:23;:::i;:::-;:43;;;;:::i;:::-;16861:59:::0;-1:-1:-1;16985:4:0::1;16956:26;16861:59:::0;16956:18;:26:::1;:::i;:::-;:33;;;;:::i;:::-;16935:54:::0;-1:-1:-1;17050:4:0::1;17023:24;17042:5:::0;17023:16;:24:::1;:::i;:::-;:31;;;;:::i;:::-;17004:50:::0;-1:-1:-1;17089:37:0::1;17004:50:::0;17089:18;:37:::1;:::i;:::-;17069:57;;17182:18;17155:23;;:45;;;;;;;:::i;:::-;;;;;;;;17240:16;17215:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;16804:564:0::1;::::0;-1:-1:-1;;16804:564:0::1;;17315:1;17289:23;:27:::0;;;17331:21:::1;:25:::0;16804:564:::1;17410:15;17388:19;:37:::0;17451:52:::1;::::0;;6265:25:1;;;6321:2;6306:18;;6299:34;;;17451:52:0::1;::::0;6238:18:1;17451:52:0::1;;;;;;;17586:16;::::0;17554:69:::1;::::0;17571:4:::1;::::0;-1:-1:-1;;;;;17586:16:0::1;-1:-1:-1::0;;17554:8:0::1;:69::i;:::-;17672:21;17644:25;17736:31;17749:17:::0;17736:12:::1;:31::i;:::-;17714:53;;17792:11;17807:1;17792:16:::0;17788:85:::1;;-1:-1:-1::0;;17825:7:0::1;:15:::0;;-1:-1:-1;;17825:15:0::1;::::0;;-1:-1:-1;17855:7:0::1;::::0;-1:-1:-1;;;;;;17855:7:0::1;17788:85;17922:21;17958:39:::0;;::::1;17954:167;;-1:-1:-1::0;;;;;;;;;;;18019:39:0::1;;;;9242:2:1::0;9224:21;;;9281:2;9261:18;;;9254:30;-1:-1:-1;;;9315:2:1;9300:18;;9293:55;9380:2;9365:18;;9040:349;18019:39:0::1;;;;;;;;-1:-1:-1::0;;18073:7:0::1;:15:::0;;-1:-1:-1;;18073:15:0::1;::::0;;-1:-1:-1;18103:7:0::1;::::0;-1:-1:-1;;;;;;;18103:7:0::1;17954:167;18141:25;18169:38;18190:17:::0;18169:18;:38:::1;:::i;:::-;18141:66;;18228:20;18277:7;1862:6:::0;;-1:-1:-1;;;;;1862:6:0;;1789:87;18277:7:::1;-1:-1:-1::0;;;;;18267:17:0::1;:6;-1:-1:-1::0;;;;;18267:17:0::1;;;:44;;;;-1:-1:-1::0;;;;;;18288:23:0;::::1;18306:4;18288:23;;18267:44;18263:429;;;18367:3;18343:21;:17:::0;18363:1:::1;18343:21;:::i;:::-;:27;;;;:::i;:::-;18328:42:::0;-1:-1:-1;18389:16:0;;18385:296:::1;;18427:12;18445:6;-1:-1:-1::0;;;;;18445:11:0::1;18464:12;18445:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18426:55;;;18505:7;18500:166;;18552:1;18537:16;;18500:166;;;18625:6;-1:-1:-1::0;;;;;18607:39:0::1;;18633:12;18607:39;;;;160:25:1::0;;148:2;133:18;;14:177;18607:39:0::1;;;;;;;;18500:166;18407:274;18385:296;18732:32;18752:12:::0;18732:17;:32:::1;:::i;:::-;18712:52:::0;-1:-1:-1;18815:23:0::1;18882:17:::0;18841:38:::1;18861:18:::0;18712:52;18841:38:::1;:::i;:::-;:58;;;;:::i;:::-;18815:84:::0;-1:-1:-1;18910:21:0::1;18934:35;18815:84:::0;18934:17;:35:::1;:::i;:::-;18910:59:::0;-1:-1:-1;18994:19:0;;18990:102:::1;;19030:50;19044:15;19061:18;19030:13;:50::i;:::-;19153:17:::0;;19149:87:::1;;19187:37;19210:13;19187:22;:37::i;:::-;-1:-1:-1::0;;19256:7:0::1;:15:::0;;-1:-1:-1;;19256:15:0::1;::::0;;-1:-1:-1;;;;;;;;;;;;1254:1:0::1;998::::0;1266:7;:22;15864:3415::o;12341:836::-;1748:13;:11;:13::i;:::-;12402:12:::1;::::0;::::1;;12401:13;12393:28;;;::::0;-1:-1:-1;;;12393:28:0;;9806:2:1;12393:28:0::1;::::0;::::1;9788:21:1::0;9845:1;9825:18;;;9818:29;-1:-1:-1;;;9863:18:1;;;9856:32;9905:18;;12393:28:0::1;9604:325:1::0;12393:28:0::1;12432:12;:19:::0;;-1:-1:-1;;12432:19:0::1;12447:4;12432:19;::::0;;12523:17:::1;::::0;12564:10:::1;::::0;12523:52:::1;::::0;-1:-1:-1;;;12523:52:0;;12557:4:::1;12523:52;::::0;::::1;10146:34:1::0;-1:-1:-1;;;;;12564:10:0;;::::1;10196:18:1::0;;;10189:43;12523:17:0;::::1;::::0;:25:::1;::::0;10081:18:1;;12523:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12507:13;:68:::0;;-1:-1:-1;;;;;;12507:68:0::1;-1:-1:-1::0;;;;;12507:68:0;;;::::1;::::0;;::::1;::::0;;12641:131:::1;;12705:17;::::0;12749:10:::1;::::0;12705:55:::1;::::0;-1:-1:-1;;;12705:55:0;;12742:4:::1;12705:55;::::0;::::1;10146:34:1::0;-1:-1:-1;;;;;12749:10:0;;::::1;10196:18:1::0;;;10189:43;12705:17:0;::::1;::::0;:28:::1;::::0;10081:18:1;;12705:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12689:13;:71:::0;;-1:-1:-1;;;;;;12689:71:0::1;-1:-1:-1::0;;;;;12689:71:0;;;::::1;::::0;;;::::1;::::0;;12641:131:::1;12800:13;::::0;-1:-1:-1;;;;;12800:13:0::1;12792:42;;;::::0;-1:-1:-1;;;12792:42:0;;10701:2:1;12792:42:0::1;::::0;::::1;10683:21:1::0;10740:1;10720:18;;;10713:29;-1:-1:-1;;;10758:18:1;;;10751:32;10800:18;;12792:42:0::1;10499:325:1::0;12792:42:0::1;12879:16;::::0;12847:69:::1;::::0;12864:4:::1;::::0;-1:-1:-1;;;;;12879:16:0::1;-1:-1:-1::0;;12847:8:0::1;:69::i;:::-;12952:10;::::0;12980:16:::1;::::0;12945:72:::1;::::0;-1:-1:-1;;;12945:72:0;;-1:-1:-1;;;;;12952:10:0;;::::1;::::0;12945:26:::1;::::0;:72:::1;::::0;12980:16;::::1;::::0;-1:-1:-1;;12999:17:0;12945:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12937:87;;;::::0;-1:-1:-1;;;12937:87:0;;11031:2:1;12937:87:0::1;::::0;::::1;11013:21:1::0;11070:1;11050:18;;;11043:29;-1:-1:-1;;;11088:18:1;;;11081:32;11130:18;;12937:87:0::1;10829:325:1::0;12937:87:0::1;13042:10;::::0;13062:13:::1;::::0;13035:60:::1;::::0;-1:-1:-1;;;13035:60:0;;-1:-1:-1;;;;;13042:10:0;;::::1;::::0;13035:26:::1;::::0;:60:::1;::::0;13062:13;::::1;::::0;-1:-1:-1;;13077:17:0;13035:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13136:13:0::1;::::0;13106:63:::1;::::0;-1:-1:-1;;;13106:63:0;;13121:4:::1;::::0;13106:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;13136:13:0::1;::::0;-1:-1:-1;;13151:17:0;13106:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12341:836::o:0;2900:95::-;2947:13;2980:7;2973:14;;;;;:::i;24579:1890::-;1748:13;:11;:13::i;:::-;24712:1:::1;24698:11;:15;24690:30;;;;-1:-1:-1::0;;;24690:30:0::1;;;;;;;:::i;:::-;24753:1;24739:11;:15;24731:30;;;::::0;-1:-1:-1;;;24731:30:0;;11691:2:1;24731:30:0::1;::::0;::::1;11673:21:1::0;11730:1;11710:18;;;11703:29;-1:-1:-1;;;11748:18:1;;;11741:32;11790:18;;24731:30:0::1;11489:325:1::0;24731:30:0::1;24804:46;::::0;-1:-1:-1;;;24804:46:0;;24819:4:::1;24804:46;::::0;::::1;2292:51:1::0;;;24854:11:0;;24804:31:::1;::::0;2265:18:1;;24804:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;24782:113;;;::::0;-1:-1:-1;;;24782:113:0;;12210:2:1;24782:113:0::1;::::0;::::1;12192:21:1::0;12249:1;12229:18;;;12222:29;-1:-1:-1;;;12267:18:1;;;12260:32;12309:18;;24782:113:0::1;12008:325:1::0;24782:113:0::1;24945:10;::::0;24938:40:::1;::::0;-1:-1:-1;;;24938:40:0;;24967:10:::1;24938:40;::::0;::::1;2292:51:1::0;24982:11:0;;-1:-1:-1;;;;;24945:10:0::1;::::0;24938:28:::1;::::0;2265:18:1;;24938:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;24916:107;;;::::0;-1:-1:-1;;;24916:107:0;;12540:2:1;24916:107:0::1;::::0;::::1;12522:21:1::0;12579:1;12559:18;;;12552:29;-1:-1:-1;;;12597:18:1;;;12590:32;12639:18;;24916:107:0::1;12338:325:1::0;24916:107:0::1;25073:10;::::0;25066:71:::1;::::0;-1:-1:-1;;;25066:71:0;;-1:-1:-1;;;;;25073:10:0;;::::1;::::0;25066:31:::1;::::0;:71:::1;::::0;25098:10:::1;::::0;25118:4:::1;::::0;25125:11;;25066:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25044:123;;;::::0;-1:-1:-1;;;25044:123:0;;13250:2:1;25044:123:0::1;::::0;::::1;13232:21:1::0;13289:1;13269:18;;;13262:29;-1:-1:-1;;;13307:18:1;;;13300:32;13349:18;;25044:123:0::1;13048:325:1::0;25044:123:0::1;25220:16;::::0;25188:63:::1;::::0;25205:4:::1;::::0;-1:-1:-1;;;;;25220:16:0::1;25239:11:::0;25188:8:::1;:63::i;:::-;25269:10;::::0;25297:16:::1;::::0;25262:66:::1;::::0;-1:-1:-1;;;25262:66:0;;-1:-1:-1;;;;;25269:10:0;;::::1;::::0;25262:26:::1;::::0;:66:::1;::::0;25297:16;::::1;::::0;25316:11;;25262:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25353:16:0::1;::::0;25425:10:::1;::::0;-1:-1:-1;;;;;25353:16:0;;::::1;::::0;:29:::1;::::0;25405:4:::1;::::0;25425:10:::1;25450:11:::0;25476;25353:16:::1;::::0;25534:10:::1;25559:21;:15;25577:3;25559:21;:::i;:::-;25353:238;::::0;::::1;::::0;;;-1:-1:-1;;;;;;25353:238:0;;;-1:-1:-1;;;;;13793:15:1;;;25353:238:0::1;::::0;::::1;13775:34:1::0;13845:15;;;13825:18;;;13818:43;13877:18;;;13870:34;;;;13920:18;;;13913:34;;;;13963:19;;;13956:35;;;;14007:19;;;14000:35;14072:15;;;14051:19;;;14044:44;14104:19;;;14097:35;;;;13709:19;;25353:238:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25353:238:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25353:238:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25349:905;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;25746:16;::::0;25714:53:::1;::::0;25731:4:::1;::::0;-1:-1:-1;;;;;25746:16:0::1;;25714:8;:53::i;:::-;25789:10;::::0;25817:16:::1;::::0;25782:56:::1;::::0;-1:-1:-1;;;25782:56:0;;-1:-1:-1;;;;;25789:10:0;;::::1;::::0;25782:26:::1;::::0;:56:::1;::::0;25817:16;::::1;::::0;25789:10:::1;::::0;25782:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25874:10:0::1;::::0;25867:52:::1;::::0;-1:-1:-1;;;25867:52:0;;-1:-1:-1;;;;;25874:10:0;;::::1;::::0;25867:27:::1;::::0;:52:::1;::::0;25895:10:::1;::::0;25907:11;;25867:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25955:6;25948:14;;-1:-1:-1::0;;;25948:14:0::1;;;;;;;;:::i;25349:905::-;;;26028:16;::::0;25996:53:::1;::::0;26013:4:::1;::::0;-1:-1:-1;;;;;26028:16:0::1;;25996:8;:53::i;:::-;26071:10;::::0;26099:16:::1;::::0;26064:56:::1;::::0;-1:-1:-1;;;26064:56:0;;-1:-1:-1;;;;;26071:10:0;;::::1;::::0;26064:26:::1;::::0;:56:::1;::::0;26099:16;::::1;::::0;26071:10:::1;::::0;26064:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26156:10:0::1;::::0;26149:52:::1;::::0;-1:-1:-1;;;26149:52:0;;-1:-1:-1;;;;;26156:10:0;;::::1;::::0;26149:27:::1;::::0;:52:::1;::::0;26177:10:::1;::::0;26189:11;;26149:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26230:12:0::1;::::0;-1:-1:-1;;;26230:12:0;;16286:2:1;26230:12:0::1;::::0;::::1;16268:21:1::0;16325:1;16305:18;;;16298:29;-1:-1:-1;;;16343:18:1;;;16336:32;16385:18;;26230:12:0::1;16084:325:1::0;25349:905:0::1;-1:-1:-1::0;;25612:40:0::1;::::0;;6265:25:1;;;6321:2;6306:18;;6299:34;;;25612:40:0::1;::::0;-1:-1:-1;6238:18:1;25612:40:0::1;;;;;;;26307:10;::::0;26300:43:::1;::::0;-1:-1:-1;;;26300:43:0;;26337:4:::1;26300:43;::::0;::::1;2292:51:1::0;26274:23:0::1;::::0;-1:-1:-1;;;;;26307:10:0::1;::::0;26300:28:::1;::::0;2265:18:1;;26300:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26274:69:::0;-1:-1:-1;26358:19:0;;26354:108:::1;;26401:10;::::0;26394:56:::1;::::0;-1:-1:-1;;;26394:56:0;;-1:-1:-1;;;;;26401:10:0;;::::1;::::0;26394:27:::1;::::0;:56:::1;::::0;26422:10:::1;::::0;26434:15;;26394:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24679:1790;24579:1890:::0;;:::o;30491:319::-;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;30583:31:0;::::1;30575:46;;;::::0;-1:-1:-1;;;30575:46:0;;16616:2:1;30575:46:0::1;::::0;::::1;16598:21:1::0;16655:1;16635:18;;;16628:29;-1:-1:-1;;;16673:18:1;;;16666:32;16715:18;;30575:46:0::1;16414:325:1::0;30575:46:0::1;30664:14;::::0;;-1:-1:-1;;;;;30689:34:0;;::::1;-1:-1:-1::0;;;;;;30689:34:0;::::1;::::0;::::1;::::0;;;30749:53:::1;::::0;;30664:14;;;::::1;10146:34:1::0;;;10211:2;10196:18;;10189:43;;;;30749:53:0::1;::::0;10081:18:1;30749:53:0::1;;;;;;;30564:246;30491:319:::0;:::o;3328:182::-;3398:4;3431:10;3452:28;3431:10;3469:2;3473:6;3452:9;:28::i;29981:502::-;1748:13;:11;:13::i;:::-;1042:1:::1;1188:7;;:19:::0;1180:34:::1;;;::::0;-1:-1:-1;;;1180:34:0;;7437:2:1;1180:34:0::1;::::0;::::1;7419:21:1::0;7476:1;7456:18;;;7449:29;-1:-1:-1;;;7494:18:1;;;7487:32;7536:18;;1180:34:0::1;7235:325:1::0;1180:34:0::1;1042:1;1225:7;:18:::0;30073:15;30065:57:::2;;;::::0;-1:-1:-1;;;30065:57:0;;16946:2:1;30065:57:0::2;::::0;::::2;16928:21:1::0;16985:2;16965:18;;;16958:30;17024:31;17004:18;;;16997:59;17073:18;;30065:57:0::2;16744:353:1::0;30065:57:0::2;30156:24;30174:4;30156:9;:24::i;:::-;30141:11;:39;;30133:72;;;::::0;-1:-1:-1;;;30133:72:0;;17304:2:1;30133:72:0::2;::::0;::::2;17286:21:1::0;17343:2;17323:18;;;17316:30;-1:-1:-1;;;17362:18:1;;;17355:50;17422:18;;30133:72:0::2;17102:344:1::0;30133:72:0::2;30224:12;::::0;-1:-1:-1;;;30224:12:0;::::2;;;30216:43;;;::::0;-1:-1:-1;;;30216:43:0;;17653:2:1;30216:43:0::2;::::0;::::2;17635:21:1::0;17692:2;17672:18;;;17665:30;-1:-1:-1;;;17711:18:1;;;17704:48;17769:18;;30216:43:0::2;17451:342:1::0;30216:43:0::2;30280:19;30302:25;30315:11;30302:12;:25::i;:::-;30280:47;;30370:1;30356:11;:15;30348:56;;;::::0;-1:-1:-1;;;30348:56:0;;18000:2:1;30348:56:0::2;::::0;::::2;17982:21:1::0;18039:2;18019:18;;;18012:30;18078;18058:18;;;18051:58;18126:18;;30348:56:0::2;17798:352:1::0;30348:56:0::2;30430:45;::::0;;6265:25:1;;;6321:2;6306:18;;6299:34;;;30430:45:0::2;::::0;6238:18:1;30430:45:0::2;;;;;;;-1:-1:-1::0;;998:1:0::1;1266:7;:22:::0;29981:502::o;27562:166::-;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;27636:21:0;::::1;27628:36;;;::::0;-1:-1:-1;;;27628:36:0;;18357:2:1;27628:36:0::1;::::0;::::1;18339:21:1::0;18396:1;18376:18;;;18369:29;-1:-1:-1;;;18414:18:1;;;18407:32;18456:18;;27628:36:0::1;18155:325:1::0;27628:36:0::1;27675:16;:45:::0;;-1:-1:-1;;;;;;27675:45:0::1;-1:-1:-1::0;;;;;27675:45:0;;;::::1;::::0;;;::::1;::::0;;27562:166::o;32252:295::-;1748:13;:11;:13::i;:::-;32333:12:::1;::::0;-1:-1:-1;;;32333:12:0;::::1;;;32332:13;32324:43;;;::::0;-1:-1:-1;;;32324:43:0;;18687:2:1;32324:43:0::1;::::0;::::1;18669:21:1::0;18726:2;18706:18;;;18699:30;-1:-1:-1;;;18745:18:1;;;18738:47;18802:18;;32324:43:0::1;18485:341:1::0;32324:43:0::1;-1:-1:-1::0;;;;;32386:24:0;::::1;32378:58;;;::::0;-1:-1:-1;;;32378:58:0;;19033:2:1;32378:58:0::1;::::0;::::1;19015:21:1::0;19072:2;19052:18;;;19045:30;-1:-1:-1;;;19091:18:1;;;19084:51;19152:18;;32378:58:0::1;18831:345:1::0;32378:58:0::1;32447:9;:22:::0;;-1:-1:-1;;;;;;;;;32447:22:0;::::1;::::0;;::::1;32480:19:::0;;;;-1:-1:-1;;;;;;32480:19:0;;;;;;;-1:-1:-1;;;32480:19:0::1;::::0;;;32515:24:::1;::::0;::::1;::::0;-1:-1:-1;;32515:24:0::1;32252:295:::0;:::o;30818:1288::-;1748:13;:11;:13::i;:::-;30926:1:::1;30912:11;:15;30904:30;;;;-1:-1:-1::0;;;30904:30:0::1;;;;;;;:::i;:::-;30953:46;::::0;-1:-1:-1;;;30953:46:0;;30968:4:::1;30953:46;::::0;::::1;2292:51:1::0;;;31003:11:0;;30953:31:::1;::::0;2265:18:1;;30953:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;30945:76;;;::::0;-1:-1:-1;;;30945:76:0;;12210:2:1;30945:76:0::1;::::0;::::1;12192:21:1::0;12249:1;12229:18;;;12222:29;-1:-1:-1;;;12267:18:1;;;12260:32;12309:18;;30945:76:0::1;12008:325:1::0;30945:76:0::1;31104:16;::::0;31072:69:::1;::::0;31089:4:::1;::::0;-1:-1:-1;;;;;31104:16:0::1;-1:-1:-1::0;;31072:8:0::1;:69::i;:::-;31180:21;31152:25;31234;31247:11:::0;31234:12:::1;:25::i;:::-;31212:47;;31284:11;31299:1;31284:16:::0;31280:55:::1;;31317:7;;13106:63;12341:836::o:0;31280:55::-:1;31384:21;31420:39:::0;;::::1;31416:137;;-1:-1:-1::0;;;;;;;;;;;31481:39:0::1;;;;9242:2:1::0;9224:21;;;9281:2;9261:18;;;9254:30;-1:-1:-1;;;9315:2:1;9300:18;;9293:55;9380:2;9365:18;;9040:349;31481:39:0::1;;;;;;;;31535:7;;;13106:63;12341:836::o:0;31416:137::-:1;31573:25;31601:38;31622:17:::0;31601:18;:38:::1;:::i;:::-;31573:66:::0;-1:-1:-1;31690:23:0::1;31752:3;31716:33;9203:2;31573:66:::0;31716:33:::1;:::i;:::-;:39;;;;:::i;:::-;31690:65:::0;-1:-1:-1;31766:21:0::1;31824:3;31790:31;9259:2;31790:17:::0;:31:::1;:::i;:::-;:37;;;;:::i;:::-;31766:61:::0;-1:-1:-1;31852:19:0;;31848:117:::1;;31888:65;31902:15:::0;31949:3:::1;31919:27;9203:2;31919:11:::0;:27:::1;:::i;:::-;:33;;;;:::i;:::-;31888:13;:65::i;:::-;32016:17:::0;;32012:87:::1;;32050:37;32073:13;32050:22;:37::i;:::-;30893:1213;;;;;;30818:1288:::0;:::o;26477:1077::-;1748:13;:11;:13::i;:::-;26587:46:::1;::::0;-1:-1:-1;;;26587:46:0;;26602:4:::1;26587:46;::::0;::::1;2292:51:1::0;;;26565:19:0::1;::::0;26587:31:::1;::::0;2265:18:1;;26587:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26565:68;;26666:1;26652:11;:15;26644:30;;;;-1:-1:-1::0;;;26644:30:0::1;;;;;;;:::i;:::-;26705:1;26693:9;:13;26685:28;;;::::0;-1:-1:-1;;;26685:28:0;;19383:2:1;26685:28:0::1;::::0;::::1;19365:21:1::0;19422:1;19402:18;;;19395:29;-1:-1:-1;;;19440:18:1;;;19433:32;19482:18;;26685:28:0::1;19181:325:1::0;26685:28:0::1;26766:16;::::0;26734:63:::1;::::0;26751:4:::1;::::0;-1:-1:-1;;;;;26766:16:0::1;26785:11:::0;26734:8:::1;:63::i;:::-;26822:16;::::0;-1:-1:-1;;;;;26822:16:0::1;:32;26862:9;26895:4;26915:11:::0;26822:16:::1;::::0;26973:10:::1;26998:21;:15;27016:3;26998:21;:::i;:::-;26822:208;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26822:208:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;26822:208:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;26818:729;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;27183:16;::::0;27151:53:::1;::::0;27168:4:::1;::::0;-1:-1:-1;;;;;27183:16:0::1;;27151:8;:53::i;:::-;27233:51;::::0;27241:10:::1;::::0;27262:21:::1;27233:51:::0;::::1;;;::::0;::::1;::::0;;;27262:21;27241:10;27233:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;26818:729;;;27393:16;::::0;27361:53:::1;::::0;27378:4:::1;::::0;-1:-1:-1;;;;;27393:16:0::1;;27361:8;:53::i;:::-;27443:51;::::0;27451:10:::1;::::0;27472:21:::1;27443:51:::0;::::1;;;::::0;::::1;::::0;;;27472:21;27451:10;27443:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;26818:729;-1:-1:-1::0;;27051:38:0::1;::::0;;6265:25:1;;;27079:9:0::1;6321:2:1::0;6306:18;;6299:34;27051:38:0::1;::::0;-1:-1:-1;6238:18:1;27051:38:0::1;;;;;;;;26554:1000;26477:1077::o:0;28654:493::-;28758:1;28732:23;;:27;:56;;;;28787:1;28763:21;;:25;28732:56;28724:92;;;;-1:-1:-1;;;28724:92:0;;20325:2:1;28724:92:0;;;20307:21:1;20364:2;20344:18;;;20337:30;20403:25;20383:18;;;20376:53;20446:18;;28724:92:0;20123:347:1;28724:92:0;28835:7;:14;28827:68;;;;-1:-1:-1;;;28827:68:0;;20677:2:1;28827:68:0;;;20659:21:1;20716:2;20696:18;;;20689:30;20755:34;20735:18;;;20728:62;-1:-1:-1;;;20806:18:1;;;20799:35;20851:19;;28827:68:0;20475:401:1;28827:68:0;28920:4;-1:-1:-1;;;;;28920:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28916:224;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;29032:6:0;29021:18;;;;;;:::i;28916:224::-;;;-1:-1:-1;;;;;;;;;;;29078:50:0;;;;21083:2:1;21065:21;;;21122:2;21102:18;;;21095:30;21161:34;21156:2;21141:18;;21134:62;-1:-1:-1;;;21227:2:1;21212:18;;21205:34;21271:3;21256:19;;20881:400;24034:490:0;24100:23;24134:21;24166:31;24208:27;24296:21;;24270:23;;:47;;;;:::i;:::-;9428:11;24359:39;;;;24254:63;;-1:-1:-1;24445:1:0;;-1:-1:-1;24489:6:0;;-1:-1:-1;24034:490:0;-1:-1:-1;24034:490:0:o;29155:818::-;1748:13;:11;:13::i;:::-;29248:16:::1;::::0;29216:69:::1;::::0;29233:4:::1;::::0;-1:-1:-1;;;;;29248:16:0::1;-1:-1:-1::0;;29216:8:0::1;:69::i;:::-;29317:10;::::0;29345:16:::1;::::0;29310:72:::1;::::0;-1:-1:-1;;;29310:72:0;;-1:-1:-1;;;;;29317:10:0;;::::1;::::0;29310:26:::1;::::0;:72:::1;::::0;29345:16;::::1;::::0;-1:-1:-1;;29364:17:0;29310:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29310:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;29310:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;29306:193:::0;::::1;;-1:-1:-1::0;29421:10:0::1;::::0;29441:16:::1;::::0;29403:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;29421:10:0;;::::1;::::0;29441:16;::::1;::::0;-1:-1:-1;;29460:17:0;29403:75:::1;:::i;:::-;;;;;;;;29306:193;29523:13;::::0;-1:-1:-1;;;;;29523:13:0::1;:27:::0;29519:447:::1;;29578:10;::::0;29598:13:::1;::::0;29571:60:::1;::::0;-1:-1:-1;;;29571:60:0;;-1:-1:-1;;;;;29578:10:0;;::::1;::::0;29571:26:::1;::::0;:60:::1;::::0;29598:13;::::1;::::0;-1:-1:-1;;29613:17:0;29571:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29571:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;29571:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;29567:177:::0;::::1;;-1:-1:-1::0;29674:10:0::1;::::0;29686:13:::1;::::0;29656:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;29674:10:0;;::::1;::::0;29686:13;::::1;::::0;-1:-1:-1;;29701:17:0;29656:63:::1;:::i;:::-;;;;;;;;29567:177;29806:13;::::0;29776:63:::1;::::0;-1:-1:-1;;;29776:63:0;;29791:4:::1;::::0;29776:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;29806:13:0::1;::::0;-1:-1:-1;;29821:17:0;29776:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29776:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;29776:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;29772:183:::0;::::1;;-1:-1:-1::0;29897:13:0::1;::::0;29864:66:::1;::::0;::::1;::::0;::::1;::::0;29890:4:::1;::::0;-1:-1:-1;;;;;29897:13:0::1;::::0;-1:-1:-1;;29912:17:0;29864:66:::1;:::i;1992:165::-:0;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;2081:22:0;::::1;2073:37;;;::::0;-1:-1:-1;;;2073:37:0;;21488:2:1;2073:37:0::1;::::0;::::1;21470:21:1::0;21527:1;21507:18;;;21500:29;-1:-1:-1;;;21545:18:1;;;21538:32;21587:18;;2073:37:0::1;21286:325:1::0;2073:37:0::1;2121:28;2140:8;2121:18;:28::i;5047:256::-:0;-1:-1:-1;;;;;5149:19:0;;;;;;:44;;-1:-1:-1;;;;;;5172:21:0;;;;5149:44;5141:59;;;;-1:-1:-1;;;5141:59:0;;21818:2:1;5141:59:0;;;21800:21:1;21857:1;21837:18;;;21830:29;-1:-1:-1;;;21875:18:1;;;21868:32;21917:18;;5141:59:0;21616:325:1;5141:59:0;-1:-1:-1;;;;;5211:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5263:32;;160:25:1;;;5263:32:0;;133:18:1;5263:32:0;;;;;;;5047:256;;;:::o;5311:311::-;-1:-1:-1;;;;;3625:18:0;;;5412:24;3625:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;5483:26;;;;5475:41;;;;-1:-1:-1;;;5475:41:0;;22148:2:1;5475:41:0;;;22130:21:1;22187:1;22167:18;;;22160:29;-1:-1:-1;;;22205:18:1;;;22198:32;22247:18;;5475:41:0;21946:325:1;5475:41:0;5552:51;5561:5;5568:7;5596:6;5577:16;:25;5552:8;:51::i;13185:1884::-;13336:7;;;;;;;13335:8;:41;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;13361:15:0;;;1862:6;;13361:15;;13335:41;:72;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;13394:13:0;;;1862:6;;13394:13;;13335:72;:111;;;;-1:-1:-1;;;;;;13425:21:0;;13441:4;13425:21;;13335:111;:148;;;;-1:-1:-1;13470:13:0;;-1:-1:-1;;;;;13464:19:0;;;13470:13;;13464:19;13335:148;13317:1557;;;13510:17;13550:3;13530:17;9148:1;13530:6;:17;:::i;:::-;:23;;;;:::i;:::-;13510:43;-1:-1:-1;13586:13:0;;13582:1281;;13620:23;13674:3;13646:25;9203:2;13646:9;:25;:::i;:::-;:31;;;;:::i;:::-;13620:57;-1:-1:-1;13696:21:0;13746:3;13720:23;9259:2;13720:9;:23;:::i;:::-;:29;;;;:::i;:::-;13696:53;-1:-1:-1;13786:22:0;13811:18;13820:9;13811:6;:18;:::i;:::-;13786:43;;13866:47;13882:4;13896;13903:9;13866:15;:47::i;:::-;13950:41;13966:4;13972:2;13976:14;13950:15;:41::i;:::-;14055:15;14028:23;;:42;;;;;;;:::i;:::-;;;;;;;;14114:13;14089:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;14212:21:0;;14186:23;;9428:11;;14186:47;;;:::i;:::-;:73;14182:457;;14289:62;14304:23;;14329:21;;14289:62;;;;;;6265:25:1;;;6321:2;6306:18;;6299:34;6253:2;6238:18;;6091:248;14289:62:0;;;;;;;;14401:75;14446:21;;14420:23;;:47;;;;:::i;:::-;14401:75;;;6265:25:1;;;14469:6:0;6321:2:1;6306:18;;6299:34;6238:18;14401:75:0;;;;;;;14526:80;14581:21;;14555:23;;:47;;;;:::i;:::-;14526:80;;;6265:25:1;;;14604:1:0;6321:2:1;6306:18;;6299:34;6238:18;14526:80:0;;;;;;;14182:457;14675:57;14689:4;9321:11;14695:15;14705:4;14695:9;:15::i;:::-;:36;;14675:13;:57::i;:::-;14751:53;14765:2;9321:11;14769:13;14779:2;14769:9;:13::i;13582:1281::-;13495:1379;13317:1557;14894:33;14910:4;14916:2;14920:6;14894:15;:33::i;:::-;14940:57;14954:4;9321:11;14960:15;14970:4;14960:9;:15::i;14940:57::-;15008:53;15022:2;9321:11;15026:13;15036:2;15026:9;:13::i;1884:100::-;1959:10;1948:7;1862:6;;-1:-1:-1;;;;;1862:6:0;;1789:87;1948:7;-1:-1:-1;;;;;1948:21:0;;1940:36;;;;-1:-1:-1;;;1940:36:0;;23005:2:1;1940:36:0;;;22987:21:1;23044:1;23024:18;;;23017:29;-1:-1:-1;;;23062:18:1;;;23055:32;23104:18;;1940:36:0;22803:325:1;20498:1856:0;20558:7;20582:11;20597:1;20582:16;20578:30;;-1:-1:-1;20607:1:0;;20498:1856;-1:-1:-1;20498:1856:0:o;20578:30::-;20627:12;;-1:-1:-1;;;20627:12:0;;;;20619:43;;;;-1:-1:-1;;;20619:43:0;;17653:2:1;20619:43:0;;;17635:21:1;17692:2;17672:18;;;17665:30;-1:-1:-1;;;17711:18:1;;;17704:48;17769:18;;20619:43:0;17451:342:1;20619:43:0;20707:16;;;20721:1;20707:16;;;;;;;;20683:21;;20707:16;;;;;;;;;;-1:-1:-1;20707:16:0;20683:40;;20752:4;20734;20739:1;20734:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20734:23:0;;;:7;;;;;;;;;;:23;;;;20778:16;;:23;;;-1:-1:-1;;;20778:23:0;;;;:16;;;;;:21;;:23;;;;;20734:7;;20778:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20768:4;20773:1;20768:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20768:33:0;;;:7;;;;;;;;;:33;20899:16;;20822:20;;20867:63;;20884:4;;20899:16;20918:11;20867:8;:63::i;:::-;20951:16;20970:22;:15;20988:4;20970:22;:::i;:::-;21087:16;;21241:9;;21087:197;;-1:-1:-1;;;21087:197:0;;20951:41;;-1:-1:-1;21041:21:0;;-1:-1:-1;;;;;21087:16:0;;;;:67;;:197;;21169:11;;21195:12;;21222:4;;21241:9;;;;;;;;20951:41;;21087:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21083:1264;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;22211:6:0;22200:18;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;22240:1:0;;20498:1856;-1:-1:-1;;;;;;20498:1856:0:o;21083:1264::-;;;-1:-1:-1;;;;;;;;;;;22280:32:0;;;;24046:2:1;24028:21;;;24085:2;24065:18;;;24058:30;-1:-1:-1;;;24119:2:1;24104:18;;24097:48;24177:2;24162:18;;23844:342;22280:32:0;;;;;;;;-1:-1:-1;22334:1:0;;20498:1856;-1:-1:-1;;;;;20498:1856:0:o;21083:1264::-;21315:9;;;;;;;;;-1:-1:-1;;;;;21315:9:0;-1:-1:-1;;;;;21304:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21300:834;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;21954:6:0;21906:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;21906:55:0;;;;;;;;;;21888:75;;;:::i;21300:834::-;;;-1:-1:-1;;;;;;;;;;;22037:54:0;;;;24857:2:1;24839:21;;;24896:2;24876:18;;;24869:30;24935:34;24930:2;24915:18;;24908:62;-1:-1:-1;;;25001:2:1;24986:18;;24979:38;25049:3;25034:19;;24655:404;21300:834:0;21392:21;21363:26;21454:38;21475:17;21392:21;21454:38;:::i;:::-;21432:60;-1:-1:-1;21533:15:0;;21529:285;;21578:40;;;6265:25:1;;;6321:2;6306:18;;6299:34;;;21578:40:0;;6238:18:1;21578:40:0;;;;;;;21648:11;20498:1856;-1:-1:-1;;;;;;;20498:1856:0:o;21529:285::-;-1:-1:-1;;;;;;;;;;;21713:50:0;;;;25266:2:1;25248:21;;;25305:2;25285:18;;;25278:30;25344:34;25339:2;25324:18;;25317:62;-1:-1:-1;;;25410:2:1;25395:18;;25388:34;25454:3;25439:19;;25064:400;21713:50:0;;;;;;;;-1:-1:-1;21793:1:0;;20498:1856;-1:-1:-1;;;;;;;20498:1856:0:o;19379:1111::-;19461:28;19492:24;19510:4;19492:9;:24::i;:::-;19461:55;;19554:11;19531:20;:34;19527:155;;;19587:62;;;;;25671:2:1;25653:21;;;25710:2;25690:18;;;25683:30;25749:34;25744:2;25729:18;;25722:62;-1:-1:-1;;;25815:2:1;25800:18;;25793:38;25863:3;25848:19;;25469:404;19587:62:0;;;;;;;;19664:7;19379:1111;;:::o;19527:155::-;19694:22;19756:3;19734:18;19756:3;;19734:18;:::i;:::-;19719:34;;:11;:34;:::i;:::-;:40;;;;:::i;:::-;19694:65;-1:-1:-1;19770:20:0;19828:3;19806:18;19828:3;;19806:18;:::i;:::-;19793:32;;:9;:32;:::i;:::-;:38;;;;:::i;:::-;19884:16;;19770:61;;-1:-1:-1;19852:63:0;;19869:4;;-1:-1:-1;;;;;19884:16:0;19903:11;19852:8;:63::i;:::-;19940:16;;-1:-1:-1;;;;;19940:16:0;:32;19980:9;20013:4;20033:11;20059:14;20088:12;20115:7;1862:6;;-1:-1:-1;;;;;1862:6:0;;1789:87;20115:7;20137:22;:15;20155:4;20137:22;:::i;:::-;19940:230;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19940:230:0;;;;;;;;-1:-1:-1;;19940:230:0;;;;;;;;;;;;:::i;:::-;;;19936:547;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20357:26;20376:6;20357:26;;;;;;:::i;:::-;;;;;;;;20303:92;19936:547;;;;;20422:49;;;;;26676:2:1;26658:21;;;26715:2;26695:18;;;26688:30;26754:29;26749:2;26734:18;;26727:57;26816:2;26801:18;;26474:351;20422:49:0;;;;;;;;19936:547;;;-1:-1:-1;;20191:38:0;;;6265:25:1;;;6321:2;6306:18;;6299:34;;;20191:38:0;;-1:-1:-1;6238:18:1;20191:38:0;;;;;;;1862:6;;-1:-1:-1;;;;;1862:6:0;-1:-1:-1;;;;;20263:27:0;;20288:1;20263:27;;;;160:25:1;;148:2;133:18;;14:177;20263:27:0;;;;;;;;19936:547;19450:1040;;;19379:1111;;:::o;22362:1423::-;22452:7;:14;22481:17;;;:32;;-1:-1:-1;22502:11:0;;22481:32;22477:45;;;22515:7;22362:1423;:::o;22477:45::-;22542:22;22581:3;22567:11;:6;22576:2;22567:11;:::i;:::-;:17;;;;:::i;:::-;22542:42;-1:-1:-1;22595:20:0;22618:23;22542:42;22618:6;:23;:::i;:::-;22595:46;;22683:1;22666:14;:18;:50;;;;-1:-1:-1;22688:14:0;;-1:-1:-1;;;;;22688:14:0;:28;;22666:50;22662:371;;;22760:14;;:46;;22734:20;;-1:-1:-1;;;;;22760:14:0;;22787;;22734:20;22760:46;22734:20;22760:46;22787:14;22760;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22733:73;;;22826:15;22821:147;;22867:45;;;;;27222:2:1;27204:21;;;27261:2;27241:18;;;27234:30;27300;27295:2;27280:18;;27273:58;27363:2;27348:18;;27020:352;22867:45:0;;;;;;;;22946:6;22931:21;;22821:147;22718:261;22662:371;;;-1:-1:-1;23015:6:0;22662:371;23072:1;23057:12;:16;:36;;;;;23092:1;23077:12;:16;23057:36;23053:659;;;23110:23;23136:27;23151:12;23136;:27;:::i;:::-;23110:53;-1:-1:-1;23182:19:0;;23178:523;;23227:9;23222:464;23246:12;23242:1;:16;23222:464;;;23288:14;23305:7;23313:1;23305:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23305:10:0;;-1:-1:-1;23342:20:0;;;;;:47;;-1:-1:-1;;;;;;23366:23:0;;23384:4;23366:23;;23342:47;:74;;;;-1:-1:-1;23403:13:0;;-1:-1:-1;;;;;23393:23:0;;;23403:13;;23393:23;;23342:74;23338:329;;;23446:12;23464:6;-1:-1:-1;;;;;23464:11:0;23483:15;23464:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23445:58;;;23535:7;23530:114;;23580:36;;;;;27579:2:1;27561:21;;;27618:2;27598:18;;;27591:30;-1:-1:-1;;;27652:2:1;27637:18;;27630:49;27711:2;27696:18;;27377:343;23580:36:0;;;;;;;;23530:114;23418:249;23338:329;-1:-1:-1;23260:3:0;;;;:::i;:::-;;;;23222:464;;;;23178:523;23095:617;23053:659;23737:40;;;6265:25:1;;;6321:2;6306:18;;6299:34;;;23737:40:0;;6238:18:1;23737:40:0;6091:248:1;2165:191:0;2258:6;;;-1:-1:-1;;;;;2275:17:0;;;-1:-1:-1;;;;;;2275:17:0;;;;;;;2308:40;;2258:6;;;2275:17;2258:6;;2308:40;;2239:16;;2308:40;2228:128;2165:191;:::o;4124:507::-;-1:-1:-1;;;;;4221:18:0;;;;;;:38;;-1:-1:-1;;;;;;4243:16:0;;;;4221:38;4213:53;;;;-1:-1:-1;;;4213:53:0;;28067:2:1;4213:53:0;;;28049:21:1;28106:1;28086:18;;;28079:29;-1:-1:-1;;;28124:18:1;;;28117:32;28166:18;;4213:53:0;27865:325:1;4213:53:0;-1:-1:-1;;;;;4348:15:0;;4326:19;4348:15;;;;;;;;;;;4382:21;;;;4374:36;;;;-1:-1:-1;;;4374:36:0;;28397:2:1;4374:36:0;;;28379:21:1;28436:1;28416:18;;;28409:29;-1:-1:-1;;;28454:18:1;;;28447:32;28496:18;;4374:36:0;28195:325:1;4374:36:0;-1:-1:-1;;;;;4446:15:0;;;:9;:15;;;;;;;;;;;4464:20;;;4446:38;;4499:13;;;;;;;;;;:23;;;;;;4549:26;;160:25:1;;;4499:13:0;;4549:26;;133:18:1;4549:26:0;;;;;;;4586:37;27736:183;15077:779;15172:13;;-1:-1:-1;;;;;15161:24:0;;;15172:13;;15161:24;;;;:52;;-1:-1:-1;;;;;;15189:24:0;;15208:4;15189:24;;15161:52;15157:692;;;15234:14;:36;;;;-1:-1:-1;;;;;;15253:17:0;;;;;;:8;:17;;;;;;;;15252:18;15234:36;15230:608;;;-1:-1:-1;;;;;;15291:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;15291:24:0;15311:4;15291:24;;;;;;15334:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;15334:21:0;;;;;;15077:779::o;15230:608::-;15382:14;15381:15;:36;;;;-1:-1:-1;;;;;;15400:17:0;;;;;;:8;:17;;;;;;;;15381:36;15377:461;;;-1:-1:-1;;;;;15438:17:0;;15458:5;15438:17;;;:8;:17;;;;;:25;;-1:-1:-1;;15438:25:0;;;15546:277;15570:7;:14;15566:18;;15546:277;;;15632:7;-1:-1:-1;;;;;15618:21:0;:7;15626:1;15618:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15618:10:0;:21;15614:190;;15681:7;15689:14;;:18;;15706:1;;15689:18;:::i;:::-;15681:27;;;;;;;;:::i;:::-;;;;;;;;;;;15668:7;:10;;-1:-1:-1;;;;;15681:27:0;;;;15676:1;;15668:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;15668:40:0;;;;;-1:-1:-1;;;;;15668:40:0;;;;;;15735:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;15735:13:0;;;;;-1:-1:-1;;;;;;15735:13:0;;;;;;27870:41:::1;27736:183:::0;;:::o;15614:190::-;15586:3;;;;:::i;:::-;;;;15546:277;;15377:461;15077:779;;:::o;196:250:1:-;281:1;291:113;305:6;302:1;299:13;291:113;;;381:11;;;375:18;362:11;;;355:39;327:2;320:10;291:113;;;-1:-1:-1;;438:1:1;420:16;;413:27;196:250::o;451:396::-;600:2;589:9;582:21;563:4;632:6;626:13;675:6;670:2;659:9;655:18;648:34;691:79;763:6;758:2;747:9;743:18;738:2;730:6;726:15;691:79;:::i;:::-;831:2;810:15;-1:-1:-1;;806:29:1;791:45;;;;838:2;787:54;;451:396;-1:-1:-1;;451:396:1:o;852:131::-;-1:-1:-1;;;;;927:31:1;;917:42;;907:70;;973:1;970;963:12;988:315;1056:6;1064;1117:2;1105:9;1096:7;1092:23;1088:32;1085:52;;;1133:1;1130;1123:12;1085:52;1172:9;1159:23;1191:31;1216:5;1191:31;:::i;:::-;1241:5;1293:2;1278:18;;;;1265:32;;-1:-1:-1;;;988:315:1:o;1500:456::-;1577:6;1585;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:1;1812:18;;1799:32;1840:33;1799:32;1840:33;:::i;:::-;1500:456;;1892:7;;-1:-1:-1;;;1946:2:1;1931:18;;;;1918:32;;1500:456::o;1961:180::-;2020:6;2073:2;2061:9;2052:7;2048:23;2044:32;2041:52;;;2089:1;2086;2079:12;2041:52;-1:-1:-1;2112:23:1;;1961:180;-1:-1:-1;1961:180:1:o;2543:461::-;2596:3;2634:5;2628:12;2661:6;2656:3;2649:19;2687:4;2716:2;2711:3;2707:12;2700:19;;2753:2;2746:5;2742:14;2774:1;2784:195;2798:6;2795:1;2792:13;2784:195;;;2863:13;;-1:-1:-1;;;;;2859:39:1;2847:52;;2919:12;;;;2954:15;;;;2895:1;2813:9;2784:195;;;-1:-1:-1;2995:3:1;;2543:461;-1:-1:-1;;;;;2543:461:1:o;3009:261::-;3188:2;3177:9;3170:21;3151:4;3208:56;3260:2;3249:9;3245:18;3237:6;3208:56;:::i;:::-;3200:64;3009:261;-1:-1:-1;;;3009:261:1:o;3508:247::-;3567:6;3620:2;3608:9;3599:7;3595:23;3591:32;3588:52;;;3636:1;3633;3626:12;3588:52;3675:9;3662:23;3694:31;3719:5;3694:31;:::i;3760:248::-;3828:6;3836;3889:2;3877:9;3868:7;3864:23;3860:32;3857:52;;;3905:1;3902;3895:12;3857:52;-1:-1:-1;;3928:23:1;;;3998:2;3983:18;;;3970:32;;-1:-1:-1;3760:248:1:o;4013:388::-;4081:6;4089;4142:2;4130:9;4121:7;4117:23;4113:32;4110:52;;;4158:1;4155;4148:12;4110:52;4197:9;4184:23;4216:31;4241:5;4216:31;:::i;:::-;4266:5;-1:-1:-1;4323:2:1;4308:18;;4295:32;4336:33;4295:32;4336:33;:::i;:::-;4388:7;4378:17;;;4013:388;;;;;:::o;5046:380::-;5125:1;5121:12;;;;5168;;;5189:61;;5243:4;5235:6;5231:17;5221:27;;5189:61;5296:2;5288:6;5285:14;5265:18;5262:38;5259:161;;5342:10;5337:3;5333:20;5330:1;5323:31;5377:4;5374:1;5367:15;5405:4;5402:1;5395:15;5259:161;;5046:380;;;:::o;6674:274::-;-1:-1:-1;;;;;6866:32:1;;;;6848:51;;6930:2;6915:18;;6908:34;6836:2;6821:18;;6674:274::o;6953:277::-;7020:6;7073:2;7061:9;7052:7;7048:23;7044:32;7041:52;;;7089:1;7086;7079:12;7041:52;7121:9;7115:16;7174:5;7167:13;7160:21;7153:5;7150:32;7140:60;;7196:1;7193;7186:12;7895:127;7956:10;7951:3;7947:20;7944:1;7937:31;7987:4;7984:1;7977:15;8011:4;8008:1;8001:15;8027:125;8092:9;;;8113:10;;;8110:36;;;8126:18;;:::i;8512:168::-;8585:9;;;8616;;8633:15;;;8627:22;;8613:37;8603:71;;8654:18;;:::i;8685:217::-;8725:1;8751;8741:132;;8795:10;8790:3;8786:20;8783:1;8776:31;8830:4;8827:1;8820:15;8858:4;8855:1;8848:15;8741:132;-1:-1:-1;8887:9:1;;8685:217::o;8907:128::-;8974:9;;;8995:11;;;8992:37;;;9009:18;;:::i;10243:251::-;10313:6;10366:2;10354:9;10345:7;10341:23;10337:32;10334:52;;;10382:1;10379;10372:12;10334:52;10414:9;10408:16;10433:31;10458:5;10433:31;:::i;11159:325::-;11361:2;11343:21;;;11400:1;11380:18;;;11373:29;-1:-1:-1;;;11433:2:1;11418:18;;11411:32;11475:2;11460:18;;11159:325::o;11819:184::-;11889:6;11942:2;11930:9;11921:7;11917:23;11913:32;11910:52;;;11958:1;11955;11948:12;11910:52;-1:-1:-1;11981:16:1;;11819:184;-1:-1:-1;11819:184:1:o;12668:375::-;-1:-1:-1;;;;;12926:15:1;;;12908:34;;12978:15;;;;12973:2;12958:18;;12951:43;13025:2;13010:18;;13003:34;;;;12858:2;12843:18;;12668:375::o;14143:306::-;14231:6;14239;14247;14300:2;14288:9;14279:7;14275:23;14271:32;14268:52;;;14316:1;14313;14306:12;14268:52;14345:9;14339:16;14329:26;;14395:2;14384:9;14380:18;14374:25;14364:35;;14439:2;14428:9;14424:18;14418:25;14408:35;;14143:306;;;;;:::o;14454:179::-;14489:3;14531:1;14513:16;14510:23;14507:120;;;14577:1;14574;14571;14556:23;-1:-1:-1;14614:1:1;14608:8;14603:3;14599:18;14507:120;14454:179;:::o;14770:346::-;14880:2;14861:13;;-1:-1:-1;;14857:27:1;14845:40;;14915:18;14900:34;;14936:22;;;14897:62;14894:185;;;15001:10;14996:3;14992:20;14989:1;14982:31;15036:4;15033:1;15026:15;15064:4;15061:1;15054:15;14894:185;15095:2;15088:22;-1:-1:-1;;14770:346:1:o;15121:671::-;15160:3;15202:4;15184:16;15181:26;15178:39;;;15121:671;:::o;15178:39::-;15244:2;15238:9;-1:-1:-1;;15309:16:1;15305:25;;15302:1;15238:9;15281:50;15360:4;15354:11;15384:16;15419:18;15490:2;15483:4;15475:6;15471:17;15468:25;15463:2;15455:6;15452:14;15449:45;15446:58;;;15497:5;;;;;15121:671;:::o;15446:58::-;15534:6;15528:4;15524:17;15513:28;;15570:3;15564:10;15597:2;15589:6;15586:14;15583:27;;;15603:5;;;;;;15121:671;:::o;15583:27::-;15687:2;15668:16;15662:4;15658:27;15654:36;15647:4;15638:6;15633:3;15629:16;15625:27;15622:69;15619:82;;;15694:5;;;;;;15121:671;:::o;15619:82::-;15710:57;15761:4;15752:6;15744;15740:19;15736:30;15730:4;15710:57;:::i;:::-;-1:-1:-1;15783:3:1;;15121:671;-1:-1:-1;;;;;15121:671:1:o;19511:607::-;-1:-1:-1;;;;;19870:15:1;;;19852:34;;19917:2;19902:18;;19895:34;;;;19960:2;19945:18;;19938:34;;;;20003:2;19988:18;;19981:34;;;;20052:15;;;20046:3;20031:19;;20024:44;19832:3;20084:19;;20077:35;;;;19801:3;19786:19;;19511:607::o;23133:127::-;23194:10;23189:3;23185:20;23182:1;23175:31;23225:4;23222:1;23215:15;23249:4;23246:1;23239:15;23265:574;23556:6;23545:9;23538:25;23599:6;23594:2;23583:9;23579:18;23572:34;23642:3;23637:2;23626:9;23622:18;23615:31;23519:4;23663:57;23715:3;23704:9;23700:19;23692:6;23663:57;:::i;:::-;-1:-1:-1;;;;;23756:32:1;;;;23751:2;23736:18;;23729:60;-1:-1:-1;23820:3:1;23805:19;23798:35;23655:65;23265:574;-1:-1:-1;;;23265:574:1:o;24191:459::-;24453:29;24448:3;24441:42;24423:3;24512:6;24506:13;24528:75;24596:6;24591:2;24586:3;24582:12;24575:4;24567:6;24563:17;24528:75;:::i;:::-;24623:16;;;;24641:2;24619:25;;24191:459;-1:-1:-1;;24191:459:1:o;27725:135::-;27764:3;27785:17;;;27782:43;;27805:18;;:::i;:::-;-1:-1:-1;27852:1:1;27841:13;;27725:135::o;28525:127::-;28586:10;28581:3;28577:20;28574:1;28567:31;28617:4;28614:1;28607:15;28641:4;28638:1;28631:15

Swarm Source

ipfs://8a5947c7c161a9c177e26d82bd176f569fe24c2bc0abf9ee74a4995b400d1136
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.