ETH Price: $3,460.82 (-1.73%)
Gas: 3 Gwei

Contract

0x4a24c1989E5dFF0DE40f5804b47623b6b4300b04
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Start My Vesting203130292024-07-15 16:13:118 days ago1721059991IN
0x4a24c198...6b4300b04
0 ETH0.0062452421.01426002
Start My Vesting201944522024-06-29 2:46:4725 days ago1719629207IN
0x4a24c198...6b4300b04
0 ETH0.001238444.16716838
Start My Vesting201815662024-06-27 7:35:2327 days ago1719473723IN
0x4a24c198...6b4300b04
0 ETH0.001931736.49998542
Start My Vesting199542622024-05-26 13:10:5958 days ago1716729059IN
0x4a24c198...6b4300b04
0 ETH0.001912636.4357072
Start My Vesting198777262024-05-15 20:19:1169 days ago1715804351IN
0x4a24c198...6b4300b04
0 ETH0.0018456512.32323093
Start My Vesting198777252024-05-15 20:18:5969 days ago1715804339IN
0x4a24c198...6b4300b04
0 ETH0.004047312.63786907
Start My Vesting197933232024-05-04 1:00:1181 days ago1714784411IN
0x4a24c198...6b4300b04
0 ETH0.002675917.15698473
Start My Vesting197437122024-04-27 2:31:3588 days ago1714185095IN
0x4a24c198...6b4300b04
0 ETH0.002322335.26014791
Start My Vesting196777842024-04-17 21:10:2397 days ago1713388223IN
0x4a24c198...6b4300b04
0 ETH0.0054006218.3982658
Start My Vesting196098702024-04-08 8:50:11106 days ago1712566211IN
0x4a24c198...6b4300b04
0 ETH0.0061797820.29533125
Start My Vesting194745392024-03-20 7:50:47126 days ago1710921047IN
0x4a24c198...6b4300b04
0 ETH0.0168150736.413676
Start My Vesting194459492024-03-16 7:22:23130 days ago1710573743IN
0x4a24c198...6b4300b04
0 ETH0.0076805125.22394887
Start My Vesting194240602024-03-13 5:27:47133 days ago1710307667IN
0x4a24c198...6b4300b04
0 ETH0.0130559640
Start My Vesting194178352024-03-12 8:34:23134 days ago1710232463IN
0x4a24c198...6b4300b04
0 ETH0.019409363.74301331
Start My Vesting194175672024-03-12 7:40:11134 days ago1710229211IN
0x4a24c198...6b4300b04
0 ETH0.0022852451.13322242
Start My Vesting194175312024-03-12 7:32:59134 days ago1710228779IN
0x4a24c198...6b4300b04
0 ETH0.0012398950.21434224
Start My Vesting193115592024-02-26 11:51:11148 days ago1708948271IN
0x4a24c198...6b4300b04
0 ETH0.0043564229.08741167
Start My Vesting193115452024-02-26 11:48:23148 days ago1708948103IN
0x4a24c198...6b4300b04
0 ETH0.0098269931.89092318
Start My Vesting192952432024-02-24 5:05:35151 days ago1708751135IN
0x4a24c198...6b4300b04
0 ETH0.0083616128.48543793
Start My Vesting192480962024-02-17 14:12:47157 days ago1708179167IN
0x4a24c198...6b4300b04
0 ETH0.0072326124.04124696
Start My Vesting192390592024-02-16 7:44:35159 days ago1708069475IN
0x4a24c198...6b4300b04
0 ETH0.0091207825.30969898
Start My Vesting191515072024-02-04 0:50:47171 days ago1707007847IN
0x4a24c198...6b4300b04
0 ETH0.0050779115.38529793
Start My Vesting191299912024-02-01 0:20:47174 days ago1706746847IN
0x4a24c198...6b4300b04
0 ETH0.006955222.30699248
Start My Vesting191155202024-01-29 23:41:59176 days ago1706571719IN
0x4a24c198...6b4300b04
0 ETH0.0051806216.05161175
Start My Vesting191155022024-01-29 23:38:23176 days ago1706571503IN
0x4a24c198...6b4300b04
0 ETH0.0055187117.69981198
View all transactions

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
170905772023-04-20 22:17:59460 days ago1682029079
0x4a24c198...6b4300b04
1,152.40507731 ETH
170905772023-04-20 22:17:59460 days ago1682029079
0x4a24c198...6b4300b04
 Contract Creation0 ETH
167616562023-03-05 10:38:35506 days ago1678012715
0x4a24c198...6b4300b04
0.12691322 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CollectorETH

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : CollectorETH.sol
// SPDX-License-Identifier: -- WISE --

pragma solidity =0.8.18;

import "./ClaimerContract.sol";
import "./CollectorViews.sol";

error InvestmentTooLow();
error SelfReferralDetected();
error InvalidReferralAddress();

contract CollectorETH is CollectorViews {

    address public tokenDefiner;
    address public tokenAddress;
    address public bonusAddress;

    ClaimerContract public claimer;

    uint256 constant VESTING_TIME = 540 days;

    modifier onlyTokenDefiner() {
        require(
            msg.sender == tokenDefiner,
            "CollectorETH: INVALID_SENDER"
        );
        _;
    }

    modifier afterInvestmentPhase() {
        require(
            currentInvestmentDay() > INVESTMENT_DAYS,
            "CollectorETH: COLLECTOR_IN_PROGRESS"
        );
        _;
    }

    modifier afterSupplyGenerated() {
        require(
            g.generatedDays == fundedDays(),
            "CollectorETH: SUPPLY_NOT_GENERATED"
        );
        _;
    }

    modifier afterTokenProfitCreated() {
        require (
            g.generatedDays > 0 &&
            g.totalWeiContributed == 0,
            "CollectorETH: CREATE_TOKEN_PROFIT"
        );
        _;
    }

    constructor() {
        tokenDefiner = msg.sender;
        bonusAddress = msg.sender;
    }

    /** @dev Allows to define WISER token
      */
    function defineToken(
        address _tokenAddress
    )
        external
        onlyTokenDefiner
    {
        tokenAddress = _tokenAddress;
    }

    function defineBonus(
        address _bonusAddress
    )
        external
        onlyTokenDefiner
    {
        bonusAddress = _bonusAddress;
    }

    /** @dev Revokes access to define configs
      */
    function revokeAccess()
        external
        onlyTokenDefiner
    {
        tokenDefiner = address(0x0);
    }

    /** @dev Performs reservation of WISER tokens with ETH
      */
    function reserveWiser(
        uint8[] calldata _investmentDays,
        address _referralAddress
    )
        external
        payable
    {
        checkInvestmentDays(
            _investmentDays,
            currentInvestmentDay()
        );

        _reserveWiser(
            _investmentDays,
            _referralAddress,
            msg.sender,
            msg.value
        );
    }

    /** @notice Allows reservation of WISER tokens with other ERC20 tokens
      * @dev this will require this contract to be approved as spender
      */
    function reserveWiserWithToken(
        address _tokenAddress,
        uint256 _tokenAmount,
        uint256 _minExpected,
        uint8[] calldata _investmentDays,
        address _referralAddress
    )
        external
    {
        TokenERC20 _token = TokenERC20(
            _tokenAddress
        );

        _token.transferFrom(
            msg.sender,
            address(this),
            _tokenAmount
        );

        _token.approve(
            address(UNISWAP_ROUTER),
            _tokenAmount
        );

        address[] memory _path = preparePath(
            _tokenAddress
        );

        uint256[] memory amounts =
        UNISWAP_ROUTER.swapExactTokensForETH(
            _tokenAmount,
            _minExpected,
            _path,
            address(this),
            block.timestamp + 2 hours
        );

        checkInvestmentDays(
            _investmentDays,
            currentInvestmentDay()
        );

        _reserveWiser(
            _investmentDays,
            _referralAddress,
            msg.sender,
            amounts[1]
        );
    }

    function _reserveWiser(
        uint8[] memory _investmentDays,
        address _referralAddress,
        address _senderAddress,
        uint256 _senderValue
    )
        internal
    {
        if (_senderAddress == _referralAddress) {
            revert SelfReferralDetected();
        }

        if (isContract(_referralAddress) == true) {
            revert InvalidReferralAddress();
        }

        if (_senderValue < MIN_INVEST * _investmentDays.length) {
            revert InvestmentTooLow();
        }

        uint256 _investmentBalance = _referralAddress == address(0x0)
            ? _senderValue // no referral bonus
            : _senderValue * 1100 / 1000;

        uint256 _totalDays = _investmentDays.length;
        uint256 _dailyAmount = _investmentBalance / _totalDays;
        uint256 _leftOver = _investmentBalance % _totalDays;

        _addBalance(
            _senderAddress,
            _investmentDays[0],
            _dailyAmount + _leftOver
        );

        for (uint8 _i = 1; _i < _totalDays; _i++) {
            _addBalance(
                _senderAddress,
                _investmentDays[_i],
                _dailyAmount
            );
        }

        _trackInvestors(
            _senderAddress,
            _investmentBalance
        );

        originalInvestment[_senderAddress] += _senderValue;
        g.totalWeiContributed += _senderValue;

        if (_referralAddress == address(0x0)) {
            return;
        }

        _trackReferrals(
            _referralAddress,
            _senderValue
        );

        emit ReferralAdded(
            _referralAddress,
            _senderAddress,
            _senderValue
        );
    }

    /** @notice Allocates investors balance to specific day
      */
    function _addBalance(
        address _senderAddress,
        uint256 _investmentDay,
        uint256 _investmentBalance
    )
        internal
    {
        if (investorBalances[_senderAddress][_investmentDay] == 0) {
            investorAccounts[_investmentDay][investorAccountCount[_investmentDay]] = _senderAddress;
            investorAccountCount[_investmentDay]++;
        }

        investorBalances[_senderAddress][_investmentDay] += _investmentBalance;
        dailyTotalInvestment[_investmentDay] += _investmentBalance;

        emit WiseReservation(
            _senderAddress,
            _investmentDay,
            _investmentBalance
        );
    }

    /** @notice Tracks investorTotalBalance and uniqueInvestors
      * @dev used in _reserveWiser() internal function
      */
    function _trackInvestors(
        address _investorAddress,
        uint256 _value
    )
        internal
    {
        if (investorTotalBalance[_investorAddress] == 0) {
            uniqueInvestors[uniqueInvestorCount] = _investorAddress;
            uniqueInvestorCount++;
        }

        investorTotalBalance[_investorAddress] += _value;
    }

    /** @notice Tracks referralAmount and referralAccounts
      * @dev used in _reserveWiser() internal function
      */
    function _trackReferrals(
        address _referralAddress,
        uint256 _value
    )
        internal
    {
        if (referralAmount[_referralAddress] == 0) {
            referralAccounts[referralAccountCount] = _referralAddress;
            referralAccountCount++;
        }

        referralAmount[_referralAddress] += _value;
    }

    /** @notice Allows to generate supply for past funded days
      */
    function generateSupply()
        external
        afterInvestmentPhase
    {
        for (uint8 i = 1; i <= INVESTMENT_DAYS; i++) {

            if (dailyTotalSupply[i] > 0) continue;
            if (dailyTotalInvestment[i] == 0) continue;

            dailyTotalSupply[i] = DAILY_SUPPLY;
            g.totalTransferTokens += DAILY_SUPPLY;

            g.generatedDays++;

            emit GeneratedStaticSupply(
                i,
                DAILY_SUPPLY
            );
        }
    }

    /** @notice Pre-calculates amount of tokens each referrer will get
      * @dev must run this for all referrer addresses in batches
      * converts _referralAmount to _referralTokens based on dailyRatio
      */
    function prepareReferralBonuses(
        uint256 _referralBatchFrom,
        uint256 _referralBatchTo
    )
        external
        afterInvestmentPhase
        afterSupplyGenerated
    {
        require(
            _referralBatchFrom < _referralBatchTo,
            "CollectorETH: INVALID_REFERRAL_BATCH"
        );

        require(
            g.preparedReferrals < referralAccountCount,
            "CollectorETH: REFERRALS_ALREADY_PREPARED"
        );

        uint256 _totalRatio = g.totalTransferTokens / g.totalWeiContributed;

        for (uint256 i = _referralBatchFrom; i < _referralBatchTo; i++) {

            address _referralAddress = referralAccounts[i];
            uint256 _referralAmount = referralAmount[_referralAddress];

            if (_referralAmount == 0) continue;

            g.preparedReferrals++;
            referralAmount[_referralAddress] = 0;

            if (_referralAmount < MINIMUM_REFERRAL) continue;

            uint256 referralBonus = _getReferralAmount(
                _referralAmount,
                _totalRatio
            );

            g.totalReferralTokens += referralBonus;
            referralTokens[_referralAddress] = referralBonus;
        }
    }

    /** @notice Creates tokenProfit contract aka WISER contract
      * and forwards all collected funds for the governance
      * also mints all the supply and locks in vesting contract
      */
    function createTokenProfitContract(/*🦉*/)
        external
        afterInvestmentPhase
        afterSupplyGenerated
    {
        require(
            g.preparedReferrals == referralAccountCount,
            "CollectorETH: REFERRALS_NOT_READY"
        );

        require(
            address(claimer) == address(0x0),
            "CollectorETH: ALREADY_CREATED"
        );

        claimer = new ClaimerContract(
            address(this),
            VESTING_TIME,
            tokenAddress
        );

        uint256 tokensForRef = g.totalReferralTokens;
        uint256 collectedETH = g.totalWeiContributed;
        uint256 tokensToMint = g.totalTransferTokens + tokensForRef;

        uint256 tokensToGift = LIMIT_REFERRALS > tokensForRef
            ? LIMIT_REFERRALS - tokensForRef
            : 0;

        payable(tokenAddress).transfer(
            collectedETH
        );

        WiserToken(tokenAddress).mintSupply(
            address(claimer),
            tokensToMint
        );

        WiserToken(tokenAddress).mintSupply(
            bonusAddress,
            tokensToGift
        );

        WiserToken(tokenAddress).mintSupply(
            bonusAddress,
            WISER_FUNDRAISE
        );

        g.totalWeiContributed = 0;
        g.totalTransferTokens = 0;
        g.totalReferralTokens = 0;
    }

    /** @notice Allows to start vesting of purchased tokens
      * from investor and referrer perspectives address
      * @dev can be called after createTokenProfitContract()
      */
    function startMyVesting(/*⏳*/)
        external
        afterTokenProfitCreated
    {
        uint256 locked = _payoutInvestorAddress(
            msg.sender
        );

        uint256 opened = _payoutReferralAddress(
            msg.sender
        );

        if (locked + opened == 0) return;

        claimer.enrollAndScrape(
            msg.sender,
            locked,
            opened,
            VESTING_TIME
        );
    }

    /** @notice Returns minting amount for specific investor address
      * @dev aggregades investors tokens across all investment days
      */
    function _payoutInvestorAddress(
        address _investorAddress
    )
        internal
        returns (uint256 payoutAmount)
    {
        for (uint8 i = 1; i <= INVESTMENT_DAYS; i++) {

            uint256 balance = investorBalances[_investorAddress][i];

            if (balance == 0) continue;

            payoutAmount += balance
                * _calculateDailyRatio(i)
                / PRECISION_POINT;

            investorBalances[_investorAddress][i] = 0;
        }
    }

    /** @notice Returns minting amount for specific referrer address
      * @dev must be pre-calculated in prepareReferralBonuses()
      */
    function _payoutReferralAddress(
        address _referralAddress
    )
        internal
        returns (uint256)
    {
        uint256 payoutAmount = referralTokens[_referralAddress];

        if (referralTokens[_referralAddress] > 0) {
            referralTokens[_referralAddress] = 0;
        }

        return payoutAmount;
    }

    function requestRefund()
        external
        returns (uint256 _amount)
    {
        address investor = msg.sender;

        require(
            g.totalWeiContributed > 0  &&
            originalInvestment[investor] > 0 &&
            currentInvestmentDay() > INVESTMENT_DAYS + 15,
           "CollectorETH: REFUND_NOT_POSSIBLE"
        );

        _amount = originalInvestment[investor];
        originalInvestment[investor] = 0;
        g.totalTransferTokens = 0;

        payable(investor).transfer(
            _amount
        );
    }
}

