Contract 0xFD28bE82e453860F41c36029175377F470aF754b 1

 
Txn Hash
Method
Block
From
To
Value
0xc5b8e0a797c82dcbce7f88dd60b5b8d1fd433a2ac2de7845bb7b8184e9792ce4Claim Votes116241602021-01-10 1:42:23627 days 6 hrs agoENS Name palmie.eth IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0061264788
0xb3c7347fe1250b1f8a4429aae014ea9894e0342d68fded0b61fd3c7fbcbc60fcClaim Votes116233392021-01-09 22:38:06627 days 9 hrs ago0x554976402a8aa7020814602c49f8a6e3bea2a783 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0031328545
0xb4be9dd30b6e65ebf2bbe255e379a1f6a45ae9492a2ff3c07a4b5bd2f0a08ad5Claim Votes115985062021-01-06 3:09:11631 days 4 hrs ago0x170c5cadb50dc163db0dd786c96d7ecb5e24a379 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0048733370
0xcd8b1f9a819af30f40d09a433f3f706af31633f5fd3d4904960f32ac08cbad16Claim Votes115957622021-01-05 17:08:28631 days 14 hrs ago0x6cc52e11cf88c0b2dddec1e5e7cfe9c5913b4d09 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.01809378219
0xa1e5983f341e3d51b1a08296ccf1e07a7aeffce82718634b7e42f81e747d8007Claim Votes115553812020-12-30 12:30:06637 days 19 hrs ago0x906d06191c3ad2722ca74675588f1885df9e690b IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0080758116
0xf80c7b323a3299db3021204e0a8c7129af0d36a0aa9ff72db3794ffd570e7e9bClaim Votes115177062020-12-24 17:38:11643 days 14 hrs ago0x554976402a8aa7020814602c49f8a6e3bea2a783 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0023670434
0xa301a872632d7a8c7dce66f873eaca541f9316e561ab150ad7f889ea75e90d72Claim Votes115152852020-12-24 8:41:47643 days 23 hrs ago0xdcd38bc4f5aef76a1e1b12b1774410a6e175c44e IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0051657274.2
0x6ef0bd4f02fa87de9bc229f858de090159c507df785cec27acf472bbe30459b3Claim Votes115115632020-12-23 18:49:16644 days 13 hrs agoENS Name lemiscate.eth IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0025410936.5
0x4f3a3947450bfcdab70a66021641df3d1302de322afb42dd3bdd7b446db9d8a1Claim Votes114991982020-12-21 21:29:29646 days 10 hrs ago0xdcd38bc4f5aef76a1e1b12b1774410a6e175c44e IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0021581831
0x7a56ac181705a6825c0a713f2a16afad527311f9df5456a3d7b44ffa3f557dccClaim Votes114900752020-12-20 11:56:53647 days 20 hrs agoENS Name zeroyakuza.eth IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0031328545
0x4f33c1ba2e8c5d1a35a68b1f542e6257b2057a66dacb4ea58442e1c8cb6dc33dClaim Votes114636612020-12-16 10:44:49651 days 21 hrs ago0x5e0a086b8ea7bd6ac3098b61005ae55b1381154a IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0053364764.6
0x447930d87daf5599692854154e0ed68d49119c0c510c8f7cb323c59d73197b18Claim Votes114615022020-12-16 2:44:02652 days 5 hrs ago0x84740f97aea62c5dc36756dfd9f749412534220e IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0062791276
0x4031de4884b5c348588a065de118cb105eec03f636010d7fe7c075f3abf5c6c9Claim Votes114543972020-12-15 0:33:34653 days 7 hrs ago0x481e012260715b57e162bad30423ab639781421a IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.008262100
0xfc378c303a02f670ae2fa83ae6e7ef4e1d0b32dc5ef6cd1a948fd37be4962f0bClaim Votes114408102020-12-12 22:23:23655 days 9 hrs ago0x554976402a8aa7020814602c49f8a6e3bea2a783 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0013923820
0x361064a7e515e0321487f806ca0a451f72d678a8c62debd3d13b4c3b6845851cClaim Votes114263682020-12-10 16:53:15657 days 15 hrs ago0x225c4cfc17d5ee7bf3e682396b12c0f6a7709d7d IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0061138874
0x99d2dbf87ef85bb12f8071acfe847139d411f91bf66be5c682104669b98db52cClaim Votes114257412020-12-10 14:38:40657 days 17 hrs agoENS Name lemiscate.eth IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0021581831
0xa53835e3edecb593a6b53795c14b5805a727f4188c9f63cb2d1dd3ca89ca53b5Claim Votes114233042020-12-10 5:20:02658 days 2 hrs agoENS Name dawn1ng.sismo.eth IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0025058536
0xf4d6dd8d7f1eb39bf5c1926d46fbf037bbbd21450361de0ba013ac22f378a483Claim Votes114167612020-12-09 5:21:49659 days 2 hrs ago0xf800b41ea9db0dff446d2a25cc8ff7ae01642818 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0035499551
0x38a56e4defeab18c7301bb03e08015a20203f0341f31c1b1eec795e39def1ff3Claim Votes114167522020-12-09 5:18:58659 days 2 hrs ago0xf800b41ea9db0dff446d2a25cc8ff7ae01642818 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0012470152
0x4eb681f8fb8474c4410210cc7c27a263485e09a114348233c739b7c40319639eClaim Votes114167522020-12-09 5:18:58659 days 2 hrs ago0xf800b41ea9db0dff446d2a25cc8ff7ae01642818 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0012470152
0x41d7463630c67d7a4c72a2745849ad13a585a95e61d6cb61963a014ad40f1233Claim Votes114167522020-12-09 5:18:58659 days 2 hrs ago0xf800b41ea9db0dff446d2a25cc8ff7ae01642818 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0033043240
0x575eaf7b05e6e27e36704942b9c7a0b35aea5f2a29df869d5dd5ff8b9092feb5Claim Votes114147272020-12-08 22:05:25659 days 9 hrs ago0x7fb2eb7bcd35c48248789884ae803095fb3e9338 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.00850986103
0xfa5b3dcfa1b319e50539f801ae1718d0dd3d419c801e7250717b75474f4bedbfClaim Votes114029322020-12-07 2:30:51661 days 5 hrs ago0x554976402a8aa7020814602c49f8a6e3bea2a783 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0016012323
0x0e1db91b245c7748dce18abedd960c6f3bed6407e02e74eda6a197c8aace3cdaClaim Votes114026272020-12-07 1:17:29661 days 6 hrs ago0xcc2c6d82e00e14f81ffc8e4f6a26c4522ada5a34 IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0022974233
0xc88e1531003d8180bf5059876d448b733fdce944fc5cfaf7b5885bd1c29bf26eDelegate Votes114018552020-12-06 22:24:34661 days 9 hrs ago0x1237819df68e9808dd65d66470b6a0e5a09f125e IN  0xfd28be82e453860f41c36029175377f470af754b0 Ether0.0031586828
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PPVesting

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-20
*/

/*
https://powerpool.finance/

          wrrrw r wrr
         ppwr rrr wppr0       prwwwrp                                 prwwwrp                   wr0
        rr 0rrrwrrprpwp0      pp   pr  prrrr0 pp   0r  prrrr0  0rwrrr pp   pr  prrrr0  prrrr0    r0
        rrp pr   wr00rrp      prwww0  pp   wr pp w00r prwwwpr  0rw    prwww0  pp   wr pp   wr    r0
        r0rprprwrrrp pr0      pp      wr   pr pp rwwr wr       0r     pp      wr   pr wr   pr    r0
         prwr wrr0wpwr        00        www0   0w0ww    www0   0w     00        www0    www0   0www0
          wrr ww0rrrr

*/

// File: contracts/utils/SafeMath.sol

// SPDX-License-Identifier: MIT

// From
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/ccf79ee483b12fb9759dc5bb5f947a31aa0a3bd6/contracts/math/SafeMath.sol

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: contracts/PPVesting.sol

pragma solidity 0.6.12;


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

  function transfer(address _to, uint256 _amount) external;
}

interface CvpInterface {
  function getPriorVotes(address account, uint256 blockNumber) external view returns (uint96);
}

/**
 * @title PowerPool Vesting Contract
 * @author PowerPool
 */
