ETH Price: $3,447.27 (+1.45%)
Gas: 8 Gwei

Token

RipGabe (BORK)
 

Overview

Max Total Supply

1,000,000,000,000,000 BORK

Holders

181 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
250,000,000 BORK

Value
$0.00
0x63a560e2929dd0d6f72d342700959ae41b34d004
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The RIPGabe ecosystem offers a long-term and set of dapps for holders to earn passively, build products in the space, interact and create new connections within the memes and crypto space.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RipGabe

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-11
*/

/*
 ooooooooo.   ooooo ooooooooo.          .oooooo.          .o.       oooooooooo.  oooooooooooo 
`888   `Y88. `888' `888   `Y88.       d8P'  `Y8b        .888.      `888'   `Y8b `888'     `8 
 888   .d88'  888   888   .d88'      888               .8"888.      888     888  888         
 888ooo88P'   888   888ooo88P'       888              .8' `888.     888oooo888'  888oooo8    
 888`88b.     888   888              888     ooooo   .88ooo8888.    888    `88b  888    "    
 888  `88b.   888   888              `88.    .88'   .8'     `888.   888    .88P  888       o 
o888o  o888o o888o o888o              `Y8bood8P'   o88o     o8888o o888bood8P'  o888ooooood8

Telegram: @ripgabeofficialportal
Website: https://www.ripgabe.com/
Marketplace: https://www.petify.market/

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.7;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

interface IDEXRouter {
    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 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;
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract RipGabe is IERC20, Ownable {
    using Address for address;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "RipGabe";
    string constant _symbol = "BORK";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000_000_000 * (10 ** _decimals);
    uint256 _maxBuyTxAmount = (_totalSupply * 2) / 800;
    uint256 _maxSellTxAmount = (_totalSupply * 1) / 800;
    uint256 _maxWalletSize = (_totalSupply * 1) / 66;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) public lastSell;
    mapping (address => uint256) public lastBuy;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) liquidityCreator;

    uint256 developerFee = 400;
    uint256 marketingFee = 400;
    uint256 liquidityFee = 200;
    uint256 buybackFee = 0;
    uint256 totalFee = marketingFee + buybackFee + liquidityFee + developerFee;
    uint256 sellBias = 1000;
    uint256 feeDenominator = 10000;

    address payable public liquidityFeeReceiver = payable(0xE6E20A4A89032851FF1E6daFae4BE456Ca479099);
    address payable public marketingFeeReceiver = payable(0x0202726cbff95dC7a397365faAC4A593a6959FA3);
    address payable public developer;

    IDEXRouter public router;
    //address routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    //address routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => bool) liquidityPools;
    mapping (address => uint256) public protected;
    bool protectionEnabled = true;
    bool protectionDisabled = false;
    uint256 protectionLimit;
    uint256 public protectionCount;
    uint256 protectionTimer;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    uint256 public deadBlocks;
    bool startBullRun = false;
    bool pauseDisabled = false;
    uint256 public rateLimit = 2;
    bool protectionEnded = false;

    bool public swapEnabled = true;
    bool processEnabled = true;
    uint256 public swapThreshold = _totalSupply / 1000;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    mapping (address => bool) teamMember;
    
    modifier onlyTeam() {
        require(teamMember[_msgSender()] || msg.sender == owner(), "Caller is not a team member");
        _;
    }
    
    event ProtectedWallet(address, address, uint256, uint8);

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        isFeeExempt[owner()] = true;
        liquidityCreator[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isTxLimitExempt[DEAD] = true;

        _balances[owner()] = _totalSupply;
        developer = payable(msg.sender);
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function maxBuyTxTokens() external view returns (uint256) { return _maxBuyTxAmount / (10 ** _decimals); }
    function maxSellTxTokens() external view returns (uint256) { return _maxSellTxAmount / (10 ** _decimals); }
    function maxWalletTokens() external view returns (uint256) { return _maxWalletSize / (10 ** _decimals); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    
    function setTeamMember(address _team, bool _enabled) external onlyOwner {
        teamMember[_team] = _enabled;
    }
    
    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint i = 0; i < addresses.length; i++) {
            if(!liquidityPools[addresses[i]] && !liquidityCreator[addresses[i]]) {
                _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
            }
        }
    }
    
    function buyBack(address token, uint256 amountPercentage) external onlyTeam {
        uint256 amountETH = (address(this).balance * amountPercentage) / 100;
        
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = token;

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            msg.sender,
            block.timestamp
        );
    }
    
    function rescueToken(address tokenAddress, uint256 tokens) external onlyTeam
        returns (bool success)
    {
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }
    
    function clearStuckBalance(uint256 amountPercentage, address adr) external onlyTeam {
        uint256 amountETH = address(this).balance;
        payable(adr).transfer((amountETH * amountPercentage) / 100);
    }
    
    function openTrading(uint256 _deadBlocks, uint256 _protection, uint256 _limit) external onlyTeam {
        require(!startBullRun && _deadBlocks < 10);
        deadBlocks = _deadBlocks;
        startBullRun = true;
        launchedAt = block.number;
        protectionTimer = block.timestamp + _protection;
        protectionLimit = _limit * (10 ** _decimals);
    }
    
    function pauseTrading() external onlyTeam {
        require(!pauseDisabled);
        startBullRun = false;
    }
    
    function disablePause() external onlyTeam {
        pauseDisabled = true;
        startBullRun = true;
    }
    
    function setProtection(bool _protect, uint256 _addTime) external onlyTeam {
        require(!protectionDisabled);
        protectionEnabled = _protect;
        require(_addTime < 1 days);
        protectionTimer += _addTime;
    }
    
    function disableProtection() external onlyTeam {
        protectionDisabled = true;
        protectionEnabled = false;
    }
    
    function protectWallet(address[] calldata _wallets, bool _protect) external onlyTeam {
        if (_protect) {
            require(protectionEnabled);
        }
        
        for (uint i = 0; i < _wallets.length; i++) {
            
            if (_protect) {
                protectionCount++;
                emit ProtectedWallet(tx.origin, _wallets[i], block.number, 2);
            }
            else {
                if (protected[_wallets[i]] != 0)
                    protectionCount--;      
            }
            protected[_wallets[i]] = _protect ? block.number : 0;
        }
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "BEP20: transfer from 0x0");
        require(recipient != address(0), "BEP20: transfer to 0x0");
        require(amount > 0, "Amount must be > zero");
        require(_balances[sender] >= amount, "Insufficient balance");
        if(!launched() && liquidityPools[recipient]){ require(liquidityCreator[sender], "Liquidity not added yet."); launch(); }
        if(!startBullRun){ require(liquidityCreator[sender] || liquidityCreator[recipient], "Trading not open yet."); }

        if (!protectionEnded && protectionTimer <= block.timestamp) {
            protectionEnded = true;
            rateLimit = 0;
            _maxWalletSize = _totalSupply;
            _maxBuyTxAmount = _totalSupply;
            _maxSellTxAmount = _totalSupply;
        }

        checkTxLimit(sender, recipient, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) {
                checkWalletLimit(recipient, amount);
            }
        }
        
        if(protectionEnabled && protectionTimer > block.timestamp) {
            if(liquidityPools[sender] && tx.origin != recipient && protected[recipient] == 0) {
                protected[recipient] = block.number;
                protectionCount++;
                emit ProtectedWallet(tx.origin, recipient, block.number, 0);
            }
        }
        
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] = _balances[recipient] + amountReceived;

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        launchedTime = block.timestamp;
        swapEnabled = true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal {
        require(isTxLimitExempt[sender] || amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount), "TX Limit Exceeded");
        require(isTxLimitExempt[sender] || lastBuy[recipient] + rateLimit <= block.number, "Transfer rate limit exceeded.");
        
        if (protected[sender] != 0){
            require(amount <= protectionLimit * (10 ** _decimals) && lastSell[sender] == 0 && protectionTimer > block.timestamp, "Wallet protected, please contact support.");
            lastSell[sender] = block.number;
        }
        
        if (liquidityPools[recipient]) {
            lastSell[sender] = block.number;
        } else if (shouldTakeFee(sender)) {
            if (protectionEnabled && protectionTimer > block.timestamp && lastBuy[tx.origin] == block.number && protected[recipient] == 0) {
                protected[recipient] = block.number;
                emit ProtectedWallet(tx.origin, recipient, block.number, 1);
            }
            lastBuy[recipient] = block.number;
            if (tx.origin != recipient)
                lastBuy[tx.origin] = block.number;
        }
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator - 1; }
        if (selling) return totalFee + sellBias;
        return totalFee;
    }

    function takeFee(address recipient, uint256 amount) internal returns (uint256) {
        bool selling = liquidityPools[recipient];
        uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator;
        
        _balances[address(this)] += feeAmount;
    
        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        
        uint256 amountToLiquify = (amountToSwap * liquidityFee / 2) / totalFee;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance - balanceBefore;
        uint256 totalBNBFee = totalFee - (liquidityFee / 2);

        uint256 amountBNBLiquidity = (amountBNB * liquidityFee / 2) / totalBNBFee;
        uint256 amountBNBMarketing = (amountBNB * marketingFee) / totalBNBFee;
        uint256 amountBNBDeveloper = (amountBNB * developerFee) / totalBNBFee;
        
        if (amountBNBMarketing > 0)
            marketingFeeReceiver.transfer(amountBNBMarketing);
        if (amountBNBDeveloper > 0)
            developer.transfer(amountBNBDeveloper);
        
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityFeeReceiver,
                block.timestamp
            );
        }

        emit FundsDistributed(amountBNBLiquidity, amountBNBMarketing, amountBNBDeveloper);
    }
    
    function addLiquidityPool(address lp, bool isPool) external onlyOwner {
        require(lp != pair, "Can't alter current liquidity pair");
        liquidityPools[lp] = isPool;
        emit UpdatedSettings(isPool ? 'Liquidity Pool Enabled' : 'Liquidity Pool Disabled', [Log(toString(abi.encodePacked(lp)), 1), Log('', 0), Log('', 0)]);
    }
    
    function switchRouter(address newRouter) external onlyOwner {
        router = IDEXRouter(newRouter);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        isTxLimitExempt[newRouter] = true;
        emit UpdatedSettings('Exchange Router Updated', [Log(concatenate('New Router: ',toString(abi.encodePacked(newRouter))), 1),Log(concatenate('New Liquidity Pair: ',toString(abi.encodePacked(pair))), 1), Log('', 0)]);
    }
    
    function excludePresaleAddresses(address preSaleRouter, address presaleAddress) external onlyOwner {
        liquidityCreator[preSaleRouter] = true;
        liquidityCreator[presaleAddress] = true;
        isTxLimitExempt[preSaleRouter] = true;
        isTxLimitExempt[presaleAddress] = true;
        isFeeExempt[preSaleRouter] = true;
        isFeeExempt[presaleAddress] = true;
        emit UpdatedSettings('Presale Setup', [Log(concatenate('Presale Router: ',toString(abi.encodePacked(preSaleRouter))), 1),Log(concatenate('Presale Address: ',toString(abi.encodePacked(presaleAddress))), 1), Log('', 0)]);
    }

    function setRateLimit(uint256 rate) external onlyOwner {
        require(rate <= 30);
        rateLimit = rate;
        emit UpdatedSettings('Purchase Rate Limit', [Log('Blocks', rate), Log('', 0), Log('', 0)]);
    }

    function setTxLimit(uint256 buyNumerator, uint256 sellNumerator, uint256 divisor) external onlyOwner {
        require(buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000);
        _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
        _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
        emit UpdatedSettings('Maximum Transaction Size', [Log('Max Buy Tokens', _maxBuyTxAmount / (10 ** _decimals)), Log('Max Sell Tokens', _maxSellTxAmount / (10 ** _decimals)), Log('', 0)]);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit UpdatedSettings('Maximum Wallet Size', [Log('Tokens', _maxWalletSize / (10 ** _decimals)), Log('', 0), Log('', 0)]);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
        emit UpdatedSettings(exempt ? 'Fees Removed' : 'Fees Enforced', [Log(toString(abi.encodePacked(holder)), 1), Log('', 0), Log('', 0)]);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
        emit UpdatedSettings(exempt ? 'Transaction Limit Removed' : 'Transaction Limit Enforced', [Log(toString(abi.encodePacked(holder)), 1), Log('', 0), Log('', 0)]);
    }

    function setFees(uint256 _buybackFee, uint256 _liquidityFee, uint256 _marketingFee, uint256 _developerFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        buybackFee = _buybackFee;
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        developerFee = _developerFee;
        totalFee = _buybackFee + _marketingFee + _liquidityFee + _developerFee;
        sellBias = _sellBias;
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 2);
        emit UpdatedSettings('Fees', [Log('Total Fee Percent', totalFee * 100 / feeDenominator), Log('Marketing Percent', _marketingFee * 100 / feeDenominator), Log('Liquidity Percent', _liquidityFee * 100 / feeDenominator)]);
    }

    function setFeeReceivers(address _liquidityFeeReceiver, address _marketingFeeReceiver, address _developer) external onlyOwner {
        liquidityFeeReceiver = payable(_liquidityFeeReceiver);
        marketingFeeReceiver = payable(_marketingFeeReceiver);
        developer = payable(_developer);
        emit UpdatedSettings('Fee Receivers', [Log(concatenate('Liquidity Receiver: ',toString(abi.encodePacked(_liquidityFeeReceiver))), 1),Log(concatenate('Marketing Receiver: ',toString(abi.encodePacked(_marketingFeeReceiver))), 1), Log(concatenate('Dev Receiver: ',toString(abi.encodePacked(_developer))), 1)]);
    }

    function setSwapBackSettings(bool _enabled, bool _processEnabled, uint256 _denominator, uint256 _swapMinimum) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        processEnabled = _processEnabled;
        swapThreshold = _totalSupply / _denominator;
        swapMinimum = _swapMinimum * (10 ** _decimals);
        emit UpdatedSettings('Swap Settings', [Log('Enabled', _enabled ? 1 : 0),Log('Swap Maximum', swapThreshold), Log('Auto-processing', _processEnabled ? 1 : 0)]);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }
	
	function toString(bytes memory data) internal pure returns(string memory) {
        bytes memory alphabet = "0123456789abcdef";
    
        bytes memory str = new bytes(2 + data.length * 2);
        str[0] = "0";
        str[1] = "x";
        for (uint i = 0; i < data.length; i++) {
            str[2+i*2] = alphabet[uint(uint8(data[i] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(data[i] & 0x0f))];
        }
        return string(str);
    }
    
    function concatenate(string memory a, string memory b) internal pure returns (string memory) {
        return string(abi.encodePacked(a, b));
    }

	struct Log {
	    string name;
	    uint256 value;
	}

    event FundsDistributed(uint256 charityBNB, uint256 marketingBNB, uint256 devBNB);
    event UpdatedSettings(string name, Log[3] values);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"charityBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devBNB","type":"uint256"}],"name":"FundsDistributed","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":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"","type":"uint8"}],"name":"ProtectedWallet","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":"string","name":"name","type":"string"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"indexed":false,"internalType":"struct RipGabe.Log[3]","name":"values","type":"tuple[3]"}],"name":"UpdatedSettings","type":"event"},{"inputs":[{"internalType":"address","name":"lp","type":"address"},{"internalType":"bool","name":"isPool","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"buyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"},{"internalType":"address","name":"adr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developer","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disablePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"preSaleRouter","type":"address"},{"internalType":"address","name":"presaleAddress","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"},{"internalType":"uint256","name":"_protection","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_protect","type":"bool"}],"name":"protectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"protected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_developer","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developerFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"},{"internalType":"uint256","name":"_addTime","type":"uint256"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setRateLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"bool","name":"_processEnabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_swapMinimum","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTeamMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyNumerator","type":"uint256"},{"internalType":"uint256","name":"sellNumerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"switchRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead17909155600280549091169055620000326009600a620005ed565b620000459066038d7ea4c68000620006ae565b60035561032060035460026200005c9190620006ae565b62000068919062000581565b60045561032060035460016200007f9190620006ae565b6200008b919062000581565b60055560426003546001620000a19190620006ae565b620000ad919062000581565b600655610190600e819055600f81905560c8601081905560006011819055620000d7908362000566565b620000e3919062000566565b620000ef919062000566565b6012556103e86013819055612710601455601580546001600160a01b031990811673e6e20a4a89032851ff1e6dafae4be456ca47909917909155601680548216730202726cbff95dc7a397365faac4a593a6959fa317905560198054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055601c805461ffff199081166001179091556024805490911690556002602555602680546201010062ffffff19909116179055600354620001a7919062000581565b602755612710600354620001bc919062000581565b602855348015620001cc57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601954601880546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200026657600080fd5b505afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000534565b6001600160a01b031663c9c65396601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002fe57600080fd5b505afa15801562000313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000339919062000534565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156200038157600080fd5b505af115801562000396573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bc919062000534565b602080546001600160a01b0319166001600160a01b039290921691821781556000918252601a905260408120805460ff19166001179055600019906008906200040d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601980548416835290855283822095909555308082526008855283822086548416835285528382206000199055815483168252600b85528382208054600160ff199182168117909255835485168452600d87528584208054821683179055918352600c8652848320805483168217905582548416835284832080548316821790559554831682528382208054821687179055855483168252838220805490911690951790945560035484548216855260078452828520819055601780546001600160a01b0319163317905584549251908152911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620006e6565b6000602082840312156200054757600080fd5b81516001600160a01b03811681146200055f57600080fd5b9392505050565b600082198211156200057c576200057c620006d0565b500190565b6000826200059f57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005e5578160001904821115620005c957620005c9620006d0565b80851615620005d757918102915b93841c9390800290620005a9565b509250929050565b60006200055f60ff8416836000826200060957506001620006a8565b816200061857506000620006a8565b81600181146200063157600281146200063c576200065c565b6001915050620006a8565b60ff841115620006505762000650620006d0565b50506001821b620006a8565b5060208310610133831016604e8410600b841016171562000681575081810a620006a8565b6200068d8383620005a4565b8060001904821115620006a457620006a4620006d0565b0290505b92915050565b6000816000190483118215151615620006cb57620006cb620006d0565b500290565b634e487b7160e01b600052601160045260246000fd5b61430680620006f66000396000f3fe60806040526004361061037a5760003560e01c80636ddd1713116101d1578063bfa21d6a11610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610a4a578063f8821a6214610a6a578063f887ea4014610a80578063fabb0b4f14610aa057600080fd5b8063dd62ed3e146109a4578063e96fada2146109ea578063f1f3bca314610a0a578063f2fde38b14610a2a57600080fd5b8063ca4b208b116100dc578063ca4b208b14610924578063d1b8df2214610944578063d686014214610964578063d7c010321461098457600080fd5b8063bfa21d6a146108b7578063c1adf7bc146108d7578063c287184e1461090457600080fd5b806395d89b411161016f578063a9059cbb11610149578063a9059cbb1461084c578063abe57e701461086c578063bafe446b1461088c578063bf56b371146108a157600080fd5b806395d89b41146107e95780639b02c40214610816578063a8aa1b311461082c57600080fd5b8063715018a6116101ab578063715018a61461076457806386f6c3c114610779578063893d20e8146107995780638da5cb5b146107cb57600080fd5b80636ddd1713146106e25780636f4ce4281461070157806370a082311461072e57600080fd5b8063421dd7c7116102ab5780635804f1e41161024957806361e08e721161022357806361e08e721461067757806363a803e11461068d578063658d4b7f146106a257806367243482146106c257600080fd5b80635804f1e41461062c578063584f969a1461064257806360bba03d1461065757600080fd5b8063507139351161028557806350713935146105ac57806354a1dfc9146105cc57806356a227f2146105ec578063571ac8b01461060c57600080fd5b8063421dd7c71461054a57806346d7edaa1461055f578063492a937b1461058c57600080fd5b8063234e949411610318578063313ce567116102f2578063313ce567146104ce57806331a0a3b3146104ea57806333f3d6281461050a57806334848b9a1461052a57600080fd5b8063234e94941461048457806323b872dd146104995780632b112e49146104b957600080fd5b8063095ea7b311610354578063095ea7b31461040a5780631031e36e1461043a57806313b4a7f41461044f57806318160ddd1461046f57600080fd5b80630445b6671461038657806306fdde03146103af578063095db78f146103e857600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60275481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506040805180820190915260078152665269704761626560c81b60208201525b6040516103a69190613dd1565b3480156103f457600080fd5b50610408610403366004613a75565b610ab6565b005b34801561041657600080fd5b5061042a6104253660046139dd565b610c72565b60405190151581526020016103a6565b34801561044657600080fd5b50610408610cdf565b34801561045b57600080fd5b5061040861046a3660046138ea565b610d44565b34801561047b57600080fd5b5060035461039c565b34801561049057600080fd5b5061039c610f02565b3480156104a557600080fd5b5061042a6104b436600461396e565b610f22565b3480156104c557600080fd5b5061039c610fb7565b3480156104da57600080fd5b50604051600981526020016103a6565b3480156104f657600080fd5b506104086105053660046138b0565b610ff8565b34801561051657600080fd5b5061042a6105253660046139dd565b611310565b34801561053657600080fd5b50610408610545366004613bbf565b6113d4565b34801561055657600080fd5b50610408611475565b34801561056b57600080fd5b5061039c61057a3660046138b0565b601b6020526000908152604090205481565b34801561059857600080fd5b506104086105a73660046139af565b6114ca565b3480156105b857600080fd5b506104086105c7366004613bbf565b611673565b3480156105d857600080fd5b506104086105e7366004613afb565b6117fd565b3480156105f857600080fd5b50610408610607366004613b78565b611986565b34801561061857600080fd5b5061042a6106273660046138b0565b611a16565b34801561063857600080fd5b5061039c60225481565b34801561064e57600080fd5b50610408611a24565b34801561066357600080fd5b506104086106723660046139af565b611a79565b34801561068357600080fd5b5061039c60255481565b34801561069957600080fd5b5061039c611ace565b3480156106ae57600080fd5b506104086106bd3660046139af565b611ae9565b3480156106ce57600080fd5b506104086106dd366004613a09565b611bb8565b3480156106ee57600080fd5b5060265461042a90610100900460ff1681565b34801561070d57600080fd5b5061039c61071c3660046138b0565b60096020526000908152604090205481565b34801561073a57600080fd5b5061039c6107493660046138b0565b6001600160a01b031660009081526007602052604090205490565b34801561077057600080fd5b50610408611d1f565b34801561078557600080fd5b50610408610794366004613c19565b611d93565b3480156107a557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a6565b3480156107d757600080fd5b506000546001600160a01b03166107b3565b3480156107f557600080fd5b50604080518082019091526004815263424f524b60e01b60208201526103db565b34801561082257600080fd5b5061039c601e5481565b34801561083857600080fd5b506020546107b3906001600160a01b031681565b34801561085857600080fd5b5061042a6108673660046139dd565b611f4f565b34801561087857600080fd5b50610408610887366004613b9d565b611f5c565b34801561089857600080fd5b5061039c612072565b3480156108ad57600080fd5b5061039c60215481565b3480156108c357600080fd5b506015546107b3906001600160a01b031681565b3480156108e357600080fd5b5061039c6108f23660046138b0565b600a6020526000908152604090205481565b34801561091057600080fd5b5061040861091f366004613b5f565b61208d565b34801561093057600080fd5b506017546107b3906001600160a01b031681565b34801561095057600080fd5b5061040861095f3660046139dd565b612150565b34801561097057600080fd5b5061040861097f366004613b41565b612313565b34801561099057600080fd5b5061040861099f366004613923565b6123a4565b3480156109b057600080fd5b5061039c6109bf3660046138ea565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109f657600080fd5b506016546107b3906001600160a01b031681565b348015610a1657600080fd5b5061039c610a25366004613ac1565b61253c565b348015610a3657600080fd5b50610408610a453660046138b0565b612581565b348015610a5657600080fd5b50610408610a653660046139af565b61266b565b348015610a7657600080fd5b5061039c60285481565b348015610a8c57600080fd5b506018546107b3906001600160a01b031681565b348015610aac57600080fd5b5061039c60235481565b336000908152602a602052604090205460ff1680610ade57506000546001600160a01b031633145b610b035760405162461bcd60e51b8152600401610afa90613ebb565b60405180910390fd5b8015610b1857601c5460ff16610b1857600080fd5b60005b82811015610c6c578115610ba757601e8054906000610b398361422d565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610b7257610b7261425e565b9050602002016020810190610b8791906138b0565b436002604051610b9a9493929190613d71565b60405180910390a1610c07565b601b6000858584818110610bbd57610bbd61425e565b9050602002016020810190610bd291906138b0565b6001600160a01b0316815260208101919091526040016000205415610c0757601e8054906000610c0183614216565b91905055505b81610c13576000610c15565b435b601b6000868685818110610c2b57610c2b61425e565b9050602002016020810190610c4091906138b0565b6001600160a01b0316815260208101919091526040016000205580610c648161422d565b915050610b1b565b50505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ccd9086815260200190565b60405180910390a35060015b92915050565b336000908152602a602052604090205460ff1680610d0757506000546001600160a01b031633145b610d235760405162461bcd60e51b8152600401610afa90613ebb565b602454610100900460ff1615610d3857600080fd5b6024805460ff19169055565b6000546001600160a01b03163314610d6e5760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b038281166000818152600d602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055858552600c845282852080548816831790558085528285208054881683179055948452600b83528184208054871682179055938352918290208054909416909217909255815160e081018352601060a082019081526f0283932b9b0b632902937baba32b91d160851b60c083015292516000805160206142b1833981519152939192839260608401928392610e639291610e5e91610e4a918c9101613d25565b60405160208183030381529060405261275b565b612974565b8152602001600181525081526020016040518060400160405280610ebe604051806040016040528060118152602001700283932b9b0b6329020b2323932b9b99d1607d1b815250610e5e88604051602001610e4a9190613d25565b81526001602091820152908252604080516060810182526000818301818152825281840152929091019190915251610ef69190613fdc565b60405180910390a15050565b6000610f106009600a614109565b600554610f1d91906140a4565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610fa2576001600160a01b0384166000908152600860209081526040808320338452909152902054610f7d9083906141d3565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610fad8484846129a0565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610feb9161408c565b600354610f1d91906141d3565b6000546001600160a01b031633146110225760405162461bcd60e51b8152600401610afa90613f29565b601880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae91906138cd565b6001600160a01b031663c9c65396601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561110a57600080fd5b505afa15801561111e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114291906138cd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561118957600080fd5b505af115801561119d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c191906138cd565b602080546001600160a01b0319166001600160a01b0392831690811782556000908152601a82526040808220805460ff1990811660019081179092559486168352600c80855292829020805490951617909355825160e08101845260a081019182526b02732bb902937baba32b91d160a51b60c082015292516000805160206142b183398151915293928392606084019283926112699291610e5e91610e4a918b9101613d25565b815260016020918201529082526040805160808101825260148183019081527302732bb902634b8bab4b234ba3c902830b4b91d160651b60608301528354925194840194919384936112cd93610e5e92610e4a926001600160a01b03169101613d25565b815260016020918201529082526040805160608101825260008183018181528252818401529290910191909152516113059190613e46565b60405180910390a150565b336000908152602a602052604081205460ff168061133857506000546001600160a01b031633145b6113545760405162461bcd60e51b8152600401610afa90613ebb565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b15801561139c57600080fd5b505af11580156113b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb09190613ade565b336000908152602a602052604090205460ff16806113fc57506000546001600160a01b031633145b6114185760405162461bcd60e51b8152600401610afa90613ebb565b60245460ff1615801561142b5750600a83105b61143457600080fd5b60238390556024805460ff1916600117905543602155611454824261408c565b601f556114636009600a614109565b61146d90826141b4565b601d55505050565b336000908152602a602052604090205460ff168061149d57506000546001600160a01b031633145b6114b95760405162461bcd60e51b8152600401610afa90613ebb565b601c805461ffff1916610100179055565b6000546001600160a01b031633146114f45760405162461bcd60e51b8152600401610afa90613f29565b6020546001600160a01b038381169116141561155d5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610afa565b6001600160a01b0382166000908152601a60205260409020805460ff19168215151790556000805160206142b1833981519152816115d0576040518060400160405280601781526020017f4c697175696469747920506f6f6c2044697361626c6564000000000000000000815250611600565b60405180604001604052806016815260200175131a5c5d5a591a5d1e48141bdbdb08115b98589b195960521b8152505b6040805160a08101909152806060810180611621610e4a8960c08601613d25565b8152600160209182015290825260408051606080820183526000828401818152835282850181905285850192909252825190810183528083018281528152928301529182015251610ef6929190613de4565b6000546001600160a01b0316331461169d5760405162461bcd60e51b8152600401610afa90613f29565b6000831180156116ad5750600082115b80156116b95750600081115b80156116c757506127108111155b6116d057600080fd5b80836003546116df91906141b4565b6116e991906140a4565b60045560035481906116fc9084906141b4565b61170691906140a4565b6005556040805160e08101909152600e60a082019081526d4d61782042757920546f6b656e7360901b60c0830152606082019081526000805160206142b1833981519152919081906080820161175e6009600a614109565b60045461176b91906140a4565b9052815260408051608081018252600f9181019182526e4d61782053656c6c20546f6b656e7360881b606082015290815260209182019181016117b06009600a614109565b6005546117bd91906140a4565b90528152604080516060810182526000818301818152825260208281019190915290920191909152516117f09190613f95565b60405180910390a1505050565b6000546001600160a01b031633146118275760405162461bcd60e51b8152600401610afa90613f29565b6000821161183457600080fd5b6026805462ffff0019166101008615150262ff000019161762010000851515021790556003546118659083906140a4565b6027556118746009600a614109565b61187e90826141b4565b6028556040805160e08101909152600760a0820190815266115b98589b195960ca1b60c0830152606082019081526000805160206142b18339815191529190819060808201886118cf5760006118d2565b60015b60ff16815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d6178696d756d60a01b8152508152602001602754815250815260200160405180604001604052806040518060400160405280600f81526020016e4175746f2d70726f63657373696e6760881b815250815260200187611961576000611964565b60015b60ff16905290526040516119789190613f5e565b60405180910390a150505050565b336000908152602a602052604090205460ff16806119ae57506000546001600160a01b031633145b6119ca5760405162461bcd60e51b8152600401610afa90613ebb565b476001600160a01b0382166108fc60646119e486856141b4565b6119ee91906140a4565b6040518115909202916000818181858888f19350505050158015610c6c573d6000803e3d6000fd5b6000610cd982600019610c72565b336000908152602a602052604090205460ff1680611a4c57506000546001600160a01b031633145b611a685760405162461bcd60e51b8152600401610afa90613ebb565b6024805461ffff1916610101179055565b6000546001600160a01b03163314611aa35760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b03919091166000908152602a60205260409020805460ff1916911515919091179055565b6000611adc6009600a614109565b600654610f1d91906140a4565b6000546001600160a01b03163314611b135760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b0382166000908152600b60205260409020805460ff19168215151790556000805160206142b183398151915281611b76576040518060400160405280600d81526020016c1199595cc8115b999bdc98d959609a1b815250611600565b604080518082018252600c81526b1199595cc814995b5bdd995960a21b6020820152815160a0810190925290806060810180611621610e4a8960c08601613d25565b6000546001600160a01b03163314611be25760405162461bcd60e51b8152600401610afa90613f29565b8215801590611bf057508083145b611bf957600080fd5b3360005b84811015611d1757601a6000878784818110611c1b57611c1b61425e565b9050602002016020810190611c3091906138b0565b6001600160a01b0316815260208101919091526040016000205460ff16158015611c9f5750600d6000878784818110611c6b57611c6b61425e565b9050602002016020810190611c8091906138b0565b6001600160a01b0316815260208101919091526040016000205460ff16155b15611d0557611d0382878784818110611cba57611cba61425e565b9050602002016020810190611ccf91906138b0565b611cdb6009600a614109565b878786818110611ced57611ced61425e565b90506020020135611cfe91906141b4565b612ee1565b505b80611d0f8161422d565b915050611bfd565b505050505050565b6000546001600160a01b03163314611d495760405162461bcd60e51b8152600401610afa90613f29565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611dbd5760405162461bcd60e51b8152600401610afa90613f29565b60118690556010859055600f849055600e8390558285611ddd868961408c565b611de7919061408c565b611df1919061408c565b60125560138290556014819055611e096002826140a4565b60125410611e1657600080fd5b6000805160206142b18339815191526040518060600160405280604051806040016040528060405180604001604052806011815260200170151bdd185b081199594814195c98d95b9d607a1b81525081526020016014546012546064611e7c91906141b4565b611e8691906140a4565b905281526040805160808101825260119181019182527013585c9ad95d1a5b99c814195c98d95b9d607a1b6060820152908152601454602092830192820190611ed08a60646141b4565b611eda91906140a4565b9052815260408051608081018252601191810191825270131a5c5d5a591a5d1e4814195c98d95b9d607a1b6060820152908152601454602092830192820190611f248b60646141b4565b611f2e91906140a4565b90529052604051611f3f9190613e8d565b60405180910390a1505050505050565b6000610fb03384846129a0565b6000546001600160a01b03163314611f865760405162461bcd60e51b8152600401610afa90613f29565b600082118015611f965750600081115b8015611fa457506127108111155b611fad57600080fd5b8082600354611fbc91906141b4565b611fc691906140a4565b60069081556040805160e0810190915260a0810191825265546f6b656e7360d01b60c0820152606081019182526000805160206142b1833981519152918190608082016120156009600a614109565b60065461202291906140a4565b90528152604080516060808201835260008284018181528352602083810182905280860193909352835191820184528184018181528252918101919091529181019190915251610ef69190613e09565b60006120806009600a614109565b600454610f1d91906140a4565b6000546001600160a01b031633146120b75760405162461bcd60e51b8152600401610afa90613f29565b601e8111156120c557600080fd5b60258190556040805160e081018252600660a0820190815265426c6f636b7360d01b60c08301526060808301918252608083018590529082528251808201845260008185018181528252602082810182905280850192909252845192830185528285018181528352908201528183015290516000805160206142b18339815191529161130591614013565b336000908152602a602052604090205460ff168061217857506000546001600160a01b031633145b6121945760405162461bcd60e51b8152600401610afa90613ebb565b600060646121a283476141b4565b6121ac91906140a4565b60408051600280825260608201835292935060009290916020830190803683375050601854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561221657600080fd5b505afa15801561222a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224e91906138cd565b816000815181106122615761226161425e565b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106122955761229561425e565b6001600160a01b03928316602091820292909201015260185460405163b6f9de9560e01b815291169063b6f9de959084906122db90600090869033904290600401613d9c565b6000604051808303818588803b1580156122f457600080fd5b505af1158015612308573d6000803e3d6000fd5b505050505050505050565b336000908152602a602052604090205460ff168061233b57506000546001600160a01b031633145b6123575760405162461bcd60e51b8152600401610afa90613ebb565b601c54610100900460ff161561236c57600080fd5b601c805460ff191683151517905562015180811061238957600080fd5b80601f600082825461239b919061408c565b90915550505050565b6000546001600160a01b031633146123ce5760405162461bcd60e51b8152600401610afa90613f29565b601580546001600160a01b038086166001600160a01b0319928316179092556016805485841690831617905560178054928416929091169190911790556040805160e081018252601460a082019081527302634b8bab4b234ba3c902932b1b2b4bb32b91d160651b60c083015291516000805160206142b18339815191529282916060830191829161246d9190610e5e90610e4a908c90602001613d25565b81526020016001815250815260200160405180604001604052806124cb60405180604001604052806014815260200173026b0b935b2ba34b733902932b1b2b4bb32b91d160651b815250610e5e89604051602001610e4a9190613d25565b81526020016001815250815260200160405180604001604052806125236040518060400160405280600e81526020016d02232bb102932b1b2b4bb32b91d160951b815250610e5e88604051602001610e4a9190613d25565b8152600160209091015290526040516117f09190613ef2565b60004360235460215461254f919061408c565b10612563576001601454610cd991906141d3565b811561257957601354601254610cd9919061408c565b505060125490565b6000546001600160a01b031633146125ab5760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b0381166126105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afa565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146126955760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b0382166000908152600c60205260409020805460ff19168215151790556000805160206142b183398151915281612708576040518060400160405280601a81526020017f5472616e73616374696f6e204c696d697420456e666f72636564000000000000815250611600565b604080518082018252601981527f5472616e73616374696f6e204c696d69742052656d6f766564000000000000006020820152815160a0810190925290806060810180611621610e4a8960c08601613d25565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151606091906000906127969060026141b4565b6127a190600261408c565b67ffffffffffffffff8111156127b9576127b9614274565b6040519080825280601f01601f1916602001820160405280156127e3576020820181803683370190505b509050600360fc1b816000815181106127fe576127fe61425e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061282d5761282d61425e565b60200101906001600160f81b031916908160001a90535060005b845181101561296c578260048683815181106128655761286561425e565b016020015182516001600160f81b031990911690911c60f81c90811061288d5761288d61425e565b01602001516001600160f81b031916826128a88360026141b4565b6128b390600261408c565b815181106128c3576128c361425e565b60200101906001600160f81b031916908160001a905350828582815181106128ed576128ed61425e565b602091010151815160f89190911c600f1690811061290d5761290d61425e565b01602001516001600160f81b031916826129288360026141b4565b61293390600361408c565b815181106129435761294361425e565b60200101906001600160f81b031916908160001a905350806129648161422d565b915050612847565b509392505050565b60608282604051602001612989929190613d42565b604051602081830303815290604052905092915050565b60006001600160a01b0384166129f85760405162461bcd60e51b815260206004820152601860248201527f42455032303a207472616e736665722066726f6d2030783000000000000000006044820152606401610afa565b6001600160a01b038316612a475760405162461bcd60e51b8152602060048201526016602482015275042455032303a207472616e7366657220746f203078360541b6044820152606401610afa565b60008211612a8f5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610afa565b6001600160a01b038416600090815260076020526040902054821115612aee5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610afa565b602154158015612b1657506001600160a01b0383166000908152601a602052604090205460ff165b15612b9f576001600160a01b0384166000908152600d602052604090205460ff16612b835760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610afa565b612b9f43602155426022556026805461ff001916610100179055565b60245460ff16612c2c576001600160a01b0384166000908152600d602052604090205460ff1680612be857506001600160a01b0383166000908152600d602052604090205460ff165b612c2c5760405162461bcd60e51b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b6044820152606401610afa565b60265460ff16158015612c41575042601f5411155b15612c69576026805460ff191660011790556000602555600354600681905560048190556005555b612c74848484612f9b565b6001600160a01b0383166000908152601a602052604090205460ff16158015612cab57506001546001600160a01b03848116911614155b15612cda576001600160a01b0383166000908152600c602052604090205460ff16612cda57612cda83836132f0565b601c5460ff168015612ced575042601f54115b15612db7576001600160a01b0384166000908152601a602052604090205460ff168015612d235750326001600160a01b03841614155b8015612d4557506001600160a01b0383166000908152601b6020526040902054155b15612db7576001600160a01b0383166000908152601b60205260408120439055601e805491612d738361422d565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051612dae9493929190613d71565b60405180910390a15b60295460ff1615612dd457612dcd848484612ee1565b9050610fb0565b6001600160a01b038416600090815260076020526040902054612df89083906141d3565b6001600160a01b038516600090815260076020908152604080832093909355600b90529081205460ff1615612e2d5782612e37565b612e378484613375565b9050612e42846133f3565b15612e56578215612e5657612e568361346f565b6001600160a01b038416600090815260076020526040902054612e7a90829061408c565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ece9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054612f059083906141d3565b6001600160a01b038086166000908152600760205260408082209390935590851681522054612f3590839061408c565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f899086815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600c602052604090205460ff1680612fed57506001600160a01b0383166000908152601a602052604090205460ff16612fe557600554612fe9565b6004545b8111155b61302d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610afa565b6001600160a01b0383166000908152600c602052604090205460ff168061307957506025546001600160a01b0383166000908152600a602052604090205443916130769161408c565b11155b6130c55760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722072617465206c696d69742065786365656465642e0000006044820152606401610afa565b6001600160a01b0383166000908152601b6020526040902054156131a8576130ef6009600a614109565b601d546130fc91906141b4565b811115801561312157506001600160a01b038316600090815260096020526040902054155b801561312e575042601f54115b61318c5760405162461bcd60e51b815260206004820152602960248201527f57616c6c65742070726f7465637465642c20706c6561736520636f6e746163746044820152681039bab83837b93a1760b91b6064820152608401610afa565b6001600160a01b03831660009081526009602052604090204390555b6001600160a01b0382166000908152601a602052604090205460ff16156131e75750506001600160a01b03166000908152600960205260409020439055565b6001600160a01b0383166000908152600b602052604090205460ff166132eb57601c5460ff16801561321a575042601f54115b80156132345750326000908152600a602052604090205443145b801561325657506001600160a01b0382166000908152601b6020526040902054155b156132b7576001600160a01b0382166000908152601b602052604090819020439081905590517f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea916132ae9132918691600190613d71565b60405180910390a15b6001600160a01b0382166000818152600a6020526040902043905532146132eb57326000908152600a602052604090204390555b505050565b6006546001600160a01b038316600090815260076020526040902054819061331990849061408c565b11156132eb5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610afa565b6001600160a01b0382166000908152601a602052604081205460145460ff9091169082906133a28361253c565b6133ac90866141b4565b6133b691906140a4565b306000908152600760205260408120805492935083929091906133da90849061408c565b909155506133ea905081856141d3565b95945050505050565b336000908152601a602052604081205460ff16158015613416575060295460ff16155b80156134295750602654610100900460ff165b801561344d57506001600160a01b0382166000908152601a602052604090205460ff165b8015610cd9575060285430600090815260076020526040902054101592915050565b6029805460ff19166001179055602754600090821061349057602754613492565b815b306000908152600760205260409020549091508111156134be5750306000908152600760205260409020545b60006012546002601054846134d391906141b4565b6134dd91906140a4565b6134e791906140a4565b90506134f381836141d3565b6040805160028082526060820183529294506000929091602083019080368337019050509050308160008151811061352d5761352d61425e565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561358157600080fd5b505afa158015613595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b991906138cd565b816001815181106135cc576135cc61425e565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b81524792919091169063791ac94790613616908790600090879030904290600401614050565b600060405180830381600087803b15801561363057600080fd5b505af1158015613644573d6000803e3d6000fd5b505050506000814761365691906141d3565b90506000600260105461366991906140a4565b60125461367691906141d3565b905060008160026010548561368b91906141b4565b61369591906140a4565b61369f91906140a4565b9050600082600f54856136b291906141b4565b6136bc91906140a4565b9050600083600e54866136cf91906141b4565b6136d991906140a4565b9050811561371d576016546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561371b573d6000803e3d6000fd5b505b801561375f576017546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561375d573d6000803e3d6000fd5b505b871561380d5760185460155460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b1580156137d057600080fd5b505af11580156137e4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138099190613beb565b5050505b60408051848152602081018490529081018290527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506029805460ff191690555050505050505050565b60008083601f84011261387657600080fd5b50813567ffffffffffffffff81111561388e57600080fd5b6020830191508360208260051b85010111156138a957600080fd5b9250929050565b6000602082840312156138c257600080fd5b8135610fb08161428a565b6000602082840312156138df57600080fd5b8151610fb08161428a565b600080604083850312156138fd57600080fd5b82356139088161428a565b915060208301356139188161428a565b809150509250929050565b60008060006060848603121561393857600080fd5b83356139438161428a565b925060208401356139538161428a565b915060408401356139638161428a565b809150509250925092565b60008060006060848603121561398357600080fd5b833561398e8161428a565b9250602084013561399e8161428a565b929592945050506040919091013590565b600080604083850312156139c257600080fd5b82356139cd8161428a565b91506020830135613918816142a2565b600080604083850312156139f057600080fd5b82356139fb8161428a565b946020939093013593505050565b60008060008060408587031215613a1f57600080fd5b843567ffffffffffffffff80821115613a3757600080fd5b613a4388838901613864565b90965094506020870135915080821115613a5c57600080fd5b50613a6987828801613864565b95989497509550505050565b600080600060408486031215613a8a57600080fd5b833567ffffffffffffffff811115613aa157600080fd5b613aad86828701613864565b9094509250506020840135613963816142a2565b600060208284031215613ad357600080fd5b8135610fb0816142a2565b600060208284031215613af057600080fd5b8151610fb0816142a2565b60008060008060808587031215613b1157600080fd5b8435613b1c816142a2565b93506020850135613b2c816142a2565b93969395505050506040820135916060013590565b60008060408385031215613b5457600080fd5b82356139fb816142a2565b600060208284031215613b7157600080fd5b5035919050565b60008060408385031215613b8b57600080fd5b8235915060208301356139188161428a565b60008060408385031215613bb057600080fd5b50508035926020909101359150565b600080600060608486031215613bd457600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0057600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215613c3257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015613c955781516001600160a01b031687529582019590820190600101613c70565b509495945050505050565b600082606081018360005b6003811015613cee578383038752815160408151818652613cce82870182613cf9565b602093840151968401969096525050968701969190910190600101613cab565b509095945050505050565b60008151808452613d118160208601602086016141ea565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60008351613d548184602088016141ea565b835190830190613d688183602088016141ea565b01949350505050565b6001600160a01b039485168152929093166020830152604082015260ff909116606082015260800190565b848152608060208201526000613db56080830186613c5c565b6001600160a01b03949094166040830152506060015292915050565b602081526000610fb06020830184613cf9565b604081526000613df76040830185613cf9565b82810360208401526133ea8185613ca0565b6040815260136040820152724d6178696d756d2057616c6c65742053697a6560681b6060820152608060208201526000610fb06080830184613ca0565b60408152601760408201527f45786368616e676520526f7574657220557064617465640000000000000000006060820152608060208201526000610fb06080830184613ca0565b6040815260046040820152634665657360e01b6060820152608060208201526000610fb06080830184613ca0565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b60408152600d60408201526c4665652052656365697665727360981b6060820152608060208201526000610fb06080830184613ca0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60408152600d60408201526c537761702053657474696e677360981b6060820152608060208201526000610fb06080830184613ca0565b60408152601860408201527f4d6178696d756d205472616e73616374696f6e2053697a6500000000000000006060820152608060208201526000610fb06080830184613ca0565b60408152600d60408201526c050726573616c6520536574757609c1b6060820152608060208201526000610fb06080830184613ca0565b604081526013604082015272141d5c98da185cd94814985d1948131a5b5a5d606a1b6060820152608060208201526000610fb06080830184613ca0565b85815284602082015260a06040820152600061406f60a0830186613c5c565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561409f5761409f614248565b500190565b6000826140c157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156141015781600019048211156140e7576140e7614248565b808516156140f457918102915b93841c93908002906140cb565b509250929050565b6000610fb060ff84168360008261412257506001610cd9565b8161412f57506000610cd9565b8160018114614145576002811461414f5761416b565b6001915050610cd9565b60ff84111561416057614160614248565b50506001821b610cd9565b5060208310610133831016604e8410600b841016171561418e575081810a610cd9565b61419883836140c6565b80600019048211156141ac576141ac614248565b029392505050565b60008160001904831182151516156141ce576141ce614248565b500290565b6000828210156141e5576141e5614248565b500390565b60005b838110156142055781810151838201526020016141ed565b83811115610c6c5750506000910152565b60008161422557614225614248565b506000190190565b600060001982141561424157614241614248565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461429f57600080fd5b50565b801515811461429f57600080fdfe6e502a17c2522c4dc061bacfc992cb08b19348f65d5ffc44766e54a42cf15b96a264697066735822122094e34fe520d30119515c01ff08e13b55eb3007cf435fbdf18a8f27e4cf45d21264736f6c63430008070033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80636ddd1713116101d1578063bfa21d6a11610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610a4a578063f8821a6214610a6a578063f887ea4014610a80578063fabb0b4f14610aa057600080fd5b8063dd62ed3e146109a4578063e96fada2146109ea578063f1f3bca314610a0a578063f2fde38b14610a2a57600080fd5b8063ca4b208b116100dc578063ca4b208b14610924578063d1b8df2214610944578063d686014214610964578063d7c010321461098457600080fd5b8063bfa21d6a146108b7578063c1adf7bc146108d7578063c287184e1461090457600080fd5b806395d89b411161016f578063a9059cbb11610149578063a9059cbb1461084c578063abe57e701461086c578063bafe446b1461088c578063bf56b371146108a157600080fd5b806395d89b41146107e95780639b02c40214610816578063a8aa1b311461082c57600080fd5b8063715018a6116101ab578063715018a61461076457806386f6c3c114610779578063893d20e8146107995780638da5cb5b146107cb57600080fd5b80636ddd1713146106e25780636f4ce4281461070157806370a082311461072e57600080fd5b8063421dd7c7116102ab5780635804f1e41161024957806361e08e721161022357806361e08e721461067757806363a803e11461068d578063658d4b7f146106a257806367243482146106c257600080fd5b80635804f1e41461062c578063584f969a1461064257806360bba03d1461065757600080fd5b8063507139351161028557806350713935146105ac57806354a1dfc9146105cc57806356a227f2146105ec578063571ac8b01461060c57600080fd5b8063421dd7c71461054a57806346d7edaa1461055f578063492a937b1461058c57600080fd5b8063234e949411610318578063313ce567116102f2578063313ce567146104ce57806331a0a3b3146104ea57806333f3d6281461050a57806334848b9a1461052a57600080fd5b8063234e94941461048457806323b872dd146104995780632b112e49146104b957600080fd5b8063095ea7b311610354578063095ea7b31461040a5780631031e36e1461043a57806313b4a7f41461044f57806318160ddd1461046f57600080fd5b80630445b6671461038657806306fdde03146103af578063095db78f146103e857600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60275481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506040805180820190915260078152665269704761626560c81b60208201525b6040516103a69190613dd1565b3480156103f457600080fd5b50610408610403366004613a75565b610ab6565b005b34801561041657600080fd5b5061042a6104253660046139dd565b610c72565b60405190151581526020016103a6565b34801561044657600080fd5b50610408610cdf565b34801561045b57600080fd5b5061040861046a3660046138ea565b610d44565b34801561047b57600080fd5b5060035461039c565b34801561049057600080fd5b5061039c610f02565b3480156104a557600080fd5b5061042a6104b436600461396e565b610f22565b3480156104c557600080fd5b5061039c610fb7565b3480156104da57600080fd5b50604051600981526020016103a6565b3480156104f657600080fd5b506104086105053660046138b0565b610ff8565b34801561051657600080fd5b5061042a6105253660046139dd565b611310565b34801561053657600080fd5b50610408610545366004613bbf565b6113d4565b34801561055657600080fd5b50610408611475565b34801561056b57600080fd5b5061039c61057a3660046138b0565b601b6020526000908152604090205481565b34801561059857600080fd5b506104086105a73660046139af565b6114ca565b3480156105b857600080fd5b506104086105c7366004613bbf565b611673565b3480156105d857600080fd5b506104086105e7366004613afb565b6117fd565b3480156105f857600080fd5b50610408610607366004613b78565b611986565b34801561061857600080fd5b5061042a6106273660046138b0565b611a16565b34801561063857600080fd5b5061039c60225481565b34801561064e57600080fd5b50610408611a24565b34801561066357600080fd5b506104086106723660046139af565b611a79565b34801561068357600080fd5b5061039c60255481565b34801561069957600080fd5b5061039c611ace565b3480156106ae57600080fd5b506104086106bd3660046139af565b611ae9565b3480156106ce57600080fd5b506104086106dd366004613a09565b611bb8565b3480156106ee57600080fd5b5060265461042a90610100900460ff1681565b34801561070d57600080fd5b5061039c61071c3660046138b0565b60096020526000908152604090205481565b34801561073a57600080fd5b5061039c6107493660046138b0565b6001600160a01b031660009081526007602052604090205490565b34801561077057600080fd5b50610408611d1f565b34801561078557600080fd5b50610408610794366004613c19565b611d93565b3480156107a557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a6565b3480156107d757600080fd5b506000546001600160a01b03166107b3565b3480156107f557600080fd5b50604080518082019091526004815263424f524b60e01b60208201526103db565b34801561082257600080fd5b5061039c601e5481565b34801561083857600080fd5b506020546107b3906001600160a01b031681565b34801561085857600080fd5b5061042a6108673660046139dd565b611f4f565b34801561087857600080fd5b50610408610887366004613b9d565b611f5c565b34801561089857600080fd5b5061039c612072565b3480156108ad57600080fd5b5061039c60215481565b3480156108c357600080fd5b506015546107b3906001600160a01b031681565b3480156108e357600080fd5b5061039c6108f23660046138b0565b600a6020526000908152604090205481565b34801561091057600080fd5b5061040861091f366004613b5f565b61208d565b34801561093057600080fd5b506017546107b3906001600160a01b031681565b34801561095057600080fd5b5061040861095f3660046139dd565b612150565b34801561097057600080fd5b5061040861097f366004613b41565b612313565b34801561099057600080fd5b5061040861099f366004613923565b6123a4565b3480156109b057600080fd5b5061039c6109bf3660046138ea565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109f657600080fd5b506016546107b3906001600160a01b031681565b348015610a1657600080fd5b5061039c610a25366004613ac1565b61253c565b348015610a3657600080fd5b50610408610a453660046138b0565b612581565b348015610a5657600080fd5b50610408610a653660046139af565b61266b565b348015610a7657600080fd5b5061039c60285481565b348015610a8c57600080fd5b506018546107b3906001600160a01b031681565b348015610aac57600080fd5b5061039c60235481565b336000908152602a602052604090205460ff1680610ade57506000546001600160a01b031633145b610b035760405162461bcd60e51b8152600401610afa90613ebb565b60405180910390fd5b8015610b1857601c5460ff16610b1857600080fd5b60005b82811015610c6c578115610ba757601e8054906000610b398361422d565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610b7257610b7261425e565b9050602002016020810190610b8791906138b0565b436002604051610b9a9493929190613d71565b60405180910390a1610c07565b601b6000858584818110610bbd57610bbd61425e565b9050602002016020810190610bd291906138b0565b6001600160a01b0316815260208101919091526040016000205415610c0757601e8054906000610c0183614216565b91905055505b81610c13576000610c15565b435b601b6000868685818110610c2b57610c2b61425e565b9050602002016020810190610c4091906138b0565b6001600160a01b0316815260208101919091526040016000205580610c648161422d565b915050610b1b565b50505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ccd9086815260200190565b60405180910390a35060015b92915050565b336000908152602a602052604090205460ff1680610d0757506000546001600160a01b031633145b610d235760405162461bcd60e51b8152600401610afa90613ebb565b602454610100900460ff1615610d3857600080fd5b6024805460ff19169055565b6000546001600160a01b03163314610d6e5760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b038281166000818152600d602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055858552600c845282852080548816831790558085528285208054881683179055948452600b83528184208054871682179055938352918290208054909416909217909255815160e081018352601060a082019081526f0283932b9b0b632902937baba32b91d160851b60c083015292516000805160206142b1833981519152939192839260608401928392610e639291610e5e91610e4a918c9101613d25565b60405160208183030381529060405261275b565b612974565b8152602001600181525081526020016040518060400160405280610ebe604051806040016040528060118152602001700283932b9b0b6329020b2323932b9b99d1607d1b815250610e5e88604051602001610e4a9190613d25565b81526001602091820152908252604080516060810182526000818301818152825281840152929091019190915251610ef69190613fdc565b60405180910390a15050565b6000610f106009600a614109565b600554610f1d91906140a4565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610fa2576001600160a01b0384166000908152600860209081526040808320338452909152902054610f7d9083906141d3565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610fad8484846129a0565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610feb9161408c565b600354610f1d91906141d3565b6000546001600160a01b031633146110225760405162461bcd60e51b8152600401610afa90613f29565b601880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae91906138cd565b6001600160a01b031663c9c65396601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561110a57600080fd5b505afa15801561111e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114291906138cd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561118957600080fd5b505af115801561119d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c191906138cd565b602080546001600160a01b0319166001600160a01b0392831690811782556000908152601a82526040808220805460ff1990811660019081179092559486168352600c80855292829020805490951617909355825160e08101845260a081019182526b02732bb902937baba32b91d160a51b60c082015292516000805160206142b183398151915293928392606084019283926112699291610e5e91610e4a918b9101613d25565b815260016020918201529082526040805160808101825260148183019081527302732bb902634b8bab4b234ba3c902830b4b91d160651b60608301528354925194840194919384936112cd93610e5e92610e4a926001600160a01b03169101613d25565b815260016020918201529082526040805160608101825260008183018181528252818401529290910191909152516113059190613e46565b60405180910390a150565b336000908152602a602052604081205460ff168061133857506000546001600160a01b031633145b6113545760405162461bcd60e51b8152600401610afa90613ebb565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b15801561139c57600080fd5b505af11580156113b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb09190613ade565b336000908152602a602052604090205460ff16806113fc57506000546001600160a01b031633145b6114185760405162461bcd60e51b8152600401610afa90613ebb565b60245460ff1615801561142b5750600a83105b61143457600080fd5b60238390556024805460ff1916600117905543602155611454824261408c565b601f556114636009600a614109565b61146d90826141b4565b601d55505050565b336000908152602a602052604090205460ff168061149d57506000546001600160a01b031633145b6114b95760405162461bcd60e51b8152600401610afa90613ebb565b601c805461ffff1916610100179055565b6000546001600160a01b031633146114f45760405162461bcd60e51b8152600401610afa90613f29565b6020546001600160a01b038381169116141561155d5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610afa565b6001600160a01b0382166000908152601a60205260409020805460ff19168215151790556000805160206142b1833981519152816115d0576040518060400160405280601781526020017f4c697175696469747920506f6f6c2044697361626c6564000000000000000000815250611600565b60405180604001604052806016815260200175131a5c5d5a591a5d1e48141bdbdb08115b98589b195960521b8152505b6040805160a08101909152806060810180611621610e4a8960c08601613d25565b8152600160209182015290825260408051606080820183526000828401818152835282850181905285850192909252825190810183528083018281528152928301529182015251610ef6929190613de4565b6000546001600160a01b0316331461169d5760405162461bcd60e51b8152600401610afa90613f29565b6000831180156116ad5750600082115b80156116b95750600081115b80156116c757506127108111155b6116d057600080fd5b80836003546116df91906141b4565b6116e991906140a4565b60045560035481906116fc9084906141b4565b61170691906140a4565b6005556040805160e08101909152600e60a082019081526d4d61782042757920546f6b656e7360901b60c0830152606082019081526000805160206142b1833981519152919081906080820161175e6009600a614109565b60045461176b91906140a4565b9052815260408051608081018252600f9181019182526e4d61782053656c6c20546f6b656e7360881b606082015290815260209182019181016117b06009600a614109565b6005546117bd91906140a4565b90528152604080516060810182526000818301818152825260208281019190915290920191909152516117f09190613f95565b60405180910390a1505050565b6000546001600160a01b031633146118275760405162461bcd60e51b8152600401610afa90613f29565b6000821161183457600080fd5b6026805462ffff0019166101008615150262ff000019161762010000851515021790556003546118659083906140a4565b6027556118746009600a614109565b61187e90826141b4565b6028556040805160e08101909152600760a0820190815266115b98589b195960ca1b60c0830152606082019081526000805160206142b18339815191529190819060808201886118cf5760006118d2565b60015b60ff16815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d6178696d756d60a01b8152508152602001602754815250815260200160405180604001604052806040518060400160405280600f81526020016e4175746f2d70726f63657373696e6760881b815250815260200187611961576000611964565b60015b60ff16905290526040516119789190613f5e565b60405180910390a150505050565b336000908152602a602052604090205460ff16806119ae57506000546001600160a01b031633145b6119ca5760405162461bcd60e51b8152600401610afa90613ebb565b476001600160a01b0382166108fc60646119e486856141b4565b6119ee91906140a4565b6040518115909202916000818181858888f19350505050158015610c6c573d6000803e3d6000fd5b6000610cd982600019610c72565b336000908152602a602052604090205460ff1680611a4c57506000546001600160a01b031633145b611a685760405162461bcd60e51b8152600401610afa90613ebb565b6024805461ffff1916610101179055565b6000546001600160a01b03163314611aa35760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b03919091166000908152602a60205260409020805460ff1916911515919091179055565b6000611adc6009600a614109565b600654610f1d91906140a4565b6000546001600160a01b03163314611b135760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b0382166000908152600b60205260409020805460ff19168215151790556000805160206142b183398151915281611b76576040518060400160405280600d81526020016c1199595cc8115b999bdc98d959609a1b815250611600565b604080518082018252600c81526b1199595cc814995b5bdd995960a21b6020820152815160a0810190925290806060810180611621610e4a8960c08601613d25565b6000546001600160a01b03163314611be25760405162461bcd60e51b8152600401610afa90613f29565b8215801590611bf057508083145b611bf957600080fd5b3360005b84811015611d1757601a6000878784818110611c1b57611c1b61425e565b9050602002016020810190611c3091906138b0565b6001600160a01b0316815260208101919091526040016000205460ff16158015611c9f5750600d6000878784818110611c6b57611c6b61425e565b9050602002016020810190611c8091906138b0565b6001600160a01b0316815260208101919091526040016000205460ff16155b15611d0557611d0382878784818110611cba57611cba61425e565b9050602002016020810190611ccf91906138b0565b611cdb6009600a614109565b878786818110611ced57611ced61425e565b90506020020135611cfe91906141b4565b612ee1565b505b80611d0f8161422d565b915050611bfd565b505050505050565b6000546001600160a01b03163314611d495760405162461bcd60e51b8152600401610afa90613f29565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611dbd5760405162461bcd60e51b8152600401610afa90613f29565b60118690556010859055600f849055600e8390558285611ddd868961408c565b611de7919061408c565b611df1919061408c565b60125560138290556014819055611e096002826140a4565b60125410611e1657600080fd5b6000805160206142b18339815191526040518060600160405280604051806040016040528060405180604001604052806011815260200170151bdd185b081199594814195c98d95b9d607a1b81525081526020016014546012546064611e7c91906141b4565b611e8691906140a4565b905281526040805160808101825260119181019182527013585c9ad95d1a5b99c814195c98d95b9d607a1b6060820152908152601454602092830192820190611ed08a60646141b4565b611eda91906140a4565b9052815260408051608081018252601191810191825270131a5c5d5a591a5d1e4814195c98d95b9d607a1b6060820152908152601454602092830192820190611f248b60646141b4565b611f2e91906140a4565b90529052604051611f3f9190613e8d565b60405180910390a1505050505050565b6000610fb03384846129a0565b6000546001600160a01b03163314611f865760405162461bcd60e51b8152600401610afa90613f29565b600082118015611f965750600081115b8015611fa457506127108111155b611fad57600080fd5b8082600354611fbc91906141b4565b611fc691906140a4565b60069081556040805160e0810190915260a0810191825265546f6b656e7360d01b60c0820152606081019182526000805160206142b1833981519152918190608082016120156009600a614109565b60065461202291906140a4565b90528152604080516060808201835260008284018181528352602083810182905280860193909352835191820184528184018181528252918101919091529181019190915251610ef69190613e09565b60006120806009600a614109565b600454610f1d91906140a4565b6000546001600160a01b031633146120b75760405162461bcd60e51b8152600401610afa90613f29565b601e8111156120c557600080fd5b60258190556040805160e081018252600660a0820190815265426c6f636b7360d01b60c08301526060808301918252608083018590529082528251808201845260008185018181528252602082810182905280850192909252845192830185528285018181528352908201528183015290516000805160206142b18339815191529161130591614013565b336000908152602a602052604090205460ff168061217857506000546001600160a01b031633145b6121945760405162461bcd60e51b8152600401610afa90613ebb565b600060646121a283476141b4565b6121ac91906140a4565b60408051600280825260608201835292935060009290916020830190803683375050601854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561221657600080fd5b505afa15801561222a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224e91906138cd565b816000815181106122615761226161425e565b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106122955761229561425e565b6001600160a01b03928316602091820292909201015260185460405163b6f9de9560e01b815291169063b6f9de959084906122db90600090869033904290600401613d9c565b6000604051808303818588803b1580156122f457600080fd5b505af1158015612308573d6000803e3d6000fd5b505050505050505050565b336000908152602a602052604090205460ff168061233b57506000546001600160a01b031633145b6123575760405162461bcd60e51b8152600401610afa90613ebb565b601c54610100900460ff161561236c57600080fd5b601c805460ff191683151517905562015180811061238957600080fd5b80601f600082825461239b919061408c565b90915550505050565b6000546001600160a01b031633146123ce5760405162461bcd60e51b8152600401610afa90613f29565b601580546001600160a01b038086166001600160a01b0319928316179092556016805485841690831617905560178054928416929091169190911790556040805160e081018252601460a082019081527302634b8bab4b234ba3c902932b1b2b4bb32b91d160651b60c083015291516000805160206142b18339815191529282916060830191829161246d9190610e5e90610e4a908c90602001613d25565b81526020016001815250815260200160405180604001604052806124cb60405180604001604052806014815260200173026b0b935b2ba34b733902932b1b2b4bb32b91d160651b815250610e5e89604051602001610e4a9190613d25565b81526020016001815250815260200160405180604001604052806125236040518060400160405280600e81526020016d02232bb102932b1b2b4bb32b91d160951b815250610e5e88604051602001610e4a9190613d25565b8152600160209091015290526040516117f09190613ef2565b60004360235460215461254f919061408c565b10612563576001601454610cd991906141d3565b811561257957601354601254610cd9919061408c565b505060125490565b6000546001600160a01b031633146125ab5760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b0381166126105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afa565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146126955760405162461bcd60e51b8152600401610afa90613f29565b6001600160a01b0382166000908152600c60205260409020805460ff19168215151790556000805160206142b183398151915281612708576040518060400160405280601a81526020017f5472616e73616374696f6e204c696d697420456e666f72636564000000000000815250611600565b604080518082018252601981527f5472616e73616374696f6e204c696d69742052656d6f766564000000000000006020820152815160a0810190925290806060810180611621610e4a8960c08601613d25565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151606091906000906127969060026141b4565b6127a190600261408c565b67ffffffffffffffff8111156127b9576127b9614274565b6040519080825280601f01601f1916602001820160405280156127e3576020820181803683370190505b509050600360fc1b816000815181106127fe576127fe61425e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061282d5761282d61425e565b60200101906001600160f81b031916908160001a90535060005b845181101561296c578260048683815181106128655761286561425e565b016020015182516001600160f81b031990911690911c60f81c90811061288d5761288d61425e565b01602001516001600160f81b031916826128a88360026141b4565b6128b390600261408c565b815181106128c3576128c361425e565b60200101906001600160f81b031916908160001a905350828582815181106128ed576128ed61425e565b602091010151815160f89190911c600f1690811061290d5761290d61425e565b01602001516001600160f81b031916826129288360026141b4565b61293390600361408c565b815181106129435761294361425e565b60200101906001600160f81b031916908160001a905350806129648161422d565b915050612847565b509392505050565b60608282604051602001612989929190613d42565b604051602081830303815290604052905092915050565b60006001600160a01b0384166129f85760405162461bcd60e51b815260206004820152601860248201527f42455032303a207472616e736665722066726f6d2030783000000000000000006044820152606401610afa565b6001600160a01b038316612a475760405162461bcd60e51b8152602060048201526016602482015275042455032303a207472616e7366657220746f203078360541b6044820152606401610afa565b60008211612a8f5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610afa565b6001600160a01b038416600090815260076020526040902054821115612aee5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610afa565b602154158015612b1657506001600160a01b0383166000908152601a602052604090205460ff165b15612b9f576001600160a01b0384166000908152600d602052604090205460ff16612b835760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610afa565b612b9f43602155426022556026805461ff001916610100179055565b60245460ff16612c2c576001600160a01b0384166000908152600d602052604090205460ff1680612be857506001600160a01b0383166000908152600d602052604090205460ff165b612c2c5760405162461bcd60e51b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b6044820152606401610afa565b60265460ff16158015612c41575042601f5411155b15612c69576026805460ff191660011790556000602555600354600681905560048190556005555b612c74848484612f9b565b6001600160a01b0383166000908152601a602052604090205460ff16158015612cab57506001546001600160a01b03848116911614155b15612cda576001600160a01b0383166000908152600c602052604090205460ff16612cda57612cda83836132f0565b601c5460ff168015612ced575042601f54115b15612db7576001600160a01b0384166000908152601a602052604090205460ff168015612d235750326001600160a01b03841614155b8015612d4557506001600160a01b0383166000908152601b6020526040902054155b15612db7576001600160a01b0383166000908152601b60205260408120439055601e805491612d738361422d565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051612dae9493929190613d71565b60405180910390a15b60295460ff1615612dd457612dcd848484612ee1565b9050610fb0565b6001600160a01b038416600090815260076020526040902054612df89083906141d3565b6001600160a01b038516600090815260076020908152604080832093909355600b90529081205460ff1615612e2d5782612e37565b612e378484613375565b9050612e42846133f3565b15612e56578215612e5657612e568361346f565b6001600160a01b038416600090815260076020526040902054612e7a90829061408c565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ece9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054612f059083906141d3565b6001600160a01b038086166000908152600760205260408082209390935590851681522054612f3590839061408c565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f899086815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600c602052604090205460ff1680612fed57506001600160a01b0383166000908152601a602052604090205460ff16612fe557600554612fe9565b6004545b8111155b61302d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610afa565b6001600160a01b0383166000908152600c602052604090205460ff168061307957506025546001600160a01b0383166000908152600a602052604090205443916130769161408c565b11155b6130c55760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722072617465206c696d69742065786365656465642e0000006044820152606401610afa565b6001600160a01b0383166000908152601b6020526040902054156131a8576130ef6009600a614109565b601d546130fc91906141b4565b811115801561312157506001600160a01b038316600090815260096020526040902054155b801561312e575042601f54115b61318c5760405162461bcd60e51b815260206004820152602960248201527f57616c6c65742070726f7465637465642c20706c6561736520636f6e746163746044820152681039bab83837b93a1760b91b6064820152608401610afa565b6001600160a01b03831660009081526009602052604090204390555b6001600160a01b0382166000908152601a602052604090205460ff16156131e75750506001600160a01b03166000908152600960205260409020439055565b6001600160a01b0383166000908152600b602052604090205460ff166132eb57601c5460ff16801561321a575042601f54115b80156132345750326000908152600a602052604090205443145b801561325657506001600160a01b0382166000908152601b6020526040902054155b156132b7576001600160a01b0382166000908152601b602052604090819020439081905590517f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea916132ae9132918691600190613d71565b60405180910390a15b6001600160a01b0382166000818152600a6020526040902043905532146132eb57326000908152600a602052604090204390555b505050565b6006546001600160a01b038316600090815260076020526040902054819061331990849061408c565b11156132eb5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610afa565b6001600160a01b0382166000908152601a602052604081205460145460ff9091169082906133a28361253c565b6133ac90866141b4565b6133b691906140a4565b306000908152600760205260408120805492935083929091906133da90849061408c565b909155506133ea905081856141d3565b95945050505050565b336000908152601a602052604081205460ff16158015613416575060295460ff16155b80156134295750602654610100900460ff165b801561344d57506001600160a01b0382166000908152601a602052604090205460ff165b8015610cd9575060285430600090815260076020526040902054101592915050565b6029805460ff19166001179055602754600090821061349057602754613492565b815b306000908152600760205260409020549091508111156134be5750306000908152600760205260409020545b60006012546002601054846134d391906141b4565b6134dd91906140a4565b6134e791906140a4565b90506134f381836141d3565b6040805160028082526060820183529294506000929091602083019080368337019050509050308160008151811061352d5761352d61425e565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561358157600080fd5b505afa158015613595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b991906138cd565b816001815181106135cc576135cc61425e565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b81524792919091169063791ac94790613616908790600090879030904290600401614050565b600060405180830381600087803b15801561363057600080fd5b505af1158015613644573d6000803e3d6000fd5b505050506000814761365691906141d3565b90506000600260105461366991906140a4565b60125461367691906141d3565b905060008160026010548561368b91906141b4565b61369591906140a4565b61369f91906140a4565b9050600082600f54856136b291906141b4565b6136bc91906140a4565b9050600083600e54866136cf91906141b4565b6136d991906140a4565b9050811561371d576016546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561371b573d6000803e3d6000fd5b505b801561375f576017546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561375d573d6000803e3d6000fd5b505b871561380d5760185460155460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b1580156137d057600080fd5b505af11580156137e4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138099190613beb565b5050505b60408051848152602081018490529081018290527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506029805460ff191690555050505050505050565b60008083601f84011261387657600080fd5b50813567ffffffffffffffff81111561388e57600080fd5b6020830191508360208260051b85010111156138a957600080fd5b9250929050565b6000602082840312156138c257600080fd5b8135610fb08161428a565b6000602082840312156138df57600080fd5b8151610fb08161428a565b600080604083850312156138fd57600080fd5b82356139088161428a565b915060208301356139188161428a565b809150509250929050565b60008060006060848603121561393857600080fd5b83356139438161428a565b925060208401356139538161428a565b915060408401356139638161428a565b809150509250925092565b60008060006060848603121561398357600080fd5b833561398e8161428a565b9250602084013561399e8161428a565b929592945050506040919091013590565b600080604083850312156139c257600080fd5b82356139cd8161428a565b91506020830135613918816142a2565b600080604083850312156139f057600080fd5b82356139fb8161428a565b946020939093013593505050565b60008060008060408587031215613a1f57600080fd5b843567ffffffffffffffff80821115613a3757600080fd5b613a4388838901613864565b90965094506020870135915080821115613a5c57600080fd5b50613a6987828801613864565b95989497509550505050565b600080600060408486031215613a8a57600080fd5b833567ffffffffffffffff811115613aa157600080fd5b613aad86828701613864565b9094509250506020840135613963816142a2565b600060208284031215613ad357600080fd5b8135610fb0816142a2565b600060208284031215613af057600080fd5b8151610fb0816142a2565b60008060008060808587031215613b1157600080fd5b8435613b1c816142a2565b93506020850135613b2c816142a2565b93969395505050506040820135916060013590565b60008060408385031215613b5457600080fd5b82356139fb816142a2565b600060208284031215613b7157600080fd5b5035919050565b60008060408385031215613b8b57600080fd5b8235915060208301356139188161428a565b60008060408385031215613bb057600080fd5b50508035926020909101359150565b600080600060608486031215613bd457600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0057600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215613c3257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015613c955781516001600160a01b031687529582019590820190600101613c70565b509495945050505050565b600082606081018360005b6003811015613cee578383038752815160408151818652613cce82870182613cf9565b602093840151968401969096525050968701969190910190600101613cab565b509095945050505050565b60008151808452613d118160208601602086016141ea565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60008351613d548184602088016141ea565b835190830190613d688183602088016141ea565b01949350505050565b6001600160a01b039485168152929093166020830152604082015260ff909116606082015260800190565b848152608060208201526000613db56080830186613c5c565b6001600160a01b03949094166040830152506060015292915050565b602081526000610fb06020830184613cf9565b604081526000613df76040830185613cf9565b82810360208401526133ea8185613ca0565b6040815260136040820152724d6178696d756d2057616c6c65742053697a6560681b6060820152608060208201526000610fb06080830184613ca0565b60408152601760408201527f45786368616e676520526f7574657220557064617465640000000000000000006060820152608060208201526000610fb06080830184613ca0565b6040815260046040820152634665657360e01b6060820152608060208201526000610fb06080830184613ca0565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b60408152600d60408201526c4665652052656365697665727360981b6060820152608060208201526000610fb06080830184613ca0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60408152600d60408201526c537761702053657474696e677360981b6060820152608060208201526000610fb06080830184613ca0565b60408152601860408201527f4d6178696d756d205472616e73616374696f6e2053697a6500000000000000006060820152608060208201526000610fb06080830184613ca0565b60408152600d60408201526c050726573616c6520536574757609c1b6060820152608060208201526000610fb06080830184613ca0565b604081526013604082015272141d5c98da185cd94814985d1948131a5b5a5d606a1b6060820152608060208201526000610fb06080830184613ca0565b85815284602082015260a06040820152600061406f60a0830186613c5c565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561409f5761409f614248565b500190565b6000826140c157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156141015781600019048211156140e7576140e7614248565b808516156140f457918102915b93841c93908002906140cb565b509250929050565b6000610fb060ff84168360008261412257506001610cd9565b8161412f57506000610cd9565b8160018114614145576002811461414f5761416b565b6001915050610cd9565b60ff84111561416057614160614248565b50506001821b610cd9565b5060208310610133831016604e8410600b841016171561418e575081810a610cd9565b61419883836140c6565b80600019048211156141ac576141ac614248565b029392505050565b60008160001904831182151516156141ce576141ce614248565b500290565b6000828210156141e5576141e5614248565b500390565b60005b838110156142055781810151838201526020016141ed565b83811115610c6c5750506000910152565b60008161422557614225614248565b506000190190565b600060001982141561424157614241614248565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461429f57600080fd5b50565b801515811461429f57600080fdfe6e502a17c2522c4dc061bacfc992cb08b19348f65d5ffc44766e54a42cf15b96a264697066735822122094e34fe520d30119515c01ff08e13b55eb3007cf435fbdf18a8f27e4cf45d21264736f6c63430008070033

Deployed Bytecode Sourcemap

13562:21491:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15877:50;;;;;;;;;;;;;;;;;;;24031:25:1;;;24019:2;24004:18;15877:50:0;;;;;;;;17381:71;;;;;;;;;;-1:-1:-1;17444:5:0;;;;;;;;;;;;-1:-1:-1;;;17444:5:0;;;;17381:71;;;;;;;:::i;21023:617::-;;;;;;;;;;-1:-1:-1;21023:617:0;;;;;:::i;:::-;;:::i;:::-;;18122:216;;;;;;;;;;-1:-1:-1;18122:216:0;;;;;:::i;:::-;;:::i;:::-;;;12946:14:1;;12939:22;12921:41;;12909:2;12894:18;18122:216:0;12781:187:1;20387:115:0;;;;;;;;;;;;;:::i;29801:621::-;;;;;;;;;;-1:-1:-1;29801:621:0;;;;;:::i;:::-;;:::i;17129:88::-;;;;;;;;;;-1:-1:-1;17202:12:0;;17129:88;;17646:107;;;;;;;;;;;;;:::i;21812:341::-;;;;;;;;;;-1:-1:-1;21812:341:0;;;;;:::i;:::-;;:::i;34074:138::-;;;;;;;;;;;;;:::i;17223:71::-;;;;;;;;;;-1:-1:-1;17223:71:0;;13879:1;25120:36:1;;25108:2;25093:18;17223:71:0;24978:184:1;29286:503:0;;;;;;;;;;-1:-1:-1;29286:503:0;;;;;:::i;:::-;;:::i;19576:189::-;;;;;;;;;;-1:-1:-1;19576:189:0;;;;;:::i;:::-;;:::i;20003:372::-;;;;;;;;;;-1:-1:-1;20003:372:0;;;;;:::i;:::-;;:::i;20884:127::-;;;;;;;;;;;;;:::i;15319:45::-;;;;;;;;;;-1:-1:-1;15319:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;28930:344;;;;;;;;;;-1:-1:-1;28930:344:0;;;;;:::i;:::-;;:::i;30659:534::-;;;;;;;;;;-1:-1:-1;30659:534:0;;;;;:::i;:::-;;:::i;33538:528::-;;;;;;;;;;-1:-1:-1;33538:528:0;;;;;:::i;:::-;;:::i;19777:214::-;;;;;;;;;;-1:-1:-1;19777:214:0;;;;;:::i;:::-;;:::i;18346:122::-;;;;;;;;;;-1:-1:-1;18346:122:0;;;;;:::i;:::-;;:::i;15604:27::-;;;;;;;;;;;;;;;;20514:111;;;;;;;;;;;;;:::i;18480:119::-;;;;;;;;;;-1:-1:-1;18480:119:0;;;;;:::i;:::-;;:::i;15735:28::-;;;;;;;;;;;;;;;;17759:105;;;;;;;;;;;;;:::i;31563:263::-;;;;;;;;;;-1:-1:-1;31563:263:0;;;;;:::i;:::-;;:::i;18611:468::-;;;;;;;;;;-1:-1:-1;18611:468:0;;;;;:::i;:::-;;:::i;15807:30::-;;;;;;;;;;-1:-1:-1;15807:30:0;;;;;;;;;;;14245:44;;;;;;;;;;-1:-1:-1;14245:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;17870:105;;;;;;;;;;-1:-1:-1;17870:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17954:18:0;17936:7;17954:18;;;:9;:18;;;;;;;17870:105;13008:148;;;;;;;;;;;;;:::i;32139:762::-;;;;;;;;;;-1:-1:-1;32139:762:0;;;;;:::i;:::-;;:::i;17458:71::-;;;;;;;;;;-1:-1:-1;17501:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;17458:71;;;-1:-1:-1;;;;;9898:32:1;;;9880:51;;9868:2;9853:18;17458:71:0;9734:203:1;12367:79:0;;;;;;;;;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;12367:79;;17300:75;;;;;;;;;;-1:-1:-1;17365:7:0;;;;;;;;;;;;-1:-1:-1;;;17365:7:0;;;;17300:75;;15475:30;;;;;;;;;;;;;;;;15544:19;;;;;;;;;;-1:-1:-1;15544:19:0;;;;-1:-1:-1;;;;;15544:19:0;;;21648:156;;;;;;;;;;-1:-1:-1;21648:156:0;;;;;:::i;:::-;;:::i;31205:350::-;;;;;;;;;;-1:-1:-1;31205:350:0;;;;;:::i;:::-;;:::i;17535:105::-;;;;;;;;;;;;;:::i;15572:25::-;;;;;;;;;;;;;;;;14769:97;;;;;;;;;;-1:-1:-1;14769:97:0;;;;-1:-1:-1;;;;;14769:97:0;;;14296:43;;;;;;;;;;-1:-1:-1;14296:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;30430:221;;;;;;;;;;-1:-1:-1;30430:221:0;;;;;:::i;:::-;;:::i;14977:32::-;;;;;;;;;;-1:-1:-1;14977:32:0;;;;-1:-1:-1;;;;;14977:32:0;;;19091:473;;;;;;;;;;-1:-1:-1;19091:473:0;;;;;:::i;:::-;;:::i;20637:235::-;;;;;;;;;;-1:-1:-1;20637:235:0;;;;;:::i;:::-;;:::i;32909:621::-;;;;;;;;;;-1:-1:-1;32909:621:0;;;;;:::i;:::-;;:::i;17981:133::-;;;;;;;;;;-1:-1:-1;17981:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;18083:19:0;;;18065:7;18083:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17981:133;14873:97;;;;;;;;;;-1:-1:-1;14873:97:0;;;;-1:-1:-1;;;;;14873:97:0;;;26343:232;;;;;;;;;;-1:-1:-1;26343:232:0;;;;;:::i;:::-;;:::i;13311:244::-;;;;;;;;;;-1:-1:-1;13311:244:0;;;;;:::i;:::-;;:::i;31834:297::-;;;;;;;;;;-1:-1:-1;31834:297:0;;;;;:::i;:::-;;:::i;15934:49::-;;;;;;;;;;;;;;;;15018:24;;;;;;;;;;-1:-1:-1;15018:24:0;;;;-1:-1:-1;;;;;15018:24:0;;;15638:25;;;;;;;;;;;;;;;;21023:617;7069:10;16165:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;;;;;;;;;21123:8:::1;21119:67;;;21156:17;::::0;::::1;;21148:26;;;::::0;::::1;;21211:6;21206:427;21223:19:::0;;::::1;21206:427;;;21282:8;21278:277;;;21311:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;21352:56;21368:9;21379:8;;21388:1;21379:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21392:12;21406:1;21352:56;;;;;;;;;:::i;:::-;;;;;;;;21278:277;;;21466:9;:22;21476:8;;21485:1;21476:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21466:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21466:22:0;;:27;21462:71:::1;;21516:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;21462:71;21594:8;:27;;21620:1;21594:27;;;21605:12;21594:27;21569:9;:22;21579:8;;21588:1;21579:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21569:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21569:22:0;:52;21244:3;::::1;::::0;::::1;:::i;:::-;;;;21206:427;;;;21023:617:::0;;;:::o;18122:216::-;18226:10;18197:4;18214:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18214:32:0;;;;;;;;;;:41;;;18271:37;18197:4;;18214:32;;18271:37;;;;18249:6;24031:25:1;;24019:2;24004:18;;23885:177;18271:37:0;;;;;;;;-1:-1:-1;18326:4:0;18122:216;;;;;:::o;20387:115::-;7069:10;16165:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;20449:13:::1;::::0;::::1;::::0;::::1;;;20448:14;20440:23;;;::::0;::::1;;20474:12;:20:::0;;-1:-1:-1;;20474:20:0::1;::::0;;20387:115::o;29801:621::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29911:31:0;;::::1;;::::0;;;:16:::1;:31;::::0;;;;;;;:38;;29945:4:::1;-1:-1:-1::0;;29911:38:0;;::::1;::::0;::::1;::::0;;;29960:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;30010:30;;;:15:::1;:30:::0;;;;;:37;;;::::1;::::0;::::1;::::0;;30058:31;;;;;;:38;;;::::1;::::0;::::1;::::0;;30107:26;;;:11:::1;:26:::0;;;;;:33;;;::::1;::::0;::::1;::::0;;30151:27;;;;;;;:34;;;;::::1;::::0;;::::1;::::0;;;30201:213;;30239:73;;;;;::::1;30235:81:::0;;;30239:73;;;-1:-1:-1;;;30239:73:0;;;;30279:31;;-1:-1:-1;;;;;;;;;;;30201:213:0;;;;;::::1;::::0;::::1;::::0;;;30239:73:::1;::::0;30235:81;30270:41:::1;::::0;30279:31:::1;::::0;29911;;30279::::1;;:::i;:::-;;;;;;;;;;;;;30270:8;:41::i;:::-;30239:11;:73::i;:::-;30235:81;;;;30314:1;30235:81;;::::0;30201:213:::1;;;;30317:83;;;;;;;;30321:75;;;;;;;;;;;;;;-1:-1:-1::0;;;30321:75:0::1;;::::0;30353:42:::1;30379:14;30362:32;;;;;;;;:::i;30321:75::-;30317:83:::0;;30398:1:::1;30317:83;::::0;;::::1;::::0;30201:213;;;30402:10:::1;::::0;;;;;;;-1:-1:-1;30402:10:0;;::::1;::::0;;;;;;;::::1;::::0;30201:213;;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;29801:621:::0;;:::o;17646:107::-;17696:7;17734:15;13879:1;17734:2;:15;:::i;:::-;17714:16;;:36;;;;:::i;:::-;17707:43;;17646:107;:::o;21812:341::-;-1:-1:-1;;;;;21932:19:0;;21912:4;21932:19;;;:11;:19;;;;;;;;21952:10;21932:31;;;;;;;;-1:-1:-1;;21932:52:0;21929:157;;-1:-1:-1;;;;;22034:19:0;;;;;;:11;:19;;;;;;;;22054:10;22034:31;;;;;;;;:40;;22068:6;;22034:40;:::i;:::-;-1:-1:-1;;;;;22000:19:0;;;;;;:11;:19;;;;;;;;22020:10;22000:31;;;;;;;:74;21929:157;22105:40;22119:6;22127:9;22138:6;22105:13;:40::i;:::-;22098:47;;21812:341;;;;;;:::o;34074:138::-;34198:4;;-1:-1:-1;;;;;34198:4:0;;;34127:7;17954:18;;;:9;:18;;;;;;;34180:4;;;;;17954:18;;;;;34127:7;;34170:33;;;:::i;:::-;34154:12;;:50;;;;:::i;29286:503::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;29357:6:::1;:30:::0;;-1:-1:-1;;;;;;29357:30:0::1;-1:-1:-1::0;;;;;29357:30:0;::::1;::::0;;::::1;::::0;;;29417:16:::1;::::0;;-1:-1:-1;;;29417:16:0;;;;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;29357:30;29417:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29405:40:0::1;;29446:6;;;;;;;;;-1:-1:-1::0;;;;;29446:6:0::1;-1:-1:-1::0;;;;;29446:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29405:70;::::0;-1:-1:-1;;;;;;29405:70:0::1;::::0;;;;;;-1:-1:-1;;;;;10396:15:1;;;29405:70:0::1;::::0;::::1;10378:34:1::0;29469:4:0::1;10428:18:1::0;;;10421:43;10313:18;;29405:70:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29398:4;:77:::0;;-1:-1:-1;;;;;;29398:77:0::1;-1:-1:-1::0;;;;;29398:77:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;29486:20:0;;;:14:::1;:20:::0;;;;;;:27;;-1:-1:-1;;29486:27:0;;::::1;-1:-1:-1::0;29486:27:0;;::::1;::::0;;;29524:26;;::::1;::::0;;:15:::1;:26:::0;;;;;;;:33;;;;::::1;;::::0;;;29573:208;;29621:65;;;;;29617:73;;;29621:65;;;-1:-1:-1;;;29621:65:0;;;;29657:27;;-1:-1:-1;;;;;;;;;;;29573:208:0;;;;::::1;::::0;::::1;::::0;;;29621:65:::1;::::0;29617:73;29648:37:::1;::::0;29657:27:::1;::::0;29524:26;;29657:27:::1;;:::i;29621:65::-;29617:73:::0;;29688:1:::1;29617:73;::::0;;::::1;::::0;29573:208;;;29691:76:::1;::::0;;29695:68;;;;;::::1;29691:76:::0;;::::1;29695:68:::0;;;-1:-1:-1;;;29695:68:0;;;;29756:4;;29739:22;;29573:208;;::::1;::::0;29691:76;;;;29695:68:::1;::::0;29730:32:::1;::::0;29739:22:::1;::::0;-1:-1:-1;;;;;29756:4:0::1;::::0;29739:22:::1;;:::i;29695:68::-;29691:76:::0;;29765:1:::1;29691:76;::::0;;::::1;::::0;29573:208;;;29769:10:::1;::::0;;;;;;;-1:-1:-1;29769:10:0;;::::1;::::0;;;;;;;::::1;::::0;29573:208;;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;29286:503:::0;:::o;19576:189::-;7069:10;19671:12;16165:24;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;19708:49:::1;::::0;-1:-1:-1;;;19708:49:0;;19738:10:::1;19708:49;::::0;::::1;12056:51:1::0;12123:18;;;12116:34;;;-1:-1:-1;;;;;19708:29:0;::::1;::::0;::::1;::::0;12029:18:1;;19708:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20003:372::-:0;7069:10;16165:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;20120:12:::1;::::0;::::1;;20119:13;:33:::0;::::1;;;;20150:2;20136:11;:16;20119:33;20111:42;;;::::0;::::1;;20164:10;:24:::0;;;20199:12:::1;:19:::0;;-1:-1:-1;;20199:19:0::1;20214:4;20199:19;::::0;;20242:12:::1;20229:10;:25:::0;20283:29:::1;20301:11:::0;20283:15:::1;:29;:::i;:::-;20265:15;:47:::0;20351:15:::1;13879:1;20351:2;:15;:::i;:::-;20341:26;::::0;:6;:26:::1;:::i;:::-;20323:15;:44:::0;-1:-1:-1;;;20003:372:0:o;20884:127::-;7069:10;16165:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;20942:18:::1;:25:::0;;-1:-1:-1;;20978:25:0;20942::::1;20978::::0;;;20884:127::o;28930:344::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;29025:4:::1;::::0;-1:-1:-1;;;;;29019:10:0;;::::1;29025:4:::0;::::1;29019:10;;29011:57;;;::::0;-1:-1:-1;;;29011:57:0;;23140:2:1;29011:57:0::1;::::0;::::1;23122:21:1::0;23179:2;23159:18;;;23152:30;23218:34;23198:18;;;23191:62;-1:-1:-1;;;23269:18:1;;;23262:32;23311:19;;29011:57:0::1;22938:398:1::0;29011:57:0::1;-1:-1:-1::0;;;;;29079:18:0;::::1;;::::0;;;:14:::1;:18;::::0;;;;:27;;-1:-1:-1;;29079:27:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;29079:27:0;29138:61:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;29138:61:0::1;;::::0;::::1;29122:144;::::0;;29202:38;;;;;;29122:144;::::1;::::0;::::1;::::0;29206:30:::1;29215:20;29232:2:::0;29215:20;;;::::1;:::i;29206:30::-;29202:38:::0;;29238:1:::1;29202:38;::::0;;::::1;::::0;29122:144;;;29242:10:::1;::::0;;;;;;;;-1:-1:-1;29242:10:0;;::::1;::::0;;;;;;;::::1;::::0;;;29122:144;;::::1;::::0;;;;29254:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;29122:144;;;;;::::1;::::0;;;::::1;:::i;30659:534::-:0;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;30794:1:::1;30779:12;:16;:37;;;;;30815:1;30799:13;:17;30779:37;:52;;;;;30830:1;30820:7;:11;30779:52;:72;;;;;30846:5;30835:7;:16;;30779:72;30771:81;;;::::0;::::1;;30913:7;30897:12;30882;;:27;;;;:::i;:::-;30881:39;;;;:::i;:::-;30863:15;:57:::0;30951:12:::1;::::0;30983:7;;30951:28:::1;::::0;30966:13;;30951:28:::1;:::i;:::-;30950:40;;;;:::i;:::-;30931:16;:59:::0;31006:179:::1;::::0;;31051:58;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;31051:58:0;;;;31006:179:::1;::::0;::::1;31051:58:::0;;;-1:-1:-1;;;;;;;;;;;31006:179:0;;;;31051:58;;;31092:15:::1;13879:1;31092:2;:15;:::i;:::-;31073;;:35;;;;:::i;:::-;31051:58:::0;;31006:179;;31111:60:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;31111:60:0;;;;;;;31006:179:::1;::::0;;::::1;::::0;31111:60;::::1;31154:15;13879:1;31154:2;:15;:::i;:::-;31134:16;;:36;;;;:::i;:::-;31111:60:::0;;31006:179;;31173:10:::1;::::0;;;;;;;-1:-1:-1;31173:10:0;;::::1;::::0;;;;;31006:179:::1;31173:10:::0;;::::1;::::0;;;;31006:179;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;30659:534:::0;;;:::o;33538:528::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;33701:1:::1;33686:12;:16;33678:25;;;::::0;::::1;;33714:11;:22:::0;;-1:-1:-1;;33747:32:0;33714:22:::1;::::0;::::1;;;-1:-1:-1::0;;33747:32:0;;;;::::1;;;;::::0;;33806:12:::1;::::0;:27:::1;::::0;33821:12;;33806:27:::1;:::i;:::-;33790:13;:43:::0;33874:15:::1;13879:1;33874:2;:15;:::i;:::-;33858:32;::::0;:12;:32:::1;:::i;:::-;33844:11;:46:::0;33906:152:::1;::::0;;33940:32;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;33940:32:0;;;;33906:152:::1;::::0;::::1;33940:32:::0;;;-1:-1:-1;;;;;;;;;;;33906:152:0;;;;33940:32;;;33955:8;:16:::1;;33970:1;33955:16;;;33966:1;33955:16;33940:32;;;;::::0;33906:152:::1;;;;33973:34;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;33973:34:0::1;;::::0;::::1;;;;33993:13;;33973:34;;::::0;33906:152:::1;;;;34009:47;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;34009:47:0::1;;::::0;::::1;;;;34032:15;:23;;34054:1;34032:23;;;34050:1;34032:23;34009:47;;::::0;;33906:152;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;;;;33538:528:::0;;;;:::o;19777:214::-;7069:10;16165:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;19892:21:::1;-1:-1:-1::0;;;;;19924:21:0;::::1;:59;19979:3;19947:28;19959:16:::0;19892:21;19947:28:::1;:::i;:::-;19946:36;;;;:::i;:::-;19924:59;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;18346:122:::0;18401:4;18425:35;18433:7;-1:-1:-1;;18425:7:0;:35::i;20514:111::-;7069:10;16165:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;20567:13:::1;:20:::0;;-1:-1:-1;;20598:19:0;;;;;20514:111::o;18480:119::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18563:17:0;;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:28;;-1:-1:-1;;18563:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18480:119::o;17759:105::-;17809:7;17845:15;13879:1;17845:2;:15;:::i;:::-;17827:14;;:34;;;;:::i;31563:263::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31646:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;31646:28:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;31646:28:0;31706:41:::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;31706:41:0::1;;::::0;::::1;;;;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;31706:41:0::1;::::0;::::1;::::0;31690:128;;31750:42;;;;;;31706:41;31690:128;::::1;::::0;::::1;::::0;31754:34:::1;31763:24;31780:6:::0;31763:24;;;::::1;:::i;18611:468::-:0;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;18724:20;;;;;:58:::1;;-1:-1:-1::0;18748:34:0;;::::1;18724:58;18716:67;;;::::0;::::1;;18809:10;18794:12;18832:240;18849:20:::0;;::::1;18832:240;;;18895:14;:28;18910:9;;18920:1;18910:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18895:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18895:28:0;;::::1;;18894:29;:64:::0;::::1;;;;18928:16;:30;18945:9;;18955:1;18945:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18928:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18928:30:0;;::::1;;18927:31;18894:64;18891:170;;;18979:66;18994:4;19000:9;;19010:1;19000:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19028:15;13879:1;19028:2;:15;:::i;:::-;19014:7;;19022:1;19014:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;18979:14;:66::i;:::-;;18891:170;18871:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18832:240;;;;18705:374;18611:468:::0;;;;:::o;13008:148::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;13115:1:::1;13099:6:::0;;13078:40:::1;::::0;-1:-1:-1;;;;;13099:6:0;;::::1;::::0;13078:40:::1;::::0;13115:1;;13078:40:::1;13146:1;13129:19:::0;;-1:-1:-1;;;;;;13129:19:0::1;::::0;;13008:148::o;32139:762::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;32320:10:::1;:24:::0;;;32355:12:::1;:28:::0;;;32394:12:::1;:28:::0;;;32433:12:::1;:28:::0;;;32448:13;32370;32483:27:::1;32409:13:::0;32333:11;32483:27:::1;:::i;:::-;:43;;;;:::i;:::-;:59;;;;:::i;:::-;32472:8;:70:::0;32553:8:::1;:20:::0;;;32584:14:::1;:32:::0;;;32646:18:::1;32663:1;32601:15:::0;32646:18:::1;:::i;:::-;32635:8;;:29;32627:38;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;32681:212:0::1;;;;;;;;32706:57;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;32706:57:0::1;;::::0;::::1;;;;32748:14;;32731:8;;32742:3;32731:14;;;;:::i;:::-;:31;;;;:::i;:::-;32706:57:::0;;32681:212;;32765:62:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;32765:62:0;;;;;;;32812:14:::1;::::0;32681:212:::1;::::0;;::::1;::::0;32765:62;::::1;::::0;32790:19:::1;:13:::0;32806:3:::1;32790:19;:::i;:::-;:36;;;;:::i;:::-;32765:62:::0;;32681:212;;32829:62:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;32829:62:0;;;;;;;32876:14:::1;::::0;32681:212:::1;::::0;;::::1;::::0;32829:62;::::1;::::0;32854:19:::1;:13:::0;32870:3:::1;32854:19;:::i;:::-;:36;;;;:::i;:::-;32829:62:::0;;32681:212;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;;;;32139:762:::0;;;;;;:::o;21648:156::-;21728:4;21752:44;21766:10;21778:9;21789:6;21752:13;:44::i;31205:350::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;31315:1:::1;31303:9;:13;:28;;;;;31330:1;31320:7;:11;31303:28;:48;;;;;31346:5;31335:7;:16;;31303:48;31295:57;;;::::0;::::1;;31409:7;31396:9;31381:12;;:24;;;;:::i;:::-;31380:36;;;;:::i;:::-;31363:14;:53:::0;;;31432:115:::1;::::0;;31472:49;;;;;;;;;;;;-1:-1:-1;;;31472:49:0;;;;31432:115:::1;::::0;::::1;31472:49:::0;;;-1:-1:-1;;;;;;;;;;;31432:115:0;;;31472:49;;;31504:15:::1;13879:1;31504:2;:15;:::i;:::-;31486:14;;:34;;;;:::i;:::-;31472:49:::0;;31432:115;;31523:10:::1;::::0;;;;;;;;-1:-1:-1;31523:10:0;;::::1;::::0;;;;;31432:115:::1;31523:10:::0;;::::1;::::0;;;31432:115;;::::1;::::0;;;;31535:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;31432:115;;;;;;;;::::1;::::0;;::::1;:::i;17535:105::-:0;17584:7;17621:15;13879:1;17621:2;:15;:::i;:::-;17602;;:35;;;;:::i;30430:221::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;30512:2:::1;30504:4;:10;;30496:19;;;::::0;::::1;;30526:9;:16:::0;;;30558:85:::1;::::0;;30598:19;;;;;::::1;::::0;;;;;;-1:-1:-1;;;30598:19:0;;;;30558:85:::1;::::0;;::::1;30598:19:::0;;;;;;;;;30558:85;;;30619:10;;;;;;;-1:-1:-1;30619:10:0;;::::1;::::0;;;;;30598:19:::1;30619:10:::0;;::::1;::::0;;;30558:85;;::::1;::::0;;;;30631:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;-1:-1:-1;;;30558:85:0;;;-1:-1:-1;;;;;;;;;;;30558:85:0;::::1;::::0;::::1;:::i;19091:473::-:0;7069:10;16165:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;19178:17:::1;19243:3;19199:40;19223:16:::0;19199:21:::1;:40;:::i;:::-;19198:48;;;;:::i;:::-;19291:16;::::0;;19305:1:::1;19291:16:::0;;;;;::::1;::::0;;19178:68;;-1:-1:-1;19267:21:0::1;::::0;19291:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;19328:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;19328:13:0;;;;19267:40;;-1:-1:-1;;;;;;19328:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;19328:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19318:4;19323:1;19318:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;19318:23:0::1;;;-1:-1:-1::0;;;;;19318:23:0::1;;;::::0;::::1;19362:5;19352:4;19357:1;19352:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19352:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;19380:6:::1;::::0;:176:::1;::::0;-1:-1:-1;;;19380:176:0;;:6;::::1;::::0;:57:::1;::::0;19445:9;;19380:176:::1;::::0;:6:::1;::::0;19486:4;;19505:10:::1;::::0;19530:15:::1;::::0;19380:176:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;19167:397;;19091:473:::0;;:::o;20637:235::-;7069:10;16165:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;12405:7:0;12432:6;-1:-1:-1;;;;;12432:6:0;16193:10;:21;16165:49;16157:89;;;;-1:-1:-1;;;16157:89:0;;;;;;;:::i;:::-;20731:18:::1;::::0;::::1;::::0;::::1;;;20730:19;20722:28;;;::::0;::::1;;20761:17;:28:::0;;-1:-1:-1;;20761:28:0::1;::::0;::::1;;;::::0;;20819:6:::1;20808:17:::0;::::1;20800:26;;;::::0;::::1;;20856:8;20837:15;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;20637:235:0:o;32909:621::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;33046:20:::1;:53:::0;;-1:-1:-1;;;;;33046:53:0;;::::1;-1:-1:-1::0;;;;;;33046:53:0;;::::1;;::::0;;;33110:20:::1;:53:::0;;;;::::1;::::0;;::::1;;::::0;;33174:9:::1;:31:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;33221:301:::1;::::0;;33259:85;;;;;::::1;33255:93:::0;;;33259:85;;;-1:-1:-1;;;33259:85:0;;;;33303:39;;-1:-1:-1;;;;;;;;;;;33221:301:0;;;::::1;::::0;::::1;::::0;;;33259:85:::1;::::0;33255:93;33294:49:::1;::::0;33303:39:::1;::::0;33077:21;;33259:85:::1;33303:39;;:::i;33259:85::-;33255:93;;;;33346:1;33255:93;;::::0;33221:301:::1;;;;33349:93;;;;;;;;33353:85;;;;;;;;;;;;;;-1:-1:-1::0;;;33353:85:0::1;;::::0;33388:49:::1;33414:21;33397:39;;;;;;;;:::i;33353:85::-;33349:93;;;;33440:1;33349:93;;::::0;33221:301:::1;;;;33444:76;;;;;;;;33448:68;;;;;;;;;;;;;;-1:-1:-1::0;;;33448:68:0::1;;::::0;33477:38:::1;33503:10;33486:28;;;;;;;;:::i;33448:68::-;33444:76:::0;;33518:1:::1;33444:76;::::0;;::::1;::::0;33221:301;;::::1;::::0;::::1;::::0;;::::1;:::i;26343:232::-:0;26399:7;26449:12;26435:10;;26422;;:23;;;;:::i;:::-;:39;26419:73;;26488:1;26471:14;;:18;;;;:::i;26419:73::-;26506:7;26502:39;;;26533:8;;26522;;:19;;;;:::i;26502:39::-;-1:-1:-1;;26559:8:0;;;26343:232::o;13311:244::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13400:22:0;::::1;13392:73;;;::::0;-1:-1:-1;;;13392:73:0;;17154:2:1;13392:73:0::1;::::0;::::1;17136:21:1::0;17193:2;17173:18;;;17166:30;17232:34;17212:18;;;17205:62;-1:-1:-1;;;17283:18:1;;;17276:36;17329:19;;13392:73:0::1;16952:402:1::0;13392:73:0::1;13502:6;::::0;;13481:38:::1;::::0;-1:-1:-1;;;;;13481:38:0;;::::1;::::0;13502:6;::::1;::::0;13481:38:::1;::::0;::::1;13530:6;:17:::0;;-1:-1:-1;;;;;;13530:17:0::1;-1:-1:-1::0;;;;;13530:17:0;;;::::1;::::0;;;::::1;::::0;;13311:244::o;31834:297::-;12579:6;;-1:-1:-1;;;;;12579:6:0;7069:10;12579:22;12571:67;;;;-1:-1:-1;;;12571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31921:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;31921:32:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;31921:32:0;31985:67:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;31969:154;;32055:42;;;;;;31985:67;31969:154;::::1;::::0;::::1;::::0;32059:34:::1;32068:24;32085:6:::0;32068:24;;;::::1;:::i;34218:465::-:0;34303:42;;;;;;;;;;;;-1:-1:-1;;;34303:42:0;;;;34395:11;;34277:13;;34303:42;:21;;34395:15;;34409:1;34395:15;:::i;:::-;34391:19;;:1;:19;:::i;:::-;34381:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34381:30:0;;34362:49;;-1:-1:-1;;;34422:3:0;34426:1;34422:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;34422:12:0;;;;;;;;;-1:-1:-1;;;34445:3:0;34449:1;34445:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;34445:12:0;;;;;;;;;34473:6;34468:179;34489:4;:11;34485:1;:15;34468:179;;;34535:8;34566:1;34555:4;34560:1;34555:7;;;;;;;;:::i;:::-;;;;;34535:35;;-1:-1:-1;;;;;;34555:7:0;;;:12;;;:7;34549:19;;34535:35;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;34535:35:0;34522:3;34528;:1;34530;34528:3;:::i;:::-;34526:5;;:1;:5;:::i;:::-;34522:10;;;;;;;;:::i;:::-;;;;:48;-1:-1:-1;;;;;34522:48:0;;;;;;;;;34598:8;34618:4;34623:1;34618:7;;;;;;;;:::i;:::-;;;;;;34598:37;;34618:7;;;;;34628:4;34612:21;;34598:37;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;34598:37:0;34585:3;34591;:1;34593;34591:3;:::i;:::-;34589:5;;:1;:5;:::i;:::-;34585:10;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;34585:50:0;;;;;;;;-1:-1:-1;34502:3:0;;;;:::i;:::-;;;;34468:179;;;-1:-1:-1;34671:3:0;34218:465;-1:-1:-1;;;34218:465:0:o;34695:149::-;34773:13;34830:1;34833;34813:22;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34799:37;;34695:149;;;;:::o;22161:2018::-;22253:4;-1:-1:-1;;;;;22278:20:0;;22270:57;;;;-1:-1:-1;;;22270:57:0;;16801:2:1;22270:57:0;;;16783:21:1;16840:2;16820:18;;;16813:30;16879:26;16859:18;;;16852:54;16923:18;;22270:57:0;16599:348:1;22270:57:0;-1:-1:-1;;;;;22346:23:0;;22338:58;;;;-1:-1:-1;;;22338:58:0;;18089:2:1;22338:58:0;;;18071:21:1;18128:2;18108:18;;;18101:30;-1:-1:-1;;;18147:18:1;;;18140:52;18209:18;;22338:58:0;17887:346:1;22338:58:0;22424:1;22415:6;:10;22407:44;;;;-1:-1:-1;;;22407:44:0;;15699:2:1;22407:44:0;;;15681:21:1;15738:2;15718:18;;;15711:30;-1:-1:-1;;;15757:18:1;;;15750:51;15818:18;;22407:44:0;15497:345:1;22407:44:0;-1:-1:-1;;;;;22470:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;22470:27:0;22462:60;;;;-1:-1:-1;;;22462:60:0;;18440:2:1;22462:60:0;;;18422:21:1;18479:2;18459:18;;;18452:30;-1:-1:-1;;;18498:18:1;;;18491:50;18558:18;;22462:60:0;18238:344:1;22462:60:0;24258:10;;:15;;;22536:40;;-1:-1:-1;;;;;;22551:25:0;;;;;;:14;:25;;;;;;;;22536:40;22533:120;;;-1:-1:-1;;;;;22587:24:0;;;;;;:16;:24;;;;;;;;22579:61;;;;-1:-1:-1;;;22579:61:0;;20041:2:1;22579:61:0;;;20023:21:1;20080:2;20060:18;;;20053:30;20119:26;20099:18;;;20092:54;20163:18;;22579:61:0;19839:348:1;22579:61:0;22642:8;24340:12;24327:10;:25;24378:15;24363:12;:30;24404:11;:18;;-1:-1:-1;;24404:18:0;;;;;24289:141;22642:8;22667:12;;;;22663:111;;-1:-1:-1;;;;;22690:24:0;;;;;;:16;:24;;;;;;;;;:55;;-1:-1:-1;;;;;;22718:27:0;;;;;;:16;:27;;;;;;;;22690:55;22682:89;;;;-1:-1:-1;;;22682:89:0;;22790:2:1;22682:89:0;;;22772:21:1;22829:2;22809:18;;;22802:30;-1:-1:-1;;;22848:18:1;;;22841:51;22909:18;;22682:89:0;22588:345:1;22682:89:0;22791:15;;;;22790:16;:54;;;;;22829:15;22810;;:34;;22790:54;22786:272;;;22861:15;:22;;-1:-1:-1;;22861:22:0;22879:4;22861:22;;;:15;22898:9;:13;22943:12;;22926:14;:29;;;22970:15;:30;;;23015:16;:31;22786:272;23070:39;23083:6;23091:9;23102:6;23070:12;:39::i;:::-;-1:-1:-1;;;;;23135:25:0;;;;;;:14;:25;;;;;;;;23134:26;:47;;;;-1:-1:-1;23177:4:0;;-1:-1:-1;;;;;23164:17:0;;;23177:4;;23164:17;;23134:47;23130:182;;;-1:-1:-1;;;;;23203:26:0;;;;;;:15;:26;;;;;;;;23198:103;;23250:35;23267:9;23278:6;23250:16;:35::i;:::-;23335:17;;;;:54;;;;;23374:15;23356;;:33;23335:54;23332:351;;;-1:-1:-1;;;;;23409:22:0;;;;;;:14;:22;;;;;;;;:48;;;;-1:-1:-1;23435:9:0;-1:-1:-1;;;;;23435:22:0;;;;23409:48;:77;;;;-1:-1:-1;;;;;;23461:20:0;;;;;;:9;:20;;;;;;:25;23409:77;23406:266;;;-1:-1:-1;;;;;23507:20:0;;;;;;:9;:20;;;;;23530:12;23507:35;;23561:15;:17;;;;;;:::i;:::-;;;;;;23602:54;23618:9;23629;23640:12;23654:1;23602:54;;;;;;;;;:::i;:::-;;;;;;;;23406:266;23706:6;;;;23703:63;;;23722:41;23737:6;23745:9;23756:6;23722:14;:41::i;:::-;23715:48;;;;23703:63;-1:-1:-1;;;;;23798:17:0;;;;;;:9;:17;;;;;;:26;;23818:6;;23798:26;:::i;:::-;-1:-1:-1;;;;;23778:17:0;;;;;;:9;:17;;;;;;;;:46;;;;26308:11;:19;;;;;;;;26307:20;23862:59;;23915:6;23862:59;;;23886:26;23894:9;23905:6;23886:7;:26::i;:::-;23837:84;;23945:25;23960:9;23945:14;:25::i;:::-;23942:66;;;23977:10;;23973:32;;23989:16;23998:6;23989:8;:16::i;:::-;-1:-1:-1;;;;;24051:20:0;;;;;;:9;:20;;;;;;:37;;24074:14;;24051:37;:::i;:::-;-1:-1:-1;;;;;24028:20:0;;;;;;;:9;:20;;;;;;;:60;;;;24106:43;;;;;;;;;;24134:14;24031:25:1;;24019:2;24004:18;;23885:177;24106:43:0;;;;;;;;-1:-1:-1;24167:4:0;;22161:2018;-1:-1:-1;;;;22161:2018:0:o;24438:300::-;-1:-1:-1;;;;;24568:17:0;;24531:4;24568:17;;;:9;:17;;;;;;:26;;24588:6;;24568:26;:::i;:::-;-1:-1:-1;;;;;24548:17:0;;;;;;;:9;:17;;;;;;:46;;;;24628:20;;;;;;;:29;;24651:6;;24628:29;:::i;:::-;-1:-1:-1;;;;;24605:20:0;;;;;;;:9;:20;;;;;;;:52;;;;24673:35;;;;;;;;;;24701:6;24031:25:1;;24019:2;24004:18;;23885:177;24673:35:0;;;;;;;;-1:-1:-1;24726:4:0;24438:300;;;;;:::o;24993:1220::-;-1:-1:-1;;;;;25094:23:0;;;;;;:15;:23;;;;;;;;;:98;;-1:-1:-1;;;;;;25132:22:0;;;;;;:14;:22;;;;;;;;:59;;25175:16;;25132:59;;;25157:15;;25132:59;25121:6;:71;;25094:98;25086:128;;;;-1:-1:-1;;;25086:128:0;;16455:2:1;25086:128:0;;;16437:21:1;16494:2;16474:18;;;16467:30;-1:-1:-1;;;16513:18:1;;;16506:47;16570:18;;25086:128:0;16253:341:1;25086:128:0;-1:-1:-1;;;;;25233:23:0;;;;;;:15;:23;;;;;;;;;:73;;-1:-1:-1;25281:9:0;;-1:-1:-1;;;;;25260:18:0;;;;;;:7;:18;;;;;;25294:12;;25260:30;;;:::i;:::-;:46;;25233:73;25225:115;;;;-1:-1:-1;;;25225:115:0;;19683:2:1;25225:115:0;;;19665:21:1;19722:2;19702:18;;;19695:30;19761:31;19741:18;;;19734:59;19810:18;;25225:115:0;19481:353:1;25225:115:0;-1:-1:-1;;;;;25365:17:0;;;;;;:9;:17;;;;;;:22;25361:261;;25440:15;13879:1;25440:2;:15;:::i;:::-;25421;;:35;;;;:::i;:::-;25411:6;:45;;:70;;;;-1:-1:-1;;;;;;25460:16:0;;;;;;:8;:16;;;;;;:21;25411:70;:107;;;;;25503:15;25485;;:33;25411:107;25403:161;;;;-1:-1:-1;;;25403:161:0;;20394:2:1;25403:161:0;;;20376:21:1;20433:2;20413:18;;;20406:30;20472:34;20452:18;;;20445:62;-1:-1:-1;;;20523:18:1;;;20516:39;20572:19;;25403:161:0;20192:405:1;25403:161:0;-1:-1:-1;;;;;25579:16:0;;;;;;:8;:16;;;;;25598:12;25579:31;;25361:261;-1:-1:-1;;;;;25646:25:0;;;;;;:14;:25;;;;;;;;25642:564;;;-1:-1:-1;;;;;;;25688:16:0;;;;;:8;:16;;;;;25707:12;25688:31;;24993:1220::o;25642:564::-;-1:-1:-1;;;;;26308:19:0;;26283:4;26308:19;;;:11;:19;;;;;;;;25737:469;;25783:17;;;;:54;;;;;25822:15;25804;;:33;25783:54;:92;;;;-1:-1:-1;25849:9:0;25841:18;;;;:7;:18;;;;;;25863:12;25841:34;25783:92;:121;;;;-1:-1:-1;;;;;;25879:20:0;;;;;;:9;:20;;;;;;:25;25783:121;25779:275;;;-1:-1:-1;;;;;25925:20:0;;;;;;:9;:20;;;;;;;25948:12;25925:35;;;;25984:54;;;;;;26000:9;;25935;;26036:1;;25984:54;:::i;:::-;;;;;;;;25779:275;-1:-1:-1;;;;;26068:18:0;;;;;;:7;:18;;;;;26089:12;26068:33;;26120:9;:22;26116:78;;26169:9;26161:18;;;;:7;:18;;;;;26182:12;26161:33;;26116:78;24993:1220;;;:::o;24750:235::-;24858:14;;-1:-1:-1;;;;;24891:20:0;;24836:19;24891:20;;;:9;:20;;;;;;24858:14;;24891:29;;24914:6;;24891:29;:::i;:::-;:44;;24883:94;;;;-1:-1:-1;;;24883:94:0;;16049:2:1;24883:94:0;;;16031:21:1;16088:2;16068:18;;;16061:30;16127:34;16107:18;;;16100:62;-1:-1:-1;;;16178:18:1;;;16171:35;16223:19;;24883:94:0;15847:401:1;26583:317:0;-1:-1:-1;;;;;26688:25:0;;26653:7;26688:25;;;:14;:25;;;;;;26778:14;;26688:25;;;;;26653:7;;26754:20;26688:25;26754:11;:20::i;:::-;26745:29;;:6;:29;:::i;:::-;26744:48;;;;:::i;:::-;26831:4;26813:24;;;;:9;:24;;;;;:37;;26724:68;;-1:-1:-1;26724:68:0;;26813:24;;;:37;;26724:68;;26813:37;:::i;:::-;;;;-1:-1:-1;26874:18:0;;-1:-1:-1;26883:9:0;26874:6;:18;:::i;:::-;26867:25;26583:317;-1:-1:-1;;;;;26583:317:0:o;26908:259::-;27014:10;26974:4;26999:26;;;:14;:26;;;;;;;;26998:27;:47;;;;-1:-1:-1;27039:6:0;;;;27038:7;26998:47;:71;;;;-1:-1:-1;27058:11:0;;;;;;;26998:71;:109;;;;-1:-1:-1;;;;;;27082:25:0;;;;;;:14;:25;;;;;;;;26998:109;:161;;;;-1:-1:-1;27148:11:0;;27138:4;27120:24;;;;:9;:24;;;;;;:39;;26991:168;26908:259;-1:-1:-1;;26908:259:0:o;27175:1743::-;16030:6;:13;;-1:-1:-1;;16030:13:0;16039:4;16030:13;;;27270::::1;::::0;16030:6;;27261:22;::::1;:47;;27295:13;;27261:47;;;27286:6;27261:47;27341:4;27323:24;::::0;;;:9:::1;:24;::::0;;;;;27238:70;;-1:-1:-1;27323:39:0;-1:-1:-1;27319:84:0::1;;;-1:-1:-1::0;27397:4:0::1;27379:24;::::0;;;:9:::1;:24;::::0;;;;;27319:84:::1;27424:23;27486:8;;27481:1;27466:12;;27451;:27;;;;:::i;:::-;:31;;;;:::i;:::-;27450:44;;;;:::i;:::-;27424:70:::0;-1:-1:-1;27505:31:0::1;27424:70:::0;27505:31;::::1;:::i;:::-;27573:16;::::0;;27587:1:::1;27573:16:::0;;;;;::::1;::::0;;27505:31;;-1:-1:-1;27549:21:0::1;::::0;27573:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27573:16:0::1;27549:40;;27618:4;27600;27605:1;27600:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27600:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27644:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;27644:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;27600:7;;27644:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27634:4;27639:1;27634:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27634:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27736:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27736:188:0;;27702:21:::1;::::0;27736:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27808:12;;27678:21:::1;::::0;27851:4;;27878::::1;::::0;27898:15:::1;::::0;27736:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27937:17;27981:13;27957:21;:37;;;;:::i;:::-;27937:57;;28005:19;28054:1;28039:12;;:16;;;;:::i;:::-;28027:8;;:29;;;;:::i;:::-;28005:51;;28069:26;28131:11;28126:1;28111:12;;28099:9;:24;;;;:::i;:::-;:28;;;;:::i;:::-;28098:44;;;;:::i;:::-;28069:73;;28153:26;28211:11;28195:12;;28183:9;:24;;;;:::i;:::-;28182:40;;;;:::i;:::-;28153:69;;28233:26;28291:11;28275:12;;28263:9;:24;;;;:::i;:::-;28262:40;;;;:::i;:::-;28233:69:::0;-1:-1:-1;28327:22:0;;28323:90:::1;;28364:20;::::0;:49:::1;::::0;-1:-1:-1;;;;;28364:20:0;;::::1;::::0;:49;::::1;;;::::0;28394:18;;28364:20:::1;:49:::0;:20;:49;28394:18;28364:20;:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28323:90;28428:22:::0;;28424:79:::1;;28465:9;::::0;:38:::1;::::0;-1:-1:-1;;;;;28465:9:0;;::::1;::::0;:38;::::1;;;::::0;28484:18;;28465:9:::1;:38:::0;:9;:38;28484:18;28465:9;:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28424:79;28527:19:::0;;28524:293:::1;;28562:6;::::0;28736:20:::1;::::0;28562:243:::1;::::0;-1:-1:-1;;;28562:243:0;;28638:4:::1;28562:243;::::0;::::1;12510:34:1::0;12560:18;;;12553:34;;;28562:6:0::1;12603:18:1::0;;;12596:34;;;12646:18;;;12639:34;-1:-1:-1;;;;;28736:20:0;;::::1;12689:19:1::0;;;12682:44;28775:15:0::1;12742:19:1::0;;;12735:35;28562:6:0;::::1;::::0;:22:::1;::::0;28592:18;;12444:19:1;;28562:243:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28524:293;28834:76;::::0;;24856:25:1;;;24912:2;24897:18;;24890:34;;;24940:18;;;24933:34;;;28834:76:0::1;::::0;24844:2:1;24829:18;28834:76:0::1;;;;;;;-1:-1:-1::0;;16048:6:0;:14;;-1:-1:-1;;16048:14:0;;;-1:-1:-1;;;;;;;;27175:1743:0:o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:247::-;445:6;498:2;486:9;477:7;473:23;469:32;466:52;;;514:1;511;504:12;466:52;553:9;540:23;572:31;597:5;572:31;:::i;638:251::-;708:6;761:2;749:9;740:7;736:23;732:32;729:52;;;777:1;774;767:12;729:52;809:9;803:16;828:31;853:5;828:31;:::i;894:388::-;962:6;970;1023:2;1011:9;1002:7;998:23;994:32;991:52;;;1039:1;1036;1029:12;991:52;1078:9;1065:23;1097:31;1122:5;1097:31;:::i;:::-;1147:5;-1:-1:-1;1204:2:1;1189:18;;1176:32;1217:33;1176:32;1217:33;:::i;:::-;1269:7;1259:17;;;894:388;;;;;:::o;1287:529::-;1364:6;1372;1380;1433:2;1421:9;1412:7;1408:23;1404:32;1401:52;;;1449:1;1446;1439:12;1401:52;1488:9;1475:23;1507:31;1532:5;1507:31;:::i;:::-;1557:5;-1:-1:-1;1614:2:1;1599:18;;1586:32;1627:33;1586:32;1627:33;:::i;:::-;1679:7;-1:-1:-1;1738:2:1;1723:18;;1710:32;1751:33;1710:32;1751:33;:::i;:::-;1803:7;1793:17;;;1287:529;;;;;:::o;1821:456::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2022:9;2009:23;2041:31;2066:5;2041:31;:::i;:::-;2091:5;-1:-1:-1;2148:2:1;2133:18;;2120:32;2161:33;2120:32;2161:33;:::i;:::-;1821:456;;2213:7;;-1:-1:-1;;;2267:2:1;2252:18;;;;2239:32;;1821:456::o;2282:382::-;2347:6;2355;2408:2;2396:9;2387:7;2383:23;2379:32;2376:52;;;2424:1;2421;2414:12;2376:52;2463:9;2450:23;2482:31;2507:5;2482:31;:::i;:::-;2532:5;-1:-1:-1;2589:2:1;2574:18;;2561:32;2602:30;2561:32;2602:30;:::i;2669:315::-;2737:6;2745;2798:2;2786:9;2777:7;2773:23;2769:32;2766:52;;;2814:1;2811;2804:12;2766:52;2853:9;2840:23;2872:31;2897:5;2872:31;:::i;:::-;2922:5;2974:2;2959:18;;;;2946:32;;-1:-1:-1;;;2669:315:1:o;2989:773::-;3111:6;3119;3127;3135;3188:2;3176:9;3167:7;3163:23;3159:32;3156:52;;;3204:1;3201;3194:12;3156:52;3244:9;3231:23;3273:18;3314:2;3306:6;3303:14;3300:34;;;3330:1;3327;3320:12;3300:34;3369:70;3431:7;3422:6;3411:9;3407:22;3369:70;:::i;:::-;3458:8;;-1:-1:-1;3343:96:1;-1:-1:-1;3546:2:1;3531:18;;3518:32;;-1:-1:-1;3562:16:1;;;3559:36;;;3591:1;3588;3581:12;3559:36;;3630:72;3694:7;3683:8;3672:9;3668:24;3630:72;:::i;:::-;2989:773;;;;-1:-1:-1;3721:8:1;-1:-1:-1;;;;2989:773:1:o;3767:566::-;3859:6;3867;3875;3928:2;3916:9;3907:7;3903:23;3899:32;3896:52;;;3944:1;3941;3934:12;3896:52;3984:9;3971:23;4017:18;4009:6;4006:30;4003:50;;;4049:1;4046;4039:12;4003:50;4088:70;4150:7;4141:6;4130:9;4126:22;4088:70;:::i;:::-;4177:8;;-1:-1:-1;4062:96:1;-1:-1:-1;;4262:2:1;4247:18;;4234:32;4275:28;4234:32;4275:28;:::i;4338:241::-;4394:6;4447:2;4435:9;4426:7;4422:23;4418:32;4415:52;;;4463:1;4460;4453:12;4415:52;4502:9;4489:23;4521:28;4543:5;4521:28;:::i;4584:245::-;4651:6;4704:2;4692:9;4683:7;4679:23;4675:32;4672:52;;;4720:1;4717;4710:12;4672:52;4752:9;4746:16;4771:28;4793:5;4771:28;:::i;4834:513::-;4914:6;4922;4930;4938;4991:3;4979:9;4970:7;4966:23;4962:33;4959:53;;;5008:1;5005;4998:12;4959:53;5047:9;5034:23;5066:28;5088:5;5066:28;:::i;:::-;5113:5;-1:-1:-1;5170:2:1;5155:18;;5142:32;5183:30;5142:32;5183:30;:::i;:::-;4834:513;;5232:7;;-1:-1:-1;;;;5286:2:1;5271:18;;5258:32;;5337:2;5322:18;5309:32;;4834:513::o;5352:309::-;5417:6;5425;5478:2;5466:9;5457:7;5453:23;5449:32;5446:52;;;5494:1;5491;5484:12;5446:52;5533:9;5520:23;5552:28;5574:5;5552:28;:::i;5666:180::-;5725:6;5778:2;5766:9;5757:7;5753:23;5749:32;5746:52;;;5794:1;5791;5784:12;5746:52;-1:-1:-1;5817:23:1;;5666:180;-1:-1:-1;5666:180:1:o;5851:315::-;5919:6;5927;5980:2;5968:9;5959:7;5955:23;5951:32;5948:52;;;5996:1;5993;5986:12;5948:52;6032:9;6019:23;6009:33;;6092:2;6081:9;6077:18;6064:32;6105:31;6130:5;6105:31;:::i;6171:248::-;6239:6;6247;6300:2;6288:9;6279:7;6275:23;6271:32;6268:52;;;6316:1;6313;6306:12;6268:52;-1:-1:-1;;6339:23:1;;;6409:2;6394:18;;;6381:32;;-1:-1:-1;6171:248:1:o;6424:316::-;6501:6;6509;6517;6570:2;6558:9;6549:7;6545:23;6541:32;6538:52;;;6586:1;6583;6576:12;6538:52;-1:-1:-1;;6609:23:1;;;6679:2;6664:18;;6651:32;;-1:-1:-1;6730:2:1;6715:18;;;6702:32;;6424:316;-1:-1:-1;6424:316:1:o;6745:306::-;6833:6;6841;6849;6902:2;6890:9;6881:7;6877:23;6873:32;6870:52;;;6918:1;6915;6908:12;6870:52;6947:9;6941:16;6931:26;;6997:2;6986:9;6982:18;6976:25;6966:35;;7041:2;7030:9;7026:18;7020:25;7010:35;;6745:306;;;;;:::o;7056:523::-;7160:6;7168;7176;7184;7192;7200;7253:3;7241:9;7232:7;7228:23;7224:33;7221:53;;;7270:1;7267;7260:12;7221:53;-1:-1:-1;;7293:23:1;;;7363:2;7348:18;;7335:32;;-1:-1:-1;7414:2:1;7399:18;;7386:32;;7465:2;7450:18;;7437:32;;-1:-1:-1;7516:3:1;7501:19;;7488:33;;-1:-1:-1;7568:3:1;7553:19;7540:33;;-1:-1:-1;7056:523:1;-1:-1:-1;7056:523:1:o;7584:461::-;7637:3;7675:5;7669:12;7702:6;7697:3;7690:19;7728:4;7757:2;7752:3;7748:12;7741:19;;7794:2;7787:5;7783:14;7815:1;7825:195;7839:6;7836:1;7833:13;7825:195;;;7904:13;;-1:-1:-1;;;;;7900:39:1;7888:52;;7960:12;;;;7995:15;;;;7936:1;7854:9;7825:195;;;-1:-1:-1;8036:3:1;;7584:461;-1:-1:-1;;;;;7584:461:1:o;8050:707::-;8102:3;8133;8187:2;8180:5;8176:14;8213:5;8236:1;8246:485;8260:4;8257:1;8254:11;8246:485;;;8329:5;8323:4;8319:16;8314:3;8307:29;8365:6;8359:13;8395:4;8438:2;8432:9;8467:2;8461:4;8454:16;8497:46;8539:2;8533:4;8529:13;8515:12;8497:46;:::i;:::-;8566:4;8611:11;;;8605:18;8590:13;;;8583:41;;;;-1:-1:-1;;8709:12:1;;;;8674:15;;;;;8280:1;8273:9;8246:485;;;-1:-1:-1;8747:4:1;;8050:707;-1:-1:-1;;;;;8050:707:1:o;8762:258::-;8804:3;8842:5;8836:12;8869:6;8864:3;8857:19;8885:63;8941:6;8934:4;8929:3;8925:14;8918:4;8911:5;8907:16;8885:63;:::i;:::-;9002:2;8981:15;-1:-1:-1;;8977:29:1;8968:39;;;;9009:4;8964:50;;8762:258;-1:-1:-1;;8762:258:1:o;9025:229::-;9174:2;9170:15;;;;-1:-1:-1;;9166:53:1;9154:66;;9245:2;9236:12;;9025:229::o;9259:470::-;9438:3;9476:6;9470:13;9492:53;9538:6;9533:3;9526:4;9518:6;9514:17;9492:53;:::i;:::-;9608:13;;9567:16;;;;9630:57;9608:13;9567:16;9664:4;9652:17;;9630:57;:::i;:::-;9703:20;;9259:470;-1:-1:-1;;;;9259:470:1:o;10475:464::-;-1:-1:-1;;;;;10768:15:1;;;10750:34;;10820:15;;;;10815:2;10800:18;;10793:43;10867:2;10852:18;;10845:34;10927:4;10915:17;;;10910:2;10895:18;;10888:45;10699:3;10684:19;;10475:464::o;13199:510::-;13470:6;13459:9;13452:25;13513:3;13508:2;13497:9;13493:18;13486:31;13433:4;13534:57;13586:3;13575:9;13571:19;13563:6;13534:57;:::i;:::-;-1:-1:-1;;;;;13627:32:1;;;;13622:2;13607:18;;13600:60;-1:-1:-1;13691:2:1;13676:18;13669:34;13526:65;13199:510;-1:-1:-1;;13199:510:1:o;13714:220::-;13863:2;13852:9;13845:21;13826:4;13883:45;13924:2;13913:9;13909:18;13901:6;13883:45;:::i;13939:461::-;14204:2;14193:9;14186:21;14167:4;14230:45;14271:2;14260:9;14256:18;14248:6;14230:45;:::i;:::-;14323:9;14315:6;14311:22;14306:2;14295:9;14291:18;14284:50;14351:43;14387:6;14379;14351:43;:::i;14405:539::-;14723:2;14712:9;14705:21;14762:2;14757;14746:9;14742:18;14735:30;-1:-1:-1;;;14796:2:1;14785:9;14781:18;14774:49;14861:3;14854:4;14843:9;14839:20;14832:33;14686:4;14882:56;14933:3;14922:9;14918:19;14910:6;14882:56;:::i;14949:543::-;15267:2;15256:9;15249:21;15306:2;15301;15290:9;15286:18;15279:30;15345:25;15340:2;15329:9;15325:18;15318:53;15409:3;15402:4;15391:9;15387:20;15380:33;15230:4;15430:56;15481:3;15470:9;15466:19;15458:6;15430:56;:::i;17359:523::-;17677:2;17666:9;17659:21;17716:1;17711:2;17700:9;17696:18;17689:29;-1:-1:-1;;;17749:2:1;17738:9;17734:18;17727:34;17799:3;17792:4;17781:9;17777:20;17770:33;17640:4;17820:56;17871:3;17860:9;17856:19;17848:6;17820:56;:::i;18587:351::-;18789:2;18771:21;;;18828:2;18808:18;;;18801:30;18867:29;18862:2;18847:18;;18840:57;18929:2;18914:18;;18587:351::o;18943:533::-;19261:2;19250:9;19243:21;19300:2;19295;19284:9;19280:18;19273:30;-1:-1:-1;;;19334:2:1;19323:9;19319:18;19312:43;19393:3;19386:4;19375:9;19371:20;19364:33;19224:4;19414:56;19465:3;19454:9;19450:19;19442:6;19414:56;:::i;20602:356::-;20804:2;20786:21;;;20823:18;;;20816:30;20882:34;20877:2;20862:18;;20855:62;20949:2;20934:18;;20602:356::o;20963:533::-;21281:2;21270:9;21263:21;21320:2;21315;21304:9;21300:18;21293:30;-1:-1:-1;;;21354:2:1;21343:9;21339:18;21332:43;21413:3;21406:4;21395:9;21391:20;21384:33;21244:4;21434:56;21485:3;21474:9;21470:19;21462:6;21434:56;:::i;21501:544::-;21819:2;21808:9;21801:21;21858:2;21853;21842:9;21838:18;21831:30;21897:26;21892:2;21881:9;21877:18;21870:54;21962:3;21955:4;21944:9;21940:20;21933:33;21782:4;21983:56;22034:3;22023:9;22019:19;22011:6;21983:56;:::i;22050:533::-;22368:2;22357:9;22350:21;22407:2;22402;22391:9;22387:18;22380:30;-1:-1:-1;;;22441:2:1;22430:9;22426:18;22419:43;22500:3;22493:4;22482:9;22478:20;22471:33;22331:4;22521:56;22572:3;22561:9;22557:19;22549:6;22521:56;:::i;23341:539::-;23659:2;23648:9;23641:21;23698:2;23693;23682:9;23678:18;23671:30;-1:-1:-1;;;23732:2:1;23721:9;23717:18;23710:49;23797:3;23790:4;23779:9;23775:20;23768:33;23622:4;23818:56;23869:3;23858:9;23854:19;23846:6;23818:56;:::i;24067:582::-;24366:6;24355:9;24348:25;24409:6;24404:2;24393:9;24389:18;24382:34;24452:3;24447:2;24436:9;24432:18;24425:31;24329:4;24473:57;24525:3;24514:9;24510:19;24502:6;24473:57;:::i;:::-;-1:-1:-1;;;;;24566:32:1;;;;24561:2;24546:18;;24539:60;-1:-1:-1;24630:3:1;24615:19;24608:35;24465:65;24067:582;-1:-1:-1;;;24067:582:1:o;25167:128::-;25207:3;25238:1;25234:6;25231:1;25228:13;25225:39;;;25244:18;;:::i;:::-;-1:-1:-1;25280:9:1;;25167:128::o;25300:217::-;25340:1;25366;25356:132;;25410:10;25405:3;25401:20;25398:1;25391:31;25445:4;25442:1;25435:15;25473:4;25470:1;25463:15;25356:132;-1:-1:-1;25502:9:1;;25300:217::o;25522:422::-;25611:1;25654:5;25611:1;25668:270;25689:7;25679:8;25676:21;25668:270;;;25748:4;25744:1;25740:6;25736:17;25730:4;25727:27;25724:53;;;25757:18;;:::i;:::-;25807:7;25797:8;25793:22;25790:55;;;25827:16;;;;25790:55;25906:22;;;;25866:15;;;;25668:270;;;25672:3;25522:422;;;;;:::o;25949:140::-;26007:5;26036:47;26077:4;26067:8;26063:19;26057:4;26143:5;26173:8;26163:80;;-1:-1:-1;26214:1:1;26228:5;;26163:80;26262:4;26252:76;;-1:-1:-1;26299:1:1;26313:5;;26252:76;26344:4;26362:1;26357:59;;;;26430:1;26425:130;;;;26337:218;;26357:59;26387:1;26378:10;;26401:5;;;26425:130;26462:3;26452:8;26449:17;26446:43;;;26469:18;;:::i;:::-;-1:-1:-1;;26525:1:1;26511:16;;26540:5;;26337:218;;26639:2;26629:8;26626:16;26620:3;26614:4;26611:13;26607:36;26601:2;26591:8;26588:16;26583:2;26577:4;26574:12;26570:35;26567:77;26564:159;;;-1:-1:-1;26676:19:1;;;26708:5;;26564:159;26755:34;26780:8;26774:4;26755:34;:::i;:::-;26825:6;26821:1;26817:6;26813:19;26804:7;26801:32;26798:58;;;26836:18;;:::i;:::-;26874:20;;26094:806;-1:-1:-1;;;26094:806:1:o;26905:168::-;26945:7;27011:1;27007;27003:6;26999:14;26996:1;26993:21;26988:1;26981:9;26974:17;26970:45;26967:71;;;27018:18;;:::i;:::-;-1:-1:-1;27058:9:1;;26905:168::o;27078:125::-;27118:4;27146:1;27143;27140:8;27137:34;;;27151:18;;:::i;:::-;-1:-1:-1;27188:9:1;;27078:125::o;27208:258::-;27280:1;27290:113;27304:6;27301:1;27298:13;27290:113;;;27380:11;;;27374:18;27361:11;;;27354:39;27326:2;27319:10;27290:113;;;27421:6;27418:1;27415:13;27412:48;;;-1:-1:-1;;27456:1:1;27438:16;;27431:27;27208:258::o;27471:136::-;27510:3;27538:5;27528:39;;27547:18;;:::i;:::-;-1:-1:-1;;;27583:18:1;;27471:136::o;27612:135::-;27651:3;-1:-1:-1;;27672:17:1;;27669:43;;;27692:18;;:::i;:::-;-1:-1:-1;27739:1:1;27728:13;;27612:135::o;27752:127::-;27813:10;27808:3;27804:20;27801:1;27794:31;27844:4;27841:1;27834:15;27868:4;27865:1;27858:15;27884:127;27945:10;27940:3;27936:20;27933:1;27926:31;27976:4;27973:1;27966:15;28000:4;27997:1;27990:15;28016:127;28077:10;28072:3;28068:20;28065:1;28058:31;28108:4;28105:1;28098:15;28132:4;28129:1;28122:15;28148:131;-1:-1:-1;;;;;28223:31:1;;28213:42;;28203:70;;28269:1;28266;28259:12;28203:70;28148:131;:::o;28284:118::-;28370:5;28363:13;28356:21;28349:5;28346:32;28336:60;;28392:1;28389;28382:12

Swarm Source

ipfs://94e34fe520d30119515c01ff08e13b55eb3007cf435fbdf18a8f27e4cf45d212
Loading...
Loading
[ 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.