ETH Price: $3,161.39 (-4.07%)
Gas: 4 Gwei

Contract

0xa8b9e7718c73329AFd7B99F089C853a80B8127Be
 

Overview

ETH Balance

0.072910603667326941 ETH

Eth Value

$230.50 (@ $3,161.39/ETH)

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Value
Transfer202307852024-07-04 4:32:5917 hrs ago1720067579IN
0xa8b9e771...80B8127Be
0.04 ETH0.000380633.0237228
Transfer202246872024-07-03 8:07:2337 hrs ago1719994043IN
0xa8b9e771...80B8127Be
0.01736056 ETH0.000692264.68942971
Transfer202203462024-07-02 17:33:472 days ago1719941627IN
0xa8b9e771...80B8127Be
0.04483 ETH0.00085266.6410561
Transfer202174232024-07-02 7:45:232 days ago1719906323IN
0xa8b9e771...80B8127Be
0.02 ETH0.000527134.18746665
Transfer202174162024-07-02 7:43:592 days ago1719906239IN
0xa8b9e771...80B8127Be
0.02 ETH0.000565374.49127016
Transfer202174012024-07-02 7:40:592 days ago1719906059IN
0xa8b9e771...80B8127Be
0.099 ETH0.00103554.82764862
Transfer202167032024-07-02 5:19:472 days ago1719897587IN
0xa8b9e771...80B8127Be
0.01741026 ETH0.000492043.83262395
Transfer202117252024-07-01 12:39:473 days ago1719837587IN
0xa8b9e771...80B8127Be
0.02885118 ETH0.000884096.88683639
Transfer201739192024-06-26 5:57:358 days ago1719381455IN
0xa8b9e771...80B8127Be
0.02507634 ETH0.000592414.61443023
Transfer201736392024-06-26 5:01:358 days ago1719378095IN
0xa8b9e771...80B8127Be
0.00625939 ETH0.00033263.06095297
Transfer201551412024-06-23 14:59:3511 days ago1719154775IN
0xa8b9e771...80B8127Be
0.01501672 ETH0.000492163.83385267
Transfer201457542024-06-22 7:28:2312 days ago1719041303IN
0xa8b9e771...80B8127Be
0.00081 ETH0.000056222.3950752
Transfer201213922024-06-18 21:42:3516 days ago1718746955IN
0xa8b9e771...80B8127Be
0.0197376 ETH0.0015927612.40720719
Transfer201213782024-06-18 21:39:4716 days ago1718746787IN
0xa8b9e771...80B8127Be
0.0187 ETH0.0015316210.37526944
Transfer201213462024-06-18 21:33:2316 days ago1718746403IN
0xa8b9e771...80B8127Be
0.03778791 ETH0.0017614513.99376443
Transfer201206142024-06-18 19:05:1116 days ago1718737511IN
0xa8b9e771...80B8127Be
0.02881 ETH0.001078978.40496932
Transfer201183162024-06-18 11:22:3516 days ago1718709755IN
0xa8b9e771...80B8127Be
0.01232017 ETH0.001136889.03189815
Transfer201176612024-06-18 9:09:3516 days ago1718701775IN
0xa8b9e771...80B8127Be
0.01365432 ETH0.001048258.32779054
Transfer201098382024-06-17 6:52:1117 days ago1718607131IN
0xa8b9e771...80B8127Be
0.04259237 ETH0.000455913.0881783
Transfer201098282024-06-17 6:50:1117 days ago1718607011IN
0xa8b9e771...80B8127Be
0.13161313 ETH0.000634222.95916809
Transfer201098002024-06-17 6:44:3517 days ago1718606675IN
0xa8b9e771...80B8127Be
0.13519918 ETH0.000504792.66498605
Transfer200993882024-06-15 19:49:2319 days ago1718480963IN
0xa8b9e771...80B8127Be
0.03802031 ETH0.000455163.54537721
Transfer200979292024-06-15 14:56:3519 days ago1718463395IN
0xa8b9e771...80B8127Be
0.009 ETH0.00087626.96095493
Transfer200662562024-06-11 4:39:3523 days ago1718080775IN
0xa8b9e771...80B8127Be
0.00629121 ETH0.000936827.30937054
Transfer200548382024-06-09 14:23:1125 days ago1717942991IN
0xa8b9e771...80B8127Be
0.0817 ETH0.0013038410.35747817
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
202307852024-07-04 4:32:5917 hrs ago1720067579
0xa8b9e771...80B8127Be
0.0396 ETH
202246872024-07-03 8:07:2337 hrs ago1719994043
0xa8b9e771...80B8127Be
0.00948207 ETH
202246872024-07-03 8:07:2337 hrs ago1719994043
0xa8b9e771...80B8127Be
0.00770488 ETH
202203462024-07-02 17:33:472 days ago1719941627
0xa8b9e771...80B8127Be
0.0443817 ETH
202174232024-07-02 7:45:232 days ago1719906323
0xa8b9e771...80B8127Be
0.0198 ETH
202174162024-07-02 7:43:592 days ago1719906239
0xa8b9e771...80B8127Be
0.0198 ETH
202174012024-07-02 7:40:592 days ago1719906059
0xa8b9e771...80B8127Be
0.00095089 ETH
202174012024-07-02 7:40:592 days ago1719906059
0xa8b9e771...80B8127Be
0.0000391 ETH
202174012024-07-02 7:40:592 days ago1719906059
0xa8b9e771...80B8127Be
0.00099 ETH
202174012024-07-02 7:40:592 days ago1719906059
0xa8b9e771...80B8127Be
0.09306 ETH
202174012024-07-02 7:40:592 days ago1719906059
0xa8b9e771...80B8127Be
0.00297 ETH
202167032024-07-02 5:19:472 days ago1719897587
0xa8b9e771...80B8127Be
0.01723616 ETH
202117252024-07-01 12:39:473 days ago1719837587
0xa8b9e771...80B8127Be
0.02856267 ETH
201739192024-06-26 5:57:358 days ago1719381455
0xa8b9e771...80B8127Be
0.02482557 ETH
201736392024-06-26 5:01:358 days ago1719378095
0xa8b9e771...80B8127Be
0.0061968 ETH
201551412024-06-23 14:59:3511 days ago1719154775
0xa8b9e771...80B8127Be
0.01486655 ETH
201213922024-06-18 21:42:3516 days ago1718746955
0xa8b9e771...80B8127Be
0.01954023 ETH
201213782024-06-18 21:39:4716 days ago1718746787
0xa8b9e771...80B8127Be
0.01516107 ETH
201213782024-06-18 21:39:4716 days ago1718746787
0xa8b9e771...80B8127Be
0.00335192 ETH
201213462024-06-18 21:33:2316 days ago1718746403
0xa8b9e771...80B8127Be
0.03741003 ETH
201206142024-06-18 19:05:1116 days ago1718737511
0xa8b9e771...80B8127Be
0.0285219 ETH
201183162024-06-18 11:22:3516 days ago1718709755
0xa8b9e771...80B8127Be
0.01219697 ETH
201176612024-06-18 9:09:3516 days ago1718701775
0xa8b9e771...80B8127Be
0.01351778 ETH
201098382024-06-17 6:52:1117 days ago1718607131
0xa8b9e771...80B8127Be
0.01467451 ETH
201098382024-06-17 6:52:1117 days ago1718607131
0xa8b9e771...80B8127Be
0.02749194 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SUS

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-03-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)
/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error AddressInsufficientBalance(address account);

    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedInnerCall();

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        if (address(this).balance < amount) {
            revert AddressInsufficientBalance(address(this));
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert FailedInnerCall();
        }
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason or custom error, it is bubbled
     * up by this function (like regular Solidity function calls). However, if
     * the call reverted with no returned reason, this function reverts with a
     * {FailedInnerCall} error.
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
     * unsuccessful call.
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            // only check if target is a contract if the call was successful and the return data is empty
            // otherwise we already know that it was a contract
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
     * revert reason or with a default {FailedInnerCall} error.
     */
    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    /**
     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
     */
    function _revert(bytes memory returndata) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert FailedInnerCall();
        }
    }
}