contract PPVesting is CvpInterface {
  using SafeMath for uint256;

  // @notice Emitted once when the contract was deployed
  event Init(address[] members);

  // @notice Emitted when a member delegates his votes to one of the delegates or to himself
  event DelegateVotes(address indexed from, address indexed to, address indexed previousDelegate, uint96 adjustedVotes);

  // @notice Emitted when a member transfer his permission
  event Transfer(
    address indexed from,
    address indexed to,
    uint32 indexed blockNumber,
    uint96 alreadyClaimedVotes,
    uint96 alreadyClaimedTokens,
    address currentDelegate
  );

  /// @notice Emitted when a member claims available votes
  event ClaimVotes(
    address indexed member,
    address indexed delegate,
    uint96 lastAlreadyClaimedVotes,
    uint96 lastAlreadyClaimedTokens,
    uint96 newAlreadyClaimedVotes,
    uint96 newAlreadyClaimedTokens,
    uint96 lastMemberAdjustedVotes,
    uint96 adjustedVotes,
    uint96 diff
  );

  /// @notice Emitted when a member claims available tokens
  event ClaimTokens(
    address indexed member,
    address indexed to,
    uint96 amount,
    uint256 newAlreadyClaimed,
    uint256 votesAvailable
  );

  /// @notice A Emitted when a member unclaimed balance changes
  event UnclaimedBalanceChanged(address indexed member, uint256 previousUnclaimed, uint256 newUnclaimed);

  /// @notice A member statuses and unclaimed balance tracker
  struct Member {
    bool active;
    bool transferred;
    uint96 alreadyClaimedVotes;
    uint96 alreadyClaimedTokens;
  }

  /// @notice A checkpoint for marking number of votes from a given block
  struct Checkpoint {
    uint32 fromBlock;
    uint96 votes;
  }

  /// @notice ERC20 token address
  address public immutable token;

  /// @notice Start block number for vote vesting calculations
  uint256 public immutable startV;

  /// @notice Duration of the vote vesting in blocks
  uint256 public immutable durationV;

  /// @notice End vote vesting block number
  uint256 public immutable endV;

  /// @notice Start block number for token vesting calculations
  uint256 public immutable startT;

  /// @notice Duration of the token vesting in blocks
  uint256 public immutable durationT;

  /// @notice End token block number, used only from UI
  uint256 public immutable endT;

  /// @notice Number of the vesting contract members, used only from UI
  uint256 public immutable memberCount;

  /// @notice Amount of ERC20 tokens to distribute during the vesting period
  uint96 public immutable amountPerMember;

  /// @notice Member details by their address
  mapping(address => Member) public members;

  /// @notice A record of vote checkpoints for each member, by index
  mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;

  /// @notice The number of checkpoints for each member
  mapping(address => uint32) public numCheckpoints;

  /// @notice Vote delegations
  mapping(address => address) public voteDelegations;

  /**
   * @notice Constructs a new vesting contract
   * @dev It's up to a deployer to allocate the correct amount of ERC20 tokens on this contract
   * @param _tokenAddress The ERC20 token address to use with this vesting contract
   * @param _startV The block number when the vote vesting period starts
   * @param _durationV The number of blocks the vote vesting period should last
   * @param _startT The block number when the token vesting period starts
   * @param _durationT The number of blocks the token vesting period should last
   * @param _memberList The list of addresses to distribute tokens to
   * @param _amountPerMember The number of tokens to distribute to each vesting contract member
   */
  constructor(
    address _tokenAddress,
    uint256 _startV,
    uint256 _durationV,
    uint256 _startT,
    uint256 _durationT,
    address[] memory _memberList,
    uint96 _amountPerMember
  ) public {
    require(_durationV > 1, "PPVesting: Invalid durationV");
    require(_durationT > 1, "PPVesting: Invalid durationT");
    require(_startV < _startT, "PPVesting: Requires startV < startT");
    require((_startV + _durationV) <= (_startT + _durationT), "PPVesting: Requires endV <= endT");
    require(_amountPerMember > 0, "PPVesting: Invalid amount per member");
    require(IERC20(_tokenAddress).totalSupply() > 0, "PPVesting: Missing supply of the token");

    token = _tokenAddress;

    startV = _startV;
    durationV = _durationV;
    endV = _startV + _durationV;

    startT = _startT;
    durationT = _durationT;
    endT = _startT + _durationT;

    amountPerMember = _amountPerMember;

    uint256 len = _memberList.length;
    require(len > 0, "PPVesting: Empty member list");

    memberCount = len;

    for (uint256 i = 0; i < len; i++) {
      members[_memberList[i]].active = true;
    }

    emit Init(_memberList);
  }

  /**
   * @notice Checks whether the vote vesting period has started or not
   * @return true If the vote vesting period has started
   */
  function hasVoteVestingStarted() external view returns (bool) {
    return block.number >= startV;
  }

  /**
   * @notice Checks whether the vote vesting period has ended or not
   * @return true If the vote vesting period has ended
   */
  function hasVoteVestingEnded() external view returns (bool) {
    return block.number >= endV;
  }

  /**
   * @notice Checks whether the token vesting period has started or not
   * @return true If the token vesting period has started
   */
  function hasTokenVestingStarted() external view returns (bool) {
    return block.number >= startT;
  }

  /**
   * @notice Checks whether the token vesting period has ended or not
   * @return true If the token vesting period has ended
   */
  function hasTokenVestingEnded() external view returns (bool) {
    return block.number >= endT;
  }

  /**
   * @notice Returns the address a _voteHolder delegated their votes to
   * @param _voteHolder The address to fetch delegate for
   * @return address The delegate address
   */
  function getVoteUser(address _voteHolder) public view returns (address) {
    address currentDelegate = voteDelegations[_voteHolder];
    if (currentDelegate == address(0)) {
      return _voteHolder;
    }
    return currentDelegate;
  }

  /**
   * @notice Provides debugging information about the last cached votes checkpoint with no other conditions
   * @dev This method remains only for debugging purposes. For actual vote information use `getPriorVotes()`
   * @param _member The member address to get votes for
   */
  function debugLastCachedVotes(address _member) public view returns (uint256) {
    uint32 dstRepNum = numCheckpoints[_member];
    return dstRepNum > 0 ? checkpoints[_member][dstRepNum - 1].votes : 0;
  }

  /**
   * @notice Provides information about a member already claimed votes
   * @dev Behaves like a CVP delegated balance, but with a member unclaimed balance
   * @dev Block number must be a finalized block or else this function will revert to prevent misinformation
   * @dev Block number must be greater than the vote start block number or else this function
   *      will revert to prevent misinformation
   * @dev Returns 0 for non-member addresses, even for previously valid ones
   * @dev This method is a copy from CVP token with several modifications
   * @param account The address of the member to check
   * @param blockNumber The block number to get the vote balance at
   * @return The number of votes the account had as of the given block
   */
  function getPriorVotes(address account, uint256 blockNumber) public override view returns (uint96) {
    require(blockNumber < block.number, "PPVesting::getPriorVotes: Not yet determined");
    require(blockNumber > startV, "PPVesting::getPriorVotes: Can't be before/equal the startV");

    uint32 nCheckpoints = numCheckpoints[account];

    // Not a member
    if (members[account].active == false) {
      return 0;
    }

    // (Vote vesting at this blockNumber has ended)
    if (blockNumber > endT) {
      return 0;
    }

    // (A member has not claimed any tokens yet) OR (The blockNumber is before the first checkpoint)
    if (nCheckpoints == 0 || checkpoints[account][0].fromBlock > blockNumber) {
      return 0;
    }

    // Next check most recent balance
    if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
      return checkpoints[account][nCheckpoints - 1].votes;
    }

    uint32 lower = 0;
    uint32 upper = nCheckpoints - 1;
    while (upper > lower) {
      uint32 center = upper - (upper - lower) / 2;
      // ceil, avoiding overflow
      Checkpoint memory cp = checkpoints[account][center];
      if (cp.fromBlock == blockNumber) {
        return cp.votes;
      } else if (cp.fromBlock < blockNumber) {
        lower = center;
      } else {
        upper = center - 1;
      }
    }
    return checkpoints[account][lower].votes;
  }

  /*** Available to Claim calculation ***/

  /**
   * @notice Returns available amount for a claim in the next mined block
   *         by a given member based on the current contract values
   * @param _member The member address to return available balance for
   * @return The available amount for a claim in the next block
   */
  function getAvailableTokensForMemberInTheNextBlock(address _member) external view returns (uint256) {
    Member storage member = members[_member];
    if (member.active == false) {
      return 0;
    }

    return getAvailable(block.number + 1, startT, amountPerMember, durationT, member.alreadyClaimedTokens);
  }

  /**
   * @notice Returns available token amount for a claim by a given member in the current block
   *         based on the current contract values
   * @param _member The member address to return available balance for
   * @return The available amount for a claim in the current block
   */
  function getAvailableTokensForMember(address _member) external view returns (uint256) {
    Member storage member = members[_member];
    if (member.active == false) {
      return 0;
    }

    return getAvailableTokens(member.alreadyClaimedTokens);
  }

  /**
   * @notice Returns available vote amount for a claim by a given member in the current block
   *         based on the current contract values
   * @param _member The member address to return available balance for
   * @return The available amount for a claim in the current block
   */
  function getAvailableVotesForMember(address _member) external view returns (uint256) {
    Member storage member = members[_member];
    if (member.active == false) {
      return 0;
    }

    return getAvailableVotes(member.alreadyClaimedVotes);
  }

  /**
   * @notice Returns available token amount for a claim based on the current contract values
   *         and an already claimed amount input
   * @dev Will return amountPerMember for non-members, so an external check is required for this case
   * @param _alreadyClaimed amount
   * @return The available amount for claim
   */
  function getAvailableTokens(uint256 _alreadyClaimed) public view returns (uint256) {
    return getAvailable(block.number, startT, amountPerMember, durationT, _alreadyClaimed);
  }

  /**
   * @notice Returns available vote amount for claim based on the current contract values
   *         and an already claimed amount input
   * @dev Will return amountPerMember for non-members, so an external check is required for this case
   * @param _alreadyClaimed amount
   * @return The available amount for claim
   */
  function getAvailableVotes(uint256 _alreadyClaimed) public view returns (uint256) {
    if (block.number > endT) {
      return 0;
    }
    return getAvailable(block.number, startV, amountPerMember, durationV, _alreadyClaimed);
  }

  /**
   * @notice Calculates available amount for a claim
   * @dev A pure function which doesn't reads anything from state
   * @param _now A block number to calculate the available amount
   * @param _startBlock The vesting period start block number
   * @param _amountPerMember The amount of ERC20 tokens to be distributed to each member
   *         during this vesting period
   * @param _alreadyClaimed The amount of tokens already claimed by a member
   * @return The available amount for a claim
   */
  function getAvailable(
    uint256 _now,
    uint256 _startBlock,
    uint256 _amountPerMember,
    uint256 _durationInBlocks,
    uint256 _alreadyClaimed
  ) public pure returns (uint256) {
    if (_now <= _startBlock) {
      return 0;
    }

    // uint256 vestingEndsAt = _startBlock + _durationInBlocks;
    uint256 vestingEndsAt = _startBlock.add(_durationInBlocks);
    uint256 toBlock = _now > vestingEndsAt ? vestingEndsAt : _now;

    // uint256 accrued = (toBlock - _startBlock) * _amountPerMember / _durationInBlocks;
    uint256 accrued = ((toBlock - _startBlock).mul(_amountPerMember).div(_durationInBlocks));

    // return accrued - _alreadyClaimed;
    return accrued.sub(_alreadyClaimed);
  }

  /*** Member Methods ***/

  /**
   * @notice An active member claims a distributed amount of votes
   * @dev Caches unclaimed balance per block number which could be used by voting contract
   * @param _to address to claim votes to
   */
  function claimVotes(address _to) external {
    Member memory member = members[_to];
    require(member.active == true, "PPVesting::claimVotes: User not active");

    uint256 votes = getAvailableVotes(member.alreadyClaimedVotes);

    require(block.number <= endT, "PPVesting::claimVotes: Vote vesting has ended");
    require(votes > 0, "PPVesting::claimVotes: Nothing to claim");

    _claimVotes(_to, member, votes);
  }

  function _claimVotes(
    address _memberAddress,
    Member memory _member,
    uint256 _availableVotes
  ) internal {
    uint96 newAlreadyClaimedVotes;

    if (_availableVotes > 0) {
      uint96 amount = safe96(_availableVotes, "PPVesting::_claimVotes: Amount overflow");

      // member.alreadyClaimed += amount
      newAlreadyClaimedVotes = add96(
        _member.alreadyClaimedVotes,
        amount,
        "PPVesting::claimVotes: newAlreadyClaimed overflow"
      );
      members[_memberAddress].alreadyClaimedVotes = newAlreadyClaimedVotes;
    } else {
      newAlreadyClaimedVotes = _member.alreadyClaimedVotes;
    }

    // Step #1. Get the accrued votes value
    // lastMemberAdjustedVotes = claimedVotesBeforeTx - claimedTokensBeforeTx
    uint96 lastMemberAdjustedVotes = sub96(
      _member.alreadyClaimedVotes,
      _member.alreadyClaimedTokens,
      "PPVesting::_claimVotes: lastMemberAdjustedVotes overflow"
    );

    // Step #2. Get the adjusted value in relation to the member itself.
    // `adjustedVotes = votesAfterTx - claimedTokensBeforeTheCalculation`
    // `claimedTokensBeforeTheCalculation` could be updated earlier in claimVotes() method in the same tx
    uint96 adjustedVotes = sub96(
      newAlreadyClaimedVotes,
      members[_memberAddress].alreadyClaimedTokens,
      "PPVesting::_claimVotes: adjustedVotes underflow"
    );

    address delegate = getVoteUser(_memberAddress);
    uint96 diff;

    // Step #3. Apply the adjusted value in relation to the delegate
    if (adjustedVotes > lastMemberAdjustedVotes) {
      diff = sub96(adjustedVotes, lastMemberAdjustedVotes, "PPVesting::_claimVotes: Positive diff underflow");
      _addDelegatedVotesCache(delegate, diff);
    } else if (lastMemberAdjustedVotes > adjustedVotes) {
      diff = sub96(lastMemberAdjustedVotes, adjustedVotes, "PPVesting::_claimVotes: Negative diff underflow");
      _subDelegatedVotesCache(delegate, diff);
    }

    emit ClaimVotes(
      _memberAddress,
      delegate,
      _member.alreadyClaimedVotes,
      _member.alreadyClaimedTokens,
      newAlreadyClaimedVotes,
      members[_memberAddress].alreadyClaimedTokens,
      lastMemberAdjustedVotes,
      adjustedVotes,
      diff
    );
  }

  /**
   * @notice An active member claims a distributed amount of ERC20 tokens
   * @param _to address to claim ERC20 tokens to
   */
  function claimTokens(address _to) external {
    Member memory member = members[msg.sender];
    require(member.active == true, "PPVesting::claimTokens: User not active");

    uint256 bigAmount = getAvailableTokens(member.alreadyClaimedTokens);
    require(bigAmount > 0, "PPVesting::claimTokens: Nothing to claim");
    uint96 amount = safe96(bigAmount, "PPVesting::claimTokens: Amount overflow");

    // member.alreadyClaimed += amount
    uint96 newAlreadyClaimed = add96(
      member.alreadyClaimedTokens,
      amount,
      "PPVesting::claimTokens: NewAlreadyClaimed overflow"
    );
    members[msg.sender].alreadyClaimedTokens = newAlreadyClaimed;

    uint256 votes = getAvailableVotes(member.alreadyClaimedVotes);

    if (block.number <= endT) {
      _claimVotes(msg.sender, member, votes);
    }

    emit ClaimTokens(msg.sender, _to, amount, newAlreadyClaimed, votes);

    IERC20(token).transfer(_to, bigAmount);
  }

  /**
   * @notice Delegates an already claimed votes amount to the given address
   * @param _to address to delegate votes
   */
  function delegateVotes(address _to) external {
    Member memory member = members[msg.sender];
    require(_to != address(0), "PPVesting::delegateVotes: Can't delegate to 0 address");
    require(member.active == true, "PPVesting::delegateVotes: msg.sender not active");
    require(members[_to].active == true, "PPVesting::delegateVotes: _to user not active");

    address currentDelegate = getVoteUser(msg.sender);
    require(_to != currentDelegate, "PPVesting::delegateVotes: Already delegated to this address");

    voteDelegations[msg.sender] = _to;
    uint96 adjustedVotes = sub96(
      member.alreadyClaimedVotes,
      member.alreadyClaimedTokens,
      "PPVesting::claimVotes: AdjustedVotes underflow"
    );

    _subDelegatedVotesCache(currentDelegate, adjustedVotes);
    _addDelegatedVotesCache(_to, adjustedVotes);

    emit DelegateVotes(msg.sender, _to, currentDelegate, adjustedVotes);
  }

  /**
   * @notice Transfers a vested rights for a member funds to another address
   * @dev A new member won't have any votes for a period between a start block and a current block
   * @param _to address to transfer a vested right to
   */
  function transfer(address _to) external {
    Member memory from = members[msg.sender];
    Member memory to = members[_to];

    uint96 alreadyClaimedTokens = from.alreadyClaimedTokens;
    uint96 alreadyClaimedVotes = from.alreadyClaimedVotes;

    require(from.active == true, "PPVesting::transfer: From member is inactive");
    require(to.active == false, "PPVesting::transfer: To address is already active");
    require(to.transferred == false, "PPVesting::transfer: To address has been already used");

    members[msg.sender] = Member({ active: false, transferred: true, alreadyClaimedVotes: 0, alreadyClaimedTokens: 0 });
    members[_to] = Member({
      active: true,
      transferred: false,
      alreadyClaimedVotes: alreadyClaimedVotes,
      alreadyClaimedTokens: alreadyClaimedTokens
    });

    address currentDelegate = voteDelegations[msg.sender];

    uint32 startBlockNumber = safe32(startV, "PPVesting::transfer: Block number exceeds 32 bits");
    uint32 currentBlockNumber = safe32(block.number, "PPVesting::transfer: Block number exceeds 32 bits");

    checkpoints[_to][0] = Checkpoint(startBlockNumber, 0);
    if (currentDelegate == address(0)) {
      uint96 adjustedVotes = sub96(
        from.alreadyClaimedVotes,
        from.alreadyClaimedTokens,
        "PPVesting::claimVotes: AdjustedVotes underflow"
      );
      _subDelegatedVotesCache(msg.sender, adjustedVotes);
      checkpoints[_to][1] = Checkpoint(currentBlockNumber, adjustedVotes);
      numCheckpoints[_to] = 2;
    } else {
      numCheckpoints[_to] = 1;
    }

    voteDelegations[_to] = voteDelegations[msg.sender];
    delete voteDelegations[msg.sender];

    Member memory toMember = members[_to];
    uint256 votes = getAvailableVotes(toMember.alreadyClaimedVotes);
    _claimVotes(_to, toMember, votes);

    emit Transfer(msg.sender, _to, startBlockNumber, alreadyClaimedVotes, alreadyClaimedTokens, currentDelegate);
  }

  function _subDelegatedVotesCache(address _member, uint96 _subAmount) internal {
    uint32 dstRepNum = numCheckpoints[_member];
    uint96 dstRepOld = dstRepNum > 0 ? checkpoints[_member][dstRepNum - 1].votes : 0;
    uint96 dstRepNew = sub96(dstRepOld, _subAmount, "PPVesting::_cacheUnclaimed: Sub amount overflows");
    _writeCheckpoint(_member, dstRepNum, dstRepOld, dstRepNew);
  }

  function _addDelegatedVotesCache(address _member, uint96 _addAmount) internal {
    uint32 dstRepNum = numCheckpoints[_member];
    uint96 dstRepOld = dstRepNum > 0 ? checkpoints[_member][dstRepNum - 1].votes : 0;
    uint96 dstRepNew = add96(dstRepOld, _addAmount, "PPVesting::_cacheUnclaimed: Add amount overflows");
    _writeCheckpoint(_member, dstRepNum, dstRepOld, dstRepNew);
  }

  /// @dev A copy from CVP token, only the event name changed
  function _writeCheckpoint(
    address delegatee,
    uint32 nCheckpoints,
    uint96 oldVotes,
    uint96 newVotes
  ) internal {
    uint32 blockNumber = safe32(block.number, "PPVesting::_writeCheckpoint: Block number exceeds 32 bits");

    if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
      checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
    } else {
      checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
      numCheckpoints[delegatee] = nCheckpoints + 1;
    }

    emit UnclaimedBalanceChanged(delegatee, oldVotes, newVotes);
  }

  /// @dev The exact copy from CVP token
  function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {
    require(n < 2**32, errorMessage);
    return uint32(n);
  }

  /// @dev The exact copy from CVP token
  function safe96(uint256 n, string memory errorMessage) internal pure returns (uint96) {
    require(n < 2**96, errorMessage);
    return uint96(n);
  }

  /// @dev The exact copy from CVP token
  function sub96(
    uint96 a,
    uint96 b,
    string memory errorMessage
  ) internal pure returns (uint96) {
    require(b <= a, errorMessage);
    return a - b;
  }

  /// @dev The exact copy from CVP token
  function add96(
    uint96 a,
    uint96 b,
    string memory errorMessage
  ) internal pure returns (uint96) {
    uint96 c = a + b;
    require(c >= a, errorMessage);
    return c;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_startV","type":"uint256"},{"internalType":"uint256","name":"_durationV","type":"uint256"},{"internalType":"uint256","name":"_startT","type":"uint256"},{"internalType":"uint256","name":"_durationT","type":"uint256"},{"internalType":"address[]","name":"_memberList","type":"address[]"},{"internalType":"uint96","name":"_amountPerMember","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint96","name":"amount","type":"uint96"},{"indexed":false,"internalType":"uint256","name":"newAlreadyClaimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"votesAvailable","type":"uint256"}],"name":"ClaimTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint96","name":"lastAlreadyClaimedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"lastAlreadyClaimedTokens","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"newAlreadyClaimedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"newAlreadyClaimedTokens","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"lastMemberAdjustedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"adjustedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"diff","type":"uint96"}],"name":"ClaimVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"previousDelegate","type":"address"},{"indexed":false,"internalType":"uint96","name":"adjustedVotes","type":"uint96"}],"name":"DelegateVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"members","type":"address[]"}],"name":"Init","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint32","name":"blockNumber","type":"uint32"},{"indexed":false,"internalType":"uint96","name":"alreadyClaimedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"alreadyClaimedTokens","type":"uint96"},{"indexed":false,"internalType":"address","name":"currentDelegate","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousUnclaimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnclaimed","type":"uint256"}],"name":"UnclaimedBalanceChanged","type":"event"},{"inputs":[],"name":"amountPerMember","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"claimVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"debugLastCachedVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"delegateVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"durationT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"durationV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_now","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_amountPerMember","type":"uint256"},{"internalType":"uint256","name":"_durationInBlocks","type":"uint256"},{"internalType":"uint256","name":"_alreadyClaimed","type":"uint256"}],"name":"getAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alreadyClaimed","type":"uint256"}],"name":"getAvailableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"getAvailableTokensForMember","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"getAvailableTokensForMemberInTheNextBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alreadyClaimed","type":"uint256"}],"name":"getAvailableVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"getAvailableVotesForMember","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_voteHolder","type":"address"}],"name":"getVoteUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasTokenVestingEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasTokenVestingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasVoteVestingEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasVoteVestingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"memberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"bool","name":"transferred","type":"bool"},{"internalType":"uint96","name":"alreadyClaimedVotes","type":"uint96"},{"internalType":"uint96","name":"alreadyClaimedTokens","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voteDelegations","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6101a06040523480156200001257600080fd5b50604051620030e3380380620030e3833981810160405260e08110156200003857600080fd5b815160208301516040808501516060860151608087015160a0880180519451969895979396929591949293820192846401000000008211156200007a57600080fd5b9083019060208201858111156200009057600080fd5b8251866020820283011164010000000082111715620000ae57600080fd5b82525081516020918201928201910280838360005b83811015620000dd578181015183820152602001620000c3565b505050509190910160405250602001519150506001851162000146576040805162461bcd60e51b815260206004820152601c60248201527f505056657374696e673a20496e76616c6964206475726174696f6e5600000000604482015290519081900360640190fd5b600183116200019c576040805162461bcd60e51b815260206004820152601c60248201527f505056657374696e673a20496e76616c6964206475726174696f6e5400000000604482015290519081900360640190fd5b838610620001dc5760405162461bcd60e51b81526004018080602001828103825260238152602001806200309c6023913960400191505060405180910390fd5b828401858701111562000236576040805162461bcd60e51b815260206004820181905260248201527f505056657374696e673a20526571756972657320656e6456203c3d20656e6454604482015290519081900360640190fd5b6000816001600160601b031611620002805760405162461bcd60e51b8152600401808060200182810382526024815260200180620030bf6024913960400191505060405180910390fd5b6000876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bc57600080fd5b505afa158015620002d1573d6000803e3d6000fd5b505050506040513d6020811015620002e857600080fd5b505111620003285760405162461bcd60e51b8152600401808060200182810382526026815260200180620030766026913960400191505060405180910390fd5b606087901b6001600160601b03191660805260a086815260c086905285870160e0526101008590526101208490528385016101405281901b6001600160a01b03191661018052815180620003c3576040805162461bcd60e51b815260206004820152601c60248201527f505056657374696e673a20456d707479206d656d626572206c69737400000000604482015290519081900360640190fd5b61016081905260005b8181101562000422576001600080868481518110620003e757fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620003cc565b507f666d383ccf45e51cbf9b64e4e30bd3fd7ca860204a781574e5cf41ba71a0a877836040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015620004875781810151838201526020016200046d565b505050509050019250505060405180910390a1505050505050505060805160601c60a05160c05160e051610100516101205161014051610160516101805160a01c612b026200057460003980610ec352806113fc52806114a752806117925250806105ea525080610ddf5280610fad528061119b528061145252806118295280611aba525080610d3f528061142052806117bc525080610e5152806113d252806117715280611878525080610e785280611bda525080610e2d52806114d15250806109e15280610e065280610e9f52806110ff5280611486525080611b435280611c335250612b026000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063782d6fe111610104578063a94f0b83116100a2578063df8de3e711610071578063df8de3e71461051e578063e6c2e94d14610544578063f1127ed81461054c578063fc0c546a146105a6576101da565b8063a94f0b8314610479578063ac1f8069146104bb578063ad93b23b146104c3578063ca28f0d0146104f8576101da565b80638c5fcdda116100de5780638c5fcdda146104085780639187cb031461042e578063991007dc1461044b578063a8b7d82414610471576101da565b8063782d6fe11461039957806378afbc0f146103c557806388e6c659146103eb576101da565b806351771f401161017c5780635e6a1dd81161014b5780635e6a1dd8146102ea5780636947d7901461030e5780636e4558f0146103345780636fcfff451461035a576101da565b806351771f40146102ca578063544c7f1f146102d257806356cb9c06146102da5780635cfa7d02146102e2576101da565b8063286f89f5116101b8578063286f89f5146102785780632e7c8ebc14610280578063380b8e4a146102a65780633c1d2f5e146102c2576101da565b806308ae4b0c146101df57806311aee380146102365780631a69523014610250575b600080fd5b610205600480360360208110156101f557600080fd5b50356001600160a01b03166105ae565b60408051941515855292151560208501526001600160601b0391821684840152166060830152519081900360800190f35b61023e6105e8565b60408051918252519081900360200190f35b6102766004803603602081101561026657600080fd5b50356001600160a01b031661060c565b005b61023e610d3d565b61023e6004803603602081101561029657600080fd5b50356001600160a01b0316610d61565b6102ae610ddd565b604080519115158252519081900360200190f35b6102ae610e04565b61023e610e2b565b6102ae610e4f565b6102ae610e76565b61023e610e9d565b6102f2610ec1565b604080516001600160601b039092168252519081900360200190f35b6102766004803603602081101561032457600080fd5b50356001600160a01b0316610ee5565b61023e6004803603602081101561034a57600080fd5b50356001600160a01b0316611059565b6103806004803603602081101561037057600080fd5b50356001600160a01b03166110a5565b6040805163ffffffff9092168252519081900360200190f35b6102f2600480360360408110156103af57600080fd5b506001600160a01b0381351690602001356110bd565b61023e600480360360208110156103db57600080fd5b50356001600160a01b031661139a565b61023e6004803603602081101561040157600080fd5b503561144e565b6102766004803603602081101561041e57600080fd5b50356001600160a01b03166114f6565b61023e6004803603602081101561044457600080fd5b5035611769565b61023e6004803603602081101561046157600080fd5b50356001600160a01b03166117e1565b61023e611827565b61049f6004803603602081101561048f57600080fd5b50356001600160a01b031661184b565b604080516001600160a01b039092168252519081900360200190f35b61023e611876565b61023e600480360360a08110156104d957600080fd5b508035906020810135906040810135906060810135906080013561189a565b61049f6004803603602081101561050e57600080fd5b50356001600160a01b03166118ff565b6102766004803603602081101561053457600080fd5b50356001600160a01b031661191a565b61023e611bd8565b61057e6004803603604081101561056257600080fd5b5080356001600160a01b0316906020013563ffffffff16611bfc565b6040805163ffffffff90931683526001600160601b0390911660208301528051918290030190f35b61049f611c31565b60006020819052908152604090205460ff808216916101008104909116906001600160601b03620100008204811691600160701b90041684565b7f000000000000000000000000000000000000000000000000000000000000000081565b610614612572565b5033600090815260208181526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811693820193909352600160701b9091049091166060820152610677612572565b506001600160a01b038216600090815260208181526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811682850152600160701b90920490911660608083019190915283015191830151835191929115156001146107285760405162461bcd60e51b815260040180806020018281038252602c8152602001806127b4602c913960400191505060405180910390fd5b8251156107665760405162461bcd60e51b81526004018080602001828103825260318152602001806127836031913960400191505060405180910390fd5b6020830151156107a75760405162461bcd60e51b8152600401808060200182810382526035815260200180612a716035913960400191505060405180910390fd5b604051806080016040528060001515815260200160011515815260200160006001600160601b0316815260200160006001600160601b0316815250600080336001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a8154816001600160601b0302191690836001600160601b03160217905550606082015181600001600e6101000a8154816001600160601b0302191690836001600160601b031602179055509050506040518060800160405280600115158152602001600015158152602001826001600160601b03168152602001836001600160601b0316815250600080876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a8154816001600160601b0302191690836001600160601b03160217905550606082015181600001600e6101000a8154816001600160601b0302191690836001600160601b03160217905550905050600060036000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b031690506000610a1e7f00000000000000000000000000000000000000000000000000000000000000006040518060600160405280603181526020016129a760319139611c55565b90506000610a44436040518060600160405280603181526020016129a760319139611c55565b905060405180604001604052808363ffffffff16815260200160006001600160601b0316815250600160008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008063ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160601b0302191690836001600160601b0316021790555090505060006001600160a01b0316836001600160a01b03161415610be7576000610b46886040015189606001516040518060600160405280602e8152602001612837602e9139611cef565b9050610b523382611d5c565b60408051808201825263ffffffff84811682526001600160601b0393841660208084019182526001600160a01b038e1660008181526001808452878220908252835286812095518654945163ffffffff199586169190961617640100000000600160801b031916600160201b959098169490940296909617909355938152600291829052919091208054909216179055610c0e565b6001600160a01b0388166000908152600260205260409020805463ffffffff191660011790555b3360008181526003602052604080822080546001600160a01b038d811685529284208054939091166001600160a01b0319938416179055929091528154169055610c56612572565b506001600160a01b0388166000908152602081815260408083208151608081018352905460ff808216151583526101008204161515938201939093526001600160601b036201000084048116928201839052600160701b9093049092166060830152909190610cc49061144e565b9050610cd18a8383611e03565b604080516001600160601b038089168252891660208201526001600160a01b0387811682840152915163ffffffff8716928d169133917f83c702e06c08932bf6d16af0c6410a5e53d33ca4b6015ffe1f8040fa3fafc4579181900360600190a450505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03811660009081526002602052604081205463ffffffff1680610d8c576000610dcb565b6001600160a01b0383166000908152600160209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b6001600160601b03169150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000043101590565b7f000000000000000000000000000000000000000000000000000000000000000043101590565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000043101590565b7f000000000000000000000000000000000000000000000000000000000000000043101590565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610eed612572565b506001600160a01b038116600090815260208181526040918290208251608081018452905460ff808216151580845261010083049091161515938301939093526001600160601b03620100008204811694830194909452600160701b90049092166060830152600114610f915760405162461bcd60e51b815260040180806020018281038252602681526020018061275d6026913960400191505060405180910390fd5b6000610fa982604001516001600160601b031661144e565b90507f000000000000000000000000000000000000000000000000000000000000000043111561100a5760405162461bcd60e51b815260040180806020018281038252602d815260200180612619602d913960400191505060405180910390fd5b600081116110495760405162461bcd60e51b8152600401808060200182810382526027815260200180612aa66027913960400191505060405180910390fd5b611054838383611e03565b505050565b6001600160a01b0381166000908152602081905260408120805460ff16611084576000915050610dd8565b805461109e906201000090046001600160601b031661144e565b9392505050565b60026020526000908152604090205463ffffffff1681565b60004382106110fd5760405162461bcd60e51b815260040180806020018281038252602c8152602001806128bb602c913960400191505060405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000821161115b5760405162461bcd60e51b815260040180806020018281038252603a815260200180612a37603a913960400191505060405180910390fd5b6001600160a01b038316600090815260026020908152604080832054918390529091205463ffffffff9091169060ff16611199576000915050611394565b7f00000000000000000000000000000000000000000000000000000000000000008311156111cb576000915050611394565b63ffffffff8116158061120657506001600160a01b038416600090815260016020908152604080832083805290915290205463ffffffff1683105b15611215576000915050611394565b6001600160a01b038416600090815260016020908152604080832063ffffffff600019860181168552925290912054168310611291576001600160a01b03841660009081526001602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050611394565b600060001982015b8163ffffffff168163ffffffff16111561135457600282820363ffffffff160481036112c3612599565b506001600160a01b038716600090815260016020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529087141561132f576020015194506113949350505050565b805163ffffffff168711156113465781935061134d565b6001820392505b5050611299565b506001600160a01b038516600090815260016020908152604080832063ffffffff909416835292905220546001600160601b03600160201b909104169150505b92915050565b6001600160a01b0381166000908152602081905260408120805460ff166113c5576000915050610dd8565b805461109e9060014301907f0000000000000000000000000000000000000000000000000000000000000000906001600160601b037f00000000000000000000000000000000000000000000000000000000000000008116917f000000000000000000000000000000000000000000000000000000000000000091600160701b9091041661189a565b60007f000000000000000000000000000000000000000000000000000000000000000043111561148057506000610dd8565b611394437f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160601b03167f00000000000000000000000000000000000000000000000000000000000000008661189a565b6114fe612572565b5033600090815260208181526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811693820193909352600160701b90910490911660608201526001600160a01b03821661159e5760405162461bcd60e51b81526004018080602001828103825260358152602001806128866035913960400191505060405180910390fd5b805115156001146115e05760405162461bcd60e51b815260040180806020018281038252602f815260200180612701602f913960400191505060405180910390fd5b6001600160a01b03821660009081526020819052604090205460ff16151560011461163c5760405162461bcd60e51b815260040180806020018281038252602d815260200180612730602d913960400191505060405180910390fd5b60006116473361184b565b9050806001600160a01b0316836001600160a01b0316141561169a5760405162461bcd60e51b815260040180806020018281038252603b815260200180612646603b913960400191505060405180910390fd5b33600090815260036020908152604080832080546001600160a01b0319166001600160a01b038816179055848101516060808701518351918201909352602e8082526116ef9492939261283790830139611cef565b90506116fb8282611d5c565b6117058482612085565b816001600160a01b0316846001600160a01b0316336001600160a01b03167fb62a174a641bf478889ef54cf579217791f8ef54d7cfacc0924700208519651c8460405180826001600160601b0316815260200191505060405180910390a450505050565b6000611394437f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160601b03167f00000000000000000000000000000000000000000000000000000000000000008661189a565b6001600160a01b0381166000908152602081905260408120805460ff1661180c576000915050610dd8565b805461109e90600160701b90046001600160601b0316611769565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03808216600090815260036020526040812054909116806113945782915050610dd8565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008486116118ab575060006118f6565b60006118b78685612117565b905060008188116118c857876118ca565b815b905060006118e4866118de8a85038a612171565b906121ca565b90506118f0818661220c565b93505050505b95945050505050565b6003602052600090815260409020546001600160a01b031681565b611922612572565b5033600090815260208181526040918290208251608081018452905460ff808216151580845261010083049091161515938301939093526001600160601b03620100008204811694830194909452600160701b900490921660608301526001146119bd5760405162461bcd60e51b81526004018080602001828103825260278152602001806126816027913960400191505060405180910390fd5b60006119d582606001516001600160601b0316611769565b905060008111611a165760405162461bcd60e51b81526004018080602001828103825260288152602001806128e76028913960400191505060405180910390fd5b6000611a3a826040518060600160405280602781526020016126da6027913961224e565b90506000611a658460600151836040518060600160405280603281526020016126a8603291396122a3565b3360009081526020819052604080822080546001600160601b03808616600160701b026bffffffffffffffffffffffff60701b1990921691909117909155908701519293509091611ab6911661144e565b90507f00000000000000000000000000000000000000000000000000000000000000004311611aea57611aea338683611e03565b604080516001600160601b0380861682528416602082015280820183905290516001600160a01b0388169133917fe3a16c28e67957e6b807157ed70c0f99a5a5df25995ebc04ec990ecfe9017dea9181900360600190a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb87866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611bb857600080fd5b505af1158015611bcc573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081600160201b8410611ce75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cac578181015183820152602001611c94565b50505050905090810190601f168015611cd95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836001600160601b0316836001600160601b031611158290611d545760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cac578181015183820152602001611c94565b505050900390565b6001600160a01b03821660009081526002602052604081205463ffffffff169081611d88576000611dc7565b6001600160a01b0384166000908152600160209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b90506000611dee82856040518060600160405280603081526020016127e060309139611cef565b9050611dfc8584848461230d565b5050505050565b60008115611e9e576000611e2f836040518060600160405280602781526020016128106027913961224e565b9050611e5884604001518260405180606001604052806031815260200161293e603191396122a3565b6001600160a01b038616600090815260208190526040902080546dffffffffffffffffffffffff00001916620100006001600160601b038416021790559150611ea59050565b5060408201515b6000611ed28460400151856060015160405180606001604052806038815260200161296f60389139611cef565b90506000611f3383600080896001600160a01b03166001600160a01b03168152602001908152602001600020600001600e9054906101000a90046001600160601b03166040518060600160405280602f815260200161290f602f9139611cef565b90506000611f408761184b565b90506000836001600160601b0316836001600160601b03161115611f9257611f8183856040518060600160405280602f81526020016125ea602f9139611cef565b9050611f8d8282612085565b611fdb565b826001600160601b0316846001600160601b03161115611fdb57611fcf84846040518060600160405280602f81526020016129d8602f9139611cef565b9050611fdb8282611d5c565b6040808801516060808a01516001600160a01b038c811660008181526020818152908790205487516001600160601b03978816815294871691850191909152858c1684880152600160701b9004851693830193909352888416608083015287841660a083015292851660c082015292519185169290917fa5f76077cbbfd3516304bdaf271d57fc3b3a07a9c7e457d1d71a608ff08f88579181900360e00190a35050505050505050565b6001600160a01b03821660009081526002602052604081205463ffffffff1690816120b15760006120f0565b6001600160a01b0384166000908152600160209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b90506000611dee8285604051806060016040528060308152602001612a07603091396122a3565b60008282018381101561109e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261218057506000611394565b8282028284828161218d57fe5b041461109e5760405162461bcd60e51b81526004018080602001828103825260218152602001806128656021913960400191505060405180910390fd5b600061109e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124bb565b600061109e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612520565b600081600160601b8410611ce75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cac578181015183820152602001611c94565b6000838301826001600160601b0380871690831610156123045760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cac578181015183820152602001611c94565b50949350505050565b6000612331436040518060600160405280603981526020016125b160399139611c55565b905060008463ffffffff1611801561237a57506001600160a01b038516600090815260016020908152604080832063ffffffff6000198901811685529252909120548282169116145b156123d4576001600160a01b0385166000908152600160209081526040808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b03851602179055612467565b60408051808201825263ffffffff83811682526001600160601b0385811660208085019182526001600160a01b038b16600081815260018084528882208d88168352845288822097518854955163ffffffff1996871691891691909117640100000000600160801b031916600160201b919097160295909517909655855260029052939092208054909316918701161790555b604080516001600160601b0380861682528416602082015281516001600160a01b038816927ff6ab64320c70b20a37e43daa63d22b9c5ac61b4967b2faed4e705aafde54baaa928290030190a25050505050565b6000818361250a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cac578181015183820152602001611c94565b50600083858161251657fe5b0495945050505050565b60008184841115611d545760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cac578181015183820152602001611c94565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60408051808201909152600080825260208201529056fe505056657374696e673a3a5f7772697465436865636b706f696e743a20426c6f636b206e756d62657220657863656564732033322062697473505056657374696e673a3a5f636c61696d566f7465733a20506f736974697665206469666620756e646572666c6f77505056657374696e673a3a636c61696d566f7465733a20566f74652076657374696e672068617320656e646564505056657374696e673a3a64656c6567617465566f7465733a20416c72656164792064656c65676174656420746f20746869732061646472657373505056657374696e673a3a636c61696d546f6b656e733a2055736572206e6f7420616374697665505056657374696e673a3a636c61696d546f6b656e733a204e6577416c7265616479436c61696d6564206f766572666c6f77505056657374696e673a3a636c61696d546f6b656e733a20416d6f756e74206f766572666c6f77505056657374696e673a3a64656c6567617465566f7465733a206d73672e73656e646572206e6f7420616374697665505056657374696e673a3a64656c6567617465566f7465733a205f746f2075736572206e6f7420616374697665505056657374696e673a3a636c61696d566f7465733a2055736572206e6f7420616374697665505056657374696e673a3a7472616e736665723a20546f206164647265737320697320616c726561647920616374697665505056657374696e673a3a7472616e736665723a2046726f6d206d656d62657220697320696e616374697665505056657374696e673a3a5f6361636865556e636c61696d65643a2053756220616d6f756e74206f766572666c6f7773505056657374696e673a3a5f636c61696d566f7465733a20416d6f756e74206f766572666c6f77505056657374696e673a3a636c61696d566f7465733a2041646a7573746564566f74657320756e646572666c6f77536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77505056657374696e673a3a64656c6567617465566f7465733a2043616e27742064656c656761746520746f20302061646472657373505056657374696e673a3a6765745072696f72566f7465733a204e6f74207965742064657465726d696e6564505056657374696e673a3a636c61696d546f6b656e733a204e6f7468696e6720746f20636c61696d505056657374696e673a3a5f636c61696d566f7465733a2061646a7573746564566f74657320756e646572666c6f77505056657374696e673a3a636c61696d566f7465733a206e6577416c7265616479436c61696d6564206f766572666c6f77505056657374696e673a3a5f636c61696d566f7465733a206c6173744d656d62657241646a7573746564566f746573206f766572666c6f77505056657374696e673a3a7472616e736665723a20426c6f636b206e756d62657220657863656564732033322062697473505056657374696e673a3a5f636c61696d566f7465733a204e65676174697665206469666620756e646572666c6f77505056657374696e673a3a5f6361636865556e636c61696d65643a2041646420616d6f756e74206f766572666c6f7773505056657374696e673a3a6765745072696f72566f7465733a2043616e2774206265206265666f72652f657175616c2074686520737461727456505056657374696e673a3a7472616e736665723a20546f206164647265737320686173206265656e20616c72656164792075736564505056657374696e673a3a636c61696d566f7465733a204e6f7468696e6720746f20636c61696da2646970667358221220bf33b3eae669abf69c978e0c0a76f31ca7d5f4517b79fe47a8d8b9cf4083cd1064736f6c634300060c0033505056657374696e673a204d697373696e6720737570706c79206f662074686520746f6b656e505056657374696e673a20526571756972657320737461727456203c20737461727454505056657374696e673a20496e76616c696420616d6f756e7420706572206d656d62657200000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca10000000000000000000000000000000000000000000000000000000000a7572400000000000000000000000000000000000000000000000000000000002433940000000000000000000000000000000000000000000000000000000000be351d00000000000000000000000000000000000000000000000000000000003640ac00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000a968163f0a57b40000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000001bf8567543fa87c5107b690452dbf3f754654a2e0000000000000000000000000c7141667eb3ebc0f742784d58833b4aec1fba220000000000000000000000004e080cd5eae0eb7ac45cb20137e73ebd8335281a000000000000000000000000c00f898f3794e38cb35d7c16c051b229c5f8a8490000000000000000000000009969658c7e29ffab87516f128bee4165f8dc156100000000000000000000000001d76cd388fc76d8adc9235317d7f5ea23268e16000000000000000000000000009170c4a4b300b3b0606eeafe3fb25ae3938fb500000000000000000000000017038c92006857ccf1514bd51d067ec019f22e74000000000000000000000000906d06191c3ad2722ca74675588f1885df9e690b0000000000000000000000001bbe9fe79d6d660ea108a2da3d4e89e58477a8d6000000000000000000000000aa7a9d80971e58641442774c373c94aafee87d6600000000000000000000000006d85218d0bf4f7be9515f7af1b597b84ad21c2b000000000000000000000000725f87a90deff5e0bfdbd0c3cd9178a4563ab0cf0000000000000000000000008c03a859be9b4a5a2e54c1ab9c6b1dd79e8aa3d9000000000000000000000000c207341da41386bdb23552c9693db0a1c7c5c43a000000000000000000000000b6c6230ff314f0b870cd4a05f107221c222e5997000000000000000000000000caaef1dd3c71f2ad1616c42946d88d9afe12c86b0000000000000000000000005636f2f5bc07adb7104f929b4c8bb45acb5dd9f90000000000000000000000002e8f0ca8a7f50c5e4fed15beb621f4ab396faa69000000000000000000000000a0995532092514913e5a4ddc0f588cf031d2cc72000000000000000000000000e43e081b55b7520954564818c65798b66d6af3c800000000000000000000000025112ed9705dd13d99dbdb0f79b89fdff308584f000000000000000000000000119d18911944f5b1b610fe00537d40d120802955000000000000000000000000df4b2550185d8cb0e9825ae7aca99a1ad3ad10ea000000000000000000000000c2af82d35ad66a9b4e8bd574c03ae087af0b23140000000000000000000000001bccbcda9b4d9a1a98b4c280116dd6a437f51f9200000000000000000000000056f5c0f88002670aeccde5adbad35e72f383ed180000000000000000000000008c9fa9e231856b89d271933e046447246a3ca7c600000000000000000000000028aee5f009a1413d9db29e5202ca25ebb26daf4e0000000000000000000000000684add5141f6b8d3de1179671d8dfea00b95449000000000000000000000000cc2c6d82e00e14f81ffc8e4f6a26c4522ada5a340000000000000000000000006c492bfe6117610042ef50b6d4a6d92803e82c0e000000000000000000000000899d89d7a96a1b45d60600343dcc1ec1120e42f90000000000000000000000003c87e00da8551c73032496aa60d9bd980510cbaf0000000000000000000000006c7655a0557a43348aecd75ceae12c46cd14da35000000000000000000000000040f655c0e7060d8fa9a9152301252d2e63f4f190000000000000000000000001237819df68e9808dd65d66470b6a0e5a09f125e000000000000000000000000f6d9e0a7c16c6c38e771cfd149eed85dfbe613010000000000000000000000009af2da23860914f3209e7813a3e41b5c4e12bd1a0000000000000000000000001357aeb37a7231d738ee71442290ac61a8639cc20000000000000000000000008cb38dd8b59119974804f888e373c1e8a41e671b000000000000000000000000c6ee5b29e22c6ad95041e316081689b47052dfe4000000000000000000000000505ad51cc7a26acf2123b0bde1e5fe6a315b3f3100000000000000000000000046601d5e5167c124b4d23ecdfdc79f82a3f5c7bd000000000000000000000000018a3833ccc9d365195441c32e2202f2cc9e5f16000000000000000000000000326d442be95eec5af140301631a47de7cb52c1ea00000000000000000000000031088e286046e6b2bfc436656733cb29c347bfbb000000000000000000000000674bdd830b885edf2d744cc5d167abbcb494c4c30000000000000000000000000e8b04494898be2e95f0f567ebd727bbb4acfd3f000000000000000000000000f5d0a18720692c1f9d7b8e5fcae49aca155253cf000000000000000000000000971c6b1323fbb695a57ee6694bdc2674f597b46b000000000000000000000000a081f72ef209c55420033e5e50fcff7d929e317000000000000000000000000023f0a89cfb61799e85a45172359f9be320a49b22000000000000000000000000e86b195406deb3a226696fe07d427d39ca132faf00000000000000000000000042c8680edd9575dc7c237c8ddea2b0b62a93828f00000000000000000000000019cb2bc841c97fc31cc6d6fc8df58d774519e539000000000000000000000000ac84c832617209fdc894d767371f3002cdaf8f8a00000000000000000000000088d065bf93df032c342a64cdaf84ef629f3b0277000000000000000000000000a806064443e243683852889193e1679e7faea29b0000000000000000000000000df70e1463f108e71bfc1b6d26e2de5613537a95000000000000000000000000483ae5758563afad072b92f1b935adf513ad0506000000000000000000000000007f30ff2e8bcae0b455d3b4ec92ab8add67feaf0000000000000000000000000b19cbee3c4dceff21946f0b18ac0ed2709d6fb500000000000000000000000073e8de3f2f913ecbdec97524430746acf65578a2000000000000000000000000aaeb6ca7fdf98c1284592749e9161a3c885f59bd0000000000000000000000000d4ddea3849c54e16c85cb4354943dc876e05552000000000000000000000000a40a9f6620b144135764b9922f73005f2f103b170000000000000000000000003926f74bbaa0f0a2bbaa664ac01ecd6a4534be0500000000000000000000000000326e37cef76788f6b0cf643c94481d60bd3d5800000000000000000000000084a2c92a77106ece8f1b03ee7b88c71babffb453000000000000000000000000279a8aedcca46f435b7aec6c6240421042462eec000000000000000000000000d61c606cf0ca54554cc86ee41ed895aa109ab038000000000000000000000000ef59c1500e3299dcec6af5fe39b01674318425da000000000000000000000000f6340ae60be2430c873703e57112482c3237f655000000000000000000000000ad5471c3b31d174cb4dad3b7d048b7fbe347d7b1000000000000000000000000b0325dbe7fa891436e83a094f9f12848c78e449b000000000000000000000000bc8d9fd142eb75fbf93b395723893af9c9f8580f000000000000000000000000b7376a7f8cacaaa994ccb8f78c542782cbadd89e0000000000000000000000002da8273c586c9488096a0a7f117efe95f9905ed7000000000000000000000000c11f1010c6b75cda68776528a94618579ef21c12000000000000000000000000ff1489a5c9c86eb00adfbd8ef67f84f6c01c6246000000000000000000000000f1c1cdf8a84a5e042eb2213623adaec37fe21eb600000000000000000000000068a37c633c22464917fd0d50532be0811617123b0000000000000000000000001464d46abd192baec1d4cb7b60415b02d346dfde0000000000000000000000005cb1d4b99f972ccdeccefcfec638d72f9629b5d0000000000000000000000000225c4cfc17d5ee7bf3e682396b12c0f6a7709d7d000000000000000000000000fb38d870055bed6f98a7994bb9d29714a0e3558400000000000000000000000062a94a3bf2dfc247f5dc861387336eb17a2e1141000000000000000000000000d3ac70f86a4dd8051876e847e1059eb6eb5586ed0000000000000000000000002a2bb3320614955fc1f6da98e3572c6bf9d9d1c9000000000000000000000000a4dd0533008e17b65b55c916d947a937783b57b1000000000000000000000000738a9aa93974c7f82d97adfbe2bc80046b347b1100000000000000000000000084740f97aea62c5dc36756dfd9f749412534220e000000000000000000000000a834e439a41f1f72ac2af9edb8ad825d9830e2c00000000000000000000000009694c964e2ce3624ff4d1f91e8d1f177c18dac6f000000000000000000000000695f498407f96c0185709acafa01c3a00771c896000000000000000000000000170c5cadb50dc163db0dd786c96d7ecb5e24a379000000000000000000000000f3e3793fda3c8f836f3a6d778c23cb5c04d1909a000000000000000000000000691118f93b549cbb3678bfe7c957546cbfc594de0000000000000000000000002a8763577f8ab360bade50ab326b9d18d1d509d0000000000000000000000000d61aae0a148ec5e6005143734f9841ebdcbb2f1b000000000000000000000000b6d52aa63532a0d1c50b3bb782e6b511bd9736450000000000000000000000007ac8481402ee760d46201ebab4b44388d1834a4d0000000000000000000000008517d50cdd95aba21b94968a98d526b743174497000000000000000000000000edfbe70e9c10b23b955988df06488b8dfd543ddd0000000000000000000000003e1d23be803c31d2c44efe84fb96659d12c49fd50000000000000000000000005e0a086b8ea7bd6ac3098b61005ae55b1381154a000000000000000000000000d4b6ca3f34fdf880646247c8ca1b458c3d295422000000000000000000000000c16ab72a9dce2e458f5d33211f1c6844dbb2ce4e000000000000000000000000481e012260715b57e162bad30423ab639781421a000000000000000000000000dcd38bc4f5aef76a1e1b12b1774410a6e175c44e000000000000000000000000331c12bbe5111763cfe5cdc6f93876b206adf99b000000000000000000000000f3b1b6e83be4d55695f1d30ac3d307d9d5ca98ff0000000000000000000000000a1908b732884449b819e146f257fb6018d00ab100000000000000000000000043732b04bf1b2a42c9925f5c1d9f3535c6ea82ed000000000000000000000000e921906a819eaec8df8d1ea395bed1add27605f600000000000000000000000012e3567224bf39a567b00197b208423998a24da30000000000000000000000004295f78bba333352965b5ed08dc5b4c6833baf7d000000000000000000000000f190463c5e63f68995e1d1e06b22f16b90172ea9000000000000000000000000fcac0c65c2e9ec6c4f5c05d6e5c6e06b5c0261ca0000000000000000000000001df2bca072b7bf8a214ff9e6ee5bca9d60098974000000000000000000000000f519c842210abb71c6ed4cc26d3aabee9853beff000000000000000000000000a7bb2a00f6a23fbc89c34eec95ddb071683af92700000000000000000000000014e9e9f0a8d9bac4cad8c1ce339826f42924e5420000000000000000000000000b858e239ccf09d4411703b383db9f7c737cb082000000000000000000000000737d3c588da96328c20327bc5d04e6beb73b453d000000000000000000000000779e9717c7040eca7ce5a4749cf960c0441aa1510000000000000000000000006a69c12128493446ab782d9276c27fb511395a6e0000000000000000000000006c3e8b4dc0ccaa9a3ae535465b0893e3b029bb00000000000000000000000000866d9eb467b5ebd8c6464cceccc367d95ccfd31c000000000000000000000000658357017948986a7ee7c714fa37138b7fe1317d000000000000000000000000b4dc010733ea4f3b42f71244c4b2357129d971c80000000000000000000000007f18176ef0bc3beda3246e0153e76b4b4786037d000000000000000000000000d800fc90efa8532c77ed14102f8280e904c965980000000000000000000000001e70710718e6df8a486dff4ce6c8cb4487b4fc300000000000000000000000009b733a14c4acb7e255f1af4b268ad9b330e8b8f4000000000000000000000000f9342660f2ba86270c6854c7f59773a20a8f5def00000000000000000000000088fb3d509fc49b515bfeb04e23f53ba3395639810000000000000000000000009516c6ac7bc8be957148f94f894973028378b36c00000000000000000000000089ab8578326ff2e0dc5a2c0617f74ccb41532e410000000000000000000000006fc868df4b7328eb54f92b5993f45cf732842679000000000000000000000000867db38c83f4287a71ffd0cdfba6ffae93150ff7000000000000000000000000de7a82fe90eab3f5235552f2137402a69d53fb9400000000000000000000000031de3ad9fbfaeb90348d5cb8a101fbb68f28ceff000000000000000000000000f800b41ea9db0dff446d2a25cc8ff7ae0164281800000000000000000000000097116fc08e002e79736f641efb164114942c0732000000000000000000000000554976402a8aa7020814602c49f8a6e3bea2a78300000000000000000000000004a15d06c0c420a4e568cc40ccd80f71f6df69f0000000000000000000000000975b77dbc27a0eed46b44a09323af252f27158f80000000000000000000000008e1f13a08012f34dc8750ee34b78e90b5616f19400000000000000000000000040a9066ebb98950ff64481cc8d1bcf5fd0c28737000000000000000000000000fb17199bb361daed5b8df4e0d263f2f6cb990c500000000000000000000000003b0e6b8e5f72df429e58c0885806f2da874aa1de000000000000000000000000424182a114b5bd42638791b6a6f11fc1d6027e030000000000000000000000007111cbd16ae9ecc1910bb478c73cd988182177340000000000000000000000004edc18e8739233c870bd056c33256a99083bfecb00000000000000000000000052e1e58db9151d8a0f1dcd8cb3b00948df114b8e0000000000000000000000006a52f086844cd1a19f538de2dc8f84a886e313a800000000000000000000000061751bc401f4eabe10a238661b4a60ba84910059000000000000000000000000be7ae9e43d4373bce5b2d9195bbe31f6a7a0db6f000000000000000000000000052684c9ff39bbf50e8eff902fdff1adc64145f5000000000000000000000000c939e0238be5182f3a1c1db5f53fa38178e360f00000000000000000000000002569448fef8b66f86fae809cdce53b5151b3d0c5000000000000000000000000c20d543f892dbb1900255f2e42167a0b49ad0543000000000000000000000000c71a8ff766b5ea918c33df155a9f77b949fa7c2d00000000000000000000000066fe8f934b0ad44d6234d896fe4dbbf25a9294a100000000000000000000000010ff2d60924eb9e759904a4c960766dbac212ebd0000000000000000000000000d9626b3a4f6eefc91f7ae1e2ead163701aaae3c000000000000000000000000d560e115d8a55f24448c5887b5c05a6c4ab44753000000000000000000000000e854f8b14262f64e10dab03f9ba5fc37c8eb2a72000000000000000000000000474d4cfc8c28b5d902abbf8efb24743291220090000000000000000000000000cde638127345ba1b50810f4e499f3b9c1edecbd6000000000000000000000000c5ad46f49645aee062e0639b860b2919f8f2fe10000000000000000000000000fbe24b3b2dbff7a48d77b146623dfc621309f4cc0000000000000000000000004bf24d2ccdb772f344ad0eec6d3716e5ef5a84b7000000000000000000000000e58b8eb30fe6e5cef1825b98cf533b17408da8bd000000000000000000000000a16252eb09608b91c4c6fcdc1fc19809c5c55c350000000000000000000000002c4723e2f00a0bcf229553c466630bcda04bbe41000000000000000000000000f11ffaf3dd2c39df6f2ad661d5ffe60daa0fc9fd000000000000000000000000d3cd153156e97638b7fe71a8dd4a9a5c3a59a0200000000000000000000000007fb2eb7bcd35c48248789884ae803095fb3e93380000000000000000000000006cc52e11cf88c0b2dddec1e5e7cfe9c5913b4d09000000000000000000000000375afe51c5d9313ff20504aa3094844400be34090000000000000000000000004916efbf56bcaea1130b2a631f6f093095f614a20000000000000000000000001fabdc9da117d1392aab80c69ec141e4d579341c0000000000000000000000006be2e15d6749f3bf984e7ae3efce46a4d6292f540000000000000000000000009fb753be58cf3354fc4684b0d59aba4edf1a90a9000000000000000000000000ace1ae1a4db3adec22b3e1173afe852a5a6fe40a000000000000000000000000d6a5ade2b16ac1d72a1e2833b573ccda6fedece50000000000000000000000002cb490343ae7166357180ac75a9958f9c1c267b0000000000000000000000000b4ab322fb2af74d84be16c70adc5402f402c9af500000000000000000000000058fa2617627a677bd29d5ab11880d066111b8d0e

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

