Contract 0xe85157f5558bdd049ba8fb19b58221ea7df41df0 1

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x96c6c438957ce33fde2f80e798c6fff5f80a23f9f99d67ba20dbc21d38836a90Claim Token432820302023-05-29 8:45:067 days 23 hrs ago0xd4ce76e4292113b2f2c957f2fc1fa57f9060e90e IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.012535446687 151.282831343
0x0580c613c676141882e9c6e89f4a5410fa2964b11d0f030e3ffd0dcca05b3ddfClaim Token431585442023-05-26 5:28:5011 days 3 hrs ago0x5e853ab60b2e35982e5c83423ae3606ce54a2f3a IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.010907331711 165.863227626
0x9c58f67ac2b025717d33ce140d3aa19d1e3dc8727eddf622c53d32257c5e7ca6Claim Token431168372023-05-25 4:14:1812 days 4 hrs ago0xc0ff9fc3e04d9b14157dc0b05a3897cfc51d7401 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.008909563865 135.484008238
0xa630428dd62cf02eab5eb9f67ad39bf3bdf280d85b4ad2dd546822fe5eb359e4Claim Token430997952023-05-24 17:56:4412 days 14 hrs ago0x901c4a1a7a8f1c914f7e9856e634cc57b374f771 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.011525950077175.270298156
0xcf168192d97323112a9fc2064545924f9c4d68cc633268f7646a060fdf3ca907Claim Token429038892023-05-19 18:02:5417 days 14 hrs ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.010867527367131.153707625
0x3ac1d2f75ac96f3b2d7259dddf2a16f22550c8fcb448fb24a77561864d29cc53Claim Token423033882023-05-04 17:15:2032 days 15 hrs ago mooo5858.hi  IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.018174106249 276.366026212
0xc653413c103818a1c1799fb5c41a9f2e88aee6653921daed1da5ef4722777855Claim Token422921492023-05-04 10:35:5432 days 22 hrs ago0x8f9f2aae14d82a69da5644862d866a276b8b9e9f IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.028244334989 340.864037238
0x243bdd03810e3afc3f9eef323d0f6aa64f057f755108ed62e1d6c228da12cf6dClaim Token421816242023-05-01 15:50:2135 days 16 hrs ago0x36dbd975f1c9db23824cac22985cacbdbe1a58e8 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.016435583346 249.929036147
0x5fe2c02ba20cb2fef7491340cc60bfd66d5117673499534cd40808a4fec07b8aClaim Token421430022023-04-30 16:34:5136 days 16 hrs ago0x0023d593cf41c379ec3d37f0ac424eb2ba9f6e91 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.021292223833 323.781935084
0x65a1972f2e60b8a3a8090c90f4ffc1ce0d2b31d2d9350e2f76375da0151283abClaim Token419431802023-04-25 14:23:0541 days 18 hrs ago0x0f1ee2b919f8112c9493a992e3c89183cf2438cf IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.028393002497 342.658216748
0x306043ef4e23c5524288c1d6915ecda7d22c51b32ea836744d72fb86d0f1a4eeClaim Token417374292023-04-20 6:32:0147 days 2 hrs ago0x97300791462d8acc2b7882726c2dcafe67a84e2d IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.022326779691269.448590913
0x479faf5f297d12845a2559f872506f31e2c674c9caa773a0429f5236709ffd27Claim Token416030962023-04-16 15:58:4050 days 16 hrs ago0xc206014aaf21e07ae5868730098d919f99d79616 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.012828408836 154.818416819
0x3e89636dc983b5f7d2481fa5c7db434e7394814a4dec73338ba4d85ed0aa7b58Claim Token411561242023-04-05 2:27:0562 days 6 hrs ago0x08c70c959021d9f02f611ccda9cba42a69d0507c IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.007231983517 87.278496734
0x90fca3f3527522f109a867ffecf03dfec1785d4b2fae4b3f0f8f5a8d0c5be3c1Claim Token410276122023-04-01 18:22:3465 days 14 hrs ago0x3437ade2d6c50b0088dbdcd324f036b2daaee50e IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.00596358463 90.685735174
0x1adced094bcf91bffba3aa86cb3818d8867970e12458ddc7afea488e6ba73a85Claim Token409951702023-03-31 22:40:4466 days 10 hrs ago0x67167ec4e21334320f420b90c63a699e6679e002 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.007252682903 110.288513006
0xa646ebd31543d42a15bd626f04f5abfe327c381bad482ab9013d8746acd56651Claim Token408477202023-03-28 3:19:0370 days 5 hrs ago0x013001289a04ac18d609d29b655195aa6b6cf3e3 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.011172135091134.829836606
0xa7d37c6b0cecb3eae79bbf447dbbb6a8d1681bd629e5bacc5f43dd6e58143069Claim Token408225782023-03-27 11:14:4170 days 21 hrs ago0x08c39e833cc097da6c480a3e722812151d9d6d5f IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.01409676361 170.125434288
0x452c265f8c97e952028004f0f469094ad68b1e9a23d0b52826e960c506f76787Claim Token406090152023-03-21 18:36:3076 days 14 hrs ago0x5275501978c637b4a516807e69af11f9a7f4e8a3 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.009043693597 137.523662929
0xfd2e92e75dc147bac6afd2655da29412c0dda20e1cfb98b3b32896c12fd76300Claim Token405940632023-03-21 7:56:5677 days 47 mins ago0x11eae15e0c0985acc01d11c90df8507a324eb6f5 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.017917188227 216.23186092
0x7138e91f3ceff425a3afbfc77928ea797d02833276c24bb34ef75a1741ca1fa3Claim Token405685182023-03-20 14:24:4877 days 18 hrs ago0x1914172d1c51412c3fc37ec86989edcc5fdcc0bc IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.016168238233 195.124826322
0x911443227b6b55ac7260011a036c369160f0168ab9514280581846138406c7eaClaim Token405303262023-03-19 14:34:5278 days 18 hrs ago0x231a8c7f47116047257431ddc94bb53f42504cc9 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.008105266056 123.253388119
0x5df4f0f8106e64952483a3776baf372f6a6997c9df837bcfe1d6a590abf78851Claim Token401790912023-03-10 9:56:0787 days 22 hrs ago0x13ccf474bec3276cb7855f49fc8c7045a80215da IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.02413416084 366.998081542
0xa77b2819dc5b2c37a90147b6e0210f072bdcb715373c23236b8225ac3247de67Claim Token399965962023-03-05 14:57:0192 days 17 hrs ago0xb871cf78f8f10dae696dd8d96ae2b50e41767586 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.006912653092 105.117821997
0xb4a9b3b574756301e3deb24b290accff8d9f18fc61b8de09219bf464684a48dbClaim Token399612152023-03-04 16:57:2493 days 15 hrs ago0x241aa264f305457e58e8e9e029c31da563c325c1 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.005927381602 90.135210881
0xba184c02820f516597011b9fcec8fd124e365a0517c199b33ad4edf494aece7bClaim Token399472272023-03-04 8:09:1294 days 35 mins ago0x69a3af326a022e179901afd360703d27e575f4a4 IN  0xe85157f5558bdd049ba8fb19b58221ea7df41df00 MATIC0.008220179676 125.000831446
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x67b66e8b5b191ea3d322cb58c4318bdd321615badd7dd68d22b8a959a4c257c1241804032022-01-26 9:05:33495 days 23 hrs ago 0x631ea08f2cc15cd455a87950f569f738998c0b3a  Contract Creation0 MATIC
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x524e057017D01551CE84688A31317970ca831B79

