ETH Price: $3,478.34 (-1.09%)
Gas: 5 Gwei

Token

MeowDAO Governance Token (MEOW)
 

Overview

Max Total Supply

10,022,329,493.0625909677382 MEOW

Holders

169

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 13 Decimals)

Balance
675,179.0841777101976 MEOW

Value
$0.00
0x862161d68d2deab632ff41accf88aacf6148f097
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:
MeowDAO

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-30
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
 * @title FixidityLib
 * @author Gadi Guy, Alberto Cuesta Canada
 * @notice This library provides fixed point arithmetic with protection against
 * overflow. 
 * All operations are done with int256 and the operands must have been created 
 * with any of the newFrom* functions, which shift the comma digits() to the 
 * right and check for limits.
 * When using this library be sure of using maxNewFixed() as the upper limit for
 * creation of fixed point numbers. Use maxFixedMul(), maxFixedDiv() and
 * maxFixedAdd() if you want to be certain that those operations don't 
 * overflow.
 */
library FixidityLib {

    /**
     * @notice Number of positions that the comma is shifted to the right.
     */
    function digits() internal pure returns(uint8) {
        return 24;
    }
    
    /**
     * @notice This is 1 in the fixed point units used in this library.
     * @dev Test fixed1() equals 10^digits()
     * Hardcoded to 24 digits.
     */
    function fixed1() internal pure returns(int256) {
        return 1000000000000000000000000;
    }

    /**
     * @notice The amount of decimals lost on each multiplication operand.
     * @dev Test mulPrecision() equals sqrt(fixed1)
     * Hardcoded to 24 digits.
     */
    function mulPrecision() internal pure returns(int256) {
        return 1000000000000;
    }

    /**
     * @notice Maximum value that can be represented in an int256
     * @dev Test maxInt256() equals 2^255 -1
     */
    function maxInt256() internal pure returns(int256) {
        return 57896044618658097711785492504343953926634992332820282019728792003956564819967;
    }

    /**
     * @notice Minimum value that can be represented in an int256
     * @dev Test minInt256 equals (2^255) * (-1)
     */
    function minInt256() internal pure returns(int256) {
        return -57896044618658097711785492504343953926634992332820282019728792003956564819968;
    }

    /**
     * @notice Maximum value that can be converted to fixed point. Optimize for
     * @dev deployment. 
     * Test maxNewFixed() equals maxInt256() / fixed1()
     * Hardcoded to 24 digits.
     */
    function maxNewFixed() internal pure returns(int256) {
        return 57896044618658097711785492504343953926634992332820282;
    }

    /**
     * @notice Maximum value that can be converted to fixed point. Optimize for
     * deployment. 
     * @dev Test minNewFixed() equals -(maxInt256()) / fixed1()
     * Hardcoded to 24 digits.
     */
    function minNewFixed() internal pure returns(int256) {
        return -57896044618658097711785492504343953926634992332820282;
    }

    /**
     * @notice Maximum value that can be safely used as an addition operator.
     * @dev Test maxFixedAdd() equals maxInt256()-1 / 2
     * Test add(maxFixedAdd(),maxFixedAdd()) equals maxFixedAdd() + maxFixedAdd()
     * Test add(maxFixedAdd()+1,maxFixedAdd()) throws 
     * Test add(-maxFixedAdd(),-maxFixedAdd()) equals -maxFixedAdd() - maxFixedAdd()
     * Test add(-maxFixedAdd(),-maxFixedAdd()-1) throws 
     */
    function maxFixedAdd() internal pure returns(int256) {
        return 28948022309329048855892746252171976963317496166410141009864396001978282409983;
    }

    /**
     * @notice Maximum negative value that can be safely in a subtraction.
     * @dev Test maxFixedSub() equals minInt256() / 2
     */
    function maxFixedSub() internal pure returns(int256) {
        return -28948022309329048855892746252171976963317496166410141009864396001978282409984;
    }

    /**
     * @notice Maximum value that can be safely used as a multiplication operator.
     * @dev Calculated as sqrt(maxInt256()*fixed1()). 
     * Be careful with your sqrt() implementation. I couldn't find a calculator
     * that would give the exact square root of maxInt256*fixed1 so this number
     * is below the real number by no more than 3*10**28. It is safe to use as
     * a limit for your multiplications, although powers of two of numbers over
     * this value might still work.
     * Test multiply(maxFixedMul(),maxFixedMul()) equals maxFixedMul() * maxFixedMul()
     * Test multiply(maxFixedMul(),maxFixedMul()+1) throws 
     * Test multiply(-maxFixedMul(),maxFixedMul()) equals -maxFixedMul() * maxFixedMul()
     * Test multiply(-maxFixedMul(),maxFixedMul()+1) throws 
     * Hardcoded to 24 digits.
     */
    function maxFixedMul() internal pure returns(int256) {
        return 240615969168004498257251713877715648331380787511296;
    }

    /**
     * @notice Maximum value that can be safely used as a dividend.
     * @dev divide(maxFixedDiv,newFixedFraction(1,fixed1())) = maxInt256().
     * Test maxFixedDiv() equals maxInt256()/fixed1()
     * Test divide(maxFixedDiv(),multiply(mulPrecision(),mulPrecision())) = maxFixedDiv()*(10^digits())
     * Test divide(maxFixedDiv()+1,multiply(mulPrecision(),mulPrecision())) throws
     * Hardcoded to 24 digits.
     */
    function maxFixedDiv() internal pure returns(int256) {
        return 57896044618658097711785492504343953926634992332820282;
    }

    /**
     * @notice Maximum value that can be safely used as a divisor.
     * @dev Test maxFixedDivisor() equals fixed1()*fixed1() - Or 10**(digits()*2)
     * Test divide(10**(digits()*2 + 1),10**(digits()*2)) = returns 10*fixed1()
     * Test divide(10**(digits()*2 + 1),10**(digits()*2 + 1)) = throws
     * Hardcoded to 24 digits.
     */
    function maxFixedDivisor() internal pure returns(int256) {
        return 1000000000000000000000000000000000000000000000000;
    }

    /**
     * @notice Converts an int256 to fixed point units, equivalent to multiplying
     * by 10^digits().
     * @dev Test newFixed(0) returns 0
     * Test newFixed(1) returns fixed1()
     * Test newFixed(maxNewFixed()) returns maxNewFixed() * fixed1()
     * Test newFixed(maxNewFixed()+1) fails
     */
    function newFixed(int256 x)
        internal
        pure
        returns (int256)
    {
        assert(x <= maxNewFixed());
        assert(x >= minNewFixed());
        return x * fixed1();
    }

    /**
     * @notice Converts an int256 in the fixed point representation of this 
     * library to a non decimal. All decimal digits will be truncated.
     */
    function fromFixed(int256 x)
        internal
        pure
        returns (int256)
    {
        return x / fixed1();
    }

    /**
     * @notice Converts an int256 which is already in some fixed point 
     * representation to a different fixed precision representation.
     * Both the origin and destination precisions must be 38 or less digits.
     * Origin values with a precision higher than the destination precision
     * will be truncated accordingly.
     * @dev 
     * Test convertFixed(1,0,0) returns 1;
     * Test convertFixed(1,1,1) returns 1;
     * Test convertFixed(1,1,0) returns 0;
     * Test convertFixed(1,0,1) returns 10;
     * Test convertFixed(10,1,0) returns 1;
     * Test convertFixed(10,0,1) returns 100;
     * Test convertFixed(100,1,0) returns 10;
     * Test convertFixed(100,0,1) returns 1000;
     * Test convertFixed(1000,2,0) returns 10;
     * Test convertFixed(1000,0,2) returns 100000;
     * Test convertFixed(1000,2,1) returns 100;
     * Test convertFixed(1000,1,2) returns 10000;
     * Test convertFixed(maxInt256,1,0) returns maxInt256/10;
     * Test convertFixed(maxInt256,0,1) throws
     * Test convertFixed(maxInt256,38,0) returns maxInt256/(10**38);
     * Test convertFixed(1,0,38) returns 10**38;
     * Test convertFixed(maxInt256,39,0) throws
     * Test convertFixed(1,0,39) throws
     */
    function convertFixed(int256 x, uint8 _originDigits, uint8 _destinationDigits)
        internal
        pure
        returns (int256)
    {
        assert(_originDigits <= 38 && _destinationDigits <= 38);
        
        uint8 decimalDifference;
        if ( _originDigits > _destinationDigits ){
            decimalDifference = _originDigits - _destinationDigits;
            return x/int256((uint128(10)**uint128(decimalDifference)));
        }
        else if ( _originDigits < _destinationDigits ){
            decimalDifference = _destinationDigits - _originDigits;
            // Cast uint8 -> uint128 is safe
            // Exponentiation is safe:
            //     _originDigits and _destinationDigits limited to 38 or less
            //     decimalDifference = abs(_destinationDigits - _originDigits)
            //     decimalDifference < 38
            //     10**38 < 2**128-1
            assert(x <= maxInt256()/int256(uint128(10)**uint128(decimalDifference)));
            assert(x >= minInt256()/int256(uint128(10)**uint128(decimalDifference)));
            return x*(int256(uint128(10)**uint128(decimalDifference)));
        }
        // _originDigits == digits()) 
        return x;
    }

    /**
     * @notice Converts an int256 which is already in some fixed point 
     * representation to that of this library. The _originDigits parameter is the
     * precision of x. Values with a precision higher than FixidityLib.digits()
     * will be truncated accordingly.
     */
    function newFixed(int256 x, uint8 _originDigits)
        internal
        pure
        returns (int256)
    {
        return convertFixed(x, _originDigits, digits());
    }

    /**
     * @notice Converts an int256 in the fixed point representation of this 
     * library to a different representation. The _destinationDigits parameter is the
     * precision of the output x. Values with a precision below than 
     * FixidityLib.digits() will be truncated accordingly.
     */
    function fromFixed(int256 x, uint8 _destinationDigits)
        internal
        pure
        returns (int256)
    {
        return convertFixed(x, digits(), _destinationDigits);
    }

    /**
     * @notice Converts two int256 representing a fraction to fixed point units,
     * equivalent to multiplying dividend and divisor by 10^digits().
     * @dev 
     * Test newFixedFraction(maxFixedDiv()+1,1) fails
     * Test newFixedFraction(1,maxFixedDiv()+1) fails
     * Test newFixedFraction(1,0) fails     
     * Test newFixedFraction(0,1) returns 0
     * Test newFixedFraction(1,1) returns fixed1()
     * Test newFixedFraction(maxFixedDiv(),1) returns maxFixedDiv()*fixed1()
     * Test newFixedFraction(1,fixed1()) returns 1
     * Test newFixedFraction(1,fixed1()-1) returns 0
     */
    function newFixedFraction(
        int256 numerator, 
        int256 denominator
        )
        internal
        pure
        returns (int256)
    {
        assert(numerator <= maxNewFixed());
        assert(denominator <= maxNewFixed());
        assert(denominator != 0);
        int256 convertedNumerator = newFixed(numerator);
        int256 convertedDenominator = newFixed(denominator);
        return divide(convertedNumerator, convertedDenominator);
    }

    /**
     * @notice Returns the integer part of a fixed point number.
     * @dev 
     * Test integer(0) returns 0
     * Test integer(fixed1()) returns fixed1()
     * Test integer(newFixed(maxNewFixed())) returns maxNewFixed()*fixed1()
     * Test integer(-fixed1()) returns -fixed1()
     * Test integer(newFixed(-maxNewFixed())) returns -maxNewFixed()*fixed1()
     */
    function integer(int256 x) internal pure returns (int256) {
        return (x / fixed1()) * fixed1(); // Can't overflow
    }

    /**
     * @notice Returns the fractional part of a fixed point number. 
     * In the case of a negative number the fractional is also negative.
     * @dev 
     * Test fractional(0) returns 0
     * Test fractional(fixed1()) returns 0
     * Test fractional(fixed1()-1) returns 10^24-1
     * Test fractional(-fixed1()) returns 0
     * Test fractional(-fixed1()+1) returns -10^24-1
     */
    function fractional(int256 x) internal pure returns (int256) {
        return x - (x / fixed1()) * fixed1(); // Can't overflow
    }

    /**
     * @notice Converts to positive if negative.
     * Due to int256 having one more negative number than positive numbers 
     * abs(minInt256) reverts.
     * @dev 
     * Test abs(0) returns 0
     * Test abs(fixed1()) returns -fixed1()
     * Test abs(-fixed1()) returns fixed1()
     * Test abs(newFixed(maxNewFixed())) returns maxNewFixed()*fixed1()
     * Test abs(newFixed(minNewFixed())) returns -minNewFixed()*fixed1()
     */
    function abs(int256 x) internal pure returns (int256) {
        if (x >= 0) {
            return x;
        } else {
            int256 result = -x;
            assert (result > 0);
            return result;
        }
    }

    /**
     * @notice x+y. If any operator is higher than maxFixedAdd() it 
     * might overflow.
     * In solidity maxInt256 + 1 = minInt256 and viceversa.
     * @dev 
     * Test add(maxFixedAdd(),maxFixedAdd()) returns maxInt256()-1
     * Test add(maxFixedAdd()+1,maxFixedAdd()+1) fails
     * Test add(-maxFixedSub(),-maxFixedSub()) returns minInt256()
     * Test add(-maxFixedSub()-1,-maxFixedSub()-1) fails
     * Test add(maxInt256(),maxInt256()) fails
     * Test add(minInt256(),minInt256()) fails
     */
    function add(int256 x, int256 y) internal pure returns (int256) {
        int256 z = x + y;
        if (x > 0 && y > 0) assert(z > x && z > y);
        if (x < 0 && y < 0) assert(z < x && z < y);
        return z;
    }

    /**
     * @notice x-y. You can use add(x,-y) instead. 
     * @dev Tests covered by add(x,y)
     */
    function subtract(int256 x, int256 y) internal pure returns (int256) {
        return add(x,-y);
    }

    /**
     * @notice x*y. If any of the operators is higher than maxFixedMul() it 
     * might overflow.
     * @dev 
     * Test multiply(0,0) returns 0
     * Test multiply(maxFixedMul(),0) returns 0
     * Test multiply(0,maxFixedMul()) returns 0
     * Test multiply(maxFixedMul(),fixed1()) returns maxFixedMul()
     * Test multiply(fixed1(),maxFixedMul()) returns maxFixedMul()
     * Test all combinations of (2,-2), (2, 2.5), (2, -2.5) and (0.5, -0.5)
     * Test multiply(fixed1()/mulPrecision(),fixed1()*mulPrecision())
     * Test multiply(maxFixedMul()-1,maxFixedMul()) equals multiply(maxFixedMul(),maxFixedMul()-1)
     * Test multiply(maxFixedMul(),maxFixedMul()) returns maxInt256() // Probably not to the last digits
     * Test multiply(maxFixedMul()+1,maxFixedMul()) fails
     * Test multiply(maxFixedMul(),maxFixedMul()+1) fails
     */
    function multiply(int256 x, int256 y) internal pure returns (int256) {
        if (x == 0 || y == 0) return 0;
        if (y == fixed1()) return x;
        if (x == fixed1()) return y;

        // Separate into integer and fractional parts
        // x = x1 + x2, y = y1 + y2
        int256 x1 = integer(x) / fixed1();
        int256 x2 = fractional(x);
        int256 y1 = integer(y) / fixed1();
        int256 y2 = fractional(y);
        
        // (x1 + x2) * (y1 + y2) = (x1 * y1) + (x1 * y2) + (x2 * y1) + (x2 * y2)
        int256 x1y1 = x1 * y1;
        if (x1 != 0) assert(x1y1 / x1 == y1); // Overflow x1y1
        
        // x1y1 needs to be multiplied back by fixed1
        // solium-disable-next-line mixedcase
        int256 fixed_x1y1 = x1y1 * fixed1();
        if (x1y1 != 0) assert(fixed_x1y1 / x1y1 == fixed1()); // Overflow x1y1 * fixed1
        x1y1 = fixed_x1y1;

        int256 x2y1 = x2 * y1;
        if (x2 != 0) assert(x2y1 / x2 == y1); // Overflow x2y1

        int256 x1y2 = x1 * y2;
        if (x1 != 0) assert(x1y2 / x1 == y2); // Overflow x1y2

        x2 = x2 / mulPrecision();
        y2 = y2 / mulPrecision();
        int256 x2y2 = x2 * y2;
        if (x2 != 0) assert(x2y2 / x2 == y2); // Overflow x2y2

        // result = fixed1() * x1 * y1 + x1 * y2 + x2 * y1 + x2 * y2 / fixed1();
        int256 result = x1y1;
        result = add(result, x2y1); // Add checks for overflow
        result = add(result, x1y2); // Add checks for overflow
        result = add(result, x2y2); // Add checks for overflow
        return result;
    }
    
    /**
     * @notice 1/x
     * @dev 
     * Test reciprocal(0) fails
     * Test reciprocal(fixed1()) returns fixed1()
     * Test reciprocal(fixed1()*fixed1()) returns 1 // Testing how the fractional is truncated
     * Test reciprocal(2*fixed1()*fixed1()) returns 0 // Testing how the fractional is truncated
     */
    function reciprocal(int256 x) internal pure returns (int256) {
        assert(x != 0);
        return (fixed1()*fixed1()) / x; // Can't overflow
    }

    /**
     * @notice x/y. If the dividend is higher than maxFixedDiv() it 
     * might overflow. You can use multiply(x,reciprocal(y)) instead.
     * There is a loss of precision on division for the lower mulPrecision() decimals.
     * @dev 
     * Test divide(fixed1(),0) fails
     * Test divide(maxFixedDiv(),1) = maxFixedDiv()*(10^digits())
     * Test divide(maxFixedDiv()+1,1) throws
     * Test divide(maxFixedDiv(),maxFixedDiv()) returns fixed1()
     */
    function divide(int256 x, int256 y) internal pure returns (int256) {
        if (y == fixed1()) return x;
        assert(y != 0);
        assert(y <= maxFixedDivisor());
        return multiply(x, reciprocal(y));
    }
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    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 IFuelTank {
  function openNozzle() external;
  function addTokens(address user, uint amount) external;
}

contract MeowDAO is IERC20, Context {
  using FixidityLib for int256;

  uint256 _totalSupply = 0;
  string private _name;
  string private _symbol;

  uint8 private _decimals = 13;
  uint private _contractStart;

  address public grumpyAddress;
  address public grumpyFuelTankAddress;
  uint public swapEndTime;

  bool public launched = false;

  uint256 public totalStartingSupply = 10**10 * 10**13; //10_000_000_000.0_000_000_000_000 10 billion MEOWS. 10^23

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

  mapping (address => uint) public periodStart;
  mapping (address => bool) public currentlyStaked;
  mapping (address => uint) public unlockStartTime;
  mapping (address => address) public currentVotes;
  mapping (address => uint256) public voteWeights;

  mapping (address => uint256) public stakingCoordinatesTime;
  mapping (address => uint256) public stakingCoordinatesAmount;

  mapping(address => uint256) public voteCounts;
  address[] public voteIterator;
  mapping(address => bool) public walletWasVotedFor;
  address public currentCharityWallet;

  constructor(address _grumpyAddress, address _grumpyFuelTankAddress, string memory __name, string memory __symbol) {
    _name = __name;
    _symbol = __symbol;

    _contractStart = block.timestamp;

    grumpyAddress = _grumpyAddress;
    grumpyFuelTankAddress = _grumpyFuelTankAddress;

    swapEndTime = block.timestamp + (86400 * 5);
  }

  function _swapGrumpyInternal(address user, uint256 amount) private {
    require(block.timestamp < swapEndTime);
    require(!isStaked(user), "cannot swap into staked wallet");
    
    IERC20(grumpyAddress).transferFrom(user, grumpyFuelTankAddress, amount);
    IFuelTank(grumpyFuelTankAddress).addTokens(user, amount);

    _balances[user] += amount;

    _totalSupply += amount;

    emit Transfer(address(0), user, amount);
  }

  function swapGrumpy(uint256 amount) public {
    _swapGrumpyInternal(_msgSender(), amount);
  }

  function initializeCoinThruster() external {
    require(block.timestamp >= swapEndTime, "NotReady");
    require(launched == false, "AlreadyLaunched");

    IFuelTank(grumpyFuelTankAddress).openNozzle();

    if (totalStartingSupply > _totalSupply) {
      uint256 remainingTokens = totalStartingSupply - _totalSupply;

      _balances[grumpyFuelTankAddress] = _balances[grumpyFuelTankAddress] + remainingTokens;
      _totalSupply += remainingTokens;

      emit Transfer(address(0), grumpyFuelTankAddress, remainingTokens);
    }

    launched = true;
  }

  function getBlockTime() public view returns (uint) {
    return block.timestamp;
  }

  function isStaked(address wallet) public view returns (bool) {
    return currentlyStaked[wallet];
  }

  function isUnlocked(address wallet) private returns (bool) {
    uint unlockStarted = unlockStartTime[wallet];

    if (unlockStarted == 0) return true;

    uint unlockedAt = unlockStarted + (86400 * 5);

    if (block.timestamp > unlockedAt) {
      unlockStartTime[wallet] = 0;
      return true;
    }
    else return false;
  }

  function _stakeWalletFor(address sender) private returns (bool) {
    require(!isStaked(sender));
    require(enoughFundsToStake(sender), "InsfcntFnds");
    require(isUnlocked(sender), "WalletIsLocked");

    currentlyStaked[sender] = true;
    unlockStartTime[sender] = 0;
    currentVotes[sender] = address(0);
    periodStart[sender] = block.timestamp;

    stakingCoordinatesTime[sender] = block.timestamp;
    stakingCoordinatesAmount[sender] = _balances[sender];

    return true;
  }

  function stakeWallet() public returns (bool) {
    return _stakeWalletFor(_msgSender());
  }

  function _unstakeWalletFor(address sender, bool shouldReify) private {
    require(isStaked(sender));

    if (shouldReify) reifyYield(sender);

    if (voteWeights[sender] != 0) {
      removeVoteWeight(sender);
      updateCharityWallet();
    }

    currentlyStaked[sender] = false;
    currentVotes[sender] = address(0);
    voteWeights[sender] = 0;
    periodStart[sender] = 0;

    stakingCoordinatesTime[sender] = 0;
    stakingCoordinatesAmount[sender] = 0;

    unlockStartTime[sender] = block.timestamp;
  } 

  function unstakeWallet() public {
    _unstakeWalletFor(_msgSender(), true);
  }

  function unstakeWalletSansReify() public {
    _unstakeWalletFor(_msgSender(), false);
  }

  function voteIteratorLength() external view returns (uint) {
    return voteIterator.length;
  }

  function voteWithRebuildIfNecessary(address charityWalletVote) public {
    if (voteIterator.length == 12 && !walletWasVotedFor[charityWalletVote]) {
      rebuildVotingIterator();
    }
    _voteForAddressBy(charityWalletVote, _msgSender());
  }

  function rebuildVotingIterator() public {
    require(voteIterator.length == 12, "Voting Iterator not full");

    address[12] memory voteCopy;
    for (uint i = 0; i < 12; i++) {
      voteCopy[i] = voteIterator[i];
    }

    //insertion sort copy
    for (uint i = 1; i < 12; i++)
    {
      address keyAddress = voteCopy[i];
      uint key = voteCounts[keyAddress];

      uint j = i - 1;

      bool broke = false;
      while (j >= 0 && voteCounts[voteCopy[j]] < key) {
        voteCopy[j + 1] = voteCopy[j];

        if (j == 0) {
          broke = true;
          break;
        }
        else j--;
      }

      if (broke) voteCopy[0] = keyAddress;
      else voteCopy[j + 1] = keyAddress;
    }

    for (uint i = 11; i >= 6; i--) {
      address vote = voteCopy[i];
      walletWasVotedFor[vote] = false;
    }

    delete voteIterator;
    for (uint i = 0; i < 6; i++) {
      voteIterator.push(voteCopy[i]);
    }

  }

  function _voteForAddressBy(address charityWalletVote, address sender) private {
    require(isStaked(sender));

    trackCandidate(charityWalletVote);

    removeVoteWeight(sender);
    setVoteWeight(sender);
    addVoteWeight(sender, charityWalletVote);
    updateCharityWallet();
  }

  function trackCandidate(address charityWalletCandidate) private {
    // If wallet was never voted for before add it to voteIterator
    if (!walletWasVotedFor[charityWalletCandidate]) {
      require(voteIterator.length < 12, "Vote Iterator must be rebuilt");

      voteIterator.push(charityWalletCandidate);
      walletWasVotedFor[charityWalletCandidate] = true;
    }
  }

  function removeVoteWeight(address sender) private {
    address vote = currentVotes[sender];
    voteCounts[vote] = voteCounts[vote] - voteWeights[sender];
  }

  function setVoteWeight(address sender) private {
    uint256 newVoteWeight = _balances[sender];
    voteWeights[sender] = newVoteWeight;
  }

  function addVoteWeight(address sender, address charityWalletVote) private {
    voteCounts[charityWalletVote] = voteCounts[charityWalletVote] + voteWeights[sender];
    currentVotes[sender] = charityWalletVote;
  }

  function voteForAddress(address charityWalletVote) public {
    _voteForAddressBy(charityWalletVote, _msgSender());
  }

  event NewCharityWallet(address oldW, address newW);

  function updateCharityWallet() private {
    uint256 maxVoteValue = 0; 
    address winner = address(0);

    for (uint i = 0; i < voteIterator.length; i++) {
      address currentWallet = voteIterator[i];
      uint256 voteValue = voteCounts[currentWallet];

      if (voteValue > maxVoteValue) {
        maxVoteValue = voteValue;
        winner = currentWallet;
      }
    }

    if (currentCharityWallet == winner) return;

    emit NewCharityWallet(currentCharityWallet, winner);

    currentCharityWallet = winner;
  }

  function validCharityWallet() internal view returns (bool) {
    return currentCharityWallet != address(0) && !isStaked(currentCharityWallet);
  }

  function getCompoundingFactor(address wallet) private view returns (uint) {
    return block.timestamp - periodStart[wallet];
  }

  function calculateYield(uint256 principal, uint n) public pure returns (uint256) {
    int256 fixedPrincipal = int256(principal).newFixed();

    int256 rate = int256(2144017221509).newFixedFraction(1000000000000000000000);
    int256 fixed2 = int256(2).newFixed();

    while (n > 0) {
      if (n % 2 == 1) {
        fixedPrincipal = fixedPrincipal.add(fixedPrincipal.multiply(rate));
        n -= 1;
      }
      else {
        rate = (fixed2.multiply(rate))
          .add(rate.multiply(rate));
        n /= 2;
      }
    }
    return uint256(fixedPrincipal.fromFixed()) - principal;
  }

  function getTransactionFee(uint256 txAmt) private view returns (uint256){
    uint period = block.timestamp - _contractStart;

    if (period > 31536000) return 0;
    else if (period > 23652000) return txAmt / 400;
    else if (period > 15768000) return txAmt / 200;
    else if (period > 7884000) return (txAmt / 400) * 3;
    else return txAmt / 100;
  } 

  function reifyYield(address wallet) public {
    require(isStaked(wallet), 'MstBeStkd');

    uint compoundingFactor = getCompoundingFactor(wallet);

    if (compoundingFactor < 60) return;

    uint256 yield = calculateYield(_balances[wallet], compoundingFactor);

    _balances[wallet] += yield;

    if (validCharityWallet()) {
      uint256 charityYield = (yield / 7) * 3;
      _balances[currentCharityWallet] += charityYield;
      _totalSupply += (yield + charityYield);
    } else {
      _totalSupply += yield;
    }

    periodStart[wallet] = block.timestamp;
  }

  function enoughFundsToStake(address wallet) private view returns (bool) {
    return _balances[wallet] >= 10000000000000000;
  }

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

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

  function decimals() external view returns (uint8) {
    return _decimals;
  }

  function contractStart() external view returns (uint) {
    return _contractStart;
  }

  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }

  function balanceOf(address account) public view virtual override returns (uint256) {
    uint b = _balances[account];

    if (isStaked(account) && currentCharityWallet != account) {
      return b + calculateYield(b, getCompoundingFactor(account));
    }
    return b;
  }

  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  function _transfer(address sender, address recipient, uint256 amount) internal virtual {
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");
    require(!isStaked(sender), "StkdWlltCnntTrnsf");
    require(isUnlocked(sender), "LockedWlltCnntTrnsfr");
    require(_balances[sender] >= amount, "ERC20: transfer amount exceeds balance");

    if (isStaked(recipient)) {
      reifyYield(recipient);
    }

    uint sentAmount = amount; 

    if (validCharityWallet()) {
      uint256 txFee = getTransactionFee(amount);

      if (txFee != 0) {
        sentAmount -= txFee;
        _balances[currentCharityWallet] += txFee;
      }
    }

    _balances[sender] -= amount;
    _balances[recipient] += sentAmount;

    emit Transfer(sender, recipient, amount);
  }

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

  function approve(address spender, uint256 amount) public override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function _approve(address owner, address spender, uint256 amount) internal virtual {
    require(owner != address(0), "ERC20: approve from the zero address");
    require(spender != address(0), "ERC20: approve to the zero address");

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

  function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
    _transfer(sender, recipient, amount);

    uint256 currentAllowance = _allowances[sender][_msgSender()];
    require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
    _approve(sender, _msgSender(), currentAllowance - amount);

    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
    uint256 currentAllowance = _allowances[_msgSender()][spender];
    require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
    _approve(_msgSender(), spender, currentAllowance - subtractedValue);
    return true;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_grumpyAddress","type":"address"},{"internalType":"address","name":"_grumpyFuelTankAddress","type":"address"},{"internalType":"string","name":"__name","type":"string"},{"internalType":"string","name":"__symbol","type":"string"}],"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":"address","name":"oldW","type":"address"},{"indexed":false,"internalType":"address","name":"newW","type":"address"}],"name":"NewCharityWallet","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"calculateYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"contractStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentCharityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"currentVotes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"currentlyStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grumpyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grumpyFuelTankAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializeCoinThruster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebuildVotingIterator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"reifyYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingCoordinatesAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingCoordinatesTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapGrumpy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStartingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"unlockStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unstakeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeWalletSansReify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voteCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"charityWalletVote","type":"address"}],"name":"voteForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"voteIterator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteIteratorLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voteWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"charityWalletVote","type":"address"}],"name":"voteWithRebuildIfNecessary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletWasVotedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405260008055600d600360006101000a81548160ff021916908360ff1602179055506000600860006101000a81548160ff02191690831515021790555069152d02c7e14af68000006009553480156200005a57600080fd5b50604051620051da380380620051da833981810160405281019062000080919062000295565b8160019080519060200190620000989291906200015c565b508060029080519060200190620000b19291906200015c565b504260048190555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780426200014c91906200039a565b6007819055505050505062000548565b8280546200016a906200046b565b90600052602060002090601f0160209004810192826200018e5760008555620001da565b82601f10620001a957805160ff1916838001178555620001da565b82800160010185558215620001da579182015b82811115620001d9578251825591602001919060010190620001bc565b5b509050620001e99190620001ed565b5090565b5b8082111562000208576000816000905550600101620001ee565b5090565b6000620002236200021d8462000367565b62000333565b9050828152602081018484840111156200023c57600080fd5b6200024984828562000435565b509392505050565b60008151905062000262816200052e565b92915050565b600082601f8301126200027a57600080fd5b81516200028c8482602086016200020c565b91505092915050565b60008060008060808587031215620002ac57600080fd5b6000620002bc8782880162000251565b9450506020620002cf8782880162000251565b935050604085015167ffffffffffffffff811115620002ed57600080fd5b620002fb8782880162000268565b925050606085015167ffffffffffffffff8111156200031957600080fd5b620003278782880162000268565b91505092959194509250565b6000604051905081810181811067ffffffffffffffff821117156200035d576200035c620004ff565b5b8060405250919050565b600067ffffffffffffffff821115620003855762000384620004ff565b5b601f19601f8301169050602081019050919050565b6000620003a7826200042b565b9150620003b4836200042b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620003ec57620003eb620004a1565b5b828201905092915050565b600062000404826200040b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200045557808201518184015260208101905062000438565b8381111562000465576000848401525b50505050565b600060028204905060018216806200048457607f821691505b602082108114156200049b576200049a620004d0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200053981620003f7565b81146200054557600080fd5b50565b614c8280620005586000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80638091f3bf11610146578063aab7c9eb116100c3578063dd62ed3e11610087578063dd62ed3e1461074e578063e3593f201461077e578063e593c34b1461079c578063efebc720146107cc578063f6f70594146107ea578063fdcff7d21461080657610253565b8063aab7c9eb14610696578063c31db906146106c6578063c57db2c0146106e4578063d0dc0d8014610714578063d643391f1461074457610253565b80639aa13f041161010a5780639aa13f04146105cc578063a457c2d7146105ea578063a73d1b061461061a578063a8ce45a91461064a578063a9059cbb1461066657610253565b80638091f3bf1461053657806387ceff09146105545780638a7026251461057257806394e0b68a1461059057806395d89b41146105ae57610253565b806337425fa0116101d457806362ad0b151161019857806362ad0b151461048057806366a267a91461048a57806367cc910f146104ba5780636e4d8397146104ea57806370a082311461050657610253565b806337425fa0146103b657806339509351146103e657806359357df514610416578063611cda25146104205780636177fd181461045057610253565b806318160ddd1161021b57806318160ddd146102fe57806321ac17f81461031c57806323b872dd1461034c57806323c40de21461037c578063313ce5671461039857610253565b8063043cbe5b1461025857806306fdde0314610288578063095ea7b3146102a65780630cc874c7146102d65780630f9154b5146102e0575b600080fd5b610272600480360381019061026d9190613cf5565b610824565b60405161027f91906145f1565b60405180910390f35b61029061092d565b60405161029d91906143af565b60405180910390f35b6102c060048036038101906102bb9190613c67565b6109bf565b6040516102cd9190614394565b60405180910390f35b6102de6109dd565b005b6102e8610caa565b6040516102f59190614394565b60405180910390f35b610306610cc1565b60405161031391906145f1565b60405180910390f35b61033660048036038101906103319190613bb3565b610cca565b60405161034391906145f1565b60405180910390f35b61036660048036038101906103619190613c18565b610ce2565b6040516103739190614394565b60405180910390f35b61039660048036038101906103919190613bb3565b610de3565b005b6103a0610e64565b6040516103ad919061460c565b60405180910390f35b6103d060048036038101906103cb9190613bb3565b610e7b565b6040516103dd91906145f1565b60405180910390f35b61040060048036038101906103fb9190613c67565b610e93565b60405161040d9190614394565b60405180910390f35b61041e610f3f565b005b61043a60048036038101906104359190613ccc565b611540565b60405161044791906142f0565b60405180910390f35b61046a60048036038101906104659190613bb3565b61157f565b6040516104779190614394565b60405180910390f35b6104886115d5565b005b6104a4600480360381019061049f9190613bb3565b6115e9565b6040516104b191906145f1565b60405180910390f35b6104d460048036038101906104cf9190613bb3565b611601565b6040516104e191906145f1565b60405180910390f35b61050460048036038101906104ff9190613ccc565b611619565b005b610520600480360381019061051b9190613bb3565b61162d565b60405161052d91906145f1565b60405180910390f35b61053e611709565b60405161054b9190614394565b60405180910390f35b61055c61171c565b60405161056991906145f1565b60405180910390f35b61057a611724565b60405161058791906145f1565b60405180910390f35b61059861172a565b6040516105a591906145f1565b60405180910390f35b6105b6611737565b6040516105c391906143af565b60405180910390f35b6105d46117c9565b6040516105e191906145f1565b60405180910390f35b61060460048036038101906105ff9190613c67565b6117d3565b6040516106119190614394565b60405180910390f35b610634600480360381019061062f9190613bb3565b6118c7565b60405161064191906145f1565b60405180910390f35b610664600480360381019061065f9190613bb3565b6118df565b005b610680600480360381019061067b9190613c67565b611b14565b60405161068d9190614394565b60405180910390f35b6106b060048036038101906106ab9190613bb3565b611b32565b6040516106bd9190614394565b60405180910390f35b6106ce611b52565b6040516106db91906142f0565b60405180910390f35b6106fe60048036038101906106f99190613bb3565b611b78565b60405161070b9190614394565b60405180910390f35b61072e60048036038101906107299190613bb3565b611b98565b60405161073b91906145f1565b60405180910390f35b61074c611bb0565b005b61076860048036038101906107639190613bdc565b611bc4565b60405161077591906145f1565b60405180910390f35b610786611c4b565b60405161079391906142f0565b60405180910390f35b6107b660048036038101906107b19190613bb3565b611c71565b6040516107c391906142f0565b60405180910390f35b6107d4611ca4565b6040516107e191906145f1565b60405180910390f35b61080460048036038101906107ff9190613bb3565b611caa565b005b61080e611cbe565b60405161081b91906142f0565b60405180910390f35b60008061083084611ce4565b90506000610856683635c9adc5dea000006501f331628785611d7c90919063ffffffff16565b905060006108646002611ce4565b90505b600085111561090e57600160028661087f9190614b38565b14156108c0576108aa61089b8385611e6090919063ffffffff16565b8461213e90919063ffffffff16565b92506001856108b991906149cd565b9450610909565b6108f76108d68384611e6090919063ffffffff16565b6108e98484611e6090919063ffffffff16565b61213e90919063ffffffff16565b91506002856109069190614797565b94505b610867565b8561091884612207565b61092291906149cd565b935050505092915050565b60606001805461093c90614abd565b80601f016020809104026020016040519081016040528092919081815260200182805461096890614abd565b80156109b55780601f1061098a576101008083540402835291602001916109b5565b820191906000526020600020905b81548152906001019060200180831161099857829003601f168201915b5050505050905090565b60006109d36109cc612223565b848461222b565b6001905092915050565b600754421015610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a19906144f1565b60405180910390fd5b60001515600860009054906101000a900460ff16151514610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90614531565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663165505c16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b505050506000546009541115610c8d5760008054600954610b1791906149cd565b905080600a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b8691906146d7565b600a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600080828254610bfc91906146d7565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c8391906145f1565b60405180910390a3505b6001600860006101000a81548160ff021916908315150217905550565b6000610cbc610cb7612223565b6123f6565b905090565b60008054905090565b600e6020528060005260406000206000915090505481565b6000610cef8484846126cb565b6000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d3a612223565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190614511565b60405180910390fd5b610dd785610dc6612223565b8584610dd291906149cd565b61222b565b60019150509392505050565b600c601480549050148015610e425750601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610e5057610e4f610f3f565b5b610e6181610e5c612223565b612a9d565b50565b6000600360009054906101000a900460ff16905090565b600c6020528060005260406000206000915090505481565b6000610f35610ea0612223565b8484600b6000610eae612223565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f3091906146d7565b61222b565b6001905092915050565b600c60148054905014610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906143f1565b60405180910390fd5b610f8f613b13565b60005b600c8110156110835760148181548110610fd5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282600c8110611039577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061107b90614aef565b915050610f92565b506000600190505b600c8110156113b05760008282600c81106110cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015190506000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060018461112991906149cd565b905060005b600082101580156111ba575082601360008885600c8110611178577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b1561129e578582600c81106111f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518660018461120b91906146d7565b600c8110611242577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600082141561128b576001905061129e565b818061129690614a93565b92505061112e565b801561131b5783866000600c81106112df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611399565b838660018461132a91906146d7565b600c8110611361577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5050505080806113a890614aef565b91505061108b565b506000600b90505b6006811061146e5760008282600c81106113fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015190506000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061146690614a93565b9150506113b8565b506014600061147d9190613b36565b60005b600681101561153c5760148282600c81106114c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061153490614aef565b915050611480565b5050565b6014818154811061155057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6115e76115e0612223565b6001612ae0565b565b60136020528060005260406000206000915090505481565b60106020528060005260406000206000915090505481565b61162a611624612223565b82612d8e565b50565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061167b8361157f565b80156116d557508273ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156116ff576116ec816116e785613020565b610824565b816116f791906146d7565b915050611704565b809150505b919050565b600860009054906101000a900460ff1681565b600042905090565b60095481565b6000601480549050905090565b60606002805461174690614abd565b80601f016020809104026020016040519081016040528092919081815260200182805461177290614abd565b80156117bf5780601f10611794576101008083540402835291602001916117bf565b820191906000526020600020905b8154815290600101906020018083116117a257829003601f168201915b5050505050905090565b6000600454905090565b600080600b60006117e2612223565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561189f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611896906145d1565b60405180910390fd5b6118bc6118aa612223565b8585846118b791906149cd565b61222b565b600191505092915050565b60126020528060005260406000206000915090505481565b6118e88161157f565b611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90614491565b60405180910390fd5b600061193282613020565b9050603c8110156119435750611b11565b600061198e600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610824565b905080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119df91906146d7565b925050819055506119ee613074565b15611ab15760006003600783611a049190614797565b611a0e91906148df565b905080600a6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8191906146d7565b925050819055508082611a9491906146d7565b600080828254611aa491906146d7565b9250508190555050611aca565b80600080828254611ac291906146d7565b925050819055505b42600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50565b6000611b28611b21612223565b84846126cb565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b60116020528060005260406000206000915090505481565b611bc2611bbb612223565b6000612ae0565b565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b611cbb81611cb6612223565b612a9d565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cee613101565b821315611d24577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b611d2c61311f565b821215611d62577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b611d6a613147565b82611d7591906147c8565b9050919050565b6000611d86613101565b831315611dbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b611dc4613101565b821315611dfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000821415611e32577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000611e3d84611ce4565b90506000611e4a84611ce4565b9050611e568282613159565b9250505092915050565b600080831480611e705750600082145b15611e7e5760009050612138565b611e86613147565b821415611e9557829050612138565b611e9d613147565b831415611eac57819050612138565b6000611eb6613147565b611ebf85613203565b611ec9919061472d565b90506000611ed685613231565b90506000611ee2613147565b611eeb86613203565b611ef5919061472d565b90506000611f0286613231565b905060008285611f1291906147c8565b905060008514611f5e57828582611f29919061472d565b14611f5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b6000611f68613147565b82611f7391906147c8565b905060008214611fc657611f85613147565b8282611f91919061472d565b14611fc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b80915060008486611fd791906147c8565b90506000861461202357848682611fee919061472d565b14612022577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b6000848861203191906147c8565b90506000881461207d57848882612048919061472d565b1461207c577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b61208561326a565b87612090919061472d565b965061209a61326a565b856120a5919061472d565b9450600085886120b591906147c8565b905060008814612101578588826120cc919061472d565b14612100577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b6000859050612110818561213e565b905061211c818461213e565b9050612128818361213e565b9050809a50505050505050505050505b92915050565b600080828461214d9190614643565b905060008413801561215f5750600083135b156121a657838113801561217257508281135b6121a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b6000841280156121b65750600083125b156121fd5783811280156121c957508281125b6121fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b8091505092915050565b6000612211613147565b8261221c919061472d565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614571565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290614411565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123e991906145f1565b60405180910390a3505050565b60006124018261157f565b1561240b57600080fd5b61241482613277565b612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90614471565b60405180910390fd5b61245c826132ca565b61249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614451565b60405180910390fd5b6001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273290614551565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a2906143d1565b60405180910390fd5b6127b48361157f565b156127f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127eb906144d1565b60405180910390fd5b6127fd836132ca565b61283c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612833906144b1565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590614431565b60405180910390fd5b6128c78261157f565b156128d6576128d5826118df565b5b60008190506128e3613074565b156129865760006128f383613399565b90506000811461298457808261290991906149cd565b915080600a6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461297c91906146d7565b925050819055505b505b81600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129d591906149cd565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2b91906146d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a8f91906145f1565b60405180910390a350505050565b612aa68161157f565b612aaf57600080fd5b612ab882613447565b612ac18161359f565b612aca816136d4565b612ad48183613760565b612adc6138af565b5050565b612ae98261157f565b612af257600080fd5b8015612b0257612b01826118df565b5b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612b5b57612b528261359f565b612b5a6138af565b5b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6007544210612d9c57600080fd5b612da58261157f565b15612de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddc906145b1565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd83600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401612e6693929190614334565b602060405180830381600087803b158015612e8057600080fd5b505af1158015612e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb89190613ca3565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636039fbdb83836040518363ffffffff1660e01b8152600401612f1692919061436b565b600060405180830381600087803b158015612f3057600080fd5b505af1158015612f44573d6000803e3d6000fd5b5050505080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9791906146d7565b9250508190555080600080828254612faf91906146d7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161301491906145f1565b60405180910390a35050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261306d91906149cd565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156130fc57506130fa601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661157f565b155b905090565b6000759abe14cd44753b52c4926a9672793542d78c3615cf3a905090565b60007fffffffffffffffffffff6541eb32bb8ac4ad3b6d95698d86cabd2873c9ea30c6905090565b600069d3c21bcecceda1000000905090565b6000613163613147565b821415613172578290506131fd565b60008214156131aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6131b2613a92565b8213156131e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6131fa836131f584613aae565b611e60565b90505b92915050565b600061320d613147565b613215613147565b83613220919061472d565b61322a91906147c8565b9050919050565b600061323b613147565b613243613147565b8361324e919061472d565b61325891906147c8565b826132639190614939565b9050919050565b600064e8d4a51000905090565b6000662386f26fc10000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410159050919050565b600080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415613322576001915050613394565b6000620697808261333391906146d7565b90508042111561338d576000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600192505050613394565b6000925050505b919050565b600080600454426133aa91906149cd565b90506301e133808111156133c2576000915050613442565b630168e6a08111156133e457610190836133dc9190614797565b915050613442565b62f099c08111156134045760c8836133fc9190614797565b915050613442565b62784ce08111156134315760036101908461341f9190614797565b61342991906148df565b915050613442565b60648361343e9190614797565b9150505b919050565b601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661359c57600c601480549050106134e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d790614591565b60405180910390fd5b6014819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461368d91906149cd565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea91906146d7565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060005b601480549050811015613993576000601482815481106138fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481111561397e578094508193505b5050808061398b90614aef565b9150506138b5565b508073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139f1575050613a90565b7f04611ba562b1be5e5baf710c558258fe11b3eeb5d1d1358f3dbfced2e3b1c24e601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051613a4492919061430b565b60405180910390a180601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505b565b600073af298d050e4395d69670b12b7f41000000000000905090565b600080821415613ae7577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b81613af0613147565b613af8613147565b613b0291906147c8565b613b0c919061472d565b9050919050565b604051806101800160405280600c90602082028036833780820191505090505090565b5080546000825590600052602060002090810190613b549190613b57565b50565b5b80821115613b70576000816000905550600101613b58565b5090565b600081359050613b8381614c07565b92915050565b600081519050613b9881614c1e565b92915050565b600081359050613bad81614c35565b92915050565b600060208284031215613bc557600080fd5b6000613bd384828501613b74565b91505092915050565b60008060408385031215613bef57600080fd5b6000613bfd85828601613b74565b9250506020613c0e85828601613b74565b9150509250929050565b600080600060608486031215613c2d57600080fd5b6000613c3b86828701613b74565b9350506020613c4c86828701613b74565b9250506040613c5d86828701613b9e565b9150509250925092565b60008060408385031215613c7a57600080fd5b6000613c8885828601613b74565b9250506020613c9985828601613b9e565b9150509250929050565b600060208284031215613cb557600080fd5b6000613cc384828501613b89565b91505092915050565b600060208284031215613cde57600080fd5b6000613cec84828501613b9e565b91505092915050565b60008060408385031215613d0857600080fd5b6000613d1685828601613b9e565b9250506020613d2785828601613b9e565b9150509250929050565b613d3a81614a01565b82525050565b613d4981614a13565b82525050565b6000613d5a82614627565b613d648185614632565b9350613d74818560208601614a60565b613d7d81614bf6565b840191505092915050565b6000613d95602383614632565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dfb601883614632565b91507f566f74696e67204974657261746f72206e6f742066756c6c00000000000000006000830152602082019050919050565b6000613e3b602283614632565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ea1602683614632565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f07600e83614632565b91507f57616c6c657449734c6f636b65640000000000000000000000000000000000006000830152602082019050919050565b6000613f47600b83614632565b91507f496e7366636e74466e64730000000000000000000000000000000000000000006000830152602082019050919050565b6000613f87600983614632565b91507f4d7374426553746b6400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613fc7601483614632565b91507f4c6f636b6564576c6c74436e6e7454726e7366720000000000000000000000006000830152602082019050919050565b6000614007601183614632565b91507f53746b64576c6c74436e6e7454726e73660000000000000000000000000000006000830152602082019050919050565b6000614047600883614632565b91507f4e6f7452656164790000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614087602883614632565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140ed600f83614632565b91507f416c72656164794c61756e6368656400000000000000000000000000000000006000830152602082019050919050565b600061412d602583614632565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614193602483614632565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141f9601d83614632565b91507f566f7465204974657261746f72206d7573742062652072656275696c740000006000830152602082019050919050565b6000614239601e83614632565b91507f63616e6e6f74207377617020696e746f207374616b65642077616c6c657400006000830152602082019050919050565b6000614279602583614632565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6142db81614a49565b82525050565b6142ea81614a53565b82525050565b60006020820190506143056000830184613d31565b92915050565b60006040820190506143206000830185613d31565b61432d6020830184613d31565b9392505050565b60006060820190506143496000830186613d31565b6143566020830185613d31565b61436360408301846142d2565b949350505050565b60006040820190506143806000830185613d31565b61438d60208301846142d2565b9392505050565b60006020820190506143a96000830184613d40565b92915050565b600060208201905081810360008301526143c98184613d4f565b905092915050565b600060208201905081810360008301526143ea81613d88565b9050919050565b6000602082019050818103600083015261440a81613dee565b9050919050565b6000602082019050818103600083015261442a81613e2e565b9050919050565b6000602082019050818103600083015261444a81613e94565b9050919050565b6000602082019050818103600083015261446a81613efa565b9050919050565b6000602082019050818103600083015261448a81613f3a565b9050919050565b600060208201905081810360008301526144aa81613f7a565b9050919050565b600060208201905081810360008301526144ca81613fba565b9050919050565b600060208201905081810360008301526144ea81613ffa565b9050919050565b6000602082019050818103600083015261450a8161403a565b9050919050565b6000602082019050818103600083015261452a8161407a565b9050919050565b6000602082019050818103600083015261454a816140e0565b9050919050565b6000602082019050818103600083015261456a81614120565b9050919050565b6000602082019050818103600083015261458a81614186565b9050919050565b600060208201905081810360008301526145aa816141ec565b9050919050565b600060208201905081810360008301526145ca8161422c565b9050919050565b600060208201905081810360008301526145ea8161426c565b9050919050565b600060208201905061460660008301846142d2565b92915050565b600060208201905061462160008301846142e1565b92915050565b600081519050919050565b600082825260208201905092915050565b600061464e82614a1f565b915061465983614a1f565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561469457614693614b69565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156146cc576146cb614b69565b5b828201905092915050565b60006146e282614a49565b91506146ed83614a49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561472257614721614b69565b5b828201905092915050565b600061473882614a1f565b915061474383614a1f565b92508261475357614752614b98565b5b600160000383147f80000000000000000000000000000000000000000000000000000000000000008314161561478c5761478b614b69565b5b828205905092915050565b60006147a282614a49565b91506147ad83614a49565b9250826147bd576147bc614b98565b5b828204905092915050565b60006147d382614a1f565b91506147de83614a1f565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211600084136000841316161561481d5761481c614b69565b5b817f8000000000000000000000000000000000000000000000000000000000000000058312600084126000841316161561485a57614859614b69565b5b827f8000000000000000000000000000000000000000000000000000000000000000058212600084136000841216161561489757614896614b69565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05821260008412600084121616156148d4576148d3614b69565b5b828202905092915050565b60006148ea82614a49565b91506148f583614a49565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561492e5761492d614b69565b5b828202905092915050565b600061494482614a1f565b915061494f83614a1f565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561498a57614989614b69565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182136000841216156149c2576149c1614b69565b5b828203905092915050565b60006149d882614a49565b91506149e383614a49565b9250828210156149f6576149f5614b69565b5b828203905092915050565b6000614a0c82614a29565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015614a7e578082015181840152602081019050614a63565b83811115614a8d576000848401525b50505050565b6000614a9e82614a49565b91506000821415614ab257614ab1614b69565b5b600182039050919050565b60006002820490506001821680614ad557607f821691505b60208210811415614ae957614ae8614bc7565b5b50919050565b6000614afa82614a49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b2d57614b2c614b69565b5b600182019050919050565b6000614b4382614a49565b9150614b4e83614a49565b925082614b5e57614b5d614b98565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b614c1081614a01565b8114614c1b57600080fd5b50565b614c2781614a13565b8114614c3257600080fd5b50565b614c3e81614a49565b8114614c4957600080fd5b5056fea2646970667358221220ad762d19dfb9ad27d8d8063bf861ae736c433b067bdb435a571e4879976cef4164736f6c6343000800003300000000000000000000000093b2fff814fcaeffb01406e80b4ecd89ca6a021b00000000000000000000000018f47e7fe583d8a8297daaa9f8ac89b63b96b8e4000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000184d656f7744414f20476f7665726e616e636520546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000044d454f5700000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102535760003560e01c80638091f3bf11610146578063aab7c9eb116100c3578063dd62ed3e11610087578063dd62ed3e1461074e578063e3593f201461077e578063e593c34b1461079c578063efebc720146107cc578063f6f70594146107ea578063fdcff7d21461080657610253565b8063aab7c9eb14610696578063c31db906146106c6578063c57db2c0146106e4578063d0dc0d8014610714578063d643391f1461074457610253565b80639aa13f041161010a5780639aa13f04146105cc578063a457c2d7146105ea578063a73d1b061461061a578063a8ce45a91461064a578063a9059cbb1461066657610253565b80638091f3bf1461053657806387ceff09146105545780638a7026251461057257806394e0b68a1461059057806395d89b41146105ae57610253565b806337425fa0116101d457806362ad0b151161019857806362ad0b151461048057806366a267a91461048a57806367cc910f146104ba5780636e4d8397146104ea57806370a082311461050657610253565b806337425fa0146103b657806339509351146103e657806359357df514610416578063611cda25146104205780636177fd181461045057610253565b806318160ddd1161021b57806318160ddd146102fe57806321ac17f81461031c57806323b872dd1461034c57806323c40de21461037c578063313ce5671461039857610253565b8063043cbe5b1461025857806306fdde0314610288578063095ea7b3146102a65780630cc874c7146102d65780630f9154b5146102e0575b600080fd5b610272600480360381019061026d9190613cf5565b610824565b60405161027f91906145f1565b60405180910390f35b61029061092d565b60405161029d91906143af565b60405180910390f35b6102c060048036038101906102bb9190613c67565b6109bf565b6040516102cd9190614394565b60405180910390f35b6102de6109dd565b005b6102e8610caa565b6040516102f59190614394565b60405180910390f35b610306610cc1565b60405161031391906145f1565b60405180910390f35b61033660048036038101906103319190613bb3565b610cca565b60405161034391906145f1565b60405180910390f35b61036660048036038101906103619190613c18565b610ce2565b6040516103739190614394565b60405180910390f35b61039660048036038101906103919190613bb3565b610de3565b005b6103a0610e64565b6040516103ad919061460c565b60405180910390f35b6103d060048036038101906103cb9190613bb3565b610e7b565b6040516103dd91906145f1565b60405180910390f35b61040060048036038101906103fb9190613c67565b610e93565b60405161040d9190614394565b60405180910390f35b61041e610f3f565b005b61043a60048036038101906104359190613ccc565b611540565b60405161044791906142f0565b60405180910390f35b61046a60048036038101906104659190613bb3565b61157f565b6040516104779190614394565b60405180910390f35b6104886115d5565b005b6104a4600480360381019061049f9190613bb3565b6115e9565b6040516104b191906145f1565b60405180910390f35b6104d460048036038101906104cf9190613bb3565b611601565b6040516104e191906145f1565b60405180910390f35b61050460048036038101906104ff9190613ccc565b611619565b005b610520600480360381019061051b9190613bb3565b61162d565b60405161052d91906145f1565b60405180910390f35b61053e611709565b60405161054b9190614394565b60405180910390f35b61055c61171c565b60405161056991906145f1565b60405180910390f35b61057a611724565b60405161058791906145f1565b60405180910390f35b61059861172a565b6040516105a591906145f1565b60405180910390f35b6105b6611737565b6040516105c391906143af565b60405180910390f35b6105d46117c9565b6040516105e191906145f1565b60405180910390f35b61060460048036038101906105ff9190613c67565b6117d3565b6040516106119190614394565b60405180910390f35b610634600480360381019061062f9190613bb3565b6118c7565b60405161064191906145f1565b60405180910390f35b610664600480360381019061065f9190613bb3565b6118df565b005b610680600480360381019061067b9190613c67565b611b14565b60405161068d9190614394565b60405180910390f35b6106b060048036038101906106ab9190613bb3565b611b32565b6040516106bd9190614394565b60405180910390f35b6106ce611b52565b6040516106db91906142f0565b60405180910390f35b6106fe60048036038101906106f99190613bb3565b611b78565b60405161070b9190614394565b60405180910390f35b61072e60048036038101906107299190613bb3565b611b98565b60405161073b91906145f1565b60405180910390f35b61074c611bb0565b005b61076860048036038101906107639190613bdc565b611bc4565b60405161077591906145f1565b60405180910390f35b610786611c4b565b60405161079391906142f0565b60405180910390f35b6107b660048036038101906107b19190613bb3565b611c71565b6040516107c391906142f0565b60405180910390f35b6107d4611ca4565b6040516107e191906145f1565b60405180910390f35b61080460048036038101906107ff9190613bb3565b611caa565b005b61080e611cbe565b60405161081b91906142f0565b60405180910390f35b60008061083084611ce4565b90506000610856683635c9adc5dea000006501f331628785611d7c90919063ffffffff16565b905060006108646002611ce4565b90505b600085111561090e57600160028661087f9190614b38565b14156108c0576108aa61089b8385611e6090919063ffffffff16565b8461213e90919063ffffffff16565b92506001856108b991906149cd565b9450610909565b6108f76108d68384611e6090919063ffffffff16565b6108e98484611e6090919063ffffffff16565b61213e90919063ffffffff16565b91506002856109069190614797565b94505b610867565b8561091884612207565b61092291906149cd565b935050505092915050565b60606001805461093c90614abd565b80601f016020809104026020016040519081016040528092919081815260200182805461096890614abd565b80156109b55780601f1061098a576101008083540402835291602001916109b5565b820191906000526020600020905b81548152906001019060200180831161099857829003601f168201915b5050505050905090565b60006109d36109cc612223565b848461222b565b6001905092915050565b600754421015610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a19906144f1565b60405180910390fd5b60001515600860009054906101000a900460ff16151514610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90614531565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663165505c16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b505050506000546009541115610c8d5760008054600954610b1791906149cd565b905080600a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b8691906146d7565b600a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600080828254610bfc91906146d7565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c8391906145f1565b60405180910390a3505b6001600860006101000a81548160ff021916908315150217905550565b6000610cbc610cb7612223565b6123f6565b905090565b60008054905090565b600e6020528060005260406000206000915090505481565b6000610cef8484846126cb565b6000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d3a612223565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190614511565b60405180910390fd5b610dd785610dc6612223565b8584610dd291906149cd565b61222b565b60019150509392505050565b600c601480549050148015610e425750601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610e5057610e4f610f3f565b5b610e6181610e5c612223565b612a9d565b50565b6000600360009054906101000a900460ff16905090565b600c6020528060005260406000206000915090505481565b6000610f35610ea0612223565b8484600b6000610eae612223565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f3091906146d7565b61222b565b6001905092915050565b600c60148054905014610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906143f1565b60405180910390fd5b610f8f613b13565b60005b600c8110156110835760148181548110610fd5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282600c8110611039577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061107b90614aef565b915050610f92565b506000600190505b600c8110156113b05760008282600c81106110cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015190506000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060018461112991906149cd565b905060005b600082101580156111ba575082601360008885600c8110611178577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b1561129e578582600c81106111f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518660018461120b91906146d7565b600c8110611242577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600082141561128b576001905061129e565b818061129690614a93565b92505061112e565b801561131b5783866000600c81106112df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611399565b838660018461132a91906146d7565b600c8110611361577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5050505080806113a890614aef565b91505061108b565b506000600b90505b6006811061146e5760008282600c81106113fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015190506000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061146690614a93565b9150506113b8565b506014600061147d9190613b36565b60005b600681101561153c5760148282600c81106114c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061153490614aef565b915050611480565b5050565b6014818154811061155057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6115e76115e0612223565b6001612ae0565b565b60136020528060005260406000206000915090505481565b60106020528060005260406000206000915090505481565b61162a611624612223565b82612d8e565b50565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061167b8361157f565b80156116d557508273ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156116ff576116ec816116e785613020565b610824565b816116f791906146d7565b915050611704565b809150505b919050565b600860009054906101000a900460ff1681565b600042905090565b60095481565b6000601480549050905090565b60606002805461174690614abd565b80601f016020809104026020016040519081016040528092919081815260200182805461177290614abd565b80156117bf5780601f10611794576101008083540402835291602001916117bf565b820191906000526020600020905b8154815290600101906020018083116117a257829003601f168201915b5050505050905090565b6000600454905090565b600080600b60006117e2612223565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561189f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611896906145d1565b60405180910390fd5b6118bc6118aa612223565b8585846118b791906149cd565b61222b565b600191505092915050565b60126020528060005260406000206000915090505481565b6118e88161157f565b611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90614491565b60405180910390fd5b600061193282613020565b9050603c8110156119435750611b11565b600061198e600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610824565b905080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119df91906146d7565b925050819055506119ee613074565b15611ab15760006003600783611a049190614797565b611a0e91906148df565b905080600a6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8191906146d7565b925050819055508082611a9491906146d7565b600080828254611aa491906146d7565b9250508190555050611aca565b80600080828254611ac291906146d7565b925050819055505b42600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50565b6000611b28611b21612223565b84846126cb565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b60116020528060005260406000206000915090505481565b611bc2611bbb612223565b6000612ae0565b565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b611cbb81611cb6612223565b612a9d565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cee613101565b821315611d24577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b611d2c61311f565b821215611d62577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b611d6a613147565b82611d7591906147c8565b9050919050565b6000611d86613101565b831315611dbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b611dc4613101565b821315611dfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000821415611e32577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000611e3d84611ce4565b90506000611e4a84611ce4565b9050611e568282613159565b9250505092915050565b600080831480611e705750600082145b15611e7e5760009050612138565b611e86613147565b821415611e9557829050612138565b611e9d613147565b831415611eac57819050612138565b6000611eb6613147565b611ebf85613203565b611ec9919061472d565b90506000611ed685613231565b90506000611ee2613147565b611eeb86613203565b611ef5919061472d565b90506000611f0286613231565b905060008285611f1291906147c8565b905060008514611f5e57828582611f29919061472d565b14611f5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b6000611f68613147565b82611f7391906147c8565b905060008214611fc657611f85613147565b8282611f91919061472d565b14611fc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b80915060008486611fd791906147c8565b90506000861461202357848682611fee919061472d565b14612022577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b6000848861203191906147c8565b90506000881461207d57848882612048919061472d565b1461207c577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b61208561326a565b87612090919061472d565b965061209a61326a565b856120a5919061472d565b9450600085886120b591906147c8565b905060008814612101578588826120cc919061472d565b14612100577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b6000859050612110818561213e565b905061211c818461213e565b9050612128818361213e565b9050809a50505050505050505050505b92915050565b600080828461214d9190614643565b905060008413801561215f5750600083135b156121a657838113801561217257508281135b6121a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b6000841280156121b65750600083125b156121fd5783811280156121c957508281125b6121fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b8091505092915050565b6000612211613147565b8261221c919061472d565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614571565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290614411565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123e991906145f1565b60405180910390a3505050565b60006124018261157f565b1561240b57600080fd5b61241482613277565b612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90614471565b60405180910390fd5b61245c826132ca565b61249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614451565b60405180910390fd5b6001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273290614551565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a2906143d1565b60405180910390fd5b6127b48361157f565b156127f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127eb906144d1565b60405180910390fd5b6127fd836132ca565b61283c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612833906144b1565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590614431565b60405180910390fd5b6128c78261157f565b156128d6576128d5826118df565b5b60008190506128e3613074565b156129865760006128f383613399565b90506000811461298457808261290991906149cd565b915080600a6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461297c91906146d7565b925050819055505b505b81600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129d591906149cd565b9250508190555080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2b91906146d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a8f91906145f1565b60405180910390a350505050565b612aa68161157f565b612aaf57600080fd5b612ab882613447565b612ac18161359f565b612aca816136d4565b612ad48183613760565b612adc6138af565b5050565b612ae98261157f565b612af257600080fd5b8015612b0257612b01826118df565b5b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612b5b57612b528261359f565b612b5a6138af565b5b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6007544210612d9c57600080fd5b612da58261157f565b15612de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddc906145b1565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd83600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401612e6693929190614334565b602060405180830381600087803b158015612e8057600080fd5b505af1158015612e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb89190613ca3565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636039fbdb83836040518363ffffffff1660e01b8152600401612f1692919061436b565b600060405180830381600087803b158015612f3057600080fd5b505af1158015612f44573d6000803e3d6000fd5b5050505080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9791906146d7565b9250508190555080600080828254612faf91906146d7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161301491906145f1565b60405180910390a35050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261306d91906149cd565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156130fc57506130fa601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661157f565b155b905090565b6000759abe14cd44753b52c4926a9672793542d78c3615cf3a905090565b60007fffffffffffffffffffff6541eb32bb8ac4ad3b6d95698d86cabd2873c9ea30c6905090565b600069d3c21bcecceda1000000905090565b6000613163613147565b821415613172578290506131fd565b60008214156131aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6131b2613a92565b8213156131e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6131fa836131f584613aae565b611e60565b90505b92915050565b600061320d613147565b613215613147565b83613220919061472d565b61322a91906147c8565b9050919050565b600061323b613147565b613243613147565b8361324e919061472d565b61325891906147c8565b826132639190614939565b9050919050565b600064e8d4a51000905090565b6000662386f26fc10000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410159050919050565b600080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415613322576001915050613394565b6000620697808261333391906146d7565b90508042111561338d576000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600192505050613394565b6000925050505b919050565b600080600454426133aa91906149cd565b90506301e133808111156133c2576000915050613442565b630168e6a08111156133e457610190836133dc9190614797565b915050613442565b62f099c08111156134045760c8836133fc9190614797565b915050613442565b62784ce08111156134315760036101908461341f9190614797565b61342991906148df565b915050613442565b60648361343e9190614797565b9150505b919050565b601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661359c57600c601480549050106134e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d790614591565b60405180910390fd5b6014819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461368d91906149cd565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea91906146d7565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060005b601480549050811015613993576000601482815481106138fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481111561397e578094508193505b5050808061398b90614aef565b9150506138b5565b508073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139f1575050613a90565b7f04611ba562b1be5e5baf710c558258fe11b3eeb5d1d1358f3dbfced2e3b1c24e601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051613a4492919061430b565b60405180910390a180601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505b565b600073af298d050e4395d69670b12b7f41000000000000905090565b600080821415613ae7577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b81613af0613147565b613af8613147565b613b0291906147c8565b613b0c919061472d565b9050919050565b604051806101800160405280600c90602082028036833780820191505090505090565b5080546000825590600052602060002090810190613b549190613b57565b50565b5b80821115613b70576000816000905550600101613b58565b5090565b600081359050613b8381614c07565b92915050565b600081519050613b9881614c1e565b92915050565b600081359050613bad81614c35565b92915050565b600060208284031215613bc557600080fd5b6000613bd384828501613b74565b91505092915050565b60008060408385031215613bef57600080fd5b6000613bfd85828601613b74565b9250506020613c0e85828601613b74565b9150509250929050565b600080600060608486031215613c2d57600080fd5b6000613c3b86828701613b74565b9350506020613c4c86828701613b74565b9250506040613c5d86828701613b9e565b9150509250925092565b60008060408385031215613c7a57600080fd5b6000613c8885828601613b74565b9250506020613c9985828601613b9e565b9150509250929050565b600060208284031215613cb557600080fd5b6000613cc384828501613b89565b91505092915050565b600060208284031215613cde57600080fd5b6000613cec84828501613b9e565b91505092915050565b60008060408385031215613d0857600080fd5b6000613d1685828601613b9e565b9250506020613d2785828601613b9e565b9150509250929050565b613d3a81614a01565b82525050565b613d4981614a13565b82525050565b6000613d5a82614627565b613d648185614632565b9350613d74818560208601614a60565b613d7d81614bf6565b840191505092915050565b6000613d95602383614632565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dfb601883614632565b91507f566f74696e67204974657261746f72206e6f742066756c6c00000000000000006000830152602082019050919050565b6000613e3b602283614632565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ea1602683614632565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f07600e83614632565b91507f57616c6c657449734c6f636b65640000000000000000000000000000000000006000830152602082019050919050565b6000613f47600b83614632565b91507f496e7366636e74466e64730000000000000000000000000000000000000000006000830152602082019050919050565b6000613f87600983614632565b91507f4d7374426553746b6400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613fc7601483614632565b91507f4c6f636b6564576c6c74436e6e7454726e7366720000000000000000000000006000830152602082019050919050565b6000614007601183614632565b91507f53746b64576c6c74436e6e7454726e73660000000000000000000000000000006000830152602082019050919050565b6000614047600883614632565b91507f4e6f7452656164790000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614087602883614632565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140ed600f83614632565b91507f416c72656164794c61756e6368656400000000000000000000000000000000006000830152602082019050919050565b600061412d602583614632565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614193602483614632565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141f9601d83614632565b91507f566f7465204974657261746f72206d7573742062652072656275696c740000006000830152602082019050919050565b6000614239601e83614632565b91507f63616e6e6f74207377617020696e746f207374616b65642077616c6c657400006000830152602082019050919050565b6000614279602583614632565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6142db81614a49565b82525050565b6142ea81614a53565b82525050565b60006020820190506143056000830184613d31565b92915050565b60006040820190506143206000830185613d31565b61432d6020830184613d31565b9392505050565b60006060820190506143496000830186613d31565b6143566020830185613d31565b61436360408301846142d2565b949350505050565b60006040820190506143806000830185613d31565b61438d60208301846142d2565b9392505050565b60006020820190506143a96000830184613d40565b92915050565b600060208201905081810360008301526143c98184613d4f565b905092915050565b600060208201905081810360008301526143ea81613d88565b9050919050565b6000602082019050818103600083015261440a81613dee565b9050919050565b6000602082019050818103600083015261442a81613e2e565b9050919050565b6000602082019050818103600083015261444a81613e94565b9050919050565b6000602082019050818103600083015261446a81613efa565b9050919050565b6000602082019050818103600083015261448a81613f3a565b9050919050565b600060208201905081810360008301526144aa81613f7a565b9050919050565b600060208201905081810360008301526144ca81613fba565b9050919050565b600060208201905081810360008301526144ea81613ffa565b9050919050565b6000602082019050818103600083015261450a8161403a565b9050919050565b6000602082019050818103600083015261452a8161407a565b9050919050565b6000602082019050818103600083015261454a816140e0565b9050919050565b6000602082019050818103600083015261456a81614120565b9050919050565b6000602082019050818103600083015261458a81614186565b9050919050565b600060208201905081810360008301526145aa816141ec565b9050919050565b600060208201905081810360008301526145ca8161422c565b9050919050565b600060208201905081810360008301526145ea8161426c565b9050919050565b600060208201905061460660008301846142d2565b92915050565b600060208201905061462160008301846142e1565b92915050565b600081519050919050565b600082825260208201905092915050565b600061464e82614a1f565b915061465983614a1f565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561469457614693614b69565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156146cc576146cb614b69565b5b828201905092915050565b60006146e282614a49565b91506146ed83614a49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561472257614721614b69565b5b828201905092915050565b600061473882614a1f565b915061474383614a1f565b92508261475357614752614b98565b5b600160000383147f80000000000000000000000000000000000000000000000000000000000000008314161561478c5761478b614b69565b5b828205905092915050565b60006147a282614a49565b91506147ad83614a49565b9250826147bd576147bc614b98565b5b828204905092915050565b60006147d382614a1f565b91506147de83614a1f565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211600084136000841316161561481d5761481c614b69565b5b817f8000000000000000000000000000000000000000000000000000000000000000058312600084126000841316161561485a57614859614b69565b5b827f8000000000000000000000000000000000000000000000000000000000000000058212600084136000841216161561489757614896614b69565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05821260008412600084121616156148d4576148d3614b69565b5b828202905092915050565b60006148ea82614a49565b91506148f583614a49565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561492e5761492d614b69565b5b828202905092915050565b600061494482614a1f565b915061494f83614a1f565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561498a57614989614b69565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182136000841216156149c2576149c1614b69565b5b828203905092915050565b60006149d882614a49565b91506149e383614a49565b9250828210156149f6576149f5614b69565b5b828203905092915050565b6000614a0c82614a29565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015614a7e578082015181840152602081019050614a63565b83811115614a8d576000848401525b50505050565b6000614a9e82614a49565b91506000821415614ab257614ab1614b69565b5b600182039050919050565b60006002820490506001821680614ad557607f821691505b60208210811415614ae957614ae8614bc7565b5b50919050565b6000614afa82614a49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b2d57614b2c614b69565b5b600182019050919050565b6000614b4382614a49565b9150614b4e83614a49565b925082614b5e57614b5d614b98565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b614c1081614a01565b8114614c1b57600080fd5b50565b614c2781614a13565b8114614c3257600080fd5b50565b614c3e81614a49565b8114614c4957600080fd5b5056fea2646970667358221220ad762d19dfb9ad27d8d8063bf861ae736c433b067bdb435a571e4879976cef4164736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000093b2fff814fcaeffb01406e80b4ecd89ca6a021b00000000000000000000000018f47e7fe583d8a8297daaa9f8ac89b63b96b8e4000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000184d656f7744414f20476f7665726e616e636520546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000044d454f5700000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _grumpyAddress (address): 0x93B2FfF814FCaEFFB01406e80B4Ecd89Ca6A021b