00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca10000000000000000000000000000000000000000000000000000000000a7572400000000000000000000000000000000000000000000000000000000002433940000000000000000000000000000000000000000000000000000000000be351d00000000000000000000000000000000000000000000000000000000003640ac00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000a968163f0a57b40000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000001bf8567543fa87c5107b690452dbf3f754654a2e0000000000000000000000000c7141667eb3ebc0f742784d58833b4aec1fba220000000000000000000000004e080cd5eae0eb7ac45cb20137e73ebd8335281a000000000000000000000000c00f898f3794e38cb35d7c16c051b229c5f8a8490000000000000000000000009969658c7e29ffab87516f128bee4165f8dc156100000000000000000000000001d76cd388fc76d8adc9235317d7f5ea23268e16000000000000000000000000009170c4a4b300b3b0606eeafe3fb25ae3938fb500000000000000000000000017038c92006857ccf1514bd51d067ec019f22e74000000000000000000000000906d06191c3ad2722ca74675588f1885df9e690b0000000000000000000000001bbe9fe79d6d660ea108a2da3d4e89e58477a8d6000000000000000000000000aa7a9d80971e58641442774c373c94aafee87d6600000000000000000000000006d85218d0bf4f7be9515f7af1b597b84ad21c2b000000000000000000000000725f87a90deff5e0bfdbd0c3cd9178a4563ab0cf0000000000000000000000008c03a859be9b4a5a2e54c1ab9c6b1dd79e8aa3d9000000000000000000000000c207341da41386bdb23552c9693db0a1c7c5c43a000000000000000000000000b6c6230ff314f0b870cd4a05f107221c222e5997000000000000000000000000caaef1dd3c71f2ad1616c42946d88d9afe12c86b0000000000000000000000005636f2f5bc07adb7104f929b4c8bb45acb5dd9f90000000000000000000000002e8f0ca8a7f50c5e4fed15beb621f4ab396faa69000000000000000000000000a0995532092514913e5a4ddc0f588cf031d2cc72000000000000000000000000e43e081b55b7520954564818c65798b66d6af3c800000000000000000000000025112ed9705dd13d99dbdb0f79b89fdff308584f000000000000000000000000119d18911944f5b1b610fe00537d40d120802955000000000000000000000000df4b2550185d8cb0e9825ae7aca99a1ad3ad10ea000000000000000000000000c2af82d35ad66a9b4e8bd574c03ae087af0b23140000000000000000000000001bccbcda9b4d9a1a98b4c280116dd6a437f51f9200000000000000000000000056f5c0f88002670aeccde5adbad35e72f383ed180000000000000000000000008c9fa9e231856b89d271933e046447246a3ca7c600000000000000000000000028aee5f009a1413d9db29e5202ca25ebb26daf4e0000000000000000000000000684add5141f6b8d3de1179671d8dfea00b95449000000000000000000000000cc2c6d82e00e14f81ffc8e4f6a26c4522ada5a340000000000000000000000006c492bfe6117610042ef50b6d4a6d92803e82c0e000000000000000000000000899d89d7a96a1b45d60600343dcc1ec1120e42f90000000000000000000000003c87e00da8551c73032496aa60d9bd980510cbaf0000000000000000000000006c7655a0557a43348aecd75ceae12c46cd14da35000000000000000000000000040f655c0e7060d8fa9a9152301252d2e63f4f190000000000000000000000001237819df68e9808dd65d66470b6a0e5a09f125e000000000000000000000000f6d9e0a7c16c6c38e771cfd149eed85dfbe613010000000000000000000000009af2da23860914f3209e7813a3e41b5c4e12bd1a0000000000000000000000001357aeb37a7231d738ee71442290ac61a8639cc20000000000000000000000008cb38dd8b59119974804f888e373c1e8a41e671b000000000000000000000000c6ee5b29e22c6ad95041e316081689b47052dfe4000000000000000000000000505ad51cc7a26acf2123b0bde1e5fe6a315b3f3100000000000000000000000046601d5e5167c124b4d23ecdfdc79f82a3f5c7bd000000000000000000000000018a3833ccc9d365195441c32e2202f2cc9e5f16000000000000000000000000326d442be95eec5af140301631a47de7cb52c1ea00000000000000000000000031088e286046e6b2bfc436656733cb29c347bfbb000000000000000000000000674bdd830b885edf2d744cc5d167abbcb494c4c30000000000000000000000000e8b04494898be2e95f0f567ebd727bbb4acfd3f000000000000000000000000f5d0a18720692c1f9d7b8e5fcae49aca155253cf000000000000000000000000971c6b1323fbb695a57ee6694bdc2674f597b46b000000000000000000000000a081f72ef209c55420033e5e50fcff7d929e317000000000000000000000000023f0a89cfb61799e85a45172359f9be320a49b22000000000000000000000000e86b195406deb3a226696fe07d427d39ca132faf00000000000000000000000042c8680edd9575dc7c237c8ddea2b0b62a93828f00000000000000000000000019cb2bc841c97fc31cc6d6fc8df58d774519e539000000000000000000000000ac84c832617209fdc894d767371f3002cdaf8f8a00000000000000000000000088d065bf93df032c342a64cdaf84ef629f3b0277000000000000000000000000a806064443e243683852889193e1679e7faea29b0000000000000000000000000df70e1463f108e71bfc1b6d26e2de5613537a95000000000000000000000000483ae5758563afad072b92f1b935adf513ad0506000000000000000000000000007f30ff2e8bcae0b455d3b4ec92ab8add67feaf0000000000000000000000000b19cbee3c4dceff21946f0b18ac0ed2709d6fb500000000000000000000000073e8de3f2f913ecbdec97524430746acf65578a2000000000000000000000000aaeb6ca7fdf98c1284592749e9161a3c885f59bd0000000000000000000000000d4ddea3849c54e16c85cb4354943dc876e05552000000000000000000000000a40a9f6620b144135764b9922f73005f2f103b170000000000000000000000003926f74bbaa0f0a2bbaa664ac01ecd6a4534be0500000000000000000000000000326e37cef76788f6b0cf643c94481d60bd3d5800000000000000000000000084a2c92a77106ece8f1b03ee7b88c71babffb453000000000000000000000000279a8aedcca46f435b7aec6c6240421042462eec000000000000000000000000d61c606cf0ca54554cc86ee41ed895aa109ab038000000000000000000000000ef59c1500e3299dcec6af5fe39b01674318425da000000000000000000000000f6340ae60be2430c873703e57112482c3237f655000000000000000000000000ad5471c3b31d174cb4dad3b7d048b7fbe347d7b1000000000000000000000000b0325dbe7fa891436e83a094f9f12848c78e449b000000000000000000000000bc8d9fd142eb75fbf93b395723893af9c9f8580f000000000000000000000000b7376a7f8cacaaa994ccb8f78c542782cbadd89e0000000000000000000000002da8273c586c9488096a0a7f117efe95f9905ed7000000000000000000000000c11f1010c6b75cda68776528a94618579ef21c12000000000000000000000000ff1489a5c9c86eb00adfbd8ef67f84f6c01c6246000000000000000000000000f1c1cdf8a84a5e042eb2213623adaec37fe21eb600000000000000000000000068a37c633c22464917fd0d50532be0811617123b0000000000000000000000001464d46abd192baec1d4cb7b60415b02d346dfde0000000000000000000000005cb1d4b99f972ccdeccefcfec638d72f9629b5d0000000000000000000000000225c4cfc17d5ee7bf3e682396b12c0f6a7709d7d000000000000000000000000fb38d870055bed6f98a7994bb9d29714a0e3558400000000000000000000000062a94a3bf2dfc247f5dc861387336eb17a2e1141000000000000000000000000d3ac70f86a4dd8051876e847e1059eb6eb5586ed0000000000000000000000002a2bb3320614955fc1f6da98e3572c6bf9d9d1c9000000000000000000000000a4dd0533008e17b65b55c916d947a937783b57b1000000000000000000000000738a9aa93974c7f82d97adfbe2bc80046b347b1100000000000000000000000084740f97aea62c5dc36756dfd9f749412534220e000000000000000000000000a834e439a41f1f72ac2af9edb8ad825d9830e2c00000000000000000000000009694c964e2ce3624ff4d1f91e8d1f177c18dac6f000000000000000000000000695f498407f96c0185709acafa01c3a00771c896000000000000000000000000170c5cadb50dc163db0dd786c96d7ecb5e24a379000000000000000000000000f3e3793fda3c8f836f3a6d778c23cb5c04d1909a000000000000000000000000691118f93b549cbb3678bfe7c957546cbfc594de0000000000000000000000002a8763577f8ab360bade50ab326b9d18d1d509d0000000000000000000000000d61aae0a148ec5e6005143734f9841ebdcbb2f1b000000000000000000000000b6d52aa63532a0d1c50b3bb782e6b511bd9736450000000000000000000000007ac8481402ee760d46201ebab4b44388d1834a4d0000000000000000000000008517d50cdd95aba21b94968a98d526b743174497000000000000000000000000edfbe70e9c10b23b955988df06488b8dfd543ddd0000000000000000000000003e1d23be803c31d2c44efe84fb96659d12c49fd50000000000000000000000005e0a086b8ea7bd6ac3098b61005ae55b1381154a000000000000000000000000d4b6ca3f34fdf880646247c8ca1b458c3d295422000000000000000000000000c16ab72a9dce2e458f5d33211f1c6844dbb2ce4e000000000000000000000000481e012260715b57e162bad30423ab639781421a000000000000000000000000dcd38bc4f5aef76a1e1b12b1774410a6e175c44e000000000000000000000000331c12bbe5111763cfe5cdc6f93876b206adf99b000000000000000000000000f3b1b6e83be4d55695f1d30ac3d307d9d5ca98ff0000000000000000000000000a1908b732884449b819e146f257fb6018d00ab100000000000000000000000043732b04bf1b2a42c9925f5c1d9f3535c6ea82ed000000000000000000000000e921906a819eaec8df8d1ea395bed1add27605f600000000000000000000000012e3567224bf39a567b00197b208423998a24da30000000000000000000000004295f78bba333352965b5ed08dc5b4c6833baf7d000000000000000000000000f190463c5e63f68995e1d1e06b22f16b90172ea9000000000000000000000000fcac0c65c2e9ec6c4f5c05d6e5c6e06b5c0261ca0000000000000000000000001df2bca072b7bf8a214ff9e6ee5bca9d60098974000000000000000000000000f519c842210abb71c6ed4cc26d3aabee9853beff000000000000000000000000a7bb2a00f6a23fbc89c34eec95ddb071683af92700000000000000000000000014e9e9f0a8d9bac4cad8c1ce339826f42924e5420000000000000000000000000b858e239ccf09d4411703b383db9f7c737cb082000000000000000000000000737d3c588da96328c20327bc5d04e6beb73b453d000000000000000000000000779e9717c7040eca7ce5a4749cf960c0441aa1510000000000000000000000006a69c12128493446ab782d9276c27fb511395a6e0000000000000000000000006c3e8b4dc0ccaa9a3ae535465b0893e3b029bb00000000000000000000000000866d9eb467b5ebd8c6464cceccc367d95ccfd31c000000000000000000000000658357017948986a7ee7c714fa37138b7fe1317d000000000000000000000000b4dc010733ea4f3b42f71244c4b2357129d971c80000000000000000000000007f18176ef0bc3beda3246e0153e76b4b4786037d000000000000000000000000d800fc90efa8532c77ed14102f8280e904c965980000000000000000000000001e70710718e6df8a486dff4ce6c8cb4487b4fc300000000000000000000000009b733a14c4acb7e255f1af4b268ad9b330e8b8f4000000000000000000000000f9342660f2ba86270c6854c7f59773a20a8f5def00000000000000000000000088fb3d509fc49b515bfeb04e23f53ba3395639810000000000000000000000009516c6ac7bc8be957148f94f894973028378b36c00000000000000000000000089ab8578326ff2e0dc5a2c0617f74ccb41532e410000000000000000000000006fc868df4b7328eb54f92b5993f45cf732842679000000000000000000000000867db38c83f4287a71ffd0cdfba6ffae93150ff7000000000000000000000000de7a82fe90eab3f5235552f2137402a69d53fb9400000000000000000000000031de3ad9fbfaeb90348d5cb8a101fbb68f28ceff000000000000000000000000f800b41ea9db0dff446d2a25cc8ff7ae0164281800000000000000000000000097116fc08e002e79736f641efb164114942c0732000000000000000000000000554976402a8aa7020814602c49f8a6e3bea2a78300000000000000000000000004a15d06c0c420a4e568cc40ccd80f71f6df69f0000000000000000000000000975b77dbc27a0eed46b44a09323af252f27158f80000000000000000000000008e1f13a08012f34dc8750ee34b78e90b5616f19400000000000000000000000040a9066ebb98950ff64481cc8d1bcf5fd0c28737000000000000000000000000fb17199bb361daed5b8df4e0d263f2f6cb990c500000000000000000000000003b0e6b8e5f72df429e58c0885806f2da874aa1de000000000000000000000000424182a114b5bd42638791b6a6f11fc1d6027e030000000000000000000000007111cbd16ae9ecc1910bb478c73cd988182177340000000000000000000000004edc18e8739233c870bd056c33256a99083bfecb00000000000000000000000052e1e58db9151d8a0f1dcd8cb3b00948df114b8e0000000000000000000000006a52f086844cd1a19f538de2dc8f84a886e313a800000000000000000000000061751bc401f4eabe10a238661b4a60ba84910059000000000000000000000000be7ae9e43d4373bce5b2d9195bbe31f6a7a0db6f000000000000000000000000052684c9ff39bbf50e8eff902fdff1adc64145f5000000000000000000000000c939e0238be5182f3a1c1db5f53fa38178e360f00000000000000000000000002569448fef8b66f86fae809cdce53b5151b3d0c5000000000000000000000000c20d543f892dbb1900255f2e42167a0b49ad0543000000000000000000000000c71a8ff766b5ea918c33df155a9f77b949fa7c2d00000000000000000000000066fe8f934b0ad44d6234d896fe4dbbf25a9294a100000000000000000000000010ff2d60924eb9e759904a4c960766dbac212ebd0000000000000000000000000d9626b3a4f6eefc91f7ae1e2ead163701aaae3c000000000000000000000000d560e115d8a55f24448c5887b5c05a6c4ab44753000000000000000000000000e854f8b14262f64e10dab03f9ba5fc37c8eb2a72000000000000000000000000474d4cfc8c28b5d902abbf8efb24743291220090000000000000000000000000cde638127345ba1b50810f4e499f3b9c1edecbd6000000000000000000000000c5ad46f49645aee062e0639b860b2919f8f2fe10000000000000000000000000fbe24b3b2dbff7a48d77b146623dfc621309f4cc0000000000000000000000004bf24d2ccdb772f344ad0eec6d3716e5ef5a84b7000000000000000000000000e58b8eb30fe6e5cef1825b98cf533b17408da8bd000000000000000000000000a16252eb09608b91c4c6fcdc1fc19809c5c55c350000000000000000000000002c4723e2f00a0bcf229553c466630bcda04bbe41000000000000000000000000f11ffaf3dd2c39df6f2ad661d5ffe60daa0fc9fd000000000000000000000000d3cd153156e97638b7fe71a8dd4a9a5c3a59a0200000000000000000000000007fb2eb7bcd35c48248789884ae803095fb3e93380000000000000000000000006cc52e11cf88c0b2dddec1e5e7cfe9c5913b4d09000000000000000000000000375afe51c5d9313ff20504aa3094844400be34090000000000000000000000004916efbf56bcaea1130b2a631f6f093095f614a20000000000000000000000001fabdc9da117d1392aab80c69ec141e4d579341c0000000000000000000000006be2e15d6749f3bf984e7ae3efce46a4d6292f540000000000000000000000009fb753be58cf3354fc4684b0d59aba4edf1a90a9000000000000000000000000ace1ae1a4db3adec22b3e1173afe852a5a6fe40a000000000000000000000000d6a5ade2b16ac1d72a1e2833b573ccda6fedece50000000000000000000000002cb490343ae7166357180ac75a9958f9c1c267b0000000000000000000000000b4ab322fb2af74d84be16c70adc5402f402c9af500000000000000000000000058fa2617627a677bd29d5ab11880d066111b8d0e

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x38e4adB44ef08F22F5B5b76A8f0c2d0dCbE7DcA1
Arg [1] : _startV (uint256): 10966820
Arg [2] : _durationV (uint256): 2372500
Arg [3] : _startT (uint256): 12465437
Arg [4] : _durationT (uint256): 3555500
Arg [5] : _memberList (address[]): 0x1Bf8567543Fa87C5107b690452dBF3f754654a2E,0x0c7141667Eb3EBC0F742784d58833b4AeC1FbA22,0x4E080Cd5eAe0Eb7aC45cB20137e73eBd8335281A,0xC00F898f3794e38Cb35d7c16C051b229c5F8A849,0x9969658C7E29ffaB87516f128Bee4165f8dc1561,0x01d76cD388fC76D8aDC9235317D7f5EA23268E16,0x009170c4a4b300b3b0606eEafE3fB25Ae3938FB5,0x17038c92006857ccF1514Bd51d067ec019f22E74,0x906D06191c3ad2722ca74675588f1885DF9e690B,0x1bBE9fE79D6d660EA108a2dA3d4E89E58477A8D6,0xAA7A9d80971E58641442774C373C94AaFee87d66,0x06D85218d0bF4F7Be9515f7af1B597B84ad21c2b,0x725F87a90deff5e0BFdbD0c3cd9178a4563Ab0cf,0x8C03A859BE9b4a5a2E54c1AB9C6b1dD79E8Aa3d9,0xC207341DA41386BDB23552c9693Db0A1c7c5C43a,0xb6c6230Ff314f0B870Cd4A05F107221c222E5997,0xCaaEF1dd3c71f2ad1616C42946d88d9afE12C86B,0x5636f2f5bC07adB7104f929B4C8BB45acB5DD9F9,0x2E8f0Ca8a7F50c5E4FeD15beb621f4ab396FAA69,0xA0995532092514913E5a4dDc0f588cf031D2cc72,0xE43e081b55B7520954564818C65798b66d6af3c8,0x25112ED9705Dd13d99DBdb0F79b89FdfF308584f,0x119d18911944f5B1b610fe00537D40d120802955,0xDF4B2550185d8Cb0e9825Ae7acA99A1aD3ad10eA,0xc2aF82D35AD66A9B4E8Bd574C03aE087AF0b2314,0x1bCcbCDA9b4D9A1a98b4c280116dD6A437f51f92,0x56F5c0F88002670AEcCde5AdbaD35e72F383ed18,0x8C9fA9e231856B89D271933e046447246A3Ca7c6,0x28AEE5F009a1413d9db29e5202CA25ebB26daF4e,0x0684aDD5141F6b8d3de1179671D8DfEA00b95449,0xcc2c6D82e00E14f81FFc8e4F6A26c4522adA5a34,0x6C492bFe6117610042ef50b6d4A6D92803E82c0E,0x899d89D7A96a1B45d60600343Dcc1ec1120e42F9,0x3c87E00da8551C73032496Aa60D9BD980510CBAF,0x6C7655a0557a43348aecd75ceaE12C46cD14da35,0x040f655C0e7060d8FA9A9152301252D2e63F4F19,0x1237819df68E9808dd65d66470B6A0E5a09f125e,0xf6d9E0A7C16C6c38E771cFd149EED85dFBe61301,0x9af2DA23860914f3209e7813A3E41B5c4E12bd1A,0x1357AeB37a7231D738Ee71442290AC61A8639cC2,0x8Cb38dD8B59119974804F888e373C1E8A41E671b,0xc6eE5B29e22c6aD95041E316081689B47052DFE4,0x505Ad51CC7a26Acf2123B0BdE1E5Fe6a315b3f31,0x46601D5E5167C124b4d23ecDFDC79F82a3F5C7bd,0x018A3833CCC9d365195441C32e2202f2CC9e5F16,0x326D442bE95eec5af140301631A47DE7cB52C1ea,0x31088e286046E6B2bfc436656733CB29C347BFbB,0x674BDd830B885Edf2d744cC5D167AbBCB494C4c3,0x0E8B04494898bE2e95F0f567Ebd727BbB4acFD3F,0xf5d0A18720692C1f9D7B8E5FCaE49Aca155253cf,0x971C6b1323FBB695A57EE6694bdC2674f597b46b,0xa081F72eF209c55420033E5e50FcFf7D929e3170,0x23f0A89CfB61799e85a45172359F9bE320A49b22,0xE86b195406DeB3A226696FE07D427d39CA132faf,0x42C8680EdD9575DC7c237C8dDeA2b0b62A93828f,0x19cb2BC841c97fC31cC6d6FC8DF58D774519E539,0xac84C832617209FDC894d767371f3002cDaF8F8A,0x88d065BF93df032C342a64CDaF84eF629F3B0277,0xa806064443E243683852889193E1679E7FAEA29b,0x0df70e1463F108e71bFc1B6D26E2dE5613537A95,0x483AE5758563AfAd072b92F1B935aDF513Ad0506,0x007f30fF2E8BCae0B455D3B4Ec92AB8AdD67fEaf,0x0B19CBEe3C4DCeff21946f0B18Ac0Ed2709D6FB5,0x73e8De3f2f913EcbdeC97524430746Acf65578a2,0xaAEB6cA7FDf98c1284592749E9161a3c885F59Bd,0x0d4DDeA3849C54E16C85cB4354943dC876e05552,0xA40a9f6620b144135764b9922F73005f2F103b17,0x3926F74bBaA0F0a2bBAA664AC01Ecd6A4534BE05,0x00326E37CEf76788F6b0cF643c94481D60BD3D58,0x84A2C92a77106EcE8F1B03ee7B88C71bABfFB453,0x279A8AEdCCA46f435B7aEC6c6240421042462EEC,0xD61C606CF0ca54554cC86eE41ED895AA109aB038,0xeF59c1500e3299dcEc6Af5Fe39b01674318425dA,0xF6340aE60BE2430C873703E57112482C3237F655,0xAd5471C3B31D174cb4DaD3b7d048B7fbE347D7B1,0xb0325DbE7fA891436E83A094f9F12848c78e449b,0xbC8d9fD142Eb75Fbf93B395723893Af9C9f8580F,0xB7376A7f8cacaaA994Ccb8f78C542782CbaDD89E,0x2Da8273C586c9488096A0a7f117EfE95f9905eD7,0xC11f1010C6b75Cda68776528A94618579eF21C12,0xfF1489A5c9C86eb00AdFBd8Ef67f84F6C01C6246,0xf1c1cDF8a84A5e042eb2213623ADaEc37FE21EB6,0x68a37C633C22464917fd0d50532Be0811617123b,0x1464d46aBD192baeC1D4CB7B60415B02d346DFde,0x5cb1D4B99F972cCdecCEFcfeC638d72f9629B5d0,0x225c4cfc17d5ee7BF3E682396B12C0F6A7709d7d,0xfB38d870055bED6F98A7994Bb9d29714A0E35584,0x62A94a3bF2dFC247f5dc861387336Eb17A2E1141,0xD3Ac70f86A4dd8051876e847e1059EB6eb5586ed,0x2a2bB3320614955Fc1F6da98E3572c6BF9d9D1C9,0xa4dD0533008e17b65b55C916d947A937783B57b1,0x738a9AA93974C7f82D97adfBe2BC80046b347B11,0x84740F97Aea62C5dC36756DFD9F749412534220E,0xa834e439A41f1F72AC2af9EDb8aD825D9830e2c0,0x9694c964e2cE3624FF4d1f91E8D1f177c18daC6f,0x695F498407f96c0185709AcAFa01C3A00771C896,0x170c5cADb50dc163db0DD786C96D7ecb5E24a379,0xF3e3793fDA3c8f836f3A6D778c23cb5c04d1909A,0x691118F93B549cBB3678bfE7C957546CBFC594DE,0x2a8763577F8ab360bade50Ab326B9d18d1D509d0,0xd61AaE0a148Ec5E6005143734f9841EBDcbB2f1b,0xb6d52aA63532A0d1c50B3Bb782e6B511bd973645,0x7Ac8481402EE760D46201EBAb4B44388D1834a4d,0x8517D50Cdd95abA21B94968A98d526B743174497,0xedFbe70e9C10B23b955988df06488B8DFd543Ddd,0x3e1D23BE803C31D2c44EFe84fB96659D12C49fD5,0x5E0A086B8eA7Bd6aC3098B61005aE55b1381154a,0xD4B6Ca3F34fDF880646247C8Ca1b458C3D295422,0xC16AB72a9dce2E458F5d33211f1C6844DBb2CE4e,0x481e012260715b57e162bad30423ab639781421a,0xDcd38bC4f5aEf76a1E1b12B1774410A6E175c44e,0x331c12bBe5111763CFe5CDC6F93876B206AdF99B,0xf3B1B6e83Be4d55695f1D30ac3D307D9D5CA98ff,0x0a1908B732884449b819e146F257fB6018d00Ab1,0x43732b04Bf1B2A42c9925F5C1d9f3535c6EA82eD,0xe921906A819Eaec8DF8d1EA395BeD1Add27605F6,0x12e3567224BF39A567B00197b208423998a24DA3,0x4295F78bba333352965B5ed08DC5b4c6833bAF7d,0xf190463c5e63F68995e1D1E06B22F16B90172EA9,0xfcac0c65C2E9eC6C4f5c05d6E5C6e06B5c0261ca,0x1df2bcA072B7bF8A214fF9e6ee5Bca9D60098974,0xf519C842210Abb71c6ED4Cc26d3aAbee9853befF,0xA7bb2A00F6A23FBc89c34eEC95DDB071683af927,0x14e9e9F0A8D9bAc4CaD8c1CE339826f42924E542,0x0B858E239CCF09D4411703b383DB9f7c737cb082,0x737d3c588DA96328C20327BC5D04e6BeB73B453d,0x779e9717C7040ECa7CE5a4749cF960c0441Aa151,0x6a69C12128493446AB782d9276c27FB511395a6e,0x6C3E8b4Dc0cCaA9a3Ae535465b0893E3B029bb00,0x866D9eB467b5ebd8c6464cCEcCC367d95CcfD31c,0x658357017948986A7Ee7c714fa37138B7Fe1317d,0xB4dC010733Ea4F3B42F71244C4B2357129d971C8,0x7f18176EF0bc3BEdA3246e0153E76b4B4786037D,0xd800FC90eFA8532c77eD14102F8280E904c96598,0x1e70710718e6dF8a486dFF4ce6C8CB4487B4fC30,0x9b733A14C4Acb7e255f1aF4b268AD9B330E8B8f4,0xF9342660f2ba86270C6854c7f59773A20A8F5dEF,0x88FB3D509fC49B515BFEb04e23f53ba339563981,0x9516c6ac7Bc8BE957148f94F894973028378b36C,0x89Ab8578326fF2E0dc5a2C0617F74cCB41532e41,0x6fc868DF4B7328Eb54F92B5993f45cF732842679,0x867db38C83F4287A71ffd0Cdfba6fFAE93150Ff7,0xdE7a82Fe90EaB3F5235552F2137402a69d53FB94,0x31de3aD9fbfAeb90348d5cb8a101FBB68f28cEfF,0xF800B41ea9Db0DFf446D2a25cc8Ff7AE01642818,0x97116fC08e002e79736f641Efb164114942c0732,0x554976402a8aa7020814602C49F8A6e3bea2A783,0x04a15d06C0c420A4e568Cc40cCd80F71f6df69F0,0x975B77DBc27a0eed46b44a09323AF252f27158F8,0x8e1f13A08012F34dc8750eE34B78e90B5616f194,0x40a9066eBB98950fF64481cc8d1bCF5Fd0C28737,0xfb17199BB361dAED5B8dF4E0d263f2f6CB990C50,0x3b0e6b8E5f72df429E58C0885806F2dA874AA1De,0x424182a114B5bd42638791B6a6f11Fc1D6027e03,0x7111cBd16AE9ECc1910BB478c73cD98818217734,0x4eDc18E8739233c870bD056C33256a99083bFEcB,0x52e1e58DB9151d8A0f1dCd8Cb3b00948df114b8E,0x6a52F086844cD1a19F538de2dC8f84a886e313a8,0x61751BC401f4EABe10A238661B4A60ba84910059,0xbE7aE9e43d4373BCe5b2d9195bbe31f6A7a0DB6f,0x052684C9ff39BBf50e8EFF902fdFF1aDC64145f5,0xc939e0238be5182F3A1C1DB5f53fa38178e360f0,0x2569448fEf8B66f86FaE809cDCE53B5151b3d0C5,0xc20D543F892dbb1900255f2e42167A0B49ad0543,0xc71A8Ff766B5Ea918c33dF155a9f77b949fA7C2d,0x66Fe8F934b0ad44d6234d896fE4dBbF25a9294a1,0x10fF2D60924Eb9E759904A4C960766DbAC212eBd,0x0D9626b3a4F6EEfC91f7ae1E2EAd163701AAae3C,0xd560E115D8a55f24448C5887B5C05A6c4AB44753,0xe854F8b14262f64E10dab03f9BA5fc37C8Eb2a72,0x474d4cfC8c28B5D902ABbF8EFb24743291220090,0xCde638127345ba1B50810f4e499F3b9c1EdEcBd6,0xC5AD46F49645Aee062e0639b860B2919F8F2fE10,0xfBe24b3b2DBFf7A48d77b146623DFc621309f4cC,0x4bf24d2ccdB772f344ad0EEc6d3716e5EF5A84B7,0xE58B8eb30FE6e5CEF1825b98CF533b17408DA8bD,0xA16252eB09608b91C4c6fCDc1fC19809c5c55C35,0x2c4723E2f00a0BcF229553c466630BcDA04BBE41,0xf11Ffaf3dD2c39dF6f2ad661D5FFE60daa0fC9Fd,0xD3Cd153156E97638b7Fe71a8dd4A9a5c3a59A020,0x7fB2eb7BCD35c48248789884AE803095fB3e9338,0x6Cc52e11cF88C0b2DDDec1E5E7cFe9c5913b4d09,0x375Afe51C5d9313FF20504aa3094844400be3409,0x4916EFbF56BCAeA1130b2a631f6f093095f614a2,0x1fAbDC9da117d1392Aab80c69eC141e4D579341C,0x6be2e15D6749f3BF984E7aE3efCe46A4d6292F54,0x9fB753bE58cf3354Fc4684b0D59aba4edf1A90A9,0xACE1ae1a4dB3adEc22B3e1173aFe852a5A6fe40a,0xd6A5adE2b16AC1d72A1E2833b573cCda6FedecE5,0x2Cb490343aE7166357180AC75A9958f9C1c267B0,0xB4Ab322Fb2aF74D84BE16C70adC5402F402C9AF5,0x58FA2617627a677Bd29d5ab11880D066111B8d0e
Arg [6] : _amountPerMember (uint96): 50000000000000000000000