Contract Name:
KommunitasVesting

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-12-30
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

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

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


pragma solidity ^0.7.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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


pragma solidity ^0.7.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;
    }
}


pragma solidity ^0.7.0;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}


pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}


pragma solidity 0.7.6;

interface IKommunitasCreator{
    event VestingCreated(address indexed project, address vesting, uint index);
    
    function owner() external  view returns (address);
    
    function allVestingsLength() external view returns(uint);
    function allVestings(uint) external view returns(address);
    function getVesting(address) external view returns(address);
    
    function createVesting(address, uint) external returns (address);
    
    function transferOwnership(address) external;
}


pragma solidity 0.7.6;

contract KommunitasVesting{
    using SafeMath for uint;
    
    bool public initialized;
    bool public isPaused;
    
    address public owner;
    IKommunitasCreator public creator;
    
    address public project;
    address public tokenProject; // token project address
    address public senderProject; // sender project address
    uint public tge; // Token Generation Event
    uint public sold; // sold token
    uint public distributed; // token sent to contract
    uint public completed_d2; // token sent to contract in percent (2 decimal)
    uint public period; // token sent period in month
    address[] public buyers;
    
    struct Bought{
        uint buyerIndex;
        uint purchased;
        uint progress; // in percent
        uint claimed;
    }
    
    mapping(address => Bought) public invoice;
    
    modifier onlyOwner{
        require(msg.sender == owner, "Not owner");
        _;
    }
    
    modifier onlyCreator{
        require(msg.sender == address(creator), "Not creator");
        _;
    }
    
    modifier onlySenderProject{
        require(msg.sender == senderProject, "Not sender project");
        _;
    }
    
    modifier onlyBuyer(address _target){
        require(invoice[_target].purchased > 0, "Never bought anything");
        _;
    }
    
    modifier isNotInitialized{
        require(!initialized, "Already initialized");
        _;
    }
    
    modifier isNotPaused{
        require(!isPaused, "Vesting Paused");
        _;
    }
    
    constructor(){
        creator = IKommunitasCreator(msg.sender);
        initialized = false;
        isPaused = false;
        owner = tx.origin;
        tokenProject = address(0);
        distributed = 0;
        completed_d2 = 0;
        period = 0;
    }
    
    /**
     * @dev Initialize vesting token distribution
     * @param _project Launchpad project address
     * @param _tge Epoch date to start TGE (Token Generation Event)
     */
    function initialize(
        address _project,
        uint _tge
    ) public onlyCreator isNotInitialized {
        require(_project != address(0), "Can't set to address(0)");
        require(_tge != 0, "TGE can't be 0");
        
        initialized = true;
        
        project = _project;
        tge = _tge;
    }
    
    /**
     * @dev Get length of buyer
     */
    function getBuyerLength() public view returns (uint length){
        length = buyers.length;
    }
    
    /**
     * @dev Insert buyer purchase in launchpad
     * @param _buyer Buyer address
     * @param _purchase Buyer purchase
     */
    function migratePurchase(address _buyer, uint _purchase) public onlyOwner {
        require(_buyer != address(0) && _purchase != 0, "Not good");
        
        if(invoice[_buyer].purchased == 0){
            buyers.push(_buyer);
            invoice[_buyer].buyerIndex = buyers.length-1;
        }
        
        invoice[_buyer].purchased = invoice[_buyer].purchased.add(_purchase);
        sold = sold.add(_purchase);
    }
    
    /**
     * @dev Remove buyer purchase in vesting
     * @param _buyer Buyer address
     */
    function removeBuyer(address _buyer) public onlyOwner {
        require(_buyer != address(0) && invoice[_buyer].purchased > 0, "Not found");
        
        sold = sold.sub(invoice[_buyer].purchased);
        uint indexToDelete = invoice[_buyer].buyerIndex;
        address addressToMove = buyers[buyers.length-1];
        
        buyers[indexToDelete] = addressToMove;
        invoice[addressToMove].buyerIndex = indexToDelete;
        
        buyers.pop();
        delete invoice[_buyer];
    }
    
    /**
     * @dev Distribute token to contract
     * @param _amount Token amount to distribute
     * @param _percent Token amount distributed in percent (2 decimal)
     */
    function distributeToken(uint _amount, uint _percent) public onlySenderProject isNotPaused {
        require(_amount != 0 && _percent != 0 && tokenProject != address(0), "Not good");
        require(completed_d2 < 10000, "Distributed 100% token");
        
        TransferHelper.safeTransferFrom(tokenProject, msg.sender, address(this), _amount);
        
        distributed = distributed.add(_amount);
        completed_d2 = completed_d2.add(_percent);
        period = period.add(1);
    }
    
    /**
     * @dev Token claim
     */
    function claimToken() public onlyBuyer(msg.sender) isNotPaused {
        require(block.timestamp >= tge, "TGE haven't started yet");
        require(completed_d2 > 0, "Token hasn't been distributed");
        require(invoice[msg.sender].progress < completed_d2, "You have claimed before");
        
        uint amountToClaim;
        if(invoice[msg.sender].progress == 0){
            amountToClaim = invoice[msg.sender].purchased.mul(completed_d2).div(10000);
        } else{
            amountToClaim = (invoice[msg.sender].claimed.mul(completed_d2).div(invoice[msg.sender].progress)).sub(invoice[msg.sender].claimed);
        }
        
        TransferHelper.safeTransfer(tokenProject, msg.sender, amountToClaim);
        
        invoice[msg.sender].progress = completed_d2;
        invoice[msg.sender].claimed = invoice[msg.sender].claimed.add(amountToClaim);
    }
    
    /**
     * @dev Emergency condition to withdraw token
     * @param _target Target address
     */
    function emergencyWithdraw(address _target) public onlyOwner {
        require(_target != address(0), "Not good");
        
        TransferHelper.safeTransfer(tokenProject, _target, ERC20(tokenProject).balanceOf(address(this)));
    }
    
    /**
     * @dev Set token project
     * @param _tokenProject Token project address
     */
    function setTokenProject(address _tokenProject) public onlyOwner {
        require(_tokenProject != address(0) && _tokenProject != tokenProject, "Not good");
        tokenProject = _tokenProject;
    }
    
    /**
     * @dev Set sender project
     * @param _senderProject Sender project address
     */
    function setSenderProject(address _senderProject) public onlyOwner {
        require(_senderProject != address(0) && _senderProject != senderProject, "Not good");
        senderProject = _senderProject;
    }
    
    /**
     * @dev Set TGE
     * @param _tge Token Generation Event in epoch
     */
    function setTge(uint _tge) public onlyOwner {
        require(_tge != 0 && _tge != tge, "TGE incorrect");
        tge = _tge;        
    }
    
    /**
     * @dev Pause vesting activity
     */
    function togglePause() public onlyOwner {
        isPaused = !isPaused;
    }
    
    /**
     * @dev Transfer ownership
     * @param _newOwner New owner address
     */
    function transferOwnership(address _newOwner) public onlyOwner {
        require(_newOwner != address(0) && _newOwner != owner, "Ownership incorrect");
        owner = _newOwner;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"completed_d2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"contract IKommunitasCreator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"distributeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyerLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_project","type":"address"},{"internalType":"uint256","name":"_tge","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"invoice","outputs":[{"internalType":"uint256","name":"buyerIndex","type":"uint256"},{"internalType":"uint256","name":"purchased","type":"uint256"},{"internalType":"uint256","name":"progress","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_purchase","type":"uint256"}],"name":"migratePurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"project","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buyer","type":"address"}],"name":"removeBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"senderProject","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_senderProject","type":"address"}],"name":"setSenderProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tge","type":"uint256"}],"name":"setTge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenProject","type":"address"}],"name":"setTokenProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tge","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenProject","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600180546001600160a01b03199081163317909155600080546201000032026001600160b01b03199091161781556003805490921690915560078190556008819055600955611830806100656000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063a7497fa5116100de578063d808aa0d11610097578063f2fde38b11610071578063f2fde38b146103d0578063f60ca60d146103f6578063f84b903e146103fe578063ff7e436e146104065761018e565b8063d808aa0d146103a3578063ef78d4fd146103ab578063f2aa8218146103b35761018e565b8063a7497fa51461030d578063acc8638314610315578063af3caced14610341578063b187bd2614610367578063c4ae31681461036f578063cd6dc687146103775761018e565b80636f75b00c1161014b5780638e70d412116101255780638e70d4121461028e5780638f0164f61461029657806396fe0582146102e2578063a2169665146102ea5761018e565b80636f75b00c1461023a5780636ff1c9bc146102605780638da5cb5b146102865761018e565b806302c7e7af1461019357806302d05d3f146101ad578063158ef93e146101d1578063341581de146101ed5780634451d89f146102155780636baa21ce1461021d575b600080fd5b61019b61040e565b60408051918252519081900360200190f35b6101b5610414565b604080516001600160a01b039092168252519081900360200190f35b6101d9610423565b604080519115158252519081900360200190f35b6102136004803603602081101561020357600080fd5b50356001600160a01b031661042c565b005b610213610501565b6102136004803603602081101561023357600080fd5b503561079c565b6102136004803603602081101561025057600080fd5b50356001600160a01b0316610844565b6102136004803603602081101561027657600080fd5b50356001600160a01b0316610a20565b6101b5610b3b565b6101b5610b50565b6102bc600480360360208110156102ac57600080fd5b50356001600160a01b0316610b5f565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61019b610b86565b6102136004803603604081101561030057600080fd5b5080359060200135610b8c565b61019b610d2c565b6102136004803603604081101561032b57600080fd5b506001600160a01b038135169060200135610d32565b6102136004803603602081101561035757600080fd5b50356001600160a01b0316610eae565b6101d9610f83565b610213610f91565b6102136004803603604081101561038d57600080fd5b506001600160a01b038135169060200135610fff565b61019b61116c565b61019b611172565b6101b5600480360360208110156103c957600080fd5b5035611178565b610213600480360360208110156103e657600080fd5b50356001600160a01b03166111a2565b6101b5611290565b61019b61129f565b6101b56112a5565b60065481565b6001546001600160a01b031681565b60005460ff1681565b6000546201000090046001600160a01b0316331461047d576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038116158015906104a357506004546001600160a01b03828116911614155b6104df576040805162461bcd60e51b8152602060048201526008602482015267139bdd0819dbdbd960c21b604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b336000818152600b602052604090206001015461055d576040805162461bcd60e51b81526020600482015260156024820152744e6576657220626f7567687420616e797468696e6760581b604482015290519081900360640190fd5b600054610100900460ff16156105ab576040805162461bcd60e51b815260206004820152600e60248201526d15995cdd1a5b99c814185d5cd95960921b604482015290519081900360640190fd5b600554421015610602576040805162461bcd60e51b815260206004820152601760248201527f54474520686176656e2774207374617274656420796574000000000000000000604482015290519081900360640190fd5b600060085411610659576040805162461bcd60e51b815260206004820152601d60248201527f546f6b656e206861736e2774206265656e206469737472696275746564000000604482015290519081900360640190fd5b600854336000908152600b6020526040902060020154106106c1576040805162461bcd60e51b815260206004820152601760248201527f596f75206861766520636c61696d6564206265666f7265000000000000000000604482015290519081900360640190fd5b336000908152600b602052604081206002015461070c57600854336000908152600b602052604090206001015461070591612710916106ff916112b4565b90611316565b9050610746565b336000908152600b602052604090206003810154600290910154600854610743929161073d916106ff9084906112b4565b90611358565b90505b60035461075d906001600160a01b0316338361139a565b600854336000908152600b602052604090206002810191909155600301546107859082611503565b336000908152600b60205260409020600301555050565b6000546201000090046001600160a01b031633146107ed576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b80158015906107fe57506005548114155b61083f576040805162461bcd60e51b815260206004820152600d60248201526c1511d1481a5b98dbdc9c9958dd609a1b604482015290519081900360640190fd5b600555565b6000546201000090046001600160a01b03163314610895576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038116158015906108c757506001600160a01b0381166000908152600b602052604090206001015415155b610904576040805162461bcd60e51b8152602060048201526009602482015268139bdd08199bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b0381166000908152600b602052604090206001015460065461092c91611358565b6006556001600160a01b0381166000908152600b6020526040812054600a8054919291600019810190811061095d57fe5b600091825260209091200154600a80546001600160a01b03909216925082918490811061098657fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600b90915260409020829055600a8054806109ca57fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03949094168152600b909352505060408120818155600181018290556002810182905560030155565b6000546201000090046001600160a01b03163314610a71576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038116610ab7576040805162461bcd60e51b8152602060048201526008602482015267139bdd0819dbdbd960c21b604482015290519081900360640190fd5b600354604080516370a0823160e01b81523060048201529051610b38926001600160a01b031691849183916370a08231916024808301926020929190829003018186803b158015610b0757600080fd5b505afa158015610b1b573d6000803e3d6000fd5b505050506040513d6020811015610b3157600080fd5b505161139a565b50565b6000546201000090046001600160a01b031681565b6004546001600160a01b031681565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b600a5490565b6004546001600160a01b03163314610be0576040805162461bcd60e51b8152602060048201526012602482015271139bdd081cd95b99195c881c1c9bda9958dd60721b604482015290519081900360640190fd5b600054610100900460ff1615610c2e576040805162461bcd60e51b815260206004820152600e60248201526d15995cdd1a5b99c814185d5cd95960921b604482015290519081900360640190fd5b8115801590610c3c57508015155b8015610c5257506003546001600160a01b031615155b610c8e576040805162461bcd60e51b8152602060048201526008602482015267139bdd0819dbdbd960c21b604482015290519081900360640190fd5b61271060085410610cdf576040805162461bcd60e51b81526020600482015260166024820152752234b9ba3934b13aba32b21018981812903a37b5b2b760511b604482015290519081900360640190fd5b600354610cf7906001600160a01b031633308561155d565b600754610d049083611503565b600755600854610d149082611503565b600855600954610d25906001611503565b6009555050565b60055481565b6000546201000090046001600160a01b03163314610d83576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821615801590610d9a57508015155b610dd6576040805162461bcd60e51b8152602060048201526008602482015267139bdd0819dbdbd960c21b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b6020526040902060010154610e5857600a80546001810182557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b03851690811790915590546000918252600b602052604090912060001990910190555b6001600160a01b0382166000908152600b6020526040902060010154610e7e9082611503565b6001600160a01b0383166000908152600b6020526040902060010155600654610ea79082611503565b6006555050565b6000546201000090046001600160a01b03163314610eff576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03811615801590610f2557506003546001600160a01b03828116911614155b610f61576040805162461bcd60e51b8152602060048201526008602482015267139bdd0819dbdbd960c21b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1681565b6000546201000090046001600160a01b03163314610fe2576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6000805461ff001981166101009182900460ff1615909102179055565b6001546001600160a01b0316331461104c576040805162461bcd60e51b815260206004820152600b60248201526a2737ba1031b932b0ba37b960a91b604482015290519081900360640190fd5b60005460ff161561109a576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b6001600160a01b0382166110f5576040805162461bcd60e51b815260206004820152601760248201527f43616e27742073657420746f2061646472657373283029000000000000000000604482015290519081900360640190fd5b80611138576040805162461bcd60e51b815260206004820152600e60248201526d05447452063616e277420626520360941b604482015290519081900360640190fd5b6000805460ff19166001179055600280546001600160a01b039093166001600160a01b031990931692909217909155600555565b60085481565b60095481565b600a818154811061118857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546201000090046001600160a01b031633146111f3576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381161580159061121f57506000546001600160a01b03828116620100009092041614155b611266576040805162461bcd60e51b815260206004820152601360248201527213dddb995c9cda1a5c081a5b98dbdc9c9958dd606a1b604482015290519081900360640190fd5b600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6002546001600160a01b031681565b60075481565b6003546001600160a01b031681565b6000826112c357506000611310565b828202828482816112d057fe5b041461130d5760405162461bcd60e51b81526004018080602001828103825260218152602001806117b66021913960400191505060405180910390fd5b90505b92915050565b600061130d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116b9565b600061130d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061175b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106114165780518252601f1990920191602091820191016113f7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611478576040519150601f19603f3d011682016040523d82523d6000602084013e61147d565b606091505b50915091508180156114ab5750805115806114ab57508080602001905160208110156114a857600080fd5b50515b6114fc576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b60008282018381101561130d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b602083106115e15780518252601f1990920191602091820191016115c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611643576040519150601f19603f3d011682016040523d82523d6000602084013e611648565b606091505b5091509150818015611676575080511580611676575080806020019051602081101561167357600080fd5b50515b6116b15760405162461bcd60e51b81526004018080602001828103825260248152602001806117d76024913960400191505060405180910390fd5b505050505050565b600081836117455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561170a5781810151838201526020016116f2565b50505050905090810190601f1680156117375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161175157fe5b0495945050505050565b600081848411156117ad5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561170a5781810151838201526020016116f2565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212201c1b86fe53c3673ac98c81233b17add33387be575ff8d8d88829042ad985002664736f6c63430007060033

