ETH Price: $3,252.00 (+3.52%)
Gas: 5 Gwei

Token

BabyKiba Inu (BabyKiba)
 

Overview

Max Total Supply

1,000,000,000 BabyKiba

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
5,000 BabyKiba

Value
$0.00
0xbbce4c2985b608c4706d711246cae6843c8b386d
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BabyKiba

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-16
*/

/*
BabyKiba Inu

Website: https://babykibainu.space/
Telegram: https://t.me/babykibaeth
Twitter: https://twitter.com/baby_kiba

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * C U ON THE MOON
     * 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;
}

contract DividendDistributor {

    address _mainToken;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    IERC20 TOKEN;
    IDEXRouter router;

    address[] public shareholders;
    mapping (address => uint256) public shareholderIndexes;
    mapping (address => uint256) public shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1000000 * (10 ** 9);
    uint256 public gas = 500000;
    
    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _mainToken || _mainToken == address(0)); _;
    }

    constructor (address routerAddress, address _reflectionToken) {
        router = IDEXRouter(routerAddress);
        TOKEN = IERC20(_reflectionToken);
        _mainToken = msg.sender;
    }
    
    function startDistribution() external initialization onlyToken {
        uint256 amount = TOKEN.balanceOf(address(this));

        totalDividends += amount;
        dividendsPerShare += (dividendsPerShareAccuracyFactor * amount) / totalShares;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _gas) external onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        gas = _gas;
    }

    function setShare(address shareholder, uint256 amount) external onlyToken {
        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }
        
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }
        
        totalShares = (totalShares - shares[shareholder].amount) + amount;
        shares[shareholder].amount = amount;
        
        shares[shareholder].totalExcluded = getCumulativeDividends(amount);
    }

    function deposit() external payable {
        uint256 balanceBefore = TOKEN.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(TOKEN);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        if(initialized) {
            uint256 amount = TOKEN.balanceOf(address(this)) - balanceBefore;

            totalDividends = totalDividends + amount;
            dividendsPerShare = dividendsPerShare + (dividendsPerShareAccuracyFactor * amount) / totalShares;
        }
    }

    function process() public onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }
            
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }
    
    function getClaimTime(address shareholder) external view returns (uint256) {
        if (shareholderClaims[shareholder] + minPeriod <= block.timestamp)
            return 0;
        else
            return (shareholderClaims[shareholder] + minPeriod) - block.timestamp;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        
        uint256 unpaidEarnings = getUnpaidEarnings(shareholder);
        if(unpaidEarnings > 0){
            totalDistributed += unpaidEarnings;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised + unpaidEarnings;
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            TOKEN.transfer(shareholder, unpaidEarnings);
        }
    }

    function claimDividend(address shareholder) external onlyToken {
        distributeDividend(shareholder);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends - shareholderTotalExcluded;
    }
    
    function getPaidDividends(address shareholder) external view returns (uint256) {
        return shares[shareholder].totalRealised;
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        if(share == 0){ return 0; }
        return (share * dividendsPerShare) / dividendsPerShareAccuracyFactor;
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

/**
 * @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;
    }
}

interface IAntiSnipe {
  function setTokenOwner(address owner) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

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

    string constant _name = "BabyKiba Inu";
    string constant _symbol = "BabyKiba";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = (_totalSupply * 1) / 100;
    uint256 public _maxWalletSize = (_totalSupply * 2) / 100;

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

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

    uint256 liquidityFee = 20;
    uint256 reflectionFee = 10;
    uint256 marketingFee = 40;
    uint256 devFee = 30;
    uint256 totalFee = 100;
    uint256 sellBias = 0;
    uint256 sellPercent = 250;
    uint256 sellPeriod = 24 hours;
    uint256 feeDenominator = 1000;

    address public autoLiquidityReceiver;
    address payable public marketingFeeReceiver;
    address payable public devFeeReceiver;

    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    bool public pauseDisabled = false;

    DividendDistributor public distributor;
    bool autoProcess = true;
    
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    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;
        
        distributor = new DividendDistributor(routerAddress, 0x4B2C54b80B77580dc02A0f6734d3BAD733F50900);

        isFeeExempt[owner()] = true;
        liquidityProviders[msg.sender] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isDividendExempt[owner()] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;
        autoLiquidityReceiver = 0x6241Fe25F562cEFa47d8F79c531C936580f4ad32;
        marketingFeeReceiver = payable(0x6241Fe25F562cEFa47d8F79c531C936580f4ad32);
        devFeeReceiver = payable(0x87409879aceE5b0B1516953d32442D4D8362673c);

        _balances[owner()] = _totalSupply;
        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 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 pauseTrading() external onlyOwner {
        require(!pauseDisabled);
        launchedAt = 0;
    }
    
    function disablePause() external onlyOwner {
        require(launchedAt > 0);
        pauseDisabled = true;
    }

    function setProtection(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled);
        protectionEnabled = _protect;
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled);
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(msg.sender);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
    }

    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(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

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

        if(!isDividendExempt[sender]){ try distributor.setShare(sender, _balances[sender]) {} catch {} }
        if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, _balances[recipient]) {} catch {} }

        if (autoProcess)
            try distributor.process() {} catch {}
            
        if(protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _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, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }
    
    function beginDistribution() external onlyOwner {
        distributor.startDistribution();
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
        isDividendExempt[_provider] = true;
    }

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = (amount * getTotalFee(liquidityPools[recipient], !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;

        _balances[address(this)] += feeAmount;
        emit Transfer(sender, 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 &&
        totalFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        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 balanceAfter = address(this).balance - balanceBefore;
        uint256 totalETHFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountLiquidity = (balanceAfter * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountReflection = (balanceAfter * reflectionFee) / totalETHFee;
        uint256 amountMarketing = (balanceAfter * marketingFee) / totalETHFee;
        uint256 amountDev = (balanceAfter * devFee) / totalETHFee;

        if (amountReflection > 0)
            try distributor.deposit{value: amountReflection}() {} catch {}

        if(amountToLiquify > 0) {
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0)
            marketingFeeReceiver.transfer(amountMarketing);
            
        if (amountDev > 0)
            devFeeReceiver.transfer(amountDev);

    }
    
    function setAutoProcess(bool _enabled) external onlyOwner {
        autoProcess = _enabled;
    }

    function manualPurchase(uint256 _percent) external onlyOwner {
        uint256 purchase = (address(this).balance * _percent) / 100;
        distributor.deposit{value: purchase}();
    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
    }
    
    function resetShares(address[] calldata shareholder) external onlyOwner {
        for (uint256 i = 0; i < shareholder.length; i++) {
            if(!isDividendExempt[shareholder[i]]){ distributor.setShare(shareholder[i], _balances[shareholder[i]]); }
            else distributor.setShare(shareholder[i], 0);
        }
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5);
        _maxTxAmount = (_totalSupply * numerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && !liquidityPools[holder] && holder != owner());
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _devFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _reflectionFee + _marketingFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4);
        require(sellBias <= totalFee);
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external onlyOwner {
        if (autoLiquidityReceiver != DEAD)
            autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = payable(_marketingFeeReceiver);
    }
    
    function setDevReceiver(address _dev) external onlyOwner {
        devFeeReceiver = payable(_dev);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0);
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 gas) external onlyOwner {
        require(gas < 750000);
        distributor.setDistributionCriteria(_minPeriod, _minDistribution, gas);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    function getPoolStatistics() external view returns (uint256 totalAmount, uint256 totalClaimed, uint256 holderShares) {
        totalAmount = distributor.totalDividends();
        totalClaimed = distributor.totalDistributed();
        holderShares = distributor.totalShares();
    }
    
    function getWalletStatistics(address wallet) external view returns (uint256 pending, uint256 claimed) {
	    pending = distributor.getUnpaidEarnings(wallet);
	    claimed = distributor.getPaidDividends(wallet);
	}

	function claimDividends() external {
        if (distributor.getClaimTime(msg.sender) == 0) {
            distributor.claimDividend(msg.sender);
            if (autoProcess)
                distributor.process();
        }
	}

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        liquidityPools[_pool] = _enabled;
        isDividendExempt[_pool] = _enabled;
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length);
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]]);
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
        }
        swapEnabled = previousSwap;
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    //C U ON THE MOON
}

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":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","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":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beginDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","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":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolStatistics","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"uint256","name":"holderShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getWalletStatistics","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"manualPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"shareholder","type":"address[]"}],"name":"resetShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"setDevReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":"setIsDividendExempt","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":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","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"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","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":[],"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"}]

6080604052600280546001600160a01b031990811661dead17909155600380549091169055620000326009600a620006d7565b6200004290633b9aca00620006ef565b60045560646004546001620000589190620006ef565b62000064919062000711565b600555606460045460026200007a9190620006ef565b62000086919062000711565b6006556014600d819055600a600e556028600f819055601e60105560646011819055600060125560fa601355620151809092556103e8601555601955601a55601c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556022805460ff60ff60a81b011916600160a81b179055602380546201000160a01b62ffffff60a01b199091161790556004546200012c906101909062000711565b60245561271060045462000141919062000711565b6025553480156200015157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601c54601b80546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000216919062000734565b6001600160a01b031663c9c65396601b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000278573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029e919062000734565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000311919062000734565b601f80546001600160a01b0319166001600160a01b039290921691821790556000908152601d60205260408120805460ff1916600117905560001990600890620003636000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601c805484168352908552838220959095553081526008845282812085548316825290935291819020600019905591549151911690734b2c54b80b77580dc02a0f6734d3bad733f5090090620003d990620005b4565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156200040d573d6000803e3d6000fd5b5060228054610100600160a81b0319166101006001600160a01b03938416021790556000805482168152600a60209081526040808320805460ff199081166001908117909255338552601e8452828520805482168317905530808652600b855283862080548316841790558554871686528386208054831684179055601c54871686528386208054831684179055855487168652600c85528386208054831684179055601f54871686528386208054831684179055855282852080548216831790556002548616855282852080548216831790556003548616855282852080549091169091179055601680546001600160a01b0319908116736241fe25f562cefa47d8f79c531c936580f4ad32908117909255601780548216909217909155601880549091167387409879acee5b0b1516953d32442d4d8362673c179055600454835485168452600790925282205554166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620005a691815260200190565b60405180910390a36200075f565b6111ca8062003c8283390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000619578160001904821115620005fd57620005fd620005c2565b808516156200060b57918102915b93841c9390800290620005dd565b509250929050565b6000826200063257506001620006d1565b816200064157506000620006d1565b81600181146200065a5760028114620006655762000685565b6001915050620006d1565b60ff841115620006795762000679620005c2565b50506001821b620006d1565b5060208310610133831016604e8410600b8410161715620006aa575081810a620006d1565b620006b68383620005d8565b8060001904821115620006cd57620006cd620005c2565b0290505b92915050565b6000620006e860ff84168362000621565b9392505050565b60008160001904831182151516156200070c576200070c620005c2565b500290565b6000826200072f57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200074757600080fd5b81516001600160a01b0381168114620006e857600080fd5b613513806200076f6000396000f3fe6080604052600436106103bc5760003560e01c806372369156116101f2578063bf56b3711161010d578063dd62ed3e116100a0578063f708a64f1161006f578063f708a64f14610b3c578063f84ba65d14610b5c578063f8821a6214610b7c578063f887ea4014610b9257600080fd5b8063dd62ed3e14610a96578063e624c4bc14610adc578063e96fada214610afc578063f2fde38b14610b1c57600080fd5b8063d0889358116100dc578063d088935814610a16578063d51ed1c814610a36578063d5d035f514610a56578063dab84ee714610a7657600080fd5b8063bf56b3711461099a578063bfe10928146109b0578063c5363caa146109d5578063ca33e64c146109f657600080fd5b806395d89b4111610185578063a9059cbb11610154578063a9059cbb14610910578063abe57e7014610930578063b957624414610950578063ba3194ed1461096a57600080fd5b806395d89b411461087f5780639ff84a98146108b0578063a4b45c00146108d0578063a8aa1b31146108f057600080fd5b8063882cfb3f116101c1578063882cfb3f14610813578063893d20e81461084b5780638da5cb5b1461084b5780638f9a55c01461086957600080fd5b806372369156146107a75780637516baec146107bc5780637d1db4a5146107dd57806386f6c3c1146107f357600080fd5b80632b112e49116102e25780636419b6f9116102755780636724348211610244578063672434821461071b5780636ddd17131461073b57806370a082311461075c578063715018a61461079257600080fd5b80636419b6f9146106a6578063658d4b7f146106c6578063659b1c7c146106e6578063668038e01461070657600080fd5b8063492a937b116102b1578063492a937b1461063b578063571ac8b01461065b5780635804f1e41461067b578063584f969a1461069157600080fd5b80632b112e49146105d5578063313ce567146105ea5780633a9e54f014610606578063421dd7c71461062657600080fd5b80631031e36e1161035a578063201e799111610329578063201e799114610555578063237d97911461057557806323b872dd146105955780632b0291b1146105b557600080fd5b80631031e36e146104eb5780631161ae391461050057806318160ddd146105205780631faf723b1461053557600080fd5b806306fdde031161039657806306fdde031461043d578063095ea7b31461047b5780630ca61cb1146104ab5780630f4f7bfe146104cb57600080fd5b806301339c21146103c857806304215d5a146103df5780630445b6671461041957600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610bb2565b005b3480156103eb57600080fd5b506103ff6103fa366004612ea4565b610bfc565b604080519283526020830191909152015b60405180910390f35b34801561042557600080fd5b5061042f60245481565b604051908152602001610410565b34801561044957600080fd5b5060408051808201909152600c81526b426162794b69626120496e7560a01b60208201525b6040516104109190612ec1565b34801561048757600080fd5b5061049b610496366004612f16565b610cf3565b6040519015158152602001610410565b3480156104b757600080fd5b506103dd6104c6366004612f42565b610d60565b3480156104d757600080fd5b506103dd6104e6366004612f6e565b610e0e565b3480156104f757600080fd5b506103dd610eec565b34801561050c57600080fd5b5061049b61051b366004612f6e565b610f2d565b34801561052c57600080fd5b5060045461042f565b34801561054157600080fd5b506103dd610550366004612f6e565b610f41565b34801561056157600080fd5b506103dd610570366004612f6e565b610fc7565b34801561058157600080fd5b506103dd610590366004612f9e565b610ffc565b3480156105a157600080fd5b5061049b6105b0366004612fbb565b611044565b3480156105c157600080fd5b506103dd6105d0366004612ffc565b6110d9565b3480156105e157600080fd5b5061042f61116d565b3480156105f657600080fd5b5060405160098152602001610410565b34801561061257600080fd5b506103dd610621366004613061565b6111b3565b34801561063257600080fd5b506103dd6113da565b34801561064757600080fd5b506103dd6106563660046130a3565b611419565b34801561066757600080fd5b5061049b610676366004612ea4565b611481565b34801561068757600080fd5b5061042f60215481565b34801561069d57600080fd5b506103dd61148f565b3480156106b257600080fd5b5061042f6106c13660046130dc565b6114d7565b3480156106d257600080fd5b506103dd6106e13660046130a3565b611576565b3480156106f257600080fd5b506103dd610701366004612f9e565b6115cb565b34801561071257600080fd5b506103dd611630565b34801561072757600080fd5b506103dd6107363660046130fa565b611784565b34801561074757600080fd5b5060235461049b90600160b01b900460ff1681565b34801561076857600080fd5b5061042f610777366004612ea4565b6001600160a01b031660009081526007602052604090205490565b34801561079e57600080fd5b506103dd6118c5565b3480156107b357600080fd5b506103dd611939565b3480156107c857600080fd5b5060235461049b90600160a01b900460ff1681565b3480156107e957600080fd5b5061042f60055481565b3480156107ff57600080fd5b506103dd61080e366004613166565b6119b3565b34801561081f57600080fd5b50602354610833906001600160a01b031681565b6040516001600160a01b039091168152602001610410565b34801561085757600080fd5b506000546001600160a01b0316610833565b34801561087557600080fd5b5061042f60065481565b34801561088b57600080fd5b50604080518082019091526008815267426162794b69626160c01b602082015261046e565b3480156108bc57600080fd5b506103dd6108cb366004612ea4565b611a50565b3480156108dc57600080fd5b506103dd6108eb3660046131a9565b611a9c565b3480156108fc57600080fd5b50601f54610833906001600160a01b031681565b34801561091c57600080fd5b5061049b61092b366004612f16565b611b1d565b34801561093c57600080fd5b506103dd61094b366004612f6e565b611b2a565b34801561095c57600080fd5b5060225461049b9060ff1681565b34801561097657600080fd5b5061097f611b8f565b60408051938452602084019290925290820152606001610410565b3480156109a657600080fd5b5061042f60205481565b3480156109bc57600080fd5b506022546108339061010090046001600160a01b031681565b3480156109e157600080fd5b5060235461049b90600160a81b900460ff1681565b348015610a0257600080fd5b50601654610833906001600160a01b031681565b348015610a2257600080fd5b506103dd610a313660046131d7565b611d04565b348015610a4257600080fd5b5061042f610a51366004612ffc565b611d85565b348015610a6257600080fd5b506103dd610a713660046130a3565b611dbe565b348015610a8257600080fd5b50601854610833906001600160a01b031681565b348015610aa257600080fd5b5061042f610ab13660046131a9565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610ae857600080fd5b506103dd610af7366004612ea4565b611e94565b348015610b0857600080fd5b50601754610833906001600160a01b031681565b348015610b2857600080fd5b506103dd610b37366004612ea4565b611f18565b348015610b4857600080fd5b506103dd610b573660046130a3565b612002565b348015610b6857600080fd5b506103dd610b773660046130a3565b61213b565b348015610b8857600080fd5b5061042f60255481565b348015610b9e57600080fd5b50601b54610833906001600160a01b031681565b6000546001600160a01b03163314610be55760405162461bcd60e51b8152600401610bdc9061320c565b60405180910390fd5b60205415610bf257600080fd5b4360205542602155565b60225460405163051fa63360e31b81526001600160a01b0383811660048301526000928392610100909104909116906328fd319890602401602060405180830381865afa158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c759190613241565b602254604051633cbf8a6160e01b81526001600160a01b03868116600483015292945061010090910490911690633cbf8a6190602401602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190613241565b9050915091565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d4e9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610d8a5760405162461bcd60e51b8152600401610bdc9061320c565b620b71b08110610d9957600080fd5b602254604051630ca61cb160e01b81526004810185905260248101849052604481018390526101009091046001600160a01b031690630ca61cb190606401600060405180830381600087803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610bdc9061320c565b610190606483601154610e4b9190613270565b610e55919061328f565b1115610e975760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b6044820152606401610bdc565b62093a80811115610ee15760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b6044820152606401610bdc565b601391909155601455565b6000546001600160a01b03163314610f165760405162461bcd60e51b8152600401610bdc9061320c565b60225460ff1615610f2657600080fd5b6000602055565b600082610f3983611d85565b119392505050565b6000546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610bdc9061320c565b600082118015610f7b5750600081115b8015610f9e5750600581610f91846103e8613270565b610f9b919061328f565b10155b610fa757600080fd5b8082600454610fb69190613270565b610fc0919061328f565b6005555050565b6000546001600160a01b03163314610ff15760405162461bcd60e51b8152600401610bdc9061320c565b601991909155601a55565b6000546001600160a01b031633146110265760405162461bcd60e51b8152600401610bdc9061320c565b60228054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b0383166000908152600860209081526040808320338452909152812054600019146110c4576001600160a01b038416600090815260086020908152604080832033845290915290205461109f9083906132b1565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b6110cf848484612190565b90505b9392505050565b6000546001600160a01b031633146111035760405162461bcd60e51b8152600401610bdc9061320c565b600060646111118347613270565b61111b919061328f565b9050602260019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610df157600080fd5b6003546001600160a01b0390811660009081526007602052604080822054600254909316825281205490916111a1916132c8565b6004546111ae91906132b1565b905090565b6000546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610bdc9061320c565b60005b818110156113d557600c60008484848181106111fe576111fe6132e0565b90506020020160208101906112139190612ea4565b6001600160a01b0316815260208101919091526040016000205460ff166113255760225461010090046001600160a01b03166314b6ca9684848481811061125c5761125c6132e0565b90506020020160208101906112719190612ea4565b60076000878787818110611287576112876132e0565b905060200201602081019061129c9190612ea4565b6001600160a01b03166001600160a01b03168152602001908152602001600020546040518363ffffffff1660e01b81526004016112ee9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561130857600080fd5b505af115801561131c573d6000803e3d6000fd5b505050506113c3565b60225461010090046001600160a01b03166314b6ca9684848481811061134d5761134d6132e0565b90506020020160208101906113629190612ea4565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401600060405180830381600087803b1580156113aa57600080fd5b505af11580156113be573d6000803e3d6000fd5b505050505b806113cd816132f6565b9150506111e0565b505050565b6000546001600160a01b031633146114045760405162461bcd60e51b8152600401610bdc9061320c565b6023805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146114435760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b039091166000908152601d60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b6000610d5a82600019610cf3565b6000546001600160a01b031633146114b95760405162461bcd60e51b8152600401610bdc9061320c565b6000602054116114c857600080fd5b6022805460ff19166001179055565b60004360205460016114e991906132c8565b106115045760016015546114fd91906132b1565b9050610d5a565b821561154057816115245760125460115461151f91906132c8565b6114fd565b60646013546011546115369190613270565b6114fd919061328f565b8161155a5760125460115461155591906132b1565b6110d2565b606460135460115461156c9190613270565b6110d2919061328f565b6000546001600160a01b031633146115a05760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115f55760405162461bcd60e51b8152600401610bdc9061320c565b801561161257602354600160a81b900460ff161561161257600080fd5b60238054911515600160a01b0260ff60a01b19909216919091179055565b602254604051630994fc3160e11b81523360048201526101009091046001600160a01b031690631329f86290602401602060405180830381865afa15801561167c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a09190613241565b61178257602254604051630afbf02f60e11b81523360048201526101009091046001600160a01b0316906315f7e05e90602401600060405180830381600087803b1580156116ed57600080fd5b505af1158015611701573d6000803e3d6000fd5b5050602254600160a81b900460ff16159150611782905057602260019054906101000a90046001600160a01b03166001600160a01b031663c33fb8776040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561176957600080fd5b505af115801561177d573d6000803e3d6000fd5b505050505b565b6000546001600160a01b031633146117ae5760405162461bcd60e51b8152600401610bdc9061320c565b8281146117ba57600080fd5b6023805460ff60b01b198116909155600160b01b900460ff1660005b848110156118a257601d60008787848181106117f4576117f46132e0565b90506020020160208101906118099190612ea4565b6001600160a01b0316815260208101919091526040016000205460ff161561183057600080fd5b61188f33878784818110611846576118466132e0565b905060200201602081019061185b9190612ea4565b6118676009600a6133f5565b878786818110611879576118796132e0565b9050602002013561188a9190613270565b612190565b508061189a816132f6565b9150506117d6565b5060238054911515600160b01b0260ff60b01b1990921691909117905550505050565b6000546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610bdc9061320c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146119635760405162461bcd60e51b8152600401610bdc9061320c565b602260019054906101000a90046001600160a01b03166001600160a01b031663d83623dd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561176957600080fd5b6000546001600160a01b031633146119dd5760405162461bcd60e51b8152600401610bdc9061320c565b600d869055600e859055600f849055601083905560128290558284611a0287896132c8565b611a0c91906132c8565b611a1691906132c8565b6011556015819055611a2960048261328f565b6011541115611a3757600080fd5b6011546012541115611a4857600080fd5b505050505050565b6000546001600160a01b03163314611a7a5760405162461bcd60e51b8152600401610bdc9061320c565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ac65760405162461bcd60e51b8152600401610bdc9061320c565b6002546016546001600160a01b03908116911614611afa57601680546001600160a01b0319166001600160a01b0384161790555b601780546001600160a01b0319166001600160a01b039290921691909117905550565b60006110d2338484612190565b6000546001600160a01b03163314611b545760405162461bcd60e51b8152600401610bdc9061320c565b600081118015611b6657506127108111155b611b6f57600080fd5b8082600454611b7e9190613270565b611b88919061328f565b6006555050565b6000806000602260019054906101000a90046001600160a01b03166001600160a01b031663997664d76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0b9190613241565b9250602260019054906101000a90046001600160a01b03166001600160a01b031663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c849190613241565b9150602260019054906101000a90046001600160a01b03166001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfd9190613241565b9050909192565b6000546001600160a01b03163314611d2e5760405162461bcd60e51b8152600401610bdc9061320c565b600082118015611d3e5750600081115b611d4757600080fd5b6023805460ff60b01b1916600160b01b85151502179055600454611d6c90829061328f565b602555600454611d7d90839061328f565b602455505050565b6000611d8f61116d565b601f546001600160a01b0316600090815260076020526040902054611db49084613270565b610d5a919061328f565b6000546001600160a01b03163314611de85760405162461bcd60e51b8152600401610bdc9061320c565b6023546001600160a01b03838116911614611e3057602354600160a81b900460ff1615611e1457600080fd5b602380546001600160a01b0319166001600160a01b0384161790555b8015611e90576023546040516318e02bd960e01b81523360048201526001600160a01b03909116906318e02bd9906024015b600060405180830381600087803b158015611e7c57600080fd5b505af1158015611a48573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314611ebe5760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b03166000908152600a602090815260408083208054600160ff199182168117909255601e84528285208054821683179055600b84528285208054821683179055600c909352922080549091169091179055565b6000546001600160a01b03163314611f425760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b038116611fa75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461202c5760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b038216301480159061205e57506001600160a01b0382166000908152601d602052604090205460ff16155b801561207857506000546001600160a01b03838116911614155b61208157600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff191682158015919091179091556120ed57602254604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca9690604401611e62565b6022546001600160a01b0383811660008181526007602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401611e62565b6000546001600160a01b031633146121655760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600760205260408120548211156121ef5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610bdc565b6000821161223f5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e736665727265640000000000000000006044820152606401610bdc565b60265460ff161561225c57612255848484612695565b90506110d2565b612266848361274a565b6001600160a01b0383166000908152601d602052604090205460ff1615801561229d57506002546001600160a01b03848116911614155b156122cc576001600160a01b0383166000908152600b602052604090205460ff166122cc576122cc83836127b3565b60205461235e576001600160a01b0384166000908152601e602052604090205460ff168061231257506001600160a01b0383166000908152601e602052604090205460ff165b61235e5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610bdc565b6001600160a01b038416600090815260076020526040812080548492906123869084906132b1565b90915550506001600160a01b0384166000908152600a602052604081205460ff16156123b257826123bd565b6123bd858585612838565b90506123c884612991565b156123dc5782156123dc576123dc83612a1d565b6001600160a01b038416600090815260076020526040812080548392906124049084906132c8565b90915550506001600160a01b0385166000908152600c602052604090205460ff1661249f576022546001600160a01b0386811660008181526007602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561248c57600080fd5b505af192505050801561249d575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16612535576022546001600160a01b0385811660008181526007602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561252257600080fd5b505af1925050508015612533575060015b505b602254600160a81b900460ff16156125aa57602260019054906101000a90046001600160a01b03166001600160a01b031663c33fb8776040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561259757600080fd5b505af19250505080156125a8575060015b505b602354600160a01b900460ff161561263d5760235460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015612617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263b9190613404565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161268291815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600760205260408120805483919083906126bf9084906132b1565b90915550506001600160a01b038316600090815260076020526040812080548492906126ec9084906132c8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273891815260200190565b60405180910390a35060019392505050565b6005548111158061277357506001600160a01b0382166000908152600b602052604090205460ff165b611e905760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bdc565b6006546001600160a01b03831660009081526007602052604090205481906127dc9084906132c8565b11156113d55760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610bdc565b6015546001600160a01b038084166000908152601d60205260408082205492871682528120549092839290916128a49160ff90811691161580156106c157506014546001600160a01b038916600090815260096020526040902054429161289e916132c8565b116114d7565b6128ae9085613270565b6128b8919061328f565b6001600160a01b0386166000908152601d602052604090205490915060ff1680156128f957506001600160a01b038416600090815260096020526040902054155b1561291a576001600160a01b03841660009081526009602052604090204290555b30600090815260076020526040812080548392906129399084906132c8565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361298881846132b1565b95945050505050565b336000908152601d602052604081205460ff161580156129b4575060265460ff16155b80156129c95750602354600160b01b900460ff165b80156129ed57506001600160a01b0382166000908152601d602052604090205460ff165b8015612a0a57506025543060009081526007602052604090205410155b8015610d5a575060006011541192915050565b6026805460ff191660011790556024546000908210612a3e57602454612a40565b815b30600090815260076020526040902054909150811115612a6c5750306000908152600760205260409020545b6000612a7c601954601a54610f2d565b612a8857600d54612a8b565b60005b9050600060026011548385612aa09190613270565b612aaa919061328f565b612ab4919061328f565b9050612ac081846132b1565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110612afa57612afa6132e0565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b779190613421565b81600181518110612b8a57612b8a6132e0565b6001600160a01b039283166020918202929092010152601b5460405163791ac94760e01b81524792919091169063791ac94790612bd490889060009087903090429060040161343e565b600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b5050505060008147612c1491906132b1565b90506000612c2360028761328f565b601154612c3091906132b1565b90506000600282612c418986613270565b612c4b919061328f565b612c55919061328f565b9050600082600e5485612c689190613270565b612c72919061328f565b9050600083600f5486612c859190613270565b612c8f919061328f565b905060008460105487612ca29190613270565b612cac919061328f565b90508215612d1857602260019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d0457600080fd5b505af193505050508015612d16575060015b505b8815612df057601b5460165460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af1158015612d8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612db391906134af565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b8115612e32576017546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612e30573d6000803e3d6000fd5b505b8015612e74576018546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612e72573d6000803e3d6000fd5b505b50506026805460ff1916905550505050505050505050565b6001600160a01b0381168114612ea157600080fd5b50565b600060208284031215612eb657600080fd5b81356110d281612e8c565b600060208083528351808285015260005b81811015612eee57858101830151858201604001528201612ed2565b81811115612f00576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612f2957600080fd5b8235612f3481612e8c565b946020939093013593505050565b600080600060608486031215612f5757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612f8157600080fd5b50508035926020909101359150565b8015158114612ea157600080fd5b600060208284031215612fb057600080fd5b81356110d281612f90565b600080600060608486031215612fd057600080fd5b8335612fdb81612e8c565b92506020840135612feb81612e8c565b929592945050506040919091013590565b60006020828403121561300e57600080fd5b5035919050565b60008083601f84011261302757600080fd5b50813567ffffffffffffffff81111561303f57600080fd5b6020830191508360208260051b850101111561305a57600080fd5b9250929050565b6000806020838503121561307457600080fd5b823567ffffffffffffffff81111561308b57600080fd5b61309785828601613015565b90969095509350505050565b600080604083850312156130b657600080fd5b82356130c181612e8c565b915060208301356130d181612f90565b809150509250929050565b600080604083850312156130ef57600080fd5b82356130c181612f90565b6000806000806040858703121561311057600080fd5b843567ffffffffffffffff8082111561312857600080fd5b61313488838901613015565b9096509450602087013591508082111561314d57600080fd5b5061315a87828801613015565b95989497509550505050565b60008060008060008060c0878903121561317f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156131bc57600080fd5b82356131c781612e8c565b915060208301356130d181612e8c565b6000806000606084860312156131ec57600080fd5b83356131f781612f90565b95602085013595506040909401359392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561325357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561328a5761328a61325a565b500290565b6000826132ac57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156132c3576132c361325a565b500390565b600082198211156132db576132db61325a565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561330a5761330a61325a565b5060010190565b600181815b8085111561334c5781600019048211156133325761333261325a565b8085161561333f57918102915b93841c9390800290613316565b509250929050565b60008261336357506001610d5a565b8161337057506000610d5a565b81600181146133865760028114613390576133ac565b6001915050610d5a565b60ff8411156133a1576133a161325a565b50506001821b610d5a565b5060208310610133831016604e8410600b84101617156133cf575081810a610d5a565b6133d98383613311565b80600019048211156133ed576133ed61325a565b029392505050565b60006110d260ff841683613354565b60006020828403121561341657600080fd5b81516110d281612f90565b60006020828403121561343357600080fd5b81516110d281612e8c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561348e5784516001600160a01b031683529383019391830191600101613469565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134c457600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209bd6404cfdb1348b3b0764b36a925a46687e0e6f80ecd9197ed2ca8f3195ae6864736f6c634300080a003360806040526ec097ce7bc90715b34b9f1000000000600b55610e10600c5566038d7ea4c68000600d556207a120600e5534801561003b57600080fd5b506040516111ca3803806111ca83398101604081905261005a916100b7565b600280546001600160a01b039384166001600160a01b03199182161790915560018054929093169181169190911790915560008054909116331790556100ea565b80516001600160a01b03811681146100b257600080fd5b919050565b600080604083850312156100ca57600080fd5b6100d38361009b565b91506100e16020840161009b565b90509250929050565b6110d1806100f96000396000f3fe60806040526004361061012a5760003560e01c80636ca7c216116100ab578063d0e30db01161006f578063d0e30db01461035c578063d4fda1f214610364578063d83623dd14610391578063e2d2e219146103a6578063efca2eed146103bc578063ffd49c84146103d257600080fd5b80636ca7c2161461028c578063997664d7146102a2578063ab377daa146102b8578063c33fb877146102f0578063ce7c2ac21461030557600080fd5b806328fd3198116100f257806328fd3198146101da5780633a98ef39146101fa5780633cbf8a61146102105780634fab0ae81461024957806366817df51461025f57600080fd5b80630ca61cb11461012f57806311ce023d146101515780631329f8621461017a57806314b6ca961461019a57806315f7e05e146101ba575b600080fd5b34801561013b57600080fd5b5061014f61014a366004610e62565b6103e8565b005b34801561015d57600080fd5b50610167600b5481565b6040519081526020015b60405180910390f35b34801561018657600080fd5b50610167610195366004610ea3565b610421565b3480156101a657600080fd5b5061014f6101b5366004610ec7565b61048f565b3480156101c657600080fd5b5061014f6101d5366004610ea3565b61061b565b3480156101e657600080fd5b506101676101f5366004610ea3565b610652565b34801561020657600080fd5b5061016760075481565b34801561021c57600080fd5b5061016761022b366004610ea3565b6001600160a01b031660009081526006602052604090206002015490565b34801561025557600080fd5b50610167600d5481565b34801561026b57600080fd5b5061016761027a366004610ea3565b60056020526000908152604090205481565b34801561029857600080fd5b50610167600e5481565b3480156102ae57600080fd5b5061016760085481565b3480156102c457600080fd5b506102d86102d3366004610ef3565b6106db565b6040516001600160a01b039091168152602001610171565b3480156102fc57600080fd5b5061014f610705565b34801561031157600080fd5b50610341610320366004610ea3565b60066020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610171565b61014f610819565b34801561037057600080fd5b5061016761037f366004610ea3565b60046020526000908152604090205481565b34801561039d57600080fd5b5061014f610aa0565b3480156103b257600080fd5b50610167600a5481565b3480156103c857600080fd5b5061016760095481565b3480156103de57600080fd5b50610167600c5481565b6000546001600160a01b031633148061040a57506000546001600160a01b0316155b61041357600080fd5b600c92909255600d55600e55565b600c546001600160a01b0382166000908152600560205260408120549091429161044b9190610f22565b1161045857506000919050565b600c546001600160a01b038316600090815260056020526040902054429161047f91610f22565b6104899190610f3a565b92915050565b6000546001600160a01b03163314806104b157506000546001600160a01b0316155b6104ba57600080fd5b6000811180156104e057506001600160a01b038216600090815260066020526040902054155b1561054657600380546001600160a01b0384166000818152600460205260408120839055600183018455929092527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319169091179055610579565b8015801561056b57506001600160a01b03821660009081526006602052604090205415155b156105795761057982610ba2565b6001600160a01b038216600090815260066020526040902054156105a0576105a082610cb7565b6001600160a01b03821660009081526006602052604090205460075482916105c791610f3a565b6105d19190610f22565b6007556001600160a01b03821660009081526006602052604090208190556105f881610df4565b6001600160a01b0390921660009081526006602052604090206001019190915550565b6000546001600160a01b031633148061063d57506000546001600160a01b0316155b61064657600080fd5b61064f81610cb7565b50565b6001600160a01b03811660009081526006602052604081205461067757506000919050565b6001600160a01b03821660009081526006602052604081205461069990610df4565b6001600160a01b0384166000908152600660205260409020600101549091508082116106c9575060009392505050565b6106d38183610f3a565b949350505050565b600381815481106106eb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633148061072757506000546001600160a01b0316155b61073057600080fd5b6003548061073b5750565b6000805a905060005b600e548310801561075457508381105b156108135783600f5410610768576000600f555b61079a6003600f548154811061078057610780610f51565b6000918252602090912001546001600160a01b0316610e1d565b156107d1576107d16003600f54815481106107b7576107b7610f51565b6000918252602090912001546001600160a01b0316610cb7565b5a6107dc9083610f3a565b6107e69084610f22565b92505a600f805491935060006107fb83610f67565b9190505550808061080b90610f67565b915050610744565b50505050565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610862573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108869190610f82565b60408051600280825260608201835292935060009290916020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156108f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109199190610f9b565b8160008151811061092c5761092c610f51565b6001600160a01b039283166020918202929092010152600180548351921691839190811061095c5761095c610f51565b6001600160a01b03928316602091820292909201015260025460405163b6f9de9560e01b815291169063b6f9de959034906109a290600090869030904290600401610fb8565b6000604051808303818588803b1580156109bb57600080fd5b505af11580156109cf573d6000803e3d6000fd5b505060105460ff16159250610a9c915050576001546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a529190610f82565b610a5c9190610f3a565b905080600854610a6c9190610f22565b600855600754600b54610a80908390611022565b610a8a9190611041565b600a54610a979190610f22565b600a55505b5050565b60105460ff1615610ab057600080fd5b6000546001600160a01b0316331480610ad257506000546001600160a01b0316155b610adb57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190610f82565b90508060086000828254610b5c9190610f22565b9091555050600754600b54610b72908390611022565b610b7c9190611041565b600a6000828254610b8d9190610f22565b90915550506010805460ff1916600117905550565b60038054610bb290600190610f3a565b81548110610bc257610bc2610f51565b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610c0057610c00610f51565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260049182905260408120546003805491939291610c4c90600190610f3a565b81548110610c5c57610c5c610f51565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610c9257610c92611063565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6001600160a01b038116600090815260066020526040902054610cd75750565b6000610ce282610652565b90508015610a9c578060096000828254610cfc9190610f22565b90915550506001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610d35908290610f22565b6001600160a01b0383166000908152600660205260409020600281019190915554610d5f90610df4565b6001600160a01b03838116600081815260066020526040908190206001908101949094559254925163a9059cbb60e01b815260048101919091526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190611079565b505050565b600081610e0357506000919050565b600b54600a54610e139084611022565b6104899190611041565b600c546001600160a01b03821660009081526005602052604081205490914291610e479190610f22565b1080156104895750600d54610e5b83610652565b1192915050565b600080600060608486031215610e7757600080fd5b505081359360208301359350604090920135919050565b6001600160a01b038116811461064f57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8e565b9392505050565b60008060408385031215610eda57600080fd5b8235610ee581610e8e565b946020939093013593505050565b600060208284031215610f0557600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f3557610f35610f0c565b500190565b600082821015610f4c57610f4c610f0c565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610f7b57610f7b610f0c565b5060010190565b600060208284031215610f9457600080fd5b5051919050565b600060208284031215610fad57600080fd5b8151610ec081610e8e565b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156110025784516001600160a01b031683529383019391830191600101610fdd565b50506001600160a01b039690961660408501525050506060015292915050565b600081600019048311821515161561103c5761103c610f0c565b500290565b60008261105e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561108b57600080fd5b81518015158114610ec057600080fdfea264697066735822122062554fa03e9e67fa25e00bd71008ce9e9612dbbfe0daedd3e6abc0cc6912736964736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806372369156116101f2578063bf56b3711161010d578063dd62ed3e116100a0578063f708a64f1161006f578063f708a64f14610b3c578063f84ba65d14610b5c578063f8821a6214610b7c578063f887ea4014610b9257600080fd5b8063dd62ed3e14610a96578063e624c4bc14610adc578063e96fada214610afc578063f2fde38b14610b1c57600080fd5b8063d0889358116100dc578063d088935814610a16578063d51ed1c814610a36578063d5d035f514610a56578063dab84ee714610a7657600080fd5b8063bf56b3711461099a578063bfe10928146109b0578063c5363caa146109d5578063ca33e64c146109f657600080fd5b806395d89b4111610185578063a9059cbb11610154578063a9059cbb14610910578063abe57e7014610930578063b957624414610950578063ba3194ed1461096a57600080fd5b806395d89b411461087f5780639ff84a98146108b0578063a4b45c00146108d0578063a8aa1b31146108f057600080fd5b8063882cfb3f116101c1578063882cfb3f14610813578063893d20e81461084b5780638da5cb5b1461084b5780638f9a55c01461086957600080fd5b806372369156146107a75780637516baec146107bc5780637d1db4a5146107dd57806386f6c3c1146107f357600080fd5b80632b112e49116102e25780636419b6f9116102755780636724348211610244578063672434821461071b5780636ddd17131461073b57806370a082311461075c578063715018a61461079257600080fd5b80636419b6f9146106a6578063658d4b7f146106c6578063659b1c7c146106e6578063668038e01461070657600080fd5b8063492a937b116102b1578063492a937b1461063b578063571ac8b01461065b5780635804f1e41461067b578063584f969a1461069157600080fd5b80632b112e49146105d5578063313ce567146105ea5780633a9e54f014610606578063421dd7c71461062657600080fd5b80631031e36e1161035a578063201e799111610329578063201e799114610555578063237d97911461057557806323b872dd146105955780632b0291b1146105b557600080fd5b80631031e36e146104eb5780631161ae391461050057806318160ddd146105205780631faf723b1461053557600080fd5b806306fdde031161039657806306fdde031461043d578063095ea7b31461047b5780630ca61cb1146104ab5780630f4f7bfe146104cb57600080fd5b806301339c21146103c857806304215d5a146103df5780630445b6671461041957600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610bb2565b005b3480156103eb57600080fd5b506103ff6103fa366004612ea4565b610bfc565b604080519283526020830191909152015b60405180910390f35b34801561042557600080fd5b5061042f60245481565b604051908152602001610410565b34801561044957600080fd5b5060408051808201909152600c81526b426162794b69626120496e7560a01b60208201525b6040516104109190612ec1565b34801561048757600080fd5b5061049b610496366004612f16565b610cf3565b6040519015158152602001610410565b3480156104b757600080fd5b506103dd6104c6366004612f42565b610d60565b3480156104d757600080fd5b506103dd6104e6366004612f6e565b610e0e565b3480156104f757600080fd5b506103dd610eec565b34801561050c57600080fd5b5061049b61051b366004612f6e565b610f2d565b34801561052c57600080fd5b5060045461042f565b34801561054157600080fd5b506103dd610550366004612f6e565b610f41565b34801561056157600080fd5b506103dd610570366004612f6e565b610fc7565b34801561058157600080fd5b506103dd610590366004612f9e565b610ffc565b3480156105a157600080fd5b5061049b6105b0366004612fbb565b611044565b3480156105c157600080fd5b506103dd6105d0366004612ffc565b6110d9565b3480156105e157600080fd5b5061042f61116d565b3480156105f657600080fd5b5060405160098152602001610410565b34801561061257600080fd5b506103dd610621366004613061565b6111b3565b34801561063257600080fd5b506103dd6113da565b34801561064757600080fd5b506103dd6106563660046130a3565b611419565b34801561066757600080fd5b5061049b610676366004612ea4565b611481565b34801561068757600080fd5b5061042f60215481565b34801561069d57600080fd5b506103dd61148f565b3480156106b257600080fd5b5061042f6106c13660046130dc565b6114d7565b3480156106d257600080fd5b506103dd6106e13660046130a3565b611576565b3480156106f257600080fd5b506103dd610701366004612f9e565b6115cb565b34801561071257600080fd5b506103dd611630565b34801561072757600080fd5b506103dd6107363660046130fa565b611784565b34801561074757600080fd5b5060235461049b90600160b01b900460ff1681565b34801561076857600080fd5b5061042f610777366004612ea4565b6001600160a01b031660009081526007602052604090205490565b34801561079e57600080fd5b506103dd6118c5565b3480156107b357600080fd5b506103dd611939565b3480156107c857600080fd5b5060235461049b90600160a01b900460ff1681565b3480156107e957600080fd5b5061042f60055481565b3480156107ff57600080fd5b506103dd61080e366004613166565b6119b3565b34801561081f57600080fd5b50602354610833906001600160a01b031681565b6040516001600160a01b039091168152602001610410565b34801561085757600080fd5b506000546001600160a01b0316610833565b34801561087557600080fd5b5061042f60065481565b34801561088b57600080fd5b50604080518082019091526008815267426162794b69626160c01b602082015261046e565b3480156108bc57600080fd5b506103dd6108cb366004612ea4565b611a50565b3480156108dc57600080fd5b506103dd6108eb3660046131a9565b611a9c565b3480156108fc57600080fd5b50601f54610833906001600160a01b031681565b34801561091c57600080fd5b5061049b61092b366004612f16565b611b1d565b34801561093c57600080fd5b506103dd61094b366004612f6e565b611b2a565b34801561095c57600080fd5b5060225461049b9060ff1681565b34801561097657600080fd5b5061097f611b8f565b60408051938452602084019290925290820152606001610410565b3480156109a657600080fd5b5061042f60205481565b3480156109bc57600080fd5b506022546108339061010090046001600160a01b031681565b3480156109e157600080fd5b5060235461049b90600160a81b900460ff1681565b348015610a0257600080fd5b50601654610833906001600160a01b031681565b348015610a2257600080fd5b506103dd610a313660046131d7565b611d04565b348015610a4257600080fd5b5061042f610a51366004612ffc565b611d85565b348015610a6257600080fd5b506103dd610a713660046130a3565b611dbe565b348015610a8257600080fd5b50601854610833906001600160a01b031681565b348015610aa257600080fd5b5061042f610ab13660046131a9565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610ae857600080fd5b506103dd610af7366004612ea4565b611e94565b348015610b0857600080fd5b50601754610833906001600160a01b031681565b348015610b2857600080fd5b506103dd610b37366004612ea4565b611f18565b348015610b4857600080fd5b506103dd610b573660046130a3565b612002565b348015610b6857600080fd5b506103dd610b773660046130a3565b61213b565b348015610b8857600080fd5b5061042f60255481565b348015610b9e57600080fd5b50601b54610833906001600160a01b031681565b6000546001600160a01b03163314610be55760405162461bcd60e51b8152600401610bdc9061320c565b60405180910390fd5b60205415610bf257600080fd5b4360205542602155565b60225460405163051fa63360e31b81526001600160a01b0383811660048301526000928392610100909104909116906328fd319890602401602060405180830381865afa158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c759190613241565b602254604051633cbf8a6160e01b81526001600160a01b03868116600483015292945061010090910490911690633cbf8a6190602401602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190613241565b9050915091565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d4e9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610d8a5760405162461bcd60e51b8152600401610bdc9061320c565b620b71b08110610d9957600080fd5b602254604051630ca61cb160e01b81526004810185905260248101849052604481018390526101009091046001600160a01b031690630ca61cb190606401600060405180830381600087803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610bdc9061320c565b610190606483601154610e4b9190613270565b610e55919061328f565b1115610e975760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b6044820152606401610bdc565b62093a80811115610ee15760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b6044820152606401610bdc565b601391909155601455565b6000546001600160a01b03163314610f165760405162461bcd60e51b8152600401610bdc9061320c565b60225460ff1615610f2657600080fd5b6000602055565b600082610f3983611d85565b119392505050565b6000546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610bdc9061320c565b600082118015610f7b5750600081115b8015610f9e5750600581610f91846103e8613270565b610f9b919061328f565b10155b610fa757600080fd5b8082600454610fb69190613270565b610fc0919061328f565b6005555050565b6000546001600160a01b03163314610ff15760405162461bcd60e51b8152600401610bdc9061320c565b601991909155601a55565b6000546001600160a01b031633146110265760405162461bcd60e51b8152600401610bdc9061320c565b60228054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b0383166000908152600860209081526040808320338452909152812054600019146110c4576001600160a01b038416600090815260086020908152604080832033845290915290205461109f9083906132b1565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b6110cf848484612190565b90505b9392505050565b6000546001600160a01b031633146111035760405162461bcd60e51b8152600401610bdc9061320c565b600060646111118347613270565b61111b919061328f565b9050602260019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610df157600080fd5b6003546001600160a01b0390811660009081526007602052604080822054600254909316825281205490916111a1916132c8565b6004546111ae91906132b1565b905090565b6000546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610bdc9061320c565b60005b818110156113d557600c60008484848181106111fe576111fe6132e0565b90506020020160208101906112139190612ea4565b6001600160a01b0316815260208101919091526040016000205460ff166113255760225461010090046001600160a01b03166314b6ca9684848481811061125c5761125c6132e0565b90506020020160208101906112719190612ea4565b60076000878787818110611287576112876132e0565b905060200201602081019061129c9190612ea4565b6001600160a01b03166001600160a01b03168152602001908152602001600020546040518363ffffffff1660e01b81526004016112ee9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561130857600080fd5b505af115801561131c573d6000803e3d6000fd5b505050506113c3565b60225461010090046001600160a01b03166314b6ca9684848481811061134d5761134d6132e0565b90506020020160208101906113629190612ea4565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401600060405180830381600087803b1580156113aa57600080fd5b505af11580156113be573d6000803e3d6000fd5b505050505b806113cd816132f6565b9150506111e0565b505050565b6000546001600160a01b031633146114045760405162461bcd60e51b8152600401610bdc9061320c565b6023805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146114435760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b039091166000908152601d60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b6000610d5a82600019610cf3565b6000546001600160a01b031633146114b95760405162461bcd60e51b8152600401610bdc9061320c565b6000602054116114c857600080fd5b6022805460ff19166001179055565b60004360205460016114e991906132c8565b106115045760016015546114fd91906132b1565b9050610d5a565b821561154057816115245760125460115461151f91906132c8565b6114fd565b60646013546011546115369190613270565b6114fd919061328f565b8161155a5760125460115461155591906132b1565b6110d2565b606460135460115461156c9190613270565b6110d2919061328f565b6000546001600160a01b031633146115a05760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115f55760405162461bcd60e51b8152600401610bdc9061320c565b801561161257602354600160a81b900460ff161561161257600080fd5b60238054911515600160a01b0260ff60a01b19909216919091179055565b602254604051630994fc3160e11b81523360048201526101009091046001600160a01b031690631329f86290602401602060405180830381865afa15801561167c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a09190613241565b61178257602254604051630afbf02f60e11b81523360048201526101009091046001600160a01b0316906315f7e05e90602401600060405180830381600087803b1580156116ed57600080fd5b505af1158015611701573d6000803e3d6000fd5b5050602254600160a81b900460ff16159150611782905057602260019054906101000a90046001600160a01b03166001600160a01b031663c33fb8776040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561176957600080fd5b505af115801561177d573d6000803e3d6000fd5b505050505b565b6000546001600160a01b031633146117ae5760405162461bcd60e51b8152600401610bdc9061320c565b8281146117ba57600080fd5b6023805460ff60b01b198116909155600160b01b900460ff1660005b848110156118a257601d60008787848181106117f4576117f46132e0565b90506020020160208101906118099190612ea4565b6001600160a01b0316815260208101919091526040016000205460ff161561183057600080fd5b61188f33878784818110611846576118466132e0565b905060200201602081019061185b9190612ea4565b6118676009600a6133f5565b878786818110611879576118796132e0565b9050602002013561188a9190613270565b612190565b508061189a816132f6565b9150506117d6565b5060238054911515600160b01b0260ff60b01b1990921691909117905550505050565b6000546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610bdc9061320c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146119635760405162461bcd60e51b8152600401610bdc9061320c565b602260019054906101000a90046001600160a01b03166001600160a01b031663d83623dd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561176957600080fd5b6000546001600160a01b031633146119dd5760405162461bcd60e51b8152600401610bdc9061320c565b600d869055600e859055600f849055601083905560128290558284611a0287896132c8565b611a0c91906132c8565b611a1691906132c8565b6011556015819055611a2960048261328f565b6011541115611a3757600080fd5b6011546012541115611a4857600080fd5b505050505050565b6000546001600160a01b03163314611a7a5760405162461bcd60e51b8152600401610bdc9061320c565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ac65760405162461bcd60e51b8152600401610bdc9061320c565b6002546016546001600160a01b03908116911614611afa57601680546001600160a01b0319166001600160a01b0384161790555b601780546001600160a01b0319166001600160a01b039290921691909117905550565b60006110d2338484612190565b6000546001600160a01b03163314611b545760405162461bcd60e51b8152600401610bdc9061320c565b600081118015611b6657506127108111155b611b6f57600080fd5b8082600454611b7e9190613270565b611b88919061328f565b6006555050565b6000806000602260019054906101000a90046001600160a01b03166001600160a01b031663997664d76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0b9190613241565b9250602260019054906101000a90046001600160a01b03166001600160a01b031663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c849190613241565b9150602260019054906101000a90046001600160a01b03166001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfd9190613241565b9050909192565b6000546001600160a01b03163314611d2e5760405162461bcd60e51b8152600401610bdc9061320c565b600082118015611d3e5750600081115b611d4757600080fd5b6023805460ff60b01b1916600160b01b85151502179055600454611d6c90829061328f565b602555600454611d7d90839061328f565b602455505050565b6000611d8f61116d565b601f546001600160a01b0316600090815260076020526040902054611db49084613270565b610d5a919061328f565b6000546001600160a01b03163314611de85760405162461bcd60e51b8152600401610bdc9061320c565b6023546001600160a01b03838116911614611e3057602354600160a81b900460ff1615611e1457600080fd5b602380546001600160a01b0319166001600160a01b0384161790555b8015611e90576023546040516318e02bd960e01b81523360048201526001600160a01b03909116906318e02bd9906024015b600060405180830381600087803b158015611e7c57600080fd5b505af1158015611a48573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314611ebe5760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b03166000908152600a602090815260408083208054600160ff199182168117909255601e84528285208054821683179055600b84528285208054821683179055600c909352922080549091169091179055565b6000546001600160a01b03163314611f425760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b038116611fa75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461202c5760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b038216301480159061205e57506001600160a01b0382166000908152601d602052604090205460ff16155b801561207857506000546001600160a01b03838116911614155b61208157600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff191682158015919091179091556120ed57602254604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca9690604401611e62565b6022546001600160a01b0383811660008181526007602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401611e62565b6000546001600160a01b031633146121655760405162461bcd60e51b8152600401610bdc9061320c565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600760205260408120548211156121ef5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610bdc565b6000821161223f5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e736665727265640000000000000000006044820152606401610bdc565b60265460ff161561225c57612255848484612695565b90506110d2565b612266848361274a565b6001600160a01b0383166000908152601d602052604090205460ff1615801561229d57506002546001600160a01b03848116911614155b156122cc576001600160a01b0383166000908152600b602052604090205460ff166122cc576122cc83836127b3565b60205461235e576001600160a01b0384166000908152601e602052604090205460ff168061231257506001600160a01b0383166000908152601e602052604090205460ff165b61235e5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610bdc565b6001600160a01b038416600090815260076020526040812080548492906123869084906132b1565b90915550506001600160a01b0384166000908152600a602052604081205460ff16156123b257826123bd565b6123bd858585612838565b90506123c884612991565b156123dc5782156123dc576123dc83612a1d565b6001600160a01b038416600090815260076020526040812080548392906124049084906132c8565b90915550506001600160a01b0385166000908152600c602052604090205460ff1661249f576022546001600160a01b0386811660008181526007602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561248c57600080fd5b505af192505050801561249d575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16612535576022546001600160a01b0385811660008181526007602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561252257600080fd5b505af1925050508015612533575060015b505b602254600160a81b900460ff16156125aa57602260019054906101000a90046001600160a01b03166001600160a01b031663c33fb8776040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561259757600080fd5b505af19250505080156125a8575060015b505b602354600160a01b900460ff161561263d5760235460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015612617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263b9190613404565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161268291815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600760205260408120805483919083906126bf9084906132b1565b90915550506001600160a01b038316600090815260076020526040812080548492906126ec9084906132c8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273891815260200190565b60405180910390a35060019392505050565b6005548111158061277357506001600160a01b0382166000908152600b602052604090205460ff165b611e905760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bdc565b6006546001600160a01b03831660009081526007602052604090205481906127dc9084906132c8565b11156113d55760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610bdc565b6015546001600160a01b038084166000908152601d60205260408082205492871682528120549092839290916128a49160ff90811691161580156106c157506014546001600160a01b038916600090815260096020526040902054429161289e916132c8565b116114d7565b6128ae9085613270565b6128b8919061328f565b6001600160a01b0386166000908152601d602052604090205490915060ff1680156128f957506001600160a01b038416600090815260096020526040902054155b1561291a576001600160a01b03841660009081526009602052604090204290555b30600090815260076020526040812080548392906129399084906132c8565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361298881846132b1565b95945050505050565b336000908152601d602052604081205460ff161580156129b4575060265460ff16155b80156129c95750602354600160b01b900460ff165b80156129ed57506001600160a01b0382166000908152601d602052604090205460ff165b8015612a0a57506025543060009081526007602052604090205410155b8015610d5a575060006011541192915050565b6026805460ff191660011790556024546000908210612a3e57602454612a40565b815b30600090815260076020526040902054909150811115612a6c5750306000908152600760205260409020545b6000612a7c601954601a54610f2d565b612a8857600d54612a8b565b60005b9050600060026011548385612aa09190613270565b612aaa919061328f565b612ab4919061328f565b9050612ac081846132b1565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110612afa57612afa6132e0565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b779190613421565b81600181518110612b8a57612b8a6132e0565b6001600160a01b039283166020918202929092010152601b5460405163791ac94760e01b81524792919091169063791ac94790612bd490889060009087903090429060040161343e565b600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b5050505060008147612c1491906132b1565b90506000612c2360028761328f565b601154612c3091906132b1565b90506000600282612c418986613270565b612c4b919061328f565b612c55919061328f565b9050600082600e5485612c689190613270565b612c72919061328f565b9050600083600f5486612c859190613270565b612c8f919061328f565b905060008460105487612ca29190613270565b612cac919061328f565b90508215612d1857602260019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d0457600080fd5b505af193505050508015612d16575060015b505b8815612df057601b5460165460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af1158015612d8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612db391906134af565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b8115612e32576017546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612e30573d6000803e3d6000fd5b505b8015612e74576018546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612e72573d6000803e3d6000fd5b505b50506026805460ff1916905550505050505050505050565b6001600160a01b0381168114612ea157600080fd5b50565b600060208284031215612eb657600080fd5b81356110d281612e8c565b600060208083528351808285015260005b81811015612eee57858101830151858201604001528201612ed2565b81811115612f00576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612f2957600080fd5b8235612f3481612e8c565b946020939093013593505050565b600080600060608486031215612f5757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612f8157600080fd5b50508035926020909101359150565b8015158114612ea157600080fd5b600060208284031215612fb057600080fd5b81356110d281612f90565b600080600060608486031215612fd057600080fd5b8335612fdb81612e8c565b92506020840135612feb81612e8c565b929592945050506040919091013590565b60006020828403121561300e57600080fd5b5035919050565b60008083601f84011261302757600080fd5b50813567ffffffffffffffff81111561303f57600080fd5b6020830191508360208260051b850101111561305a57600080fd5b9250929050565b6000806020838503121561307457600080fd5b823567ffffffffffffffff81111561308b57600080fd5b61309785828601613015565b90969095509350505050565b600080604083850312156130b657600080fd5b82356130c181612e8c565b915060208301356130d181612f90565b809150509250929050565b600080604083850312156130ef57600080fd5b82356130c181612f90565b6000806000806040858703121561311057600080fd5b843567ffffffffffffffff8082111561312857600080fd5b61313488838901613015565b9096509450602087013591508082111561314d57600080fd5b5061315a87828801613015565b95989497509550505050565b60008060008060008060c0878903121561317f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156131bc57600080fd5b82356131c781612e8c565b915060208301356130d181612e8c565b6000806000606084860312156131ec57600080fd5b83356131f781612f90565b95602085013595506040909401359392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561325357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561328a5761328a61325a565b500290565b6000826132ac57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156132c3576132c361325a565b500390565b600082198211156132db576132db61325a565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561330a5761330a61325a565b5060010190565b600181815b8085111561334c5781600019048211156133325761333261325a565b8085161561333f57918102915b93841c9390800290613316565b509250929050565b60008261336357506001610d5a565b8161337057506000610d5a565b81600181146133865760028114613390576133ac565b6001915050610d5a565b60ff8411156133a1576133a161325a565b50506001821b610d5a565b5060208310610133831016604e8410600b84101617156133cf575081810a610d5a565b6133d98383613311565b80600019048211156133ed576133ed61325a565b029392505050565b60006110d260ff841683613354565b60006020828403121561341657600080fd5b81516110d281612f90565b60006020828403121561343357600080fd5b81516110d281612e8c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561348e5784516001600160a01b031683529383019391830191600101613469565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134c457600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209bd6404cfdb1348b3b0764b36a925a46687e0e6f80ecd9197ed2ca8f3195ae6864736f6c634300080a0033

Deployed Bytecode Sourcemap

19602:17703:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32326:158;;;;;;;;;;;;;:::i;:::-;;36097:216;;;;;;;;;;-1:-1:-1;36097:216:0;;;;;:::i;:::-;;:::i;:::-;;;;576:25:1;;;632:2;617:18;;610:34;;;;549:18;36097:216:0;;;;;;;;21540:49;;;;;;;;;;;;;;;;;;;801:25:1;;;789:2;774:18;21540:49:0;655:177:1;23268:71:0;;;;;;;;;;-1:-1:-1;23331:5:0;;;;;;;;;;;;-1:-1:-1;;;23331:5:0;;;;23268:71;;;;;;;:::i;23674:216::-;;;;;;;;;;-1:-1:-1;23674:216:0;;;;;:::i;:::-;;:::i;:::-;;;1924:14:1;;1917:22;1899:41;;1887:2;1872:18;23674:216:0;1759:187:1;35088:232:0;;;;;;;;;;-1:-1:-1;35088:232:0;;;;;:::i;:::-;;:::i;31558:321::-;;;;;;;;;;-1:-1:-1;31558:321:0;;;;;:::i;:::-;;:::i;24032:110::-;;;;;;;;;;;;;:::i;35638:150::-;;;;;;;;;;-1:-1:-1;35638:150:0;;;;;:::i;:::-;;:::i;23016:88::-;;;;;;;;;;-1:-1:-1;23089:12:0;;23016:88;;32492:230;;;;;;;;;;-1:-1:-1;32492:230:0;;;;;:::i;:::-;;:::i;34898:182::-;;;;;;;;;;-1:-1:-1;34898:182:0;;;;;:::i;:::-;;:::i;31255:99::-;;;;;;;;;;-1:-1:-1;31255:99:0;;;;;:::i;:::-;;:::i;25042:341::-;;;;;;;;;;-1:-1:-1;25042:341:0;;;;;:::i;:::-;;:::i;31362:188::-;;;;;;;;;;-1:-1:-1;31362:188:0;;;;;:::i;:::-;;:::i;35328:138::-;;;;;;;;;;;;;:::i;23110:71::-;;;;;;;;;;-1:-1:-1;23110:71:0;;19948:1;3682:36:1;;3670:2;3655:18;23110:71:0;3540:184:1;31891:329:0;;;;;;;;;;-1:-1:-1;31891:329:0;;;;;:::i;:::-;;:::i;24778:92::-;;;;;;;;;;;;;:::i;36557:171::-;;;;;;;;;;-1:-1:-1;36557:171:0;;;;;:::i;:::-;;:::i;23898:122::-;;;;;;;;;;-1:-1:-1;23898:122:0;;;;;:::i;:::-;;:::i;21222:27::-;;;;;;;;;;;;;;;;24154:116;;;;;;;;;;;;;:::i;28021:349::-;;;;;;;;;;-1:-1:-1;28021:349:0;;;;;:::i;:::-;;:::i;33328:119::-;;;;;;;;;;-1:-1:-1;33328:119:0;;;;;:::i;:::-;;:::i;24278:170::-;;;;;;;;;;-1:-1:-1;24278:170:0;;;;;:::i;:::-;;:::i;36318:231::-;;;;;;;;;;;;;:::i;36733:483::-;;;;;;;;;;-1:-1:-1;36733:483:0;;;;;:::i;:::-;;:::i;21503:30::-;;;;;;;;;;-1:-1:-1;21503:30:0;;;;-1:-1:-1;;;21503:30:0;;;;;;23422:105;;;;;;;;;;-1:-1:-1;23422:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;23506:18:0;23488:7;23506:18;;;:9;:18;;;;;;;23422:105;18840:148;;;;;;;;;;;;;:::i;27651:98::-;;;;;;;;;;;;;:::i;21413:36::-;;;;;;;;;;-1:-1:-1;21413:36:0;;;;-1:-1:-1;;;21413:36:0;;;;;;20021:54;;;;;;;;;;;;;;;;33590:563;;;;;;;;;;-1:-1:-1;33590:563:0;;;;;:::i;:::-;;:::i;21379:27::-;;;;;;;;;;-1:-1:-1;21379:27:0;;;;-1:-1:-1;;;;;21379:27:0;;;;;;-1:-1:-1;;;;;6800:32:1;;;6782:51;;6770:2;6755:18;21379:27:0;6617:222:1;23345:71:0;;;;;;;;;;-1:-1:-1;23388:7:0;18264:6;-1:-1:-1;;;;;18264:6:0;23345:71;35328:138;20082:56;;;;;;;;;;;;;;;;23187:75;;;;;;;;;;-1:-1:-1;23252:7:0;;;;;;;;;;;;-1:-1:-1;;;23252:7:0;;;;23187:75;;34457:106;;;;;;;;;;-1:-1:-1;34457:106:0;;;;;:::i;:::-;;:::i;34161:284::-;;;;;;;;;;-1:-1:-1;34161:284:0;;;;;:::i;:::-;;:::i;21162:19::-;;;;;;;;;;-1:-1:-1;21162:19:0;;;;-1:-1:-1;;;;;21162:19:0;;;24878:156;;;;;;;;;;-1:-1:-1;24878:156:0;;;;;:::i;:::-;;:::i;32734:202::-;;;;;;;;;;-1:-1:-1;32734:202:0;;;;;:::i;:::-;;:::i;21256:33::-;;;;;;;;;;-1:-1:-1;21256:33:0;;;;;;;;35800:285;;;;;;;;;;;;;:::i;:::-;;;;7647:25:1;;;7703:2;7688:18;;7681:34;;;;7731:18;;;7724:34;7635:2;7620:18;35800:285:0;7445:319:1;21190:25:0;;;;;;;;;;;;;;;;21298:38;;;;;;;;;;-1:-1:-1;21298:38:0;;;;;;;-1:-1:-1;;;;;21298:38:0;;;21456;;;;;;;;;;-1:-1:-1;21456:38:0;;;;-1:-1:-1;;;21456:38:0;;;;;;20733:36;;;;;;;;;;-1:-1:-1;20733:36:0;;;;-1:-1:-1;;;;;20733:36:0;;;34571:319;;;;;;;;;;-1:-1:-1;34571:319:0;;;;;:::i;:::-;;:::i;35474:156::-;;;;;;;;;;-1:-1:-1;35474:156:0;;;;;:::i;:::-;;:::i;24460:306::-;;;;;;;;;;-1:-1:-1;24460:306:0;;;;;:::i;:::-;;:::i;20826:37::-;;;;;;;;;;-1:-1:-1;20826:37:0;;;;-1:-1:-1;;;;;20826:37:0;;;23533:133;;;;;;;;;;-1:-1:-1;23533:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;23635:19:0;;;23617:7;23635:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;23533:133;27761:252;;;;;;;;;;-1:-1:-1;27761:252:0;;;;;:::i;:::-;;:::i;20776:43::-;;;;;;;;;;-1:-1:-1;20776:43:0;;;;-1:-1:-1;;;;;20776:43:0;;;19143:244;;;;;;;;;;-1:-1:-1;19143:244:0;;;;;:::i;:::-;;:::i;32944:376::-;;;;;;;;;;-1:-1:-1;32944:376:0;;;;;:::i;:::-;;:::i;33455:127::-;;;;;;;;;;-1:-1:-1;33455:127:0;;;;;:::i;:::-;;:::i;21596:49::-;;;;;;;;;;;;;;;;20956:24;;;;;;;;;;-1:-1:-1;20956:24:0;;;;-1:-1:-1;;;;;20956:24:0;;;32326:158;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;;;;;;;;;32383:10:::1;::::0;:15;32374:25:::1;;;::::0;::::1;;32423:12;32410:10;:25:::0;32461:15:::1;32446:12;:30:::0;32326:158::o;36097:216::-;36217:11;;:37;;-1:-1:-1;;;36217:37:0;;-1:-1:-1;;;;;6800:32:1;;;36217:37:0;;;6782:51:1;36165:15:0;;;;36217:11;;;;;;;;:29;;6755:18:1;;36217:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36272:11;;:36;;-1:-1:-1;;;36272:36:0;;-1:-1:-1;;;;;6800:32:1;;;36272:36:0;;;6782:51:1;36207:47:0;;-1:-1:-1;36272:11:0;;;;;;;;:28;;6755:18:1;;36272:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36262:46;;36097:216;;;:::o;23674:::-;23778:10;23749:4;23766:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;23766:32:0;;;;;;;;;;:41;;;23823:37;23749:4;;23766:32;;23823:37;;;;23801:6;801:25:1;;789:2;774:18;;655:177;23823:37:0;;;;;;;;-1:-1:-1;23878:4:0;23674:216;;;;;:::o;35088:232::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;35224:6:::1;35218:3;:12;35210:21;;;::::0;::::1;;35242:11;::::0;:70:::1;::::0;-1:-1:-1;;;35242:70:0;;::::1;::::0;::::1;7647:25:1::0;;;7688:18;;;7681:34;;;7731:18;;;7724:34;;;35242:11:0::1;::::0;;::::1;-1:-1:-1::0;;;;;35242:11:0::1;::::0;:35:::1;::::0;7620:18:1;;35242:70:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35088:232:::0;;;:::o;31558:321::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;31709:3:::1;31702;31678:20;31667:8;;:31;;;;:::i;:::-;31666:39;;;;:::i;:::-;:46;;31658:76;;;::::0;-1:-1:-1;;;31658:76:0;;10116:2:1;31658:76:0::1;::::0;::::1;10098:21:1::0;10155:2;10135:18;;;10128:30;-1:-1:-1;;;10174:18:1;;;10167:47;10231:18;;31658:76:0::1;9914:341:1::0;31658:76:0::1;31764:6;31753:7;:17;;31745:50;;;::::0;-1:-1:-1;;;31745:50:0;;10462:2:1;31745:50:0::1;::::0;::::1;10444:21:1::0;10501:2;10481:18;;;10474:30;-1:-1:-1;;;10520:18:1;;;10513:50;10580:18;;31745:50:0::1;10260:344:1::0;31745:50:0::1;31806:11;:34:::0;;;;31851:10:::1;:20:::0;31558:321::o;24032:110::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;24095:13:::1;::::0;::::1;;24094:14;24086:23;;;::::0;::::1;;24133:1;24120:10;:14:::0;24032:110::o;35638:150::-;35718:4;35774:6;35742:29;35762:8;35742:19;:29::i;:::-;:38;;35638:150;-1:-1:-1;;;35638:150:0:o;32492:230::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;32598:1:::1;32586:9;:13;:28;;;;;32613:1;32603:7;:11;32586:28;:65;;;;-1:-1:-1::0;32650:1:0::1;32639:7:::0;32619:16:::1;:9:::0;32631:4:::1;32619:16;:::i;:::-;32618:28;;;;:::i;:::-;:33;;32586:65;32578:74;;;::::0;::::1;;32707:7;32694:9;32679:12;;:24;;;;:::i;:::-;32678:36;;;;:::i;:::-;32663:12;:51:::0;-1:-1:-1;;32492:230:0:o;34898:182::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;34995:15:::1;:25:::0;;;;35031:26:::1;:41:::0;34898:182::o;31255:99::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;31324:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;31324:22:0::1;-1:-1:-1::0;;;;31324:22:0;;::::1;::::0;;;::::1;::::0;;31255:99::o;25042:341::-;-1:-1:-1;;;;;25162:19:0;;25142:4;25162:19;;;:11;:19;;;;;;;;25182:10;25162:31;;;;;;;;-1:-1:-1;;25162:52:0;25159:157;;-1:-1:-1;;;;;25264:19:0;;;;;;:11;:19;;;;;;;;25284:10;25264:31;;;;;;;;:40;;25298:6;;25264:40;:::i;:::-;-1:-1:-1;;;;;25230:19:0;;;;;;:11;:19;;;;;;;;25250:10;25230:31;;;;;;;:74;25159:157;25335:40;25349:6;25357:9;25368:6;25335:13;:40::i;:::-;25328:47;;25042:341;;;;;;:::o;31362:188::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;31434:16:::1;31490:3;31454:32;31478:8:::0;31454:21:::1;:32;:::i;:::-;31453:40;;;;:::i;:::-;31434:59;;31504:11;;;;;;;;;-1:-1:-1::0;;;;;31504:11:0::1;-1:-1:-1::0;;;;;31504:19:0::1;;31531:8;31504:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;35328:138:::0;35452:4;;-1:-1:-1;;;;;35452:4:0;;;35381:7;23506:18;;;:9;:18;;;;;;;35434:4;;;;;23506:18;;;;;35381:7;;35424:33;;;:::i;:::-;35408:12;;:50;;;;:::i;:::-;35401:57;;35328:138;:::o;31891:329::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;31979:9:::1;31974:239;31994:22:::0;;::::1;31974:239;;;32042:16;:32;32059:11;;32071:1;32059:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32042:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32042:32:0;;::::1;;32038:163;;32077:11;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;32077:11:0::1;:20;32098:11:::0;;32110:1;32098:14;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32114:9;:25;32124:11;;32136:1;32124:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32114:25:0::1;-1:-1:-1::0;;;;;32114:25:0::1;;;;;;;;;;;;;32077:63;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;11196:32:1;;;;11178:51;;11260:2;11245:18;;11238:34;11166:2;11151:18;;11004:274;32077:63:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32038:163;;;32162:11;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;32162:11:0::1;:20;32183:11:::0;;32195:1;32183:14;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32162:39;::::0;-1:-1:-1;;;;;;32162:39:0::1;::::0;;;;;;-1:-1:-1;;;;;11196:32:1;;;32162:39:0::1;::::0;::::1;11178:51:1::0;32199:1:0::1;11245:18:1::0;;;11238:34;11151:18;;32162:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32038:163;32018:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31974:239;;;;31891:329:::0;;:::o;24778:92::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;24837:18:::1;:25:::0;;-1:-1:-1;;;;24837:25:0::1;-1:-1:-1::0;;;24837:25:0::1;::::0;;24778:92::o;36557:171::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36643:21:0;;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;36643:32:0;;::::1;::::0;::::1;::::0;;;36686:16:::1;:23:::0;;;;;;:34;;;;::::1;;::::0;;36557:171::o;23898:122::-;23953:4;23977:35;23985:7;-1:-1:-1;;23977:7:0;:35::i;24154:116::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;24229:1:::1;24216:10;;:14;24208:23;;;::::0;::::1;;24242:13;:20:::0;;-1:-1:-1;;24242:20:0::1;24258:4;24242:20;::::0;;24154:116::o;28021:349::-;28096:7;28137:12;28119:10;;28132:1;28119:14;;;;:::i;:::-;:30;28116:64;;28176:1;28159:14;;:18;;;;:::i;:::-;28152:25;;;;28116:64;28194:7;28190:87;;;28210:12;:67;;28269:8;;28258;;:19;;;;:::i;:::-;28210:67;;;28252:3;28237:11;;28226:8;;:22;;;;:::i;:::-;28225:30;;;;:::i;28190:87::-;28295:12;:67;;28354:8;;28343;;:19;;;;:::i;:::-;28295:67;;;28337:3;28322:11;;28311:8;;:22;;;;:::i;:::-;28310:30;;;;:::i;33328:119::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33411:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;33411:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33328:119::o;24278:170::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;24350:8:::1;24346:55;;;24382:18;::::0;-1:-1:-1;;;24382:18:0;::::1;;;24381:19;24373:28;;;::::0;::::1;;24412:17;:28:::0;;;::::1;;-1:-1:-1::0;;;24412:28:0::1;-1:-1:-1::0;;;;24412:28:0;;::::1;::::0;;;::::1;::::0;;24278:170::o;36318:231::-;36368:11;;:36;;-1:-1:-1;;;36368:36:0;;36393:10;36368:36;;;6782:51:1;36368:11:0;;;;-1:-1:-1;;;;;36368:11:0;;:24;;6755:18:1;;36368:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36364:181;;36426:11;;:37;;-1:-1:-1;;;36426:37:0;;36452:10;36426:37;;;6782:51:1;36426:11:0;;;;-1:-1:-1;;;;;36426:11:0;;:25;;6755:18:1;;36426:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36482:11:0;;-1:-1:-1;;;36482:11:0;;;;36478:55;;-1:-1:-1;36478:55:0;;-1:-1:-1;36478:55:0;36512:11;;;;;;;;;-1:-1:-1;;;;;36512:11:0;-1:-1:-1;;;;;36512:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36478:55;36318:231::o;36733:483::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;36852:35;;::::1;36844:44;;;::::0;::::1;;36919:11;::::0;;-1:-1:-1;;;;36941:19:0;::::1;::::0;;;-1:-1:-1;;;36919:11:0;::::1;;;-1:-1:-1::0;36971:201:0::1;36991:21:::0;;::::1;36971:201;;;37043:14;:29;37058:10;;37069:1;37058:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37043:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37043:29:0;;::::1;;37042:30;37034:39;;;::::0;::::1;;37088:72;37102:10;37114;;37125:1;37114:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37143:15;19948:1;37143:2;:15;:::i;:::-;37129:7;;37137:1;37129:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;37088:13;:72::i;:::-;-1:-1:-1::0;37014:3:0;::::1;::::0;::::1;:::i;:::-;;;;36971:201;;;-1:-1:-1::0;37182:11:0::1;:26:::0;;;::::1;;-1:-1:-1::0;;;37182:26:0::1;-1:-1:-1::0;;;;37182:26:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;36733:483:0:o;18840:148::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;18947:1:::1;18931:6:::0;;18910:40:::1;::::0;-1:-1:-1;;;;;18931:6:0;;::::1;::::0;18910:40:::1;::::0;18947:1;;18910:40:::1;18978:1;18961:19:::0;;-1:-1:-1;;;;;;18961:19:0::1;::::0;;18840:148::o;27651:98::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;27710:11:::1;;;;;;;;;-1:-1:-1::0;;;;;27710:11:0::1;-1:-1:-1::0;;;;;27710:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;33590:563:::0;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;33768:12:::1;:28:::0;;;33807:13:::1;:30:::0;;;33848:12:::1;:28:::0;;;33887:6:::1;:16:::0;;;33914:8:::1;:20:::0;;;33896:7;33863:13;33956:30:::1;33823:14:::0;33783:13;33956:30:::1;:::i;:::-;:46;;;;:::i;:::-;:56;;;;:::i;:::-;33945:8;:67:::0;34023:14:::1;:32:::0;;;34086:18:::1;34103:1;34040:15:::0;34086:18:::1;:::i;:::-;34074:8;;:30;;34066:39;;;::::0;::::1;;34136:8;;34124;;:20;;34116:29;;;::::0;::::1;;33590:563:::0;;;;;;:::o;34457:106::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;34525:14:::1;:30:::0;;-1:-1:-1;;;;;;34525:30:0::1;-1:-1:-1::0;;;;;34525:30:0;;;::::1;::::0;;;::::1;::::0;;34457:106::o;34161:284::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;34308:4:::1;::::0;34283:21:::1;::::0;-1:-1:-1;;;;;34283:21:0;;::::1;34308:4:::0;::::1;34283:29;34279:94;;34327:21;:46:::0;;-1:-1:-1;;;;;;34327:46:0::1;-1:-1:-1::0;;;;;34327:46:0;::::1;;::::0;;34279:94:::1;34384:20;:53:::0;;-1:-1:-1;;;;;;34384:53:0::1;-1:-1:-1::0;;;;;34384:53:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;34161:284:0:o;24878:156::-;24958:4;24982:44;24996:10;25008:9;25019:6;24982:13;:44::i;32734:202::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;32842:1:::1;32832:7;:11;:31;;;;;32858:5;32847:7;:16;;32832:31;32824:40;;;::::0;::::1;;32921:7;32908:9;32893:12;;:24;;;;:::i;:::-;32892:36;;;;:::i;:::-;32875:14;:53:::0;-1:-1:-1;;32734:202:0:o;35800:285::-;35852:19;35873:20;35895;35942:11;;;;;;;;;-1:-1:-1;;;;;35942:11:0;-1:-1:-1;;;;;35942:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35928:42;;35996:11;;;;;;;;;-1:-1:-1;;;;;35996:11:0;-1:-1:-1;;;;;35996:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35981:45;;36052:11;;;;;;;;;-1:-1:-1;;;;;36052:11:0;-1:-1:-1;;;;;36052:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36037:40;;35800:285;;;:::o;34571:319::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;34715:1:::1;34700:12;:16;:39;;;;;34738:1;34720:15;:19;34700:39;34692:48;;;::::0;::::1;;34751:11;:22:::0;;-1:-1:-1;;;;34751:22:0::1;-1:-1:-1::0;;;34751:22:0;::::1;;;;::::0;;34798:12:::1;::::0;:30:::1;::::0;34813:15;;34798:30:::1;:::i;:::-;34784:11;:44:::0;34855:12:::1;::::0;:27:::1;::::0;34870:12;;34855:27:::1;:::i;:::-;34839:13;:43:::0;-1:-1:-1;;;34571:319:0:o;35474:156::-;35542:7;35600:22;:20;:22::i;:::-;35591:4;;-1:-1:-1;;;;;35591:4:0;23488:7;23506:18;;;:9;:18;;;;;;35570:26;;:8;:26;:::i;:::-;35569:53;;;;:::i;24460:306::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;24573:9:::1;::::0;-1:-1:-1;;;;;24550:33:0;;::::1;24573:9:::0;::::1;24550:33;24546:143;;24608:18;::::0;-1:-1:-1;;;24608:18:0;::::1;;;24607:19;24599:28;;;::::0;::::1;;24642:9;:35:::0;;-1:-1:-1;;;;;;24642:35:0::1;-1:-1:-1::0;;;;;24642:35:0;::::1;;::::0;;24546:143:::1;24703:5;24699:59;;;24723:9;::::0;:35:::1;::::0;-1:-1:-1;;;24723:35:0;;24747:10:::1;24723:35;::::0;::::1;6782:51:1::0;-1:-1:-1;;;;;24723:9:0;;::::1;::::0;:23:::1;::::0;6755:18:1;;24723:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;24699:59;24460:306:::0;;:::o;27761:252::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27840:22:0::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;27865:4:::1;-1:-1:-1::0;;27840:29:0;;::::1;::::0;::::1;::::0;;;27880:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;27927:15:::1;:26:::0;;;;;:33;;;::::1;::::0;::::1;::::0;;27971:16:::1;:27:::0;;;;;:34;;;;::::1;::::0;;::::1;::::0;;27761:252::o;19143:244::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19232:22:0;::::1;19224:73;;;::::0;-1:-1:-1;;;19224:73:0;;13295:2:1;19224:73:0::1;::::0;::::1;13277:21:1::0;13334:2;13314:18;;;13307:30;13373:34;13353:18;;;13346:62;-1:-1:-1;;;13424:18:1;;;13417:36;13470:19;;19224:73:0::1;13093:402:1::0;19224:73:0::1;19334:6;::::0;;19313:38:::1;::::0;-1:-1:-1;;;;;19313:38:0;;::::1;::::0;19334:6;::::1;::::0;19313:38:::1;::::0;::::1;19362:6;:17:::0;;-1:-1:-1;;;;;;19362:17:0::1;-1:-1:-1::0;;;;;19362:17:0;;;::::1;::::0;;;::::1;::::0;;19143:244::o;32944:376::-;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33040:23:0;::::1;33058:4;33040:23;::::0;::::1;::::0;:50:::1;;-1:-1:-1::0;;;;;;33068:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;33067:23;33040:50;:71;;;;-1:-1:-1::0;18237:7:0;18264:6;-1:-1:-1;;;;;33094:17:0;;::::1;18264:6:::0;;33094:17:::1;;33040:71;33032:80;;;::::0;::::1;;-1:-1:-1::0;;;;;33123:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;33123:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;33167:146:::1;;33192:11;::::0;:31:::1;::::0;-1:-1:-1;;;33192:31:0;;-1:-1:-1;;;;;11196:32:1;;;33192:31:0::1;::::0;::::1;11178:51:1::0;33221:1:0::1;11245:18:1::0;;;11238:34;33192:11:0::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;11151:18:1;;33192:31:0::1;11004:274:1::0;33167:146:0::1;33254:11;::::0;-1:-1:-1;;;;;33283:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;33254:47;;-1:-1:-1;;;33254:47:0;;::::1;::::0;::::1;11178:51:1::0;;;;11245:18;;;11238:34;33254:11:0::1;::::0;;::::1;;::::0;:20:::1;::::0;11151:18:1;;33254:47:0::1;11004:274:1::0;33455:127:0;18411:6;;-1:-1:-1;;;;;18411:6:0;6445:10;18411:22;18403:67;;;;-1:-1:-1;;;18403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33542:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;33542:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33455:127::o;25391:1438::-;-1:-1:-1;;;;;25508:17:0;;25483:4;25508:17;;;:9;:17;;;;;;:27;-1:-1:-1;25508:27:0;25500:60;;;;-1:-1:-1;;;25500:60:0;;13702:2:1;25500:60:0;;;13684:21:1;13741:2;13721:18;;;13714:30;-1:-1:-1;;;13760:18:1;;;13753:50;13820:18;;25500:60:0;13500:344:1;25500:60:0;25588:1;25579:6;:10;25571:46;;;;-1:-1:-1;;;25571:46:0;;14051:2:1;25571:46:0;;;14033:21:1;14090:2;14070:18;;;14063:30;14129:25;14109:18;;;14102:53;14172:18;;25571:46:0;13849:347:1;25571:46:0;25633:6;;;;25630:63;;;25649:41;25664:6;25672:9;25683:6;25649:14;:41::i;:::-;25642:48;;;;25630:63;25705:28;25718:6;25726;25705:12;:28::i;:::-;-1:-1:-1;;;;;25759:25:0;;;;;;:14;:25;;;;;;;;25758:26;:47;;;;-1:-1:-1;25801:4:0;;-1:-1:-1;;;;;25788:17:0;;;25801:4;;25788:17;;25758:47;25754:148;;;-1:-1:-1;;;;;25827:26:0;;;;;;:15;:26;;;;;;;;25822:68;;25855:35;25872:9;25883:6;25855:16;:35::i;:::-;32295:10;;25914:118;;-1:-1:-1;;;;;25939:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;25969:29:0;;;;;;:18;:29;;;;;;;;25939:59;25931:98;;;;-1:-1:-1;;;25931:98:0;;14403:2:1;25931:98:0;;;14385:21:1;14442:2;14422:18;;;14415:30;14481:28;14461:18;;;14454:56;14527:18;;25931:98:0;14201:350:1;25931:98:0;-1:-1:-1;;;;;26044:17:0;;;;;;:9;:17;;;;;:27;;26065:6;;26044:17;:27;;26065:6;;26044:27;:::i;:::-;;;;-1:-1:-1;;;;;;;27612:19:0;;26084:22;27612:19;;;:11;:19;;;;;;;;27611:20;26109:67;;26170:6;26109:67;;;26133:34;26141:6;26149:9;26160:6;26133:7;:34::i;:::-;26084:92;;26200:25;26215:9;26200:14;:25::i;:::-;26197:66;;;26232:10;;26228:32;;26244:16;26253:6;26244:8;:16::i;:::-;-1:-1:-1;;;;;26283:20:0;;;;;;:9;:20;;;;;:38;;26307:14;;26283:20;:38;;26307:14;;26283:38;:::i;:::-;;;;-1:-1:-1;;;;;;;26338:24:0;;;;;;:16;:24;;;;;;;;26334:96;;26369:11;;-1:-1:-1;;;;;26398:17:0;;;;;;;:9;:17;;;;;;;;26369:47;;-1:-1:-1;;;26369:47:0;;;;;11178:51:1;;;;11245:18;;;11238:34;26369:11:0;;;;;;:20;;11151:18:1;;26369:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26365:63;;-1:-1:-1;;;;;26444:27:0;;;;;;:16;:27;;;;;;;;26440:105;;26478:11;;-1:-1:-1;;;;;26510:20:0;;;;;;;:9;:20;;;;;;;;26478:53;;-1:-1:-1;;;26478:53:0;;;;;11178:51:1;;;;11245:18;;;11238:34;26478:11:0;;;;;;:20;;11151:18:1;;26478:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26474:69;;26561:11;;-1:-1:-1;;;26561:11:0;;;;26557:67;;;26591:11;;;;;;;;;-1:-1:-1;;;;;26591:11:0;-1:-1:-1;;;;;26591:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26587:37;;26651:17;;-1:-1:-1;;;26651:17:0;;;;26648:90;;;26683:9;;:55;;-1:-1:-1;;;26683:55:0;;-1:-1:-1;;;;;14814:15:1;;;26683:55:0;;;14796:34:1;14866:15;;;14846:18;;;14839:43;14898:18;;;14891:34;;;26683:9:0;;;;:28;;14731:18:1;;26683:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26648:90;26773:9;-1:-1:-1;;;;;26756:43:0;26765:6;-1:-1:-1;;;;;26756:43:0;;26784:14;26756:43;;;;801:25:1;;789:2;774:18;;655:177;26756:43:0;;;;;;;;-1:-1:-1;26817:4:0;;25391:1438;-1:-1:-1;;;;25391:1438:0:o;26837:259::-;-1:-1:-1;;;;;26947:17:0;;26930:4;26947:17;;;:9;:17;;;;;:27;;26968:6;;26947:17;26930:4;;26947:27;;26968:6;;26947:27;:::i;:::-;;;;-1:-1:-1;;;;;;;26985:20:0;;;;;;:9;:20;;;;;:30;;27009:6;;26985:20;:30;;27009:6;;26985:30;:::i;:::-;;;;;;;;27048:9;-1:-1:-1;;;;;27031:35:0;27040:6;-1:-1:-1;;;;;27031:35:0;;27059:6;27031:35;;;;801:25:1;;789:2;774:18;;655:177;27031:35:0;;;;;;;;-1:-1:-1;27084:4:0;26837:259;;;;;:::o;27351:166::-;27448:12;;27438:6;:22;;:49;;;-1:-1:-1;;;;;;27464:23:0;;;;;;:15;:23;;;;;;;;27438:49;27430:79;;;;-1:-1:-1;;;27430:79:0;;15388:2:1;27430:79:0;;;15370:21:1;15427:2;15407:18;;;15400:30;-1:-1:-1;;;15446:18:1;;;15439:47;15503:18;;27430:79:0;15186:341:1;27108:235:0;27216:14;;-1:-1:-1;;;;;27249:20:0;;27194:19;27249:20;;;:9;:20;;;;;;27216:14;;27249:29;;27272:6;;27249:29;:::i;:::-;:44;;27241:94;;;;-1:-1:-1;;;27241:94:0;;15734:2:1;27241:94:0;;;15716:21:1;15773:2;15753:18;;;15746:30;15812:34;15792:18;;;15785:62;-1:-1:-1;;;15863:18:1;;;15856:35;15908:19;;27241:94:0;15532:401:1;28378:546:0;28631:14;;-1:-1:-1;;;;;28526:25:0;;;28464:7;28526:25;;;:14;:25;;;;;;;28554:22;;;;;;;;28464:7;;;;28631:14;;28514:113;;28526:25;;;;;28554:22;28553:23;:73;;;;-1:-1:-1;28598:10:0;;-1:-1:-1;;;;;28580:15:0;;;;;;:7;:15;;;;;;28611;;28580:28;;;:::i;:::-;:46;28514:11;:113::i;:::-;28505:122;;:6;:122;:::i;:::-;28504:141;;;;:::i;:::-;-1:-1:-1;;;;;28670:22:0;;;;;;:14;:22;;;;;;28484:161;;-1:-1:-1;28670:22:0;;:49;;;;-1:-1:-1;;;;;;28696:18:0;;;;;;:7;:18;;;;;;:23;28670:49;28666:104;;;-1:-1:-1;;;;;28734:18:0;;;;;;:7;:18;;;;;28755:15;28734:36;;28666:104;28801:4;28783:24;;;;:9;:24;;;;;:37;;28811:9;;28783:24;:37;;28811:9;;28783:37;:::i;:::-;;;;-1:-1:-1;;28836:42:0;;801:25:1;;;28861:4:0;;-1:-1:-1;;;;;28836:42:0;;;;;789:2:1;774:18;28836:42:0;;;;;;;28898:18;28907:9;28898:6;:18;:::i;:::-;28891:25;28378:546;-1:-1:-1;;;;;28378:546:0:o;28932:284::-;29038:10;28998:4;29023:26;;;:14;:26;;;;;;;;29022:27;:47;;;;-1:-1:-1;29063:6:0;;;;29062:7;29022:47;:71;;;;-1:-1:-1;29082:11:0;;-1:-1:-1;;;29082:11:0;;;;29022:71;:109;;;;-1:-1:-1;;;;;;29106:25:0;;;;;;:14;:25;;;;;;;;29022:109;:161;;;;-1:-1:-1;29172:11:0;;29162:4;29144:24;;;;:9;:24;;;;;;:39;;29022:161;:186;;;;;29207:1;29196:8;;:12;29015:193;28932:284;-1:-1:-1;;28932:284:0:o;29224:2019::-;21692:6;:13;;-1:-1:-1;;21692:13:0;21701:4;21692:13;;;29319::::1;::::0;21692:6;;29310:22;::::1;:47;;29344:13;;29310:47;;;29335:6;29310:47;29390:4;29372:24;::::0;;;:9:::1;:24;::::0;;;;;29287:70;;-1:-1:-1;29372:39:0;-1:-1:-1;29368:84:0::1;;;-1:-1:-1::0;29446:4:0::1;29428:24;::::0;;;:9:::1;:24;::::0;;;;;29368:84:::1;29463:27;29493:60;29509:15;;29526:26;;29493:15;:60::i;:::-;:79;;29560:12;;29493:79;;;29556:1;29493:79;29463:109;;29583:23;29661:1;29649:8;;29626:19;29611:12;:34;;;;:::i;:::-;29610:47;;;;:::i;:::-;29609:53;;;;:::i;:::-;29583:79:::0;-1:-1:-1;29673:31:0::1;29583:79:::0;29673:31;::::1;:::i;:::-;29741:16;::::0;;29755:1:::1;29741:16:::0;;;;;::::1;::::0;;29673:31;;-1:-1:-1;29717:21:0::1;::::0;29741:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29741:16:0::1;29717:40;;29786:4;29768;29773:1;29768:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29768:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;29812:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;29812:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;29768:7;;29812:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29802:4;29807:1;29802:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29802:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;29904:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;29904:188:0;;29870:21:::1;::::0;29904:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;29976:12;;29846:21:::1;::::0;30019:4;;30046::::1;::::0;30066:15:::1;::::0;29904:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30105:20;30152:13;30128:21;:37;;;;:::i;:::-;30105:60:::0;-1:-1:-1;30176:19:0::1;30209:23;30231:1;30209:19:::0;:23:::1;:::i;:::-;30198:8;;:34;;;;:::i;:::-;30176:56:::0;-1:-1:-1;30245:23:0::1;30324:1;30176:56:::0;30272:34:::1;30287:19:::0;30272:12;:34:::1;:::i;:::-;30271:50;;;;:::i;:::-;:54;;;;:::i;:::-;30245:80;;30336:24;30396:11;30379:13;;30364:12;:28;;;;:::i;:::-;30363:44;;;;:::i;:::-;30336:71;;30418:23;30476:11;30460:12;;30445;:27;;;;:::i;:::-;30444:43;;;;:::i;:::-;30418:69;;30498:17;30544:11;30534:6;;30519:12;:21;;;;:::i;:::-;30518:37;;;;:::i;:::-;30498:57:::0;-1:-1:-1;30572:20:0;;30568:101:::1;;30611:11;;;;;;;;;-1:-1:-1::0;;;;;30611:11:0::1;-1:-1:-1::0;;;;;30611:19:0::1;;30638:16;30611:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;30607:62:::0;::::1;30684:19:::0;;30681:357:::1;;30720:6;::::0;30891:21:::1;::::0;30720:241:::1;::::0;-1:-1:-1;;;30720:241:0;;30793:4:::1;30720:241;::::0;::::1;17652:34:1::0;17702:18;;;17695:34;;;30720:6:0::1;17745:18:1::0;;;17738:34;;;17788:18;;;17781:34;-1:-1:-1;;;;;30891:21:0;;::::1;17831:19:1::0;;;17824:44;30931:15:0::1;17884:19:1::0;;;17877:35;30720:6:0;::::1;::::0;:22:::1;::::0;30750:15;;17586:19:1;;30720:241:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30981:45:0::1;::::0;;576:25:1;;;632:2;617:18;;610:34;;;30981:45:0::1;::::0;-1:-1:-1;549:18:1;30981:45:0::1;;;;;;;30681:357;31062:19:::0;;31058:84:::1;;31096:20;::::0;:46:::1;::::0;-1:-1:-1;;;;;31096:20:0;;::::1;::::0;:46;::::1;;;::::0;31126:15;;31096:20:::1;:46:::0;:20;:46;31126:15;31096:20;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;31058:84;31171:13:::0;;31167:66:::1;;31199:14;::::0;:34:::1;::::0;-1:-1:-1;;;;;31199:14:0;;::::1;::::0;:34;::::1;;;::::0;31223:9;;31199:14:::1;:34:::0;:14;:34;31223:9;31199:14;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;31167:66;-1:-1:-1::0;;21710:6:0;:14;;-1:-1:-1;;21710:14:0;;;-1:-1:-1;;;;;;;;;;29224:2019:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;837:597::-;949:4;978:2;1007;996:9;989:21;1039:6;1033:13;1082:6;1077:2;1066:9;1062:18;1055:34;1107:1;1117:140;1131:6;1128:1;1125:13;1117:140;;;1226:14;;;1222:23;;1216:30;1192:17;;;1211:2;1188:26;1181:66;1146:10;;1117:140;;;1275:6;1272:1;1269:13;1266:91;;;1345:1;1340:2;1331:6;1320:9;1316:22;1312:31;1305:42;1266:91;-1:-1:-1;1418:2:1;1397:15;-1:-1:-1;;1393:29:1;1378:45;;;;1425:2;1374:54;;837:597;-1:-1:-1;;;837:597:1:o;1439:315::-;1507:6;1515;1568:2;1556:9;1547:7;1543:23;1539:32;1536:52;;;1584:1;1581;1574:12;1536:52;1623:9;1610:23;1642:31;1667:5;1642:31;:::i;:::-;1692:5;1744:2;1729:18;;;;1716:32;;-1:-1:-1;;;1439:315:1:o;1951:316::-;2028:6;2036;2044;2097:2;2085:9;2076:7;2072:23;2068:32;2065:52;;;2113:1;2110;2103:12;2065:52;-1:-1:-1;;2136:23:1;;;2206:2;2191:18;;2178:32;;-1:-1:-1;2257:2:1;2242:18;;;2229:32;;1951:316;-1:-1:-1;1951:316:1:o;2272:248::-;2340:6;2348;2401:2;2389:9;2380:7;2376:23;2372:32;2369:52;;;2417:1;2414;2407:12;2369:52;-1:-1:-1;;2440:23:1;;;2510:2;2495:18;;;2482:32;;-1:-1:-1;2272:248:1:o;2525:118::-;2611:5;2604:13;2597:21;2590:5;2587:32;2577:60;;2633:1;2630;2623:12;2648:241;2704:6;2757:2;2745:9;2736:7;2732:23;2728:32;2725:52;;;2773:1;2770;2763:12;2725:52;2812:9;2799:23;2831:28;2853:5;2831:28;:::i;2894:456::-;2971:6;2979;2987;3040:2;3028:9;3019:7;3015:23;3011:32;3008:52;;;3056:1;3053;3046:12;3008:52;3095:9;3082:23;3114:31;3139:5;3114:31;:::i;:::-;3164:5;-1:-1:-1;3221:2:1;3206:18;;3193:32;3234:33;3193:32;3234:33;:::i;:::-;2894:456;;3286:7;;-1:-1:-1;;;3340:2:1;3325:18;;;;3312:32;;2894:456::o;3355:180::-;3414:6;3467:2;3455:9;3446:7;3442:23;3438:32;3435:52;;;3483:1;3480;3473:12;3435:52;-1:-1:-1;3506:23:1;;3355:180;-1:-1:-1;3355:180:1:o;3729:367::-;3792:8;3802:6;3856:3;3849:4;3841:6;3837:17;3833:27;3823:55;;3874:1;3871;3864:12;3823:55;-1:-1:-1;3897:20:1;;3940:18;3929:30;;3926:50;;;3972:1;3969;3962:12;3926:50;4009:4;4001:6;3997:17;3985:29;;4069:3;4062:4;4052:6;4049:1;4045:14;4037:6;4033:27;4029:38;4026:47;4023:67;;;4086:1;4083;4076:12;4023:67;3729:367;;;;;:::o;4101:437::-;4187:6;4195;4248:2;4236:9;4227:7;4223:23;4219:32;4216:52;;;4264:1;4261;4254:12;4216:52;4304:9;4291:23;4337:18;4329:6;4326:30;4323:50;;;4369:1;4366;4359:12;4323:50;4408:70;4470:7;4461:6;4450:9;4446:22;4408:70;:::i;:::-;4497:8;;4382:96;;-1:-1:-1;4101:437:1;-1:-1:-1;;;;4101:437:1:o;4543:382::-;4608:6;4616;4669:2;4657:9;4648:7;4644:23;4640:32;4637:52;;;4685:1;4682;4675:12;4637:52;4724:9;4711:23;4743:31;4768:5;4743:31;:::i;:::-;4793:5;-1:-1:-1;4850:2:1;4835:18;;4822:32;4863:30;4822:32;4863:30;:::i;:::-;4912:7;4902:17;;;4543:382;;;;;:::o;4930:376::-;4992:6;5000;5053:2;5041:9;5032:7;5028:23;5024:32;5021:52;;;5069:1;5066;5059:12;5021:52;5108:9;5095:23;5127:28;5149:5;5127:28;:::i;5311:773::-;5433:6;5441;5449;5457;5510:2;5498:9;5489:7;5485:23;5481:32;5478:52;;;5526:1;5523;5516:12;5478:52;5566:9;5553:23;5595:18;5636:2;5628:6;5625:14;5622:34;;;5652:1;5649;5642:12;5622:34;5691:70;5753:7;5744:6;5733:9;5729:22;5691:70;:::i;:::-;5780:8;;-1:-1:-1;5665:96:1;-1:-1:-1;5868:2:1;5853:18;;5840:32;;-1:-1:-1;5884:16:1;;;5881:36;;;5913:1;5910;5903:12;5881:36;;5952:72;6016:7;6005:8;5994:9;5990:24;5952:72;:::i;:::-;5311:773;;;;-1:-1:-1;6043:8:1;-1:-1:-1;;;;5311:773:1:o;6089:523::-;6193:6;6201;6209;6217;6225;6233;6286:3;6274:9;6265:7;6261:23;6257:33;6254:53;;;6303:1;6300;6293:12;6254:53;-1:-1:-1;;6326:23:1;;;6396:2;6381:18;;6368:32;;-1:-1:-1;6447:2:1;6432:18;;6419:32;;6498:2;6483:18;;6470:32;;-1:-1:-1;6549:3:1;6534:19;;6521:33;;-1:-1:-1;6601:3:1;6586:19;6573:33;;-1:-1:-1;6089:523:1;-1:-1:-1;6089:523:1:o;7052:388::-;7120:6;7128;7181:2;7169:9;7160:7;7156:23;7152:32;7149:52;;;7197:1;7194;7187:12;7149:52;7236:9;7223:23;7255:31;7280:5;7255:31;:::i;:::-;7305:5;-1:-1:-1;7362:2:1;7347:18;;7334:32;7375:33;7334:32;7375:33;:::i;8005:377::-;8079:6;8087;8095;8148:2;8136:9;8127:7;8123:23;8119:32;8116:52;;;8164:1;8161;8154:12;8116:52;8203:9;8190:23;8222:28;8244:5;8222:28;:::i;:::-;8269:5;8321:2;8306:18;;8293:32;;-1:-1:-1;8372:2:1;8357:18;;;8344:32;;8005:377;-1:-1:-1;;;8005:377:1:o;8837:356::-;9039:2;9021:21;;;9058:18;;;9051:30;9117:34;9112:2;9097:18;;9090:62;9184:2;9169:18;;8837:356::o;9198:184::-;9268:6;9321:2;9309:9;9300:7;9296:23;9292:32;9289:52;;;9337:1;9334;9327:12;9289:52;-1:-1:-1;9360:16:1;;9198:184;-1:-1:-1;9198:184:1:o;9387:127::-;9448:10;9443:3;9439:20;9436:1;9429:31;9479:4;9476:1;9469:15;9503:4;9500:1;9493:15;9519:168;9559:7;9625:1;9621;9617:6;9613:14;9610:1;9607:21;9602:1;9595:9;9588:17;9584:45;9581:71;;;9632:18;;:::i;:::-;-1:-1:-1;9672:9:1;;9519:168::o;9692:217::-;9732:1;9758;9748:132;;9802:10;9797:3;9793:20;9790:1;9783:31;9837:4;9834:1;9827:15;9865:4;9862:1;9855:15;9748:132;-1:-1:-1;9894:9:1;;9692:217::o;10609:125::-;10649:4;10677:1;10674;10671:8;10668:34;;;10682:18;;:::i;:::-;-1:-1:-1;10719:9:1;;10609:125::o;10739:128::-;10779:3;10810:1;10806:6;10803:1;10800:13;10797:39;;;10816:18;;:::i;:::-;-1:-1:-1;10852:9:1;;10739:128::o;10872:127::-;10933:10;10928:3;10924:20;10921:1;10914:31;10964:4;10961:1;10954:15;10988:4;10985:1;10978:15;11570:135;11609:3;-1:-1:-1;;11630:17:1;;11627:43;;;11650:18;;:::i;:::-;-1:-1:-1;11697:1:1;11686:13;;11570:135::o;11710:422::-;11799:1;11842:5;11799:1;11856:270;11877:7;11867:8;11864:21;11856:270;;;11936:4;11932:1;11928:6;11924:17;11918:4;11915:27;11912:53;;;11945:18;;:::i;:::-;11995:7;11985:8;11981:22;11978:55;;;12015:16;;;;11978:55;12094:22;;;;12054:15;;;;11856:270;;;11860:3;11710:422;;;;;:::o;12137:806::-;12186:5;12216:8;12206:80;;-1:-1:-1;12257:1:1;12271:5;;12206:80;12305:4;12295:76;;-1:-1:-1;12342:1:1;12356:5;;12295:76;12387:4;12405:1;12400:59;;;;12473:1;12468:130;;;;12380:218;;12400:59;12430:1;12421:10;;12444:5;;;12468:130;12505:3;12495:8;12492:17;12489:43;;;12512:18;;:::i;:::-;-1:-1:-1;;12568:1:1;12554:16;;12583:5;;12380:218;;12682:2;12672:8;12669:16;12663:3;12657:4;12654:13;12650:36;12644:2;12634:8;12631:16;12626:2;12620:4;12617:12;12613:35;12610:77;12607:159;;;-1:-1:-1;12719:19:1;;;12751:5;;12607:159;12798:34;12823:8;12817:4;12798:34;:::i;:::-;12868:6;12864:1;12860:6;12856:19;12847:7;12844:32;12841:58;;;12879:18;;:::i;:::-;12917:20;;12137:806;-1:-1:-1;;;12137:806:1:o;12948:140::-;13006:5;13035:47;13076:4;13066:8;13062:19;13056:4;13035:47;:::i;14936:245::-;15003:6;15056:2;15044:9;15035:7;15031:23;15027:32;15024:52;;;15072:1;15069;15062:12;15024:52;15104:9;15098:16;15123:28;15145:5;15123:28;:::i;16070:251::-;16140:6;16193:2;16181:9;16172:7;16168:23;16164:32;16161:52;;;16209:1;16206;16199:12;16161:52;16241:9;16235:16;16260:31;16285:5;16260:31;:::i;16326:980::-;16588:4;16636:3;16625:9;16621:19;16667:6;16656:9;16649:25;16693:2;16731:6;16726:2;16715:9;16711:18;16704:34;16774:3;16769:2;16758:9;16754:18;16747:31;16798:6;16833;16827:13;16864:6;16856;16849:22;16902:3;16891:9;16887:19;16880:26;;16941:2;16933:6;16929:15;16915:29;;16962:1;16972:195;16986:6;16983:1;16980:13;16972:195;;;17051:13;;-1:-1:-1;;;;;17047:39:1;17035:52;;17142:15;;;;17107:12;;;;17083:1;17001:9;16972:195;;;-1:-1:-1;;;;;;;17223:32:1;;;;17218:2;17203:18;;17196:60;-1:-1:-1;;;17287:3:1;17272:19;17265:35;17184:3;16326:980;-1:-1:-1;;;16326:980:1:o;17923:306::-;18011:6;18019;18027;18080:2;18068:9;18059:7;18055:23;18051:32;18048:52;;;18096:1;18093;18086:12;18048:52;18125:9;18119:16;18109:26;;18175:2;18164:9;18160:18;18154:25;18144:35;;18219:2;18208:9;18204:18;18198:25;18188:35;;17923:306;;;;;:::o

Swarm Source

ipfs://62554fa03e9e67fa25e00bd71008ce9e9612dbbfe0daedd3e6abc0cc69127369
Loading...
Loading
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.