Arg [1] : _grumpyFuelTankAddress (address): 0x18f47e7FE583D8A8297daAA9f8AC89B63b96b8e4
Arg [2] : __name (string): MeowDAO Governance Token
Arg [3] : __symbol (string): MEOW

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000093b2fff814fcaeffb01406e80b4ecd89ca6a021b
Arg [1] : 00000000000000000000000018f47e7fe583d8a8297daaa9f8ac89b63b96b8e4
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [5] : 4d656f7744414f20476f7665726e616e636520546f6b656e0000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4d454f5700000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

21318:13297:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29476:611;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31200:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33155:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23409:574;;;:::i;:::-;;25052:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31554:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22030:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33646:392;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25985:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31375:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21928:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34044:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26242:974;;;:::i;:::-;;22370:29;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24081:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25695:82;;;:::i;:::-;;22320:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22136:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23306:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31656:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21648:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23989:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21683:52;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25881:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31286:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31460:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34255:357;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22253:60;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30465:593;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31942:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22404:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22458:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21977:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22190:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25783:92;;;:::i;:::-;;33004:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21577:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22083:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21618:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28452:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21544:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29476:611;29548:7;29564:21;29588:28;29595:9;29588:26;:28::i;:::-;29564:52;;29625:11;29639:62;29678:22;29646:13;29639:38;;:62;;;;:::i;:::-;29625:76;;29708:13;29724:20;29731:1;29724:18;:20::i;:::-;29708:36;;29753:268;29764:1;29760;:5;29753:268;;;29789:1;29784;29780;:5;;;;:::i;:::-;:10;29776:238;;;29820:49;29839:29;29863:4;29839:14;:23;;:29;;;;:::i;:::-;29820:14;:18;;:49;;;;:::i;:::-;29803:66;;29885:1;29880:6;;;;;:::i;:::-;;;29776:238;;;29927:60;29967:19;29981:4;29967;:13;;:19;;;;:::i;:::-;29928:21;29944:4;29928:6;:15;;:21;;;;:::i;:::-;29927:39;;:60;;;;:::i;:::-;29920:67;;30003:1;29998:6;;;;;:::i;:::-;;;29776:238;29753:268;;;30072:9;30042:26;:14;:24;:26::i;:::-;30034:47;;;;:::i;:::-;30027:54;;;;;29476:611;;;;:::o;31200:79::-;31239:13;31268:5;31261:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31200:79;:::o;33155:151::-;33230:4;33243:39;33252:12;:10;:12::i;:::-;33266:7;33275:6;33243:8;:39::i;:::-;33296:4;33289:11;;33155:151;;;;:::o;23409:574::-;23486:11;;23467:15;:30;;23459:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;23537:5;23525:17;;:8;;;;;;;;;;;:17;;;23517:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23581:21;;;;;;;;;;;23571:43;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23651:12;;23629:19;;:34;23625:329;;;23674:23;23722:12;;23700:19;;:34;;;;:::i;:::-;23674:60;;23815:15;23780:9;:32;23790:21;;;;;;;;;;;23780:32;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;23745:9;:32;23755:21;;;;;;;;;;;23745:32;;;;;;;;;;;;;;;:85;;;;23855:15;23839:12;;:31;;;;;;;:::i;:::-;;;;;;;;23907:21;;;;;;;;;;;23886:60;;23903:1;23886:60;;;23930:15;23886:60;;;;;;:::i;:::-;;;;;;;;23625:329;;23973:4;23962:8;;:15;;;;;;;;;;;;;;;;;;23409:574::o;25052:94::-;25091:4;25111:29;25127:12;:10;:12::i;:::-;25111:15;:29::i;:::-;25104:36;;25052:94;:::o;31554:96::-;31609:7;31632:12;;31625:19;;31554:96;:::o;22030:48::-;;;;;;;;;;;;;;;;;:::o;33646:392::-;33744:4;33757:36;33767:6;33775:9;33786:6;33757:9;:36::i;:::-;33802:24;33829:11;:19;33841:6;33829:19;;;;;;;;;;;;;;;:33;33849:12;:10;:12::i;:::-;33829:33;;;;;;;;;;;;;;;;33802:60;;33897:6;33877:16;:26;;33869:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;33955:57;33964:6;33972:12;:10;:12::i;:::-;34005:6;33986:16;:25;;;;:::i;:::-;33955:8;:57::i;:::-;34028:4;34021:11;;;33646:392;;;;;:::o;25985:251::-;26089:2;26066:12;:19;;;;:25;:66;;;;;26096:17;:36;26114:17;26096:36;;;;;;;;;;;;;;;;;;;;;;;;;26095:37;26066:66;26062:112;;;26143:23;:21;:23::i;:::-;26062:112;26180:50;26198:17;26217:12;:10;:12::i;:::-;26180:17;:50::i;:::-;25985:251;:::o;31375:79::-;31418:5;31439:9;;;;;;;;;;;31432:16;;31375:79;:::o;21928:44::-;;;;;;;;;;;;;;;;;:::o;34044:205::-;34132:4;34145:80;34154:12;:10;:12::i;:::-;34168:7;34214:10;34177:11;:25;34189:12;:10;:12::i;:::-;34177:25;;;;;;;;;;;;;;;:34;34203:7;34177:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;34145:8;:80::i;:::-;34239:4;34232:11;;34044:205;;;;:::o;26242:974::-;26320:2;26297:12;:19;;;;:25;26289:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26360:27;;:::i;:::-;26399:6;26394:76;26415:2;26411:1;:6;26394:76;;;26447:12;26460:1;26447:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26433:8;26442:1;26433:11;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;26419:3;;;;;:::i;:::-;;;;26394:76;;;;26510:6;26519:1;26510:10;;26505:472;26526:2;26522:1;:6;26505:472;;;26549:18;26570:8;26579:1;26570:11;;;;;;;;;;;;;;;;;;;26549:32;;26590:8;26601:10;:22;26612:10;26601:22;;;;;;;;;;;;;;;;26590:33;;26634:6;26647:1;26643;:5;;;;:::i;:::-;26634:14;;26659:10;26686:196;26698:1;26693;:6;;:39;;;;;26729:3;26703:10;:23;26714:8;26723:1;26714:11;;;;;;;;;;;;;;;;;;;26703:23;;;;;;;;;;;;;;;;:29;26693:39;26686:196;;;26763:8;26772:1;26763:11;;;;;;;;;;;;;;;;;;;26745:8;26758:1;26754;:5;;;;:::i;:::-;26745:15;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;26796:1;26791;:6;26787:85;;;26820:4;26812:12;;26837:5;;26787:85;26869:3;;;;;:::i;:::-;;;;26686:196;;;26896:5;26892:77;;;26917:10;26903:8;26912:1;26903:11;;;;;;;;;;;;;;;;;;:24;;;;;;;;;;;26892:77;;;26959:10;26941:8;26954:1;26950;:5;;;;:::i;:::-;26941:15;;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;26892:77;26505:472;;;;26530:3;;;;;:::i;:::-;;;;26505:472;;;;26990:6;26999:2;26990:11;;26985:114;27008:1;27003;:6;26985:114;;27025:12;27040:8;27049:1;27040:11;;;;;;;;;;;;;;;;;;;27025:26;;27086:5;27060:17;:23;27078:4;27060:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26985:114;27011:3;;;;;:::i;:::-;;;;26985:114;;;;27114:12;;27107:19;;;;:::i;:::-;27138:6;27133:76;27154:1;27150;:5;27133:76;;;27171:12;27189:8;27198:1;27189:11;;;;;;;;;;;;;;;;;;;27171:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27157:3;;;;;:::i;:::-;;;;27133:76;;;;26242:974;:::o;22370:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24081:104::-;24136:4;24156:15;:23;24172:6;24156:23;;;;;;;;;;;;;;;;;;;;;;;;;24149:30;;24081:104;;;:::o;25695:82::-;25734:37;25752:12;:10;:12::i;:::-;25766:4;25734:17;:37::i;:::-;25695:82::o;22320:45::-;;;;;;;;;;;;;;;;;:::o;22136:47::-;;;;;;;;;;;;;;;;;:::o;23306:97::-;23356:41;23376:12;:10;:12::i;:::-;23390:6;23356:19;:41::i;:::-;23306:97;:::o;31656:280::-;31730:7;31746:6;31755:9;:18;31765:7;31755:18;;;;;;;;;;;;;;;;31746:27;;31786:17;31795:7;31786:8;:17::i;:::-;:52;;;;;31831:7;31807:31;;:20;;;;;;;;;;;:31;;;;31786:52;31782:134;;;31860:48;31875:1;31878:29;31899:7;31878:20;:29::i;:::-;31860:14;:48::i;:::-;31856:1;:52;;;;:::i;:::-;31849:59;;;;;31782:134;31929:1;31922:8;;;31656:280;;;;:::o;21648:28::-;;;;;;;;;;;;;:::o;23989:86::-;24034:4;24054:15;24047:22;;23989:86;:::o;21683:52::-;;;;:::o;25881:98::-;25934:4;25954:12;:19;;;;25947:26;;25881:98;:::o;31286:83::-;31327:13;31356:7;31349:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31286:83;:::o;31460:88::-;31508:4;31528:14;;31521:21;;31460:88;:::o;34255:357::-;34348:4;34361:24;34388:11;:25;34400:12;:10;:12::i;:::-;34388:25;;;;;;;;;;;;;;;:34;34414:7;34388:34;;;;;;;;;;;;;;;;34361:61;;34457:15;34437:16;:35;;34429:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34521:67;34530:12;:10;:12::i;:::-;34544:7;34572:15;34553:16;:34;;;;:::i;:::-;34521:8;:67::i;:::-;34602:4;34595:11;;;34255:357;;;;:::o;22253:60::-;;;;;;;;;;;;;;;;;:::o;30465:593::-;30523:16;30532:6;30523:8;:16::i;:::-;30515:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;30562:22;30587:28;30608:6;30587:20;:28::i;:::-;30562:53;;30648:2;30628:17;:22;30624:35;;;30652:7;;;30624:35;30667:13;30683:52;30698:9;:17;30708:6;30698:17;;;;;;;;;;;;;;;;30717;30683:14;:52::i;:::-;30667:68;;30765:5;30744:9;:17;30754:6;30744:17;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;30783:20;:18;:20::i;:::-;30779:228;;;30814:20;30851:1;30846;30838:5;:9;;;;:::i;:::-;30837:15;;;;:::i;:::-;30814:38;;30896:12;30861:9;:31;30871:20;;;;;;;;;;;30861:31;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;30942:12;30934:5;:20;;;;:::i;:::-;30917:12;;:38;;;;;;;:::i;:::-;;;;;;;;30779:228;;;;30994:5;30978:12;;:21;;;;;;;:::i;:::-;;;;;;;;30779:228;31037:15;31015:11;:19;31027:6;31015:19;;;;;;;;;;;;;;;:37;;;;30465:593;;;;:::o;31942:165::-;32028:4;32041:42;32051:12;:10;:12::i;:::-;32065:9;32076:6;32041:9;:42::i;:::-;32097:4;32090:11;;31942:165;;;;:::o;22404:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;22458:35::-;;;;;;;;;;;;;:::o;21977:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;22190:58::-;;;;;;;;;;;;;;;;;:::o;25783:92::-;25831:38;25849:12;:10;:12::i;:::-;25863:5;25831:17;:38::i;:::-;25783:92::o;33004:145::-;33093:7;33116:11;:18;33128:5;33116:18;;;;;;;;;;;;;;;:27;33135:7;33116:27;;;;;;;;;;;;;;;;33109:34;;33004:145;;;;:::o;21577:36::-;;;;;;;;;;;;;:::o;22083:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;21618:23::-;;;;:::o;28452:121::-;28517:50;28535:17;28554:12;:10;:12::i;:::-;28517:17;:50::i;:::-;28452:121;:::o;21544:28::-;;;;;;;;;;;;;:::o;6035:203::-;6113:6;6149:13;:11;:13::i;:::-;6144:1;:18;;6137:26;;;;;;;;;;;;6186:13;:11;:13::i;:::-;6181:1;:18;;6174:26;;;;;;;;;;;;6222:8;:6;:8::i;:::-;6218:1;:12;;;;:::i;:::-;6211:19;;6035:203;;;:::o;10662:478::-;10806:6;10850:13;:11;:13::i;:::-;10837:9;:26;;10830:34;;;;;;;;;;;;10897:13;:11;:13::i;:::-;10882:11;:28;;10875:36;;;;;;;;;;;;10944:1;10929:11;:16;;10922:24;;;;;;;;;;;;10957:25;10985:19;10994:9;10985:8;:19::i;:::-;10957:47;;11015:27;11045:21;11054:11;11045:8;:21::i;:::-;11015:51;;11084:48;11091:18;11111:20;11084:6;:48::i;:::-;11077:55;;;;10662:478;;;;:::o;14781:1606::-;14842:6;14870:1;14865;:6;:16;;;;14880:1;14875;:6;14865:16;14861:30;;;14890:1;14883:8;;;;14861:30;14911:8;:6;:8::i;:::-;14906:1;:13;14902:27;;;14928:1;14921:8;;;;14902:27;14949:8;:6;:8::i;:::-;14944:1;:13;14940:27;;;14966:1;14959:8;;;;14940:27;15072:9;15097:8;:6;:8::i;:::-;15084:10;15092:1;15084:7;:10::i;:::-;:21;;;;:::i;:::-;15072:33;;15116:9;15128:13;15139:1;15128:10;:13::i;:::-;15116:25;;15152:9;15177:8;:6;:8::i;:::-;15164:10;15172:1;15164:7;:10::i;:::-;:21;;;;:::i;:::-;15152:33;;15196:9;15208:13;15219:1;15208:10;:13::i;:::-;15196:25;;15324:11;15343:2;15338;:7;;;;:::i;:::-;15324:21;;15366:1;15360:2;:7;15356:36;;15389:2;15383;15376:4;:9;;;;:::i;:::-;:15;15369:23;;;;;;;;;;;;15356:36;15532:17;15559:8;:6;:8::i;:::-;15552:4;:15;;;;:::i;:::-;15532:35;;15590:1;15582:4;:9;15578:52;;15621:8;:6;:8::i;:::-;15613:4;15600:10;:17;;;;:::i;:::-;:29;15593:37;;;;;;;;;;;;15578:52;15674:10;15667:17;;15697:11;15716:2;15711;:7;;;;:::i;:::-;15697:21;;15739:1;15733:2;:7;15729:36;;15762:2;15756;15749:4;:9;;;;:::i;:::-;:15;15742:23;;;;;;;;;;;;15729:36;15795:11;15814:2;15809;:7;;;;:::i;:::-;15795:21;;15837:1;15831:2;:7;15827:36;;15860:2;15854;15847:4;:9;;;;:::i;:::-;:15;15840:23;;;;;;;;;;;;15827:36;15903:14;:12;:14::i;:::-;15898:2;:19;;;;:::i;:::-;15893:24;;15938:14;:12;:14::i;:::-;15933:2;:19;;;;:::i;:::-;15928:24;;15963:11;15982:2;15977;:7;;;;:::i;:::-;15963:21;;16005:1;15999:2;:7;15995:36;;16028:2;16022;16015:4;:9;;;;:::i;:::-;:15;16008:23;;;;;;;;;;;;15995:36;16143:13;16159:4;16143:20;;16183:17;16187:6;16195:4;16183:3;:17::i;:::-;16174:26;;16247:17;16251:6;16259:4;16247:3;:17::i;:::-;16238:26;;16311:17;16315:6;16323:4;16311:3;:17::i;:::-;16302:26;;16373:6;16366:13;;;;;;;;;;;;14781:1606;;;;;:::o;13450:224::-;13506:6;13525:8;13540:1;13536;:5;;;;:::i;:::-;13525:16;;13560:1;13556;:5;:14;;;;;13569:1;13565;:5;13556:14;13552:42;;;13583:1;13579;:5;:14;;;;;13592:1;13588;:5;13579:14;13572:22;;;;;;;;;;;;13552:42;13613:1;13609;:5;:14;;;;;13622:1;13618;:5;13609:14;13605:42;;;13636:1;13632;:5;:14;;;;;13645:1;13641;:5;13632:14;13625:22;;;;;;;;;;;;13605:42;13665:1;13658:8;;;13450:224;;;;:::o;6414:130::-;6493:6;6528:8;:6;:8::i;:::-;6524:1;:12;;;;:::i;:::-;6517:19;;6414:130;;;:::o;18137:98::-;18190:7;18217:10;18210:17;;18137:98;:::o;33312:328::-;33427:1;33410:19;;:5;:19;;;;33402:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33504:1;33485:21;;:7;:21;;;;33477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33584:6;33554:11;:18;33566:5;33554:18;;;;;;;;;;;;;;;:27;33573:7;33554:27;;;;;;;;;;;;;;;:36;;;;33618:7;33602:32;;33611:5;33602:32;;;33627:6;33602:32;;;;;;:::i;:::-;;;;;;;;33312:328;;;:::o;24541:505::-;24599:4;24621:16;24630:6;24621:8;:16::i;:::-;24620:17;24612:26;;;;;;24653;24672:6;24653:18;:26::i;:::-;24645:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;24710:18;24721:6;24710:10;:18::i;:::-;24702:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24782:4;24756:15;:23;24772:6;24756:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;24819:1;24793:15;:23;24809:6;24793:23;;;;;;;;;;;;;;;:27;;;;24858:1;24827:12;:20;24840:6;24827:20;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24889:15;24867:11;:19;24879:6;24867:19;;;;;;;;;;;;;;;:37;;;;24946:15;24913:22;:30;24936:6;24913:30;;;;;;;;;;;;;;;:48;;;;25003:9;:17;25013:6;25003:17;;;;;;;;;;;;;;;;24968:24;:32;24993:6;24968:32;;;;;;;;;;;;;;;:52;;;;25036:4;25029:11;;24541:505;;;:::o;32113:885::-;32233:1;32215:20;;:6;:20;;;;32207:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32313:1;32292:23;;:9;:23;;;;32284:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32371:16;32380:6;32371:8;:16::i;:::-;32370:17;32362:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;32424:18;32435:6;32424:10;:18::i;:::-;32416:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;32503:6;32482:9;:17;32492:6;32482:17;;;;;;;;;;;;;;;;:27;;32474:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;32565:19;32574:9;32565:8;:19::i;:::-;32561:63;;;32595:21;32606:9;32595:10;:21::i;:::-;32561:63;32632:15;32650:6;32632:24;;32670:20;:18;:20::i;:::-;32666:201;;;32701:13;32717:25;32735:6;32717:17;:25::i;:::-;32701:41;;32766:1;32757:5;:10;32753:107;;32794:5;32780:19;;;;;:::i;:::-;;;32845:5;32810:9;:31;32820:20;;;;;;;;;;;32810:31;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;32753:107;32666:201;;32896:6;32875:9;:17;32885:6;32875:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32933:10;32909:9;:20;32919:9;32909:20;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;32974:9;32957:35;;32966:6;32957:35;;;32985:6;32957:35;;;;;;:::i;:::-;;;;;;;;32113:885;;;;:::o;27222:294::-;27315:16;27324:6;27315:8;:16::i;:::-;27307:25;;;;;;27341:33;27356:17;27341:14;:33::i;:::-;27383:24;27400:6;27383:16;:24::i;:::-;27414:21;27428:6;27414:13;:21::i;:::-;27442:40;27456:6;27464:17;27442:13;:40::i;:::-;27489:21;:19;:21::i;:::-;27222:294;;:::o;25152:536::-;25236:16;25245:6;25236:8;:16::i;:::-;25228:25;;;;;;25266:11;25262:35;;;25279:18;25290:6;25279:10;:18::i;:::-;25262:35;25333:1;25310:11;:19;25322:6;25310:19;;;;;;;;;;;;;;;;:24;25306:101;;25345:24;25362:6;25345:16;:24::i;:::-;25378:21;:19;:21::i;:::-;25306:101;25441:5;25415:15;:23;25431:6;25415:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;25484:1;25453:12;:20;25466:6;25453:20;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;25515:1;25493:11;:19;25505:6;25493:19;;;;;;;;;;;;;;;:23;;;;25545:1;25523:11;:19;25535:6;25523:19;;;;;;;;;;;;;;;:23;;;;25588:1;25555:22;:30;25578:6;25555:30;;;;;;;;;;;;;;;:34;;;;25631:1;25596:24;:32;25621:6;25596:32;;;;;;;;;;;;;;;:36;;;;25667:15;25641;:23;25657:6;25641:23;;;;;;;;;;;;;;;:41;;;;25152:536;;:::o;22857:443::-;22957:11;;22939:15;:29;22931:38;;;;;;22985:14;22994:4;22985:8;:14::i;:::-;22984:15;22976:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23054:13;;;;;;;;;;;23047:34;;;23082:4;23088:21;;;;;;;;;;;23111:6;23047:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23135:21;;;;;;;;;;;23125:42;;;23168:4;23174:6;23125:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23209:6;23190:9;:15;23200:4;23190:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;23240:6;23224:12;;:22;;;;;;;:::i;:::-;;;;;;;;23281:4;23260:34;;23277:1;23260:34;;;23287:6;23260:34;;;;;;:::i;:::-;;;;;;;;22857:443;;:::o;29339:131::-;29407:4;29445:11;:19;29457:6;29445:19;;;;;;;;;;;;;;;;29427:15;:37;;;;:::i;:::-;29420:44;;29339:131;;;:::o;29185:148::-;29238:4;29290:1;29258:34;;:20;;;;;;;;;;;:34;;;;:69;;;;;29297:30;29306:20;;;;;;;;;;;29297:8;:30::i;:::-;29296:31;29258:69;29251:76;;29185:148;:::o;2237:132::-;2282:6;2308:53;2301:60;;2237:132;:::o;2594:133::-;2639:6;2665:54;2658:61;;2594:133;:::o;1045:99::-;1085:6;1111:25;1104:32;;1045:99;:::o;17368:223::-;17427:6;17455:8;:6;:8::i;:::-;17450:1;:13;17446:27;;;17472:1;17465:8;;;;17446:27;17496:1;17491;:6;;17484:14;;;;;;;;;;;;17521:17;:15;:17::i;:::-;17516:1;:22;;17509:30;;;;;;;;;;;;17557:26;17566:1;17569:13;17580:1;17569:10;:13::i;:::-;17557:8;:26::i;:::-;17550:33;;17368:223;;;;;:::o;11534:127::-;11584:6;11627:8;:6;:8::i;:::-;11615;:6;:8::i;:::-;11611:1;:12;;;;:::i;:::-;11610:25;;;;:::i;:::-;11603:32;;11534:127;;;:::o;12077:134::-;12130:6;12177:8;:6;:8::i;:::-;12165;:6;:8::i;:::-;12161:1;:12;;;;:::i;:::-;12160:25;;;;:::i;:::-;12156:1;:29;;;;:::i;:::-;12149:36;;12077:134;;;:::o;1331:93::-;1377:6;1403:13;1396:20;;1331:93;:::o;31064:130::-;31130:4;31171:17;31150:9;:17;31160:6;31150:17;;;;;;;;;;;;;;;;:38;;31143:45;;31064:130;;;:::o;24191:344::-;24244:4;24257:18;24278:15;:23;24294:6;24278:23;;;;;;;;;;;;;;;;24257:44;;24331:1;24314:13;:18;24310:35;;;24341:4;24334:11;;;;;24310:35;24354:15;24389:9;24372:13;:27;;;;:::i;:::-;24354:45;;24430:10;24412:15;:28;24408:121;;;24477:1;24451:15;:23;24467:6;24451:23;;;;;;;;;;;;;;;:27;;;;24494:4;24487:11;;;;;;24408:121;24524:5;24517:12;;;;24191:344;;;;:::o;30093:365::-;30157:7;30172:11;30204:14;;30186:15;:32;;;;:::i;:::-;30172:46;;30240:8;30231:6;:17;30227:225;;;30257:1;30250:8;;;;;30227:225;30283:8;30274:6;:17;30270:182;;;30308:3;30300:5;:11;;;;:::i;:::-;30293:18;;;;;30270:182;30336:8;30327:6;:17;30323:129;;;30361:3;30353:5;:11;;;;:::i;:::-;30346:18;;;;;30323:129;30389:7;30380:6;:16;30376:76;;;30421:1;30414:3;30406:5;:11;;;;:::i;:::-;30405:17;;;;:::i;:::-;30398:24;;;;;30376:76;30449:3;30441:5;:11;;;;:::i;:::-;30434:18;;;30093:365;;;;:::o;27522:384::-;27666:17;:41;27684:22;27666:41;;;;;;;;;;;;;;;;;;;;;;;;;27661:240;;27748:2;27726:12;:19;;;;:24;27718:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27795:12;27813:22;27795:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27889:4;27845:17;:41;27863:22;27845:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;27661:240;27522:384;:::o;27912:162::-;27969:12;27984;:20;27997:6;27984:20;;;;;;;;;;;;;;;;;;;;;;;;;27969:35;;28049:11;:19;28061:6;28049:19;;;;;;;;;;;;;;;;28030:10;:16;28041:4;28030:16;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;28011:10;:16;28022:4;28011:16;;;;;;;;;;;;;;;:57;;;;27912:162;;:::o;28080:143::-;28134:21;28158:9;:17;28168:6;28158:17;;;;;;;;;;;;;;;;28134:41;;28204:13;28182:11;:19;28194:6;28182:19;;;;;;;;;;;;;;;:35;;;;28080:143;;:::o;28229:217::-;28374:11;:19;28386:6;28374:19;;;;;;;;;;;;;;;;28342:10;:29;28353:17;28342:29;;;;;;;;;;;;;;;;:51;;;;:::i;:::-;28310:10;:29;28321:17;28310:29;;;;;;;;;;;;;;;:83;;;;28423:17;28400:12;:20;28413:6;28400:20;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28229:217;;:::o;28636:543::-;28682:20;28714:14;28755:6;28750:275;28771:12;:19;;;;28767:1;:23;28750:275;;;28806:21;28830:12;28843:1;28830:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28806:39;;28854:17;28874:10;:25;28885:13;28874:25;;;;;;;;;;;;;;;;28854:45;;28926:12;28914:9;:24;28910:108;;;28966:9;28951:24;;28995:13;28986:22;;28910:108;28750:275;;28792:3;;;;;:::i;:::-;;;;28750:275;;;;29061:6;29037:30;;:20;;;;;;;;;;;:30;;;29033:43;;;29069:7;;;;29033:43;29089:46;29106:20;;;;;;;;;;;29128:6;29089:46;;;;;;;:::i;:::-;;;;;;;;29167:6;29144:20;;:29;;;;;;;;;;;;;;;;;;28636:543;;;:::o;5573:132::-;5622:6;5648:49;5641:56;;5573:132;:::o;16729:153::-;16782:6;16813:1;16808;:6;;16801:14;;;;;;;;;;;;16855:1;16843:8;:6;:8::i;:::-;16834;:6;:8::i;:::-;:17;;;;:::i;:::-;16833:23;;;;:::i;:::-;16826:30;;16729:153;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:262::-;;548:2;536:9;527:7;523:23;519:32;516:2;;;564:1;561;554:12;516:2;607:1;632:53;677:7;668:6;657:9;653:22;632:53;:::i;:::-;622:63;;578:117;506:196;;;;:::o;708:407::-;;;833:2;821:9;812:7;808:23;804:32;801:2;;;849:1;846;839:12;801:2;892:1;917:53;962:7;953:6;942:9;938:22;917:53;:::i;:::-;907:63;;863:117;1019:2;1045:53;1090:7;1081:6;1070:9;1066:22;1045:53;:::i;:::-;1035:63;;990:118;791:324;;;;;:::o;1121:552::-;;;;1263:2;1251:9;1242:7;1238:23;1234:32;1231:2;;;1279:1;1276;1269:12;1231:2;1322:1;1347:53;1392:7;1383:6;1372:9;1368:22;1347:53;:::i;:::-;1337:63;;1293:117;1449:2;1475:53;1520:7;1511:6;1500:9;1496:22;1475:53;:::i;:::-;1465:63;;1420:118;1577:2;1603:53;1648:7;1639:6;1628:9;1624:22;1603:53;:::i;:::-;1593:63;;1548:118;1221:452;;;;;:::o;1679:407::-;;;1804:2;1792:9;1783:7;1779:23;1775:32;1772:2;;;1820:1;1817;1810:12;1772:2;1863:1;1888:53;1933:7;1924:6;1913:9;1909:22;1888:53;:::i;:::-;1878:63;;1834:117;1990:2;2016:53;2061:7;2052:6;2041:9;2037:22;2016:53;:::i;:::-;2006:63;;1961:118;1762:324;;;;;:::o;2092:278::-;;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;2224:1;2221;2214:12;2176:2;2267:1;2292:61;2345:7;2336:6;2325:9;2321:22;2292:61;:::i;:::-;2282:71;;2238:125;2166:204;;;;:::o;2376:262::-;;2484:2;2472:9;2463:7;2459:23;2455:32;2452:2;;;2500:1;2497;2490:12;2452:2;2543:1;2568:53;2613:7;2604:6;2593:9;2589:22;2568:53;:::i;:::-;2558:63;;2514:117;2442:196;;;;:::o;2644:407::-;;;2769:2;2757:9;2748:7;2744:23;2740:32;2737:2;;;2785:1;2782;2775:12;2737:2;2828:1;2853:53;2898:7;2889:6;2878:9;2874:22;2853:53;:::i;:::-;2843:63;;2799:117;2955:2;2981:53;3026:7;3017:6;3006:9;3002:22;2981:53;:::i;:::-;2971:63;;2926:118;2727:324;;;;;:::o;3057:118::-;3144:24;3162:5;3144:24;:::i;:::-;3139:3;3132:37;3122:53;;:::o;3181:109::-;3262:21;3277:5;3262:21;:::i;:::-;3257:3;3250:34;3240:50;;:::o;3296:364::-;;3412:39;3445:5;3412:39;:::i;:::-;3467:71;3531:6;3526:3;3467:71;:::i;:::-;3460:78;;3547:52;3592:6;3587:3;3580:4;3573:5;3569:16;3547:52;:::i;:::-;3624:29;3646:6;3624:29;:::i;:::-;3619:3;3615:39;3608:46;;3388:272;;;;;:::o;3666:367::-;;3829:67;3893:2;3888:3;3829:67;:::i;:::-;3822:74;;3926:34;3922:1;3917:3;3913:11;3906:55;3992:5;3987:2;3982:3;3978:12;3971:27;4024:2;4019:3;4015:12;4008:19;;3812:221;;;:::o;4039:322::-;;4202:67;4266:2;4261:3;4202:67;:::i;:::-;4195:74;;4299:26;4295:1;4290:3;4286:11;4279:47;4352:2;4347:3;4343:12;4336:19;;4185:176;;;:::o;4367:366::-;;4530:67;4594:2;4589:3;4530:67;:::i;:::-;4523:74;;4627:34;4623:1;4618:3;4614:11;4607:55;4693:4;4688:2;4683:3;4679:12;4672:26;4724:2;4719:3;4715:12;4708:19;;4513:220;;;:::o;4739:370::-;;4902:67;4966:2;4961:3;4902:67;:::i;:::-;4895:74;;4999:34;4995:1;4990:3;4986:11;4979:55;5065:8;5060:2;5055:3;5051:12;5044:30;5100:2;5095:3;5091:12;5084:19;;4885:224;;;:::o;5115:312::-;;5278:67;5342:2;5337:3;5278:67;:::i;:::-;5271:74;;5375:16;5371:1;5366:3;5362:11;5355:37;5418:2;5413:3;5409:12;5402:19;;5261:166;;;:::o;5433:309::-;;5596:67;5660:2;5655:3;5596:67;:::i;:::-;5589:74;;5693:13;5689:1;5684:3;5680:11;5673:34;5733:2;5728:3;5724:12;5717:19;;5579:163;;;:::o;5748:306::-;;5911:66;5975:1;5970:3;5911:66;:::i;:::-;5904:73;;6007:11;6003:1;5998:3;5994:11;5987:32;6045:2;6040:3;6036:12;6029:19;;5894:160;;;:::o;6060:318::-;;6223:67;6287:2;6282:3;6223:67;:::i;:::-;6216:74;;6320:22;6316:1;6311:3;6307:11;6300:43;6369:2;6364:3;6360:12;6353:19;;6206:172;;;:::o;6384:315::-;;6547:67;6611:2;6606:3;6547:67;:::i;:::-;6540:74;;6644:19;6640:1;6635:3;6631:11;6624:40;6690:2;6685:3;6681:12;6674:19;;6530:169;;;:::o;6705:305::-;;6868:66;6932:1;6927:3;6868:66;:::i;:::-;6861:73;;6964:10;6960:1;6955:3;6951:11;6944:31;7001:2;6996:3;6992:12;6985:19;;6851:159;;;:::o;7016:372::-;;7179:67;7243:2;7238:3;7179:67;:::i;:::-;7172:74;;7276:34;7272:1;7267:3;7263:11;7256:55;7342:10;7337:2;7332:3;7328:12;7321:32;7379:2;7374:3;7370:12;7363:19;;7162:226;;;:::o;7394:313::-;;7557:67;7621:2;7616:3;7557:67;:::i;:::-;7550:74;;7654:17;7650:1;7645:3;7641:11;7634:38;7698:2;7693:3;7689:12;7682:19;;7540:167;;;:::o;7713:369::-;;7876:67;7940:2;7935:3;7876:67;:::i;:::-;7869:74;;7973:34;7969:1;7964:3;7960:11;7953:55;8039:7;8034:2;8029:3;8025:12;8018:29;8073:2;8068:3;8064:12;8057:19;;7859:223;;;:::o;8088:368::-;;8251:67;8315:2;8310:3;8251:67;:::i;:::-;8244:74;;8348:34;8344:1;8339:3;8335:11;8328:55;8414:6;8409:2;8404:3;8400:12;8393:28;8447:2;8442:3;8438:12;8431:19;;8234:222;;;:::o;8462:327::-;;8625:67;8689:2;8684:3;8625:67;:::i;:::-;8618:74;;8722:31;8718:1;8713:3;8709:11;8702:52;8780:2;8775:3;8771:12;8764:19;;8608:181;;;:::o;8795:328::-;;8958:67;9022:2;9017:3;8958:67;:::i;:::-;8951:74;;9055:32;9051:1;9046:3;9042:11;9035:53;9114:2;9109:3;9105:12;9098:19;;8941:182;;;:::o;9129:369::-;;9292:67;9356:2;9351:3;9292:67;:::i;:::-;9285:74;;9389:34;9385:1;9380:3;9376:11;9369:55;9455:7;9450:2;9445:3;9441:12;9434:29;9489:2;9484:3;9480:12;9473:19;;9275:223;;;:::o;9504:118::-;9591:24;9609:5;9591:24;:::i;:::-;9586:3;9579:37;9569:53;;:::o;9628:112::-;9711:22;9727:5;9711:22;:::i;:::-;9706:3;9699:35;9689:51;;:::o;9746:222::-;;9877:2;9866:9;9862:18;9854:26;;9890:71;9958:1;9947:9;9943:17;9934:6;9890:71;:::i;:::-;9844:124;;;;:::o;9974:332::-;;10133:2;10122:9;10118:18;10110:26;;10146:71;10214:1;10203:9;10199:17;10190:6;10146:71;:::i;:::-;10227:72;10295:2;10284:9;10280:18;10271:6;10227:72;:::i;:::-;10100:206;;;;;:::o;10312:442::-;;10499:2;10488:9;10484:18;10476:26;;10512:71;10580:1;10569:9;10565:17;10556:6;10512:71;:::i;:::-;10593:72;10661:2;10650:9;10646:18;10637:6;10593:72;:::i;:::-;10675;10743:2;10732:9;10728:18;10719:6;10675:72;:::i;:::-;10466:288;;;;;;:::o;10760:332::-;;10919:2;10908:9;10904:18;10896:26;;10932:71;11000:1;10989:9;10985:17;10976:6;10932:71;:::i;:::-;11013:72;11081:2;11070:9;11066:18;11057:6;11013:72;:::i;:::-;10886:206;;;;;:::o;11098:210::-;;11223:2;11212:9;11208:18;11200:26;;11236:65;11298:1;11287:9;11283:17;11274:6;11236:65;:::i;:::-;11190:118;;;;:::o;11314:313::-;;11465:2;11454:9;11450:18;11442:26;;11514:9;11508:4;11504:20;11500:1;11489:9;11485:17;11478:47;11542:78;11615:4;11606:6;11542:78;:::i;:::-;11534:86;;11432:195;;;;:::o;11633:419::-;;11837:2;11826:9;11822:18;11814:26;;11886:9;11880:4;11876:20;11872:1;11861:9;11857:17;11850:47;11914:131;12040:4;11914:131;:::i;:::-;11906:139;;11804:248;;;:::o;12058:419::-;;12262:2;12251:9;12247:18;12239:26;;12311:9;12305:4;12301:20;12297:1;12286:9;12282:17;12275:47;12339:131;12465:4;12339:131;:::i;:::-;12331:139;;12229:248;;;:::o;12483:419::-;;12687:2;12676:9;12672:18;12664:26;;12736:9;12730:4;12726:20;12722:1;12711:9;12707:17;12700:47;12764:131;12890:4;12764:131;:::i;:::-;12756:139;;12654:248;;;:::o;12908:419::-;;13112:2;13101:9;13097:18;13089:26;;13161:9;13155:4;13151:20;13147:1;13136:9;13132:17;13125:47;13189:131;13315:4;13189:131;:::i;:::-;13181:139;;13079:248;;;:::o;13333:419::-;;13537:2;13526:9;13522:18;13514:26;;13586:9;13580:4;13576:20;13572:1;13561:9;13557:17;13550:47;13614:131;13740:4;13614:131;:::i;:::-;13606:139;;13504:248;;;:::o;13758:419::-;;13962:2;13951:9;13947:18;13939:26;;14011:9;14005:4;14001:20;13997:1;13986:9;13982:17;13975:47;14039:131;14165:4;14039:131;:::i;:::-;14031:139;;13929:248;;;:::o;14183:419::-;;14387:2;14376:9;14372:18;14364:26;;14436:9;14430:4;14426:20;14422:1;14411:9;14407:17;14400:47;14464:131;14590:4;14464:131;:::i;:::-;14456:139;;14354:248;;;:::o;14608:419::-;;14812:2;14801:9;14797:18;14789:26;;14861:9;14855:4;14851:20;14847:1;14836:9;14832:17;14825:47;14889:131;15015:4;14889:131;:::i;:::-;14881:139;;14779:248;;;:::o;15033:419::-;;15237:2;15226:9;15222:18;15214:26;;15286:9;15280:4;15276:20;15272:1;15261:9;15257:17;15250:47;15314:131;15440:4;15314:131;:::i;:::-;15306:139;;15204:248;;;:::o;15458:419::-;;15662:2;15651:9;15647:18;15639:26;;15711:9;15705:4;15701:20;15697:1;15686:9;15682:17;15675:47;15739:131;15865:4;15739:131;:::i;:::-;15731:139;;15629:248;;;:::o;15883:419::-;;16087:2;16076:9;16072:18;16064:26;;16136:9;16130:4;16126:20;16122:1;16111:9;16107:17;16100:47;16164:131;16290:4;16164:131;:::i;:::-;16156:139;;16054:248;;;:::o;16308:419::-;;16512:2;16501:9;16497:18;16489:26;;16561:9;16555:4;16551:20;16547:1;16536:9;16532:17;16525:47;16589:131;16715:4;16589:131;:::i;:::-;16581:139;;16479:248;;;:::o;16733:419::-;;16937:2;16926:9;16922:18;16914:26;;16986:9;16980:4;16976:20;16972:1;16961:9;16957:17;16950:47;17014:131;17140:4;17014:131;:::i;:::-;17006:139;;16904:248;;;:::o;17158:419::-;;17362:2;17351:9;17347:18;17339:26;;17411:9;17405:4;17401:20;17397:1;17386:9;17382:17;17375:47;17439:131;17565:4;17439:131;:::i;:::-;17431:139;;17329:248;;;:::o;17583:419::-;;17787:2;17776:9;17772:18;17764:26;;17836:9;17830:4;17826:20;17822:1;17811:9;17807:17;17800:47;17864:131;17990:4;17864:131;:::i;:::-;17856:139;;17754:248;;;:::o;18008:419::-;;18212:2;18201:9;18197:18;18189:26;;18261:9;18255:4;18251:20;18247:1;18236:9;18232:17;18225:47;18289:131;18415:4;18289:131;:::i;:::-;18281:139;;18179:248;;;:::o;18433:419::-;;18637:2;18626:9;18622:18;18614:26;;18686:9;18680:4;18676:20;18672:1;18661:9;18657:17;18650:47;18714:131;18840:4;18714:131;:::i;:::-;18706:139;;18604:248;;;:::o;18858:222::-;;18989:2;18978:9;18974:18;18966:26;;19002:71;19070:1;19059:9;19055:17;19046:6;19002:71;:::i;:::-;18956:124;;;;:::o;19086:214::-;;19213:2;19202:9;19198:18;19190:26;;19226:67;19290:1;19279:9;19275:17;19266:6;19226:67;:::i;:::-;19180:120;;;;:::o;19306:99::-;;19392:5;19386:12;19376:22;;19365:40;;;:::o;19411:169::-;;19529:6;19524:3;19517:19;19569:4;19564:3;19560:14;19545:29;;19507:73;;;;:::o;19586:525::-;;19644:19;19661:1;19644:19;:::i;:::-;19639:24;;19677:19;19694:1;19677:19;:::i;:::-;19672:24;;19865:1;19797:66;19793:74;19790:1;19786:82;19781:1;19778;19774:9;19767:17;19763:106;19760:2;;;19872:18;;:::i;:::-;19760:2;20052:1;19984:66;19980:74;19977:1;19973:82;19969:1;19966;19962:9;19958:98;19955:2;;;20059:18;;:::i;:::-;19955:2;20103:1;20100;20096:9;20089:16;;19629:482;;;;:::o;20117:305::-;;20176:20;20194:1;20176:20;:::i;:::-;20171:25;;20210:20;20228:1;20210:20;:::i;:::-;20205:25;;20364:1;20296:66;20292:74;20289:1;20286:81;20283:2;;;20370:18;;:::i;:::-;20283:2;20414:1;20411;20407:9;20400:16;;20161:261;;;;:::o;20428:385::-;;20484:19;20501:1;20484:19;:::i;:::-;20479:24;;20517:19;20534:1;20517:19;:::i;:::-;20512:24;;20555:1;20545:2;;20560:18;;:::i;:::-;20545:2;20746:1;20743;20739:9;20736:1;20733:16;20652:66;20649:1;20646:73;20629:130;20626:2;;;20762:18;;:::i;:::-;20626:2;20805:1;20802;20797:10;20792:15;;20469:344;;;;:::o;20819:185::-;;20876:20;20894:1;20876:20;:::i;:::-;20871:25;;20910:20;20928:1;20910:20;:::i;:::-;20905:25;;20949:1;20939:2;;20954:18;;:::i;:::-;20939:2;20996:1;20993;20989:9;20984:14;;20861:143;;;;:::o;21010:991::-;;21072:19;21089:1;21072:19;:::i;:::-;21067:24;;21105:19;21122:1;21105:19;:::i;:::-;21100:24;;21306:1;21238:66;21234:74;21231:1;21228:81;21223:1;21220;21216:9;21212:1;21209;21205:9;21201:25;21197:113;21194:2;;;21313:18;;:::i;:::-;21194:2;21517:1;21449:66;21444:75;21441:1;21437:83;21432:1;21429;21425:9;21421:1;21418;21414:9;21410:25;21406:115;21403:2;;;21524:18;;:::i;:::-;21403:2;21728:1;21660:66;21655:75;21652:1;21648:83;21643:1;21640;21636:9;21632:1;21629;21625:9;21621:25;21617:115;21614:2;;;21735:18;;:::i;:::-;21614:2;21938:1;21870:66;21865:75;21862:1;21858:83;21853:1;21850;21846:9;21842:1;21839;21835:9;21831:25;21827:115;21824:2;;;21945:18;;:::i;:::-;21824:2;21993:1;21990;21986:9;21975:20;;21057:944;;;;:::o;22007:348::-;;22070:20;22088:1;22070:20;:::i;:::-;22065:25;;22104:20;22122:1;22104:20;:::i;:::-;22099:25;;22292:1;22224:66;22220:74;22217:1;22214:81;22209:1;22202:9;22195:17;22191:105;22188:2;;;22299:18;;:::i;:::-;22188:2;22347:1;22344;22340:9;22329:20;;22055:300;;;;:::o;22361:527::-;;22420:19;22437:1;22420:19;:::i;:::-;22415:24;;22453:19;22470:1;22453:19;:::i;:::-;22448:24;;22642:1;22574:66;22570:74;22567:1;22563:82;22558:1;22555;22551:9;22544:17;22540:106;22537:2;;;22649:18;;:::i;:::-;22537:2;22828:1;22760:66;22756:74;22753:1;22749:82;22745:1;22742;22738:9;22734:98;22731:2;;;22835:18;;:::i;:::-;22731:2;22880:1;22877;22873:9;22865:17;;22405:483;;;;:::o;22894:191::-;;22954:20;22972:1;22954:20;:::i;:::-;22949:25;;22988:20;23006:1;22988:20;:::i;:::-;22983:25;;23027:1;23024;23021:8;23018:2;;;23032:18;;:::i;:::-;23018:2;23077:1;23074;23070:9;23062:17;;22939:146;;;;:::o;23091:96::-;;23157:24;23175:5;23157:24;:::i;:::-;23146:35;;23136:51;;;:::o;23193:90::-;;23270:5;23263:13;23256:21;23245:32;;23235:48;;;:::o;23289:76::-;;23354:5;23343:16;;23333:32;;;:::o;23371:126::-;;23448:42;23441:5;23437:54;23426:65;;23416:81;;;:::o;23503:77::-;;23569:5;23558:16;;23548:32;;;:::o;23586:86::-;;23661:4;23654:5;23650:16;23639:27;;23629:43;;;:::o;23678:307::-;23746:1;23756:113;23770:6;23767:1;23764:13;23756:113;;;23855:1;23850:3;23846:11;23840:18;23836:1;23831:3;23827:11;23820:39;23792:2;23789:1;23785:10;23780:15;;23756:113;;;23887:6;23884:1;23881:13;23878:2;;;23967:1;23958:6;23953:3;23949:16;23942:27;23878:2;23727:258;;;;:::o;23991:171::-;;24053:24;24071:5;24053:24;:::i;:::-;24044:33;;24099:4;24092:5;24089:15;24086:2;;;24107:18;;:::i;:::-;24086:2;24154:1;24147:5;24143:13;24136:20;;24034:128;;;:::o;24168:320::-;;24249:1;24243:4;24239:12;24229:22;;24296:1;24290:4;24286:12;24317:18;24307:2;;24373:4;24365:6;24361:17;24351:27;;24307:2;24435;24427:6;24424:14;24404:18;24401:38;24398:2;;;24454:18;;:::i;:::-;24398:2;24219:269;;;;:::o;24494:233::-;;24556:24;24574:5;24556:24;:::i;:::-;24547:33;;24602:66;24595:5;24592:77;24589:2;;;24672:18;;:::i;:::-;24589:2;24719:1;24712:5;24708:13;24701:20;;24537:190;;;:::o;24733:176::-;;24782:20;24800:1;24782:20;:::i;:::-;24777:25;;24816:20;24834:1;24816:20;:::i;:::-;24811:25;;24855:1;24845:2;;24860:18;;:::i;:::-;24845:2;24901:1;24898;24894:9;24889:14;;24767:142;;;;:::o;24915:180::-;24963:77;24960:1;24953:88;25060:4;25057:1;25050:15;25084:4;25081:1;25074:15;25101:180;25149:77;25146:1;25139:88;25246:4;25243:1;25236:15;25270:4;25267:1;25260:15;25287:180;25335:77;25332:1;25325:88;25432:4;25429:1;25422:15;25456:4;25453:1;25446:15;25473:102;;25565:2;25561:7;25556:2;25549:5;25545:14;25541:28;25531:38;;25521:54;;;:::o;25581:122::-;25654:24;25672:5;25654:24;:::i;:::-;25647:5;25644:35;25634:2;;25693:1;25690;25683:12;25634:2;25624:79;:::o;25709:116::-;25779:21;25794:5;25779:21;:::i;:::-;25772:5;25769:32;25759:2;;25815:1;25812;25805:12;25759:2;25749:76;:::o;25831:122::-;25904:24;25922:5;25904:24;:::i;:::-;25897:5;25894:35;25884:2;;25943:1;25940;25933:12;25884:2;25874:79;:::o

Swarm Source

ipfs://ad762d19dfb9ad27d8d8063bf861ae736c433b067bdb435a571e4879976cef41
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.