File 2 of 5 : CollectorViews.sol
// SPDX-License-Identifier: -- WISE --

pragma solidity =0.8.18;

import "./CollectorDeclaration.sol";

contract CollectorViews is CollectorDeclaration {

    /** @notice checks for callers investment amount on specific day (with bonus)
      * @return total amount invested across all investment days (with bonus)
      */
    function myInvestmentAmount(
        uint256 _investmentDay
    )
        external
        view
        returns (uint256)
    {
        return investorBalances[msg.sender][_investmentDay];
    }

    /** @notice checks for callers investment amount on each day (with bonus)
      * @return _myAllDays total amount invested across all days (with bonus)
      */
    function myInvestmentAmountAllDays()
        external
        view
        returns (uint256[51] memory _myAllDays)
    {
        for (uint256 i = 1; i <= INVESTMENT_DAYS; i++) {
            _myAllDays[i] = investorBalances[msg.sender][i];
        }
    }

    /** @notice checks for callers total investment amount (with bonus)
      * @return total amount invested across all investment days (with bonus)
      */
    function myTotalInvestmentAmount()
        external
        view
        returns (uint256)
    {
        return investorTotalBalance[msg.sender];
    }

    /** @notice checks for investors count on specific day
      * @return investors count for specific day
      */
    function investorsOnDay(
        uint256 _investmentDay
    )
        external
        view
        returns (uint256)
    {
        return dailyTotalInvestment[_investmentDay] > 0
            ? investorAccountCount[_investmentDay]
            : 0;
    }

    /** @notice checks for investors count on each day
      * @return _allInvestors array with investors count for each day
      */
    function investorsOnAllDays()
        external
        view
        returns (uint256[51] memory _allInvestors)
    {
        for (uint256 i = 1; i <= INVESTMENT_DAYS; i++) {
            _allInvestors[i] = dailyTotalInvestment[i] > 0
            ? investorAccountCount[i]
            : 0;
        }
    }

    /** @notice checks for investment amount on each day
      * @return _allInvestments array with investment amount for each day
      */
    function investmentsOnAllDays()
        external
        view
        returns (uint256[51] memory _allInvestments)
    {
        for (uint256 i = 1; i <= INVESTMENT_DAYS; i++) {
            _allInvestments[i] = dailyTotalInvestment[i];
        }
    }

    /** @notice checks for supply amount on each day
      * @return _allSupply array with supply amount for each day
      */
    function supplyOnAllDays()
        external
        view
        returns (uint256[51] memory _allSupply)
    {
        for (uint256 i = 1; i <= INVESTMENT_DAYS; i++) {
            _allSupply[i] = dailyTotalSupply[i];
        }
    }

    /** @notice shows current investment day
      */
    function currentInvestmentDay()
        public
        view
        returns (uint256)
    {
        return block.timestamp > INCEPTION_TIME
            ? (block.timestamp - INCEPTION_TIME) / SECONDS_IN_DAY + 1
            : 0;
    }

    function isContract(
        address _walletAddress
    )
        public
        view
        returns (bool)
    {
        uint32 size;
        assembly {
            size := extcodesize(
                _walletAddress
            )
        }
        return (size > 0);
    }

    /** @notice prepares path variable for uniswap to exchange tokens
      * @dev used in reserveWiserWithToken() swapExactTokensForETH call
      */
    function preparePath(
        address _tokenAddress
    )
        public
        pure
        returns
    (
        address[] memory _path
    ) {
        _path = new address[](2);
        _path[0] = _tokenAddress;
        _path[1] = WETH;
    }

    /** @notice checks that provided days are valid for investemnt
      * @dev used in reserveWise() and reserveWiseWithToken()
      */
    function checkInvestmentDays(
        uint8[] memory _investmentDays,
        uint256 _investmentDay
    )
        public
        pure
    {
        for (uint8 _i = 0; _i < _investmentDays.length; _i++) {
            require(
                _investmentDays[_i] >= _investmentDay,
                "CollectorViews: DAY_ALREADY_PASSED"
            );
            require(
                _investmentDays[_i] > 0 &&
                _investmentDays[_i] <= INVESTMENT_DAYS,
                "CollectorViews: INVALID_INVESTMENT_DAY"
            );
        }
    }

    /** @notice checks for invesments on all days
      * @dev used in createTokenProfitContract()
      */
    function fundedDays()
        public
        view
        returns (uint8 $fundedDays)
    {
        for (uint8 i = 1; i <= INVESTMENT_DAYS; i++) {
            if (dailyTotalInvestment[i] > 0) {
                $fundedDays++;
            }
        }
    }

    /** @notice WISER equivalent in ETH price calculation
      * @dev returned value has 100E18 precision point
      */
    function _calculateDailyRatio(
        uint256 _investmentDay
    )
        internal
        view
        returns (uint256)
    {
        uint256 dailyRatio = dailyTotalSupply[_investmentDay]
            * PRECISION_POINT
            / dailyTotalInvestment[_investmentDay];

        uint256 remainderCheck = dailyTotalSupply[_investmentDay]
            * PRECISION_POINT
            % dailyTotalInvestment[_investmentDay];

        return remainderCheck == 0
            ? dailyRatio
            : dailyRatio + 1;
    }

    /** @notice calculates referral bonus
      */
    function _getReferralAmount(
        uint256 _referralAmount,
        uint256 _ratio
    )
        internal
        pure
        returns (uint256)
    {
        return _referralAmount / REFERRAL_BONUS * _ratio;
    }
}

