Contract 0x8c274d48a4e81f4ab9aceb439cd0c14ea0c70184 2

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xa599709ac3e72bcd06a52cd21404bdf52e05bd0f3e9e5dcf288da858b4a56bafClaim Token433364502023-05-30 17:46:3421 hrs 40 mins ago0xab4e1205c95cd4269ee3ea2cca869cb168e144df IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.010597502557 161.151785363
0xffe047f15b1b2399903a89685ee5001b57d8656972ba8ed1941ada1c74475b48Claim Token432768032023-05-29 5:31:182 days 9 hrs ago0x3223439b42792b387402d27d1a1762b89c18ada8 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.010859220186 165.131615803
0x6163c8a44559176ca5ebdcd9e55b2b988f4d65f69f667b1dd1d8970764e44715Claim Token430505422023-05-23 12:12:168 days 3 hrs ago0x8bf6ba35091ac9238bd0dca34e18951a30aeeefc IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.013426806566 162.040122207
0x5f4fc7c89a0af05f0b30aa28f330e7424c088eda5eaf1b90583434aaf6795ee0Claim Token429998682023-05-22 3:54:549 days 11 hrs ago0xe079d24fb5a7a6f92bf54ebe9785a45c544dd419 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.011740241436 141.685973337
0xafa45d797e1e3b31386039d6ba894cde7e555d6ca308a1be43857bdadec701d0Claim Token429350142023-05-20 12:46:0111 days 2 hrs ago0x950360d53f538b01e69f9dadd994ab21eacdf0e9 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.011275282082136.074656146
0x70005ad2cea6279ced14739de2914e35b511e1acf5e3bcdbad653f26a5f7bb5bClaim Token427371642023-05-15 14:04:0016 days 1 hr ago0xf784c620f5cfefc56abaeb6e510440a830e3835b IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.013080387233 157.859393841
0xe616ab4dea171396d8ca4c5f2bcea1487eb81c8e6cc66def1fa4d90c597cf2cbClaim Token427116432023-05-14 22:49:5716 days 16 hrs ago0xd5f4a1ae6e9c9248962153817aba03e578a980be IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.00772708619117.502565202
0x231b6a8d3deeb0fed2d8d013788f24f0e5a04a1984241d52f506223f7ace7563Claim Token425806962023-05-11 16:29:2119 days 22 hrs ago0xc753e2adc4d472e38dfca3f231a8f912a0a29dba IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.012010720115 182.641993213
0x7b8e1669551fd7d7f5df55519d3135f9fed81be79085b0e1db27cadc5e3025bfClaim Token425420652023-05-10 17:26:4020 days 21 hrs ago0x977f383c566c2b0b17cf62aeca2647fd3e9dc92b IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.065772461617 1,000.174292022
0x6b4ae9347c7f592aee91571f0acb6e79fcf6a0c1f747f292da5f4171b53eebf6Claim Token422469932023-05-03 7:21:1028 days 8 hrs ago0x3cb18d8c214f346e9520d9c91cbaf70a4afe704d IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.017761116615 270.085865713
0x1db018cffa1eed39fac341c1f4f6deb9c58a029deff79f1e74f9382904552d87Claim Token421701602023-05-01 8:55:3030 days 6 hrs ago0xe0806357b488c18526ad0e7c14820d07a24f61df IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.024483484533 295.47657563
0x9b766ee0c0f5b99a2bddf539b9ac18e0dcc33bf6747af4882351d3c188e06194Claim Token421430552023-04-30 16:36:4330 days 22 hrs ago0x0023d593cf41c379ec3d37f0ac424eb2ba9f6e91 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.02136251831 324.850873785
0xf98df00515d50dd71167b96f86298328583ed3bb9c76e740323e4684c467e467Claim Token419804992023-04-26 12:35:1135 days 2 hrs ago 0xvirtuoso.x  IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.038324432396 582.783601166
0x07cbd187b238c5583a1c71778f67b632bd772ecd20c2aaaa76a2637b00c6a42cClaim Token419785472023-04-26 11:25:1635 days 4 hrs ago0x31b7db454f1c72b84f2e593353c6b5d75a6cf77b IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.023965757141 364.437236992
0x8d1f07a271e94eaa8d063e9cd6b47884501178feac61060373d98c00d4db86fbClaim Token416769382023-04-18 15:51:5042 days 23 hrs ago0x5390df33299386b50bf04d8408a2390bcb97ec90 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.010515294862 325.611409613
0xdf910814ef4ae1f76608ecd5d4af5d118b29943572f1520c3466eb0e2b204914Claim Token416769382023-04-18 15:51:5042 days 23 hrs ago0x5390df33299386b50bf04d8408a2390bcb97ec90 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.014904639048 226.648607047
0x7469c786564544f69f0a4d871551217b0b1c2f0395e63a2a60c7a170243256c4Claim Token415568722023-04-15 10:28:4046 days 4 hrs ago0xc0164829f1fc7d42eb74b7ecb63a0eaa16098b08 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.010581271597160.90496795
0x13c04287bc80a975e8dc2915f6406be4cb5d912f8e2c78f55a16b5f34860ea9dClaim Token412830002023-04-08 8:23:2153 days 7 hrs ago0x710a2acbc6f1872f51922acfa3b93a521833ec67 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.007479555024 113.738462379
0x5711720603ae6999db901382857b1290000bd884f10c3edff864fdd79d68d164Claim Token410581842023-04-02 13:31:1859 days 1 hr ago0x9361e8891d175222f4d54d3bb20e641b3e84257f IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.01077208324130.001849363
0x2aa341e5fa502a206fcc883d10b7c20efea6d837169ced1e703bd44b411a12d6Claim Token410527762023-04-02 10:13:3059 days 5 hrs ago0xf58e0e6c1124d6b16627a5ab1c971f8e9f57e9e5 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.007243313977 110.14604367
0x93c549e32fcf713c2f56f284fe7f2365d163e721225363883795705f827f5272Claim Token410136422023-04-01 9:58:1860 days 5 hrs ago0xbb6655d85e4a177cc07a6afce7699ac10885c2e9 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.005980341193 90.940545211
0xc41aa8f62ac7154761f662f80632f9f986f220fdd1a62cf331d6d5a71fc82a92Claim Token409343522023-03-30 9:53:2262 days 5 hrs ago0xf9828548468f966a02042f8280b44f1d092d1b54 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.010177616338 154.766751402
0x99b411b61333b0b4e632d6a3df2e9a78b57b2b16d352d97ccb58ca9505220093Claim Token408002962023-03-26 20:23:3865 days 19 hrs ago0x7d6ad93fd4e373da672114999d8cfdd4b7d90d23 IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.012832563994109.895128022
0x0ef1bcffde4f01024de277cee467400c3c22a820061c991b1ab124ac7aef15eaClaim Token405418402023-03-19 21:59:4072 days 17 hrs ago0x1a8f0fb92e4e05991d3e487d0f7c580fa979c3cf IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.00429214278765.268818708
0x343272f10f94d8df33bd062d0d2da00a1c67bee4e9f7dac13d7c01229393f50bClaim Token404871592023-03-18 11:05:4174 days 4 hrs ago0x4af783e7b31069506d44e90bcc5c007293f540dd IN  0x8c274d48a4e81f4ab9aceb439cd0c14ea0c701840 MATIC0.015992173 193
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x55b400d2aec072fb996367c38f31c3827d182aa9c14f1d32dbd8b08e68725851241801702022-01-26 8:57:35490 days 6 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.