-----Encoded View---------------
200 Constructor Arguments found :
Arg [0] : 00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca1
Arg [1] : 0000000000000000000000000000000000000000000000000000000000a75724
Arg [2] : 0000000000000000000000000000000000000000000000000000000000243394
Arg [3] : 0000000000000000000000000000000000000000000000000000000000be351d
Arg [4] : 00000000000000000000000000000000000000000000000000000000003640ac
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [6] : 000000000000000000000000000000000000000000000a968163f0a57b400000
Arg [7] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [8] : 0000000000000000000000001bf8567543fa87c5107b690452dbf3f754654a2e
Arg [9] : 0000000000000000000000000c7141667eb3ebc0f742784d58833b4aec1fba22
Arg [10] : 0000000000000000000000004e080cd5eae0eb7ac45cb20137e73ebd8335281a
Arg [11] : 000000000000000000000000c00f898f3794e38cb35d7c16c051b229c5f8a849
Arg [12] : 0000000000000000000000009969658c7e29ffab87516f128bee4165f8dc1561
Arg [13] : 00000000000000000000000001d76cd388fc76d8adc9235317d7f5ea23268e16
Arg [14] : 000000000000000000000000009170c4a4b300b3b0606eeafe3fb25ae3938fb5
Arg [15] : 00000000000000000000000017038c92006857ccf1514bd51d067ec019f22e74
Arg [16] : 000000000000000000000000906d06191c3ad2722ca74675588f1885df9e690b
Arg [17] : 0000000000000000000000001bbe9fe79d6d660ea108a2da3d4e89e58477a8d6
Arg [18] : 000000000000000000000000aa7a9d80971e58641442774c373c94aafee87d66
Arg [19] : 00000000000000000000000006d85218d0bf4f7be9515f7af1b597b84ad21c2b
Arg [20] : 000000000000000000000000725f87a90deff5e0bfdbd0c3cd9178a4563ab0cf
Arg [21] : 0000000000000000000000008c03a859be9b4a5a2e54c1ab9c6b1dd79e8aa3d9
Arg [22] : 000000000000000000000000c207341da41386bdb23552c9693db0a1c7c5c43a
Arg [23] : 000000000000000000000000b6c6230ff314f0b870cd4a05f107221c222e5997
Arg [24] : 000000000000000000000000caaef1dd3c71f2ad1616c42946d88d9afe12c86b
Arg [25] : 0000000000000000000000005636f2f5bc07adb7104f929b4c8bb45acb5dd9f9
Arg [26] : 0000000000000000000000002e8f0ca8a7f50c5e4fed15beb621f4ab396faa69
Arg [27] : 000000000000000000000000a0995532092514913e5a4ddc0f588cf031d2cc72
Arg [28] : 000000000000000000000000e43e081b55b7520954564818c65798b66d6af3c8
Arg [29] : 00000000000000000000000025112ed9705dd13d99dbdb0f79b89fdff308584f
Arg [30] : 000000000000000000000000119d18911944f5b1b610fe00537d40d120802955
Arg [31] : 000000000000000000000000df4b2550185d8cb0e9825ae7aca99a1ad3ad10ea
Arg [32] : 000000000000000000000000c2af82d35ad66a9b4e8bd574c03ae087af0b2314
Arg [33] : 0000000000000000000000001bccbcda9b4d9a1a98b4c280116dd6a437f51f92
Arg [34] : 00000000000000000000000056f5c0f88002670aeccde5adbad35e72f383ed18
Arg [35] : 0000000000000000000000008c9fa9e231856b89d271933e046447246a3ca7c6
Arg [36] : 00000000000000000000000028aee5f009a1413d9db29e5202ca25ebb26daf4e
Arg [37] : 0000000000000000000000000684add5141f6b8d3de1179671d8dfea00b95449
Arg [38] : 000000000000000000000000cc2c6d82e00e14f81ffc8e4f6a26c4522ada5a34
Arg [39] : 0000000000000000000000006c492bfe6117610042ef50b6d4a6d92803e82c0e
Arg [40] : 000000000000000000000000899d89d7a96a1b45d60600343dcc1ec1120e42f9
Arg [41] : 0000000000000000000000003c87e00da8551c73032496aa60d9bd980510cbaf
Arg [42] : 0000000000000000000000006c7655a0557a43348aecd75ceae12c46cd14da35
Arg [43] : 000000000000000000000000040f655c0e7060d8fa9a9152301252d2e63f4f19
Arg [44] : 0000000000000000000000001237819df68e9808dd65d66470b6a0e5a09f125e
Arg [45] : 000000000000000000000000f6d9e0a7c16c6c38e771cfd149eed85dfbe61301
Arg [46] : 0000000000000000000000009af2da23860914f3209e7813a3e41b5c4e12bd1a
Arg [47] : 0000000000000000000000001357aeb37a7231d738ee71442290ac61a8639cc2
Arg [48] : 0000000000000000000000008cb38dd8b59119974804f888e373c1e8a41e671b
Arg [49] : 000000000000000000000000c6ee5b29e22c6ad95041e316081689b47052dfe4
Arg [50] : 000000000000000000000000505ad51cc7a26acf2123b0bde1e5fe6a315b3f31
Arg [51] : 00000000000000000000000046601d5e5167c124b4d23ecdfdc79f82a3f5c7bd
Arg [52] : 000000000000000000000000018a3833ccc9d365195441c32e2202f2cc9e5f16
Arg [53] : 000000000000000000000000326d442be95eec5af140301631a47de7cb52c1ea
Arg [54] : 00000000000000000000000031088e286046e6b2bfc436656733cb29c347bfbb
Arg [55] : 000000000000000000000000674bdd830b885edf2d744cc5d167abbcb494c4c3
Arg [56] : 0000000000000000000000000e8b04494898be2e95f0f567ebd727bbb4acfd3f
Arg [57] : 000000000000000000000000f5d0a18720692c1f9d7b8e5fcae49aca155253cf
Arg [58] : 000000000000000000000000971c6b1323fbb695a57ee6694bdc2674f597b46b
Arg [59] : 000000000000000000000000a081f72ef209c55420033e5e50fcff7d929e3170
Arg [60] : 00000000000000000000000023f0a89cfb61799e85a45172359f9be320a49b22
Arg [61] : 000000000000000000000000e86b195406deb3a226696fe07d427d39ca132faf
Arg [62] : 00000000000000000000000042c8680edd9575dc7c237c8ddea2b0b62a93828f
Arg [63] : 00000000000000000000000019cb2bc841c97fc31cc6d6fc8df58d774519e539
Arg [64] : 000000000000000000000000ac84c832617209fdc894d767371f3002cdaf8f8a
Arg [65] : 00000000000000000000000088d065bf93df032c342a64cdaf84ef629f3b0277
Arg [66] : 000000000000000000000000a806064443e243683852889193e1679e7faea29b
Arg [67] : 0000000000000000000000000df70e1463f108e71bfc1b6d26e2de5613537a95
Arg [68] : 000000000000000000000000483ae5758563afad072b92f1b935adf513ad0506
Arg [69] : 000000000000000000000000007f30ff2e8bcae0b455d3b4ec92ab8add67feaf
Arg [70] : 0000000000000000000000000b19cbee3c4dceff21946f0b18ac0ed2709d6fb5
Arg [71] : 00000000000000000000000073e8de3f2f913ecbdec97524430746acf65578a2
Arg [72] : 000000000000000000000000aaeb6ca7fdf98c1284592749e9161a3c885f59bd
Arg [73] : 0000000000000000000000000d4ddea3849c54e16c85cb4354943dc876e05552
Arg [74] : 000000000000000000000000a40a9f6620b144135764b9922f73005f2f103b17
Arg [75] : 0000000000000000000000003926f74bbaa0f0a2bbaa664ac01ecd6a4534be05
Arg [76] : 00000000000000000000000000326e37cef76788f6b0cf643c94481d60bd3d58
Arg [77] : 00000000000000000000000084a2c92a77106ece8f1b03ee7b88c71babffb453
Arg [78] : 000000000000000000000000279a8aedcca46f435b7aec6c6240421042462eec
Arg [79] : 000000000000000000000000d61c606cf0ca54554cc86ee41ed895aa109ab038
Arg [80] : 000000000000000000000000ef59c1500e3299dcec6af5fe39b01674318425da
Arg [81] : 000000000000000000000000f6340ae60be2430c873703e57112482c3237f655
Arg [82] : 000000000000000000000000ad5471c3b31d174cb4dad3b7d048b7fbe347d7b1
Arg [83] : 000000000000000000000000b0325dbe7fa891436e83a094f9f12848c78e449b
Arg [84] : 000000000000000000000000bc8d9fd142eb75fbf93b395723893af9c9f8580f
Arg [85] : 000000000000000000000000b7376a7f8cacaaa994ccb8f78c542782cbadd89e
Arg [86] : 0000000000000000000000002da8273c586c9488096a0a7f117efe95f9905ed7
Arg [87] : 000000000000000000000000c11f1010c6b75cda68776528a94618579ef21c12
Arg [88] : 000000000000000000000000ff1489a5c9c86eb00adfbd8ef67f84f6c01c6246
Arg [89] : 000000000000000000000000f1c1cdf8a84a5e042eb2213623adaec37fe21eb6
Arg [90] : 00000000000000000000000068a37c633c22464917fd0d50532be0811617123b
Arg [91] : 0000000000000000000000001464d46abd192baec1d4cb7b60415b02d346dfde
Arg [92] : 0000000000000000000000005cb1d4b99f972ccdeccefcfec638d72f9629b5d0
Arg [93] : 000000000000000000000000225c4cfc17d5ee7bf3e682396b12c0f6a7709d7d
Arg [94] : 000000000000000000000000fb38d870055bed6f98a7994bb9d29714a0e35584
Arg [95] : 00000000000000000000000062a94a3bf2dfc247f5dc861387336eb17a2e1141
Arg [96] : 000000000000000000000000d3ac70f86a4dd8051876e847e1059eb6eb5586ed
Arg [97] : 0000000000000000000000002a2bb3320614955fc1f6da98e3572c6bf9d9d1c9
Arg [98] : 000000000000000000000000a4dd0533008e17b65b55c916d947a937783b57b1
Arg [99] : 000000000000000000000000738a9aa93974c7f82d97adfbe2bc80046b347b11
Arg [100] : 00000000000000000000000084740f97aea62c5dc36756dfd9f749412534220e
Arg [101] : 000000000000000000000000a834e439a41f1f72ac2af9edb8ad825d9830e2c0
Arg [102] : 0000000000000000000000009694c964e2ce3624ff4d1f91e8d1f177c18dac6f
Arg [103] : 000000000000000000000000695f498407f96c0185709acafa01c3a00771c896
Arg [104] : 000000000000000000000000170c5cadb50dc163db0dd786c96d7ecb5e24a379
Arg [105] : 000000000000000000000000f3e3793fda3c8f836f3a6d778c23cb5c04d1909a
Arg [106] : 000000000000000000000000691118f93b549cbb3678bfe7c957546cbfc594de
Arg [107] : 0000000000000000000000002a8763577f8ab360bade50ab326b9d18d1d509d0
Arg [108] : 000000000000000000000000d61aae0a148ec5e6005143734f9841ebdcbb2f1b
Arg [109] : 000000000000000000000000b6d52aa63532a0d1c50b3bb782e6b511bd973645
Arg [110] : 0000000000000000000000007ac8481402ee760d46201ebab4b44388d1834a4d
Arg [111] : 0000000000000000000000008517d50cdd95aba21b94968a98d526b743174497
Arg [112] : 000000000000000000000000edfbe70e9c10b23b955988df06488b8dfd543ddd
Arg [113] : 0000000000000000000000003e1d23be803c31d2c44efe84fb96659d12c49fd5
Arg [114] : 0000000000000000000000005e0a086b8ea7bd6ac3098b61005ae55b1381154a
Arg [115] : 000000000000000000000000d4b6ca3f34fdf880646247c8ca1b458c3d295422
Arg [116] : 000000000000000000000000c16ab72a9dce2e458f5d33211f1c6844dbb2ce4e
Arg [117] : 000000000000000000000000481e012260715b57e162bad30423ab639781421a
Arg [118] : 000000000000000000000000dcd38bc4f5aef76a1e1b12b1774410a6e175c44e
Arg [119] : 000000000000000000000000331c12bbe5111763cfe5cdc6f93876b206adf99b
Arg [120] : 000000000000000000000000f3b1b6e83be4d55695f1d30ac3d307d9d5ca98ff
Arg [121] : 0000000000000000000000000a1908b732884449b819e146f257fb6018d00ab1
Arg [122] : 00000000000000000000000043732b04bf1b2a42c9925f5c1d9f3535c6ea82ed
Arg [123] : 000000000000000000000000e921906a819eaec8df8d1ea395bed1add27605f6
Arg [124] : 00000000000000000000000012e3567224bf39a567b00197b208423998a24da3
Arg [125] : 0000000000000000000000004295f78bba333352965b5ed08dc5b4c6833baf7d
Arg [126] : 000000000000000000000000f190463c5e63f68995e1d1e06b22f16b90172ea9
Arg [127] : 000000000000000000000000fcac0c65c2e9ec6c4f5c05d6e5c6e06b5c0261ca
Arg [128] : 0000000000000000000000001df2bca072b7bf8a214ff9e6ee5bca9d60098974
Arg [129] : 000000000000000000000000f519c842210abb71c6ed4cc26d3aabee9853beff
Arg [130] : 000000000000000000000000a7bb2a00f6a23fbc89c34eec95ddb071683af927
Arg [131] : 00000000000000000000000014e9e9f0a8d9bac4cad8c1ce339826f42924e542
Arg [132] : 0000000000000000000000000b858e239ccf09d4411703b383db9f7c737cb082
Arg [133] : 000000000000000000000000737d3c588da96328c20327bc5d04e6beb73b453d
Arg [134] : 000000000000000000000000779e9717c7040eca7ce5a4749cf960c0441aa151
Arg [135] : 0000000000000000000000006a69c12128493446ab782d9276c27fb511395a6e
Arg [136] : 0000000000000000000000006c3e8b4dc0ccaa9a3ae535465b0893e3b029bb00
Arg [137] : 000000000000000000000000866d9eb467b5ebd8c6464cceccc367d95ccfd31c
Arg [138] : 000000000000000000000000658357017948986a7ee7c714fa37138b7fe1317d
Arg [139] : 000000000000000000000000b4dc010733ea4f3b42f71244c4b2357129d971c8
Arg [140] : 0000000000000000000000007f18176ef0bc3beda3246e0153e76b4b4786037d
Arg [141] : 000000000000000000000000d800fc90efa8532c77ed14102f8280e904c96598
Arg [142] : 0000000000000000000000001e70710718e6df8a486dff4ce6c8cb4487b4fc30
Arg [143] : 0000000000000000000000009b733a14c4acb7e255f1af4b268ad9b330e8b8f4
Arg [144] : 000000000000000000000000f9342660f2ba86270c6854c7f59773a20a8f5def
Arg [145] : 00000000000000000000000088fb3d509fc49b515bfeb04e23f53ba339563981
Arg [146] : 0000000000000000000000009516c6ac7bc8be957148f94f894973028378b36c
Arg [147] : 00000000000000000000000089ab8578326ff2e0dc5a2c0617f74ccb41532e41
Arg [148] : 0000000000000000000000006fc868df4b7328eb54f92b5993f45cf732842679
Arg [149] : 000000000000000000000000867db38c83f4287a71ffd0cdfba6ffae93150ff7
Arg [150] : 000000000000000000000000de7a82fe90eab3f5235552f2137402a69d53fb94
Arg [151] : 00000000000000000000000031de3ad9fbfaeb90348d5cb8a101fbb68f28ceff
Arg [152] : 000000000000000000000000f800b41ea9db0dff446d2a25cc8ff7ae01642818
Arg [153] : 00000000000000000000000097116fc08e002e79736f641efb164114942c0732
Arg [154] : 000000000000000000000000554976402a8aa7020814602c49f8a6e3bea2a783
Arg [155] : 00000000000000000000000004a15d06c0c420a4e568cc40ccd80f71f6df69f0
Arg [156] : 000000000000000000000000975b77dbc27a0eed46b44a09323af252f27158f8
Arg [157] : 0000000000000000000000008e1f13a08012f34dc8750ee34b78e90b5616f194
Arg [158] : 00000000000000000000000040a9066ebb98950ff64481cc8d1bcf5fd0c28737
Arg [159] : 000000000000000000000000fb17199bb361daed5b8df4e0d263f2f6cb990c50
Arg [160] : 0000000000000000000000003b0e6b8e5f72df429e58c0885806f2da874aa1de
Arg [161] : 000000000000000000000000424182a114b5bd42638791b6a6f11fc1d6027e03
Arg [162] : 0000000000000000000000007111cbd16ae9ecc1910bb478c73cd98818217734
Arg [163] : 0000000000000000000000004edc18e8739233c870bd056c33256a99083bfecb
Arg [164] : 00000000000000000000000052e1e58db9151d8a0f1dcd8cb3b00948df114b8e
Arg [165] : 0000000000000000000000006a52f086844cd1a19f538de2dc8f84a886e313a8
Arg [166] : 00000000000000000000000061751bc401f4eabe10a238661b4a60ba84910059
Arg [167] : 000000000000000000000000be7ae9e43d4373bce5b2d9195bbe31f6a7a0db6f
Arg [168] : 000000000000000000000000052684c9ff39bbf50e8eff902fdff1adc64145f5
Arg [169] : 000000000000000000000000c939e0238be5182f3a1c1db5f53fa38178e360f0
Arg [170] : 0000000000000000000000002569448fef8b66f86fae809cdce53b5151b3d0c5
Arg [171] : 000000000000000000000000c20d543f892dbb1900255f2e42167a0b49ad0543
Arg [172] : 000000000000000000000000c71a8ff766b5ea918c33df155a9f77b949fa7c2d
Arg [173] : 00000000000000000000000066fe8f934b0ad44d6234d896fe4dbbf25a9294a1
Arg [174] : 00000000000000000000000010ff2d60924eb9e759904a4c960766dbac212ebd
Arg [175] : 0000000000000000000000000d9626b3a4f6eefc91f7ae1e2ead163701aaae3c
Arg [176] : 000000000000000000000000d560e115d8a55f24448c5887b5c05a6c4ab44753
Arg [177] : 000000000000000000000000e854f8b14262f64e10dab03f9ba5fc37c8eb2a72
Arg [178] : 000000000000000000000000474d4cfc8c28b5d902abbf8efb24743291220090
Arg [179] : 000000000000000000000000cde638127345ba1b50810f4e499f3b9c1edecbd6
Arg [180] : 000000000000000000000000c5ad46f49645aee062e0639b860b2919f8f2fe10
Arg [181] : 000000000000000000000000fbe24b3b2dbff7a48d77b146623dfc621309f4cc
Arg [182] : 0000000000000000000000004bf24d2ccdb772f344ad0eec6d3716e5ef5a84b7
Arg [183] : 000000000000000000000000e58b8eb30fe6e5cef1825b98cf533b17408da8bd
Arg [184] : 000000000000000000000000a16252eb09608b91c4c6fcdc1fc19809c5c55c35
Arg [185] : 0000000000000000000000002c4723e2f00a0bcf229553c466630bcda04bbe41
Arg [186] : 000000000000000000000000f11ffaf3dd2c39df6f2ad661d5ffe60daa0fc9fd
Arg [187] : 000000000000000000000000d3cd153156e97638b7fe71a8dd4a9a5c3a59a020
Arg [188] : 0000000000000000000000007fb2eb7bcd35c48248789884ae803095fb3e9338
Arg [189] : 0000000000000000000000006cc52e11cf88c0b2dddec1e5e7cfe9c5913b4d09
Arg [190] : 000000000000000000000000375afe51c5d9313ff20504aa3094844400be3409
Arg [191] : 0000000000000000000000004916efbf56bcaea1130b2a631f6f093095f614a2
Arg [192] : 0000000000000000000000001fabdc9da117d1392aab80c69ec141e4d579341c
Arg [193] : 0000000000000000000000006be2e15d6749f3bf984e7ae3efce46a4d6292f54
Arg [194] : 0000000000000000000000009fb753be58cf3354fc4684b0d59aba4edf1a90a9
Arg [195] : 000000000000000000000000ace1ae1a4db3adec22b3e1173afe852a5a6fe40a
Arg [196] : 000000000000000000000000d6a5ade2b16ac1d72a1e2833b573ccda6fedece5
Arg [197] : 0000000000000000000000002cb490343ae7166357180ac75a9958f9c1c267b0
Arg [198] : 000000000000000000000000b4ab322fb2af74d84be16c70adc5402f402c9af5
Arg [199] : 00000000000000000000000058fa2617627a677bd29d5ab11880d066111b8d0e