File 3 of 5 : ClaimerContract.sol
// SPDX-License-Identifier: --WISE--

pragma solidity =0.8.18;

import "./ClaimerHelper.sol";

contract ClaimerContract is ClaimerHelper {

    address public immutable collector;
    uint256 public immutable createTime;
    uint256 public immutable minimumTime;

    struct KeeperInfo {
        uint256 keeperRate;
        uint256 keeperTill;
        uint256 keeperInstant;
        uint256 keeperPayouts;
    }

    mapping(address => KeeperInfo) public keeperList;

    modifier onlyCollector() {
        require(
            msg.sender == collector,
            "ClaimerContract: INVALID_COLLECTOR"
        );
        _;
    }

    constructor(
        address _collector,
        uint256 _timeFrame,
        address _tokenAddress
    )
        ClaimerHelper(
            _tokenAddress
        )
    {
        if (_timeFrame == 0) {
            revert("ClaimerContract: INVALID_TIMEFRAME");
        }

        collector = _collector;
        createTime = getNow();
        minimumTime = _timeFrame;
    }

    function enrollAndScrape(
        address _recipient,
        uint256 _tokensLocked,
        uint256 _tokensOpened,
        uint256 _timeFrame
    )
        external
        onlyCollector
    {
        _enrollRecipient(
            _recipient,
            _tokensLocked,
            _tokensOpened,
            _timeFrame
        );

        _scrapeTokens(
            _recipient
        );
    }

    function _enrollRecipient(
        address _recipient,
        uint256 _tokensLocked,
        uint256 _tokensOpened,
        uint256 _timeFrame
    )
        private
    {
        require(
            keeperList[_recipient].keeperTill == 0,
            "ClaimerContract: RECIPIENT_ALREADY_ENROLLED"
        );

        _allocateTokens(
            _recipient,
            _tokensLocked,
            _tokensOpened,
            _timeFrame
        );
    }

    function _allocateTokens(
        address _recipient,
        uint256 _tokensLocked,
        uint256 _tokensOpened,
        uint256 _timeFrame
    )
        private
    {
        require(
            _timeFrame >= minimumTime,
            "ClaimerContract: INVALID_TIME_FRAME"
        );

        totalRequired = totalRequired
            + _tokensOpened
            + _tokensLocked;

        keeperList[_recipient].keeperTill = createTime
            + _timeFrame;

        keeperList[_recipient].keeperRate = _tokensLocked
            / _timeFrame;

        keeperList[_recipient].keeperInstant = _tokensLocked
            % _timeFrame
            + _tokensOpened;

        _checkBalance(
            totalRequired
        );

        emit recipientEnrolled(
            _recipient,
            _timeFrame,
            _tokensLocked,
            _tokensOpened
        );
    }

    function scrapeMyTokens()
        external
    {
        _scrapeTokens(
            msg.sender
        );
    }

    function _scrapeTokens(
        address _recipient
    )
        private
    {
        uint256 scrapeAmount = availableBalance(
            _recipient
        );

        keeperList[_recipient].keeperPayouts += scrapeAmount;

        _safeScrape(
            _recipient,
            scrapeAmount
        );

        emit tokensScraped(
            _recipient,
            scrapeAmount,
            getNow()
        );
    }

    function availableBalance(
        address _recipient
    )
        public
        view
        returns (uint256 balance)
    {
        uint256 timeNow = getNow();
        uint256 timeMax = keeperList[_recipient].keeperTill;

        if (timeMax == 0) return 0;

        uint256 timePassed = timeNow > timeMax
            ? timeMax - createTime
            : timeNow - createTime;

        balance = keeperList[_recipient].keeperRate
            * timePassed
            + keeperList[_recipient].keeperInstant
            - keeperList[_recipient].keeperPayouts;
    }

    function lockedBalance(
        address _recipient
    )
        external
        view
        returns (uint256 balance)
    {
        uint256 timeNow = getNow();

        uint256 timeRemaining =
            keeperList[_recipient].keeperTill > timeNow ?
            keeperList[_recipient].keeperTill - timeNow : 0;

        balance = keeperList[_recipient].keeperRate
            * timeRemaining;
    }
}

File 4 of 5 : CollectorDeclaration.sol
// SPDX-License-Identifier: -- WISE --

pragma solidity =0.8.18;

interface UniswapV2 {

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        returns (uint256[] memory amounts);
}

interface TokenERC20 {

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
        external
        returns (bool success);

    function approve(
        address _spender,
        uint256 _value
    )
        external
        returns (bool success);
}

interface WiserToken {
    function mintSupply(
        address _to,
        uint256 _value
    )
        external
        returns (bool success);
}

contract CollectorDeclaration {

    UniswapV2 public constant UNISWAP_ROUTER = UniswapV2(
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    );

    address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    uint256 constant INVESTMENT_DAYS = 50;
    uint256 constant REFERRAL_BONUS = 10;
    uint256 constant SECONDS_IN_DAY = 86400;
    uint256 constant PRECISION_POINT = 100E18;
    uint256 constant INCEPTION_TIME = 1677628800;
    uint256 constant LIMIT_REFERRALS = 90000000E18;
    uint256 constant WISER_FUNDRAISE = 10000000E18;
    uint128 constant MINIMUM_REFERRAL = 10 ether;
    uint128 constant MIN_INVEST = 50000000000000000;
    uint128 constant DAILY_SUPPLY = 18000000E18;

    struct Globals {
        uint64 generatedDays;
        uint64 preparedReferrals;
        uint256 totalTransferTokens;
        uint256 totalWeiContributed;
        uint256 totalReferralTokens;
    }

    Globals public g;

    mapping(uint256 => uint256) public dailyTotalSupply;
    mapping(uint256 => uint256) public dailyTotalInvestment;

    mapping(uint256 => uint256) public investorAccountCount;
    mapping(uint256 => mapping(uint256 => address)) public investorAccounts;
    mapping(address => mapping(uint256 => uint256)) public investorBalances;

    mapping(address => uint256) public referralAmount;
    mapping(address => uint256) public referralTokens;
    mapping(address => uint256) public investorTotalBalance;
    mapping(address => uint256) public originalInvestment;

    uint256 public referralAccountCount;
    uint256 public uniqueInvestorCount;

    mapping (uint256 => address) public uniqueInvestors;
    mapping (uint256 => address) public referralAccounts;

    event GeneratedStaticSupply(
        uint256 indexed investmentDay,
        uint256 staticSupply
    );

    event ReferralAdded(
        address indexed referral,
        address indexed referee,
        uint256 amount
    );

    event WiseReservation(
        address indexed sender,
        uint256 indexed investmentDay,
        uint256 amount
    );
}

File 5 of 5 : ClaimerHelper.sol
// SPDX-License-Identifier: --BCOM--

pragma solidity =0.8.18;