Deployed ByteCode Sourcemap

22029:7065:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22431:16;;;:::i;:::-;;;;;;;;;;;;;;;;22188:33;;;:::i;:::-;;;;-1:-1:-1;;;;;22188:33:0;;;;;;;;;;;;;;22098:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;28198:211;;;;;;;;;;;;;;;;-1:-1:-1;28198:211:0;-1:-1:-1;;;;;28198:211:0;;:::i;:::-;;26521:888;;;:::i;28512:142::-;;;;;;;;;;;;;;;;-1:-1:-1;28512:142:0;;:::i;25259:511::-;;;;;;;;;;;;;;;;-1:-1:-1;25259:511:0;-1:-1:-1;;;;;25259:511:0;;:::i;27528:239::-;;;;;;;;;;;;;;;;-1:-1:-1;27528:239:0;-1:-1:-1;;;;;27528:239:0;;:::i;22161:20::-;;;:::i;22322:28::-;;;:::i;22840:41::-;;;;;;;;;;;;;;;;-1:-1:-1;22840:41:0;-1:-1:-1;;;;;22840:41:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24456:100;;;:::i;25964:502::-;;;;;;;;;;;;;;;;-1:-1:-1;25964:502:0;;;;;;;:::i;22383:15::-;;;:::i;24710:437::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24710:437:0;;;;;;;;:::i;27879:204::-;;;;;;;;;;;;;;;;-1:-1:-1;27879:204:0;-1:-1:-1;;;;;27879:204:0;;:::i;22128:20::-;;;:::i;28720:79::-;;;:::i;24060:333::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24060:333:0;;;;;;;;:::i;22524:24::-;;;:::i;22604:18::-;;;:::i;22659:23::-;;;;;;;;;;;;;;;;-1:-1:-1;22659:23:0;;:::i;28904:187::-;;;;;;;;;;;;;;;;-1:-1:-1;28904:187:0;-1:-1:-1;;;;;28904:187:0;;:::i;22234:22::-;;;:::i;22468:23::-;;;:::i;22263:27::-;;;:::i;22431:16::-;;;;:::o;22188:33::-;;;-1:-1:-1;;;;;22188:33:0;;:::o;22098:23::-;;;;;;:::o;28198:211::-;22945:5;;;;;-1:-1:-1;;;;;22945:5:0;22931:10;:19;22923:41;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28284:28:0;::::1;::::0;;::::1;::::0;:63:::1;;-1:-1:-1::0;28334:13:0::1;::::0;-1:-1:-1;;;;;28316:31:0;;::::1;28334:13:::0;::::1;28316:31;;28284:63;28276:84;;;::::0;;-1:-1:-1;;;28276:84:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28276:84:0;;;;;;;;;;;;;::::1;;28371:13;:30:::0;;-1:-1:-1;;;;;;28371:30:0::1;-1:-1:-1::0;;;;;28371:30:0;;;::::1;::::0;;;::::1;::::0;;28198:211::o;26521:888::-;26560:10;23323:1;23294:16;;;:7;:16;;;;;:26;;;23286:64;;;;;-1:-1:-1;;;23286:64:0;;;;;;;;;;;;-1:-1:-1;;;23286:64:0;;;;;;;;;;;;;;;23534:8:::1;::::0;::::1;::::0;::::1;;;23533:9;23525:36;;;::::0;;-1:-1:-1;;;23525:36:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23525:36:0;;;;;;;;;;;;;::::1;;26622:3:::2;;26603:15;:22;;26595:58;;;::::0;;-1:-1:-1;;;26595:58:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;26687:1;26672:12;;:16;26664:58;;;::::0;;-1:-1:-1;;;26664:58:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;26772:12;::::0;26749:10:::2;26741:19;::::0;;;:7:::2;:19;::::0;;;;:28:::2;;::::0;:43:::2;26733:79;;;::::0;;-1:-1:-1;;;26733:79:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;26873:10;26833:18;26865:19:::0;;;:7:::2;:19;::::0;;;;:28:::2;;::::0;26862:300:::2;;26964:12;::::0;26938:10:::2;26930:19;::::0;;;:7:::2;:19;::::0;;;;:29:::2;;::::0;:58:::2;::::0;26982:5:::2;::::0;26930:47:::2;::::0;:33:::2;:47::i;:::-;:51:::0;::::2;:58::i;:::-;26914:74;;26862:300;;;27130:10;27122:19;::::0;;;:7:::2;:19;::::0;;;;:27:::2;::::0;::::2;::::0;27087:28:::2;::::0;;::::2;::::0;27069:12:::2;::::0;27036:114:::2;::::0;27122:27;27037:79:::2;::::0;:45:::2;::::0;27122:27;;27037:31:::2;:45::i;:79::-;27036:85:::0;::::2;:114::i;:::-;27020:130;;26862:300;27210:12;::::0;27182:68:::2;::::0;-1:-1:-1;;;;;27210:12:0::2;27224:10;27236:13:::0;27182:27:::2;:68::i;:::-;27302:12;::::0;27279:10:::2;27271:19;::::0;;;:7:::2;:19;::::0;;;;:28:::2;::::0;::::2;:43:::0;;;;27355:27:::2;;::::0;:46:::2;::::0;27387:13;27355:31:::2;:46::i;:::-;27333:10;27325:19;::::0;;;:7:::2;:19;::::0;;;;:27:::2;;:76:::0;-1:-1:-1;;26521:888:0:o;28512:142::-;22945:5;;;;;-1:-1:-1;;;;;22945:5:0;22931:10;:19;22923:41;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;;;;28575:9;;;::::1;::::0;:24:::1;;;28596:3;;28588:4;:11;;28575:24;28567:50;;;::::0;;-1:-1:-1;;;28567:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28567:50:0;;;;;;;;;;;;;::::1;;28628:3;:10:::0;28512:142::o;25259:511::-;22945:5;;;;;-1:-1:-1;;;;;22945:5:0;22931:10;:19;22923:41;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25332:20:0;::::1;::::0;;::::1;::::0;:53:::1;;-1:-1:-1::0;;;;;;25356:15:0;::::1;25384:1;25356:15:::0;;;:7:::1;:15;::::0;;;;:25:::1;;::::0;:29;;25332:53:::1;25324:75;;;::::0;;-1:-1:-1;;;25324:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25324:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25436:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:25:::1;;::::0;25427:4:::1;::::0;:35:::1;::::0;:8:::1;:35::i;:::-;25420:4;:42:::0;-1:-1:-1;;;;;25494:15:0;::::1;25473:18;25494:15:::0;;;:7:::1;:15;::::0;;;;:26;25555:6:::1;25562:13:::0;;25494:26;;25473:18;-1:-1:-1;;25562:15:0;;;25555:23;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25599:6:::1;:21:::0;;-1:-1:-1;;;;;25555:23:0;;::::1;::::0;-1:-1:-1;25555:23:0;;25606:13;;25599:21;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:37:::0;;-1:-1:-1;;;;;;25599:37:0::1;-1:-1:-1::0;;;;;25599:37:0;;::::1;;::::0;;25647:22;;::::1;::::0;;:7:::1;:22:::0;;;;;;:49;;;25717:6:::1;:12:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;25717:12:0;;;;;-1:-1:-1;;;;;;25717:12:0::1;::::0;;;;;;;;-1:-1:-1;;;;;25747:15:0;;;::::1;::::0;;:7:::1;:15:::0;;;-1:-1:-1;;25747:15:0;;;25740:22;;;25717:12:::1;25740:22:::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;25259:511::o;27528:239::-;22945:5;;;;;-1:-1:-1;;;;;22945:5:0;22931:10;:19;22923:41;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27608:21:0;::::1;27600:42;;;::::0;;-1:-1:-1;;;27600:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27600:42:0;;;;;;;;;;;;;::::1;;27691:12;::::0;27714:44:::1;::::0;;-1:-1:-1;;;27714:44:0;;27752:4:::1;27714:44;::::0;::::1;::::0;;;27663:96:::1;::::0;-1:-1:-1;;;;;27691:12:0::1;::::0;27705:7;;27691:12;;27714:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;27691:12;27714:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27714:44:0;27663:27:::1;:96::i;:::-;27528:239:::0;:::o;22161:20::-;;;;;;-1:-1:-1;;;;;22161:20:0;;:::o;22322:28::-;;;-1:-1:-1;;;;;22322:28:0;;:::o;22840:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24456:100::-;24535:6;:13;;24456:100::o;25964:502::-;23172:13;;-1:-1:-1;;;;;23172:13:0;23158:10;:27;23150:58;;;;;-1:-1:-1;;;23150:58:0;;;;;;;;;;;;-1:-1:-1;;;23150:58:0;;;;;;;;;;;;;;;23534:8:::1;::::0;::::1;::::0;::::1;;;23533:9;23525:36;;;::::0;;-1:-1:-1;;;23525:36:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23525:36:0;;;;;;;;;;;;;::::1;;26074:12:::0;;;::::2;::::0;:29:::2;;-1:-1:-1::0;26090:13:0;;::::2;26074:29;:59;;;;-1:-1:-1::0;26107:12:0::2;::::0;-1:-1:-1;;;;;26107:12:0::2;:26:::0;::::2;26074:59;26066:80;;;::::0;;-1:-1:-1;;;26066:80:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;26066:80:0;;;;;;;;;;;;;::::2;;26180:5;26165:12;;:20;26157:55;;;::::0;;-1:-1:-1;;;26157:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;26157:55:0;;;;;;;;;;;;;::::2;;26265:12;::::0;26233:81:::2;::::0;-1:-1:-1;;;;;26265:12:0::2;26279:10;26299:4;26306:7:::0;26233:31:::2;:81::i;:::-;26349:11;::::0;:24:::2;::::0;26365:7;26349:15:::2;:24::i;:::-;26335:11;:38:::0;26399:12:::2;::::0;:26:::2;::::0;26416:8;26399:16:::2;:26::i;:::-;26384:12;:41:::0;26445:6:::2;::::0;:13:::2;::::0;26456:1:::2;26445:10;:13::i;:::-;26436:6;:22:::0;-1:-1:-1;;25964:502:0:o;22383:15::-;;;;:::o;24710:437::-;22945:5;;;;;-1:-1:-1;;;;;22945:5:0;22931:10;:19;22923:41;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24803:20:0;::::1;::::0;;::::1;::::0;:38:::1;;-1:-1:-1::0;24827:14:0;;::::1;24803:38;24795:59;;;::::0;;-1:-1:-1;;;24795:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24795:59:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24878:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:25:::1;;::::0;24875:139:::1;;24924:6;:19:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;24924:19:0::1;-1:-1:-1::0;;;;;24924:19:0;::::1;::::0;;::::1;::::0;;;24987:13;;-1:-1:-1;24958:15:0;;;:7:::1;24924:19;24958:15:::0;;;;;-1:-1:-1;;24987:15:0;;;24958:44;;24875:139:::1;-1:-1:-1::0;;;;;25062:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:25:::1;;::::0;:40:::1;::::0;25092:9;25062:29:::1;:40::i;:::-;-1:-1:-1::0;;;;;25034:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:25:::1;;:68:::0;25120:4:::1;::::0;:19:::1;::::0;25129:9;25120:8:::1;:19::i;:::-;25113:4;:26:::0;-1:-1:-1;;24710:437:0:o;27879:204::-;22945:5;;;;;-1:-1:-1;;;;;22945:5:0;22931:10;:19;22923:41;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27963:27:0;::::1;::::0;;::::1;::::0;:60:::1;;-1:-1:-1::0;28011:12:0::1;::::0;-1:-1:-1;;;;;27994:29:0;;::::1;28011:12:::0;::::1;27994:29;;27963:60;27955:81;;;::::0;;-1:-1:-1;;;27955:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27955:81:0;;;;;;;;;;;;;::::1;;28047:12;:28:::0;;-1:-1:-1;;;;;;28047:28:0::1;-1:-1:-1::0;;;;;28047:28:0;;;::::1;::::0;;;::::1;::::0;;27879:204::o;22128:20::-;;;;;;;;;:::o;28720:79::-;22945:5;;;;;-1:-1:-1;;;;;22945:5:0;22931:10;:19;22923:41;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;;;;28783:8:::1;::::0;;-1:-1:-1;;28771:20:0;::::1;28783:8;::::0;;;::::1;;;28782:9;28771:20:::0;;::::1;;::::0;;28720:79::o;24060:333::-;23057:7;;-1:-1:-1;;;;;23057:7:0;23035:10;:30;23027:54;;;;;-1:-1:-1;;;23027:54:0;;;;;;;;;;;;-1:-1:-1;;;23027:54:0;;;;;;;;;;;;;;;23427:11:::1;::::0;::::1;;23426:12;23418:44;;;::::0;;-1:-1:-1;;;23418:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23418:44:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24189:22:0;::::2;24181:58;;;::::0;;-1:-1:-1;;;24181:58:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;24258:9:::0;24250:36:::2;;;::::0;;-1:-1:-1;;;24250:36:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;24250:36:0;;;;;;;;;;;;;::::2;;24307:11;:18:::0;;-1:-1:-1;;24307:18:0::2;24321:4;24307:18;::::0;;24346:7:::2;:18:::0;;-1:-1:-1;;;;;24346:18:0;;::::2;-1:-1:-1::0;;;;;;24346:18:0;;::::2;::::0;;;::::2;::::0;;;24375:3:::2;:10:::0;24060:333::o;22524:24::-;;;;:::o;22604:18::-;;;;:::o;22659:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22659:23:0;;-1:-1:-1;22659:23:0;:::o;28904:187::-;22945:5;;;;;-1:-1:-1;;;;;22945:5:0;22931:10;:19;22923:41;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;-1:-1:-1;;;22923:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28986:23:0;::::1;::::0;;::::1;::::0;:45:::1;;-1:-1:-1::0;29026:5:0::1;::::0;-1:-1:-1;;;;;29013:18:0;;::::1;29026:5:::0;;;::::1;;29013:18;;28986:45;28978:77;;;::::0;;-1:-1:-1;;;28978:77:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28978:77:0;;;;;;;;;;;;;::::1;;29066:5;:17:::0;;-1:-1:-1;;;;;29066:17:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;29066:17:0;;::::1;::::0;;;::::1;::::0;;28904:187::o;22234:22::-;;;-1:-1:-1;;;;;22234:22:0;;:::o;22468:23::-;;;;:::o;22263:27::-;;;-1:-1:-1;;;;;22263:27:0;;:::o;5924:471::-;5982:7;6227:6;6223:47;;-1:-1:-1;6257:1:0;6250:8;;6223:47;6294:5;;;6298:1;6294;:5;:1;6318:5;;;;;:10;6310:56;;;;-1:-1:-1;;;6310:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6386:1;-1:-1:-1;5924:471:0;;;;;:::o;6871:132::-;6929:7;6956:39;6960:1;6963;6956:39;;;;;;;;;;;;;;;;;:3;:39::i;5034:136::-;5092:7;5119:43;5123:1;5126;5119:43;;;;;;;;;;;;;;;;;:3;:43::i;20480:361::-;20675:45;;;-1:-1:-1;;;;;20675:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20675:45:0;-1:-1:-1;;;20675:45:0;;;20664:57;;;;20629:12;;;;20664:10;;;;20675:45;20664:57;;;20675:45;20664:57;;20675:45;20664:57;;;;;;;;;;-1:-1:-1;;20664:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20628:93;;;;20740:7;:57;;;;-1:-1:-1;20752:11:0;;:16;;:44;;;20783:4;20772:24;;;;;;;;;;;;;;;-1:-1:-1;20772:24:0;20752:44;20732:101;;;;;-1:-1:-1;;;20732:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20480:361;;;;;:::o;4570:181::-;4628:7;4660:5;;;4684:6;;;;4676:46;;;;;-1:-1:-1;;;4676:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20849:402;21074:51;;;-1:-1:-1;;;;;21074:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21074:51:0;-1:-1:-1;;;21074:51:0;;;21063:63;;;;21028:12;;;;21063:10;;;;21074:51;21063:63;;;21074:51;21063:63;;21074:51;21063:63;;;;;;;;;;-1:-1:-1;;21063:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21027:99;;;;21145:7;:57;;;;-1:-1:-1;21157:11:0;;:16;;:44;;;21188:4;21177:24;;;;;;;;;;;;;;;-1:-1:-1;21177:24:0;21157:44;21137:106;;;;-1:-1:-1;;;21137:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20849:402;;;;;;:::o;7499:278::-;7585:7;7620:12;7613:5;7605:28;;;;-1:-1:-1;;;7605:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7644:9;7660:1;7656;:5;;;;;;;7499:278;-1:-1:-1;;;;;7499:278:0:o;5473:192::-;5559:7;5595:12;5587:6;;;;5579:29;;;;-1:-1:-1;;;5579:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5631:5:0;;;5473:192::o

Swarm Source

ipfs://1c1b86fe53c3673ac98c81233b17add33387be575ff8d8d88829042ad9850026
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.