Deployed ByteCode Sourcemap

6550:23100:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9253:41;;;;;;;;;;;;;;;;-1:-1:-1;9253:41:0;-1:-1:-1;;;;;9253:41:0;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9253:41:0;;;;;;;;;;;;;;;;;;;;;9039:36;;;:::i;:::-;;;;;;;;;;;;;;;;25300:1977;;;;;;;;;;;;;;;;-1:-1:-1;25300:1977:0;-1:-1:-1;;;;;25300:1977:0;;:::i;:::-;;8832:34;;;:::i;13296:207::-;;;;;;;;;;;;;;;;-1:-1:-1;13296:207:0;-1:-1:-1;;;;;13296:207:0;;:::i;12460:101::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;11705:104;;;:::i;8552:34::-;;;:::i;12207:105::-;;;:::i;11955:100::-;;;:::i;8460:31::-;;;:::i;9160:39::-;;;:::i;:::-;;;;-1:-1:-1;;;;;9160:39:0;;;;;;;;;;;;;;20137:434;;;;;;;;;;;;;;;;-1:-1:-1;20137:434:0;-1:-1:-1;;;;;20137:434:0;;:::i;17257:258::-;;;;;;;;;;;;;;;;-1:-1:-1;17257:258:0;-1:-1:-1;;;;;17257:258:0;;:::i;9503:48::-;;;;;;;;;;;;;;;;-1:-1:-1;9503:48:0;-1:-1:-1;;;;;9503:48:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;14284:1429;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14284:1429:0;;;;;;;;:::i;16060:323::-;;;;;;;;;;;;;;;;-1:-1:-1;16060:323:0;-1:-1:-1;;;;;16060:323:0;;:::i;18390:237::-;;;;;;;;;;;;;;;;-1:-1:-1;18390:237:0;;:::i;24116:931::-;;;;;;;;;;;;;;;;-1:-1:-1;24116:931:0;-1:-1:-1;;;;;24116:931:0;;:::i;17863:182::-;;;;;;;;;;;;;;;;-1:-1:-1;17863:182:0;;:::i;16690:261::-;;;;;;;;;;;;;;;;-1:-1:-1;16690:261:0;-1:-1:-1;;;;;16690:261:0;;:::i;8930:29::-;;;:::i;12756:244::-;;;;;;;;;;;;;;;;-1:-1:-1;12756:244:0;-1:-1:-1;;;;;12756:244:0;;:::i;:::-;;;;-1:-1:-1;;;;;12756:244:0;;;;;;;;;;;;;;8739:31;;;:::i;19154:730::-;;;;;;;;;;;;;;;;-1:-1:-1;19154:730:0;;;;;;;;;;;;;;;;;;;;;;:::i;9590:50::-;;;;;;;;;;;;;;;;-1:-1:-1;9590:50:0;-1:-1:-1;;;;;9590:50:0;;:::i;23017:959::-;;;;;;;;;;;;;;;;-1:-1:-1;23017:959:0;-1:-1:-1;;;;;23017:959:0;;:::i;8638:29::-;;;:::i;9371:68::-;;;;;;;;;;;;;;;;-1:-1:-1;9371:68:0;;-1:-1:-1;;;;;9371:68:0;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;9371:68:0;;;;;;;;;;;;;;;;8359:30;;;:::i;9253:41::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9253:41:0;;;;;;-1:-1:-1;;;9253:41:0;;;;:::o;9039:36::-;;;:::o;25300:1977::-;25347:18;;:::i;:::-;-1:-1:-1;25376:10:0;25368:7;:19;;;;;;;;;;;;25347:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25347:40:0;;;;;;;;;;;;-1:-1:-1;;;25347:40:0;;;;;;;;;;25394:16;;:::i;:::-;-1:-1:-1;;;;;;25413:12:0;;:7;:12;;;;;;;;;;;;25394:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25394:31:0;;;;;;;;;-1:-1:-1;;;25394:31:0;;;;;;;;;;;;;;25464:25;;;25525:24;;;;25566:11;;25394:31;;25464:25;25566:19;;25394:31;25566:19;25558:76;;;;-1:-1:-1;;;25558:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25649:9;;:18;25641:80;;;;-1:-1:-1;;;25641:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25736:14;;;;:23;25728:89;;;;-1:-1:-1;;;25728:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25848:93;;;;;;;;25865:5;25848:93;;;;;;25885:4;25848:93;;;;;;25912:1;-1:-1:-1;;;;;25848:93:0;;;;;25937:1;-1:-1:-1;;;;;25848:93:0;;;;25826:7;:19;25834:10;-1:-1:-1;;;;;25826:19:0;-1:-1:-1;;;;;25826:19:0;;;;;;;;;;;;:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25826:115:0;;;;;-1:-1:-1;;;;;25826:115:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25826:115:0;;;;;-1:-1:-1;;;;;25826:115:0;;;;;;;;;25963:163;;;;;;;;25987:4;25963:163;;;;;;26013:5;25963:163;;;;;;26048:19;-1:-1:-1;;;;;25963:163:0;;;;;26098:20;-1:-1:-1;;;;;25963:163:0;;;;25948:7;:12;25956:3;-1:-1:-1;;;;;25948:12:0;-1:-1:-1;;;;;25948:12:0;;;;;;;;;;;;:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25948:178:0;;;;;-1:-1:-1;;;;;25948:178:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25948:178:0;;;;;-1:-1:-1;;;;;25948:178:0;;;;;;;;;26135:23;26161:15;:27;26177:10;-1:-1:-1;;;;;26161:27:0;-1:-1:-1;;;;;26161:27:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26161:27:0;26135:53;;26197:23;26223:67;26230:6;26223:67;;;;;;;;;;;;;;;;;:6;:67::i;:::-;26197:93;;26297:25;26325:73;26332:12;26325:73;;;;;;;;;;;;;;;;;:6;:73::i;:::-;26297:101;;26429:31;;;;;;;;26440:16;26429:31;;;;;;26458:1;-1:-1:-1;;;;;26429:31:0;;;;26407:11;:16;26419:3;-1:-1:-1;;;;;26407:16:0;-1:-1:-1;;;;;26407:16:0;;;;;;;;;;;;:19;26424:1;26407:19;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26407:53:0;;;;;-1:-1:-1;;;;;26407:53:0;;;;;;;;;26498:1;-1:-1:-1;;;;;26471:29:0;:15;-1:-1:-1;;;;;26471:29:0;;26467:432;;;26511:20;26534:144;26550:4;:24;;;26585:4;:25;;;26534:144;;;;;;;;;;;;;;;;;:5;:144::i;:::-;26511:167;;26687:50;26711:10;26723:13;26687:23;:50::i;:::-;26768:45;;;;;;;;;;;;;;-1:-1:-1;;;;;26768:45:0;;;;;;;;;;-1:-1:-1;;;;;26746:16:0;;-1:-1:-1;26746:16:0;;;:11;:16;;;;;;:19;;;;;;;;:67;;;;;;-1:-1:-1;;26746:67:0;;;;;;;;-1:-1:-1;;;;;;26746:67:0;-1:-1:-1;;;26746:67:0;;;;;;;;;;;;;;;26822:19;;;26844:1;26822:19;;;;;;;;:23;;;;;;;;26467:432;;;-1:-1:-1;;;;;26868:19:0;;;;;;:14;:19;;;;;:23;;-1:-1:-1;;26868:23:0;26890:1;26868:23;;;26467:432;26946:10;26930:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;26907:20:0;;;;;;;;:50;;26930:27;;;;-1:-1:-1;;;;;;26907:50:0;;;;;;26971:27;;;;26964:34;;;;;27007:22;;:::i;:::-;-1:-1:-1;;;;;;27032:12:0;;:7;:12;;;;;;;;;;;27007:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27007:37:0;;;;;;;;;;;-1:-1:-1;;;27007:37:0;;;;;;;;;;;;27032:7;27067:47;;:17;:47::i;:::-;27051:63;;27121:33;27133:3;27138:8;27148:5;27121:11;:33::i;:::-;27168:103;;;-1:-1:-1;;;;;27168:103:0;;;;;;;;;;;-1:-1:-1;;;;;27168:103:0;;;;;;;;;;;;;;;;27177:10;;27168:103;;;;;;;;;25300:1977;;;;;;;;;;:::o;8832:34::-;;;:::o;13296:207::-;-1:-1:-1;;;;;13399:23:0;;13364:7;13399:23;;;:14;:23;;;;;;;;13436:13;:61;;13496:1;13436:61;;;-1:-1:-1;;;;;13452:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;13473:13:0;;13452:35;;;;;;;;;:41;-1:-1:-1;;;13452:41:0;;-1:-1:-1;;;;;13452:41:0;13436:61;-1:-1:-1;;;;;13429:68:0;;;;13296:207;;;;:::o;12460:101::-;12551:4;12535:12;:20;;12460:101;:::o;11705:104::-;11797:6;11781:12;:22;;11705:104;:::o;8552:34::-;;;:::o;12207:105::-;12300:6;12284:12;:22;;12207:105;:::o;11955:100::-;12045:4;12029:12;:20;;11955:100;:::o;8460:31::-;;;:::o;9160:39::-;;;:::o;20137:434::-;20186:20;;:::i;:::-;-1:-1:-1;;;;;;20209:12:0;;:7;:12;;;;;;;;;;;;20186:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20186:35:0;;;;;;;;;;;;-1:-1:-1;;;20186:35:0;;;;;;;;;;20236:21;20228:72;;;;-1:-1:-1;;;20228:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20309:13;20325:45;20343:6;:26;;;-1:-1:-1;;;;;20325:45:0;:17;:45::i;:::-;20309:61;;20403:4;20387:12;:20;;20379:78;;;;-1:-1:-1;;;20379:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20480:1;20472:5;:9;20464:61;;;;-1:-1:-1;;;20464:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20534:31;20546:3;20551:6;20559:5;20534:11;:31::i;:::-;20137:434;;;:::o;17257:258::-;-1:-1:-1;;;;;17373:16:0;;17333:7;17373:16;;;;;;;;;;17400:13;;;;17396:53;;17440:1;17433:8;;;;;17396:53;17482:26;;17464:45;;17482:26;;;-1:-1:-1;;;;;17482:26:0;17464:17;:45::i;:::-;17457:52;17257:258;-1:-1:-1;;;17257:258:0:o;9503:48::-;;;;;;;;;;;;;;;:::o;14284:1429::-;14375:6;14412:12;14398:11;:26;14390:83;;;;-1:-1:-1;;;14390:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14502:6;14488:11;:20;14480:91;;;;-1:-1:-1;;;14480:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14602:23:0;;14580:19;14602:23;;;:14;:23;;;;;;;;;14659:16;;;;;;;:23;14602;;;;;14659;;14655:63;;14709:1;14702:8;;;;;14655:63;14797:4;14783:11;:18;14779:49;;;14819:1;14812:8;;;;;14779:49;14942:17;;;;;:68;;-1:-1:-1;;;;;;14963:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;14942:68:0;14938:99;;;15028:1;15021:8;;;;;14938:99;-1:-1:-1;;;;;15088:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;15109:16:0;;15088:38;;;;;;;;;:48;;:63;-1:-1:-1;15084:137:0;;-1:-1:-1;;;;;15169:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;15190:16:0;;;;15169:38;;;;;;;;:44;-1:-1:-1;;;15169:44:0;;-1:-1:-1;;;;;15169:44:0;;-1:-1:-1;15162:51:0;;15084:137;15229:12;-1:-1:-1;;15267:16:0;;15290:371;15305:5;15297:13;;:5;:13;;;15290:371;;;15363:1;15346:13;;;15345:19;;;15337:27;;15407:20;;:::i;:::-;-1:-1:-1;;;;;;15430:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;15407:51;;;;;;;;;;;;;;;-1:-1:-1;;;15407:51:0;;;-1:-1:-1;;;;;15407:51:0;;;;;;;;;15471:27;;15467:187;;;15518:8;;;;-1:-1:-1;15511:15:0;;-1:-1:-1;;;;15511:15:0;15467:187;15546:12;;:26;;;-1:-1:-1;15542:112:0;;;15593:6;15585:14;;15542:112;;;15643:1;15634:6;:10;15626:18;;15542:112;15290:371;;;;;-1:-1:-1;;;;;;15674:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;-1:-1:-1;;;;;;;;15674:33:0;;;;;-1:-1:-1;;14284:1429:0;;;;;:::o;16060:323::-;-1:-1:-1;;;;;16191:16:0;;16151:7;16191:16;;;;;;;;;;16218:13;;;;16214:53;;16258:1;16251:8;;;;;16214:53;16349:27;;16282:95;;16310:1;16295:12;:16;;16313:6;;-1:-1:-1;;;;;16321:15:0;16282:95;;;16338:9;;-1:-1:-1;;;16349:27:0;;;;16282:12;:95::i;18390:237::-;18463:7;18498:4;18483:12;:19;18479:50;;;-1:-1:-1;18520:1:0;18513:8;;18479:50;18542:79;18555:12;18569:6;18577:15;-1:-1:-1;;;;;18542:79:0;18594:9;18605:15;18542:12;:79::i;24116:931::-;24168:20;;:::i;:::-;-1:-1:-1;24199:10:0;24191:7;:19;;;;;;;;;;;;24168:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24168:42:0;;;;;;;;;;;;-1:-1:-1;;;24168:42:0;;;;;;;;;;-1:-1:-1;;;;;24225:17:0;;24217:83;;;;-1:-1:-1;;;24217:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24315:13;;:21;;24332:4;24315:21;24307:81;;;;-1:-1:-1;;;24307:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24403:12:0;;:7;:12;;;;;;;;;;:19;;;:27;;:19;:27;24395:85;;;;-1:-1:-1;;;24395:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24489:23;24515;24527:10;24515:11;:23::i;:::-;24489:49;;24560:15;-1:-1:-1;;;;;24553:22:0;:3;-1:-1:-1;;;;;24553:22:0;;;24545:94;;;;-1:-1:-1;;;24545:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24664:10;24648:27;;;;:15;:27;;;;;;;;:33;;-1:-1:-1;;;;;;24648:33:0;-1:-1:-1;;;;;24648:33:0;;;;;24725:26;;;;24760:27;;;;;24711:140;;;;;;;;;;;;;;24725:26;;24760:27;24711:140;;;;;:5;:140::i;:::-;24688:163;;24860:55;24884:15;24901:13;24860:23;:55::i;:::-;24922:43;24946:3;24951:13;24922:23;:43::i;:::-;25010:15;-1:-1:-1;;;;;24979:62:0;25005:3;-1:-1:-1;;;;;24979:62:0;24993:10;-1:-1:-1;;;;;24979:62:0;;25027:13;24979:62;;;;-1:-1:-1;;;;;24979:62:0;;;;;;;;;;;;;;;24116:931;;;;:::o;17863:182::-;17937:7;17960:79;17973:12;17987:6;17995:15;-1:-1:-1;;;;;17960:79:0;18012:9;18023:15;17960:12;:79::i;16690:261::-;-1:-1:-1;;;;;16807:16:0;;16767:7;16807:16;;;;;;;;;;16834:13;;;;16830:53;;16874:1;16867:8;;;;;16830:53;16917:27;;16898:47;;-1:-1:-1;;;16917:27:0;;-1:-1:-1;;;;;16917:27:0;16898:18;:47::i;8930:29::-;;;:::o;12756:244::-;-1:-1:-1;;;;;12861:28:0;;;12819:7;12861:28;;;:15;:28;;;;;;12819:7;;12861:28;12900:29;12896:70;;12947:11;12940:18;;;;;8739:31;;;:::o;19154:730::-;19340:7;19368:11;19360:4;:19;19356:50;;-1:-1:-1;19397:1:0;19390:8;;19356:50;19479:21;19503:34;:11;19519:17;19503:15;:34::i;:::-;19479:58;;19544:15;19569:13;19562:4;:20;:43;;19601:4;19562:43;;;19585:13;19562:43;19544:61;-1:-1:-1;19704:15:0;19723:68;19773:17;19723:45;19724:21;;;19751:16;19723:27;:45::i;:::-;:49;;:68::i;:::-;19704:88;-1:-1:-1;19850:28:0;19704:88;19862:15;19850:11;:28::i;:::-;19843:35;;;;;19154:730;;;;;;;;:::o;9590:50::-;;;;;;;;;;;;-1:-1:-1;;;;;9590:50:0;;:::o;23017:959::-;23067:20;;:::i;:::-;-1:-1:-1;23098:10:0;23090:7;:19;;;;;;;;;;;;23067:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23067:42:0;;;;;;;;;;;;-1:-1:-1;;;23067:42:0;;;;;;;;;;23124:21;23116:73;;;;-1:-1:-1;;;23116:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23198:17;23218:47;23237:6;:27;;;-1:-1:-1;;;;;23218:47:0;:18;:47::i;:::-;23198:67;;23292:1;23280:9;:13;23272:66;;;;-1:-1:-1;;;23272:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23345:13;23361:60;23368:9;23361:60;;;;;;;;;;;;;;;;;:6;:60::i;:::-;23345:76;;23470:24;23497:124;23511:6;:27;;;23547:6;23497:124;;;;;;;;;;;;;;;;;:5;:124::i;:::-;23636:10;23628:7;:19;;;;;;;;;;;:60;;-1:-1:-1;;;;;23628:60:0;;;-1:-1:-1;;;23628:60:0;-1:-1:-1;;;;23628:60:0;;;;;;;;;;23731:26;;;;23470:151;;-1:-1:-1;23628:7:0;;23713:45;;;:17;:45::i;:::-;23697:61;;23787:4;23771:12;:20;23767:81;;23802:38;23814:10;23826:6;23834:5;23802:11;:38::i;:::-;23861:62;;;-1:-1:-1;;;;;23861:62:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23861:62:0;;;23873:10;;23861:62;;;;;;;;;23939:5;-1:-1:-1;;;;;23932:22:0;;23955:3;23960:9;23932:38;;;;;;;;;;;;;-1:-1:-1;;;;;23932:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23017:959;;;;;;:::o;8638:29::-;;;:::o;9371:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9371:68:0;;-1:-1:-1;;;;;9371:68:0;;:::o;8359:30::-;;;:::o;28826:154::-;28904:6;28938:12;-1:-1:-1;;;28927:9:0;;28919:32;;;;-1:-1:-1;;;28919:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28972:1:0;;28826:154;-1:-1:-1;;28826:154:0:o;29230:175::-;29336:6;29364:1;-1:-1:-1;;;;;29359:6:0;:1;-1:-1:-1;;;;;29359:6:0;;;29367:12;29351:29;;;;;-1:-1:-1;;;29351:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29394:5:0;;;29230:175::o;27283:391::-;-1:-1:-1;;;;;27387:23:0;;27368:16;27387:23;;;:14;:23;;;;;;;;;27436:13;:61;;27496:1;27436:61;;;-1:-1:-1;;;;;27452:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;27473:13:0;;27452:35;;;;;;;;;:41;-1:-1:-1;;;27452:41:0;;-1:-1:-1;;;;;27452:41:0;27436:61;27417:80;;27504:16;27523:80;27529:9;27540:10;27523:80;;;;;;;;;;;;;;;;;:5;:80::i;:::-;27504:99;;27610:58;27627:7;27636:9;27647;27658;27610:16;:58::i;:::-;27283:391;;;;;:::o;20577:2295::-;20706:29;20748:19;;20744:485;;20778:13;20794:66;20801:15;20794:66;;;;;;;;;;;;;;;;;:6;:66::i;:::-;20778:82;;20938:131;20954:7;:27;;;20992:6;20938:131;;;;;;;;;;;;;;;;;:5;:131::i;:::-;-1:-1:-1;;;;;21078:23:0;;:7;:23;;;;;;;;;;:68;;-1:-1:-1;;21078:68:0;;-1:-1:-1;;;;;21078:68:0;;;;;;;-1:-1:-1;20744:485:0;;-1:-1:-1;20744:485:0;;-1:-1:-1;21194:27:0;;;;20744:485;21361:30;21394:152;21408:7;:27;;;21444:7;:28;;;21394:152;;;;;;;;;;;;;;;;;:5;:152::i;:::-;21361:185;;21811:20;21834:154;21848:22;21879:7;:23;21887:14;-1:-1:-1;;;;;21879:23:0;-1:-1:-1;;;;;21879:23:0;;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;;;;;21879:44:0;21834:154;;;;;;;;;;;;;;;;;:5;:154::i;:::-;21811:177;;21997:16;22016:27;22028:14;22016:11;:27::i;:::-;21997:46;;22050:11;22160:23;-1:-1:-1;;;;;22144:39:0;:13;-1:-1:-1;;;;;22144:39:0;;22140:432;;;22201:96;22207:13;22222:23;22201:96;;;;;;;;;;;;;;;;;:5;:96::i;:::-;22194:103;;22306:39;22330:8;22340:4;22306:23;:39::i;:::-;22140:432;;;22389:13;-1:-1:-1;;;;;22363:39:0;:23;-1:-1:-1;;;;;22363:39:0;;22359:213;;;22420:96;22426:23;22451:13;22420:96;;;;;;;;;;;;;;;;;:5;:96::i;:::-;22413:103;;22525:39;22549:8;22559:4;22525:23;:39::i;:::-;22644:27;;;;;22680:28;;;;;-1:-1:-1;;;;;22585:281:0;;;22748:7;:23;;;;;;;;;;;:44;22585:281;;-1:-1:-1;;;;;22585:281:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22748:44:0;;;;22585:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20577:2295;;;;;;;;:::o;27680:391::-;-1:-1:-1;;;;;27784:23:0;;27765:16;27784:23;;;:14;:23;;;;;;;;;27833:13;:61;;27893:1;27833:61;;;-1:-1:-1;;;;;27849:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;27870:13:0;;27849:35;;;;;;;;;:41;-1:-1:-1;;;27849:41:0;;-1:-1:-1;;;;;27849:41:0;27833:61;27814:80;;27901:16;27920:80;27926:9;27937:10;27920:80;;;;;;;;;;;;;;;;;:5;:80::i;1681:181::-;1739:7;1771:5;;;1795:6;;;;1787:46;;;;;-1:-1:-1;;;1787:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3035:471;3093:7;3338:6;3334:47;;-1:-1:-1;3368:1:0;3361:8;;3334:47;3405:5;;;3409:1;3405;:5;:1;3429:5;;;;;:10;3421:56;;;;-1:-1:-1;;;3421:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3982:132;4040:7;4067:39;4071:1;4074;4067:39;;;;;;;;;;;;;;;;;:3;:39::i;2145:136::-;2203:7;2230:43;2234:1;2237;2230:43;;;;;;;;;;;;;;;;;:3;:43::i;29028:154::-;29106:6;29140:12;-1:-1:-1;;;29129:9:0;;29121:32;;;;-1:-1:-1;;;29121:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29453:194;29559:6;29585:5;;;29613:12;-1:-1:-1;;;;;29605:6:0;;;;;;;;29597:29;;;;-1:-1:-1;;;29597:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29640:1:0;29453:194;-1:-1:-1;;;;29453:194:0:o;28140:638::-;28281:18;28302:81;28309:12;28302:81;;;;;;;;;;;;;;;;;:6;:81::i;:::-;28281:102;;28411:1;28396:12;:16;;;:85;;;;-1:-1:-1;;;;;;28416:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;28439:16:0;;28416:40;;;;;;;;;:50;:65;;;:50;;:65;28396:85;28392:313;;;-1:-1:-1;;;;;28492:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;28515:16:0;;28492:40;;;;;;;;;:57;;-1:-1:-1;;;;;;28492:57:0;-1:-1:-1;;;;;;;;28492:57:0;;;;;;28392:313;;;28611:33;;;;;;;;;;;;;;-1:-1:-1;;;;;28611:33:0;;;;;;;;;;-1:-1:-1;;;;;28572:22:0;;-1:-1:-1;28572:22:0;;;:11;:22;;;;;;:36;;;;;;;;;;:72;;;;;;-1:-1:-1;;28572:72:0;;;;;;;;;;-1:-1:-1;;;;;;28572:72:0;-1:-1:-1;;;28572:72:0;;;;;;;;;;;;28653:25;;:14;:25;;;;;;:44;;;;;28681:16;;;28653:44;;;;28392:313;28718:54;;;-1:-1:-1;;;;;28718:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;28718:54:0;;;;;;;;;;;28140:638;;;;;:::o;4610:278::-;4696:7;4731:12;4724:5;4716:28;;;;-1:-1:-1;;;4716:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4755:9;4771:1;4767;:5;;;;;;;4610:278;-1:-1:-1;;;;;4610:278:0:o;2584:192::-;2670:7;2706:12;2698:6;;;;2690:29;;;;-1:-1:-1;;;2690:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://bf33b3eae669abf69c978e0c0a76f31ca7d5f4517b79fe47a8d8b9cf4083cd10
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.