contract ClaimerHelper {

    uint256 public totalRequired;
    address public immutable wiserToken;

    event recipientEnrolled(
        address indexed recipient,
        uint256 timeFrame,
        uint256 tokensLocked,
        uint256 tokensOpened
    );

    event tokensScraped(
        address indexed scraper,
        uint256 scrapedAmount,
        uint256 timestamp
    );

    constructor(
        address _wiserTokenAddress
    ) {
        if (_wiserTokenAddress == address(0x0)) {
            revert("ClaimerHelper: INVALID_TOKEN");
        }

        wiserToken = _wiserTokenAddress;
    }

    bytes4 private constant TRANSFER = bytes4(
        keccak256(
            bytes(
                "transfer(address,uint256)"
            )
        )
    );

    bytes4 private constant BALANCEOF = bytes4(
        keccak256(
            bytes(
                "balanceOf(address)"
            )
        )
    );

    function _safeScrape(
        address _to,
        uint256 _scrapeAmount
    )
        internal
    {
        totalRequired -= _scrapeAmount;

        (bool success, bytes memory data) = wiserToken.call(
            abi.encodeWithSelector(
                TRANSFER,
                _to,
                _scrapeAmount
            )
        );

        require(
            success && (
                abi.decode(
                    data, (bool)
                )
            ),
            "ClaimerHelper: TRANSFER_FAILED"
        );
    }

    function _checkBalance(
        uint256 _required
    )
        internal
    {
        (bool success, bytes memory data) = wiserToken.call(
            abi.encodeWithSelector(
                BALANCEOF,
                address(this)
            )
        );

        require(
            success && abi.decode(
                data, (uint256)
            ) >= _required,
            "ClaimerHelper: BALANCE_CHECK_FAILED"
        );
    }

    function getNow()
        public
        view
        returns (uint256 time)
    {
        time = block.timestamp;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidReferralAddress","type":"error"},{"inputs":[],"name":"InvestmentTooLow","type":"error"},{"inputs":[],"name":"SelfReferralDetected","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"investmentDay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"staticSupply","type":"uint256"}],"name":"GeneratedStaticSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referral","type":"address"},{"indexed":true,"internalType":"address","name":"referee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"investmentDay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WiseReservation","type":"event"},{"inputs":[],"name":"UNISWAP_ROUTER","outputs":[{"internalType":"contract UniswapV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_investmentDays","type":"uint8[]"},{"internalType":"uint256","name":"_investmentDay","type":"uint256"}],"name":"checkInvestmentDays","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"claimer","outputs":[{"internalType":"contract ClaimerContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createTokenProfitContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentInvestmentDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dailyTotalInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dailyTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusAddress","type":"address"}],"name":"defineBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"defineToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundedDays","outputs":[{"internalType":"uint8","name":"$fundedDays","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"g","outputs":[{"internalType":"uint64","name":"generatedDays","type":"uint64"},{"internalType":"uint64","name":"preparedReferrals","type":"uint64"},{"internalType":"uint256","name":"totalTransferTokens","type":"uint256"},{"internalType":"uint256","name":"totalWeiContributed","type":"uint256"},{"internalType":"uint256","name":"totalReferralTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generateSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentsOnAllDays","outputs":[{"internalType":"uint256[51]","name":"_allInvestments","type":"uint256[51]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"investorAccountCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"investorAccounts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"investorBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investorTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investorsOnAllDays","outputs":[{"internalType":"uint256[51]","name":"_allInvestors","type":"uint256[51]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_investmentDay","type":"uint256"}],"name":"investorsOnDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_investmentDay","type":"uint256"}],"name":"myInvestmentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myInvestmentAmountAllDays","outputs":[{"internalType":"uint256[51]","name":"_myAllDays","type":"uint256[51]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myTotalInvestmentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"originalInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"preparePath","outputs":[{"internalType":"address[]","name":"_path","type":"address[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referralBatchFrom","type":"uint256"},{"internalType":"uint256","name":"_referralBatchTo","type":"uint256"}],"name":"prepareReferralBonuses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referralAccountCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"referralAccounts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestRefund","outputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_investmentDays","type":"uint8[]"},{"internalType":"address","name":"_referralAddress","type":"address"}],"name":"reserveWiser","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"uint256","name":"_minExpected","type":"uint256"},{"internalType":"uint8[]","name":"_investmentDays","type":"uint8[]"},{"internalType":"address","name":"_referralAddress","type":"address"}],"name":"reserveWiserWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMyVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyOnAllDays","outputs":[{"internalType":"uint256[51]","name":"_allSupply","type":"uint256[51]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDefiner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniqueInvestorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uniqueInvestors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b5060118054336001600160a01b03199182168117909255601380549091169091179055613538806100426000396000f3fe608060405260043610620002775760003560e01c80639b0710491162000153578063d379be2311620000c5578063dcd128811162000084578063dcd128811462000820578063e20fbce41462000838578063e2179b8e1462000869578063e8f6622814620008d7578063f700b14f14620008f9578063f70dac52146200091d57600080fd5b8063d379be23146200076c578063d5cef133146200078e578063d70b9a4914620007a6578063d826492014620007d1578063da2b122414620007fb57600080fd5b8063b8d090ae1162000112578063b8d090ae146200069e578063ca01a52c14620006b6578063cdf0456414620006e7578063cfe718b61462000723578063d2819ab3146200073b57600080fd5b80639b07104914620005ec5780639d76ea58146200061d578063a381de54146200063f578063a4e0594b1462000661578063acdf6d35146200068657600080fd5b806366e71fbe11620001ed57806387ca9f2a11620001ac57806387ca9f2a146200050e578063938b9f91146200053557806393ef43da146200054d578063954574d7146200058757806395d4c7bb14620005bb57600080fd5b806366e71fbe14620004565780636a7a8485146200047b5780636d9bf9e914620004a05780636e05bb3014620004c557806370ce5d6914620004dd57600080fd5b8063316ec5f5116200023a578063316ec5f5146200039757806332af470114620003d15780633a3e8e6014620004025780634b0b527814620004275780634e4c7d9b146200043e57600080fd5b806307e9dfe2146200027c5780630af5ca7814620002de5780631627905514620003295780632366dc1a14620003655780632e7df3d5146200037f575b600080fd5b3480156200028957600080fd5b50620002c16200029b36600462002185565b60076020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620002eb57600080fd5b506200031a620002fd366004620021c5565b600860209081526000928352604080842090915290825290205481565b604051908152602001620002d5565b3480156200033657600080fd5b506200035462000348366004620021f2565b3b63ffffffff16151590565b6040519015158152602001620002d5565b3480156200037257600080fd5b506200037d62000935565b005b3480156200038c57600080fd5b506200031a600d5481565b348015620003a457600080fd5b50620002c1620003b636600462002210565b600f602052600090815260409020546001600160a01b031681565b348015620003de57600080fd5b506200031a620003f036600462002210565b60046020526000908152604090205481565b3480156200040f57600080fd5b506200031a6200042136600462002210565b62000a7f565b6200037d6200043836600462002278565b62000ab1565b3480156200044b57600080fd5b506200037d62000b3c565b3480156200046357600080fd5b506200037d6200047536600462002340565b62000b7b565b3480156200048857600080fd5b506200037d6200049a366004620021f2565b62000cd2565b348015620004ad57600080fd5b506200037d620004bf36600462002185565b62000d21565b348015620004d257600080fd5b506200031a62000f92565b348015620004ea57600080fd5b506200031a620004fc366004620021f2565b600c6020526000908152604090205481565b3480156200051b57600080fd5b506200052662000fd8565b604051620002d59190620023f6565b3480156200054257600080fd5b506200052662001030565b3480156200055a57600080fd5b50620002c16200056c36600462002210565b6010602052600090815260409020546001600160a01b031681565b3480156200059457600080fd5b50620005ac620005a6366004620021f2565b620010a1565b604051620002d5919062002470565b348015620005c857600080fd5b506200031a620005da366004620021f2565b60096020526000908152604090205481565b348015620005f957600080fd5b506200031a6200060b366004620021f2565b600b6020526000908152604090205481565b3480156200062a57600080fd5b50601254620002c1906001600160a01b031681565b3480156200064c57600080fd5b50601354620002c1906001600160a01b031681565b3480156200066e57600080fd5b506200037d6200068036600462002485565b62001148565b3480156200069357600080fd5b5062000526620013a8565b348015620006ab57600080fd5b506200037d620013fc565b348015620006c357600080fd5b506200031a620006d536600462002210565b60056020526000908152604090205481565b348015620006f457600080fd5b506200031a6200070636600462002210565b336000908152600860209081526040808320938352929052205490565b3480156200073057600080fd5b506200037d620017d3565b3480156200074857600080fd5b506200031a6200075a366004620021f2565b600a6020526000908152604090205481565b3480156200077957600080fd5b50601454620002c1906001600160a01b031681565b3480156200079b57600080fd5b506200031a620018f7565b348015620007b357600080fd5b50620007be620019f5565b60405160ff9091168152602001620002d5565b348015620007de57600080fd5b50620002c1737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156200080857600080fd5b506200037d6200081a366004620021f2565b62001a44565b3480156200082d57600080fd5b506200052662001a93565b3480156200084557600080fd5b506200031a6200085736600462002210565b60066020526000908152604090205481565b3480156200087657600080fd5b50600054600154600254600354620008a3936001600160401b0380821694600160401b9092041692909185565b604080516001600160401b039687168152959094166020860152928401919091526060830152608082015260a001620002d5565b348015620008e457600080fd5b50601154620002c1906001600160a01b031681565b3480156200090657600080fd5b50336000908152600b60205260409020546200031a565b3480156200092a57600080fd5b506200031a600e5481565b60326200094162000f92565b116200096a5760405162461bcd60e51b8152600401620009619062002503565b60405180910390fd5b60015b60328160ff161162000a7c5760ff811660009081526004602052604090205462000a675760ff81166000908152600560205260409020541562000a675760ff811660009081526004602052604081206a0ee3a5f48a68b552000000908190556001805491929091620009e19084906200255c565b9091555050600080546001600160401b0316908062000a008362002572565b82546001600160401b039182166101009390930a9283029190920219909116179055506040516a0ee3a5f48a68b552000000815260ff8216907f1d6deab77e7b3eb85aea9594a90cdaa64ff82c8a9d1707867000536f9eb1f4609060200160405180910390a25b8062000a73816200259b565b9150506200096d565b50565b60008181526005602052604081205462000a9b57600062000aab565b6000828152600660205260409020545b92915050565b62000af483838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525062000475925062000f92915050565b62000b3783838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525085925033915034905062001af3565b505050565b6011546001600160a01b0316331462000b695760405162461bcd60e51b81526004016200096190620025bd565b601180546001600160a01b0319169055565b60005b82518160ff16101562000b375781838260ff168151811062000ba45762000ba4620025f4565b602002602001015160ff16101562000c0a5760405162461bcd60e51b815260206004820152602260248201527f436f6c6c6563746f7256696577733a204441595f414c52454144595f50415353604482015261115160f21b606482015260840162000961565b6000838260ff168151811062000c245762000c24620025f4565b602002602001015160ff1611801562000c6057506032838260ff168151811062000c525762000c52620025f4565b602002602001015160ff1611155b62000cbd5760405162461bcd60e51b815260206004820152602660248201527f436f6c6c6563746f7256696577733a20494e56414c49445f494e564553544d456044820152654e545f44415960d01b606482015260840162000961565b8062000cc9816200259b565b91505062000b7e565b6011546001600160a01b0316331462000cff5760405162461bcd60e51b81526004016200096190620025bd565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b603262000d2d62000f92565b1162000d4d5760405162461bcd60e51b8152600401620009619062002503565b62000d57620019f5565b6000546001600160401b031660ff919091161462000d895760405162461bcd60e51b815260040162000961906200260a565b80821062000de65760405162461bcd60e51b8152602060048201526024808201527f436f6c6c6563746f724554483a20494e56414c49445f524546455252414c5f42604482015263082a886960e31b606482015260840162000961565b600d54600054600160401b90046001600160401b03161062000e5c5760405162461bcd60e51b815260206004820152602860248201527f436f6c6c6563746f724554483a20524546455252414c535f414c52454144595f604482015267141491541054915160c21b606482015260840162000961565b60025460015460009162000e709162002662565b9050825b8281101562000f8c576000818152601060209081526040808320546001600160a01b03168084526009909252822054909181900362000eb557505062000f77565b60008054600160401b90046001600160401b031690600862000ed78362002572565b82546001600160401b039182166101009390930a9283029190920219909116179055506001600160a01b038216600090815260096020526040812055678ac7230489e8000081101562000f2c57505062000f77565b600062000f3a828662001d45565b9050806000600301600082825462000f5391906200255c565b90915550506001600160a01b039092166000908152600a6020526040902091909155505b8062000f838162002679565b91505062000e74565b50505050565b60006363fe9580421162000fa65750600090565b6201518062000fba6363fe95804262002695565b62000fc6919062002662565b62000fd39060016200255c565b905090565b62000fe262002158565b60015b603281116200102c57600081815260046020526040902054828260338110620010125762001012620025f4565b602002015280620010238162002679565b91505062000fe5565b5090565b6200103a62002158565b60015b603281116200102c576000818152600560205260409020546200106257600062001072565b6000818152600660205260409020545b828260338110620010875762001087620025f4565b602002015280620010988162002679565b9150506200103d565b60408051600280825260608083018452926020830190803683370190505090508181600081518110620010d857620010d8620025f4565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110620011235762001123620025f4565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b6040516323b872dd60e01b81523360048201523060248201526044810186905286906001600160a01b038216906323b872dd906064016020604051808303816000875af11580156200119e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c49190620026ab565b5060405163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152602481018790526001600160a01b0382169063095ea7b3906044016020604051808303816000875af115801562001227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200124d9190620026ab565b5060006200125b88620010a1565b90506000737a250d5630b4cf539739df2c5dacb4c659f2488d6318cbafe5898985306200128b42611c206200255c565b6040518663ffffffff1660e01b8152600401620012ad959493929190620026cf565b6000604051808303816000875af1158015620012cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620012f791908101906200270d565b90506200133c86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525062000475925062000f92915050565b6200139d868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250508451889250339150859060019081106200138f576200138f620025f4565b602002602001015162001af3565b505050505050505050565b620013b262002158565b60015b603281116200102c57600081815260056020526040902054828260338110620013e257620013e2620025f4565b602002015280620013f38162002679565b915050620013b5565b60326200140862000f92565b11620014285760405162461bcd60e51b8152600401620009619062002503565b62001432620019f5565b6000546001600160401b031660ff9190911614620014645760405162461bcd60e51b815260040162000961906200260a565b600d54600054600160401b90046001600160401b031614620014d35760405162461bcd60e51b815260206004820152602160248201527f436f6c6c6563746f724554483a20524546455252414c535f4e4f545f524541446044820152605960f81b606482015260840162000961565b6014546001600160a01b0316156200152e5760405162461bcd60e51b815260206004820152601d60248201527f436f6c6c6563746f724554483a20414c52454144595f43524541544544000000604482015260640162000961565b60125460405130916302c7ea00916001600160a01b0390911690620015539062002177565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103906000f08015801562001590573d6000803e3d6000fd5b50601480546001600160a01b0319166001600160a01b0392909216919091179055600354600254600154600090620015ca9084906200255c565b90506000836a4a723dc6b40b8a9a00000011620015e957600062001600565b62001600846a4a723dc6b40b8a9a00000062002695565b6012546040519192506001600160a01b03169084156108fc029085906000818181858888f193505050501580156200163c573d6000803e3d6000fd5b506012546014546040516373a1403560e11b81526001600160a01b0391821660048201526024810185905291169063e742806a906044016020604051808303816000875af115801562001693573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016b99190620026ab565b506012546013546040516373a1403560e11b81526001600160a01b0391821660048201526024810184905291169063e742806a906044016020604051808303816000875af115801562001710573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017369190620026ab565b506012546013546040516373a1403560e11b81526001600160a01b0391821660048201526a084595161401484a000000602482015291169063e742806a906044016020604051808303816000875af115801562001797573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017bd9190620026ab565b5050600060028190556001819055600355505050565b6000546001600160401b031615801590620017ee5750600254155b620018465760405162461bcd60e51b815260206004820152602160248201527f436f6c6c6563746f724554483a204352454154455f544f4b454e5f50524f46496044820152601560fa1b606482015260840162000961565b6000620018533362001d68565b90506000620018623362001e32565b90506200187081836200255c565b6000036200187c575050565b60145460405163442e655160e01b815233600482015260248101849052604481018390526302c7ea0060648201526001600160a01b039091169063442e655190608401600060405180830381600087803b158015620018da57600080fd5b505af1158015620018ef573d6000803e3d6000fd5b505050505050565b6002546000903390158015906200192557506001600160a01b0381166000908152600c602052604090205415155b80156200194757506200193b6032600f6200255c565b6200194562000f92565b115b6200199f5760405162461bcd60e51b815260206004820152602160248201527f436f6c6c6563746f724554483a20524546554e445f4e4f545f504f535349424c6044820152604560f81b606482015260840162000961565b6001600160a01b0381166000818152600c60205260408082208054908390556001839055905190945084156108fc0291859190818181858888f19350505050158015620019f0573d6000803e3d6000fd5b505090565b600060015b60328160ff16116200102c5760ff81166000908152600560205260409020541562001a2f578162001a2b816200259b565b9250505b8062001a3b816200259b565b915050620019fa565b6011546001600160a01b0316331462001a715760405162461bcd60e51b81526004016200096190620025bd565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b62001a9d62002158565b60015b603281116200102c5733600090815260086020908152604080832084845290915290205482826033811062001ad95762001ad9620025f4565b60200201528062001aea8162002679565b91505062001aa0565b826001600160a01b0316826001600160a01b03160362001b26576040516324b6a3cf60e21b815260040160405180910390fd5b63ffffffff833b16151560010362001b515760405163322f599160e21b815260040160405180910390fd5b835162001b669066b1a2bc2ec50000620027a6565b81101562001b875760405163af3900bf60e01b815260040160405180910390fd5b60006001600160a01b0384161562001bbc576103e862001baa8361044c620027a6565b62001bb6919062002662565b62001bbe565b815b8551909150600062001bd1828462002662565b9050600062001be18385620027c0565b905062001c1d868960008151811062001bfe5762001bfe620025f4565b602002602001015160ff16838562001c1791906200255c565b62001e71565b60015b838160ff16101562001c705762001c5b878a8360ff168151811062001c495762001c49620025f4565b602002602001015160ff168562001e71565b8062001c67816200259b565b91505062001c20565b5062001c7d868562001f95565b6001600160a01b0386166000908152600c60205260408120805487929062001ca79084906200255c565b90915550506002805486919060009062001cc39084906200255c565b90915550506001600160a01b03871662001ce1575050505062000f8c565b62001ced878662002028565b856001600160a01b0316876001600160a01b03167f3b54244fd9f24308e8af20c841d18d51e8bf31c6d418e821cbac2448146004568760405162001d3391815260200190565b60405180910390a35050505050505050565b60008162001d55600a8562002662565b62001d619190620027a6565b9392505050565b600060015b60328160ff161162001e2c576001600160a01b038316600090815260086020908152604080832060ff851684529091528120549081900362001db0575062001e17565b68056bc75e2d6310000062001dc88360ff16620020b2565b62001dd49083620027a6565b62001de0919062002662565b62001dec90846200255c565b6001600160a01b038516600090815260086020908152604080832060ff871684529091528120559250505b8062001e23816200259b565b91505062001d6d565b50919050565b6001600160a01b0381166000908152600a6020526040812054801562000aab576001600160a01b0383166000908152600a602052604081205592915050565b6001600160a01b0383166000908152600860209081526040808320858452909152812054900362001ef157600082815260076020908152604080832060068084528285208054865291845291842080546001600160a01b0319166001600160a01b038916179055858452915280549162001eeb8362002679565b91905055505b6001600160a01b03831660009081526008602090815260408083208584529091528120805483929062001f269084906200255c565b90915550506000828152600560205260408120805483929062001f4b9084906200255c565b909155505060405181815282906001600160a01b038516907fee287d5b86673a6b5a6745c9f9b6388c172f629711442458008b4c06b22471639060200160405180910390a3505050565b6001600160a01b0382166000908152600b6020526040812054900362001ff557600e80546000908152600f6020526040812080546001600160a01b0319166001600160a01b0386161790558154919062001fef8362002679565b91905055505b6001600160a01b0382166000908152600b6020526040812080548392906200201f9084906200255c565b90915550505050565b6001600160a01b03821660009081526009602052604081205490036200208857600d8054600090815260106020526040812080546001600160a01b0319166001600160a01b03861617905581549190620020828362002679565b91905055505b6001600160a01b038216600090815260096020526040812080548392906200201f9084906200255c565b6000818152600560209081526040808320546004909252822054829190620020e59068056bc75e2d6310000090620027a6565b620020f1919062002662565b60008481526005602090815260408083205460049092528220549293509091620021269068056bc75e2d6310000090620027a6565b620021329190620027c0565b905080156200214e57620021488260016200255c565b62002150565b815b949350505050565b6040518061066001604052806033906020820280368337509192915050565b610d2b80620027d883390190565b600080604083850312156200219957600080fd5b50508035926020909101359150565b80356001600160a01b0381168114620021c057600080fd5b919050565b60008060408385031215620021d957600080fd5b620021e483620021a8565b946020939093013593505050565b6000602082840312156200220557600080fd5b62001d6182620021a8565b6000602082840312156200222357600080fd5b5035919050565b60008083601f8401126200223d57600080fd5b5081356001600160401b038111156200225557600080fd5b6020830191508360208260051b85010111156200227157600080fd5b9250929050565b6000806000604084860312156200228e57600080fd5b83356001600160401b03811115620022a557600080fd5b620022b3868287016200222a565b9094509250620022c8905060208501620021a8565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620023125762002312620022d1565b604052919050565b60006001600160401b03821115620023365762002336620022d1565b5060051b60200190565b600080604083850312156200235457600080fd5b82356001600160401b038111156200236b57600080fd5b8301601f810185136200237d57600080fd5b803560206200239662002390836200231a565b620022e7565b82815260059290921b83018101918181019088841115620023b657600080fd5b938201935b83851015620023e757843560ff81168114620023d75760008081fd5b82529382019390820190620023bb565b98969091013596505050505050565b6106608101818360005b60338110156200242157815183526020928301929091019060010162002400565b50505092915050565b600081518084526020808501945080840160005b83811015620024655781516001600160a01b0316875295820195908201906001016200243e565b509495945050505050565b60208152600062001d6160208301846200242a565b60008060008060008060a087890312156200249f57600080fd5b620024aa87620021a8565b9550602087013594506040870135935060608701356001600160401b03811115620024d457600080fd5b620024e289828a016200222a565b9094509250620024f7905060808801620021a8565b90509295509295509295565b60208082526023908201527f436f6c6c6563746f724554483a20434f4c4c4543544f525f494e5f50524f475260408201526245535360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000aab5762000aab62002546565b60006001600160401b0380831681810362002591576200259162002546565b6001019392505050565b600060ff821660ff8103620025b457620025b462002546565b60010192915050565b6020808252601c908201527f436f6c6c6563746f724554483a20494e56414c49445f53454e44455200000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f436f6c6c6563746f724554483a20535550504c595f4e4f545f47454e45524154604082015261115160f21b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826200267457620026746200264c565b500490565b6000600182016200268e576200268e62002546565b5060010190565b8181038181111562000aab5762000aab62002546565b600060208284031215620026be57600080fd5b8151801515811462001d6157600080fd5b85815284602082015260a060408201526000620026f060a08301866200242a565b6001600160a01b0394909416606083015250608001529392505050565b600060208083850312156200272157600080fd5b82516001600160401b038111156200273857600080fd5b8301601f810185136200274a57600080fd5b80516200275b62002390826200231a565b81815260059190911b820183019083810190878311156200277b57600080fd5b928401925b828410156200279b5783518252928401929084019062002780565b979650505050505050565b808202811582820484141762000aab5762000aab62002546565b600082620027d257620027d26200264c565b50069056fe61010060405234801561001157600080fd5b50604051610d2b380380610d2b8339810160408190526100309161012b565b806001600160a01b03811661008c5760405162461bcd60e51b815260206004820152601c60248201527f436c61696d657248656c7065723a20494e56414c49445f544f4b454e0000000060448201526064015b60405180910390fd5b6001600160a01b031660805260008290036100f45760405162461bcd60e51b815260206004820152602260248201527f436c61696d6572436f6e74726163743a20494e56414c49445f54494d454652416044820152614d4560f01b6064820152608401610083565b6001600160a01b03831660a0524260c0525060e05250610167565b80516001600160a01b038116811461012657600080fd5b919050565b60008060006060848603121561014057600080fd5b6101498461010f565b92506020840151915061015e6040850161010f565b90509250925092565b60805160a05160c05160e051610b5a6101d160003960008181610161015261054d01526000818161013a01528181610381015281816103b001526105e901526000818161018801526102280152600081816101c70152818161077401526108b60152610b5a6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063913e77ad11610071578063913e77ad1461018357806395366fcb146101c25780639ae697bf146101e9578063a0821be3146101fc578063b5609be41461020f578063bbe4fd501461021757600080fd5b806334354068146100ae578063442e6551146100ca5780635e192de6146100df57806361dcd7ab146101355780636379821f1461015c575b600080fd5b6100b760005481565b6040519081526020015b60405180910390f35b6100dd6100d83660046109c8565b61021d565b005b6101156100ed366004610a01565b6001602081905260009182526040909120805491810154600282015460039092015490919084565b6040805194855260208501939093529183015260608201526080016100c1565b6100b77f000000000000000000000000000000000000000000000000000000000000000081565b6100b77f000000000000000000000000000000000000000000000000000000000000000081565b6101aa7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c1565b6101aa7f000000000000000000000000000000000000000000000000000000000000000081565b6100b76101f7366004610a01565b6102c0565b6100b761020a366004610a01565b610344565b6100dd610425565b426100b7565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102a55760405162461bcd60e51b815260206004820152602260248201527f436c61696d6572436f6e74726163743a20494e56414c49445f434f4c4c45435460448201526127a960f11b60648201526084015b60405180910390fd5b6102b184848484610430565b6102ba846104ba565b50505050565b6001600160a01b0381166000908152600160208190526040822001544290829082106102ed576000610315565b6001600160a01b03841660009081526001602081905260409091200154610315908390610a39565b6001600160a01b03851660009081526001602052604090205490915061033c908290610a52565b949350505050565b6001600160a01b0381166000908152600160208190526040822001544290808303610373575060009392505050565b60008183116103ab576103a67f000000000000000000000000000000000000000000000000000000000000000084610a39565b6103d5565b6103d57f000000000000000000000000000000000000000000000000000000000000000083610a39565b6001600160a01b038616600090815260016020526040902060038101546002820154915492935091610408908490610a52565b6104129190610a69565b61041c9190610a39565b95945050505050565b61042e336104ba565b565b6001600160a01b03841660009081526001602081905260409091200154156104ae5760405162461bcd60e51b815260206004820152602b60248201527f436c61696d6572436f6e74726163743a20524543495049454e545f414c52454160448201526a111657d1539493d313115160aa1b606482015260840161029c565b6102ba8484848461054b565b60006104c582610344565b6001600160a01b0383166000908152600160205260408120600301805492935083929091906104f5908490610a69565b90915550610505905082826106dd565b6040805182815242602082015281516001600160a01b038516927ff4c6297f72d4e746c679dde16c732ea9af03893c22fe2ca98037465dd6a3bb2b928290030190a25050565b7f00000000000000000000000000000000000000000000000000000000000000008110156105c75760405162461bcd60e51b815260206004820152602360248201527f436c61696d6572436f6e74726163743a20494e56414c49445f54494d455f4652604482015262414d4560e81b606482015260840161029c565b82826000546105d69190610a69565b6105e09190610a69565b60005561060d817f0000000000000000000000000000000000000000000000000000000000000000610a69565b6001600160a01b038516600090815260016020819052604090912001556106348184610a92565b6001600160a01b038516600090815260016020526040902055816106588285610aa6565b6106629190610a69565b6001600160a01b0385166000908152600160205260408120600201919091555461068b9061084e565b60408051828152602081018590529081018390526001600160a01b038516907f8ceefb1ee30c963bc99d8216add67b76190bb2d0403a4e8f0e321ae3e41d7fbe9060600160405180910390a250505050565b806000808282546106ee9190610a39565b9091555050604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283927f0000000000000000000000000000000000000000000000000000000000000000169161079f9190610aba565b6000604051808303816000865af19150503d80600081146107dc576040519150601f19603f3d011682016040523d82523d6000602084013e6107e1565b606091505b50915091508180156108025750808060200190518101906108029190610ae9565b6102ba5760405162461bcd60e51b815260206004820152601e60248201527f436c61696d657248656c7065723a205452414e534645525f4641494c45440000604482015260640161029c565b604080518082018252601281527162616c616e63654f6628616464726573732960701b602091820152815130602480830191909152835180830390910181526044909101835290810180516001600160e01b03166370a0823160e01b179052905160009182917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916108e891610aba565b6000604051808303816000865af19150503d8060008114610925576040519150601f19603f3d011682016040523d82523d6000602084013e61092a565b606091505b509150915081801561094f5750828180602001905181019061094c9190610b0b565b10155b6109a75760405162461bcd60e51b815260206004820152602360248201527f436c61696d657248656c7065723a2042414c414e43455f434845434b5f46414960448201526213115160ea1b606482015260840161029c565b505050565b80356001600160a01b03811681146109c357600080fd5b919050565b600080600080608085870312156109de57600080fd5b6109e7856109ac565b966020860135965060408601359560600135945092505050565b600060208284031215610a1357600080fd5b610a1c826109ac565b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a4c57610a4c610a23565b92915050565b8082028115828204841417610a4c57610a4c610a23565b80820180821115610a4c57610a4c610a23565b634e487b7160e01b600052601260045260246000fd5b600082610aa157610aa1610a7c565b500490565b600082610ab557610ab5610a7c565b500690565b6000825160005b81811015610adb5760208186018101518583015201610ac1565b506000920191825250919050565b600060208284031215610afb57600080fd5b81518015158114610a1c57600080fd5b600060208284031215610b1d57600080fd5b505191905056fea26469706673582212205c7c774fa8832d9b01b4c101bd277dbc0d760c002316bfa557eb3a7ec4beedd664736f6c63430008120033a2646970667358221220cacd85e146eaa741098855ed2ce101554d7fc9191de65ff468d142f4f1fc9d8064736f6c63430008120033

Deployed Bytecode

0x608060405260043610620002775760003560e01c80639b0710491162000153578063d379be2311620000c5578063dcd128811162000084578063dcd128811462000820578063e20fbce41462000838578063e2179b8e1462000869578063e8f6622814620008d7578063f700b14f14620008f9578063f70dac52146200091d57600080fd5b8063d379be23146200076c578063d5cef133146200078e578063d70b9a4914620007a6578063d826492014620007d1578063da2b122414620007fb57600080fd5b8063b8d090ae1162000112578063b8d090ae146200069e578063ca01a52c14620006b6578063cdf0456414620006e7578063cfe718b61462000723578063d2819ab3146200073b57600080fd5b80639b07104914620005ec5780639d76ea58146200061d578063a381de54146200063f578063a4e0594b1462000661578063acdf6d35146200068657600080fd5b806366e71fbe11620001ed57806387ca9f2a11620001ac57806387ca9f2a146200050e578063938b9f91146200053557806393ef43da146200054d578063954574d7146200058757806395d4c7bb14620005bb57600080fd5b806366e71fbe14620004565780636a7a8485146200047b5780636d9bf9e914620004a05780636e05bb3014620004c557806370ce5d6914620004dd57600080fd5b8063316ec5f5116200023a578063316ec5f5146200039757806332af470114620003d15780633a3e8e6014620004025780634b0b527814620004275780634e4c7d9b146200043e57600080fd5b806307e9dfe2146200027c5780630af5ca7814620002de5780631627905514620003295780632366dc1a14620003655780632e7df3d5146200037f575b600080fd5b3480156200028957600080fd5b50620002c16200029b36600462002185565b60076020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620002eb57600080fd5b506200031a620002fd366004620021c5565b600860209081526000928352604080842090915290825290205481565b604051908152602001620002d5565b3480156200033657600080fd5b506200035462000348366004620021f2565b3b63ffffffff16151590565b6040519015158152602001620002d5565b3480156200037257600080fd5b506200037d62000935565b005b3480156200038c57600080fd5b506200031a600d5481565b348015620003a457600080fd5b50620002c1620003b636600462002210565b600f602052600090815260409020546001600160a01b031681565b348015620003de57600080fd5b506200031a620003f036600462002210565b60046020526000908152604090205481565b3480156200040f57600080fd5b506200031a6200042136600462002210565b62000a7f565b6200037d6200043836600462002278565b62000ab1565b3480156200044b57600080fd5b506200037d62000b3c565b3480156200046357600080fd5b506200037d6200047536600462002340565b62000b7b565b3480156200048857600080fd5b506200037d6200049a366004620021f2565b62000cd2565b348015620004ad57600080fd5b506200037d620004bf36600462002185565b62000d21565b348015620004d257600080fd5b506200031a62000f92565b348015620004ea57600080fd5b506200031a620004fc366004620021f2565b600c6020526000908152604090205481565b3480156200051b57600080fd5b506200052662000fd8565b604051620002d59190620023f6565b3480156200054257600080fd5b506200052662001030565b3480156200055a57600080fd5b50620002c16200056c36600462002210565b6010602052600090815260409020546001600160a01b031681565b3480156200059457600080fd5b50620005ac620005a6366004620021f2565b620010a1565b604051620002d5919062002470565b348015620005c857600080fd5b506200031a620005da366004620021f2565b60096020526000908152604090205481565b348015620005f957600080fd5b506200031a6200060b366004620021f2565b600b6020526000908152604090205481565b3480156200062a57600080fd5b50601254620002c1906001600160a01b031681565b3480156200064c57600080fd5b50601354620002c1906001600160a01b031681565b3480156200066e57600080fd5b506200037d6200068036600462002485565b62001148565b3480156200069357600080fd5b5062000526620013a8565b348015620006ab57600080fd5b506200037d620013fc565b348015620006c357600080fd5b506200031a620006d536600462002210565b60056020526000908152604090205481565b348015620006f457600080fd5b506200031a6200070636600462002210565b336000908152600860209081526040808320938352929052205490565b3480156200073057600080fd5b506200037d620017d3565b3480156200074857600080fd5b506200031a6200075a366004620021f2565b600a6020526000908152604090205481565b3480156200077957600080fd5b50601454620002c1906001600160a01b031681565b3480156200079b57600080fd5b506200031a620018f7565b348015620007b357600080fd5b50620007be620019f5565b60405160ff9091168152602001620002d5565b348015620007de57600080fd5b50620002c1737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156200080857600080fd5b506200037d6200081a366004620021f2565b62001a44565b3480156200082d57600080fd5b506200052662001a93565b3480156200084557600080fd5b506200031a6200085736600462002210565b60066020526000908152604090205481565b3480156200087657600080fd5b50600054600154600254600354620008a3936001600160401b0380821694600160401b9092041692909185565b604080516001600160401b039687168152959094166020860152928401919091526060830152608082015260a001620002d5565b348015620008e457600080fd5b50601154620002c1906001600160a01b031681565b3480156200090657600080fd5b50336000908152600b60205260409020546200031a565b3480156200092a57600080fd5b506200031a600e5481565b60326200094162000f92565b116200096a5760405162461bcd60e51b8152600401620009619062002503565b60405180910390fd5b60015b60328160ff161162000a7c5760ff811660009081526004602052604090205462000a675760ff81166000908152600560205260409020541562000a675760ff811660009081526004602052604081206a0ee3a5f48a68b552000000908190556001805491929091620009e19084906200255c565b9091555050600080546001600160401b0316908062000a008362002572565b82546001600160401b039182166101009390930a9283029190920219909116179055506040516a0ee3a5f48a68b552000000815260ff8216907f1d6deab77e7b3eb85aea9594a90cdaa64ff82c8a9d1707867000536f9eb1f4609060200160405180910390a25b8062000a73816200259b565b9150506200096d565b50565b60008181526005602052604081205462000a9b57600062000aab565b6000828152600660205260409020545b92915050565b62000af483838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525062000475925062000f92915050565b62000b3783838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525085925033915034905062001af3565b505050565b6011546001600160a01b0316331462000b695760405162461bcd60e51b81526004016200096190620025bd565b601180546001600160a01b0319169055565b60005b82518160ff16101562000b375781838260ff168151811062000ba45762000ba4620025f4565b602002602001015160ff16101562000c0a5760405162461bcd60e51b815260206004820152602260248201527f436f6c6c6563746f7256696577733a204441595f414c52454144595f50415353604482015261115160f21b606482015260840162000961565b6000838260ff168151811062000c245762000c24620025f4565b602002602001015160ff1611801562000c6057506032838260ff168151811062000c525762000c52620025f4565b602002602001015160ff1611155b62000cbd5760405162461bcd60e51b815260206004820152602660248201527f436f6c6c6563746f7256696577733a20494e56414c49445f494e564553544d456044820152654e545f44415960d01b606482015260840162000961565b8062000cc9816200259b565b91505062000b7e565b6011546001600160a01b0316331462000cff5760405162461bcd60e51b81526004016200096190620025bd565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b603262000d2d62000f92565b1162000d4d5760405162461bcd60e51b8152600401620009619062002503565b62000d57620019f5565b6000546001600160401b031660ff919091161462000d895760405162461bcd60e51b815260040162000961906200260a565b80821062000de65760405162461bcd60e51b8152602060048201526024808201527f436f6c6c6563746f724554483a20494e56414c49445f524546455252414c5f42604482015263082a886960e31b606482015260840162000961565b600d54600054600160401b90046001600160401b03161062000e5c5760405162461bcd60e51b815260206004820152602860248201527f436f6c6c6563746f724554483a20524546455252414c535f414c52454144595f604482015267141491541054915160c21b606482015260840162000961565b60025460015460009162000e709162002662565b9050825b8281101562000f8c576000818152601060209081526040808320546001600160a01b03168084526009909252822054909181900362000eb557505062000f77565b60008054600160401b90046001600160401b031690600862000ed78362002572565b82546001600160401b039182166101009390930a9283029190920219909116179055506001600160a01b038216600090815260096020526040812055678ac7230489e8000081101562000f2c57505062000f77565b600062000f3a828662001d45565b9050806000600301600082825462000f5391906200255c565b90915550506001600160a01b039092166000908152600a6020526040902091909155505b8062000f838162002679565b91505062000e74565b50505050565b60006363fe9580421162000fa65750600090565b6201518062000fba6363fe95804262002695565b62000fc6919062002662565b62000fd39060016200255c565b905090565b62000fe262002158565b60015b603281116200102c57600081815260046020526040902054828260338110620010125762001012620025f4565b602002015280620010238162002679565b91505062000fe5565b5090565b6200103a62002158565b60015b603281116200102c576000818152600560205260409020546200106257600062001072565b6000818152600660205260409020545b828260338110620010875762001087620025f4565b602002015280620010988162002679565b9150506200103d565b60408051600280825260608083018452926020830190803683370190505090508181600081518110620010d857620010d8620025f4565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110620011235762001123620025f4565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b6040516323b872dd60e01b81523360048201523060248201526044810186905286906001600160a01b038216906323b872dd906064016020604051808303816000875af11580156200119e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c49190620026ab565b5060405163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152602481018790526001600160a01b0382169063095ea7b3906044016020604051808303816000875af115801562001227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200124d9190620026ab565b5060006200125b88620010a1565b90506000737a250d5630b4cf539739df2c5dacb4c659f2488d6318cbafe5898985306200128b42611c206200255c565b6040518663ffffffff1660e01b8152600401620012ad959493929190620026cf565b6000604051808303816000875af1158015620012cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620012f791908101906200270d565b90506200133c86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525062000475925062000f92915050565b6200139d868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250508451889250339150859060019081106200138f576200138f620025f4565b602002602001015162001af3565b505050505050505050565b620013b262002158565b60015b603281116200102c57600081815260056020526040902054828260338110620013e257620013e2620025f4565b602002015280620013f38162002679565b915050620013b5565b60326200140862000f92565b11620014285760405162461bcd60e51b8152600401620009619062002503565b62001432620019f5565b6000546001600160401b031660ff9190911614620014645760405162461bcd60e51b815260040162000961906200260a565b600d54600054600160401b90046001600160401b031614620014d35760405162461bcd60e51b815260206004820152602160248201527f436f6c6c6563746f724554483a20524546455252414c535f4e4f545f524541446044820152605960f81b606482015260840162000961565b6014546001600160a01b0316156200152e5760405162461bcd60e51b815260206004820152601d60248201527f436f6c6c6563746f724554483a20414c52454144595f43524541544544000000604482015260640162000961565b60125460405130916302c7ea00916001600160a01b0390911690620015539062002177565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103906000f08015801562001590573d6000803e3d6000fd5b50601480546001600160a01b0319166001600160a01b0392909216919091179055600354600254600154600090620015ca9084906200255c565b90506000836a4a723dc6b40b8a9a00000011620015e957600062001600565b62001600846a4a723dc6b40b8a9a00000062002695565b6012546040519192506001600160a01b03169084156108fc029085906000818181858888f193505050501580156200163c573d6000803e3d6000fd5b506012546014546040516373a1403560e11b81526001600160a01b0391821660048201526024810185905291169063e742806a906044016020604051808303816000875af115801562001693573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016b99190620026ab565b506012546013546040516373a1403560e11b81526001600160a01b0391821660048201526024810184905291169063e742806a906044016020604051808303816000875af115801562001710573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017369190620026ab565b506012546013546040516373a1403560e11b81526001600160a01b0391821660048201526a084595161401484a000000602482015291169063e742806a906044016020604051808303816000875af115801562001797573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017bd9190620026ab565b5050600060028190556001819055600355505050565b6000546001600160401b031615801590620017ee5750600254155b620018465760405162461bcd60e51b815260206004820152602160248201527f436f6c6c6563746f724554483a204352454154455f544f4b454e5f50524f46496044820152601560fa1b606482015260840162000961565b6000620018533362001d68565b90506000620018623362001e32565b90506200187081836200255c565b6000036200187c575050565b60145460405163442e655160e01b815233600482015260248101849052604481018390526302c7ea0060648201526001600160a01b039091169063442e655190608401600060405180830381600087803b158015620018da57600080fd5b505af1158015620018ef573d6000803e3d6000fd5b505050505050565b6002546000903390158015906200192557506001600160a01b0381166000908152600c602052604090205415155b80156200194757506200193b6032600f6200255c565b6200194562000f92565b115b6200199f5760405162461bcd60e51b815260206004820152602160248201527f436f6c6c6563746f724554483a20524546554e445f4e4f545f504f535349424c6044820152604560f81b606482015260840162000961565b6001600160a01b0381166000818152600c60205260408082208054908390556001839055905190945084156108fc0291859190818181858888f19350505050158015620019f0573d6000803e3d6000fd5b505090565b600060015b60328160ff16116200102c5760ff81166000908152600560205260409020541562001a2f578162001a2b816200259b565b9250505b8062001a3b816200259b565b915050620019fa565b6011546001600160a01b0316331462001a715760405162461bcd60e51b81526004016200096190620025bd565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b62001a9d62002158565b60015b603281116200102c5733600090815260086020908152604080832084845290915290205482826033811062001ad95762001ad9620025f4565b60200201528062001aea8162002679565b91505062001aa0565b826001600160a01b0316826001600160a01b03160362001b26576040516324b6a3cf60e21b815260040160405180910390fd5b63ffffffff833b16151560010362001b515760405163322f599160e21b815260040160405180910390fd5b835162001b669066b1a2bc2ec50000620027a6565b81101562001b875760405163af3900bf60e01b815260040160405180910390fd5b60006001600160a01b0384161562001bbc576103e862001baa8361044c620027a6565b62001bb6919062002662565b62001bbe565b815b8551909150600062001bd1828462002662565b9050600062001be18385620027c0565b905062001c1d868960008151811062001bfe5762001bfe620025f4565b602002602001015160ff16838562001c1791906200255c565b62001e71565b60015b838160ff16101562001c705762001c5b878a8360ff168151811062001c495762001c49620025f4565b602002602001015160ff168562001e71565b8062001c67816200259b565b91505062001c20565b5062001c7d868562001f95565b6001600160a01b0386166000908152600c60205260408120805487929062001ca79084906200255c565b90915550506002805486919060009062001cc39084906200255c565b90915550506001600160a01b03871662001ce1575050505062000f8c565b62001ced878662002028565b856001600160a01b0316876001600160a01b03167f3b54244fd9f24308e8af20c841d18d51e8bf31c6d418e821cbac2448146004568760405162001d3391815260200190565b60405180910390a35050505050505050565b60008162001d55600a8562002662565b62001d619190620027a6565b9392505050565b600060015b60328160ff161162001e2c576001600160a01b038316600090815260086020908152604080832060ff851684529091528120549081900362001db0575062001e17565b68056bc75e2d6310000062001dc88360ff16620020b2565b62001dd49083620027a6565b62001de0919062002662565b62001dec90846200255c565b6001600160a01b038516600090815260086020908152604080832060ff871684529091528120559250505b8062001e23816200259b565b91505062001d6d565b50919050565b6001600160a01b0381166000908152600a6020526040812054801562000aab576001600160a01b0383166000908152600a602052604081205592915050565b6001600160a01b0383166000908152600860209081526040808320858452909152812054900362001ef157600082815260076020908152604080832060068084528285208054865291845291842080546001600160a01b0319166001600160a01b038916179055858452915280549162001eeb8362002679565b91905055505b6001600160a01b03831660009081526008602090815260408083208584529091528120805483929062001f269084906200255c565b90915550506000828152600560205260408120805483929062001f4b9084906200255c565b909155505060405181815282906001600160a01b038516907fee287d5b86673a6b5a6745c9f9b6388c172f629711442458008b4c06b22471639060200160405180910390a3505050565b6001600160a01b0382166000908152600b6020526040812054900362001ff557600e80546000908152600f6020526040812080546001600160a01b0319166001600160a01b0386161790558154919062001fef8362002679565b91905055505b6001600160a01b0382166000908152600b6020526040812080548392906200201f9084906200255c565b90915550505050565b6001600160a01b03821660009081526009602052604081205490036200208857600d8054600090815260106020526040812080546001600160a01b0319166001600160a01b03861617905581549190620020828362002679565b91905055505b6001600160a01b038216600090815260096020526040812080548392906200201f9084906200255c565b6000818152600560209081526040808320546004909252822054829190620020e59068056bc75e2d6310000090620027a6565b620020f1919062002662565b60008481526005602090815260408083205460049092528220549293509091620021269068056bc75e2d6310000090620027a6565b620021329190620027c0565b905080156200214e57620021488260016200255c565b62002150565b815b949350505050565b6040518061066001604052806033906020820280368337509192915050565b610d2b80620027d883390190565b600080604083850312156200219957600080fd5b50508035926020909101359150565b80356001600160a01b0381168114620021c057600080fd5b919050565b60008060408385031215620021d957600080fd5b620021e483620021a8565b946020939093013593505050565b6000602082840312156200220557600080fd5b62001d6182620021a8565b6000602082840312156200222357600080fd5b5035919050565b60008083601f8401126200223d57600080fd5b5081356001600160401b038111156200225557600080fd5b6020830191508360208260051b85010111156200227157600080fd5b9250929050565b6000806000604084860312156200228e57600080fd5b83356001600160401b03811115620022a557600080fd5b620022b3868287016200222a565b9094509250620022c8905060208501620021a8565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620023125762002312620022d1565b604052919050565b60006001600160401b03821115620023365762002336620022d1565b5060051b60200190565b600080604083850312156200235457600080fd5b82356001600160401b038111156200236b57600080fd5b8301601f810185136200237d57600080fd5b803560206200239662002390836200231a565b620022e7565b82815260059290921b83018101918181019088841115620023b657600080fd5b938201935b83851015620023e757843560ff81168114620023d75760008081fd5b82529382019390820190620023bb565b98969091013596505050505050565b6106608101818360005b60338110156200242157815183526020928301929091019060010162002400565b50505092915050565b600081518084526020808501945080840160005b83811015620024655781516001600160a01b0316875295820195908201906001016200243e565b509495945050505050565b60208152600062001d6160208301846200242a565b60008060008060008060a087890312156200249f57600080fd5b620024aa87620021a8565b9550602087013594506040870135935060608701356001600160401b03811115620024d457600080fd5b620024e289828a016200222a565b9094509250620024f7905060808801620021a8565b90509295509295509295565b60208082526023908201527f436f6c6c6563746f724554483a20434f4c4c4543544f525f494e5f50524f475260408201526245535360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000aab5762000aab62002546565b60006001600160401b0380831681810362002591576200259162002546565b6001019392505050565b600060ff821660ff8103620025b457620025b462002546565b60010192915050565b6020808252601c908201527f436f6c6c6563746f724554483a20494e56414c49445f53454e44455200000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f436f6c6c6563746f724554483a20535550504c595f4e4f545f47454e45524154604082015261115160f21b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826200267457620026746200264c565b500490565b6000600182016200268e576200268e62002546565b5060010190565b8181038181111562000aab5762000aab62002546565b600060208284031215620026be57600080fd5b8151801515811462001d6157600080fd5b85815284602082015260a060408201526000620026f060a08301866200242a565b6001600160a01b0394909416606083015250608001529392505050565b600060208083850312156200272157600080fd5b82516001600160401b038111156200273857600080fd5b8301601f810185136200274a57600080fd5b80516200275b62002390826200231a565b81815260059190911b820183019083810190878311156200277b57600080fd5b928401925b828410156200279b5783518252928401929084019062002780565b979650505050505050565b808202811582820484141762000aab5762000aab62002546565b600082620027d257620027d26200264c565b50069056fe61010060405234801561001157600080fd5b50604051610d2b380380610d2b8339810160408190526100309161012b565b806001600160a01b03811661008c5760405162461bcd60e51b815260206004820152601c60248201527f436c61696d657248656c7065723a20494e56414c49445f544f4b454e0000000060448201526064015b60405180910390fd5b6001600160a01b031660805260008290036100f45760405162461bcd60e51b815260206004820152602260248201527f436c61696d6572436f6e74726163743a20494e56414c49445f54494d454652416044820152614d4560f01b6064820152608401610083565b6001600160a01b03831660a0524260c0525060e05250610167565b80516001600160a01b038116811461012657600080fd5b919050565b60008060006060848603121561014057600080fd5b6101498461010f565b92506020840151915061015e6040850161010f565b90509250925092565b60805160a05160c05160e051610b5a6101d160003960008181610161015261054d01526000818161013a01528181610381015281816103b001526105e901526000818161018801526102280152600081816101c70152818161077401526108b60152610b5a6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063913e77ad11610071578063913e77ad1461018357806395366fcb146101c25780639ae697bf146101e9578063a0821be3146101fc578063b5609be41461020f578063bbe4fd501461021757600080fd5b806334354068146100ae578063442e6551146100ca5780635e192de6146100df57806361dcd7ab146101355780636379821f1461015c575b600080fd5b6100b760005481565b6040519081526020015b60405180910390f35b6100dd6100d83660046109c8565b61021d565b005b6101156100ed366004610a01565b6001602081905260009182526040909120805491810154600282015460039092015490919084565b6040805194855260208501939093529183015260608201526080016100c1565b6100b77f000000000000000000000000000000000000000000000000000000000000000081565b6100b77f000000000000000000000000000000000000000000000000000000000000000081565b6101aa7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c1565b6101aa7f000000000000000000000000000000000000000000000000000000000000000081565b6100b76101f7366004610a01565b6102c0565b6100b761020a366004610a01565b610344565b6100dd610425565b426100b7565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102a55760405162461bcd60e51b815260206004820152602260248201527f436c61696d6572436f6e74726163743a20494e56414c49445f434f4c4c45435460448201526127a960f11b60648201526084015b60405180910390fd5b6102b184848484610430565b6102ba846104ba565b50505050565b6001600160a01b0381166000908152600160208190526040822001544290829082106102ed576000610315565b6001600160a01b03841660009081526001602081905260409091200154610315908390610a39565b6001600160a01b03851660009081526001602052604090205490915061033c908290610a52565b949350505050565b6001600160a01b0381166000908152600160208190526040822001544290808303610373575060009392505050565b60008183116103ab576103a67f000000000000000000000000000000000000000000000000000000000000000084610a39565b6103d5565b6103d57f000000000000000000000000000000000000000000000000000000000000000083610a39565b6001600160a01b038616600090815260016020526040902060038101546002820154915492935091610408908490610a52565b6104129190610a69565b61041c9190610a39565b95945050505050565b61042e336104ba565b565b6001600160a01b03841660009081526001602081905260409091200154156104ae5760405162461bcd60e51b815260206004820152602b60248201527f436c61696d6572436f6e74726163743a20524543495049454e545f414c52454160448201526a111657d1539493d313115160aa1b606482015260840161029c565b6102ba8484848461054b565b60006104c582610344565b6001600160a01b0383166000908152600160205260408120600301805492935083929091906104f5908490610a69565b90915550610505905082826106dd565b6040805182815242602082015281516001600160a01b038516927ff4c6297f72d4e746c679dde16c732ea9af03893c22fe2ca98037465dd6a3bb2b928290030190a25050565b7f00000000000000000000000000000000000000000000000000000000000000008110156105c75760405162461bcd60e51b815260206004820152602360248201527f436c61696d6572436f6e74726163743a20494e56414c49445f54494d455f4652604482015262414d4560e81b606482015260840161029c565b82826000546105d69190610a69565b6105e09190610a69565b60005561060d817f0000000000000000000000000000000000000000000000000000000000000000610a69565b6001600160a01b038516600090815260016020819052604090912001556106348184610a92565b6001600160a01b038516600090815260016020526040902055816106588285610aa6565b6106629190610a69565b6001600160a01b0385166000908152600160205260408120600201919091555461068b9061084e565b60408051828152602081018590529081018390526001600160a01b038516907f8ceefb1ee30c963bc99d8216add67b76190bb2d0403a4e8f0e321ae3e41d7fbe9060600160405180910390a250505050565b806000808282546106ee9190610a39565b9091555050604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283927f0000000000000000000000000000000000000000000000000000000000000000169161079f9190610aba565b6000604051808303816000865af19150503d80600081146107dc576040519150601f19603f3d011682016040523d82523d6000602084013e6107e1565b606091505b50915091508180156108025750808060200190518101906108029190610ae9565b6102ba5760405162461bcd60e51b815260206004820152601e60248201527f436c61696d657248656c7065723a205452414e534645525f4641494c45440000604482015260640161029c565b604080518082018252601281527162616c616e63654f6628616464726573732960701b602091820152815130602480830191909152835180830390910181526044909101835290810180516001600160e01b03166370a0823160e01b179052905160009182917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916108e891610aba565b6000604051808303816000865af19150503d8060008114610925576040519150601f19603f3d011682016040523d82523d6000602084013e61092a565b606091505b509150915081801561094f5750828180602001905181019061094c9190610b0b565b10155b6109a75760405162461bcd60e51b815260206004820152602360248201527f436c61696d657248656c7065723a2042414c414e43455f434845434b5f46414960448201526213115160ea1b606482015260840161029c565b505050565b80356001600160a01b03811681146109c357600080fd5b919050565b600080600080608085870312156109de57600080fd5b6109e7856109ac565b966020860135965060408601359560600135945092505050565b600060208284031215610a1357600080fd5b610a1c826109ac565b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a4c57610a4c610a23565b92915050565b8082028115828204841417610a4c57610a4c610a23565b80820180821115610a4c57610a4c610a23565b634e487b7160e01b600052601260045260246000fd5b600082610aa157610aa1610a7c565b500490565b600082610ab557610ab5610a7c565b500690565b6000825160005b81811015610adb5760208186018101518583015201610ac1565b506000920191825250919050565b600060208284031215610afb57600080fd5b81518015158114610a1c57600080fd5b600060208284031215610b1d57600080fd5b505191905056fea26469706673582212205c7c774fa8832d9b01b4c101bd277dbc0d760c002316bfa557eb3a7ec4beedd664736f6c63430008120033a2646970667358221220cacd85e146eaa741098855ed2ce101554d7fc9191de65ff468d142f4f1fc9d8064736f6c63430008120033

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.