// Защита от повторных вызовов)
// Защита для отправки средств)
// Смарт-Контракт СУС - (У) - Система Утилизации Средств)
// Полностью автоматизирован - без каких-либо вмешиваний со стороны - даже владельца)
// Вы делаете оплату на смарт-контракт и через какое-то время вам частями посылается 150% вашей оплаты вместе с комиссией)
// Работает цепочка очереди - всем по очереди выплачиваются 150% от суммы собственного платежа)
// Каждый вошедший через автоматизацию платит тем - кто вначале очереди - и до каждого из вас рано или поздно дойдёт очередь выплаты вам 150%)
// Есть комиссия - 3% владельцу - 1% на баланс смарт-контракта для бонусов - 5% по 1% на 5 уровней ниже)
// Со временеи на балансе в итоге будут набираться излишние суммы - и они будут добавляться к первым 2-м уровням в виде бонуса +0.5 эфира)
contract SUS is ReentrancyGuard {

    address public owner;   //владелец)
    using Address for address payable;  // безопасные выплаты)
    // события утилизации при получении и отправлении средств)
    event UtilizeReceived(address indexed sender, uint256 value, uint256 indexed level, uint256 queueIndex);
    event UtilizePayOut(address indexed sender, uint256 value, uint256 indexed level, uint256 queueIndex);
    // структура луча из адреса и утилизационных средств)
    struct Ray {
        address addr;
        uint256 utilize;
    }
    // структура внутренних данных диапазонов луча)
    struct Range {
        // первый и последний индекс для диапазона очереди)
        uint256 firstIndex;
        uint256 lastIndex;        
        uint256 leftFunds;  // оставшиеся средства до 150%        
        uint256 currentFunds;   // текущие средства
    }

    mapping(uint256 => Range) public range; // диапазон - массив внутренних данных)
    // луч - массив уровней и в нём внутренний массив очереди этого уровня по индексам)
    mapping(uint256 => mapping(uint256 => Ray)) public ray;
    
    uint256 public sumFunds; // максимальное значение текущих средств)

    // Константы)
    uint256 private constant MAX_ITERATIONS = 24;    
    uint256 private constant GAS_PER_ITERATION = 178000;
    uint256 private constant GAS_MIN_UTILIZE = 387100;
    uint256 private constant GAS_POSSIBLE_FEE = 141780;
    uint256 private constant BONUS = 500000000 gwei;

    // конструктор - выполнится только 1 раз при создании смарт-контракта)
    constructor() {
        // устанавливаем владельца как создателя контракта)
        owner = msg.sender;
        // сразу устанавливаем первые индексы и владельца в начало очереди)
        ray[0][0] = Ray(msg.sender, 8710000 gwei);
        ray[1][0] = Ray(msg.sender, 18781000 gwei);
        ray[2][0] = Ray(msg.sender, 87178000 gwei);
        ray[3][0] = Ray(msg.sender, 871780000 gwei);
        ray[4][0] = Ray(msg.sender, 8717800000 gwei);
        ray[5][0] = Ray(msg.sender, 87178000000 gwei);
        ray[6][0] = Ray(msg.sender, 871780000000 gwei);
        ray[7][0] = Ray(msg.sender, 8717800000000 gwei);
        ray[8][0] = Ray(msg.sender, 87178000000000 gwei);
        ray[9][0] = Ray(msg.sender, 871780000000000 gwei);        
        // выставляем последние индексы (не нужно если изначально в очереди только 1 участник)
        // range[0].lastIndex = 1;        
    }

    // функция для приема утилизационных транзакций)
    receive() external payable nonReentrant {

        // если меньше или равно 0.000871 ether - тогда просто оставляем средства на балансе)
        if (msg.value > 871000 gwei) {

            uint256 level;  // уровни)
            uint256 gasPrice = tx.gasprice;     // цена газа)
            // сразу же к утилизированным средствам добавляем примерную комиссию по газу)
            // это делается для того - чтобы сразу сменить уровень на +1 - если утилизация + комиссия выходит за рамки диапазона уровня)
            uint256 value = msg.value + GAS_PER_ITERATION * gasPrice;   // значение утилизированных средств плюс комиссия)

            // распеределение по уровням от 0.000871 ether и кратное 10)
            if (value <= 8710000 gwei) { // (0) > 0.000871 <= 0.00871 ether (4-0)
                level = 0;
            } else if (value <= 87100000 gwei) {    // (1) > 0.00871 <= 0.0871 ether (5-0)
                level = 1;
            } else if (value <= 871000000 gwei) {   // (2) > 0.0871 <= 0.871 ether (6-0)
                level = 2;
            } else if (value <= 8710000000 gwei) {  // (3) > 0.871 <= 8.71 ether (7-0)
                level = 3;
            } else if (value <= 87100000000 gwei) { // (4) > 8.71 <= 87.1 ether (8-0)
                level = 4;
            } else if (value <= 871000000000 gwei) {    // (5) > 87.1 <= 871 ether (9-0)
                level = 5;
            } else if (value <= 8710000000000 gwei) {   // (6) > 871 <= 8710 ether (10-0)
                level = 6;
            } else if (value <= 87100000000000 gwei) {  // (7) > 8710 <= 87100 ether (11-0)
                level = 7;
            } else if (value <= 871000000000000 gwei) { // (8) > 87100 <= 871000 ether (12-0)
                level = 8;
            } else if (value <= 8710000000000000 gwei) {    // (9) > 871000 <= 8710000 ether (13-0)
                level = 9;
            } else {
                // возврат средств - если они выше 8710000 ether)
                address payable receiver = payable(msg.sender);
                Address.sendValue(receiver, msg.value); // безопасно отправляем значение)
                return;
            }

            // если утилизация слишком мала с учётом возможной комиссии - тогда просто добавляем в очередь и завершаем)
            if (msg.value < GAS_MIN_UTILIZE * gasPrice) { // 387100)
                
                // возможная комиссия - на добавление в очередь)
                uint256 gasCost = GAS_POSSIBLE_FEE * gasPrice;  // 141780)
                
                range[level].lastIndex++;
                // утилизационные средства плюс возможная комиссия)
                value = msg.value + gasCost;
                // в текущие средства данного уровня добавляем только утилизационные средства)
                range[level].currentFunds += msg.value;
                // в общую сумму добавляем только утилизационные средства)
                sumFunds += msg.value;

                // в конец очереди текущего уровня добавляем этого участника)
                ray[level][range[level].lastIndex] = Ray({addr: msg.sender, utilize: value});
                emit UtilizeReceived(msg.sender, value, level, range[level].lastIndex);

            } else {    //в остальных случаях выполняем логику)
                processUtilize(msg.value, gasPrice, level);
            }

        }

    }
    
    // процесс утилизации и распределения в очередь)
    function processUtilize(uint256 value, uint256 gasPrice, uint256 level) private {

        uint256 maxCounter;
        uint256 counterIt = 1;        
        uint256 gasCost;
        uint256 levelFee;
        uint256 lowerLevelFee = value / 100; // комиссия 1%)
        uint256 ownerFee = 0;
        uint256 leftCur = range[level].leftFunds; // сколько осталось доплатить первому участнику в очереди)
        uint256 valueMsg;

        // убираем комиссию владельцу 3% на 0 и 1 уровне)
        if (level > 1) {
            ownerFee = calculateFee(value, 3); // 3% переводится владельцу)
            address payable _owner = payable(owner);
            Address.sendValue(_owner, ownerFee);
        }        

        // на 5 нижних уровней к текущим средствам прибавляется значение 1% - с условием - чтобы не спуститься ниже нулевого уровня)
        for (uint256 i = 1; i <= 5 && level > 1 && level >= i; i++) {
            levelFee += lowerLevelFee;
            range[level - i].currentFunds += lowerLevelFee;
        }

        // текущая сумма всех вложений - минус комиссия владельцу и 1% на баланс)
        sumFunds += value - lowerLevelFee - ownerFee;

        // текущие средства плюс оставшаяся сумма)        
        value = value - ownerFee - levelFee - lowerLevelFee;       

        // вычисляем максимальное количество итераций)
        maxCounter = calculateMaxIterations(msg.value, gasPrice);
        range[level].lastIndex++;   // инкремент крайнего индекса)

        // добавляем текущие средства)
        value += range[level].currentFunds;
        // вычисляем примерную комиссию - точную вычислить не получится - из-за ранего добавления в очередь)
        gasCost = maxCounter * GAS_PER_ITERATION * gasPrice;

        // комиссия по газу плюс утилизационные средства)
        valueMsg = msg.value + gasCost;

        // добавляем в конец очереди текущего участника)
        ray[level][range[level].lastIndex] = Ray({addr: msg.sender, utilize: valueMsg});
        // записываем в событие UtilizeReceived)
        emit UtilizeReceived(msg.sender, valueMsg, level, range[level].lastIndex);

        // если остаток был весь погашен предыдущему участнику - то для нового выставляем опять 150% его значению утилизации)
        if (leftCur == 0) {
            leftCur = calculate150(ray[level][range[level].firstIndex].utilize);
        }

        // выплата по текущему уровню и ниже по уровням - пока хватает итераций)
        for (uint256 i = 0; level >= i && counterIt < maxCounter; i++) {
            
            // процесс выплаты)
            counterIt = processPayOut(value, sumFunds, leftCur, level - i, counterIt, maxCounter);

            if (counterIt < maxCounter && level - i > 0) {
                uint256 levelDown = level - i - 1;
                value = range[levelDown].currentFunds;
                leftCur = range[levelDown].leftFunds;
            }

        }

    }

    // процесс выплаты)
    function processPayOut(uint256 value, uint256 sumF, uint256 leftCur, uint256 level, uint256 counterIt, uint256 maxCounter) private returns (uint256) {

        // делаем выплату всем участникам по очереди - по текущему индексу - с учётом текущих средств)
        while (counterIt < maxCounter && value >= leftCur && range[level].firstIndex <= range[level].lastIndex) {

            value -= leftCur;
            // проверка - чтобы не выйти за границы диапазона и тем самым не выдало ошибку)
            sumF = sumF > leftCur ? sumF - leftCur : 0;

            // если индекс равен 0 или 1 и газ больше или равно 1 эфиру - избыток газа идёт в бонус)
            // бонус первым двум уровням +0.5 эфира - и не важно сколько было утилизировано)
            if ( level < 2 && address(this).balance > sumF  && address(this).balance - sumF >= 1 ether) {
                leftCur += BONUS; // 0.5 ether
            }

            address payable receivePayout = payable(ray[level][range[level].firstIndex].addr);
            Address.sendValue(receivePayout, leftCur); // безопасно отправляем значение)
            // записываем в событие UtilizePayOut)
            emit UtilizePayOut(ray[level][range[level].firstIndex].addr, leftCur, level, range[level].firstIndex);
            // если выплата произведена полностью - то удаляем первого участника из очереди)
            delete ray[level][range[level].firstIndex];
            range[level].firstIndex++;
            counterIt++;

            // сразу же задаём оставшееся значение следующему участнику равное 150% его утилизационным средствам)
            // и проверка - что в очереди кто-то есть ещё)
            if (range[level].firstIndex <= range[level].lastIndex) {
                leftCur = calculate150(ray[level][range[level].firstIndex].utilize);
            } else {
                leftCur = 0;
            }

        }

        // если общая сумма выплаты участнику ещё не достигла 150% - всё равно выплачиваем часть - что осталось в текущих средствах)
        if (counterIt < maxCounter && range[level].firstIndex <= range[level].lastIndex) {

            // проверка - чтобы не выйти за границы диапазона и тем самым не выдало ошибку)
            leftCur = leftCur > value ? leftCur - value : 0;

            // проверка - чтобы не выйти за границы диапазона и тем самым не выдало ошибку)
            sumF = sumF > value ? sumF - value : 0;

            // первым двум уровням бонус +0.5 эфир - если на балансе выше 1 эфира)
            if (level < 2 && address(this).balance > sumF && address(this).balance - sumF >= 1 ether) {
                value += BONUS;
            }

            address payable receivePayoutLeft = payable(ray[level][range[level].firstIndex].addr);
            Address.sendValue(receivePayoutLeft, value); // безопасно отправляем средства)                    
            // записываем в событие UtilizePayOut)
            emit UtilizePayOut(ray[level][range[level].firstIndex].addr, value, level, range[level].firstIndex);

            // если первому в очереди произведена вся оплата и оставшихся средств не осталось - тогда удаляем его из очереди)
            if (leftCur == 0) {
                delete ray[level][range[level].firstIndex];
                range[level].firstIndex++;
            }

            counterIt++;
            value = 0;  // так как мы выплатили остаток - который был в текущих средствах - поэтому значение делаем в ноль)

        }

        // сохраняем нужные нам значения по текущим и оставшимся средствам)
        range[level].currentFunds = value;        
        range[level].leftFunds = leftCur;

        sumFunds = sumF;    // Общая сумма текущих средств по всем уровням)
        return counterIt;   // возвращаем текущее количество пройденных итераций)

    }

    // баланс)
    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

    function calculateFee(uint256 value, uint256 fee) private pure returns (uint256) {
        return value * fee / 100; // расчёт комиссии fee%)
    }
    // вычисление 150%)
    function calculate150(uint256 value) private pure returns (uint256) {
        return value * 3 / 2; // 150%)
    }
    // вычисление количества итераций)
    function calculateMaxIterations(uint256 value, uint256 gasPrice) private pure returns (uint256) {

        // проверка - чтобы не было деления на ноль)
        if (gasPrice == 0) {
            gasPrice = 1 gwei;
        }
        
        uint256 gasAmount = value / gasPrice;
        uint256 possibleIterations = gasAmount / GAS_PER_ITERATION;
        
        if (possibleIterations > MAX_ITERATIONS) {
            return MAX_ITERATIONS;  // возвращаем максимум)
        } else {
            return possibleIterations;  // возвращаем сколько получилось)
        }

    }

    // считывание данных из массива по индексу уровня и заданному диапазону)
    function getRayData(uint8 level, uint256 from, uint256 to) public view returns (Ray[] memory) {
        
        if (from < range[level].firstIndex || from > range[level].lastIndex) {
            from = range[level].firstIndex;
        }
        if (to < range[level].firstIndex || to > range[level].lastIndex) {
            to = range[level].lastIndex;
        }
        
        Ray[] memory result;
        // проверка на присутствие данных)
        if (from <= to) {

            result = new Ray[](to - from + 1);
            for (uint256 i = from; i <= to; i++) {
                result[i - from] = ray[level][i];
            }
        }
        
        return result;

    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"queueIndex","type":"uint256"}],"name":"UtilizePayOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"queueIndex","type":"uint256"}],"name":"UtilizeReceived","type":"event"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"level","type":"uint8"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getRayData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"utilize","type":"uint256"}],"internalType":"struct SUS.Ray[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"range","outputs":[{"internalType":"uint256","name":"firstIndex","type":"uint256"},{"internalType":"uint256","name":"lastIndex","type":"uint256"},{"internalType":"uint256","name":"leftFunds","type":"uint256"},{"internalType":"uint256","name":"currentFunds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ray","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"utilize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561000f575f80fd5b5060015f819055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001661ef1b2e7fe600081525060035f8081526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016642b9385186d00081525060035f600181526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001670135b7edda3aa00081525060035f600281526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001670c192f4a864a400081525060035f600381526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016778fbd8e93ee6800081525060035f600481526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016804b9d6791c7501000081525060035f600581526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001682f4260bb1c920a000081525060035f600681526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016901d897c74f1db464000081525060035f600781526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001691275edc917290be8000081525060035f600881526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200169b89b49dae79a7710000081525060035f600981526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050611893806106db5f395ff3fe608060405260043610610058575f3560e01c80630509736a1461038a57806312065fe0146103b45780638da5cb5b146103de578063a5e45bec14610408578063b144735414610447578063e0dad48e1461048457610386565b36610386576100656104c0565b6603182b7d99700034111561037b575f803a90505f816202b7506100899190611336565b346100949190611377565b9050661ef1b2e7fe600081116100ac575f92506101af565b67013570fd0fefc00081116100c457600192506101ae565b670c1669e29f5d800081116100dc57600292506101ad565b6778e022da39a7000081116100f457600392506101ac565b6804b8c15c8640860000811161010d57600492506101ab565b682f378d9d3e853c0000811161012657600592506101aa565b6901d82b88247134580000811161014057600692506101a9565b691271b3516c6c0b700000811161015a57600792506101a8565b69b871012e3c3872600000811161017457600892506101a7565b6a07346a0bce5a3477c00000811161018f57600992506101a6565b5f33905061019d8134610504565b5050505061037c565b5b5b5b5b5b5b5b5b5b816205e81c6101be9190611336565b34101561036b575f82620229d46101d59190611336565b905060025f8581526020019081526020015f206001015f8154809291906101fb906113aa565b9190505550803461020c9190611377565b91503460025f8681526020019081526020015f206003015f8282546102319190611377565b925050819055503460045f8282546102499190611377565b9250508190555060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381525060035f8681526020019081526020015f205f60025f8881526020019081526020015f206001015481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050833373ffffffffffffffffffffffffffffffffffffffff167f8da6079118b0ce3f5582a9c72f90ac18e8edbc7574d515416fb63127ae987aa58460025f8981526020019081526020015f206001015460405161035d929190611400565b60405180910390a350610377565b6103763483856105ed565b5b5050505b5b6103846109d3565b005b5f80fd5b348015610395575f80fd5b5061039e6109dc565b6040516103ab9190611427565b60405180910390f35b3480156103bf575f80fd5b506103c86109e2565b6040516103d59190611427565b60405180910390f35b3480156103e9575f80fd5b506103f26109e9565b6040516103ff919061147f565b60405180910390f35b348015610413575f80fd5b5061042e600480360381019061042991906114c6565b610a0e565b60405161043e94939291906114f1565b60405180910390f35b348015610452575f80fd5b5061046d60048036038101906104689190611534565b610a3a565b60405161047b929190611572565b60405180910390f35b34801561048f575f80fd5b506104aa60048036038101906104a591906115cf565b610a84565b6040516104b79190611712565b60405180910390f35b60025f54036104fb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b8047101561054957306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610540919061147f565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161056e9061175f565b5f6040518083038185875af1925050503d805f81146105a8576040519150601f19603f3d011682016040523d82523d5f602084013e6105ad565b606091505b50509050806105e8576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f80600190505f805f60648861060391906117a0565b90505f8060025f8981526020019081526020015f206002015490505f6001891115610666576106338b6003610c90565b92505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506106648185610504565b505b5f600190505b6005811115801561067d575060018a115b80156106895750808a10155b156106e457848661069a9190611377565b95508460025f838d6106ac91906117d0565b81526020019081526020015f206003015f8282546106ca9190611377565b9250508190555080806106dc906113aa565b91505061066c565b5082848c6106f291906117d0565b6106fc91906117d0565b60045f82825461070c9190611377565b925050819055508385848d61072191906117d0565b61072b91906117d0565b61073591906117d0565b9a50610741348b610cb1565b975060025f8a81526020019081526020015f206001015f815480929190610767906113aa565b919050555060025f8a81526020019081526020015f20600301548b61078c9190611377565b9a50896202b7508961079e9190611336565b6107a89190611336565b955085346107b69190611377565b905060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018281525060035f8b81526020019081526020015f205f60025f8d81526020019081526020015f206001015481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050883373ffffffffffffffffffffffffffffffffffffffff167f8da6079118b0ce3f5582a9c72f90ac18e8edbc7574d515416fb63127ae987aa58360025f8e81526020019081526020015f20600101546040516108c5929190611400565b60405180910390a35f82036109165761091360035f8b81526020019081526020015f205f60025f8d81526020019081526020015f205f015481526020019081526020015f2060010154610d02565b91505b5f5b808a1015801561092757508888105b156109c5576109478c60045485848e61094091906117d0565b8c8e610d23565b9750888810801561096257505f818b61096091906117d0565b115b156109b2575f6001828c61097691906117d0565b61098091906117d0565b905060025f8281526020019081526020015f20600301549c5060025f8281526020019081526020015f20600201549350505b80806109bd906113aa565b915050610918565b505050505050505050505050565b60015f81905550565b60045481565b5f47905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002602052805f5260405f205f91509050805f0154908060010154908060020154908060030154905084565b6003602052815f5260405f20602052805f5260405f205f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b606060025f8560ff1681526020019081526020015f205f0154831080610ac0575060025f8560ff1681526020019081526020015f206001015483115b15610adf5760025f8560ff1681526020019081526020015f205f015492505b60025f8560ff1681526020019081526020015f205f0154821080610b19575060025f8560ff1681526020019081526020015f206001015482115b15610b395760025f8560ff1681526020019081526020015f206001015491505b6060828411610c855760018484610b5091906117d0565b610b5a9190611377565b67ffffffffffffffff811115610b7357610b72611803565b5b604051908082528060200260200182016040528015610bac57816020015b610b996112d2565b815260200190600190039081610b915790505b5090505f8490505b838111610c835760035f8760ff1681526020019081526020015f205f8281526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481525050828683610c5491906117d0565b81518110610c6557610c64611830565b5b60200260200101819052508080610c7b906113aa565b915050610bb4565b505b809150509392505050565b5f60648284610c9f9190611336565b610ca991906117a0565b905092915050565b5f808203610cc157633b9aca0091505b5f8284610cce91906117a0565b90505f6202b75082610ce091906117a0565b90506018811115610cf657601892505050610cfc565b80925050505b92915050565b5f6002600383610d129190611336565b610d1c91906117a0565b9050919050565b5f5b8183108015610d345750848710155b8015610d67575060025f8581526020019081526020015f206001015460025f8681526020019081526020015f205f015411155b15611010578487610d7891906117d0565b9650848611610d87575f610d94565b8486610d9391906117d0565b5b9550600284108015610da557508547115b8015610dc45750670de0b6b3a76400008647610dc191906117d0565b10155b15610de0576706f05b59d3b2000085610ddd9190611377565b94505b5f60035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610e428187610504565b8460035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe84e0fd5edba79fb3db9d2fd1d70b4139d687c85f3498ed88fbbc8f40e63d6998860025f8a81526020019081526020015f205f0154604051610ef2929190611400565b60405180910390a360035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055505060025f8681526020019081526020015f205f015f815480929190610f7f906113aa565b91905055508380610f8f906113aa565b94505060025f8681526020019081526020015f206001015460025f8781526020019081526020015f205f01541161100657610fff60035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f2060010154610d02565b955061100a565b5f95505b50610d25565b8183108015611046575060025f8581526020019081526020015f206001015460025f8681526020019081526020015f205f015411155b1561128c57868511611058575f611065565b868561106491906117d0565b5b9450868611611074575f611081565b868661108091906117d0565b5b955060028410801561109257508547115b80156110b15750670de0b6b3a764000086476110ae91906117d0565b10155b156110cd576706f05b59d3b20000876110ca9190611377565b96505b5f60035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061112f8189610504565b8460035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe84e0fd5edba79fb3db9d2fd1d70b4139d687c85f3498ed88fbbc8f40e63d6998a60025f8a81526020019081526020015f205f01546040516111df929190611400565b60405180910390a35f86036112795760035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055505060025f8681526020019081526020015f205f015f815480929190611273906113aa565b91905055505b8380611284906113aa565b9450505f9750505b8660025f8681526020019081526020015f20600301819055508460025f8681526020019081526020015f2060020181905550856004819055508290509695505050505050565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61134082611300565b915061134b83611300565b925082820261135981611300565b915082820484148315176113705761136f611309565b5b5092915050565b5f61138182611300565b915061138c83611300565b92508282019050808211156113a4576113a3611309565b5b92915050565b5f6113b482611300565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113e6576113e5611309565b5b600182019050919050565b6113fa81611300565b82525050565b5f6040820190506114135f8301856113f1565b61142060208301846113f1565b9392505050565b5f60208201905061143a5f8301846113f1565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61146982611440565b9050919050565b6114798161145f565b82525050565b5f6020820190506114925f830184611470565b92915050565b5f80fd5b6114a581611300565b81146114af575f80fd5b50565b5f813590506114c08161149c565b92915050565b5f602082840312156114db576114da611498565b5b5f6114e8848285016114b2565b91505092915050565b5f6080820190506115045f8301876113f1565b61151160208301866113f1565b61151e60408301856113f1565b61152b60608301846113f1565b95945050505050565b5f806040838503121561154a57611549611498565b5b5f611557858286016114b2565b9250506020611568858286016114b2565b9150509250929050565b5f6040820190506115855f830185611470565b61159260208301846113f1565b9392505050565b5f60ff82169050919050565b6115ae81611599565b81146115b8575f80fd5b50565b5f813590506115c9816115a5565b92915050565b5f805f606084860312156115e6576115e5611498565b5b5f6115f3868287016115bb565b9350506020611604868287016114b2565b9250506040611615868287016114b2565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6116518161145f565b82525050565b61166081611300565b82525050565b604082015f82015161167a5f850182611648565b50602082015161168d6020850182611657565b50505050565b5f61169e8383611666565b60408301905092915050565b5f602082019050919050565b5f6116c08261161f565b6116ca8185611629565b93506116d583611639565b805f5b838110156117055781516116ec8882611693565b97506116f7836116aa565b9250506001810190506116d8565b5085935050505092915050565b5f6020820190508181035f83015261172a81846116b6565b905092915050565b5f81905092915050565b50565b5f61174a5f83611732565b91506117558261173c565b5f82019050919050565b5f6117698261173f565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6117aa82611300565b91506117b583611300565b9250826117c5576117c4611773565b5b828204905092915050565b5f6117da82611300565b91506117e583611300565b92508282039050818111156117fd576117fc611309565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212204f429a2d14414e41026acf0b9257f707e440273532c3b341f8eee15b42b4a90764736f6c63430008160033

Deployed Bytecode

0x608060405260043610610058575f3560e01c80630509736a1461038a57806312065fe0146103b45780638da5cb5b146103de578063a5e45bec14610408578063b144735414610447578063e0dad48e1461048457610386565b36610386576100656104c0565b6603182b7d99700034111561037b575f803a90505f816202b7506100899190611336565b346100949190611377565b9050661ef1b2e7fe600081116100ac575f92506101af565b67013570fd0fefc00081116100c457600192506101ae565b670c1669e29f5d800081116100dc57600292506101ad565b6778e022da39a7000081116100f457600392506101ac565b6804b8c15c8640860000811161010d57600492506101ab565b682f378d9d3e853c0000811161012657600592506101aa565b6901d82b88247134580000811161014057600692506101a9565b691271b3516c6c0b700000811161015a57600792506101a8565b69b871012e3c3872600000811161017457600892506101a7565b6a07346a0bce5a3477c00000811161018f57600992506101a6565b5f33905061019d8134610504565b5050505061037c565b5b5b5b5b5b5b5b5b5b816205e81c6101be9190611336565b34101561036b575f82620229d46101d59190611336565b905060025f8581526020019081526020015f206001015f8154809291906101fb906113aa565b9190505550803461020c9190611377565b91503460025f8681526020019081526020015f206003015f8282546102319190611377565b925050819055503460045f8282546102499190611377565b9250508190555060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381525060035f8681526020019081526020015f205f60025f8881526020019081526020015f206001015481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050833373ffffffffffffffffffffffffffffffffffffffff167f8da6079118b0ce3f5582a9c72f90ac18e8edbc7574d515416fb63127ae987aa58460025f8981526020019081526020015f206001015460405161035d929190611400565b60405180910390a350610377565b6103763483856105ed565b5b5050505b5b6103846109d3565b005b5f80fd5b348015610395575f80fd5b5061039e6109dc565b6040516103ab9190611427565b60405180910390f35b3480156103bf575f80fd5b506103c86109e2565b6040516103d59190611427565b60405180910390f35b3480156103e9575f80fd5b506103f26109e9565b6040516103ff919061147f565b60405180910390f35b348015610413575f80fd5b5061042e600480360381019061042991906114c6565b610a0e565b60405161043e94939291906114f1565b60405180910390f35b348015610452575f80fd5b5061046d60048036038101906104689190611534565b610a3a565b60405161047b929190611572565b60405180910390f35b34801561048f575f80fd5b506104aa60048036038101906104a591906115cf565b610a84565b6040516104b79190611712565b60405180910390f35b60025f54036104fb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b8047101561054957306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610540919061147f565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161056e9061175f565b5f6040518083038185875af1925050503d805f81146105a8576040519150601f19603f3d011682016040523d82523d5f602084013e6105ad565b606091505b50509050806105e8576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f80600190505f805f60648861060391906117a0565b90505f8060025f8981526020019081526020015f206002015490505f6001891115610666576106338b6003610c90565b92505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506106648185610504565b505b5f600190505b6005811115801561067d575060018a115b80156106895750808a10155b156106e457848661069a9190611377565b95508460025f838d6106ac91906117d0565b81526020019081526020015f206003015f8282546106ca9190611377565b9250508190555080806106dc906113aa565b91505061066c565b5082848c6106f291906117d0565b6106fc91906117d0565b60045f82825461070c9190611377565b925050819055508385848d61072191906117d0565b61072b91906117d0565b61073591906117d0565b9a50610741348b610cb1565b975060025f8a81526020019081526020015f206001015f815480929190610767906113aa565b919050555060025f8a81526020019081526020015f20600301548b61078c9190611377565b9a50896202b7508961079e9190611336565b6107a89190611336565b955085346107b69190611377565b905060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018281525060035f8b81526020019081526020015f205f60025f8d81526020019081526020015f206001015481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050883373ffffffffffffffffffffffffffffffffffffffff167f8da6079118b0ce3f5582a9c72f90ac18e8edbc7574d515416fb63127ae987aa58360025f8e81526020019081526020015f20600101546040516108c5929190611400565b60405180910390a35f82036109165761091360035f8b81526020019081526020015f205f60025f8d81526020019081526020015f205f015481526020019081526020015f2060010154610d02565b91505b5f5b808a1015801561092757508888105b156109c5576109478c60045485848e61094091906117d0565b8c8e610d23565b9750888810801561096257505f818b61096091906117d0565b115b156109b2575f6001828c61097691906117d0565b61098091906117d0565b905060025f8281526020019081526020015f20600301549c5060025f8281526020019081526020015f20600201549350505b80806109bd906113aa565b915050610918565b505050505050505050505050565b60015f81905550565b60045481565b5f47905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002602052805f5260405f205f91509050805f0154908060010154908060020154908060030154905084565b6003602052815f5260405f20602052805f5260405f205f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b606060025f8560ff1681526020019081526020015f205f0154831080610ac0575060025f8560ff1681526020019081526020015f206001015483115b15610adf5760025f8560ff1681526020019081526020015f205f015492505b60025f8560ff1681526020019081526020015f205f0154821080610b19575060025f8560ff1681526020019081526020015f206001015482115b15610b395760025f8560ff1681526020019081526020015f206001015491505b6060828411610c855760018484610b5091906117d0565b610b5a9190611377565b67ffffffffffffffff811115610b7357610b72611803565b5b604051908082528060200260200182016040528015610bac57816020015b610b996112d2565b815260200190600190039081610b915790505b5090505f8490505b838111610c835760035f8760ff1681526020019081526020015f205f8281526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481525050828683610c5491906117d0565b81518110610c6557610c64611830565b5b60200260200101819052508080610c7b906113aa565b915050610bb4565b505b809150509392505050565b5f60648284610c9f9190611336565b610ca991906117a0565b905092915050565b5f808203610cc157633b9aca0091505b5f8284610cce91906117a0565b90505f6202b75082610ce091906117a0565b90506018811115610cf657601892505050610cfc565b80925050505b92915050565b5f6002600383610d129190611336565b610d1c91906117a0565b9050919050565b5f5b8183108015610d345750848710155b8015610d67575060025f8581526020019081526020015f206001015460025f8681526020019081526020015f205f015411155b15611010578487610d7891906117d0565b9650848611610d87575f610d94565b8486610d9391906117d0565b5b9550600284108015610da557508547115b8015610dc45750670de0b6b3a76400008647610dc191906117d0565b10155b15610de0576706f05b59d3b2000085610ddd9190611377565b94505b5f60035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610e428187610504565b8460035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe84e0fd5edba79fb3db9d2fd1d70b4139d687c85f3498ed88fbbc8f40e63d6998860025f8a81526020019081526020015f205f0154604051610ef2929190611400565b60405180910390a360035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055505060025f8681526020019081526020015f205f015f815480929190610f7f906113aa565b91905055508380610f8f906113aa565b94505060025f8681526020019081526020015f206001015460025f8781526020019081526020015f205f01541161100657610fff60035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f2060010154610d02565b955061100a565b5f95505b50610d25565b8183108015611046575060025f8581526020019081526020015f206001015460025f8681526020019081526020015f205f015411155b1561128c57868511611058575f611065565b868561106491906117d0565b5b9450868611611074575f611081565b868661108091906117d0565b5b955060028410801561109257508547115b80156110b15750670de0b6b3a764000086476110ae91906117d0565b10155b156110cd576706f05b59d3b20000876110ca9190611377565b96505b5f60035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061112f8189610504565b8460035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe84e0fd5edba79fb3db9d2fd1d70b4139d687c85f3498ed88fbbc8f40e63d6998a60025f8a81526020019081526020015f205f01546040516111df929190611400565b60405180910390a35f86036112795760035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055505060025f8681526020019081526020015f205f015f815480929190611273906113aa565b91905055505b8380611284906113aa565b9450505f9750505b8660025f8681526020019081526020015f20600301819055508460025f8681526020019081526020015f2060020181905550856004819055508290509695505050505050565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61134082611300565b915061134b83611300565b925082820261135981611300565b915082820484148315176113705761136f611309565b5b5092915050565b5f61138182611300565b915061138c83611300565b92508282019050808211156113a4576113a3611309565b5b92915050565b5f6113b482611300565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113e6576113e5611309565b5b600182019050919050565b6113fa81611300565b82525050565b5f6040820190506114135f8301856113f1565b61142060208301846113f1565b9392505050565b5f60208201905061143a5f8301846113f1565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61146982611440565b9050919050565b6114798161145f565b82525050565b5f6020820190506114925f830184611470565b92915050565b5f80fd5b6114a581611300565b81146114af575f80fd5b50565b5f813590506114c08161149c565b92915050565b5f602082840312156114db576114da611498565b5b5f6114e8848285016114b2565b91505092915050565b5f6080820190506115045f8301876113f1565b61151160208301866113f1565b61151e60408301856113f1565b61152b60608301846113f1565b95945050505050565b5f806040838503121561154a57611549611498565b5b5f611557858286016114b2565b9250506020611568858286016114b2565b9150509250929050565b5f6040820190506115855f830185611470565b61159260208301846113f1565b9392505050565b5f60ff82169050919050565b6115ae81611599565b81146115b8575f80fd5b50565b5f813590506115c9816115a5565b92915050565b5f805f606084860312156115e6576115e5611498565b5b5f6115f3868287016115bb565b9350506020611604868287016114b2565b9250506040611615868287016114b2565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6116518161145f565b82525050565b61166081611300565b82525050565b604082015f82015161167a5f850182611648565b50602082015161168d6020850182611657565b50505050565b5f61169e8383611666565b60408301905092915050565b5f602082019050919050565b5f6116c08261161f565b6116ca8185611629565b93506116d583611639565b805f5b838110156117055781516116ec8882611693565b97506116f7836116aa565b9250506001810190506116d8565b5085935050505092915050565b5f6020820190508181035f83015261172a81846116b6565b905092915050565b5f81905092915050565b50565b5f61174a5f83611732565b91506117558261173c565b5f82019050919050565b5f6117698261173f565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6117aa82611300565b91506117b583611300565b9250826117c5576117c4611773565b5b828204905092915050565b5f6117da82611300565b91506117e583611300565b92508282039050818111156117fd576117fc611309565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212204f429a2d14414e41026acf0b9257f707e440273532c3b341f8eee15b42b4a90764736f6c63430008160033

Deployed Bytecode Sourcemap

11116:18170:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2411:21;:19;:21::i;:::-;14504:11:::1;14492:9;:23;14488:3921;;;14534:13;14580:16:::0;14599:11:::1;14580:30;;15039:13;15087:8;12809:6;15067:28;;;;:::i;:::-;15055:9;:40;;;;:::i;:::-;15039:56;;15327:12;15318:5;:21;15314:1513;;15409:1;15401:9;;15314:1513;;;15445:13;15436:5;:22;15432:1395;;15529:1;15521:9;;15432:1395;;;15565:14;15556:5;:23;15552:1275;;15647:1;15639:9;;15552:1275;;;15683:15;15674:5;:24;15670:1157;;15763:1;15755:9;;15670:1157;;;15799:16;15790:5;:25;15786:1041;;15878:1;15870:9;;15786:1041;;;15914:17;15905:5;:26;15901:926;;15996:1;15988:9;;15901:926;;;16032:18;16023:5;:27;16019:808;;16115:1;16107:9;;16019:808;;;16151:19;16142:5;:28;16138:689;;16236:1;16228:9;;16138:689;;;16272:20;16263:5;:29;16259:568;;16359:1;16351:9;;16259:568;;;16395:21;16386:5;:30;16382:445;;16488:1;16480:9;;16382:445;;;16622:24;16657:10;16622:46;;16687:38;16705:8;16715:9;16687:17;:38::i;:::-;16805:7;;;;;;16382:445;16259:568;16138:689;16019:808;15901:926;15786:1041;15670:1157;15552:1275;15432:1395;15314:1513;17085:8;12865:6;17067:26;;;;:::i;:::-;17055:9;:38;17051:1345;;;17246:15;17283:8;12922:6;17264:27;;;;:::i;:::-;17246:45;;17340:5;:12;17346:5;17340:12;;;;;;;;;;;:22;;;:24;;;;;;;;;:::i;:::-;;;;;;17515:7;17503:9;:19;;;;:::i;:::-;17495:27;;17732:9;17703:5;:12;17709:5;17703:12;;;;;;;;;;;:25;;;:38;;;;;;;:::i;:::-;;;;;;;;17896:9;17884:8;;:21;;;;;;;:::i;:::-;;;;;;;;18092:39;;;;;;;;18103:10;18092:39;;;;;;18124:5;18092:39;;::::0;18055:3:::1;:10;18059:5;18055:10;;;;;;;;;;;:34;18066:5;:12;18072:5;18066:12;;;;;;;;;;;:22;;;18055:34;;;;;;;;;;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18190:5;18171:10;18155:65;;;18183:5;18197;:12;18203:5;18197:12;;;;;;;;;;;:22;;;18155:65;;;;;;;:::i;:::-;;;;;;;;17095:1143;17051:1345;;;18338:42;18353:9;18364:8;18374:5;18338:14;:42::i;:::-;17051:1345;14517:3892;;;14488:3921;2443:1;2455:20:::0;:18;:20::i;:::-;11116:18170;;;;;12573:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27236:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11157:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12237:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;12506:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28547:730;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2491:315;1789:1;2620:7;;:18;2616:88;;2662:30;;;;;;;;;;;;;;2616:88;1789:1;2781:7;:17;;;;2491:315::o;4834:340::-;4944:6;4920:21;:30;4916:111;;;5009:4;4974:41;;;;;;;;;;;:::i;:::-;;;;;;;;4916:111;5040:12;5058:9;:14;;5080:6;5058:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5039:52;;;5107:7;5102:65;;5138:17;;;;;;;;;;;;;;5102:65;4905:269;4834:340;;:::o;18523:3688::-;18616:18;18645:17;18665:1;18645:21;;18685:15;18711:16;18738:21;18770:3;18762:5;:11;;;;:::i;:::-;18738:35;;18808:16;18839:15;18857:5;:12;18863:5;18857:12;;;;;;;;;;;:22;;;18839:40;;18997:16;19130:1;19122:5;:9;19118:228;;;19159:22;19172:5;19179:1;19159:12;:22::i;:::-;19148:33;;19245:22;19278:5;;;;;;;;;;;19245:39;;19299:35;19317:6;19325:8;19299:17;:35::i;:::-;19133:213;19118:228;19601:9;19613:1;19601:13;;19596:173;19621:1;19616;:6;;:19;;;;;19634:1;19626:5;:9;19616:19;:33;;;;;19648:1;19639:5;:10;;19616:33;19596:173;;;19683:13;19671:25;;;;;:::i;:::-;;;19744:13;19711:5;:16;19725:1;19717:5;:9;;;;:::i;:::-;19711:16;;;;;;;;;;;:29;;;:46;;;;;;;:::i;:::-;;;;;;;;19651:3;;;;;:::i;:::-;;;;19596:173;;;;19955:8;19939:13;19931:5;:21;;;;:::i;:::-;:32;;;;:::i;:::-;19919:8;;:44;;;;;;;:::i;:::-;;;;;;;;20108:13;20097:8;20086;20078:5;:16;;;;:::i;:::-;:27;;;;:::i;:::-;:43;;;;:::i;:::-;20070:51;;20249:43;20272:9;20283:8;20249:22;:43::i;:::-;20236:56;;20303:5;:12;20309:5;20303:12;;;;;;;;;;;:22;;;:24;;;;;;;;;:::i;:::-;;;;;;20470:5;:12;20476:5;20470:12;;;;;;;;;;;:25;;;20461:34;;;;;:::i;:::-;;;20739:8;12809:6;20706:10;:30;;;;:::i;:::-;:41;;;;:::i;:::-;20696:51;;20882:7;20870:9;:19;;;;:::i;:::-;20859:30;;21036:42;;;;;;;;21047:10;21036:42;;;;;;21068:8;21036:42;;;20999:3;:10;21003:5;20999:10;;;;;;;;;;;:34;21010:5;:12;21016:5;21010:12;;;;;;;;;;;:22;;;20999:34;;;;;;;;;;;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21200:5;21178:10;21162:68;;;21190:8;21207:5;:12;21213:5;21207:12;;;;;;;;;;;:22;;;21162:68;;;;;;;:::i;:::-;;;;;;;;21477:1;21466:7;:12;21462:112;;21505:57;21518:3;:10;21522:5;21518:10;;;;;;;;;;;:35;21529:5;:12;21535:5;21529:12;;;;;;;;;;;:23;;;21518:35;;;;;;;;;;;:43;;;21505:12;:57::i;:::-;21495:67;;21462:112;21729:9;21724:478;21753:1;21744:5;:10;;:36;;;;;21770:10;21758:9;:22;21744:36;21724:478;;;21875:73;21889:5;21896:8;;21906:7;21923:1;21915:5;:9;;;;:::i;:::-;21926;21937:10;21875:13;:73::i;:::-;21863:85;;21981:10;21969:9;:22;:39;;;;;22007:1;22003;21995:5;:9;;;;:::i;:::-;:13;21969:39;21965:224;;;22029:17;22061:1;22057;22049:5;:9;;;;:::i;:::-;:13;;;;:::i;:::-;22029:33;;22089:5;:16;22095:9;22089:16;;;;;;;;;;;:29;;;22081:37;;22147:5;:16;22153:9;22147:16;;;;;;;;;;;:26;;;22137:36;;22010:179;21965:224;21782:3;;;;;:::i;:::-;;;;21724:478;;;;18603:3608;;;;;;;;18523:3688;;;:::o;2814:212::-;1746:1;2997:7;:21;;;;2814:212::o;12573:23::-;;;;:::o;27236:99::-;27279:7;27306:21;27299:28;;27236:99;:::o;11157:20::-;;;;;;;;;;;;;:::o;12237:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12506:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28547:730::-;28627:12;28673:5;:12;28679:5;28673:12;;;;;;;;;;;;;:23;;;28666:4;:30;:63;;;;28707:5;:12;28713:5;28707:12;;;;;;;;;;;;;:22;;;28700:4;:29;28666:63;28662:126;;;28753:5;:12;28759:5;28753:12;;;;;;;;;;;;;:23;;;28746:30;;28662:126;28807:5;:12;28813:5;28807:12;;;;;;;;;;;;;:23;;;28802:2;:28;:59;;;;28839:5;:12;28845:5;28839:12;;;;;;;;;;;;;:22;;;28834:2;:27;28802:59;28798:119;;;28883:5;:12;28889:5;28883:12;;;;;;;;;;;;;:22;;;28878:27;;28798:119;28937:19;29050:2;29042:4;:10;29038:196;;29102:1;29095:4;29090:2;:9;;;;:::i;:::-;:13;;;;:::i;:::-;29080:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;29071:33;;29124:9;29136:4;29124:16;;29119:104;29147:2;29142:1;:7;29119:104;;29194:3;:10;29198:5;29194:10;;;;;;;;;;;;;:13;29205:1;29194:13;;;;;;;;;;;29175:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;29186:4;29182:1;:8;;;;:::i;:::-;29175:16;;;;;;;;:::i;:::-;;;;;;;:32;;;;29151:3;;;;;:::i;:::-;;;;29119:104;;;;29038:196;29261:6;29254:13;;;28547:730;;;;;:::o;27343:163::-;27415:7;27456:3;27450;27442:5;:11;;;;:::i;:::-;:17;;;;:::i;:::-;27435:24;;27343:163;;;;:::o;27737:665::-;27824:7;27948:1;27936:8;:13;27932:63;;27977:6;27966:17;;27932:63;28015:17;28043:8;28035:5;:16;;;;:::i;:::-;28015:36;;28062:26;12809:6;28091:9;:29;;;;:::i;:::-;28062:58;;12751:2;28145:18;:35;28141:252;;;12751:2;28197:21;;;;;;28141:252;28301:18;28294:25;;;;27737:665;;;;;:::o;27547:116::-;27606:7;27645:1;27641;27633:5;:9;;;;:::i;:::-;:13;;;;:::i;:::-;27626:20;;27547:116;;;:::o;22258:4948::-;22398:7;22598:2048;22617:10;22605:9;:22;:42;;;;;22640:7;22631:5;:16;;22605:42;:95;;;;;22678:5;:12;22684:5;22678:12;;;;;;;;;;;:22;;;22651:5;:12;22657:5;22651:12;;;;;;;;;;;:23;;;:49;;22605:95;22598:2048;;;22728:7;22719:16;;;;;:::i;:::-;;;22918:7;22911:4;:14;:35;;22945:1;22911:35;;;22935:7;22928:4;:14;;;;:::i;:::-;22911:35;22904:42;;23293:1;23285:5;:9;:41;;;;;23322:4;23298:21;:28;23285:41;:85;;;;;23363:7;23355:4;23331:21;:28;;;;:::i;:::-;:39;;23285:85;23280:156;;;12968:14;23391:16;;;;;:::i;:::-;;;23280:156;23452:29;23492:3;:10;23496:5;23492:10;;;;;;;;;;;:35;23503:5;:12;23509:5;23503:12;;;;;;;;;;;:23;;;23492:35;;;;;;;;;;;:40;;;;;;;;;;;;23452:81;;23548:41;23566:13;23581:7;23548:17;:41::i;:::-;23805:5;23754:3;:10;23758:5;23754:10;;;;;;;;;;;:35;23765:5;:12;23771:5;23765:12;;;;;;;;;;;:23;;;23754:35;;;;;;;;;;;:40;;;;;;;;;;;;23740:96;;;23796:7;23812:5;:12;23818:5;23812:12;;;;;;;;;;;:23;;;23740:96;;;;;;;:::i;:::-;;;;;;;;24017:3;:10;24021:5;24017:10;;;;;;;;;;;:35;24028:5;:12;24034:5;24028:12;;;;;;;;;;;:23;;;24017:35;;;;;;;;;;;;24010:42;;;;;;;;;;;;;;;;;;;;;;;24067:5;:12;24073:5;24067:12;;;;;;;;;;;:23;;;:25;;;;;;;;;:::i;:::-;;;;;;24107:11;;;;;:::i;:::-;;;;24455:5;:12;24461:5;24455:12;;;;;;;;;;;:22;;;24428:5;:12;24434:5;24428:12;;;;;;;;;;;:23;;;:49;24424:209;;24508:57;24521:3;:10;24525:5;24521:10;;;;;;;;;;;:35;24532:5;:12;24538:5;24532:12;;;;;;;;;;;:23;;;24521:35;;;;;;;;;;;:43;;;24508:12;:57::i;:::-;24498:67;;24424:209;;;24616:1;24606:11;;24424:209;22702:1944;22598:2048;;;24903:10;24891:9;:22;:75;;;;;24944:5;:12;24950:5;24944:12;;;;;;;;;;;:22;;;24917:5;:12;24923:5;24917:12;;;;;;;;;;;:23;;;:49;;24891:75;24887:1837;;;25159:5;25149:7;:15;:37;;25185:1;25149:37;;;25177:5;25167:7;:15;;;;:::i;:::-;25149:37;25139:47;;25371:5;25364:4;:12;:31;;25394:1;25364:31;;;25386:5;25379:4;:12;;;;:::i;:::-;25364:31;25357:38;;25556:1;25548:5;:9;:41;;;;;25585:4;25561:21;:28;25548:41;:84;;;;;25625:7;25617:4;25593:21;:28;;;;:::i;:::-;:39;;25548:84;25544:139;;;12968:14;25653;;;;;:::i;:::-;;;25544:139;25699:33;25743:3;:10;25747:5;25743:10;;;;;;;;;;;:35;25754:5;:12;25760:5;25754:12;;;;;;;;;;;:23;;;25743:35;;;;;;;;;;;:40;;;;;;;;;;;;25699:85;;25799:43;25817:17;25836:5;25799:17;:43::i;:::-;26076:5;26027:3;:10;26031:5;26027:10;;;;;;;;;;;:35;26038:5;:12;26044:5;26038:12;;;;;;;;;;;:23;;;26027:35;;;;;;;;;;;:40;;;;;;;;;;;;26013:94;;;26069:5;26083;:12;26089:5;26083:12;;;;;;;;;;;:23;;;26013:94;;;;;;;:::i;:::-;;;;;;;;26357:1;26346:7;:12;26342:139;;26386:3;:10;26390:5;26386:10;;;;;;;;;;;:35;26397:5;:12;26403:5;26397:12;;;;;;;;;;;:23;;;26386:35;;;;;;;;;;;;26379:42;;;;;;;;;;;;;;;;;;;;;;;26440:5;:12;26446:5;26440:12;;;;;;;;;;;:23;;;:25;;;;;;;;;:::i;:::-;;;;;;26342:139;26497:11;;;;;:::i;:::-;;;;26531:1;26523:9;;24968:1756;24887:1837;26896:5;26868;:12;26874:5;26868:12;;;;;;;;;;;:25;;:33;;;;26945:7;26920:5;:12;26926:5;26920:12;;;;;;;;;;;:22;;:32;;;;26976:4;26965:8;:15;;;;27086:9;27079:16;;22258:4948;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:410;316:7;339:20;357:1;339:20;:::i;:::-;334:25;;373:20;391:1;373:20;:::i;:::-;368:25;;428:1;425;421:9;450:30;468:11;450:30;:::i;:::-;439:41;;629:1;620:7;616:15;613:1;610:22;590:1;583:9;563:83;540:139;;659:18;;:::i;:::-;540:139;324:362;276:410;;;;:::o;692:191::-;732:3;751:20;769:1;751:20;:::i;:::-;746:25;;785:20;803:1;785:20;:::i;:::-;780:25;;828:1;825;821:9;814:16;;849:3;846:1;843:10;840:36;;;856:18;;:::i;:::-;840:36;692:191;;;;:::o;889:233::-;928:3;951:24;969:5;951:24;:::i;:::-;942:33;;997:66;990:5;987:77;984:103;;1067:18;;:::i;:::-;984:103;1114:1;1107:5;1103:13;1096:20;;889:233;;;:::o;1128:118::-;1215:24;1233:5;1215:24;:::i;:::-;1210:3;1203:37;1128:118;;:::o;1252:332::-;1373:4;1411:2;1400:9;1396:18;1388:26;;1424:71;1492:1;1481:9;1477:17;1468:6;1424:71;:::i;:::-;1505:72;1573:2;1562:9;1558:18;1549:6;1505:72;:::i;:::-;1252:332;;;;;:::o;1590:222::-;1683:4;1721:2;1710:9;1706:18;1698:26;;1734:71;1802:1;1791:9;1787:17;1778:6;1734:71;:::i;:::-;1590:222;;;;:::o;1818:126::-;1855:7;1895:42;1888:5;1884:54;1873:65;;1818:126;;;:::o;1950:96::-;1987:7;2016:24;2034:5;2016:24;:::i;:::-;2005:35;;1950:96;;;:::o;2052:118::-;2139:24;2157:5;2139:24;:::i;:::-;2134:3;2127:37;2052:118;;:::o;2176:222::-;2269:4;2307:2;2296:9;2292:18;2284:26;;2320:71;2388:1;2377:9;2373:17;2364:6;2320:71;:::i;:::-;2176:222;;;;:::o;2485:117::-;2594:1;2591;2584:12;2731:122;2804:24;2822:5;2804:24;:::i;:::-;2797:5;2794:35;2784:63;;2843:1;2840;2833:12;2784:63;2731:122;:::o;2859:139::-;2905:5;2943:6;2930:20;2921:29;;2959:33;2986:5;2959:33;:::i;:::-;2859:139;;;;:::o;3004:329::-;3063:6;3112:2;3100:9;3091:7;3087:23;3083:32;3080:119;;;3118:79;;:::i;:::-;3080:119;3238:1;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;:::i;:::-;3253:63;;3209:117;3004:329;;;;:::o;3339:553::-;3516:4;3554:3;3543:9;3539:19;3531:27;;3568:71;3636:1;3625:9;3621:17;3612:6;3568:71;:::i;:::-;3649:72;3717:2;3706:9;3702:18;3693:6;3649:72;:::i;:::-;3731;3799:2;3788:9;3784:18;3775:6;3731:72;:::i;:::-;3813;3881:2;3870:9;3866:18;3857:6;3813:72;:::i;:::-;3339:553;;;;;;;:::o;3898:474::-;3966:6;3974;4023:2;4011:9;4002:7;3998:23;3994:32;3991:119;;;4029:79;;:::i;:::-;3991:119;4149:1;4174:53;4219:7;4210:6;4199:9;4195:22;4174:53;:::i;:::-;4164:63;;4120:117;4276:2;4302:53;4347:7;4338:6;4327:9;4323:22;4302:53;:::i;:::-;4292:63;;4247:118;3898:474;;;;;:::o;4378:332::-;4499:4;4537:2;4526:9;4522:18;4514:26;;4550:71;4618:1;4607:9;4603:17;4594:6;4550:71;:::i;:::-;4631:72;4699:2;4688:9;4684:18;4675:6;4631:72;:::i;:::-;4378:332;;;;;:::o;4716:86::-;4751:7;4791:4;4784:5;4780:16;4769:27;;4716:86;;;:::o;4808:118::-;4879:22;4895:5;4879:22;:::i;:::-;4872:5;4869:33;4859:61;;4916:1;4913;4906:12;4859:61;4808:118;:::o;4932:135::-;4976:5;5014:6;5001:20;4992:29;;5030:31;5055:5;5030:31;:::i;:::-;4932:135;;;;:::o;5073:615::-;5148:6;5156;5164;5213:2;5201:9;5192:7;5188:23;5184:32;5181:119;;;5219:79;;:::i;:::-;5181:119;5339:1;5364:51;5407:7;5398:6;5387:9;5383:22;5364:51;:::i;:::-;5354:61;;5310:115;5464:2;5490:53;5535:7;5526:6;5515:9;5511:22;5490:53;:::i;:::-;5480:63;;5435:118;5592:2;5618:53;5663:7;5654:6;5643:9;5639:22;5618:53;:::i;:::-;5608:63;;5563:118;5073:615;;;;;:::o;5694:134::-;5781:6;5815:5;5809:12;5799:22;;5694:134;;;:::o;5834:204::-;5953:11;5987:6;5982:3;5975:19;6027:4;6022:3;6018:14;6003:29;;5834:204;;;;:::o;6044:152::-;6131:4;6154:3;6146:11;;6184:4;6179:3;6175:14;6167:22;;6044:152;;;:::o;6202:108::-;6279:24;6297:5;6279:24;:::i;:::-;6274:3;6267:37;6202:108;;:::o;6316:::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6316:108;;:::o;6470:490::-;6597:4;6592:3;6588:14;6684:4;6677:5;6673:16;6667:23;6703:63;6760:4;6755:3;6751:14;6737:12;6703:63;:::i;:::-;6612:164;6861:4;6854:5;6850:16;6844:23;6880:63;6937:4;6932:3;6928:14;6914:12;6880:63;:::i;:::-;6786:167;6566:394;6470:490;;:::o;6966:259::-;7075:10;7096:86;7178:3;7170:6;7096:86;:::i;:::-;7214:4;7209:3;7205:14;7191:28;;6966:259;;;;:::o;7231:133::-;7321:4;7353;7348:3;7344:14;7336:22;;7231:133;;;:::o;7414:892::-;7573:3;7602:74;7670:5;7602:74;:::i;:::-;7692:106;7791:6;7786:3;7692:106;:::i;:::-;7685:113;;7822:76;7892:5;7822:76;:::i;:::-;7921:7;7952:1;7937:344;7962:6;7959:1;7956:13;7937:344;;;8038:6;8032:13;8065:103;8164:3;8149:13;8065:103;:::i;:::-;8058:110;;8191:80;8264:6;8191:80;:::i;:::-;8181:90;;7997:284;7984:1;7981;7977:9;7972:14;;7937:344;;;7941:14;8297:3;8290:10;;7578:728;;;7414:892;;;;:::o;8312:453::-;8495:4;8533:2;8522:9;8518:18;8510:26;;8582:9;8576:4;8572:20;8568:1;8557:9;8553:17;8546:47;8610:148;8753:4;8744:6;8610:148;:::i;:::-;8602:156;;8312:453;;;;:::o;8771:147::-;8872:11;8909:3;8894:18;;8771:147;;;;:::o;8924:114::-;;:::o;9044:398::-;9203:3;9224:83;9305:1;9300:3;9224:83;:::i;:::-;9217:90;;9316:93;9405:3;9316:93;:::i;:::-;9434:1;9429:3;9425:11;9418:18;;9044:398;;;:::o;9448:379::-;9632:3;9654:147;9797:3;9654:147;:::i;:::-;9647:154;;9818:3;9811:10;;9448:379;;;:::o;9833:180::-;9881:77;9878:1;9871:88;9978:4;9975:1;9968:15;10002:4;9999:1;9992:15;10019:185;10059:1;10076:20;10094:1;10076:20;:::i;:::-;10071:25;;10110:20;10128:1;10110:20;:::i;:::-;10105:25;;10149:1;10139:35;;10154:18;;:::i;:::-;10139:35;10196:1;10193;10189:9;10184:14;;10019:185;;;;:::o;10210:194::-;10250:4;10270:20;10288:1;10270:20;:::i;:::-;10265:25;;10304:20;10322:1;10304:20;:::i;:::-;10299:25;;10348:1;10345;10341:9;10333:17;;10372:1;10366:4;10363:11;10360:37;;;10377:18;;:::i;:::-;10360:37;10210:194;;;;:::o;10410:180::-;10458:77;10455:1;10448:88;10555:4;10552:1;10545:15;10579:4;10576:1;10569:15;10596:180;10644:77;10641:1;10634:88;10741:4;10738:1;10731:15;10765:4;10762:1;10755:15

Swarm Source

ipfs://4f429a2d14414e41026acf0b9257f707e440273532c3b341f8eee15b42b4a907

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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